Krita Source Code Documentation
Loading...
Searching...
No Matches
LineHeightModel.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 "LineHeightModel.h"
7
8namespace {
9
10auto getValue = lager::lenses::getset (
11 [] (const KoSvgText::LineHeightInfo &data) -> qreal {
12 if (data.isNumber) {
13 return data.value;
14 } else {
15 if (data.length.unit == KoSvgText::CssLengthPercentage::Percentage) {
16 return data.length.value * 100;
17 } else {
18 return data.length.value;
19 }
20 }
21}, [] (KoSvgText::LineHeightInfo data, const qreal &val) -> KoSvgText::LineHeightInfo {
22 if (data.isNumber) {
23 data.value = val;
24 } else {
26 data.length.value = val * 0.01;
27 } else {
28 data.length.value = val;
29 }
30 }
31 return data;
32});
33
34auto getUnit = lager::lenses::getset (
36 if (data.isNumber) {
37 return LineHeightModel::Lines;
38 } else {
39 switch(data.length.unit) {
40 case KoSvgText::CssLengthPercentage::Absolute:
41 return LineHeightModel::LineHeightType::Absolute;
42 case KoSvgText::CssLengthPercentage::Em:
43 return LineHeightModel::LineHeightType::Em;
44 case KoSvgText::CssLengthPercentage::Ex:
45 return LineHeightModel::LineHeightType::Ex;
46 case KoSvgText::CssLengthPercentage::Cap:
47 return LineHeightModel::LineHeightType::Cap;
48 case KoSvgText::CssLengthPercentage::Ch:
49 return LineHeightModel::LineHeightType::Ch;
50 case KoSvgText::CssLengthPercentage::Ic:
51 return LineHeightModel::LineHeightType::Ic;
52 case KoSvgText::CssLengthPercentage::Lh:
53 return LineHeightModel::LineHeightType::Lh;
54 case KoSvgText::CssLengthPercentage::Percentage:
55 return LineHeightModel::LineHeightType::Percentage;
56 }
58 }
61 data.isNumber = true;
62 } else {
63 data.isNumber = false;
64 switch(val) {
67 break;
70 break;
73 break;
76 break;
79 break;
82 break;
85 break;
88 break;
89 default:
90 break;
91 }
92 }
93 return data;
94
95});
96}
97
98LineHeightModel::LineHeightModel(lager::cursor<KoSvgText::LineHeightInfo> _data)
99 : data(_data)
101 , LAGER_QT(value) {data.zoom(getValue)}
102 , LAGER_QT(unit) {data.zoom(getUnit)}
103{
104
105}
float value(const T *src, size_t ch)
LAGER_QT(value)
LineHeightModel(lager::cursor< KoSvgText::LineHeightInfo > _data=lager::make_state(KoSvgText::LineHeightInfo(), lager::automatic_tag{}))
lager::cursor< KoSvgText::LineHeightInfo > data
@ Cap
multiply by font-x-height.
Definition KoSvgText.h:412
@ Ch
multiply by font cap height
Definition KoSvgText.h:413
@ Absolute
Pt, everything needs to be converted to pt for this to work.
Definition KoSvgText.h:408
@ Lh
multiply by width of "U+6C34", represents average full width script advance.
Definition KoSvgText.h:415
@ Ex
multiply by Font-size
Definition KoSvgText.h:411
@ Ic
multiply by width of "0", represents average proportional script advance.
Definition KoSvgText.h:414
bool isNumber
Length or number.
Definition KoSvgText.h:695
CssLengthPercentage length
Definition KoSvgText.h:693
bool isNormal
It's a number indicating the lineHeight;.
Definition KoSvgText.h:696