File indexing completed on 2025-02-02 04:11:08

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "styler.hpp"
0008 #include "model/document.hpp"
0009 #include "model/assets/named_color.hpp"
0010 
0011 std::vector<glaxnimate::model::DocumentNode*> glaxnimate::model::Styler::valid_uses() const
0012 {
0013     auto v = document()->assets()->gradients->values.valid_reference_values(true);
0014     auto v2 = document()->assets()->colors->values.valid_reference_values(false);
0015     v.insert(v.end(), v2.begin(), v2.end());
0016     return v;
0017 }
0018 
0019 bool glaxnimate::model::Styler::is_valid_use(DocumentNode* node) const
0020 {
0021     return
0022         document()->assets()->gradients->values.is_valid_reference_value(node, true) ||
0023         document()->assets()->colors->values.is_valid_reference_value(node, false);
0024 }
0025 
0026 void glaxnimate::model::Styler::on_use_changed(glaxnimate::model::BrushStyle* new_use, glaxnimate::model::BrushStyle* old_use)
0027 {
0028     QColor reset;
0029 
0030     if ( old_use )
0031     {
0032         disconnect(old_use, &BrushStyle::style_changed, this, &Styler::on_update_style);
0033         if ( auto old_col = qobject_cast<glaxnimate::model::NamedColor*>(old_use) )
0034             reset = old_col->color.get();
0035     }
0036 
0037     if ( new_use )
0038     {
0039         connect(new_use, &BrushStyle::style_changed, this, &Styler::on_update_style);
0040         if ( auto new_col = qobject_cast<glaxnimate::model::NamedColor*>(new_use) )
0041             reset = new_col->color.get();
0042     }
0043 
0044     if ( reset.isValid() )
0045         color.set(reset);
0046 
0047     Q_EMIT use_changed(new_use);
0048     Q_EMIT use_changed_from(old_use, new_use);
0049 }
0050 
0051 void glaxnimate::model::Styler::on_update_style()
0052 {
0053     Q_EMIT property_changed(&use, use.value());
0054 }
0055 
0056 QBrush glaxnimate::model::Styler::brush(FrameTime t) const
0057 {
0058     if ( use.get() )
0059         return use->brush_style(t);
0060     return color.get_at(t);
0061 }