bugfixes; designer2 arrow modes

This commit is contained in:
nakst 2021-10-07 18:46:51 +01:00
parent 4ad2395977
commit ab84ab91ae
6 changed files with 57 additions and 23 deletions

View File

@ -1055,7 +1055,7 @@ void _start() {
EsPanel *buttonsRow = EsPanelCreate(panelInstallOptions, ES_CELL_H_FILL | ES_PANEL_HORIZONTAL, &styleButtonsRow);
EsButtonOnCommand(EsButtonCreate(buttonsRow, ES_FLAGS_DEFAULT, 0, INTERFACE_STRING(InstallerViewLicenses)), ButtonViewLicenses);
EsButtonOnCommand(EsButtonCreate(buttonsRow, ES_FLAGS_DEFAULT, 0, INTERFACE_STRING(DesktopShutdownAction)), ButtonShutdown);
EsButtonOnCommand(EsButtonCreate(buttonsRow, ES_FLAGS_DEFAULT, ES_STYLE_PUSH_BUTTON_DANGEROUS, INTERFACE_STRING(DesktopShutdownAction)), ButtonShutdown);
EsSpacerCreate(buttonsRow, ES_CELL_H_FILL);
installButton = EsButtonCreate(buttonsRow, ES_ELEMENT_DISABLED, 0, INTERFACE_STRING(InstallerInstall));
EsButtonOnCommand(installButton, ButtonInstall);

View File

@ -1,4 +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))
@ -119,4 +120,3 @@ private define ES_STYLE_WINDOW_TAB_INACTIVE (ES_STYLE_CAST(1409))
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))

Binary file not shown.

Binary file not shown.

View File

