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 }