From 52e35a7636097ae02ab6031ae5ca4becd68364be Mon Sep 17 00:00:00 2001 From: nakst <> Date: Fri, 12 Nov 2021 21:28:17 +0000 Subject: [PATCH] redesign toolbars --- apps/file_manager/ui.cpp | 18 +++++++++++++----- apps/font_book.cpp | 2 +- apps/image_editor.cpp | 18 ++++++++++++------ apps/system_monitor.cpp | 16 ++++++---------- apps/text_editor.cpp | 19 +++++++++++-------- desktop/desktop.cpp | 3 +-- desktop/gui.cpp | 7 ++++--- desktop/settings.cpp | 20 ++++++++++++++++---- desktop/styles.header | 5 ++++- res/Theme Source.dat | Bin 521128 -> 530140 bytes res/Theme.dat | Bin 29624 -> 30488 bytes util/designer2.cpp | 5 +++-- 12 files changed, 71 insertions(+), 42 deletions(-) diff --git a/apps/file_manager/ui.cpp b/apps/file_manager/ui.cpp index 3507fd8..02c94bd 100644 --- a/apps/file_manager/ui.cpp +++ b/apps/file_manager/ui.cpp @@ -589,7 +589,7 @@ void ThumbnailGenerateTask(Instance *, Task *task) { } // TODO Determine the best value for these constants -- maybe base it off the current UI scale factor? - uint32_t thumbnailMaximumWidth = 120; + uint32_t thumbnailMaximumWidth = 143; uint32_t thumbnailMaximumHeight = 80; EsRectangle targetRectangle = EsRectangleFit(ES_RECT_2S(thumbnailMaximumWidth, thumbnailMaximumHeight), ES_RECT_2S(originalWidth, originalHeight), false); uint32_t targetWidth = ES_RECT_WIDTH(targetRectangle), targetHeight = ES_RECT_HEIGHT(targetRectangle); @@ -1039,7 +1039,7 @@ int BreadcrumbBarMessage(EsElement *element, EsMessage *message) { #define ADD_BUTTON_TO_TOOLBAR(_command, _label, _icon, _accessKey, _name) \ { \ - _name = EsButtonCreate(toolbar, ES_FLAGS_DEFAULT, 0, _label); \ + _name = EsButtonCreate(buttonGroup, ES_FLAGS_DEFAULT, 0, _label); \ EsButtonSetIcon(_name, _icon); \ EsCommandAddButton(&instance->_command, _name); \ _name->accessKey = _accessKey; \ @@ -1047,7 +1047,7 @@ int BreadcrumbBarMessage(EsElement *element, EsMessage *message) { #define ADD_BUTTON_TO_STATUS_BAR(_command, _label, _icon, _accessKey, _name) \ { \ - _name = EsButtonCreate(statusBar, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_STATUS_BAR, _label); \ + _name = EsButtonCreate(buttonGroup, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_STATUS_BAR, _label); \ EsButtonSetIcon(_name, _icon); \ EsCommandAddButton(&instance->_command, _name); \ _name->accessKey = _accessKey; \ @@ -1084,22 +1084,30 @@ void InstanceCreateUI(Instance *instance) { // Toolbar: EsElement *toolbar = EsWindowGetToolbar(instance->window); + EsPanel *buttonGroup = EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL); ADD_BUTTON_TO_TOOLBAR(commandGoBackwards, nullptr, ES_ICON_GO_PREVIOUS_SYMBOLIC, 'B', button); + EsSpacerCreate(buttonGroup, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); ADD_BUTTON_TO_TOOLBAR(commandGoForwards, nullptr, ES_ICON_GO_NEXT_SYMBOLIC, 'F', button); + EsSpacerCreate(buttonGroup, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); ADD_BUTTON_TO_TOOLBAR(commandGoParent, nullptr, ES_ICON_GO_UP_SYMBOLIC, 'U', button); - EsSpacerCreate(toolbar, ES_FLAGS_DEFAULT); - instance->breadcrumbBar = EsTextboxCreate(toolbar, ES_CELL_H_FILL | ES_TEXTBOX_EDIT_BASED | ES_TEXTBOX_REJECT_EDIT_IF_LOST_FOCUS, {}); + EsSpacerCreate(toolbar, ES_FLAGS_DEFAULT, ES_STYLE_TOOLBAR_SPACER); + instance->breadcrumbBar = EsTextboxCreate(toolbar, ES_CELL_H_FILL | ES_TEXTBOX_EDIT_BASED | ES_TEXTBOX_REJECT_EDIT_IF_LOST_FOCUS); instance->breadcrumbBar->messageUser = BreadcrumbBarMessage; instance->breadcrumbBar->accessKey = 'A'; EsTextboxUseBreadcrumbOverlay(instance->breadcrumbBar); + EsSpacerCreate(toolbar, ES_FLAGS_DEFAULT, ES_STYLE_TOOLBAR_SPACER); + buttonGroup = EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL); ADD_BUTTON_TO_TOOLBAR(commandNewFolder, interfaceString_FileManagerNewFolderToolbarItem, ES_ICON_FOLDER_NEW_SYMBOLIC, 'N', instance->newFolderButton); // Status bar: EsPanel *statusBar = EsPanelCreate(rootPanel, ES_CELL_H_FILL | ES_PANEL_HORIZONTAL, ES_STYLE_PANEL_STATUS_BAR); instance->status = EsTextDisplayCreate(statusBar, ES_CELL_H_FILL); + buttonGroup = EsPanelCreate(statusBar, ES_PANEL_HORIZONTAL); ADD_BUTTON_TO_STATUS_BAR(commandViewDetails, nullptr, ES_ICON_VIEW_LIST_SYMBOLIC, 0, button); + EsSpacerCreate(buttonGroup, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); ADD_BUTTON_TO_STATUS_BAR(commandViewTiles, nullptr, ES_ICON_VIEW_LIST_COMPACT_SYMBOLIC, 0, button); + EsSpacerCreate(buttonGroup, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); ADD_BUTTON_TO_STATUS_BAR(commandViewThumbnails, nullptr, ES_ICON_VIEW_GRID_SYMBOLIC, 0, button); // Load initial folder: diff --git a/apps/font_book.cpp b/apps/font_book.cpp index c0e011f..1cfcc99 100644 --- a/apps/font_book.cpp +++ b/apps/font_book.cpp @@ -360,7 +360,7 @@ void _start() { EsSpacerCreate(toolbar, ES_CELL_H_FILL); - EsButton *button = EsButtonCreate(toolbar, ES_BUTTON_DROPDOWN, {}, INTERFACE_STRING(FontBookVariants)); + EsButton *button = EsButtonCreate(EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL), ES_BUTTON_DROPDOWN, {}, INTERFACE_STRING(FontBookVariants)); button->accessKey = 'V'; EsButtonOnCommand(button, VariantsPopupCreate); diff --git a/apps/image_editor.cpp b/apps/image_editor.cpp index 0469282..7db4b91 100644 --- a/apps/image_editor.cpp +++ b/apps/image_editor.cpp @@ -721,44 +721,50 @@ void InstanceCreate(EsMessage *message) { EsButton *button; EsFileMenuAddToToolbar(toolbar); - button = EsButtonCreate(toolbar, ES_BUTTON_DROPDOWN, ES_STYLE_PUSH_BUTTON_TOOLBAR_BIG, INTERFACE_STRING(ImageEditorImage)); + button = EsButtonCreate(EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL), ES_BUTTON_DROPDOWN, ES_STYLE_PUSH_BUTTON_TOOLBAR, INTERFACE_STRING(ImageEditorImage)); EsButtonSetIcon(button, ES_ICON_IMAGE_X_GENERIC); button->accessKey = 'I'; - EsSpacerCreate(toolbar, ES_FLAGS_DEFAULT); EsButtonOnCommand(button, MenuImage); - button = EsButtonCreate(toolbar, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_TOOLBAR_MEDIUM); + EsPanel *buttonGroup = EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL); + button = EsButtonCreate(buttonGroup); EsCommandAddButton(EsCommandByID(instance, ES_COMMAND_UNDO), button); EsButtonSetIcon(button, ES_ICON_EDIT_UNDO_SYMBOLIC); button->accessKey = 'U'; - button = EsButtonCreate(toolbar, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_TOOLBAR_MEDIUM); + EsSpacerCreate(buttonGroup, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); + button = EsButtonCreate(buttonGroup); EsCommandAddButton(EsCommandByID(instance, ES_COMMAND_REDO), button); EsButtonSetIcon(button, ES_ICON_EDIT_REDO_SYMBOLIC); button->accessKey = 'R'; EsSpacerCreate(toolbar, ES_CELL_FILL); - button = instance->toolDropdown = EsButtonCreate(toolbar, ES_BUTTON_DROPDOWN, ES_STYLE_PUSH_BUTTON_TOOLBAR_BIG, INTERFACE_STRING(ImageEditorPickTool)); + button = instance->toolDropdown = EsButtonCreate(EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL), ES_BUTTON_DROPDOWN, + ES_STYLE_PUSH_BUTTON_TOOLBAR_BIG, INTERFACE_STRING(ImageEditorPickTool)); EsButtonSetIcon(button, ES_ICON_DRAW_FREEHAND); EsButtonOnCommand(button, MenuTools); button->accessKey = 'T'; - instance->toolPanel = EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL, ES_STYLE_PANEL_TOOLBAR); + instance->toolPanel = EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL); button = EsButtonCreate(instance->toolPanel, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_TOOLBAR_BIG, INTERFACE_STRING(ImageEditorToolBrush)); EsCommandAddButton(&instance->commandBrush, button); EsButtonSetIcon(button, ES_ICON_DRAW_FREEHAND); button->accessKey = 'B'; + EsSpacerCreate(instance->toolPanel, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); button = EsButtonCreate(instance->toolPanel, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_TOOLBAR_BIG, INTERFACE_STRING(ImageEditorToolFill)); EsCommandAddButton(&instance->commandFill, button); EsButtonSetIcon(button, ES_ICON_COLOR_FILL); button->accessKey = 'F'; + EsSpacerCreate(instance->toolPanel, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); button = EsButtonCreate(instance->toolPanel, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_TOOLBAR_BIG, INTERFACE_STRING(ImageEditorToolRectangle)); EsCommandAddButton(&instance->commandRectangle, button); EsButtonSetIcon(button, ES_ICON_DRAW_RECTANGLE); button->accessKey = 'E'; + EsSpacerCreate(instance->toolPanel, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); button = EsButtonCreate(instance->toolPanel, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_TOOLBAR_BIG, INTERFACE_STRING(ImageEditorToolSelect)); EsCommandAddButton(&instance->commandSelect, button); EsButtonSetIcon(button, ES_ICON_OBJECT_GROUP); button->accessKey = 'S'; + EsSpacerCreate(instance->toolPanel, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); button = EsButtonCreate(instance->toolPanel, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_TOOLBAR_BIG, INTERFACE_STRING(ImageEditorToolText)); EsCommandAddButton(&instance->commandText, button); EsButtonSetIcon(button, ES_ICON_DRAW_TEXT); diff --git a/apps/system_monitor.cpp b/apps/system_monitor.cpp index 5feed5a..1530822 100644 --- a/apps/system_monitor.cpp +++ b/apps/system_monitor.cpp @@ -401,16 +401,12 @@ void ProcessApplicationMessage(EsMessage *message) { ES_CELL_FILL | ES_PANEL_TABLE | ES_PANEL_HORIZONTAL | ES_PANEL_V_SCROLL_AUTO, &stylePanelMemoryStatistics); EsPanelSetBands(instance->panelMemoryStatistics, 2 /* columns */); - EsElement *toolbar = EsWindowGetToolbar(window); - AddTab(toolbar, DISPLAY_PROCESSES, "Processes", true); - AddTab(toolbar, DISPLAY_GENERAL_LOG, "System log"); - AddTab(toolbar, DISPLAY_MEMORY, "Memory"); - - EsSpacerCreate(toolbar, ES_CELL_H_FILL); - - EsButtonOnCommand(EsButtonCreate(toolbar, ES_FLAGS_DEFAULT, 0, "Shutdown"), [] (Instance *, EsElement *, EsCommand *) { - EsSystemShowShutdownDialog(); - }); + EsElement *buttonGroup = EsPanelCreate(EsWindowGetToolbar(window), ES_PANEL_HORIZONTAL); + AddTab(buttonGroup, DISPLAY_PROCESSES, "Processes", true); + EsSpacerCreate(buttonGroup, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); + AddTab(buttonGroup, DISPLAY_GENERAL_LOG, "System log"); + EsSpacerCreate(buttonGroup, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); + AddTab(buttonGroup, DISPLAY_MEMORY, "Memory"); } else if (message->type == ES_MSG_INSTANCE_DESTROY) { processes.Free(); } diff --git a/apps/text_editor.cpp b/apps/text_editor.cpp index e2dc682..d04bb16 100644 --- a/apps/text_editor.cpp +++ b/apps/text_editor.cpp @@ -287,7 +287,7 @@ void ProcessApplicationMessage(EsMessage *message) { EsFileMenuAddToToolbar(toolbarMain); - button = EsButtonCreate(toolbarMain, ES_FLAGS_DEFAULT, {}, INTERFACE_STRING(CommonSearchOpen)); + button = EsButtonCreate(EsPanelCreate(toolbarMain, ES_PANEL_HORIZONTAL), ES_FLAGS_DEFAULT, {}, INTERFACE_STRING(CommonSearchOpen)); button->accessKey = 'S'; EsButtonSetIcon(button, ES_ICON_EDIT_FIND_SYMBOLIC); @@ -296,7 +296,7 @@ void ProcessApplicationMessage(EsMessage *message) { EsElementFocus(instance->textboxSearch); }); - button = EsButtonCreate(toolbarMain, ES_BUTTON_DROPDOWN, {}, INTERFACE_STRING(CommonFormatPopup)); + button = EsButtonCreate(EsPanelCreate(toolbarMain, ES_PANEL_HORIZONTAL), ES_BUTTON_DROPDOWN, {}, INTERFACE_STRING(CommonFormatPopup)); button->accessKey = 'M'; EsButtonSetIcon(button, ES_ICON_FORMAT_TEXT_LARGER_SYMBOLIC); EsCommandAddButton(&instance->commandFormat, button); @@ -308,7 +308,7 @@ void ProcessApplicationMessage(EsMessage *message) { EsElement *toolbarSearch = instance->toolbarSearch = EsWindowGetToolbar(window, true); - button = EsButtonCreate(toolbarSearch, ES_FLAGS_DEFAULT, 0); + button = EsButtonCreate(EsPanelCreate(toolbarSearch, ES_PANEL_HORIZONTAL), ES_FLAGS_DEFAULT, 0); button->cName = "go back", button->accessKey = 'X'; EsButtonSetIcon(button, ES_ICON_GO_FIRST_SYMBOLIC); @@ -316,10 +316,10 @@ void ProcessApplicationMessage(EsMessage *message) { EsWindowSwitchToolbar(instance->window, instance->toolbarMain, ES_TRANSITION_SLIDE_DOWN); }); - EsPanel *section = EsPanelCreate(toolbarSearch, ES_PANEL_HORIZONTAL); - EsTextDisplayCreate(section, ES_FLAGS_DEFAULT, 0, INTERFACE_STRING(CommonSearchPrompt)); + EsSpacerCreate(toolbarSearch, ES_FLAGS_DEFAULT, 0, 14, 0); - instance->textboxSearch = EsTextboxCreate(section, ES_FLAGS_DEFAULT, {}); + EsTextDisplayCreate(toolbarSearch, ES_FLAGS_DEFAULT, 0, INTERFACE_STRING(CommonSearchPrompt)); + instance->textboxSearch = EsTextboxCreate(toolbarSearch, ES_FLAGS_DEFAULT, {}); instance->textboxSearch->cName = "search textbox"; instance->textboxSearch->accessKey = 'S'; @@ -341,12 +341,15 @@ void ProcessApplicationMessage(EsMessage *message) { return 0; }; + EsSpacerCreate(toolbarSearch, ES_FLAGS_DEFAULT, 0, 7, 0); instance->displaySearch = EsTextDisplayCreate(toolbarSearch, ES_CELL_H_FILL, {}, ""); - button = EsButtonCreate(toolbarSearch, ES_FLAGS_DEFAULT, {}, INTERFACE_STRING(CommonSearchNext)); + EsPanel *buttonGroup = EsPanelCreate(toolbarSearch, ES_PANEL_HORIZONTAL); + button = EsButtonCreate(buttonGroup, ES_FLAGS_DEFAULT, {}, INTERFACE_STRING(CommonSearchNext)); button->accessKey = 'N'; EsCommandAddButton(&instance->commandFindNext, button); - button = EsButtonCreate(toolbarSearch, ES_FLAGS_DEFAULT, {}, INTERFACE_STRING(CommonSearchPrevious)); + EsSpacerCreate(buttonGroup, ES_CELL_V_FILL, ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR); + button = EsButtonCreate(buttonGroup, ES_FLAGS_DEFAULT, {}, INTERFACE_STRING(CommonSearchPrevious)); button->accessKey = 'P'; EsCommandAddButton(&instance->commandFindPrevious, button); } else if (message->type == ES_MSG_INSTANCE_OPEN) { diff --git a/desktop/desktop.cpp b/desktop/desktop.cpp index c8712d0..c62dbcd 100644 --- a/desktop/desktop.cpp +++ b/desktop/desktop.cpp @@ -19,7 +19,7 @@ // TODO Desktop experience: // - Alt+tab. // - Changing wallpaper. -// + // TODO Global shortcuts: // - Restoring closed tabs. // - Switch to window. @@ -28,7 +28,6 @@ // TODO Restarting Desktop if it crashes. // TODO Make sure applications can't delete |Fonts:. // TODO Handle open document deletion. -// TODO Store an array of processes for each InstalledApplication. #define MSG_SETUP_DESKTOP_UI ((EsMessageType) (ES_MSG_USER_START + 1)) diff --git a/desktop/gui.cpp b/desktop/gui.cpp index 35be2bd..cd5479e 100644 --- a/desktop/gui.cpp +++ b/desktop/gui.cpp @@ -1029,7 +1029,7 @@ void EsMenuAddCommandsFromToolbar(EsMenu *menu, EsElement *element) { EsMenuAddCommand(menu, button->command->check, button->label, button->labelBytes, button->command); } } else { - EsMenuAddCommandsFromToolbar(menu, element); + EsMenuAddCommandsFromToolbar(menu, child); } } } @@ -5693,7 +5693,7 @@ void EsFileMenuCreate(EsInstance *_instance, EsElement *element, uint64_t menuFl instance->startupInformation->filePath, instance->startupInformation->filePathBytes); } - EsButton *renameButton = EsButtonCreate(panel3, ES_BUTTON_TOOLBAR); + EsButton *renameButton = EsButtonCreate(EsPanelCreate(panel3, ES_PANEL_HORIZONTAL), ES_BUTTON_TOOLBAR); if (!renameButton) goto show; EsButtonSetIcon(renameButton, ES_ICON_DOCUMENT_EDIT_SYMBOLIC); EsButtonOnCommand(renameButton, FileMenuRename); @@ -5741,7 +5741,8 @@ void FileMenuCreate(EsInstance *_instance, EsElement *element, EsCommand *) { } void EsFileMenuAddToToolbar(EsElement *element, const EsFileMenuSettings *settings) { - EsButton *button = EsButtonCreate(element, ES_BUTTON_DROPDOWN, 0, INTERFACE_STRING(CommonFileMenu)); + EsPanel *buttonGroup = EsPanelCreate(element, ES_PANEL_HORIZONTAL); + EsButton *button = EsButtonCreate(buttonGroup, ES_BUTTON_DROPDOWN, 0, INTERFACE_STRING(CommonFileMenu)); if (!button) return; button->accessKey = 'F'; button->userData = (void *) settings; diff --git a/desktop/settings.cpp b/desktop/settings.cpp index ee9413d..1d7df46 100644 --- a/desktop/settings.cpp +++ b/desktop/settings.cpp @@ -46,6 +46,16 @@ const EsStyle styleSettingsGroupContainer = { }, }; +const EsStyle styleAllSettingsGroupContainer = { + .metrics = { + .mask = ES_THEME_METRICS_PREFERRED_WIDTH | ES_THEME_METRICS_INSETS | ES_THEME_METRICS_GAP_ALL, + .insets = ES_RECT_1(5), + .preferredWidth = 400, + .gapMajor = 5, + .gapMinor = 5, + }, +}; + const EsStyle styleSettingsGroupContainer2 = { .inherit = ES_STYLE_BUTTON_GROUP_CONTAINER, @@ -106,7 +116,7 @@ const EsStyle styleSettingsOverlayPanel = { }; const EsStyle styleSettingsButton = { - .inherit = ES_STYLE_PUSH_BUTTON_TOOLBAR, + .inherit = ES_STYLE_PUSH_BUTTON_NORMAL, .metrics = { .mask = ES_THEME_METRICS_PREFERRED_WIDTH | ES_THEME_METRICS_PREFERRED_HEIGHT | ES_THEME_METRICS_LAYOUT_VERTICAL @@ -860,7 +870,8 @@ void InstanceSettingsCreate(EsMessage *message) { { EsElement *toolbar = EsWindowGetToolbar(instance->window); - EsButton *backButton = EsButtonCreate(toolbar, ES_BUTTON_TOOLBAR | ES_ELEMENT_STICKY_ACCESS_KEY, 0, INTERFACE_STRING(DesktopSettingsBackButton)); + EsButton *backButton = EsButtonCreate(EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL), ES_BUTTON_TOOLBAR | ES_ELEMENT_STICKY_ACCESS_KEY, + 0, INTERFACE_STRING(DesktopSettingsBackButton)); instance->backButton = backButton; backButton->accessKey = 'A'; EsButtonSetIcon(backButton, ES_ICON_GO_HOME_SYMBOLIC); @@ -869,7 +880,8 @@ void InstanceSettingsCreate(EsMessage *message) { EsSpacerCreate(toolbar, ES_CELL_FILL); - EsButton *undoButton = EsButtonCreate(toolbar, ES_BUTTON_TOOLBAR | ES_ELEMENT_STICKY_ACCESS_KEY, 0, INTERFACE_STRING(DesktopSettingsUndoButton)); + EsButton *undoButton = EsButtonCreate(EsPanelCreate(toolbar, ES_PANEL_HORIZONTAL), ES_BUTTON_TOOLBAR | ES_ELEMENT_STICKY_ACCESS_KEY, + 0, INTERFACE_STRING(DesktopSettingsUndoButton)); instance->undoButton = undoButton; undoButton->accessKey = 'U'; EsButtonSetIcon(undoButton, ES_ICON_EDIT_UNDO_SYMBOLIC); @@ -886,7 +898,7 @@ void InstanceSettingsCreate(EsMessage *message) { } { - EsPanel *container = EsPanelCreate(content, ES_CELL_H_SHRINK | ES_PANEL_TABLE | ES_PANEL_HORIZONTAL, &styleSettingsGroupContainer); + EsPanel *container = EsPanelCreate(content, ES_CELL_H_SHRINK | ES_PANEL_TABLE | ES_PANEL_HORIZONTAL, &styleAllSettingsGroupContainer); EsPanelSetBands(container, 4); EsSort(settingsPages, sizeof(settingsPages) / sizeof(settingsPages[0]), sizeof(settingsPages[0]), [] (const void *_a, const void *_b, EsGeneric) { diff --git a/desktop/styles.header b/desktop/styles.header index bfb943f..1868b24 100644 --- a/desktop/styles.header +++ b/desktop/styles.header @@ -94,7 +94,7 @@ define ES_STYLE_PANEL_WINDOW_WITH_STATUS_BAR_CONTENT (ES_STYLE_CAST(1483)) private define ES_STYLE_SLIDER_POINT (ES_STYLE_CAST(1607)) define ES_STYLE_PUSH_BUTTON_DANGEROUS (ES_STYLE_CAST(1345)) private define ES_STYLE_TEXTBOX_INLINE (ES_STYLE_CAST(1477)) -private define ES_STYLE_PUSH_BUTTON_NORMAL (ES_STYLE_CAST(1347)) +define ES_STYLE_PUSH_BUTTON_NORMAL (ES_STYLE_CAST(1347)) define ES_STYLE_TEXTBOX_BORDERED_SINGLE_COMPACT (ES_STYLE_CAST(1403)) define ES_STYLE_TEXTBOX_NO_BORDER (ES_STYLE_CAST(1405)) define ES_STYLE_TEXTBOX_BORDERED_SINGLE (ES_STYLE_CAST(1401)) @@ -117,3 +117,6 @@ private define ES_STYLE_WINDOW_TAB_INACTIVE (ES_STYLE_CAST(1409)) private define ES_STYLE_SCROLLBAR_BAR_VERTICAL (ES_STYLE_CAST(1365)) private define ES_STYLE_SCROLLBAR_THUMB_HORIZONTAL (ES_STYLE_CAST(1367)) private define ES_STYLE_SCROLLBAR_THUMB_VERTICAL (ES_STYLE_CAST(1369)) +define ES_STYLE_TOOLBAR_SPACER (ES_STYLE_CAST(5)) +define ES_STYLE_TOOLBAR_BUTTON_GROUP_SEPARATOR (ES_STYLE_CAST(7)) +define ES_STYLE_TOOLBAR_SPACER_SMALL (ES_STYLE_CAST(3)) diff --git a/res/Theme Source.dat b/res/Theme Source.dat index 5aa9b690f082d324de33ec2a0bdc0acd8199a6e4..e2e685ab49edf6e9361879a5d705424d0b66ded6 100644 GIT binary patch delta 2152 zcmY*a3v3is6zzLEZ{92cy8If5(4CgGJH)a(Tgt~!$b!%hVp##DB`vm~5shsZs89`` z;wM%R*!pU3kz!i^At1#X2V;U8tx-|1_yM%GNQ`0yZ9ynBBK6M9;+9P&*`0Sk=bU%$ z-M7!Ve>$KJAqfcyk2n$%ikV2(rX31?9&~Kkv{6*B$*nWye14bIcy?ewM5ssTwNa)MdN&I}v`0>Ct>_+| z1_##>r7E}}=Pp3_|fABv9yAIZ>NtbMp}b%!u1QG9e_oKey)9VVcsuwJOnB#H3R zJ~9qkw#x<3l*%52w=Xiy{uxdqxe%Vp6sTG0$Th}$Sh@ryb1~)1OO7=nnxw>lIC41&vc)pncRBys>!8$z7 z3sWzg-XiHnZ=GDjtTq({Tw|$fD2;MufaWt}^D+6!A@~J02l#p;d|J+On6KaIkWbD7 zeGOGaWshp?SNStYKf;{GovHk9uj8{%+YJ8#{%5Mgc(2uPm+`A9JYnVIm6a9c(EJp4 z8(F*figa=b2KMq|fHGQ+x{4Y)1)0H}JlzWmRfx zYa4){^Jpg38Qc(LIjOT+K;ExBhX%0dsWh5_N1qTMG>k^0we7)L0jn0tf=g$uaRm&uqc7#QAGtcdi?C5y_}QmMz6B2KkTTHEgS3X?FRb zT|QFI{%>sxaiaa}m=JU9fbnm{v6%rM96me%`Yx79=h^@u?BUwY_Iv-}?)v+PA{ug4 zL@17*^h5t@f(Cwzx@ph?qIBRk94K14K0&%s$8S>3o|* zHjd+I|6i?PVISyXShm4y}1J{$d$!^90w27GlEbr{?nQ62e* z`AtJ@fT12VPadrK294NTNi?S@@bW|q`ZM-e}P%|^UeiR)7`86zA3C7Ap z$s+ElRV7@3rg`EUKJrkN)ZgE4&Bat=(`p)rOSI=r+`HByw5B89lGEJ(`k>JW*^Nzh z)|f%d$2`UH^wW6RGv!RWn2F7=XF%vG>NuEu9vW*3VsGqGX$a?SHkn43#4a>sutYd` zosF{#hQl}s)lqU$xh{_gd#A>OP4Yz-%VoLS)-5I zS?!wg@m`K@CayR* z1^yk)ZE*HTptR^pA1IQfiJF-@DY7e=JjrD^@vBq-Wi`wRuiQbCN8aMdht@7BD;1#! hl4Ld)*JY;Rl$G?5xf*ssMd#yh`|fyq2hX@ zN*}C__E5CA#p{DY+lb?X(ujf)s;2nj-MolbunO^pqLXgLhcnEaIsZA|IWy0%7?<9J zOTg#zEmM8ITEeHAbNlS9t+uwd@@=FxJ-;Elh$q&WJhMNQb`Ny~u`pf_A2SH%CJ~*l zI~~PLJ2UyKxXzvV$+X%1cB#m}Qd%JG4$39};cT@6L%i-sJ$DEF_@Y|b)@GG~G)0;! zO%qlb$&KS>?-D3)O8LN0g~$crI-pZS0@yJ|3l(=+bT4Wqq!3=PHRx86O?cxoj5-?m z`q&ao&LKJ;-l)b!Xc~!Xp1?+^U~70LXkk7|^lQ_}Wo3jO%>u-|9HTLbXIAGjO~)2Z ziwYUs0hlbv5;oqN!W^uaNt)3bql`Kl#qXJVU$F1HT7R;annkCJ`336qV+OChA=L!?Cfbm#?wZkC#mz`93T8$`s4HX2f}woHA4#(QRBQ#)M?L$ z5=w6hB6uq!g$Y%Wl=s0vd$#JwdkqlA;Mn>PxzCkF%Q?2)4=_j`dJ84kZ@x(KvWhd@m91Qpq+>(B`z zcARdk^IkT41mYrpn?_6ipGT&FwxEs0zaRn+=~eF^@WW3laqC^m#PATkw7AGBGC_6_ zMyLnY5`5i7>czQocDjb=(Gp3UWvcMk23Ch-SFwQD+RScNf*~S@*nudY(H%qk1d|o| HS?|2R1(7#? diff --git a/res/Theme.dat b/res/Theme.dat index 1dcddd3eab0ae28c3c1634892d78d55a10786073..b675896fcf724083b8c94e9256bcd9695b3ba6f5 100644 GIT binary patch delta 6734 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 KrhxApWB&#>UcTP| diff --git a/util/designer2.cpp b/util/designer2.cpp index 768ffc9..e0276d1 100644 --- a/util/designer2.cpp +++ b/util/designer2.cpp @@ -20,6 +20,7 @@ // Prototyping display: previewing state transitions. // TODO Additional features: +// Inactive and disabled state. // Undoing a delete does not preserve an instance's layer. // Having to link to the end of a conditional object chain is a bit strange. // Automatically cleaning up unused objects. @@ -3086,8 +3087,8 @@ void ObjectAddCommandInternal(void *cp) { object.type = (ObjectType) (uintptr_t) cp; object.id = ++objectIDAllocator; Property p; - int32_t x = canvas->panX + UI_RECT_WIDTH(canvas->bounds) / 2; - int32_t y = canvas->panY + UI_RECT_HEIGHT(canvas->bounds) / 2; + int32_t x = canvas->panX + UI_RECT_WIDTH(canvas->bounds) / 2 / canvas->zoom; + int32_t y = canvas->panY + UI_RECT_HEIGHT(canvas->bounds) / 2 / canvas->zoom; x -= x % CANVAS_ALIGN, y -= y % CANVAS_ALIGN; int32_t w = object.type == OBJ_COMMENT ? 30 : 80; int32_t h = object.type == OBJ_COMMENT ? 10 : 60;