diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-03-21 14:29:51 +0200 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-03-21 14:29:51 +0200 |
commit | 2f9e203058df442921fc0151ddc5fe9b68b87935 (patch) | |
tree | 5441025fcf4e974e82128f65376650bec7a941bb /src/ui/window.c | |
parent | b93ba1bfb860c2a4b5bf46c77f3f0d11b4eb1282 (diff) |
iOS: Save to Files; hide toolbar on scroll
There is no downloads directory on mobile. Instead, the downloaded file is temporarily cached and given to the iOS document picker to export.
Added an option to hide the bottom toolbar while scrolling down.
Diffstat (limited to 'src/ui/window.c')
-rw-r--r-- | src/ui/window.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/ui/window.c b/src/ui/window.c index 1249a0b4..bd2b1493 100644 --- a/src/ui/window.c +++ b/src/ui/window.c | |||
@@ -191,7 +191,7 @@ static const iMenuItem navMenuItems_[] = { | |||
191 | { add_Icon " New Tab", 't', KMOD_PRIMARY, "tabs.new" }, | 191 | { add_Icon " New Tab", 't', KMOD_PRIMARY, "tabs.new" }, |
192 | { "Open Location...", SDLK_l, KMOD_PRIMARY, "navigate.focus" }, | 192 | { "Open Location...", SDLK_l, KMOD_PRIMARY, "navigate.focus" }, |
193 | { "---", 0, 0, NULL }, | 193 | { "---", 0, 0, NULL }, |
194 | { download_Icon " Save to Downloads", SDLK_s, KMOD_PRIMARY, "document.save" }, | 194 | { download_Icon " " saveToDownloads_Label, SDLK_s, KMOD_PRIMARY, "document.save" }, |
195 | { "Copy Source Text", SDLK_c, KMOD_PRIMARY, "copy" }, | 195 | { "Copy Source Text", SDLK_c, KMOD_PRIMARY, "copy" }, |
196 | { "---", 0, 0, NULL }, | 196 | { "---", 0, 0, NULL }, |
197 | { leftHalf_Icon " Toggle Left Sidebar", SDLK_l, KMOD_PRIMARY | KMOD_SHIFT, "sidebar.toggle" }, | 197 | { leftHalf_Icon " Toggle Left Sidebar", SDLK_l, KMOD_PRIMARY | KMOD_SHIFT, "sidebar.toggle" }, |
@@ -259,7 +259,7 @@ static const iMenuItem fileMenuItems_[] = { | |||
259 | { "New Tab", SDLK_t, KMOD_PRIMARY, "tabs.new" }, | 259 | { "New Tab", SDLK_t, KMOD_PRIMARY, "tabs.new" }, |
260 | { "Open Location...", SDLK_l, KMOD_PRIMARY, "navigate.focus" }, | 260 | { "Open Location...", SDLK_l, KMOD_PRIMARY, "navigate.focus" }, |
261 | { "---", 0, 0, NULL }, | 261 | { "---", 0, 0, NULL }, |
262 | { "Save to Downloads", SDLK_s, KMOD_PRIMARY, "document.save" }, | 262 | { saveToDownloads_Label, SDLK_s, KMOD_PRIMARY, "document.save" }, |
263 | }; | 263 | }; |
264 | 264 | ||
265 | static const iMenuItem editMenuItems_[] = { | 265 | static const iMenuItem editMenuItems_[] = { |
@@ -576,7 +576,9 @@ static iBool handleNavBarCommands_(iWidget *navBar, const char *cmd) { | |||
576 | if (isPhone) { | 576 | if (isPhone) { |
577 | static const char *buttons[] = { "navbar.back", "navbar.forward", "navbar.sidebar", | 577 | static const char *buttons[] = { "navbar.back", "navbar.forward", "navbar.sidebar", |
578 | "navbar.ident", "navbar.home", "navbar.menu" }; | 578 | "navbar.ident", "navbar.home", "navbar.menu" }; |
579 | setFlags_Widget(findWidget_App("toolbar"), hidden_WidgetFlag, isLandscape_App()); | 579 | iWidget *toolBar = findWidget_App("toolbar"); |
580 | setVisualOffset_Widget(toolBar, 0, 0, 0); | ||
581 | setFlags_Widget(toolBar, hidden_WidgetFlag, isLandscape_App()); | ||
580 | iForIndices(i, buttons) { | 582 | iForIndices(i, buttons) { |
581 | iLabelWidget *btn = findChild_Widget(navBar, buttons[i]); | 583 | iLabelWidget *btn = findChild_Widget(navBar, buttons[i]); |
582 | setFlags_Widget(as_Widget(btn), hidden_WidgetFlag, isPortrait_App()); | 584 | setFlags_Widget(as_Widget(btn), hidden_WidgetFlag, isPortrait_App()); |
@@ -936,7 +938,6 @@ static void setupUserInterface_Window(iWindow *d) { | |||
936 | setBackgroundColor_Widget(winBar, uiBackground_ColorId); | 938 | setBackgroundColor_Widget(winBar, uiBackground_ColorId); |
937 | } | 939 | } |
938 | #endif | 940 | #endif |
939 | |||
940 | /* Navigation bar. */ { | 941 | /* Navigation bar. */ { |
941 | iWidget *navBar = new_Widget(); | 942 | iWidget *navBar = new_Widget(); |
942 | setId_Widget(navBar, "navbar"); | 943 | setId_Widget(navBar, "navbar"); |
@@ -1119,8 +1120,9 @@ static void setupUserInterface_Window(iWindow *d) { | |||
1119 | setBackgroundColor_Widget(searchBar, uiBackground_ColorId); | 1120 | setBackgroundColor_Widget(searchBar, uiBackground_ColorId); |
1120 | setCommandHandler_Widget(searchBar, handleSearchBarCommands_); | 1121 | setCommandHandler_Widget(searchBar, handleSearchBarCommands_); |
1121 | addChildFlags_Widget( | 1122 | addChildFlags_Widget( |
1122 | searchBar, iClob(new_LabelWidget(magnifyingGlass_Icon " Text", NULL)), frameless_WidgetFlag); | 1123 | searchBar, iClob(new_LabelWidget(magnifyingGlass_Icon, NULL)), frameless_WidgetFlag); |
1123 | iInputWidget *input = new_InputWidget(0); | 1124 | iInputWidget *input = new_InputWidget(0); |
1125 | setHint_InputWidget(input, "Find text on page"); | ||
1124 | setSelectAllOnFocus_InputWidget(input, iTrue); | 1126 | setSelectAllOnFocus_InputWidget(input, iTrue); |
1125 | setEatEscape_InputWidget(input, iFalse); /* unfocus and close with one keypress */ | 1127 | setEatEscape_InputWidget(input, iFalse); /* unfocus and close with one keypress */ |
1126 | setId_Widget(addChildFlags_Widget(searchBar, iClob(input), expand_WidgetFlag), | 1128 | setId_Widget(addChildFlags_Widget(searchBar, iClob(input), expand_WidgetFlag), |
@@ -1133,10 +1135,12 @@ static void setupUserInterface_Window(iWindow *d) { | |||
1133 | /* Bottom toolbar. */ | 1135 | /* Bottom toolbar. */ |
1134 | if (isPhone_iOS()) { | 1136 | if (isPhone_iOS()) { |
1135 | iWidget *toolBar = new_Widget(); | 1137 | iWidget *toolBar = new_Widget(); |
1136 | addChild_Widget(div, iClob(toolBar)); | 1138 | addChild_Widget(d->root, iClob(toolBar)); |
1137 | setId_Widget(toolBar, "toolbar"); | 1139 | setId_Widget(toolBar, "toolbar"); |
1138 | setCommandHandler_Widget(toolBar, handleToolBarCommands_); | 1140 | setCommandHandler_Widget(toolBar, handleToolBarCommands_); |
1139 | setFlags_Widget(toolBar, collapse_WidgetFlag | resizeWidthOfChildren_WidgetFlag | | 1141 | setFlags_Widget(toolBar, moveToParentBottomEdge_WidgetFlag | |
1142 | parentCannotResizeHeight_WidgetFlag | | ||
1143 | resizeWidthOfChildren_WidgetFlag | | ||
1140 | arrangeHeight_WidgetFlag | arrangeHorizontal_WidgetFlag, iTrue); | 1144 | arrangeHeight_WidgetFlag | arrangeHorizontal_WidgetFlag, iTrue); |
1141 | setBackgroundColor_Widget(toolBar, tmBannerBackground_ColorId); | 1145 | setBackgroundColor_Widget(toolBar, tmBannerBackground_ColorId); |
1142 | addChildFlags_Widget(toolBar, iClob(newLargeIcon_LabelWidget("\U0001f870", "navigate.back")), frameless_WidgetFlag); | 1146 | addChildFlags_Widget(toolBar, iClob(newLargeIcon_LabelWidget("\U0001f870", "navigate.back")), frameless_WidgetFlag); |
@@ -1214,6 +1218,21 @@ static void setupUserInterface_Window(iWindow *d) { | |||
1214 | updateMetrics_Window_(d); | 1218 | updateMetrics_Window_(d); |
1215 | } | 1219 | } |
1216 | 1220 | ||
1221 | void showToolbars_Window(iWindow *d, iBool show) { | ||
1222 | if (isLandscape_App()) return; | ||
1223 | iWidget *toolBar = findChild_Widget(d->root, "toolbar"); | ||
1224 | if (!toolBar) return; | ||
1225 | const int height = rootSize_Window(d).y - top_Rect(boundsWithoutVisualOffset_Widget(toolBar)); | ||
1226 | if (show && !isVisible_Widget(toolBar)) { | ||
1227 | setFlags_Widget(toolBar, hidden_WidgetFlag, iFalse); | ||
1228 | setVisualOffset_Widget(toolBar, 0, 200, easeOut_AnimFlag); | ||
1229 | } | ||
1230 | else if (!show && isVisible_Widget(toolBar)) { | ||
1231 | setFlags_Widget(toolBar, hidden_WidgetFlag, iTrue); | ||
1232 | setVisualOffset_Widget(toolBar, height, 200, easeOut_AnimFlag); | ||
1233 | } | ||
1234 | } | ||
1235 | |||
1217 | static void updateRootSize_Window_(iWindow *d, iBool notifyAlways) { | 1236 | static void updateRootSize_Window_(iWindow *d, iBool notifyAlways) { |
1218 | iInt2 *size = &d->root->rect.size; | 1237 | iInt2 *size = &d->root->rect.size; |
1219 | const iInt2 oldSize = *size; | 1238 | const iInt2 oldSize = *size; |