Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2021 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 :
23 : #pragma once
24 :
25 : #include <memory>
26 :
27 : #include "types/brush.h"
28 : #include "types/drawtypes.h"
29 : #include "types/geometry.h"
30 : #include "types/font.h"
31 : #include "types/pen.h"
32 : #include "types/pixmap.h"
33 : #include "types/transform.h"
34 : #include "types/painterpath.h"
35 :
36 : namespace muse::draw {
37 : class Painter;
38 : class IPaintProvider
39 : {
40 : public:
41 25 : virtual ~IPaintProvider() = default;
42 :
43 : virtual bool isActive() const = 0;
44 : virtual void beginTarget(const std::string& name) = 0;
45 : virtual void beforeEndTargetHook(Painter* painter) = 0;
46 : virtual bool endTarget(bool endDraw = false) = 0;
47 : virtual void beginObject(const std::string& name) = 0;
48 : virtual void endObject() = 0;
49 :
50 : virtual void setAntialiasing(bool arg) = 0;
51 : virtual void setCompositionMode(CompositionMode mode) = 0;
52 : virtual void setWindow(const RectF& window) = 0;
53 : virtual void setViewport(const RectF& viewport) = 0;
54 :
55 : virtual void setFont(const Font& font) = 0;
56 : virtual const Font& font() const = 0;
57 :
58 : virtual void setPen(const Pen& pen) = 0;
59 : virtual void setNoPen() = 0;
60 : virtual const Pen& pen() const = 0;
61 :
62 : virtual void setBrush(const Brush& brush) = 0;
63 : virtual const Brush& brush() const = 0;
64 :
65 : virtual void save() = 0;
66 : virtual void restore() = 0;
67 :
68 : virtual double deviceLogicalDpi() const = 0;
69 :
70 : virtual void setTransform(const Transform& transform) = 0;
71 : virtual const Transform& transform() const = 0;
72 :
73 : // drawing functions
74 : virtual void drawPath(const PainterPath& path) = 0;
75 : virtual void drawPolygon(const PointF* points, size_t pointCount, PolygonMode mode) = 0;
76 :
77 : virtual void drawText(const PointF& point, const String& text) = 0;
78 : virtual void drawText(const RectF& rect, Alignment alignment, TextFlags textFlags, const String& text) = 0;
79 :
80 : virtual void drawSymbol(const PointF& point, char32_t ucs4Code) = 0;
81 :
82 : virtual void drawPixmap(const PointF& point, const Pixmap& pm) = 0;
83 : virtual void drawTiledPixmap(const RectF& rect, const Pixmap& pm, const PointF& offset = PointF()) = 0;
84 :
85 : #ifndef NO_QT_SUPPORT
86 : virtual void drawPixmap(const PointF& point, const QPixmap& pm) = 0;
87 : virtual void drawTiledPixmap(const RectF& rect, const QPixmap& pm, const PointF& offset = PointF()) = 0;
88 : #endif
89 :
90 : virtual bool hasClipping() const = 0;
91 :
92 : virtual void setClipRect(const RectF& rect) = 0;
93 : virtual void setMask(const RectF& background, const std::vector<RectF>& maskRects) = 0;
94 : virtual void setClipping(bool enable) = 0;
95 : };
96 :
97 : using IPaintProviderPtr = std::shared_ptr<IPaintProvider>;
98 : }
|