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 }