Krita Source Code Documentation
Loading...
Searching...
No Matches
TabSizeModel.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 "TabSizeModel.h"
7
8namespace {
9
10auto getValue = lager::lenses::getset (
11 [] (const KoSvgText::TabSizeInfo &data) -> qreal {
12 if (data.isNumber) {
13 return data.value;
14 } else {
15 return data.length.value;
16 }
17}, [] (KoSvgText::TabSizeInfo data, const qreal &val) -> KoSvgText::TabSizeInfo {
18 if (data.isNumber) {
19 data.value = val;
20 } else {
21 data.length.value = val;
22 }
23 return data;
24});
25
26auto getUnit = lager::lenses::getset (
28 if (data.isNumber) {
29 return TabSizeModel::TabSizeType::Spaces;
30 } else {
31 switch(data.length.unit) {
32 case KoSvgText::CssLengthPercentage::Absolute:
33 return TabSizeModel::TabSizeType::Absolute;
34 case KoSvgText::CssLengthPercentage::Em:
35 return TabSizeModel::TabSizeType::Em;
36 case KoSvgText::CssLengthPercentage::Ex:
37 return TabSizeModel::TabSizeType::Ex;
38 case KoSvgText::CssLengthPercentage::Cap:
39 return TabSizeModel::TabSizeType::Cap;
40 case KoSvgText::CssLengthPercentage::Ch:
41 return TabSizeModel::TabSizeType::Ch;
42 case KoSvgText::CssLengthPercentage::Ic:
43 return TabSizeModel::TabSizeType::Ic;
44 case KoSvgText::CssLengthPercentage::Lh:
45 return TabSizeModel::TabSizeType::Lh;
46 default:
47 break;
48 }
50 }
53 data.isNumber = true;
54 } else {
55 data.isNumber = false;
56 switch(val) {
59 break;
62 break;
65 break;
68 break;
71 break;
74 break;
77 break;
78 default:
79 break;
80 }
81 }
82 return data;
83
84});
85}
86
87TabSizeModel::TabSizeModel(lager::cursor<KoSvgText::TabSizeInfo> _data)
88 : data(_data)
89 , LAGER_QT(value) {data.zoom(getValue)}
90 , LAGER_QT(unit) {data.zoom(getUnit)}
91{
92
93}
float value(const T *src, size_t ch)
LAGER_QT(unit)
lager::cursor< KoSvgText::TabSizeInfo > data
TabSizeModel(lager::cursor< KoSvgText::TabSizeInfo > _data=lager::make_state(KoSvgText::TabSizeInfo(), lager::automatic_tag{}))
@ 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
qreal value
A length or a number. Length is currently marked 'at-risk'.
Definition KoSvgText.h:675
CssLengthPercentage length
Definition KoSvgText.h:678