From 5256335b45a38202e21f3ec13ff3dec0f59fb8ca Mon Sep 17 00:00:00 2001 From: nakst <> Date: Fri, 8 Oct 2021 14:01:01 +0100 Subject: [PATCH] misc theme changes --- apps/test.cpp | 20 ++++++++++++++++- desktop/desktop.cpp | 2 +- desktop/gui.cpp | 4 ++++ desktop/os.header | 3 ++- desktop/settings.cpp | 43 ++++++++++++++++++++----------------- desktop/theme.cpp | 50 +++++++++++++++++++++++++++++++------------ res/Theme Source.dat | Bin 561744 -> 559912 bytes res/Theme.dat | Bin 29672 -> 29384 bytes shared/math.cpp | 18 ++++++++-------- util/api_table.ini | 1 + util/designer2.cpp | 11 +++++----- 11 files changed, 101 insertions(+), 51 deletions(-) diff --git a/apps/test.cpp b/apps/test.cpp index c6a3543..4be63b8 100644 --- a/apps/test.cpp +++ b/apps/test.cpp @@ -153,7 +153,25 @@ void InitialiseInstance(EsInstance *instance) { EsButtonCreate(panel, ES_BUTTON_CHECKBOX, 0, "Checkbox"); EsButtonOnCommand(EsButtonCreate(panel, ES_FLAGS_DEFAULT, 0, "Alert 1"), [] (EsInstance *, EsElement *element, EsCommand *) { - EsDialogShow(element->window, "Title", -1, "Content.", -1, ES_ICON_DIALOG_WARNING, ES_DIALOG_ALERT_OK_BUTTON); + EsDialog *dialog = EsDialogShow(element->window, "Rename multiple items", -1, + "Choose the format for the new names.", -1, ES_ICON_DOCUMENT_EDIT, ES_FLAGS_DEFAULT); + EsElement *contentArea = EsDialogGetContentArea(dialog); + + EsPanel *table = EsPanelCreate(contentArea, ES_PANEL_HORIZONTAL | ES_PANEL_TABLE, ES_STYLE_PANEL_FORM_TABLE); + EsPanelSetBands(table, 2); + EsTextDisplayCreate(table, ES_CELL_H_RIGHT, ES_STYLE_TEXT_LABEL, "Prefix:"); + EsTextboxInsert(EsTextboxCreate(table), "file "); + EsTextDisplayCreate(table, ES_CELL_H_RIGHT | ES_CELL_V_TOP, ES_STYLE_TEXT_RADIO_GROUP_LABEL, "Content:"); + EsPanel *radioGroup = EsPanelCreate(table, ES_PANEL_RADIO_GROUP | ES_CELL_H_EXPAND); + EsButton *button = EsButtonCreate(radioGroup, ES_BUTTON_RADIOBOX | ES_CELL_H_EXPAND, 0, "Counter"); + EsButtonSetCheck(button, ES_CHECK_CHECKED); + EsButtonCreate(radioGroup, ES_BUTTON_RADIOBOX | ES_CELL_H_EXPAND, 0, "Original name"); + EsButtonCreate(radioGroup, ES_BUTTON_RADIOBOX | ES_CELL_H_EXPAND, 0, "Date modified"); + EsTextDisplayCreate(table, ES_CELL_H_RIGHT, ES_STYLE_TEXT_LABEL, "Suffix:"); + EsTextboxCreate(table); + EsTextDisplayCreate(contentArea, ES_CELL_H_EXPAND, ES_STYLE_TEXT_PARAGRAPH, "Example: file 1.txt"); + EsDialogAddButton(dialog, ES_FLAGS_DEFAULT, 0, "Cancel"); + EsDialogAddButton(dialog, ES_BUTTON_DEFAULT, 0, "Rename all"); }); EsPanel *table = EsPanelCreate(panel, ES_CELL_H_FILL | ES_PANEL_TABLE | ES_PANEL_HORIZONTAL | ES_PANEL_TABLE_H_JUSTIFY); diff --git a/desktop/desktop.cpp b/desktop/desktop.cpp index 51d1564..b4f5c52 100644 --- a/desktop/desktop.cpp +++ b/desktop/desktop.cpp @@ -1277,7 +1277,7 @@ void ShutdownModalCreate() { ES_CELL_H_FILL, ES_STYLE_TEXT_PARAGRAPH, INTERFACE_STRING(DesktopConfirmShutdown))->cName = "dialog contents"; EsPanel *buttonArea = EsPanelCreate(dialog, ES_PANEL_HORIZONTAL | ES_PANEL_REVERSE | ES_CELL_H_FILL, ES_STYLE_DIALOG_BUTTON_AREA); EsButton *cancelButton = EsButtonCreate(buttonArea, ES_BUTTON_DEFAULT | ES_BUTTON_CANCEL, 0, INTERFACE_STRING(CommonCancel)); - EsButton *restartButton = EsButtonCreate(buttonArea, ES_FLAGS_DEFAULT, 0, INTERFACE_STRING(DesktopRestartAction)); + EsButton *restartButton = EsButtonCreate(buttonArea, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_DANGEROUS, INTERFACE_STRING(DesktopRestartAction)); EsButton *shutdownButton = EsButtonCreate(buttonArea, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_DANGEROUS, INTERFACE_STRING(DesktopShutdownAction)); EsElementFocus(cancelButton); diff --git a/desktop/gui.cpp b/desktop/gui.cpp index abb15ed..2d76057 100644 --- a/desktop/gui.cpp +++ b/desktop/gui.cpp @@ -3723,6 +3723,10 @@ EsButton *EsDialogAddButton(EsDialog *dialog, uint64_t flags, const EsStyle *sty return button; } +EsElement *EsDialogGetContentArea(EsDialog *dialog) { + return dialog->contentArea; +} + // --------------------------------- Canvas panes. struct EsCanvasPane : EsElement { diff --git a/desktop/os.header b/desktop/os.header index 6a6e455..857782b 100644 --- a/desktop/os.header +++ b/desktop/os.header @@ -2427,10 +2427,11 @@ function void EsMenuClose(EsMenu *menu); function void EsMenuCloseAll(); function void EsMenuAddCommandsFromToolbar(EsMenu *menu, EsElement *element); -function void EsDialogClose(EsDialog *dialog); function EsDialog *EsDialogShow(EsWindow *window, STRING title, STRING content, uint32_t iconID, uint32_t flags = ES_FLAGS_DEFAULT); function EsButton *EsDialogAddButton(EsDialog *dialog, uint64_t flags = ES_FLAGS_DEFAULT, const EsStyle *style = ES_NULL, STRING label = BLANK_STRING, EsCommandCallback callback = ES_NULL); +function void EsDialogClose(EsDialog *dialog); +function EsElement *EsDialogGetContentArea(EsDialog *dialog); function void EsFileMenuAddToToolbar(EsElement *toolbar, const EsFileMenuSettings *settings = ES_NULL); function void EsFileMenuCreate(ES_INSTANCE_TYPE *instance, EsElement *parent, uint64_t flags = ES_FLAGS_DEFAULT); diff --git a/desktop/settings.cpp b/desktop/settings.cpp index dfbe5a9..53e4c46 100644 --- a/desktop/settings.cpp +++ b/desktop/settings.cpp @@ -51,18 +51,27 @@ const EsStyle styleSettingsGroupContainer2 = { }, }; -const uint32_t windowColors[] = { - 0xFF0032, - 0xFF6042, - 0xFF7F24, // TODO Hue shift looks bad. - 0xFFFF24, // TODO Hue shift looks bad. - 0x67EFC4, - 0x54ACE5, - 0x448CF5, - 0x044CF5, - 0xAC00FF, - 0xE8ECF9, - 0xB7BBC5, // TODO Make this look better when deactivated. +const uint32_t windowColors[][7] = { + // TODO Improve these! + + // Preview Active 1 Active 2 Active 3 Inactive 1 Inactive 2 Inactive 3 +#if 0 + { 0xFFE7E2EA, 0xFFE7E2EA, 0xFFD2CBD5, 0xFFAFA4B9, 0xFFD2D0F2, 0xFFCDCCFA, 0xFFB5BEDF }, + { 0xFF83B8F7, 0xFF83B8F7, 0xFF6D9CDF, 0xFF4166B5, 0xFFD2D0F2, 0xFFCDCCFA, 0xFFB5BEDF }, + { 0xFFE0E0E0, 0xFFE4E5E7, 0xFFCCCDCF, 0xFF909193, 0xFFD2D0F2, 0xFFCDCCFA, 0xFFB5BEDF }, +#else + { 0xFFFF0032, 0xFFF78399, 0xFFDF6D83, 0xFFB54157, 0xFFF2D0D6, 0xFFFACCD5, 0xFFDFB5BD }, + { 0xFFFF6042, 0xFFF7AEA1, 0xFFDF978A, 0xFFB56C5F, 0xFFF2DCD8, 0xFFFADDD7, 0xFFDFC4BF }, + { 0xFFFF7F24, 0xFFF7BC93, 0xFFDFA57D, 0xFFB57A51, 0xFFF2E0D4, 0xFFFAE2D2, 0xFFDFC9BA }, + { 0xFFFFFF24, 0xFFF7F793, 0xFFDFDF7D, 0xFFB5B551, 0xFFF2F2D4, 0xFFFAFAD2, 0xFFDFDFBA }, + { 0xFF67EFC4, 0xFFA9E7D3, 0xFF94D1BD, 0xFF6BA996, 0xFFD0E2DD, 0xFFD1EAE2, 0xFFBAD1C9 }, + { 0xFF54ACE5, 0xFF9BC3DD, 0xFF87AEC8, 0xFF6088A2, 0xFFC5D1D9, 0xFFC6D6E0, 0xFFB0BEC8 }, + { 0xFF448CF5, 0xFF9CBDED, 0xFF87A7D6, 0xFF5D7EAD, 0xFFD0DAE8, 0xFFD0DDF0, 0xFFB9C4D6 }, + { 0xFF044CF5, 0xFF7FA0ED, 0xFF6A8AD6, 0xFF4061AD, 0xFFC8D1E8, 0xFFC4D1F0, 0xFFAEBAD6 }, + { 0xFFAC00FF, 0xFFD183F7, 0xFFB96DDF, 0xFF8F41B5, 0xFFE6D0F2, 0xFFEBCCFA, 0xFFD1B5DF }, + { 0xFFE8ECF9, 0xFFE9EBF1, 0xFFD2D3D9, 0xFFA9AAB0, 0xFFEAEAEC, 0xFFF1F1F4, 0xFFD6D7D9 }, + { 0xFFB7BBC5, 0xFFB8BABE, 0xFFA6A7AC, 0xFF85878B, 0xFFB9B9BA, 0xFFBEBFC1, 0xFFA9AAAC }, +#endif }; const EsStyle styleSettingsGroupContainer3 = { @@ -619,7 +628,7 @@ int SettingsColorButtonMessage(EsElement *element, EsMessage *message) { uint32_t cornerRadii[4] = { cornerRadius, cornerRadius, cornerRadius, cornerRadius }; int32_t borderSize = 1 * EsElementGetScaleFactor(element); - uint32_t color = EsColorBlend(windowColors[element->userData.u] | 0xFF000000, 0x20FFFFFF, false); + uint32_t color = EsColorBlend(windowColors[element->userData.u][0], 0x20FFFFFF, false); if (element->window->pressed == element) color = EsColorBlend(color, 0x40000000, false); EsDrawRoundedRectangle(message->painter, bounds, color, EsColorBlend(color, 0x40000000, false), ES_RECT_1(borderSize), cornerRadii); @@ -642,13 +651,7 @@ void SettingsWindowColorUpdated() { index = 0; } - EsColorConvertToHSV(windowColors[index], &theming.systemHue, &theming.systemSaturation, &theming.systemValue); - - if (theming.systemHue > 0.3f && theming.systemHue < 3.3f) { - theming.systemHueShift = -1.5f; - } else { - theming.systemHueShift = 1.0f; - } + EsMemoryCopy(theming.windowColors, &windowColors[index][1], sizeof(theming.windowColors)); for (uintptr_t i = 0; i < gui.allWindows.Length(); i++) { if (gui.allWindows[i]->windowStyle == ES_WINDOW_CONTAINER) { diff --git a/desktop/theme.cpp b/desktop/theme.cpp index 978af5b..50dffa1 100644 --- a/desktop/theme.cpp +++ b/desktop/theme.cpp @@ -101,12 +101,14 @@ typedef struct ThemePaintSolid { typedef struct ThemeGradientStop { uint32_t color; int8_t position; + uint8_t windowColorIndex; + uint16_t _unused1; } ThemeGradientStop; typedef struct ThemePaintLinearGradient { float transform[3]; uint8_t stopCount; - int8_t useGammaInterpolation : 1, useDithering : 1, useSystemColor : 1; + int8_t useGammaInterpolation : 1, useDithering : 1; uint8_t repeatMode; uint8_t _unused0; // Followed by gradient stops. @@ -352,7 +354,7 @@ struct { EsPaintTarget cursors; float scale; HashStore loadedStyles; - float systemHue, systemSaturation, systemValue, systemHueShift; + uint32_t windowColors[6]; } theming; #endif @@ -584,6 +586,27 @@ void ThemeFillBlurCorner(EsPainter *painter, EsRectangle bounds, int cx, int cy, } } +uint32_t WindowColorCalculate(uint8_t index) { +#ifdef IN_DESIGNER + uint32_t windowColors[6] = { + 0xFF83B8F7, 0xFF6D9CDF, 0xFF4166B5, // Active container window gradient stops. + 0xFFD2D0F2, 0xFFCDCCFA, 0xFFB5BEDF, // Inactive container window gradient stops. + }; +#else + uint32_t *windowColors = theming.windowColors; +#endif + + if (index >= 30 && index < 60) { + return EsColorInterpolate(windowColors[0], windowColors[3], (index - 30) / 29.0f); + } else if (index >= 60 && index < 90) { + return EsColorInterpolate(windowColors[1], windowColors[4], (index - 60) / 29.0f); + } else if (index >= 90 && index < 120) { + return EsColorInterpolate(windowColors[2], windowColors[5], (index - 90) / 29.0f); + } else { + return 0; + } +} + ES_FUNCTION_OPTIMISE_O2 void GradientCacheSetup(GradientCache *cache, const ThemePaintLinearGradient *gradient, int width, int height, EsBuffer *data) { if (!gradient) { @@ -615,16 +638,8 @@ void GradientCacheSetup(GradientCache *cache, const ThemePaintLinearGradient *gr uint32_t color0 = stop0->color; uint32_t color1 = stop1->color; -#ifndef IN_DESIGNER - if (gradient->useSystemColor) { - float h, h2, s, v; - EsColorConvertToHSV(color0, &h, &s, &v); - color0 = (color0 & 0xFF000000) | EsColorConvertToRGB(theming.systemHue, s * theming.systemSaturation, v * theming.systemValue); - EsColorConvertToHSV(color1, &h2, &s, &v); - color1 = (color1 & 0xFF000000) | EsColorConvertToRGB(theming.systemHue + (h2 - h) * theming.systemHueShift, - s * theming.systemSaturation, v * theming.systemValue); - } -#endif + if (stop0->windowColorIndex) color0 = WindowColorCalculate(stop0->windowColorIndex); + if (stop1->windowColorIndex) color1 = WindowColorCalculate(stop1->windowColorIndex); float fa = ((color0 >> 24) & 0xFF) / 255.0f; float fb = ((color0 >> 16) & 0xFF) / 255.0f; @@ -1345,20 +1360,23 @@ void ThemeAnimationDestroy(ThemeAnimation *animation) { ThemeVariant ThemeAnimatingPropertyInterpolate(ThemeAnimatingProperty *property, UIStyle *destination, uint8_t *layerData) { uint32_t dataOffset = property->offset; - EsAssert(dataOffset <= destination->layerDataByteCount - sizeof(ThemeVariant)); float position = (float) property->elapsed / property->duration; position = SmoothAnimationTime(position); if (property->type == THEME_OVERRIDE_I8) { + EsAssert(dataOffset <= destination->layerDataByteCount - sizeof(uint8_t)); int8_t to = *(int8_t *) (layerData + dataOffset); return (ThemeVariant) { .i8 = (int8_t ) LinearInterpolate(property->from.i8, to, position) }; } else if (property->type == THEME_OVERRIDE_I16) { + EsAssert(dataOffset <= destination->layerDataByteCount - sizeof(uint16_t)); int16_t to = *(int16_t *) (layerData + dataOffset); return (ThemeVariant) { .i16 = (int16_t) LinearInterpolate(property->from.i16, to, position) }; } else if (property->type == THEME_OVERRIDE_F32) { + EsAssert(dataOffset <= destination->layerDataByteCount - sizeof(float)); float to = *(float *) (layerData + dataOffset); return (ThemeVariant) { .f32 = (float) LinearInterpolate(property->from.f32, to, position) }; } else if (property->type == THEME_OVERRIDE_COLOR) { + EsAssert(dataOffset <= destination->layerDataByteCount - sizeof(uint32_t)); uint32_t to = *(uint32_t *) (layerData + dataOffset); return (ThemeVariant) { .u32 = EsColorInterpolate(property->from.u32, to, position) }; } else { @@ -1413,7 +1431,11 @@ void _ThemeAnimationBuildAddProperties(ThemeAnimation *animation, UIStyle *style } uintptr_t key = themeOverride->offset + layerCumulativeDataOffset; - EsAssert(key <= (uintptr_t) style->layerDataByteCount - sizeof(ThemeVariant)); + + if (themeOverride->type == THEME_OVERRIDE_I8) EsAssert(key <= (uintptr_t) style->layerDataByteCount - sizeof(uint8_t)); + if (themeOverride->type == THEME_OVERRIDE_I16) EsAssert(key <= (uintptr_t) style->layerDataByteCount - sizeof(uint16_t)); + if (themeOverride->type == THEME_OVERRIDE_F32) EsAssert(key <= (uintptr_t) style->layerDataByteCount - sizeof(float)); + if (themeOverride->type == THEME_OVERRIDE_COLOR) EsAssert(key <= (uintptr_t) style->layerDataByteCount - sizeof(uint32_t)); uintptr_t point; bool alreadyInList; diff --git a/res/Theme Source.dat b/res/Theme Source.dat index 81444abfb7f92ff3299bf5c68c0d0693c22ecd1d..d03beeaeec50998aec64b35030dd47517a7c89d1 100644 GIT binary patch delta 947 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 QVqJ(7x&X~V&J&FN50C;GkN^Mx delta 6378 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 EzZ^W=> 24) & 0xFF) / 255.0f; float fb = ((from >> 16) & 0xFF) / 255.0f; @@ -152,6 +144,14 @@ uint32_t EsColorInterpolate(uint32_t from, uint32_t to, float progress) { | (uint32_t) (LinearInterpolate(fb, tb, progress) * 255.0f) << 16 | (uint32_t) (LinearInterpolate(fa, ta, progress) * 255.0f) << 24; } +#endif + +#ifndef EsRectangleLinearInterpolate +EsRectangle EsRectangleLinearInterpolate(EsRectangle from, EsRectangle to, float progress) { + return ES_RECT_4(LinearInterpolate(from.l, to.l, progress), LinearInterpolate(from.r, to.r, progress), + LinearInterpolate(from.t, to.t, progress), LinearInterpolate(from.b, to.b, progress)); +} +#endif #endif diff --git a/util/api_table.ini b/util/api_table.ini index 679c656..c970b08 100644 --- a/util/api_table.ini +++ b/util/api_table.ini @@ -488,3 +488,4 @@ EsScrollViewSetFixedViewport=486 EsScrollViewIsBarEnabled=487 EsScrollViewIsInDragScroll=488 _EsOpenDocumentEnumerate=489 +EsDialogGetContentArea=490 diff --git a/util/designer2.cpp b/util/designer2.cpp index cacfe04..b71b993 100644 --- a/util/designer2.cpp +++ b/util/designer2.cpp @@ -64,6 +64,8 @@ #define ES_FONT_SERIF (0xFFFE) #define ES_FONT_MONOSPACED (0xFFFD) +#define ES_RECT_4(a, b, c, d) UI_RECT_4((int32_t) (a), (int32_t) (b), (int32_t) (c), (int32_t) (d)) + #define ES_FUNCTION_OPTIMISE_O2 __attribute__((optimize("-O2"))) #define ES_FUNCTION_OPTIMISE_O3 __attribute__((optimize("-O3"))) @@ -1773,10 +1775,6 @@ void InspectorPopulate() { InspectorAddBooleanToggle(object, "Use gamma interpolation", "useGammaInterpolation"); - if (object->type == OBJ_PAINT_LINEAR_GRADIENT) { - InspectorAddBooleanToggle(object, "Use window tint color", "useSystemColor"); - } - int32_t stopCount = PropertyReadInt32(object, "stops_count"); if (stopCount < 0) stopCount = 0; if (stopCount > 100) stopCount = 100; @@ -1794,6 +1792,8 @@ void InspectorPopulate() { InspectorAddLink(object, "Color:", cPropertyName); sprintf(cPropertyName, "stops_%d_position", i); InspectorAddInteger(object, "Position (%):", cPropertyName); + sprintf(cPropertyName, "stops_%d_wci", i); + InspectorAddInteger(object, "Window color index:", cPropertyName); UIParentPop(); if (i != stopCount - 1) { @@ -2030,6 +2030,8 @@ void ExportGradientStopArray(Object *object, ExportContext *data, size_t stopCou ExportColor(data, stop, color, object, cPropertyName); sprintf(cPropertyName, "stops_%d_position", (int32_t) i); ExportI8(data, stop, position, object, cPropertyName); + sprintf(cPropertyName, "stops_%d_wci", (int32_t) i); + ExportI8(data, stop, windowColorIndex, object, cPropertyName); ExportWrite(data, &stop, sizeof(stop)); } } @@ -2060,7 +2062,6 @@ int8_t ExportPaint(Object *parentObject, const char *cPropertyNameInParent, Expo ExportF32(data, paint, transform[2], object, "transformStart"); paint.stopCount = PropertyFindOrInheritReadInt32(object, "stops_count"); paint.useGammaInterpolation = !!PropertyFindOrInheritReadInt32(object, "useGammaInterpolation"); - paint.useSystemColor = !!PropertyFindOrInheritReadInt32(object, "useSystemColor"); paint.repeatMode = PropertyFindOrInheritReadInt32(object, "repeatMode"); ExportWrite(data, &paint, sizeof(paint)); ExportGradientStopArray(object, data, paint.stopCount);