File indexing completed on 2025-02-02 04:11:07
0001 /* 0002 * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "shape.hpp" 0010 0011 namespace glaxnimate::model { 0012 0013 0014 class PolyStar : public Shape 0015 { 0016 GLAXNIMATE_OBJECT(PolyStar) 0017 0018 public: 0019 enum StarType 0020 { 0021 Star = 1, 0022 Polygon = 2, 0023 }; 0024 0025 Q_ENUM(StarType) 0026 0027 GLAXNIMATE_PROPERTY(StarType, type, Star, {}, {}, PropertyTraits::Visual) 0028 GLAXNIMATE_ANIMATABLE(QPointF, position, QPointF()) 0029 GLAXNIMATE_ANIMATABLE(float, outer_radius, 0, {}, 0) 0030 GLAXNIMATE_ANIMATABLE(float, inner_radius, 0, {}, 0) 0031 GLAXNIMATE_ANIMATABLE(float, angle, 0, {}, 0, 360, true) 0032 GLAXNIMATE_ANIMATABLE(int, points, 5) 0033 GLAXNIMATE_ANIMATABLE(float, outer_roundness, 0, {}, 0, 100, false, PropertyTraits::Percent) 0034 GLAXNIMATE_ANIMATABLE(float, inner_roundness, 0, {}, 0, 100, false, PropertyTraits::Percent) 0035 0036 public: 0037 using Shape::Shape; 0038 0039 QIcon tree_icon() const override 0040 { 0041 if ( type.get() == Star ) 0042 return QIcon::fromTheme("draw-star"); 0043 return QIcon::fromTheme("draw-polygon"); 0044 } 0045 0046 QString type_name_human() const override 0047 { 0048 return i18n("PolyStar"); 0049 } 0050 0051 math::bezier::Bezier to_bezier(FrameTime t) const override; 0052 0053 QRectF local_bounding_rect(FrameTime t) const override 0054 { 0055 float radius = qMax(this->outer_radius.get_at(t), this->inner_radius.get_at(t)); 0056 return QRectF(position.get_at(t) - QPointF(radius, radius), QSizeF(radius*2, radius*2)); 0057 } 0058 0059 bool is_rounded() const; 0060 0061 static math::bezier::Bezier draw( 0062 StarType type, const QPointF& pos, float r_in, float r_out, 0063 float angle_radians, int p, float round_in, float round_out, bool reverse); 0064 }; 0065 0066 } // namespace glaxnimate::model 0067