Skip to content

Commit 54464f8

Browse files
committed
karm-kira: Added mobile support for print dialog.
1 parent f12b931 commit 54464f8

File tree

3 files changed

+125
-31
lines changed

3 files changed

+125
-31
lines changed

src/libs/karm-kira/print-dialog.cpp

+121-28
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,73 @@
22
#include <karm-ui/layout.h>
33
#include <karm-ui/scroll.h>
44

5+
#include "checkbox.h"
56
#include "dialog.h"
67
#include "print-dialog.h"
78
#include "row.h"
89
#include "select.h"
910

1011
namespace Karm::Kira {
1112

12-
Ui::Child _printPaper() {
13-
return Ui::empty({320, 452}) |
13+
Ui::Child _printSelect(usize index) {
14+
return Ui::hflow(
15+
8,
16+
Math::Align::CENTER,
17+
checkbox(true, NONE),
18+
Ui::labelMedium("Page {} of 3", index + 1)
19+
) |
1420
Ui::box({
15-
.borderRadii = 6,
16-
.backgroundFill = Ui::GRAY50,
21+
.margin = 8,
22+
.padding = Math::Insetsi{6, 12, 6, 6},
23+
.borderRadii = 9,
24+
.borderWidth = 1,
25+
.borderFill = Ui::GRAY800,
26+
.backgroundFill = Ui::GRAY900,
1727
});
1828
}
1929

30+
Ui::Child _printPaper(usize index) {
31+
auto scale = 1.;
32+
auto isMobile = App::useFormFactor() == App::FormFactor::MOBILE;
33+
if (isMobile) {
34+
scale = 0.5;
35+
}
36+
37+
return Ui::stack(
38+
Ui::empty(Math::Vec2f{320 * scale, 452 * scale}.cast<isize>()) |
39+
Ui::box({
40+
.borderRadii = 6,
41+
.backgroundFill = Ui::GRAY50,
42+
}),
43+
_printSelect(index) | Ui::align(Math::Align::BOTTOM_END)
44+
);
45+
}
46+
47+
Ui::Child _printPreviewMobile() {
48+
return Ui::hflow(
49+
8,
50+
Math::Align::CENTER,
51+
_printPaper(0),
52+
_printPaper(1),
53+
_printPaper(2)
54+
) |
55+
Ui::insets(32) |
56+
Ui::hscroll() |
57+
Ui::box(
58+
{
59+
.borderRadii = {0, 0, 0, 12},
60+
.backgroundFill = Ui::GRAY950,
61+
}
62+
);
63+
}
64+
2065
Ui::Child _printPreview() {
2166
return Ui::vflow(
2267
8,
2368
Math::Align::CENTER,
24-
_printPaper(),
25-
_printPaper(),
26-
_printPaper()
69+
_printPaper(0),
70+
_printPaper(1),
71+
_printPaper(2)
2772
) |
2873
Ui::insets(32) |
2974
Ui::vscroll() |
@@ -35,29 +80,50 @@ Ui::Child _printPreview() {
3580
);
3681
}
3782

83+
Ui::Child _destinationSelect() {
84+
return select(
85+
selectValue("Save as PDF"s),
86+
[] -> Ui::Children {
87+
return {
88+
selectGroup({
89+
selectLabel("Save as"s),
90+
selectItem(Ui::NOP, "Save as PDF"s),
91+
selectItem(Ui::NOP, "Save as Image"s),
92+
}),
93+
Ui::separator(),
94+
selectGroup({
95+
selectLabel("Printers"s),
96+
selectItem(Ui::NOP, "Epson ET-8550"s),
97+
selectItem(Ui::NOP, "HP DeskJet 2700"s),
98+
}),
99+
Ui::separator(),
100+
selectItem(Ui::NOP, "Add printer..."s)
101+
102+
};
103+
}
104+
);
105+
}
106+
38107
Ui::Child _printSettings() {
39108
return Ui::vflow(
109+
rowContent(
110+
NONE,
111+
"Destination"s,
112+
NONE,
113+
_destinationSelect()
114+
),
40115
selectRow(
41-
selectValue("Save as PDF"s),
116+
selectValue("1"s),
42117
[] -> Ui::Children {
43118
return {
44-
selectGroup({
45-
selectLabel("Save as"s),
46-
selectItem(Ui::NOP, "Save as PDF"s),
47-
selectItem(Ui::NOP, "Save as Image"s),
48-
}),
49-
Ui::separator(),
50-
selectGroup({
51-
selectLabel("Printers"s),
52-
selectItem(Ui::NOP, "Epson ET-8550"s),
53-
selectItem(Ui::NOP, "HP DeskJet 2700"s),
54-
}),
55-
Ui::separator(),
56-
selectItem(Ui::NOP, "Add printer..."s)
57-
119+
selectItem(Ui::NOP, "1"s),
120+
selectItem(Ui::NOP, "2"s),
121+
selectItem(Ui::NOP, "3"s),
122+
selectItem(Ui::NOP, "4"s),
123+
selectItem(Ui::NOP, "5"s),
58124
};
59125
},
60-
"Destination"s
126+
"Copies"s
61127
),
62128
selectRow(
63129
selectValue("All"s),
@@ -66,6 +132,7 @@ Ui::Child _printSettings() {
66132
selectItem(Ui::NOP, "All"s),
67133
selectItem(Ui::NOP, "Odd pages only"s),
68134
selectItem(Ui::NOP, "Even pages only"s),
135+
selectItem(Ui::NOP, "Custom"s),
69136

70137
};
71138
},
@@ -144,14 +211,12 @@ Ui::Child _printControls() {
144211
Ui::minSize({320, Ui::UNCONSTRAINED});
145212
}
146213

147-
Ui::Child printDialog() {
148-
auto isMobile = App::useFormFactor() == App::FormFactor::MOBILE;
149-
214+
Ui::Child _printDialog() {
150215
return dialogContent({
151216
dialogTitleBar("Print"s),
152217
Ui::hflow(
153-
isMobile ? Ui::empty() : _printPreview(),
154-
_printControls()
218+
_printPreview(),
219+
_printControls() | Ui::grow()
155220
) | Ui::maxSize({Ui::UNCONSTRAINED, 500}) |
156221
Ui::grow(),
157222
Ui::separator(),
@@ -162,4 +227,32 @@ Ui::Child printDialog() {
162227
});
163228
}
164229

230+
Ui::Child _printDialogMobile() {
231+
return dialogContent({
232+
dialogTitleBar("Print"s),
233+
Ui::separator(),
234+
Ui::vflow(
235+
_printPreviewMobile(),
236+
Ui::separator(),
237+
titleRow("Settings"s),
238+
_printSettings()
239+
) | Ui::vscroll() |
240+
Ui::grow(),
241+
Ui::separator(),
242+
dialogFooter({
243+
dialogCancel(),
244+
dialogAction(Ui::NOP, "Print"s),
245+
}),
246+
});
247+
}
248+
249+
Ui::Child printDialog() {
250+
auto isMobile = App::useFormFactor() == App::FormFactor::MOBILE;
251+
252+
if (isMobile) {
253+
return _printDialogMobile();
254+
}
255+
return _printDialog();
256+
}
257+
165258
} // namespace Karm::Kira

src/libs/karm-kira/row.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ Ui::Child rowContent(Opt<Ui::Child> leading, String title, Opt<String> subtitle,
4747
return minSize(
4848
{Ui::UNCONSTRAINED, 48},
4949
insets(
50-
{0, 12},
50+
{0, 16},
5151
hflow(
5252
0,
5353
Math::Align::VCENTER | Math::Align::HFILL,
@@ -176,7 +176,8 @@ Ui::Child treeRow(Opt<Ui::Slot> leading, String title, Opt<String> subtitle, Ui:
176176
state ? insets(
177177
{0, 0, 0, 0},
178178
child()
179-
) | slideIn(Ui::SlideFrom::TOP)
179+
) | slideIn(Ui::SlideFrom::TOP) |
180+
Ui::grow()
180181
: Ui::empty()
181182
);
182183
});

src/libs/karm-kira/select.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Ui::Child select(Ui::Child value, Ui::Slots slots) {
3333
Ui::hflow(
3434
8,
3535
Math::Align::CENTER,
36-
value,
36+
value | Ui::grow(),
3737
Ui::icon(Mdi::CHEVRON_DOWN)
3838
) | Ui::insets({6, 12, 6, 16}) |
3939
Ui::minSize({Ui::UNCONSTRAINED, 36})

0 commit comments

Comments
 (0)