From c1259773bc454ceaf35b72669c7d0b019cccf301 Mon Sep 17 00:00:00 2001 From: nakst <> Date: Sat, 9 Oct 2021 18:17:07 +0100 Subject: [PATCH] theme cleanup --- desktop/styles.header | 1 - res/Theme Source.dat | Bin 558212 -> 501556 bytes res/Theme.dat | Bin 29428 -> 29268 bytes util/designer2.cpp | 84 +++++++++++++++++++++++++++++++++++++++--- 4 files changed, 79 insertions(+), 6 deletions(-) diff --git a/desktop/styles.header b/desktop/styles.header index 6fde0ba..980f2ce 100644 --- a/desktop/styles.header +++ b/desktop/styles.header @@ -1,6 +1,5 @@ define ES_STYLE_SEPARATOR_HORIZONTAL (ES_STYLE_CAST(1373)) private define ES_STYLE_SCROLLBAR_PAD (ES_STYLE_CAST(1371)) -private define ES_STYLE__TEST_STYLE (ES_STYLE_CAST(1385)) private define ES_STYLE_ACCESS_KEY_HINT (ES_STYLE_CAST(1221)) private define ES_STYLE_ANNOUNCEMENT (ES_STYLE_CAST(1511)) private define ES_STYLE_BREADCRUMB_BAR_CRUMB (ES_STYLE_CAST(1223)) diff --git a/res/Theme Source.dat b/res/Theme Source.dat index fb9ed109dad2fa4d8e927649277844492e873337..13391e1d345653ff9ba8314d58fb4139968ba605 100644 GIT binary patch delta 5466 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 j8g-Q%K=}6$j<)&uw(}4 delta 12867 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�+~8Bpc;qDdY0)rL$Ru+Md1K%Hx!D z3TK(v{9d|t1gYZG(Q;O{b`^zN(1nd$dws0IMmP3m$m4X~W~7O|9x<$Ec(akgrgZ4c zrgB>$8_X7SJ!*5ZiER1@+aV_9(C=(5tU8BUva8s54!x1xBCn7(C!d*f=|IjQxsR^r z8fh-kgcajNCuMkxhqLBw|&!si4EC>qv1SdX-wPc!#szqBYB^Z0%aO9*gY~rx-XAro71DS&c^o9 z5A7|?;1G@N`<$#(`Pz@KGs@Sc)`_qBGzvNL=@}aMQUUMFmAJXoEdf7?03iB}4PHnJ|XYu2dd2en%hUNN^ z!%C<>-~Rdbsik7KOp#)Zyg2nQ#T7EMABC}_VoXg(OsxMX)=nK8KgwG&(=oAkoON?aoxZ~6wp)T#oryqDyM1F@$_;i)|(kbF` zGJPrX+b;?{rSKN>$Wuo{fwLMmQcB-0DT&LkIZ^3FezBEO`Zveha)jP3t!LR@5sTI2 z%~T)pij(S(Uh%W#|6Lj=6QxyNKN~9(**xJ@j+1pNDXS4P=_{wwGQY^tzH%j+{F5TK zJqcZ7<@8ROgRPf~U>VA-NjxAaNNWE0DyX#FkJS3p^7I`%v-#zPZ{YlUxMDMDb+l4$ zkeBI;@)|7Hg^E1ttxytYxRQQYQHWDvp+Y%T4aZ?a#K>2vW1Yw0wQ^X_@UOWPskFvr zu%6^9oO#E++QU`6B{oAX?|xY5Bgd6p5IgK~?64jd$z0du+A|yvg)ke9kH`quUz0sY}@yE%H2l(OJY?7pSo7G8?`?f7NwfUZ>BxuCRuS^y4djn!KRLQS;Lajlak0 z>P6nY?4_IC6*w{8z1W!kfBU&c1>NUiz=TWpAXo(ar$aB`zZM>VC%}U( z_zqYFK_uQJ(4u3|IyR+{iisznKLFoG<{^Ky`s6eHT0g&O(G7+z0ExSA_6`2^aRw z{cswLgJ&RcK$6D55v4~&E9LvX4Xb^yPHEFQrx_@nqS+>ehrU^<3* z_MlU6A6QBdCNKl^IOF+cU-M1FL`^TD@QbNT(4^ za0jdcs}E&h46Fm+893vIGk(nfFup7SeGTRtjDT6t7r<12kyproperties.array, object->properties.Length(), sizeof(Property), PropertyCompareNames); + + for (uintptr_t i = 0; i < objects.Length(); i++) { + Object *other = &objects[i]; + if (other->type != OBJ_VAR_TEXT_STYLE || other == object) continue; + qsort(other->properties.array, other->properties.Length(), sizeof(Property), PropertyCompareNames); + + uintptr_t pi = 0, pj = 0; + + while (pi != object->properties.Length() && pj != other->properties.Length()) { + // Ignore the graph position when checking for duplicates. + if (0 == strcmp(object->properties[pi].cName, "_graphX")) { pi++; continue; } + if (0 == strcmp(object->properties[pi].cName, "_graphY")) { pi++; continue; } + if (0 == strcmp(object->properties[pi].cName, "_graphW")) { pi++; continue; } + if (0 == strcmp(object->properties[pi].cName, "_graphH")) { pi++; continue; } + if (0 == strcmp(other ->properties[pj].cName, "_graphX")) { pj++; continue; } + if (0 == strcmp(other ->properties[pj].cName, "_graphY")) { pj++; continue; } + if (0 == strcmp(other ->properties[pj].cName, "_graphW")) { pj++; continue; } + if (0 == strcmp(other ->properties[pj].cName, "_graphH")) { pj++; continue; } + + // Check if the properties are identical. + if (strcmp(object->properties[pi].cName, other->properties[pj].cName)) break; + if (object->properties[pi].type != other->properties[pj].type) break; + if (object->properties[pi].type == PROP_INT && object->properties[pi].integer != other->properties[pj].integer ) break; + if (object->properties[pi].type == PROP_COLOR && object->properties[pi].integer != other->properties[pj].integer ) break; + if (object->properties[pi].type == PROP_OBJECT && object->properties[pi].object != other->properties[pj].object ) break; + if (object->properties[pi].type == PROP_FLOAT && object->properties[pi].floating != other->properties[pj].floating) break; + + pi++, pj++; + } + + if (pi != object->properties.Length() || pj != other->properties.Length()) { + continue; + } + + // Duplicate found. Delete and relink. + uint64_t replaceID = other->id; + objects.Delete(i); + ObjectLookupRebuild(); + object = ObjectFind((uintptr_t) cp); + assert(object); + i--; + + for (uintptr_t j = 0; j < objects.Length(); j++) { + Object *source = &objects[j]; + + for (uintptr_t k = 0; k < source->properties.Length(); k++) { + if (source->properties[k].type == PROP_OBJECT && source->properties[k].object == replaceID) { + source->properties[k].object = object->id; + } + } + } + } +} + ////////////////////////////////////////////////////////////// enum InspectorElementType { @@ -1622,6 +1692,10 @@ void InspectorPopulate() { InspectorAddLink(object, "Icon color:", "iconColor"); InspectorAddInteger(object, "Icon size:", "iconSize"); + + UIButton *removeDuplicates = UIButtonCreate(0, 0, "Remove duplicates", -1); + removeDuplicates->e.cp = (void *) (uintptr_t) object->id; + removeDuplicates->invoke = TextStyleRemoveDuplicates; } else if (object->type == OBJ_VAR_CONTOUR_STYLE) { InspectorAddInteger(object, "Internal width:", "internalWidth"); InspectorAddInteger(object, "External width:", "externalWidth"); @@ -3421,7 +3495,7 @@ void Export() { void ExportJSON() { DocumentLoad(); FILE *f = fopen("bin/designer2.json", "wb"); - fprintf(f, "{\n\t\"version\": 1,\n\t\"objectIDAllocator\": %ld,\n", objectIDAllocator); + fprintf(f, "{\n\t\"version\": 1,\n\t\"objectIDAllocator\": %ld,\n\t\"objects\": [\n", objectIDAllocator); for (uintptr_t i = 0; i < objects.Length(); i++) { Object *object = &objects[i]; @@ -3434,12 +3508,12 @@ void ExportJSON() { } } - fprintf(f, "\t\"%ld\": {\n\t\t\"Flags\": %d,\n\t\t\"Type\": \"%s\",\n\t\t\"Name\": \"%s\",\n", + fprintf(f, "\t\t{\n\t\t\t\"ID\": %ld,\n\t\t\t\"Flags\": %d,\n\t\t\t\"Type\": \"%s\",\n\t\t\t\"Name\": \"%s\",\n", object->id, object->flags, type, object->cName); for (uintptr_t i = 0; i < object->properties.Length(); i++) { Property *property = &object->properties[i]; - fprintf(f, "\t\t\"%s\": ", property->cName); + fprintf(f, "\t\t\t\"%s\": ", property->cName); if (property->type == PROP_COLOR) fprintf(f, "\"#%.8X\"", (uint32_t) property->integer); if (property->type == PROP_INT) fprintf(f, "%d", property->integer); if (property->type == PROP_OBJECT) fprintf(f, "\"@%ld\"", property->object); @@ -3447,10 +3521,10 @@ void ExportJSON() { fprintf(f, "%s\n", i < object->properties.Length() - 1 ? "," : ""); } - fprintf(f, "\t}%s\n", i < objects.Length() - 1 ? "," : ""); + fprintf(f, "\t\t}%s\n", i < objects.Length() - 1 ? "," : ""); } - fprintf(f, "}\n"); + fprintf(f, "\t]\n}\n"); fclose(f); DocumentFree(); }