From 2e1327046c6a06acbe6a75ecd5849323f4baa979 Mon Sep 17 00:00:00 2001 From: nakst <> Date: Wed, 13 Oct 2021 17:51:49 +0100 Subject: [PATCH] various fixes --- apps/file_manager/folder.cpp | 3 ++- apps/file_manager/main.cpp | 3 ++- desktop/gui.cpp | 5 ++--- desktop/list_view.cpp | 26 ++++++++++++++++++++++---- desktop/text.cpp | 21 ++++++++++++++++++++- res/Theme Source.dat | Bin 515268 -> 520444 bytes res/Theme.dat | Bin 28956 -> 28956 bytes util/designer2.cpp | 15 +++++++++------ util/luigi.h | 4 ++-- 9 files changed, 59 insertions(+), 18 deletions(-) diff --git a/apps/file_manager/folder.cpp b/apps/file_manager/folder.cpp index 96658c9..ae745dc 100644 --- a/apps/file_manager/folder.cpp +++ b/apps/file_manager/folder.cpp @@ -351,7 +351,8 @@ void FolderDetachInstance(Instance *instance) { Folder *folder = instance->folder; if (!folder) return; instance->folder = nullptr; - folder->attachedInstances.FindAndDeleteSwap(instance, true); + folder->attachedInstances.FindAndDeleteSwap(instance, false /* in case the instance stopped loading the folder before it was ready */); + EsAssert(folder->referenceCount); folder->referenceCount--; if (!folder->referenceCount) { diff --git a/apps/file_manager/main.cpp b/apps/file_manager/main.cpp index 9b3e0ff..80c49c1 100644 --- a/apps/file_manager/main.cpp +++ b/apps/file_manager/main.cpp @@ -342,7 +342,8 @@ void BlockingTaskQueue(Instance *instance, Task task) { if (result == ES_ERROR_TIMEOUT_REACHED) { instance->blockingTaskReachedTimeout = true; - EsDialogShow(instance->window, task.cDescription, -1, INTERFACE_STRING(FileManagerOngoingTaskDescription), ES_ICON_TOOLS_TIMER_SYMBOLIC); + instance->blockingDialog = EsDialogShow(instance->window, task.cDescription, -1, + INTERFACE_STRING(FileManagerOngoingTaskDescription), ES_ICON_TOOLS_TIMER_SYMBOLIC); // TODO Progress bar; cancelling tasks. } else { instance->blockingTaskReachedTimeout = false; diff --git a/desktop/gui.cpp b/desktop/gui.cpp index bdc93fb..def15ae 100644 --- a/desktop/gui.cpp +++ b/desktop/gui.cpp @@ -785,7 +785,6 @@ void UIWindowDestroy(EsWindow *window) { EsHandleClose(window->handle); window->checkVisible.Free(); window->sizeAlternatives.Free(); - EsAssert(!window->dialogs.Length()); window->dialogs.Free(); window->handle = ES_INVALID_HANDLE; } @@ -6631,11 +6630,11 @@ void UIMouseUp(EsWindow *window, EsMessage *message, bool sendClick) { EsRectangle bounds = pressed->GetWindowBounds(); message->mouseDown.positionX -= bounds.l; message->mouseDown.positionY -= bounds.t; - UIMessageSendPropagateToAncestors(pressed, message); + EsMessageSend(pressed, message); } else { EsMessage m = {}; m.type = (EsMessageType) (gui.lastClickButton + 1); - UIMessageSendPropagateToAncestors(pressed, &m); + EsMessageSend(pressed, &m); } pressed->state &= ~UI_STATE_LEFT_PRESSED; diff --git a/desktop/list_view.cpp b/desktop/list_view.cpp index 26701e4..77d00f4 100644 --- a/desktop/list_view.cpp +++ b/desktop/list_view.cpp @@ -1007,10 +1007,23 @@ struct EsListView : EsElement { int64_t wrapLimit = GetWrapLimit(); int64_t fixedMinorSize = (flags & ES_LIST_VIEW_HORIZONTAL) ? fixedHeight : fixedWidth; intptr_t itemsPerBand = GetItemsPerBand(); - int64_t computedMinorGap = (wrapLimit - itemsPerBand * fixedMinorSize) / (itemsPerBand + 1); - int64_t minorStartOffset = computedMinorGap + ((flags & ES_LIST_VIEW_HORIZONTAL) ? style->insets.t : style->insets.l); - intptr_t startInBand = (((flags & ES_LIST_VIEW_HORIZONTAL) ? y1 : x1) - minorStartOffset) / (fixedMinorSize + computedMinorGap); - intptr_t endInBand = (((flags & ES_LIST_VIEW_HORIZONTAL) ? y2 : x2) - minorStartOffset) / (fixedMinorSize + computedMinorGap); + int64_t centerOffset = (flags & ES_LIST_VIEW_CENTER_TILES) ? (wrapLimit - itemsPerBand * (fixedMinorSize + style->gapMinor) + style->gapMinor) / 2 : 0; + int64_t minorStartOffset = centerOffset + ((flags & ES_LIST_VIEW_HORIZONTAL) ? style->insets.t : style->insets.l); + + int64_t s0 = (flags & ES_LIST_VIEW_HORIZONTAL) ? y1 : x1; + int64_t s1 = (flags & ES_LIST_VIEW_HORIZONTAL) ? y2 : x2; + + int64_t startEdge = minorStartOffset; + int64_t endEdge = minorStartOffset + (fixedMinorSize + style->gapMinor) * itemsPerBand - style->gapMinor; + + if (s1 < startEdge || s0 >= endEdge) return; + if (s0 < startEdge) s0 = startEdge; + if (s1 >= endEdge) s1 = endEdge - 1; + + intptr_t startInBand = (s0 - startEdge + style->gapMinor /* round up if in gap */) / (fixedMinorSize + style->gapMinor); + intptr_t endInBand = (s1 - startEdge) / (fixedMinorSize + style->gapMinor); + + if (startInBand > endInBand) return; if (adjustStart) { ListViewGroup *group = &groups[start.iterateIndex.group]; @@ -1046,6 +1059,11 @@ struct EsListView : EsElement { } } + if ((start.iterateIndex.group == end.iterateIndex.group && start.iterateIndex.index > end.iterateIndex.index) + || (start.iterateIndex.group > end.iterateIndex.group)) { + return; + } + SetSelected(start.iterateIndex.group, start.iterateIndex.index, end.iterateIndex.group, end.iterateIndex.index, true, toggle, itemsPerBand, startInBand, endInBand); } else { diff --git a/desktop/text.cpp b/desktop/text.cpp index 8b4b27b..977b871 100644 --- a/desktop/text.cpp +++ b/desktop/text.cpp @@ -2996,7 +2996,26 @@ const char *KeyboardLayoutLookup(uint32_t scancode, bool isShiftHeld, bool isAlt uint32_t ScancodeMapToLabel(uint32_t scancode) { KeyboardLayoutLoad(); - // TODO. + const char *string = KeyboardLayoutLookup(scancode, false, false, false, false); + + if (string && string[0] && !string[1]) { + char c = string[0]; + if (c >= 'a' && c <= 'z') return ES_SCANCODE_A + c - 'a'; + if (c >= 'A' && c <= 'Z') return ES_SCANCODE_A + c - 'A'; + if (c >= '0' && c <= '9') return ES_SCANCODE_0 + c - '0'; + if (c == '/') return ES_SCANCODE_SLASH; + if (c == '[') return ES_SCANCODE_LEFT_BRACE; + if (c == ']') return ES_SCANCODE_RIGHT_BRACE; + if (c == '=') return ES_SCANCODE_EQUALS; + if (c == '-') return ES_SCANCODE_HYPHEN; + if (c == ',') return ES_SCANCODE_COMMA; + if (c == '.') return ES_SCANCODE_PERIOD; + if (c == '\\') return ES_SCANCODE_PUNCTUATION_1; + if (c == ';') return ES_SCANCODE_PUNCTUATION_3; + if (c == '\'') return ES_SCANCODE_PUNCTUATION_4; + if (c == '`') return ES_SCANCODE_PUNCTUATION_5; + } + return scancode; } diff --git a/res/Theme Source.dat b/res/Theme Source.dat index 753b84b6f2611a7f87209c3a42f3e9db1dc588a2..7207ceed8e1238beb0623848e11cb0c1afb5b2ea 100644 GIT binary patch delta 1147 zcmZWpZ%iCj5Wn|!AG1p@ctxq8*jrlePYu`wYD1%z`=Aj_X%8aiM2W|T#(pZ-56TtP zkl3n3yn2kuP^0yTXiIwhX|S%9gIrWQ<)dP+=QeCE3*k&)tl5jD zMR(%Y-Un?4!V z-5NJENLhfQO&4PyGg9cqlfhKV+QHh&73OO9kMMCt(0WdJquH$3Pk8=>XJG`BG z5B~?&V?)S!Bu~epwx~7L1$Wm_CXJ7Qi9MB?WmvGP(!+-ooklJ|2Rhp{>%9~VF!Hak5W1cyqmgNtWVKlK zW~a4y9{f7ZeaJ&rcm^I-u%b0erL&O2#B|6qFG?4s-U&9zNS*FPErReS#f`(iz4$( zr@t!ME?POoHqmDv36rf+)ex(p;xSoMwxHAO4{RT0fEj#UrQQFq2Pkm|H^_X5Rnt8h z+l*Vb|3rBM%xnSU1Ck{P%3QNgH45^F{g$%H)!2~OyjLx>K1AI|rDIN$SdN{dxfuc`vf z=kpzveZF;SJO{B+(`4*Do{dFV4_>W{P^L%b_+8TI*)f@Su4q|JI=lL9l1bvUc& z_)?$U=!1JUdjm(dJEZ)C8XSr=Y(Qb747KkqLuR-P^({d(tL*bE)oeb0EWe&*5cBs6S# zIC3pcg^Qq3#eF}gZI?hptDOsKAoUM5Jjm%t8m#|NnjU1_-G2*q)RK8y;Z*nlHswYk zN0~Wr+~OFl$rAfatut_n@&#deE)*F#W8k27FiKh$qL?_u-Hvf6DU^R9{K6UTR(R0O zsOb|pRQVQiXueL;*XMA+%}l~7r}&S*+owU7DY3}ns6DbaR&_lUvl%$v6%tAB#2E9s ztype == OBJ_VAR_COLOR || object->type == OBJ_MOD_COLOR) { CanvasDrawColorSwatch(object, bounds, painter); - uint32_t color = GraphGetColor(object); - bool isLight = EsColorIsLight(color); - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.8X", color); - UIRectangle area = UI_RECT_4(bounds.l, bounds.r, bounds.t, bounds.t + UIMeasureStringHeight()); - UIDrawString(painter, area, buffer, -1, isLight ? 0xFF000000 : 0xFFFFFFFF, UI_ALIGN_CENTER, nullptr); + + if (canvas->zoom >= 1.0f) { + uint32_t color = GraphGetColor(object); + bool isLight = EsColorIsLight(color); + char buffer[32]; + snprintf(buffer, sizeof(buffer), "%.8X", color); + UIRectangle area = UI_RECT_4(bounds.l, bounds.r, bounds.t, bounds.t + UIMeasureStringHeight()); + UIDrawString(painter, area, buffer, -1, isLight ? 0xFF000000 : 0xFFFFFFFF, UI_ALIGN_CENTER, nullptr); + } } else if (object->type == OBJ_VAR_TEXT_STYLE || object->type == OBJ_STYLE) { CanvasDrawStyle(object, bounds, painter); } else if (object->type == OBJ_INSTANCE) { diff --git a/util/luigi.h b/util/luigi.h index bfe411c..e49e96d 100644 --- a/util/luigi.h +++ b/util/luigi.h @@ -3075,9 +3075,9 @@ int _UIColorPickerMessage(UIElement *element, UIMessage message, int di, void *d bool hasOpacity = element->flags & UI_COLOR_PICKER_HAS_OPACITY; if (message == UI_MSG_GET_WIDTH) { - return (hasOpacity ? 240 : 200) * element->window->scale; + return (hasOpacity ? 280 : 240) * element->window->scale; } else if (message == UI_MSG_GET_HEIGHT) { - return 160 * element->window->scale; + return 200 * element->window->scale; } else if (message == UI_MSG_LAYOUT) { UIRectangle bounds = element->bounds;