Menu bar items now depress when clicked.
This commit is contained in:
parent
0cede78932
commit
35f79eb834
3 changed files with 34 additions and 4 deletions
18
dvx/dvxApp.c
18
dvx/dvxApp.c
|
|
@ -335,6 +335,13 @@ static void closeAllPopups(AppContextT *ctx) {
|
||||||
dirtyListAdd(&ctx->dirty, pl->popupX, pl->popupY, pl->popupW, pl->popupH);
|
dirtyListAdd(&ctx->dirty, pl->popupX, pl->popupY, pl->popupW, pl->popupH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear the depressed menu bar item
|
||||||
|
WindowT *popupWin = findWindowById(ctx, ctx->popup.windowId);
|
||||||
|
if (popupWin && popupWin->menuBar && popupWin->menuBar->activeIdx >= 0) {
|
||||||
|
popupWin->menuBar->activeIdx = -1;
|
||||||
|
dirtyListAdd(&ctx->dirty, popupWin->x, popupWin->y, popupWin->w, CHROME_BORDER_WIDTH + CHROME_TITLE_HEIGHT + CHROME_MENU_HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
ctx->popup.active = false;
|
ctx->popup.active = false;
|
||||||
ctx->popup.depth = 0;
|
ctx->popup.depth = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -371,6 +378,13 @@ static void closePopupLevel(AppContextT *ctx) {
|
||||||
ctx->popup.popupH = pl->popupH;
|
ctx->popup.popupH = pl->popupH;
|
||||||
ctx->popup.hoverItem = pl->hoverItem;
|
ctx->popup.hoverItem = pl->hoverItem;
|
||||||
} else {
|
} else {
|
||||||
|
// Clear the depressed menu bar item
|
||||||
|
WindowT *popupWin = findWindowById(ctx, ctx->popup.windowId);
|
||||||
|
if (popupWin && popupWin->menuBar && popupWin->menuBar->activeIdx >= 0) {
|
||||||
|
popupWin->menuBar->activeIdx = -1;
|
||||||
|
dirtyListAdd(&ctx->dirty, popupWin->x, popupWin->y, popupWin->w, CHROME_BORDER_WIDTH + CHROME_TITLE_HEIGHT + CHROME_MENU_HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
ctx->popup.active = false;
|
ctx->popup.active = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2416,6 +2430,10 @@ static void openPopupAtMenu(AppContextT *ctx, WindowT *win, int32_t menuIdx) {
|
||||||
ctx->popup.menu = menu;
|
ctx->popup.menu = menu;
|
||||||
ctx->popup.popupX = win->x + menu->barX;
|
ctx->popup.popupX = win->x + menu->barX;
|
||||||
ctx->popup.popupY = win->y + CHROME_BORDER_WIDTH + CHROME_TITLE_HEIGHT + CHROME_MENU_HEIGHT;
|
ctx->popup.popupY = win->y + CHROME_BORDER_WIDTH + CHROME_TITLE_HEIGHT + CHROME_MENU_HEIGHT;
|
||||||
|
|
||||||
|
// Mark the menu bar item as active (depressed look)
|
||||||
|
win->menuBar->activeIdx = menuIdx;
|
||||||
|
dirtyListAdd(&ctx->dirty, win->x, win->y, win->w, CHROME_BORDER_WIDTH + CHROME_TITLE_HEIGHT + CHROME_MENU_HEIGHT);
|
||||||
ctx->popup.hoverItem = -1;
|
ctx->popup.hoverItem = -1;
|
||||||
ctx->popup.depth = 0;
|
ctx->popup.depth = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -304,6 +304,7 @@ struct MenuT {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
MenuT menus[MAX_MENUS];
|
MenuT menus[MAX_MENUS];
|
||||||
int32_t menuCount;
|
int32_t menuCount;
|
||||||
|
int32_t activeIdx; // menu bar item with open popup (-1 = none)
|
||||||
bool positionsDirty; // true = barX/barW need recomputation
|
bool positionsDirty; // true = barX/barW need recomputation
|
||||||
} MenuBarT;
|
} MenuBarT;
|
||||||
|
|
||||||
|
|
|
||||||
13
dvx/dvxWm.c
13
dvx/dvxWm.c
|
|
@ -302,12 +302,22 @@ static void drawMenuBar(DisplayT *d, const BlitOpsT *ops, const BitmapFontT *fon
|
||||||
|
|
||||||
for (int32_t i = 0; i < win->menuBar->menuCount; i++) {
|
for (int32_t i = 0; i < win->menuBar->menuCount; i++) {
|
||||||
MenuT *menu = &win->menuBar->menus[i];
|
MenuT *menu = &win->menuBar->menus[i];
|
||||||
int32_t textX = win->x + menu->barX + CHROME_TITLE_PAD;
|
int32_t itemX = win->x + menu->barX;
|
||||||
|
int32_t itemW = menu->barW;
|
||||||
|
int32_t textX = itemX + CHROME_TITLE_PAD;
|
||||||
int32_t textY = barY + (barH - font->charHeight) / 2;
|
int32_t textY = barY + (barH - font->charHeight) / 2;
|
||||||
|
|
||||||
|
if (i == win->menuBar->activeIdx) {
|
||||||
|
// Depressed look for the open menu item
|
||||||
|
BevelStyleT sunken = BEVEL_SUNKEN(colors, colors->menuBg, 1);
|
||||||
|
drawBevel(d, ops, itemX, barY, itemW, barH - 1, &sunken);
|
||||||
|
drawTextAccel(d, ops, font, textX + 1, textY + 1, menu->label,
|
||||||
|
colors->menuFg, colors->menuBg, true);
|
||||||
|
} else {
|
||||||
drawTextAccel(d, ops, font, textX, textY, menu->label,
|
drawTextAccel(d, ops, font, textX, textY, menu->label,
|
||||||
colors->menuFg, colors->menuBg, true);
|
colors->menuFg, colors->menuBg, true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setClipRect(d, savedClipX, savedClipY, savedClipW, savedClipH);
|
setClipRect(d, savedClipX, savedClipY, savedClipW, savedClipH);
|
||||||
|
|
||||||
|
|
@ -852,6 +862,7 @@ MenuBarT *wmAddMenuBar(WindowT *win) {
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(win->menuBar, 0, sizeof(MenuBarT));
|
memset(win->menuBar, 0, sizeof(MenuBarT));
|
||||||
|
win->menuBar->activeIdx = -1;
|
||||||
wmUpdateContentRect(win);
|
wmUpdateContentRect(win);
|
||||||
|
|
||||||
return win->menuBar;
|
return win->menuBar;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue