Krita Source Code Documentation
Loading...
Searching...
No Matches
KoSvgTextPropertiesModel.cpp
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#include <KisLager.h>
9#include <lager/constant.hpp>
10#include <QDebug>
11
13
14namespace {
15
16auto createTextProperty = [](KoSvgTextProperties::PropertyId propId) { return lager::lenses::getset(
17 [propId](const KoSvgTextPropertyData &value) -> QVariant {
18 QVariant defaultVar = value.inheritedProperties.propertyOrDefault(propId);
19 return value.commonProperties.property(propId, defaultVar);
20 },
21 [propId](KoSvgTextPropertyData value, const QVariant &variant) -> KoSvgTextPropertyData {
22 value.commonProperties.setProperty(propId, variant);
23 return value;
24 }
25 );
26};
27
28auto propertyModifyState = [](KoSvgTextProperties::PropertyId propId) { return lager::lenses::getset(
30 if (value.commonProperties.hasProperty(propId)) {
31 return KoSvgTextPropertiesModel::PropertySet;
32 } else if (value.tristate.contains(propId)) {
33 return KoSvgTextPropertiesModel::PropertyTriState;
34 } else if (value.inheritedProperties.hasProperty(propId) && value.inheritedProperties.propertyIsInheritable(propId)) {
35 return KoSvgTextPropertiesModel::PropertyInherited;
36 }
38 },
41 value.commonProperties.setProperty(propId, value.inheritedProperties.propertyOrDefault(propId));
42 } else {
43 // Because tristate represents properties that are set but mixed, there's no value in being able to set them from the UX.
44 // so if we receive such a signal, it is incorrect.
46 qWarning() << "Receiving request to set property tristate or inherited, this will unset the property instead";
47 }
48 value.commonProperties.removeProperty(propId);
49 }
50 value.tristate.remove(propId);
51 return value;
52 }
53 );
54};
55
56auto simplifiedAutoLengthPropertyImpl = lager::lenses::getset(
59 },
61 length.length = val; length.isAuto = false; return length;
62 }
63 );
64
65auto simplifiedAutoLengthProperty = variant_to<KoSvgText::AutoLengthPercentage> | simplifiedAutoLengthPropertyImpl;
66
67// Used for font-kerning.
68auto autoValueToBoolImpl = lager::lenses::getset(
69 [](const KoSvgText::AutoValue &value) -> bool {
70 return value.isAuto;
71 },
72 [](KoSvgText::AutoValue value, const bool &val){
73 value.isAuto = val;
74 if (!val) {
75 value.customValue = 0;
76 }
77 return value;
78 }
79 );
80
81auto autoValueToBool = variant_to<KoSvgText::AutoValue> | autoValueToBoolImpl;
82
83// Used for font-size-adjust.
84auto autoValueSimplifiedImpl = lager::lenses::getset(
85 [](const KoSvgText::AutoValue &value) -> qreal {
86 return value.isAuto? 0.0: value.customValue;
87 },
88 [](KoSvgText::AutoValue value, const qreal &val){
89 value.customValue = val < 0? 0: val;
90 value.isAuto = value.customValue > 0? false: true;
91 return value;
92 }
93 );
94
95auto autoValueSimplified = variant_to<KoSvgText::AutoValue> | autoValueSimplifiedImpl;
96
97auto textDecorLinePropImpl = [](KoSvgText::TextDecoration flag) {
98 return lager::lenses::getset(
99 [flag] (const KoSvgText::TextDecorations &value) -> bool {
100 return value.testFlag(flag);
101 },
102 [flag] (KoSvgText::TextDecorations value, const bool &val){
103 value.setFlag(flag, val);
104 return value;
105 }
106 );
107};
108
109auto textDecorLineProp = [](KoSvgText::TextDecoration flag) {
110 return variant_to<KoSvgText::TextDecorations> | textDecorLinePropImpl(flag);
111};
112
113auto textDecorPosPropImpl = [](bool isHorizontal) {
114 return lager::lenses::getset(
115 [isHorizontal] (const KoSvgText::TextUnderlinePosition &value) -> int {
116 return isHorizontal? value.horizontalPosition: value.verticalPosition;
117 },
118 [isHorizontal] (KoSvgText::TextUnderlinePosition value, const int &val){
119 if (isHorizontal) {
120 value.horizontalPosition = KoSvgText::TextDecorationUnderlinePosition(val);
121 } else {
123 }
124 return value;
125 }
126 );
127};
128
129auto textDecorPosProp = [](bool isHorizontal) {
130 return variant_to<KoSvgText::TextUnderlinePosition> | textDecorPosPropImpl(isHorizontal);
131};
132
133auto hangPunctuationPropImpl = [](KoSvgText::HangingPunctuation flag) {
134 return lager::lenses::getset(
135 [flag] (const KoSvgText::HangingPunctuations &value) -> bool {
136 return value.testFlag(flag);
137 },
138 [flag] (KoSvgText::HangingPunctuations value, const bool &val){
139 value.setFlag(flag, val);
140 return value;
141 }
142 );
143};
144
145auto hangPunctuationProp = [](KoSvgText::HangingPunctuation flag) {
146 return variant_to<KoSvgText::HangingPunctuations> | hangPunctuationPropImpl(flag);
147};
148
149auto hangingPunactuationCommaPropImpl = lager::lenses::getset(
150 [] (const KoSvgText::HangingPunctuations &value) -> KoSvgTextPropertiesModel::HangComma {
151 if (value.testFlag(KoSvgText::HangEnd)) {
152 return value.testFlag(KoSvgText::HangForce) ?
153 KoSvgTextPropertiesModel::HangComma::ForceHang :
154 KoSvgTextPropertiesModel::HangComma::AllowHang;
155 }
157 },
158 [] (KoSvgText::HangingPunctuations value, const KoSvgTextPropertiesModel::HangComma &val){
159 switch (val) {
161 value.setFlag(KoSvgText::HangEnd, false);
162 value.setFlag(KoSvgText::HangForce, false);
163 break;
165 value.setFlag(KoSvgText::HangEnd, true);
166 value.setFlag(KoSvgText::HangForce, false);
167 break;
169 value.setFlag(KoSvgText::HangEnd, true);
170 value.setFlag(KoSvgText::HangForce, true);
171 break;
172 }
173 return value;
174 }
175 );
176
177auto hangingPunactuationCommaProp =
178 variant_to<KoSvgText::HangingPunctuations> | hangingPunactuationCommaPropImpl;
179
180}
181
183 if (value.commonProperties.hasProperty(propId)) {
185 } else if (value.tristate.contains(propId) || value.inheritedProperties.hasProperty(propId)) {
187 }
189
190};
191};
192
193KoSvgTextPropertiesModel::KoSvgTextPropertiesModel(lager::cursor<KoSvgTextPropertyData> _textData)
194 : textData(_textData)
195 , commonProperties(textData[&KoSvgTextPropertyData::commonProperties])
196 , fontSizeData(textData.zoom(createTextProperty(KoSvgTextProperties::FontSizeId)).zoom(variant_to<KoSvgText::CssLengthPercentage>))
197 , lineHeightData(textData.zoom(createTextProperty(KoSvgTextProperties::LineHeightId)).zoom(variant_to<KoSvgText::LineHeightInfo>))
198 , letterSpacingData(textData.zoom(createTextProperty(KoSvgTextProperties::LetterSpacingId)).zoom(simplifiedAutoLengthProperty))
199 , wordSpacingData(textData.zoom(createTextProperty(KoSvgTextProperties::WordSpacingId)).zoom(simplifiedAutoLengthProperty))
200 , baselineShiftValueData(textData.zoom(createTextProperty(KoSvgTextProperties::BaselineShiftValueId)).zoom(variant_to<KoSvgText::CssLengthPercentage>))
201 , textIndentData(textData.zoom(createTextProperty(KoSvgTextProperties::TextIndentId)).zoom(variant_to<KoSvgText::TextIndentInfo>))
202 , tabSizeData(textData.zoom(createTextProperty(KoSvgTextProperties::TabSizeId)).zoom(variant_to<KoSvgText::TabSizeInfo>))
203 , textTransformData(textData.zoom(createTextProperty(KoSvgTextProperties::TextTransformId)).zoom(variant_to<KoSvgText::TextTransformInfo>))
204 , cssFontStyleData(textData.zoom(createTextProperty(KoSvgTextProperties::FontStyleId)).zoom(variant_to<KoSvgText::CssFontStyleData>))
205 , fontVariantLigaturesData(textData.zoom(createTextProperty(KoSvgTextProperties::FontVariantLigatureId)).zoom(variant_to<KoSvgText::FontFeatureLigatures>))
206 , fontVariantNumericData(textData.zoom(createTextProperty(KoSvgTextProperties::FontVariantNumericId)).zoom(variant_to<KoSvgText::FontFeatureNumeric>))
207 , fontVariantEastAsianData(textData.zoom(createTextProperty(KoSvgTextProperties::FontVariantEastAsianId)).zoom(variant_to<KoSvgText::FontFeatureEastAsian>))
208 , fontSizeModel(fontSizeData)
209 , lineHeightModel(lineHeightData)
210 , letterSpacingModel(letterSpacingData)
211 , wordSpacingModel(wordSpacingData)
212 , baselineShiftValueModel(baselineShiftValueData)
213 , textIndentModel(textIndentData)
214 , tabSizeModel(tabSizeData)
215 , textTransformModel(textTransformData)
216 , cssFontStyleModel(cssFontStyleData)
217 , fontVariantLigaturesModel(fontVariantLigaturesData)
218 , fontVariantNumericModel(fontVariantNumericData)
219 , fontVariantEastAsianModel(fontVariantEastAsianData)
220 , LAGER_QT(fontSizeState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontSizeId))}
221 , LAGER_QT(lineHeightState) {textData.zoom(propertyModifyState(KoSvgTextProperties::LineHeightId))}
222 , LAGER_QT(letterSpacingState) {textData.zoom(propertyModifyState(KoSvgTextProperties::LetterSpacingId))}
223 , LAGER_QT(wordSpacingState) {textData.zoom(propertyModifyState(KoSvgTextProperties::WordSpacingId))}
224 , LAGER_QT(textIndentState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextIndentId))}
225 , LAGER_QT(tabSizeState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TabSizeId))}
226 , LAGER_QT(textTransformState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextTransformId))}
227 , LAGER_QT(fontStyleState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontStyleId))}
228 , LAGER_QT(writingMode) {textData.zoom(createTextProperty(KoSvgTextProperties::WritingModeId)).zoom(variant_to<int>)}
229 , LAGER_QT(writingModeState) {textData.zoom(propertyModifyState(KoSvgTextProperties::WritingModeId))}
230 , LAGER_QT(direction) {textData.zoom(createTextProperty(KoSvgTextProperties::DirectionId)).zoom(variant_to<int>)}
231 , LAGER_QT(directionState) {textData.zoom(propertyModifyState(KoSvgTextProperties::DirectionId))}
232 , LAGER_QT(unicodeBidi) {textData.zoom(createTextProperty(KoSvgTextProperties::UnicodeBidiId)).zoom(variant_to<int>)}
233 , LAGER_QT(unicodeBidiState) {textData.zoom(propertyModifyState(KoSvgTextProperties::UnicodeBidiId))}
234 , LAGER_QT(textAlignAll) {textData.zoom(createTextProperty(KoSvgTextProperties::TextAlignAllId)).zoom(variant_to<int>)}
235 , LAGER_QT(textAlignAllState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextAlignAllId))}
236 , LAGER_QT(textAlignLast) {textData.zoom(createTextProperty(KoSvgTextProperties::TextAlignLastId)).zoom(variant_to<int>)}
237 , LAGER_QT(textAlignLastState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextAlignLastId))}
238 , LAGER_QT(textAnchor) {textData.zoom(createTextProperty(KoSvgTextProperties::TextAnchorId)).zoom(variant_to<int>)}
239 , LAGER_QT(textAnchorState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextAnchorId))}
240 , LAGER_QT(fontWeight) {textData.zoom(createTextProperty(KoSvgTextProperties::FontWeightId)).zoom(variant_to<int>)}
241 , LAGER_QT(fontWeightState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontWeightId))}
242 , LAGER_QT(fontWidth) {textData.zoom(createTextProperty(KoSvgTextProperties::FontStretchId)).zoom(variant_to<int>)}
243 , LAGER_QT(fontWidthState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontStretchId))}
244 , LAGER_QT(fontOpticalSizeLink) {textData.zoom(createTextProperty(KoSvgTextProperties::FontOpticalSizingId)).zoom(variant_to<bool>)}
245 , LAGER_QT(fontOpticalSizeLinkState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontOpticalSizingId))}
246 , LAGER_QT(fontFamilies) {textData.zoom(createTextProperty(KoSvgTextProperties::FontFamiliesId)).zoom(variant_to<QStringList>)}
247 , LAGER_QT(fontFamiliesState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontFamiliesId))}
248 , LAGER_QT(axisValues) {textData.zoom(createTextProperty(KoSvgTextProperties::FontVariationSettingsId)).zoom(variant_to<QVariantMap>)}
249 , LAGER_QT(axisValuesState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontVariationSettingsId))}
250 , LAGER_QT(textDecorationUnderline){textData.zoom(createTextProperty(KoSvgTextProperties::TextDecorationLineId)).zoom(textDecorLineProp(KoSvgText::DecorationUnderline))}
251 , LAGER_QT(textDecorationOverline){textData.zoom(createTextProperty(KoSvgTextProperties::TextDecorationLineId)).zoom(textDecorLineProp(KoSvgText::DecorationOverline))}
252 , LAGER_QT(textDecorationLineThrough){textData.zoom(createTextProperty(KoSvgTextProperties::TextDecorationLineId)).zoom(textDecorLineProp(KoSvgText::DecorationLineThrough))}
253 , LAGER_QT(textDecorationLineState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextDecorationLineId))}
254 , LAGER_QT(textDecorationStyle){textData.zoom(createTextProperty(KoSvgTextProperties::TextDecorationStyleId)).zoom(variant_to<int>)}
255 , LAGER_QT(textDecorationStyleState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextDecorationStyleId))}
256 , LAGER_QT(textDecorationColor){textData.zoom(createTextProperty(KoSvgTextProperties::TextDecorationColorId)).zoom(variant_to<QColor>)}
257 , LAGER_QT(textDecorationColorState){textData.zoom(propertyModifyState(KoSvgTextProperties::TextDecorationColorId))}
258 , LAGER_QT(textDecorationUnderlinePosHorizontal){textData.zoom(createTextProperty(KoSvgTextProperties::TextDecorationPositionId)).zoom(textDecorPosProp(true))}
259 , LAGER_QT(textDecorationUnderlinePosVertical){textData.zoom(createTextProperty(KoSvgTextProperties::TextDecorationPositionId)).zoom(textDecorPosProp(false))}
260 , LAGER_QT(textDecorationUnderlinePositionState){textData.zoom(propertyModifyState(KoSvgTextProperties::TextDecorationPositionId))}
261 , LAGER_QT(hangingPunctuationFirst){textData.zoom(createTextProperty(KoSvgTextProperties::HangingPunctuationId)).zoom(hangPunctuationProp(KoSvgText::HangFirst))}
262 , LAGER_QT(hangingPunctuationComma){textData.zoom(createTextProperty(KoSvgTextProperties::HangingPunctuationId)).zoom(hangingPunactuationCommaProp)}
263 , LAGER_QT(hangingPunctuationLast){textData.zoom(createTextProperty(KoSvgTextProperties::HangingPunctuationId)).zoom(hangPunctuationProp(KoSvgText::HangLast))}
264 , LAGER_QT(hangingPunctuationState) {textData.zoom(propertyModifyState(KoSvgTextProperties::HangingPunctuationId))}
265 , LAGER_QT(alignmentBaseline){textData.zoom(createTextProperty(KoSvgTextProperties::AlignmentBaselineId)).zoom(variant_to<int>)}
266 , LAGER_QT(alignmentBaselineState) {textData.zoom(propertyModifyState(KoSvgTextProperties::AlignmentBaselineId))}
267 , LAGER_QT(dominantBaseline){textData.zoom(createTextProperty(KoSvgTextProperties::DominantBaselineId)).zoom(variant_to<int>)}
268 , LAGER_QT(dominantBaselineState) {textData.zoom(propertyModifyState(KoSvgTextProperties::DominantBaselineId))}
269 , LAGER_QT(baselineShiftMode){textData.zoom(createTextProperty(KoSvgTextProperties::BaselineShiftModeId)).zoom(variant_to<int>)}
270 , LAGER_QT(baselineShiftState) {textData.zoom(propertyModifyState(KoSvgTextProperties::BaselineShiftModeId))}
271 , LAGER_QT(wordBreak){textData.zoom(createTextProperty(KoSvgTextProperties::WordBreakId)).zoom(variant_to<int>)}
272 , LAGER_QT(wordBreakState) {textData.zoom(propertyModifyState(KoSvgTextProperties::WordBreakId))}
273 , LAGER_QT(lineBreak){textData.zoom(createTextProperty(KoSvgTextProperties::LineBreakId)).zoom(variant_to<int>)}
274 , LAGER_QT(lineBreakState) {textData.zoom(propertyModifyState(KoSvgTextProperties::LineBreakId))}
275 , LAGER_QT(fontSynthesisWeight){textData.zoom(createTextProperty(KoSvgTextProperties::FontSynthesisBoldId)).zoom(variant_to<bool>)}
276 , LAGER_QT(fontSynthesisWeightState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontSynthesisBoldId))}
277 , LAGER_QT(fontSynthesisStyle){textData.zoom(createTextProperty(KoSvgTextProperties::FontSynthesisItalicId)).zoom(variant_to<bool>)}
278 , LAGER_QT(fontSynthesisStyleState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontSynthesisItalicId))}
279 , LAGER_QT(fontVariantPosition){textData.zoom(createTextProperty(KoSvgTextProperties::FontVariantPositionId)).zoom(variant_to<int>)}
280 , LAGER_QT(fontVariantPositionState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontVariantPositionId))}
281 , LAGER_QT(fontVariantCaps){textData.zoom(createTextProperty(KoSvgTextProperties::FontVariantCapsId)).zoom(variant_to<int>)}
282 , LAGER_QT(fontVariantCapsState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontVariantCapsId))}
283 , LAGER_QT(fontVariantLigaturesState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontVariantLigatureId))}
284 , LAGER_QT(fontVariantNumericState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontVariantNumericId))}
285 , LAGER_QT(fontVariantEastAsianState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontVariantEastAsianId))}
286 , LAGER_QT(fontFeatureSettings) {textData.zoom(createTextProperty(KoSvgTextProperties::FontFeatureSettingsId)).zoom(variant_to<QVariantMap>)}
287 , LAGER_QT(fontFeatureSettingsState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontFeatureSettingsId))}
288 , LAGER_QT(fontKerning) {textData.zoom(createTextProperty(KoSvgTextProperties::KerningId)).zoom(autoValueToBool)}
289 , LAGER_QT(fontKerningState) {textData.zoom(propertyModifyState(KoSvgTextProperties::KerningId))}
290 , LAGER_QT(language) {textData.zoom(createTextProperty(KoSvgTextProperties::TextLanguage)).zoom(variant_to<QString>)}
291 , LAGER_QT(languageState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextLanguage))}
292 , LAGER_QT(fontSizeAdjust) {textData.zoom(createTextProperty(KoSvgTextProperties::FontSizeAdjustId)).zoom(autoValueSimplified)}
293 , LAGER_QT(fontSizeAdjustState) {textData.zoom(propertyModifyState(KoSvgTextProperties::FontSizeAdjustId))}
294 , LAGER_QT(textCollapse){textData.zoom(createTextProperty(KoSvgTextProperties::TextCollapseId)).zoom(variant_to<int>)}
295 , LAGER_QT(textCollapseState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextCollapseId))}
296 , LAGER_QT(textWrap){textData.zoom(createTextProperty(KoSvgTextProperties::TextWrapId)).zoom(variant_to<int>)}
297 , LAGER_QT(textWrapState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextWrapId))}
298 , LAGER_QT(textRendering){textData.zoom(createTextProperty(KoSvgTextProperties::TextRenderingId)).zoom(variant_to<int>)}
299 , LAGER_QT(textRenderingState) {textData.zoom(propertyModifyState(KoSvgTextProperties::TextRenderingId))}
300 , LAGER_QT(spanSelection) {textData[&KoSvgTextPropertyData::spanSelection]}
301{
302 lager::watch(textData, std::bind(&KoSvgTextPropertiesModel::textPropertyChanged, this));
303 lager::watch(fontSizeData, std::bind(&KoSvgTextPropertiesModel::fontSizeChanged, this));
304 lager::watch(lineHeightData, std::bind(&KoSvgTextPropertiesModel::lineHeightChanged, this));
305
306 lager::watch(letterSpacingData, std::bind(&KoSvgTextPropertiesModel::letterSpacingChanged, this));
307 lager::watch(wordSpacingData, std::bind(&KoSvgTextPropertiesModel::wordSpacingChanged, this));
308 lager::watch(baselineShiftValueData, std::bind(&KoSvgTextPropertiesModel::baselineShiftValueChanged, this));
309
310 lager::watch(textIndentData, std::bind(&KoSvgTextPropertiesModel::textIndentChanged, this));
311 connect(&textIndentModel, SIGNAL(lengthChanged()), this, SIGNAL(textIndentChanged()));
312 lager::watch(tabSizeData, std::bind(&KoSvgTextPropertiesModel::tabSizeChanged, this));
313 lager::watch(textTransformData, std::bind(&KoSvgTextPropertiesModel::textTransformChanged, this));
314 lager::watch(cssFontStyleData, std::bind(&KoSvgTextPropertiesModel::fontStyleChanged, this));
315
316 lager::watch(fontVariantLigaturesData, std::bind(&KoSvgTextPropertiesModel::fontVariantLigaturesChanged, this));
317 lager::watch(fontVariantNumericData, std::bind(&KoSvgTextPropertiesModel::fontVariantNumericChanged, this));
318 lager::watch(fontVariantEastAsianData, std::bind(&KoSvgTextPropertiesModel::fontVariantEastAsianChanged, this));
319}
320
322{
323 return &this->fontSizeModel;
324}
325
327{
328 return &this->lineHeightModel;
329}
330
332{
333 return &this->letterSpacingModel;
334}
335
337{
338 return &this->wordSpacingModel;
339}
340
342{
343 return &this->baselineShiftValueModel;
344}
345
347{
348 return &this->textIndentModel;
349}
350
352{
353 return &this->tabSizeModel;
354}
355
357{
358 return &this->textTransformModel;
359}
360
362{
363 return &this->cssFontStyleModel;
364}
365
367{
368 return &this->fontVariantLigaturesModel;
369}
370
372{
373 return &this->fontVariantNumericModel;
374}
375
377{
378 return &this->fontVariantEastAsianModel;
379}
380
382{
383 KoSvgTextPropertyData data = textData.get();
386 if (fontSize) {
387 return inherited.fontSize().value;
388 } else {
390 commonProperties.inheritFrom(inherited, true);
391 return commonProperties.fontSize().value;
392 }
393}
394
396{
397 KoSvgTextPropertyData data = textData.get();
400 if (fontSize) {
401 return inherited.xHeight();
402 } else {
404 commonProperties.inheritFrom(inherited, true);
405 return commonProperties.xHeight();
406 }
407}
qreal length(const QPointF &vec)
Definition Ellipse.cc:82
float value(const T *src, size_t ch)
LAGER_QT(lineHeightState)
connect & textIndentModel(lengthChanged()), this, SIGNAL(textIndentChanged())
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
CssLengthPercentageModel * wordSpacing
Q_INVOKABLE qreal resolvedFontSize(bool fontSize=false)
resolvedFontSize this returns the resolved font (em) size, needed for unit conversion for em.
FontVariantNumericModel * fontVariantNumeric
lager::cursor< KoSvgTextProperties > commonProperties
lager::cursor< KoSvgTextPropertyData > textData
CssLengthPercentageModel baselineShiftValueModel
Q_INVOKABLE qreal resolvedXHeight(bool fontSize=false)
resolvedXHeight this returns the resolved x-height, needed for unit conversion for ex.
FontVariantLigaturesModel * fontVariantLigatures
CssLengthPercentageModel fontSizeModel
CssLengthPercentageModel * fontSize
FontVariantEastAsianModel fontVariantEastAsianModel
FontVariantLigaturesModel fontVariantLigaturesModel
FontVariantNumericModel fontVariantNumericModel
CssLengthPercentageModel * letterSpacing
@ PropertyInherited
The property is inherited.
@ 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.
CssLengthPercentageModel * baselineShiftValue
CssLengthPercentageModel letterSpacingModel
FontVariantEastAsianModel * fontVariantEastAsian
CssLengthPercentageModel wordSpacingModel
KoSvgTextPropertiesModel(lager::cursor< KoSvgTextPropertyData > _textData=lager::make_state(KoSvgTextPropertyData(), lager::automatic_tag{}))
@ TextAnchorId
KoSvgText::TextAnchor.
@ UnicodeBidiId
KoSvgText::UnicodeBidi.
@ DominantBaselineId
KoSvgText::Baseline.
@ AlignmentBaselineId
KoSvgText::Baseline.
@ LineHeightId
KoSvgText::AutoValue.
@ WordSpacingId
KoSvgText::AutoLengthPercentage.
@ LineBreakId
KoSvgText::LineBreak.
@ FontSizeAdjustId
KoSvgText::AutoValue.
@ LetterSpacingId
KoSvgText::AutoLengthPercentage.
@ TextAlignAllId
KoSvgText::TextAlign.
@ TextCollapseId
KoSvgText::TextSpaceCollapse.
@ TextDecorationStyleId
KoSvgText::TextDecorationStyle.
@ TextTransformId
KoSvgText::TextTransformInfo Struct.
@ FontStyleId
KoSvgText::CssSlantData.
@ FontFeatureSettingsId
QStringList.
@ WritingModeId
KoSvgText::WritingMode.
@ DirectionId
KoSvgText::Direction.
@ TextWrapId
KoSvgText::TextWrap.
@ HangingPunctuationId
Flags, KoSvgText::HangingPunctuations.
@ BaselineShiftModeId
KoSvgText::BaselineShiftMode.
@ TextAlignLastId
KoSvgText::TextAlign.
@ FontVariantLigatureId
KoSvgText::FontVariantFeature.
@ TextDecorationPositionId
KoSvgText::TextDecorationUnderlinePosition.
@ TextIndentId
KoSvgText::TextIndentInfo Struct.
@ FontVariationSettingsId
QStringList.
@ WordBreakId
KoSvgText::WordBreak.
@ TextLanguage
a language string.
@ TextDecorationLineId
Flags, KoSvgText::TextDecorations.
@ KerningId
KoSvgText::AutoValue.
static const KoSvgTextProperties & defaultProperties()
void setProperty(PropertyId id, const QVariant &value)
KoSvgText::CssLengthPercentage fontSize() const
void inheritFrom(const KoSvgTextProperties &parentProperties, bool resolve=false)
TextDecorationUnderlinePosition
Which location to choose for the underline.
Definition KoSvgText.h:275
TextDecoration
Flags for text-decoration, for underline, overline and strikethrough.
Definition KoSvgText.h:257
@ DecorationOverline
Definition KoSvgText.h:260
@ DecorationLineThrough
Definition KoSvgText.h:261
@ DecorationUnderline
Definition KoSvgText.h:259
@ HangForce
Whether to force hanging stops or commas.
Definition KoSvgText.h:209
@ HangLast
Hang closing brackets and quotes.
Definition KoSvgText.h:207
@ HangFirst
Hang opening brackets and quotes.
Definition KoSvgText.h:206
@ HangEnd
Hang stops and commas. Force/Allow is a separate boolean.
Definition KoSvgText.h:208
The KoSvgTextPropertyData struct.
KoSvgTextProperties commonProperties
The properties common between all the selected text.
bool spanSelection
Whether we're currently selecting a span of text as opposed to editing the whole paragraph.
KoSvgTextProperties inheritedProperties
The properties that are inherited, so that widgets may be set correctly.