9#include <lager/constant.hpp>
18 QVariant defaultVar =
value.inheritedProperties.propertyOrDefault(propId);
19 return value.commonProperties.property(propId, defaultVar);
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;
46 qWarning() <<
"Receiving request to set property tristate or inherited, this will unset the property instead";
48 value.commonProperties.removeProperty(propId);
50 value.tristate.remove(propId);
56auto simplifiedAutoLengthPropertyImpl = lager::lenses::getset(
65auto simplifiedAutoLengthProperty = variant_to<KoSvgText::AutoLengthPercentage> | simplifiedAutoLengthPropertyImpl;
68auto autoValueToBoolImpl = lager::lenses::getset(
75 value.customValue = 0;
81auto autoValueToBool = variant_to<KoSvgText::AutoValue> | autoValueToBoolImpl;
84auto autoValueSimplifiedImpl = lager::lenses::getset(
89 value.customValue = val < 0? 0: val;
90 value.isAuto =
value.customValue > 0?
false:
true;
95auto autoValueSimplified = variant_to<KoSvgText::AutoValue> | autoValueSimplifiedImpl;
98 return lager::lenses::getset(
99 [flag] (
const KoSvgText::TextDecorations &
value) ->
bool {
100 return value.testFlag(flag);
102 [flag] (KoSvgText::TextDecorations
value,
const bool &val){
103 value.setFlag(flag, val);
110 return variant_to<KoSvgText::TextDecorations> | textDecorLinePropImpl(flag);
113auto textDecorPosPropImpl = [](
bool isHorizontal) {
114 return lager::lenses::getset(
116 return isHorizontal?
value.horizontalPosition:
value.verticalPosition;
129auto textDecorPosProp = [](
bool isHorizontal) {
130 return variant_to<KoSvgText::TextUnderlinePosition> | textDecorPosPropImpl(isHorizontal);
134 return lager::lenses::getset(
135 [flag] (
const KoSvgText::HangingPunctuations &
value) ->
bool {
136 return value.testFlag(flag);
138 [flag] (KoSvgText::HangingPunctuations
value,
const bool &val){
139 value.setFlag(flag, val);
146 return variant_to<KoSvgText::HangingPunctuations> | hangPunctuationPropImpl(flag);
149auto hangingPunactuationCommaPropImpl = lager::lenses::getset(
152 return value.testFlag(KoSvgText::HangForce) ?
153 KoSvgTextPropertiesModel::HangComma::ForceHang :
154 KoSvgTextPropertiesModel::HangComma::AllowHang;
177auto hangingPunactuationCommaProp =
178 variant_to<KoSvgText::HangingPunctuations> | hangingPunactuationCommaPropImpl;
183 if (
value.commonProperties.hasProperty(propId)) {
185 }
else if (
value.tristate.contains(propId) ||
value.inheritedProperties.hasProperty(propId)) {
194 : textData(_textData)
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>))
203 , textTransformData(textData.zoom(createTextProperty(
KoSvgTextProperties::TextTransformId)).zoom(variant_to<
KoSvgText::TextTransformInfo>))
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)
214 , tabSizeModel(tabSizeData)
215 , textTransformModel(textTransformData)
216 , cssFontStyleModel(cssFontStyleData)
217 , fontVariantLigaturesModel(fontVariantLigaturesData)
218 , fontVariantNumericModel(fontVariantNumericData)
219 , fontVariantEastAsianModel(fontVariantEastAsianData)
qreal length(const QPointF &vec)
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
void letterSpacingChanged()
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
TextTransformModel * textTransform
FontVariantLigaturesModel fontVariantLigaturesModel
void textPropertyChanged()
FontVariantNumericModel fontVariantNumericModel
void baselineShiftValueChanged()
CssFontStyleModel cssFontStyleModel
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.
void textTransformChanged()
void fontVariantLigaturesChanged()
CssFontStyleModel * fontStyle
void fontVariantNumericChanged()
LineHeightModel lineHeightModel
CssLengthPercentageModel * baselineShiftValue
TextTransformModel textTransformModel
void wordSpacingChanged()
CssLengthPercentageModel letterSpacingModel
FontVariantEastAsianModel * fontVariantEastAsian
void fontVariantEastAsianChanged()
TabSizeModel tabSizeModel
CssLengthPercentageModel wordSpacingModel
KoSvgTextPropertiesModel(lager::cursor< KoSvgTextPropertyData > _textData=lager::make_state(KoSvgTextPropertyData(), lager::automatic_tag{}))
LineHeightModel * lineHeight
TextIndentModel * textIndent
TextIndentModel textIndentModel
@ TextAnchorId
KoSvgText::TextAnchor.
@ UnicodeBidiId
KoSvgText::UnicodeBidi.
@ FontOpticalSizingId
Bool.
@ FontSynthesisItalicId
Bool.
@ DominantBaselineId
KoSvgText::Baseline.
@ FontFamiliesId
QStringList.
@ AlignmentBaselineId
KoSvgText::Baseline.
@ LineHeightId
KoSvgText::AutoValue.
@ TextDecorationColorId
QColor.
@ 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.
@ FontSynthesisBoldId
Bool.
@ 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.
TextDecoration
Flags for text-decoration, for underline, overline and strikethrough.
@ HangForce
Whether to force hanging stops or commas.
@ HangLast
Hang closing brackets and quotes.
@ HangFirst
Hang opening brackets and quotes.
@ HangEnd
Hang stops and commas. Force/Allow is a separate boolean.
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.