Skip to content

Commit

Permalink
karm-kira: Added mobile support for print dialog.
Browse files Browse the repository at this point in the history
  • Loading branch information
sleepy-monax committed Nov 17, 2024
1 parent f12b931 commit 54464f8
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 31 deletions.
149 changes: 121 additions & 28 deletions src/libs/karm-kira/print-dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,73 @@
#include <karm-ui/layout.h>
#include <karm-ui/scroll.h>

#include "checkbox.h"
#include "dialog.h"
#include "print-dialog.h"
#include "row.h"
#include "select.h"

namespace Karm::Kira {

Ui::Child _printPaper() {
return Ui::empty({320, 452}) |
Ui::Child _printSelect(usize index) {
return Ui::hflow(
8,
Math::Align::CENTER,
checkbox(true, NONE),
Ui::labelMedium("Page {} of 3", index + 1)
) |
Ui::box({
.borderRadii = 6,
.backgroundFill = Ui::GRAY50,
.margin = 8,
.padding = Math::Insetsi{6, 12, 6, 6},
.borderRadii = 9,
.borderWidth = 1,
.borderFill = Ui::GRAY800,
.backgroundFill = Ui::GRAY900,
});
}

Ui::Child _printPaper(usize index) {
auto scale = 1.;
auto isMobile = App::useFormFactor() == App::FormFactor::MOBILE;
if (isMobile) {
scale = 0.5;
}

return Ui::stack(
Ui::empty(Math::Vec2f{320 * scale, 452 * scale}.cast<isize>()) |
Ui::box({
.borderRadii = 6,
.backgroundFill = Ui::GRAY50,
}),
_printSelect(index) | Ui::align(Math::Align::BOTTOM_END)
);
}

Ui::Child _printPreviewMobile() {
return Ui::hflow(
8,
Math::Align::CENTER,
_printPaper(0),
_printPaper(1),
_printPaper(2)
) |
Ui::insets(32) |
Ui::hscroll() |
Ui::box(
{
.borderRadii = {0, 0, 0, 12},
.backgroundFill = Ui::GRAY950,
}
);
}

Ui::Child _printPreview() {
return Ui::vflow(
8,
Math::Align::CENTER,
_printPaper(),
_printPaper(),
_printPaper()
_printPaper(0),
_printPaper(1),
_printPaper(2)
) |
Ui::insets(32) |
Ui::vscroll() |
Expand All @@ -35,29 +80,50 @@ Ui::Child _printPreview() {
);
}

Ui::Child _destinationSelect() {
return select(
selectValue("Save as PDF"s),
[] -> Ui::Children {
return {
selectGroup({
selectLabel("Save as"s),
selectItem(Ui::NOP, "Save as PDF"s),
selectItem(Ui::NOP, "Save as Image"s),
}),
Ui::separator(),
selectGroup({
selectLabel("Printers"s),
selectItem(Ui::NOP, "Epson ET-8550"s),
selectItem(Ui::NOP, "HP DeskJet 2700"s),
}),
Ui::separator(),
selectItem(Ui::NOP, "Add printer..."s)

};
}
);
}

Ui::Child _printSettings() {
return Ui::vflow(
rowContent(
NONE,
"Destination"s,
NONE,
_destinationSelect()
),
selectRow(
selectValue("Save as PDF"s),
selectValue("1"s),
[] -> Ui::Children {
return {
selectGroup({
selectLabel("Save as"s),
selectItem(Ui::NOP, "Save as PDF"s),
selectItem(Ui::NOP, "Save as Image"s),
}),
Ui::separator(),
selectGroup({
selectLabel("Printers"s),
selectItem(Ui::NOP, "Epson ET-8550"s),
selectItem(Ui::NOP, "HP DeskJet 2700"s),
}),
Ui::separator(),
selectItem(Ui::NOP, "Add printer..."s)

selectItem(Ui::NOP, "1"s),
selectItem(Ui::NOP, "2"s),
selectItem(Ui::NOP, "3"s),
selectItem(Ui::NOP, "4"s),
selectItem(Ui::NOP, "5"s),
};
},
"Destination"s
"Copies"s
),
selectRow(
selectValue("All"s),
Expand All @@ -66,6 +132,7 @@ Ui::Child _printSettings() {
selectItem(Ui::NOP, "All"s),
selectItem(Ui::NOP, "Odd pages only"s),
selectItem(Ui::NOP, "Even pages only"s),
selectItem(Ui::NOP, "Custom"s),

};
},
Expand Down Expand Up @@ -144,14 +211,12 @@ Ui::Child _printControls() {
Ui::minSize({320, Ui::UNCONSTRAINED});
}

Ui::Child printDialog() {
auto isMobile = App::useFormFactor() == App::FormFactor::MOBILE;

Ui::Child _printDialog() {
return dialogContent({
dialogTitleBar("Print"s),
Ui::hflow(
isMobile ? Ui::empty() : _printPreview(),
_printControls()
_printPreview(),
_printControls() | Ui::grow()
) | Ui::maxSize({Ui::UNCONSTRAINED, 500}) |
Ui::grow(),
Ui::separator(),
Expand All @@ -162,4 +227,32 @@ Ui::Child printDialog() {
});
}

Ui::Child _printDialogMobile() {
return dialogContent({
dialogTitleBar("Print"s),
Ui::separator(),
Ui::vflow(
_printPreviewMobile(),
Ui::separator(),
titleRow("Settings"s),
_printSettings()
) | Ui::vscroll() |
Ui::grow(),
Ui::separator(),
dialogFooter({
dialogCancel(),
dialogAction(Ui::NOP, "Print"s),
}),
});
}

Ui::Child printDialog() {
auto isMobile = App::useFormFactor() == App::FormFactor::MOBILE;

if (isMobile) {
return _printDialogMobile();
}
return _printDialog();
}

} // namespace Karm::Kira
5 changes: 3 additions & 2 deletions src/libs/karm-kira/row.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Ui::Child rowContent(Opt<Ui::Child> leading, String title, Opt<String> subtitle,
return minSize(
{Ui::UNCONSTRAINED, 48},
insets(
{0, 12},
{0, 16},
hflow(
0,
Math::Align::VCENTER | Math::Align::HFILL,
Expand Down Expand Up @@ -176,7 +176,8 @@ Ui::Child treeRow(Opt<Ui::Slot> leading, String title, Opt<String> subtitle, Ui:
state ? insets(
{0, 0, 0, 0},
child()
) | slideIn(Ui::SlideFrom::TOP)
) | slideIn(Ui::SlideFrom::TOP) |
Ui::grow()
: Ui::empty()
);
});
Expand Down
2 changes: 1 addition & 1 deletion src/libs/karm-kira/select.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Ui::Child select(Ui::Child value, Ui::Slots slots) {
Ui::hflow(
8,
Math::Align::CENTER,
value,
value | Ui::grow(),
Ui::icon(Mdi::CHEVRON_DOWN)
) | Ui::insets({6, 12, 6, 16}) |
Ui::minSize({Ui::UNCONSTRAINED, 36})
Expand Down

0 comments on commit 54464f8

Please sign in to comment.