@ -1121,9 +1121,6 @@ void DoCommand(const char *l) {
} else if (0 == strcmp(l, "config")) {
BuildUtilities();
CallSystem("bin/config_editor");
} else if (0 == strcmp(l, "designer")) {
BuildUtilities();
CallSystem("bin/designer \"res/Theme Source.dat\" \"res/Theme.dat\" \"desktop/styles.header\"");
} else if (0 == strcmp(l, "designer2")) {
BuildUtilities();
CallSystem("bin/designer2");

View File

@ -20,7 +20,8 @@
// Prototyping display: previewing state transitions.
// TODO Additional features:
// Method to iterate through all the objects that link to selected object.
// Change the type of an object in-place.
// Undoing a delete does not previous an instance's layer.
// Sorted list in ObjectAddInstanceCommand.
// Hide arrows to colors.
// Having to link to the end of a conditional object chain is a bit strange.
@ -213,7 +214,14 @@ const EsInstanceClassEditorSettings instanceClassEditorSettings = {
#endif
struct Canvas : UIElement {
bool showArrows;
#define ARROW_MODE_NONE (0)
#define ARROW_MODE_ALL (1)
#define ARROW_MODE_FROM (2)
#define ARROW_MODE_TO (3)
#define ARROW_MODE_FROM_OR_TO (4)
#define ARROW_MODE_FROM_AND_TO (5)
uint8_t arrowMode;
bool showPrototype;
float zoom;
@ -692,7 +700,7 @@ void DocumentApplyStep(Step step, StepApplyMode mode = STEP_APPLY_NORMAL) {
for (uintptr_t i = 0; i < objects.Length(); i++) {
if (objects[i].id == step.objectID) {
step.object = objects[i];
objects.DeleteSwap(i);
objects.Delete(i);
break;
}
}
@ -2542,7 +2550,7 @@ int CanvasMessage(UIElement *element, UIMessage message, int di, void *dp) {
}
}
if (canvas->showArrows && !canvas->showPrototype) {
if (canvas->arrowMode && !canvas->showPrototype) {
// Draw object connections.
for (uintptr_t i = 0; i < objects.Length(); i++) {
@ -2554,6 +2562,21 @@ int CanvasMessage(UIElement *element, UIMessage message, int di, void *dp) {
if (object->properties[j].type == PROP_OBJECT) {
Object *target = ObjectFind(object->properties[j].object);
if (!target) continue;
bool sourceIsSelected = object->flags & OBJECT_IS_SELECTED;
bool targetIsSelected = target->flags & OBJECT_IS_SELECTED;
if (canvas->arrowMode == ARROW_MODE_ALL) {
} else if (canvas->arrowMode == ARROW_MODE_FROM) {
if (!sourceIsSelected) continue;
} else if (canvas->arrowMode == ARROW_MODE_TO) {
if (!targetIsSelected) continue;
} else if (canvas->arrowMode == ARROW_MODE_FROM_OR_TO) {
if (!targetIsSelected && !sourceIsSelected) continue;
} else if (canvas->arrowMode == ARROW_MODE_FROM_AND_TO) {
if (!targetIsSelected || !sourceIsSelected) continue;
}
UIRectangle b2 = CanvasGetObjectBounds(target);
CanvasDrawArrow(painter, (b2.l + b2.r) / 2, (b2.t + b2.b) / 2, (b1.l + b1.r) / 2, (b1.t + b1.b) / 2, 0xFF000000);
}
@ -2743,11 +2766,22 @@ int CanvasMessage(UIElement *element, UIMessage message, int di, void *dp) {
return 0;
}
void CanvasToggleArrows(void *) {
canvas->showArrows = !canvas->showArrows;
void CanvasArrowModeInternal(void *cp) {
canvas->arrowMode = (uintptr_t) cp;
UIElementRepaint(canvas, nullptr);
}
void CanvasArrowMode(void *) {
UIMenu *menu = UIMenuCreate(window->pressed, UI_MENU_NO_SCROLL | UI_MENU_PLACE_ABOVE);
UIMenuAddItem(menu, 0, "None", -1, CanvasArrowModeInternal, (void *) (uintptr_t) ARROW_MODE_NONE);
UIMenuAddItem(menu, 0, "All", -1, CanvasArrowModeInternal, (void *) (uintptr_t) ARROW_MODE_ALL);
UIMenuAddItem(menu, 0, "From selected", -1, CanvasArrowModeInternal, (void *) (uintptr_t) ARROW_MODE_FROM);
UIMenuAddItem(menu, 0, "To selected", -1, CanvasArrowModeInternal, (void *) (uintptr_t) ARROW_MODE_TO);
UIMenuAddItem(menu, 0, "From or to selected", -1, CanvasArrowModeInternal, (void *) (uintptr_t) ARROW_MODE_FROM_OR_TO);
UIMenuAddItem(menu, 0, "From and to selected", -1, CanvasArrowModeInternal, (void *) (uintptr_t) ARROW_MODE_FROM_AND_TO);
UIMenuShow(menu);
}
void CanvasSwitchView(void *) {
float z = canvas->swapZoom, x = canvas->swapPanX, y = canvas->swapPanY;
canvas->swapZoom = canvas->zoom, canvas->swapPanX = canvas->panX, canvas->swapPanY = canvas->panY;
@ -3243,15 +3277,16 @@ void Export() {
exportOffset.offset = ftell(output);
exportOffsets.Add(exportOffset);
#define LAYER_READ_INT32(x) sprintf(cPropertyName, "layers_%d_" #x, i); int8_t x = PropertyReadInt32(appearance, cPropertyName)
LAYER_READ_INT32(offset0);
LAYER_READ_INT32(offset1);
LAYER_READ_INT32(offset2);
LAYER_READ_INT32(offset3);
LAYER_READ_INT32(position0);
LAYER_READ_INT32(position1);
LAYER_READ_INT32(position2);
LAYER_READ_INT32(position3);
#define LAYER_READ_INT8(x) sprintf(cPropertyName, "layers_%d_" #x, i); int8_t x = PropertyReadInt32(appearance, cPropertyName)
LAYER_READ_INT8(offset0);
LAYER_READ_INT8(offset1);
LAYER_READ_INT8(offset2);
LAYER_READ_INT8(offset3);
LAYER_READ_INT8(position0);
LAYER_READ_INT8(position1);
LAYER_READ_INT8(position2);
LAYER_READ_INT8(position3);
LAYER_READ_INT8(mode);
#undef LAYER_READ_INT32
uint8_t baseDataBuffer[4096];
@ -3272,8 +3307,8 @@ void Export() {
} else if (layerObject->type == OBJ_LAYER_TEXT) {
layer.type = THEME_LAYER_TEXT;
ThemeLayerText text = {};
ExportI8(&context, text, blur, object, "blur");
ExportColor(&context, text, color, object, "color");
ExportI8(&context, text, blur, layerObject, "blur");
ExportColor(&context, text, color, layerObject, "color");
ExportWrite(&context, &text, sizeof(text));
} else {
assert(false);
@ -3282,6 +3317,7 @@ void Export() {
layer.dataByteCount = baseData.position + sizeof(layer);
layer.overrideCount = overrideData.position / sizeof(ThemeOverride);
layer.overrideListOffset = layer.dataByteCount + ftell(output);
layer.mode = mode;
fwrite(&layer, 1, sizeof(layer), output);
fwrite(baseData.out, 1, baseData.position, output);
fwrite(overrideData.out, 1, overrideData.position, output);
@ -3452,7 +3488,7 @@ int main(int argc, char **argv) {
graphControls = UIPanelCreate(canvas, UI_PANEL_HORIZONTAL | UI_ELEMENT_PARENT_PUSH);
graphControls->gap = -1;
UIButtonCreate(0, UI_BUTTON_SMALL, "Toggle arrows", -1)->invoke = CanvasToggleArrows;
UIButtonCreate(0, UI_BUTTON_SMALL, "Arrow mode \x18", -1)->invoke = CanvasArrowMode;
UIButtonCreate(0, UI_BUTTON_SMALL, "Add object \x18", -1)->invoke = ObjectAddCommand;
UIParentPop();
@ -3468,6 +3504,7 @@ int main(int argc, char **argv) {
canvas->zoom = canvas->swapZoom = 1.0f;
canvas->previewPrimaryState = THEME_PRIMARY_STATE_IDLE;
canvas->arrowMode = ARROW_MODE_FROM_OR_TO;
UIWindowRegisterShortcut(window, UI_SHORTCUT(UI_KEYCODE_LETTER('Z'), 1 /* ctrl */, 0, 0, DocumentUndoStep, 0));
UIWindowRegisterShortcut(window, UI_SHORTCUT(UI_KEYCODE_LETTER('Y'), 1 /* ctrl */, 0, 0, DocumentRedoStep, 0));