Krita Source Code Documentation
Loading...
Searching...
No Matches
KoSvgTextPropertiesModel.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2024 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef KOSVGTEXTPROPERTIESMODEL_H
7#define KOSVGTEXTPROPERTIESMODEL_H
8
9#include <QObject>
10#include <lager/cursor.hpp>
11#include <lager/extra/qt.hpp>
12#include <lager/state.hpp>
13
14#include "KoSvgText.h"
17#include "LineHeightModel.h"
18#include "TextIndentModel.h"
19#include "TabSizeModel.h"
20#include "TextTransformModel.h"
21#include "CssFontStyleModel.h"
25
26#include <kritaflake_export.h>
27
37class KRITAFLAKE_EXPORT KoSvgTextPropertiesModel : public QObject
38{
39 Q_OBJECT
40 Q_PROPERTY(CssLengthPercentageModel *fontSize READ fontSize NOTIFY fontSizeChanged)
41 Q_PROPERTY(LineHeightModel *lineHeight READ lineHeight NOTIFY lineHeightChanged)
42 Q_PROPERTY(CssLengthPercentageModel *letterSpacing READ letterSpacing NOTIFY letterSpacingChanged)
43 Q_PROPERTY(CssLengthPercentageModel *wordSpacing READ wordSpacing NOTIFY wordSpacingChanged)
44 Q_PROPERTY(CssLengthPercentageModel *baselineShiftValue READ baselineShiftValue NOTIFY baselineShiftValueChanged)
45 Q_PROPERTY(TextIndentModel *textIndent READ textIndent NOTIFY textIndentChanged)
46 Q_PROPERTY(TabSizeModel *tabSize READ tabSize NOTIFY tabSizeChanged)
47 Q_PROPERTY(TextTransformModel *textTransform READ textTransform NOTIFY textTransformChanged)
48 Q_PROPERTY(CssFontStyleModel *fontStyle READ fontStyle NOTIFY fontStyleChanged)
49 Q_PROPERTY(FontVariantLigaturesModel *fontVariantLigatures READ fontVariantLigatures NOTIFY fontVariantLigaturesChanged)
50 Q_PROPERTY(FontVariantNumericModel *fontVariantNumeric READ fontVariantNumeric NOTIFY fontVariantNumericChanged)
51 Q_PROPERTY(FontVariantEastAsianModel *fontVariantEastAsian READ fontVariantEastAsian NOTIFY fontVariantEastAsianChanged)
52 Q_PROPERTY(CssLengthPercentageModel *shapePadding READ shapePadding NOTIFY shapePaddingChanged)
53 Q_PROPERTY(CssLengthPercentageModel *shapeMargin READ shapeMargin NOTIFY shapeMarginChanged)
54public:
55 KoSvgTextPropertiesModel(lager::cursor<KoSvgTextPropertyData> _textData = lager::make_state(KoSvgTextPropertyData(), lager::automatic_tag{}));
56
57 lager::cursor<KoSvgTextPropertyData> textData;
58 lager::cursor<KoSvgTextProperties> commonProperties;
59 lager::cursor<KoSvgText::CssLengthPercentage> fontSizeData;
60 lager::cursor<KoSvgText::LineHeightInfo> lineHeightData;
61 lager::cursor<KoSvgText::CssLengthPercentage> letterSpacingData;
62 lager::cursor<KoSvgText::CssLengthPercentage> wordSpacingData;
63 lager::cursor<KoSvgText::CssLengthPercentage> baselineShiftValueData;
64 lager::cursor<KoSvgText::TextIndentInfo> textIndentData;
65 lager::cursor<KoSvgText::TabSizeInfo> tabSizeData;
66 lager::cursor<KoSvgText::TextTransformInfo> textTransformData;
67 lager::cursor<KoSvgText::CssFontStyleData> cssFontStyleData;
68 lager::cursor<KoSvgText::FontFeatureLigatures> fontVariantLigaturesData;
69 lager::cursor<KoSvgText::FontFeatureNumeric> fontVariantNumericData;
70 lager::cursor<KoSvgText::FontFeatureEastAsian> fontVariantEastAsianData;
71 lager::cursor<KoSvgText::CssLengthPercentage> shapePaddingData;
72 lager::cursor<KoSvgText::CssLengthPercentage> shapeMarginData;
73
74
77
81
86
90
93
94 // Whether a given property is set, unset or tristate.
101 Q_ENUM(PropertyState)
102
104 LAGER_QT_CURSOR(PropertyState, fontSizeState);
105 LineHeightModel *lineHeight();
106 LAGER_QT_CURSOR(PropertyState, lineHeightState);
107
108 CssLengthPercentageModel *letterSpacing();
109 LAGER_QT_CURSOR(PropertyState, letterSpacingState);
111 LAGER_QT_CURSOR(PropertyState, wordSpacingState);
112 CssLengthPercentageModel *baselineShiftValue();
113
114 TextIndentModel *textIndent();
115 LAGER_QT_CURSOR(PropertyState, textIndentState);
116 TabSizeModel *tabSize();
117 LAGER_QT_CURSOR(PropertyState, tabSizeState);
118 TextTransformModel *textTransform();
119 LAGER_QT_CURSOR(PropertyState, textTransformState);
120
121 CssFontStyleModel *fontStyle();
122 LAGER_QT_CURSOR(PropertyState, fontStyleState);
123
124 LAGER_QT_CURSOR(int, writingMode);
125 LAGER_QT_CURSOR(PropertyState, writingModeState);
126 LAGER_QT_CURSOR(int, direction);
127 LAGER_QT_CURSOR(PropertyState, directionState);
128 LAGER_QT_CURSOR(int, unicodeBidi);
129 LAGER_QT_CURSOR(PropertyState, unicodeBidiState);
130 LAGER_QT_CURSOR(int, textAlignAll);
131 LAGER_QT_CURSOR(PropertyState, textAlignAllState);
132 LAGER_QT_CURSOR(int, textAlignLast);
133 LAGER_QT_CURSOR(PropertyState, textAlignLastState);
134 LAGER_QT_CURSOR(int, textAnchor);
135 LAGER_QT_CURSOR(PropertyState, textAnchorState);
136
137 LAGER_QT_CURSOR(int, fontWeight);
138 LAGER_QT_CURSOR(PropertyState, fontWeightState);
139 LAGER_QT_CURSOR(int, fontWidth);
140 LAGER_QT_CURSOR(PropertyState, fontWidthState);
141
142 LAGER_QT_CURSOR(bool, fontOpticalSizeLink);
143 LAGER_QT_CURSOR(PropertyState, fontOpticalSizeLinkState);
144
145 LAGER_QT_CURSOR(QVariantMap, axisValues);
146 LAGER_QT_CURSOR(PropertyState, axisValuesState);
147
148 LAGER_QT_CURSOR(QStringList, fontFamilies);
149 LAGER_QT_CURSOR(PropertyState, fontFamiliesState);
150
151 LAGER_QT_CURSOR(bool, textDecorationUnderline);
152 LAGER_QT_CURSOR(bool, textDecorationOverline);
153 LAGER_QT_CURSOR(bool, textDecorationLineThrough);
154 LAGER_QT_CURSOR(PropertyState, textDecorationLineState);
155
156 LAGER_QT_CURSOR(int, textDecorationStyle);
157 LAGER_QT_CURSOR(PropertyState, textDecorationStyleState);
158
159 LAGER_QT_CURSOR(QColor, textDecorationColor);
160 LAGER_QT_CURSOR(PropertyState, textDecorationColorState);
161
162 LAGER_QT_CURSOR(int, textDecorationUnderlinePosHorizontal);
163 LAGER_QT_CURSOR(int, textDecorationUnderlinePosVertical);
164 LAGER_QT_CURSOR(PropertyState, textDecorationUnderlinePositionState);
165
171 Q_ENUM(HangComma)
172 LAGER_QT_CURSOR(bool, hangingPunctuationFirst);
173 LAGER_QT_CURSOR(HangComma, hangingPunctuationComma);
174 LAGER_QT_CURSOR(bool, hangingPunctuationLast);
175 LAGER_QT_CURSOR(PropertyState, hangingPunctuationState);
176
177 LAGER_QT_CURSOR(int, alignmentBaseline);
178 LAGER_QT_CURSOR(PropertyState, alignmentBaselineState);
179 LAGER_QT_CURSOR(int, dominantBaseline);
180 LAGER_QT_CURSOR(PropertyState, dominantBaselineState);
181 LAGER_QT_CURSOR(int, baselineShiftMode);
182 LAGER_QT_CURSOR(PropertyState, baselineShiftState);
183
184 LAGER_QT_CURSOR(int, wordBreak);
185 LAGER_QT_CURSOR(PropertyState, wordBreakState);
186 LAGER_QT_CURSOR(int, lineBreak);
187 LAGER_QT_CURSOR(PropertyState, lineBreakState);
188
189 LAGER_QT_CURSOR(bool, fontSynthesisWeight);
190 LAGER_QT_CURSOR(PropertyState, fontSynthesisWeightState);
191 LAGER_QT_CURSOR(bool, fontSynthesisStyle);
192 LAGER_QT_CURSOR(PropertyState, fontSynthesisStyleState);
193
194
195 LAGER_QT_CURSOR(int, fontVariantPosition);
196 LAGER_QT_CURSOR(PropertyState, fontVariantPositionState);
197 LAGER_QT_CURSOR(int, fontVariantCaps);
198 LAGER_QT_CURSOR(PropertyState, fontVariantCapsState);
199
200 FontVariantLigaturesModel *fontVariantLigatures();
201 LAGER_QT_CURSOR(PropertyState, fontVariantLigaturesState);
202 FontVariantNumericModel *fontVariantNumeric();
203 LAGER_QT_CURSOR(PropertyState, fontVariantNumericState);
204 FontVariantEastAsianModel *fontVariantEastAsian();
205 LAGER_QT_CURSOR(PropertyState, fontVariantEastAsianState);
206
207 LAGER_QT_CURSOR(QVariantMap, fontFeatureSettings);
208 LAGER_QT_CURSOR(PropertyState, fontFeatureSettingsState);
209
210 LAGER_QT_CURSOR(bool, fontKerning);
211 LAGER_QT_CURSOR(PropertyState, fontKerningState);
212
213 LAGER_QT_CURSOR(QString, language);
214 LAGER_QT_CURSOR(PropertyState, languageState);
215
216 LAGER_QT_CURSOR(qreal, fontSizeAdjust);
217 LAGER_QT_CURSOR(PropertyState, fontSizeAdjustState);
218
219 LAGER_QT_CURSOR(int, textCollapse);
220 LAGER_QT_CURSOR(PropertyState, textCollapseState);
221 LAGER_QT_CURSOR(int, textWrap);
222 LAGER_QT_CURSOR(PropertyState, textWrapState);
223
224 LAGER_QT_CURSOR(int, textRendering);
225 LAGER_QT_CURSOR(PropertyState, textRenderingState);
226
228 LAGER_QT_CURSOR(PropertyState, shapePaddingState);
230 LAGER_QT_CURSOR(PropertyState, shapeMarginState);
231
233 LAGER_QT_CURSOR(bool, spanSelection);
234
235 // Check if this model is abled at all.
236 LAGER_QT_CURSOR(bool, enabled);
237
245 Q_INVOKABLE qreal resolvedFontSize(bool fontSize = false);
246
254 Q_INVOKABLE qreal resolvedXHeight(bool fontSize = false);
255
256Q_SIGNALS:
257 void textPropertyChanged();
258 void fontSizeChanged();
259 void lineHeightChanged();
260
261 void letterSpacingChanged();
262 void wordSpacingChanged();
263 void baselineShiftValueChanged();
264
265 void textIndentChanged();
266 void tabSizeChanged();
267 void textTransformChanged();
268 void fontStyleChanged();
269
270 void fontVariantLigaturesChanged();
271 void fontVariantNumericChanged();
272 void fontVariantEastAsianChanged();
273
274 void shapePaddingChanged();
275 void shapeMarginChanged();
276};
277
278#endif // KOSVGTEXTPROPERTIESMODEL_H
@ ForceHang
Force hanging at the start or end of a line, never measured for justification.
The KoSvgTextPropertiesModel class.
lager::cursor< KoSvgText::TabSizeInfo > tabSizeData
lager::cursor< KoSvgTextProperties > commonProperties
lager::cursor< KoSvgTextPropertyData > textData
CssLengthPercentageModel baselineShiftValueModel
CssLengthPercentageModel shapeMarginModel
CssLengthPercentageModel fontSizeModel
FontVariantEastAsianModel fontVariantEastAsianModel
lager::cursor< KoSvgText::FontFeatureEastAsian > fontVariantEastAsianData
FontVariantLigaturesModel fontVariantLigaturesModel
lager::cursor< KoSvgText::FontFeatureLigatures > fontVariantLigaturesData
lager::cursor< KoSvgText::TextTransformInfo > textTransformData
FontVariantNumericModel fontVariantNumericModel
lager::cursor< KoSvgText::CssLengthPercentage > letterSpacingData
lager::cursor< KoSvgText::CssLengthPercentage > shapePaddingData
@ PropertyTriState
The property has a mixed value across the range of current properties, the inherited properties are r...
@ PropertyUnset
The property is neither set on the inherited properties or the current properties,...
@ PropertySet
The property is set on the current properties.
lager::cursor< KoSvgText::CssLengthPercentage > baselineShiftValueData
lager::cursor< KoSvgText::CssLengthPercentage > wordSpacingData
lager::cursor< KoSvgText::TextIndentInfo > textIndentData
lager::cursor< KoSvgText::LineHeightInfo > lineHeightData
CssLengthPercentageModel letterSpacingModel
lager::cursor< KoSvgText::CssFontStyleData > cssFontStyleData
CssLengthPercentageModel wordSpacingModel
lager::cursor< KoSvgText::FontFeatureNumeric > fontVariantNumericData
CssLengthPercentageModel shapePaddingModel
lager::cursor< KoSvgText::CssLengthPercentage > shapeMarginData
lager::cursor< KoSvgText::CssLengthPercentage > fontSizeData
The KoSvgTextPropertyData struct.