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 "stroke.hpp" 0008 GLAXNIMATE_OBJECT_IMPL(glaxnimate::model::Stroke) 0009 0010 void glaxnimate::model::Stroke::on_paint(QPainter* p, glaxnimate::model::FrameTime t, glaxnimate::model::VisualNode::PaintMode, glaxnimate::model::Modifier* modifier) const 0011 { 0012 QPen pen(brush(t), width.get_at(t)); 0013 pen.setCapStyle(Qt::PenCapStyle(cap.get())); 0014 pen.setJoinStyle(Qt::PenJoinStyle(join.get())); 0015 pen.setMiterLimit(miter_limit.get()); 0016 p->setBrush(Qt::NoBrush); 0017 p->setPen(pen); 0018 p->setOpacity(p->opacity() * opacity.get_at(t)); 0019 0020 math::bezier::MultiBezier bez; 0021 if ( modifier ) 0022 bez = modifier->collect_shapes(t, {}); 0023 else 0024 bez = collect_shapes(t, {}); 0025 0026 p->drawPath(bez.painter_path()); 0027 } 0028 0029 void glaxnimate::model::Stroke::set_pen_style ( const QPen& pen_style ) 0030 { 0031 color.set(pen_style.color()); 0032 width.set(pen_style.width()); 0033 cap.set(glaxnimate::model::Stroke::Cap(pen_style.capStyle())); 0034 join.set(glaxnimate::model::Stroke::Join(pen_style.joinStyle())); 0035 miter_limit.set(pen_style.miterLimit()); 0036 } 0037 0038 void glaxnimate::model::Stroke::set_pen_style_undoable(const QPen& pen_style) 0039 { 0040 color.set_undoable(pen_style.color()); 0041 width.set_undoable(pen_style.width()); 0042 cap.set_undoable(QVariant::fromValue(glaxnimate::model::Stroke::Cap(pen_style.capStyle()))); 0043 join.set_undoable(QVariant::fromValue(glaxnimate::model::Stroke::Join(pen_style.joinStyle()))); 0044 miter_limit.set_undoable(pen_style.miterLimit()); 0045 } 0046 0047 QPainterPath glaxnimate::model::Stroke::to_painter_path_impl(glaxnimate::model::FrameTime t) const 0048 { 0049 QPainterPathStroker s; 0050 s.setWidth(width.get_at(t)); 0051 s.setCapStyle(Qt::PenCapStyle(cap.get())); 0052 s.setJoinStyle(Qt::PenJoinStyle(join.get())); 0053 s.setMiterLimit(miter_limit.get()); 0054 return s.createStroke(collect_shapes(t, {}).painter_path()); 0055 }