diff --git a/desktop/styles.header b/desktop/styles.header index 0622847..a639fb3 100644 --- a/desktop/styles.header +++ b/desktop/styles.header @@ -1,3 +1,4 @@ +define ES_STYLE_SEPARATOR_HORIZONTAL (ES_STYLE_CAST(1373)) 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)) @@ -8,7 +9,13 @@ define ES_STYLE_BUTTON_GROUP_CONTAINER (ES_STYLE_CAST(1229)) define ES_STYLE_BUTTON_GROUP_ITEM (ES_STYLE_CAST(1231)) define ES_STYLE_BUTTON_GROUP_SEPARATOR (ES_STYLE_CAST(1233)) private define ES_STYLE_CANVAS_SHADOW (ES_STYLE_CAST(1451)) +private define ES_STYLE_COLOR_HEX_TEXTBOX (ES_STYLE_CAST(1245)) +private define ES_STYLE_TASK_BAR_BAR (ES_STYLE_CAST(1379)) +private define ES_STYLE_SLIDER_TRACK (ES_STYLE_CAST(1601)) private define ES_STYLE_CHECKBOX_NORMAL (ES_STYLE_CAST(1559)) +private define ES_STYLE_SPLIT_BAR_VERTICAL (ES_STYLE_CAST(1377)) +private define ES_STYLE_WINDOW_TAB_CLOSE_BUTTON (ES_STYLE_CAST(1469)) +private define ES_STYLE_SPLIT_BAR_HORIZONTAL (ES_STYLE_CAST(1375)) private define ES_STYLE_CHECKBOX_RADIOBOX (ES_STYLE_CAST(1567)) define ES_STYLE_CLEAR_BACKGROUND (ES_STYLE_CAST(1597)) private define ES_STYLE_COLOR_CHOSEN_POINT (ES_STYLE_CAST(1241)) @@ -86,6 +93,7 @@ define ES_STYLE_PANEL_WINDOW_BACKGROUND (ES_STYLE_CAST(1341)) define ES_STYLE_TEXTBOX_BORDERED_MULTILINE (ES_STYLE_CAST(1399)) define ES_STYLE_PANEL_WINDOW_DIVIDER (ES_STYLE_CAST(1343)) 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)) @@ -112,11 +120,3 @@ 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)) private define ES_STYLE_SCROLLBAR_PAD (ES_STYLE_CAST(1371)) -define ES_STYLE_SEPARATOR_HORIZONTAL (ES_STYLE_CAST(1373)) -private define ES_STYLE_SLIDER_POINT (ES_STYLE_CAST(1607)) -private define ES_STYLE_SLIDER_TRACK (ES_STYLE_CAST(1601)) -private define ES_STYLE_SPLIT_BAR_HORIZONTAL (ES_STYLE_CAST(1375)) -private define ES_STYLE_WINDOW_TAB_CLOSE_BUTTON (ES_STYLE_CAST(1469)) -private define ES_STYLE_SPLIT_BAR_VERTICAL (ES_STYLE_CAST(1377)) -private define ES_STYLE_TASK_BAR_BAR (ES_STYLE_CAST(1379)) -private define ES_STYLE_COLOR_HEX_TEXTBOX (ES_STYLE_CAST(1245)) diff --git a/ports/bochs/essence.cc b/ports/bochs/essence.cc index a364c3c..e77102e 100644 --- a/ports/bochs/essence.cc +++ b/ports/bochs/essence.cc @@ -196,10 +196,13 @@ int CanvasCallback(EsElement *element, EsMessage *message) { // TODO Is it safe to pass input to Bochs on this thread? if (message->type == ES_MSG_PAINT) { - int ox = message->painter->width / 2 - instance->vmemWidth / 2; - int oy = message->painter->height / 2 - instance->vmemHeight / 2; - EsRectangle bounds = { ox, ox + instance->vmemWidth, oy, oy + instance->vmemHeight }; - EsDrawBitmap(message->painter, bounds, instance->vmem, instance->vmemWidth * 4, 0xFFFF); + EsRectangle bounds = EsPainterBoundsInset(message->painter); + EsRectangle imageBounds = EsRectangleCenter(bounds, ES_RECT_2S(instance->vmemWidth, instance->vmemHeight)); + EsDrawBitmap(message->painter, imageBounds, instance->vmem, instance->vmemWidth * 4, ES_DRAW_BITMAP_OPAQUE); + EsDrawBlock(message->painter, ES_RECT_4(bounds.l, imageBounds.l, bounds.t, bounds.b), 0xFF000000); + EsDrawBlock(message->painter, ES_RECT_4(imageBounds.r, bounds.r, bounds.t, bounds.b), 0xFF000000); + EsDrawBlock(message->painter, ES_RECT_4(imageBounds.l, imageBounds.r, bounds.t, imageBounds.t), 0xFF000000); + EsDrawBlock(message->painter, ES_RECT_4(imageBounds.l, imageBounds.r, imageBounds.b, bounds.b), 0xFF000000); repaintQueued = false; } else if (message->type == ES_MSG_KEY_DOWN) { if (message->keyboard.scancode == ES_SCANCODE_RIGHT_CTRL) { diff --git a/res/Theme Source.dat b/res/Theme Source.dat index 325cad1..927e750 100644 Binary files a/res/Theme Source.dat and b/res/Theme Source.dat differ diff --git a/res/Theme.dat b/res/Theme.dat index d2cdbbe..e6cc8c1 100644 Binary files a/res/Theme.dat and b/res/Theme.dat differ diff --git a/shared/common.cpp b/shared/common.cpp index 2bfb772..acc119e 100644 --- a/shared/common.cpp +++ b/shared/common.cpp @@ -365,15 +365,17 @@ void EsDrawBitmap(EsPainter *painter, EsRectangle region, uint32_t *sourceBits, j--; } } else if (mode == ES_DRAW_BITMAP_OPAQUE) { + __m128i fillAlpha = _mm_set1_epi32(0xFF000000); + while (j >= 4) { - _mm_storeu_si128((__m128i *) destination, _mm_loadu_si128((__m128i *) source)); + _mm_storeu_si128((__m128i *) destination, _mm_or_si128(fillAlpha, _mm_loadu_si128((__m128i *) source))); destination += 4; source += 4; j -= 4; } while (j > 0) { - *destination = *source; + *destination = 0xFF000000 | *source; destination++; source++; j--; diff --git a/util/designer2.cpp b/util/designer2.cpp index dfaf357..fb6bd76 100644 --- a/util/designer2.cpp +++ b/util/designer2.cpp @@ -20,6 +20,9 @@ // Prototyping display: previewing state transitions. // TODO Additional features: +// Method to iterate through all the objects that link to selected object. +// Sorted list in ObjectAddInstanceCommand. +// Hide arrows to colors. // Having to link to the end of a conditional object chain is a bit strange. // Output styles.header in order of header ID. // Cleaning up unused objects. @@ -342,6 +345,7 @@ struct Step { struct ExportOffset { uint64_t objectID; + uint64_t styleObjectID; uintptr_t offset; char cPropertyName[PROPERTY_NAME_SIZE]; uint8_t overrideType; @@ -414,6 +418,16 @@ ExportOffset *ExportOffsetFindObject(uint64_t id) { return nullptr; } +ExportOffset *ExportOffsetFindObjectForStyle(uint64_t id, uint64_t style) { + for (uintptr_t i = 0; i < exportOffsets.Length(); i++) { + if (exportOffsets[i].objectID == id && exportOffsets[i].styleObjectID == style) { + return &exportOffsets[i]; + } + } + + return nullptr; +} + ExportOffset *ExportOffsetFindProperty(uint64_t objectID, const char *cPropertyName) { for (uintptr_t i = 0; i < exportOffsets.Length(); i++) { if (exportOffsets[i].objectID == objectID @@ -1433,6 +1447,18 @@ void InspectorPopulate() { UIParentPush(inspector); Object *object = ObjectFind(selectedObjectID); + size_t referenceCount = 0; + + if (object) { + for (uintptr_t i = 0; i < objects.Length(); i++) { + for (uintptr_t j = 0; j < objects[i].properties.Length(); j++) { + if (objects[i].properties[j].type == PROP_OBJECT + && objects[i].properties[j].object == object->id) { + referenceCount++; + } + } + } + } if (object && object->type != OBJ_INSTANCE) { UIPanelCreate(0, UI_ELEMENT_PARENT_PUSH | UI_PANEL_BORDER | UI_PANEL_MEDIUM_SPACING | UI_PANEL_EXPAND); @@ -1444,6 +1470,8 @@ void InspectorPopulate() { UIButtonCreate(0, UI_BUTTON_SMALL, "Auto", -1)->invoke = InspectorAutoNameObject; UIButtonCreate(0, UI_BUTTON_SMALL, "Rename", -1)->invoke = InspectorRenameObject; UIParentPop(); + snprintf(buffer, sizeof(buffer), "%ld references", referenceCount); + UILabelCreate(0, 0, buffer, -1); bool inheritWithAnimation = object->type == OBJ_VAR_TEXT_STYLE || object->type == OBJ_LAYER_BOX || object->type == OBJ_LAYER_TEXT || object->type == OBJ_LAYER_PATH @@ -3122,6 +3150,8 @@ void Export() { continue; } + uint64_t styleObjectID = object->id; + Object *metrics = PropertyFindOrInheritReadObject(object, "metrics"); Object *textStyle = PropertyFindOrInheritReadObject(object, "textStyle"); Object *appearance = PropertyFindOrInheritReadObject(object, "appearance"); @@ -3208,6 +3238,7 @@ void Export() { if (!layerObject) continue; ExportOffset exportOffset = {}; + exportOffset.styleObjectID = styleObjectID; exportOffset.objectID = layerObject->id; exportOffset.offset = ftell(output); exportOffsets.Add(exportOffset); @@ -3271,6 +3302,8 @@ void Export() { continue; } + uint64_t styleObjectID = object->id; + ExportOffset exportOffset = {}; exportOffset.objectID = object->id; exportOffset.offset = ftell(output); @@ -3292,7 +3325,7 @@ void Export() { Property *layerProperty = PropertyFind(appearance, cPropertyName, PROP_OBJECT); Object *layerObject = ObjectFind(layerProperty ? layerProperty->object : 0); if (!layerObject) continue; - uint32_t exportOffset = ExportOffsetFindObject(layerObject->id)->offset; + uint32_t exportOffset = ExportOffsetFindObjectForStyle(layerObject->id, styleObjectID)->offset; fwrite(&exportOffset, 1, sizeof(exportOffset), output); } }