From 574f07d49f4c5831161e2756dbd10747e5e31595 Mon Sep 17 00:00:00 2001 From: nakst <> Date: Tue, 21 Sep 2021 15:02:18 +0100 Subject: [PATCH] bugfixes and transition cleanup --- apps/file_manager/main.cpp | 11 +++-- apps/gl_test.c | 4 +- apps/installer.cpp | 12 ++--- desktop/desktop.cpp | 2 +- desktop/gui.cpp | 91 ++++++++++--------------------------- desktop/os.header | 7 +-- desktop/theme.cpp | 8 +--- res/Theme Source.dat | Bin 53420 -> 52965 bytes res/Themes/Theme.dat | Bin 54064 -> 53612 bytes util/designer/designer.c | 9 +++- util/designer/designer.rf | 8 ++-- util/designer/reflect.h | 26 ++++++----- 12 files changed, 73 insertions(+), 105 deletions(-) diff --git a/apps/file_manager/main.cpp b/apps/file_manager/main.cpp index 0bda57e..4ebe10b 100644 --- a/apps/file_manager/main.cpp +++ b/apps/file_manager/main.cpp @@ -505,10 +505,15 @@ void _start() { InstanceCreateUI(instance); } } else if (message->type == ES_MSG_INSTANCE_DESTROY) { - // TODO Cleanup/cancel any unfinished non-blocking tasks before we get here! Instance *instance = message->instanceDestroy.instance; - InstanceDestroy(instance); - instances.FindAndDeleteSwap(instance, true); + EsApplicationStartupRequest request = EsInstanceGetStartupRequest(instance); + + if (request.flags & ES_APPLICATION_STARTUP_BACKGROUND_SERVICE) { + // No cleanup to do. + } else { + InstanceDestroy(instance); + instances.FindAndDeleteSwap(instance, true); + } } else if (message->type == ES_MSG_APPLICATION_EXIT) { #ifdef DEBUG_BUILD for (uintptr_t i = 0; i < drives.Length(); i++) { diff --git a/apps/gl_test.c b/apps/gl_test.c index d1f93e8..b6e23e8 100644 --- a/apps/gl_test.c +++ b/apps/gl_test.c @@ -299,7 +299,7 @@ int main(int argc, char **argv) { uint32_t i0 = strtoul(position, &position, 10) - 1; uint32_t i1 = strtoul(position, &position, 10) - 1; uint32_t i2 = strtoul(position, &position, 10) - 1; - EsAssert(i0 < vertexCount); + EsAssert(i0 < vertexCount); // TODO Error reporting. EsAssert(i1 < vertexCount); EsAssert(i2 < vertexCount); modelIBOArray[3 * triangleIndex + 0] = i0; @@ -310,7 +310,7 @@ int main(int argc, char **argv) { } } - EsPrint("%F -> %F, %F -> %F, %F -> %F\n", minimumX, maximumX, minimumY, maximumY, minimumZ, maximumZ); + EsPrint("Model bounds: %F -> %F, %F -> %F, %F -> %F\n", minimumX, maximumX, minimumY, maximumY, minimumZ, maximumZ); EsAssert(vertexIndex == vertexCount); EsAssert(triangleIndex == triangleCount); #endif diff --git a/apps/installer.cpp b/apps/installer.cpp index fda669a..ca161a3 100644 --- a/apps/installer.cpp +++ b/apps/installer.cpp @@ -921,11 +921,11 @@ void WriteNewConfiguration() { ///////////////////////////////////////////// void ButtonViewLicenses(EsInstance *, EsElement *, EsCommand *) { - EsPanelSwitchTo(switcher, panelLicenses, ES_TRANSITION_FADE_IN); + EsPanelSwitchTo(switcher, panelLicenses, ES_TRANSITION_FADE); } void ButtonInstallOptions(EsInstance *, EsElement *, EsCommand *) { - EsPanelSwitchTo(switcher, panelInstallOptions, ES_TRANSITION_FADE_IN); + EsPanelSwitchTo(switcher, panelInstallOptions, ES_TRANSITION_FADE); } void ButtonShutdown(EsInstance *, EsElement *, EsCommand *) { @@ -938,7 +938,7 @@ void ButtonRestart(EsInstance *, EsElement *, EsCommand *) { void ButtonInstall(EsInstance *, EsElement *, EsCommand *) { useMBR = EsButtonGetCheck(useMBRCheckbox) == ES_CHECK_CHECKED; - EsPanelSwitchTo(switcher, panelCustomizeOptions, ES_TRANSITION_FADE_IN); + EsPanelSwitchTo(switcher, panelCustomizeOptions, ES_TRANSITION_FADE); EsElementFocus(userNameTextbox); startedInstallation = true; EsThreadCreate(InstallThread, nullptr, 0); @@ -956,7 +956,7 @@ void ButtonFont(EsInstance *, EsElement *element, EsCommand *) { void Complete() { if (installError == ES_SUCCESS) { WriteNewConfiguration(); - EsPanelSwitchTo(switcher, panelComplete, ES_TRANSITION_FADE_IN); + EsPanelSwitchTo(switcher, panelComplete, ES_TRANSITION_FADE); } else { EsPanel *row = EsPanelCreate(panelError, ES_CELL_H_FILL | ES_PANEL_HORIZONTAL); EsIconDisplayCreate(row, ES_FLAGS_DEFAULT, 0, ES_ICON_DIALOG_ERROR); @@ -975,7 +975,7 @@ void Complete() { EsSpacerCreate(buttonsRow, ES_CELL_H_FILL); EsButtonOnCommand(EsButtonCreate(buttonsRow, ES_FLAGS_DEFAULT, 0, INTERFACE_STRING(DesktopRestartAction)), ButtonRestart); - EsPanelSwitchTo(switcher, panelError, ES_TRANSITION_FADE_IN); + EsPanelSwitchTo(switcher, panelError, ES_TRANSITION_FADE); } } @@ -984,7 +984,7 @@ void ButtonFinish(EsInstance *, EsElement *, EsCommand *) { Complete(); } else { onWaitScreen = true; - EsPanelSwitchTo(switcher, panelWait, ES_TRANSITION_FADE_IN); + EsPanelSwitchTo(switcher, panelWait, ES_TRANSITION_FADE); } } diff --git a/desktop/desktop.cpp b/desktop/desktop.cpp index 412e3a3..e3e1e48 100644 --- a/desktop/desktop.cpp +++ b/desktop/desktop.cpp @@ -1070,7 +1070,7 @@ void TaskBarTasksButtonUpdate() { if (desktop.allOngoingUserTasks.Length()) { if (EsElementIsHidden(desktop.tasksButton)) { EsPanelStartMovementAnimation((EsPanel *) EsElementGetLayoutParent(desktop.tasksButton), 1.5f /* duration scale */); - EsElementStartTransition(desktop.tasksButton, ES_TRANSITION_FADE_IN, ES_ELEMENT_TRANSITION_ENTRANCE, 1.5f); + EsElementStartTransition(desktop.tasksButton, ES_TRANSITION_FADE_IN, ES_FLAGS_DEFAULT, 1.5f); EsElementSetHidden(desktop.tasksButton, false); } diff --git a/desktop/gui.cpp b/desktop/gui.cpp index c1db1b7..04ed68c 100644 --- a/desktop/gui.cpp +++ b/desktop/gui.cpp @@ -109,7 +109,6 @@ void InspectorNotifyElementContentChanged(EsElement *element); #define UI_STATE_ANIMATING (1 << 13) #define UI_STATE_ENTERED (1 << 14) -#define UI_STATE_EXITING (1 << 15) #define UI_STATE_BLOCK_INTERACTION (1 << 16) #define UI_STATE_TEMP (1 << 17) @@ -1172,7 +1171,7 @@ EsRectangle UIGetTransitionEffectRectangle(EsRectangle bounds, EsTransitionType int width = Width(bounds), height = Height(bounds); double ratio = (double) height / (double) width; - if (type == ES_TRANSITION_FADE_IN || type == ES_TRANSITION_FADE_OUT || type == ES_TRANSITION_FADE_VIA_TRANSPARENT) { + if (type == ES_TRANSITION_FADE_IN || type == ES_TRANSITION_FADE_OUT || type == ES_TRANSITION_FADE_VIA_TRANSPARENT || type == ES_TRANSITION_FADE) { return bounds; } else if (!to) { if (type == ES_TRANSITION_SLIDE_UP) { @@ -1269,7 +1268,7 @@ EsRectangle UIGetTransitionEffectRectangle(EsRectangle bounds, EsTransitionType } void UIDrawTransitionEffect(EsPainter *painter, EsPaintTarget *sourceSurface, EsRectangle bounds, EsTransitionType type, double progress, bool to) { - if (type == ES_TRANSITION_FADE_OUT && to) { + if ((type == ES_TRANSITION_FADE_OUT && to) || (type == ES_TRANSITION_FADE_IN && !to)) { return; } @@ -1294,6 +1293,12 @@ void EsElementStartTransition(EsElement *element, EsTransitionType transitionTyp return; } + if (transitionType == ES_TRANSITION_FADE_IN) { + flags |= ES_ELEMENT_TRANSITION_ENTRANCE; + } else if (transitionType == ES_TRANSITION_FADE_OUT) { + flags |= ES_ELEMENT_TRANSITION_EXIT; + } + if (element->previousTransitionFrame) { EsPaintTargetDestroy(element->previousTransitionFrame); element->previousTransitionFrame = nullptr; @@ -1459,24 +1464,23 @@ void EsElement::InternalPaint(EsPainter *painter, int paintFlags) { bounds.l -= paintOutsets.l, bounds.r += paintOutsets.r; bounds.t -= paintOutsets.t, bounds.b += paintOutsets.b; - if (EsPaintTargetTake(&target, targetWidth, targetHeight)) { - if (previousTransitionFrame) { - UIDrawTransitionEffect(painter, previousTransitionFrame, bounds, - (EsTransitionType) transitionType, progress, false); + if (previousTransitionFrame) { + UIDrawTransitionEffect(painter, previousTransitionFrame, bounds, (EsTransitionType) transitionType, progress, false); + } + + if (~transitionFlags & ES_ELEMENT_TRANSITION_EXIT) { + if (EsPaintTargetTake(&target, targetWidth, targetHeight)) { + EsPainter p = {}; + p.clip = ES_RECT_4(0, targetWidth, 0, targetHeight); + p.offsetX = paintOutsets.l; + p.offsetY = paintOutsets.t; + p.target = ⌖ + InternalPaint(&p, PAINT_NO_TRANSITION | PAINT_NO_OFFSET); + UIDrawTransitionEffect(painter, &target, bounds, (EsTransitionType) transitionType, progress, true); + EsPaintTargetReturn(&target); + } else { + goto paintBackground; } - - EsPainter p = {}; - p.clip = ES_RECT_4(0, targetWidth, 0, targetHeight); - p.offsetX = paintOutsets.l; - p.offsetY = paintOutsets.t; - p.target = ⌖ - InternalPaint(&p, PAINT_NO_TRANSITION | PAINT_NO_OFFSET); - - UIDrawTransitionEffect(painter, &target, bounds, (EsTransitionType) transitionType, progress, true); - - EsPaintTargetReturn(&target); - } else { - goto paintBackground; } } else { paintBackground:; @@ -1672,17 +1676,6 @@ void ProcessAnimations() { gui.animatingElements.DeleteSwap(i); element->state &= ~UI_STATE_ANIMATING; i--; - - if (element->state & UI_STATE_EXITING) { - EsElement *ancestor = element; - - while (ancestor) { - ancestor->state |= UI_STATE_DESTROYING_CHILD; - ancestor = ancestor->parent; - } - - element->state &= ~UI_STATE_EXITING; - } } else if (m.animate.waitMs < waitMs || waitMs == -1) { waitMs = m.animate.waitMs; } @@ -1724,10 +1717,6 @@ bool EsElement::RefreshStyleState() { } } - if (state & UI_STATE_EXITING) { - styleStateFlags |= THEME_STATE_AFTER_EXIT; - } - bool observedBitsChanged = false; if (!currentStyle || currentStyle->IsStateChangeObserved(styleStateFlags, previousStyleState)) { @@ -2387,10 +2376,6 @@ int EsElement::GetHeight(int width) { } void EsElement::InternalMove(int _width, int _height, int _offsetX, int _offsetY) { - if (state & UI_STATE_EXITING) { - return; - } - #ifdef TRACE_LAYOUT if (parent) { EsElement *parent = this->parent->parent; @@ -5456,26 +5441,6 @@ void EsElement::Destroy(bool manual) { } if (manual) { -#ifndef DISABLE_ALL_ANIMATIONS - if (currentStyle->metrics->exitDuration) { - if (previousTransitionFrame) { - EsPaintTargetDestroy(previousTransitionFrame); - } - - previousTransitionFrame = EsPaintTargetCreate(width, height, true); - - if (previousTransitionFrame) { - // TODO Doesn't support shadows. - EsPainter painter = {}; - painter.clip = ES_RECT_4(0, width, 0, height); - painter.target = previousTransitionFrame; - InternalPaint(&painter, PAINT_NO_TRANSITION | PAINT_NO_OFFSET); - state |= UI_STATE_EXITING; - RefreshStyle(); - } - } -#endif - EsElement *ancestor = parent; while (ancestor && (~ancestor->state & UI_STATE_DESTROYING_CHILD)) { @@ -5555,10 +5520,6 @@ bool EsElement::InternalDestroy() { children.Free(); - if (state & UI_STATE_EXITING) { - return false; - } - InspectorNotifyElementDestroyed(this); if (state & UI_STATE_ANIMATING) { @@ -6007,10 +5968,6 @@ EsThemeMetrics EsElementGetMetrics(EsElement *element) { m.globalOffset = RECTANGLE_8_TO_ES_RECTANGLE(metrics->globalOffset); m.clipEnabled = metrics->clipEnabled; m.cursor = metrics->cursor; - m.entranceTransition = metrics->entranceTransition; - m.exitTransition = metrics->exitTransition; - m.entranceDuration = metrics->entranceDuration; - m.exitDuration = metrics->exitDuration; m.preferredWidth = metrics->preferredWidth; m.preferredHeight = metrics->preferredHeight; m.minimumWidth = metrics->minimumWidth; diff --git a/desktop/os.header b/desktop/os.header index 0e28448..e5ae9b1 100644 --- a/desktop/os.header +++ b/desktop/os.header @@ -674,7 +674,8 @@ define ES_MEMORY_RESERVE_COMMIT_ALL (1 << 0) define ES_PANEL_SWITCHER_DESTROY_PREVIOUS_AFTER_TRANSITION (1 << 0) define ES_ELEMENT_TRANSITION_ENTRANCE (1 << 0) -define ES_ELEMENT_TRANSITION_HIDE_AFTER_COMPLETE (1 << 1) +define ES_ELEMENT_TRANSITION_EXIT (1 << 1) +define ES_ELEMENT_TRANSITION_HIDE_AFTER_COMPLETE (1 << 2) define ES_TEXT_GET_CHARACTER_AT_POINT_MIDDLE (1 << 0) @@ -1105,6 +1106,7 @@ enum EsTransitionType { ES_TRANSITION_REVEAL_DOWN ES_TRANSITION_FADE_IN ES_TRANSITION_FADE_OUT + ES_TRANSITION_FADE ES_TRANSITION_FADE_VIA_TRANSPARENT ES_TRANSITION_SLIDE_UP_OVER ES_TRANSITION_SLIDE_DOWN_OVER @@ -1314,8 +1316,7 @@ struct EsThemeMetrics { uint64_t mask; EsRectangle insets, clipInsets; EsRectangle globalOffset; - int clipEnabled, cursor, entranceTransition, exitTransition; - int entranceDuration, exitDuration; + int clipEnabled, cursor; int preferredWidth, preferredHeight; int minimumWidth, minimumHeight; int maximumWidth, maximumHeight; diff --git a/desktop/theme.cpp b/desktop/theme.cpp index e01bc3c..b0f39c1 100644 --- a/desktop/theme.cpp +++ b/desktop/theme.cpp @@ -200,8 +200,8 @@ typedef struct ThemeLayer { typedef struct ThemeMetrics { Rectangle16 insets, clipInsets; Rectangle16 globalOffset; - uint8_t clipEnabled, cursor, entranceTransition, exitTransition; - uint16_t entranceDuration, exitDuration, fontFamily; + uint8_t clipEnabled, cursor; + uint16_t fontFamily; int16_t preferredWidth, preferredHeight; int16_t minimumWidth, minimumHeight; int16_t maximumWidth, maximumHeight; @@ -1558,10 +1558,6 @@ void ThemeStylePrepare(UIStyle *style, UIStyleKey key) { if (customMetrics->mask & ES_THEME_METRICS_GLOBAL_OFFSET) style->metrics->globalOffset = ES_RECTANGLE_TO_RECTANGLE_8(customMetrics->globalOffset); if (customMetrics->mask & ES_THEME_METRICS_CLIP_ENABLED) style->metrics->clipEnabled = customMetrics->clipEnabled; if (customMetrics->mask & ES_THEME_METRICS_CURSOR) style->metrics->cursor = customMetrics->cursor; - if (customMetrics->mask & ES_THEME_METRICS_ENTRANCE_TRANSITION) style->metrics->entranceTransition = customMetrics->entranceTransition; - if (customMetrics->mask & ES_THEME_METRICS_EXIT_TRANSITION) style->metrics->exitTransition = customMetrics->exitTransition; - if (customMetrics->mask & ES_THEME_METRICS_ENTRANCE_DURATION) style->metrics->entranceDuration = customMetrics->entranceDuration; - if (customMetrics->mask & ES_THEME_METRICS_EXIT_DURATION) style->metrics->exitDuration = customMetrics->exitDuration; if (customMetrics->mask & ES_THEME_METRICS_PREFERRED_WIDTH) style->metrics->preferredWidth = customMetrics->preferredWidth; if (customMetrics->mask & ES_THEME_METRICS_PREFERRED_HEIGHT) style->metrics->preferredHeight = customMetrics->preferredHeight; if (customMetrics->mask & ES_THEME_METRICS_MINIMUM_WIDTH) style->metrics->minimumWidth = customMetrics->minimumWidth; diff --git a/res/Theme Source.dat b/res/Theme Source.dat index b8570c4d872ae97fc557d6533a8d44a2b2ee3d8e..4e5bbe9c05e820ea821553101128c45eef6e3b31 100644 GIT binary patch delta 975 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.byteCount, (char *) style->name.buffer, (style->id << 1) | 1); + for (uintptr_t i = 0; i < arrlenu(style->layers); i++) { + printf("\thas layer %ld\n", style->layers[i]); + } + if (style->id && stylesPath) { fprintf(f, "%s ES_STYLE_", style->publicStyle ? "define" : "private define"); @@ -1491,6 +1495,9 @@ void StyleSetOp(RfState *state, RfItem *item, void *pointer) { header.duration = sequence->duration; header.isLastSequence = j == arrlenu(layer->sequences) - 1; state->access(state, &header, sizeof(header)); + + if (sequence->flagBeforeEnter) printf("before enter %ld\n", layer->id); + if (sequence->flagAfterExit) printf("after exit %ld\n", layer->id); } uint32_t overrideCount = 0; diff --git a/util/designer/designer.rf b/util/designer/designer.rf index c517ca1..b4abc3d 100644 --- a/util/designer/designer.rf +++ b/util/designer/designer.rf @@ -183,10 +183,10 @@ struct LayerMetrics LayerMetrics_Type LayerMetricsOp { Size16_Type Size16 maximumSize #StringOption { "Maximum size" }; Gaps8_Type Gaps8 gaps #StringOption { "Gaps" }; Cursor_Type uint32_t cursor #StringOption { "Cursor" }; - Transition_Type uint32_t entranceTransition #StringOption { "Entrance transition" }; - StyleI16_Type int16_t entranceDuration #StringOption { "Entrance duration (ms)" }; - Transition_Type uint32_t exitTransition #StringOption { "Exit transition" }; - StyleI16_Type int16_t exitDuration #StringOption { "Exit duration (ms)" }; + Transition_Type uint32_t entranceTransition #StringOption { "Entrance transition" } to 21; + StyleI16_Type int16_t entranceDuration #StringOption { "Entrance duration (ms)" } to 21; + Transition_Type uint32_t exitTransition #StringOption { "Exit transition" } to 21; + StyleI16_Type int16_t exitDuration #StringOption { "Exit duration (ms)" } to 21; Rectangle8_Type Rectangle8 globalOffset #StringOption { "Global offset" }; Align_Type uint32_t textVerticalAlign #StringOption { "Text vertical align: " }; Align_Type uint32_t textHorizontalAlign #StringOption { "Text horizontal align: " }; diff --git a/util/designer/reflect.h b/util/designer/reflect.h index a591eda..a9bd283 100644 --- a/util/designer/reflect.h +++ b/util/designer/reflect.h @@ -350,20 +350,22 @@ void RfEnumOp(RfState *state, RfItem *item, void *pointer) { } else if (state->op == RF_OP_LOAD) { RfIntegerLoad(state, pointer, item->byteCount); - uint32_t value = 0; + if (pointer) { + uint32_t value = 0; - if (item->byteCount == 1) { - value = *(uint8_t *) pointer; - } else if (item->byteCount == 2) { - value = *(uint16_t *) pointer; - } else if (item->byteCount == 4) { - value = *(uint32_t *) pointer; - } else { - RF_ASSERT(false); - } + if (item->byteCount == 1) { + value = *(uint8_t *) pointer; + } else if (item->byteCount == 2) { + value = *(uint16_t *) pointer; + } else if (item->byteCount == 4) { + value = *(uint32_t *) pointer; + } else { + RF_ASSERT(false); + } - if (value >= item->type->fieldCount) { - state->error = true; + if (value >= item->type->fieldCount) { + state->error = true; + } } } }