HBRUSH *brushes;
HPEN *pens;
HRGN clip;
+ HMENU gamemenu, typemenu;
UINT timer;
DWORD timer_last_tickcount;
int npresets;
int xmin, ymin;
};
+static void update_type_menu_tick(frontend *fe);
+static void update_copy_menu_greying(frontend *fe);
+
void fatal(char *fmt, ...)
{
char buf[2048];
if (fe->drawstatus == PRINTING) {
int hatch;
float r, g, b;
- print_get_colour(fe->dr, colour, &hatch, &r, &g, &b);
- if (fe->printcolour)
- SetTextColor(fe->hdc, RGB(r * 255, g * 255, b * 255));
- else
- SetTextColor(fe->hdc,
- hatch == HATCH_CLEAR ? RGB(255,255,255) : RGB(0,0,0));
+ print_get_colour(fe->dr, colour, fe->printcolour, &hatch, &r, &g, &b);
+
+ /*
+ * Displaying text in hatched colours is not permitted.
+ */
+ assert(hatch < 0);
+
+ SetTextColor(fe->hdc, RGB(r * 255, g * 255, b * 255));
} else {
SetTextColor(fe->hdc, fe->colours[colour]);
}
if (fe->drawstatus == PRINTING) {
int hatch;
float r, g, b;
- print_get_colour(fe->dr, colour, &hatch, &r, &g, &b);
+ print_get_colour(fe->dr, colour, fe->printcolour, &hatch, &r, &g, &b);
- if (fe->printcolour) {
+ if (hatch < 0) {
br = CreateSolidBrush(RGB(r * 255, g * 255, b * 255));
- } else if (hatch == HATCH_SOLID) {
- br = CreateSolidBrush(RGB(0,0,0));
- } else if (hatch == HATCH_CLEAR) {
- br = CreateSolidBrush(RGB(255,255,255));
} else {
#ifdef _WIN32_WCE
/*
float r, g, b;
int width = thin ? 0 : fe->linewidth;
- print_get_colour(fe->dr, colour, &hatch, &r, &g, &b);
- if (fe->printcolour)
- pen = CreatePen(PS_SOLID, width,
- RGB(r * 255, g * 255, b * 255));
- else if (hatch == HATCH_SOLID)
- pen = CreatePen(PS_SOLID, width, RGB(0, 0, 0));
- else if (hatch == HATCH_CLEAR)
- pen = CreatePen(PS_SOLID, width, RGB(255,255,255));
- else {
- assert(!"This shouldn't happen");
- pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
- }
+ print_get_colour(fe->dr, colour, fe->printcolour, &hatch, &r, &g, &b);
+ /*
+ * Stroking in hatched colours is not permitted.
+ */
+ assert(hatch < 0);
+ pen = CreatePen(PS_SOLID, width, RGB(r * 255, g * 255, b * 255));
} else {
pen = fe->pens[colour];
}
xy.y -= tm.tmAscent;
}
#ifndef _WIN32_WCE
- if (GetTextExtentPoint32(fe->hdc, text, strlen(text), &size)) {
+ if (GetTextExtentPoint32(fe->hdc, text, strlen(text), &size))
#else
- if (GetTextExtentPoint32(fe->hdc, wText, wcslen(wText), &size)) {
+ if (GetTextExtentPoint32(fe->hdc, wText, wcslen(wText), &size))
#endif
+ {
if (align & ALIGN_HCENTRE)
xy.x -= size.cx / 2;
else if (align & ALIGN_HRIGHT)
* Work out what that comes to in pixels.
*/
pox = (int)(mmox * (float)ppw / mmpw);
- poy = (int)(mmoy * (float)ppw / mmpw);
+ poy = (int)(mmoy * (float)pph / mmph);
/*
* And determine the scale.
HMENU menu = SHGetSubMenu(SHFindMenuBar(fe->hwnd), ID_GAME);
DeleteMenu(menu, 0, MF_BYPOSITION);
#endif
+ fe->gamemenu = menu;
AppendMenu(menu, MF_ENABLED, IDM_NEW, TEXT("&New"));
AppendMenu(menu, MF_ENABLED, IDM_RESTART, TEXT("&Restart"));
#ifndef _WIN32_WCE
if (thegame.can_configure) {
AppendMenu(sub, MF_ENABLED, IDM_CONFIG, TEXT("&Custom..."));
}
- }
+
+ fe->typemenu = sub;
+ } else
+ fe->typemenu = INVALID_HANDLE_VALUE;
AppendMenu(menu, MF_SEPARATOR, 0, 0);
#ifndef _WIN32_WCE
AppendMenu(menu, MF_ENABLED, IDM_UNDO, TEXT("Undo"));
AppendMenu(menu, MF_ENABLED, IDM_REDO, TEXT("Redo"));
#ifndef _WIN32_WCE
- if (thegame.can_format_as_text) {
+ if (thegame.can_format_as_text_ever) {
AppendMenu(menu, MF_SEPARATOR, 0, 0);
AppendMenu(menu, MF_ENABLED, IDM_COPY, TEXT("&Copy"));
}
ShowWindow(fe->hwnd, SW_SHOWNORMAL);
SetForegroundWindow(fe->hwnd);
+ update_type_menu_tick(fe);
+ update_copy_menu_greying(fe);
+
midend_redraw(fe->me);
return fe;
y += height/2; /* extra space before OK */
mkctrl(fe, width*2, maxwid+width*2, y, y+height*7/4, "BUTTON",
- BS_PUSHBUTTON | BS_NOTIFY | WS_TABSTOP | BS_DEFPUSHBUTTON, 0,
+ BS_PUSHBUTTON | WS_TABSTOP | BS_DEFPUSHBUTTON, 0,
"OK", IDOK);
SendMessage(fe->cfgbox, WM_INITDIALOG, 0, 0);
y += height/2; /* extra space before OK and Cancel */
mkctrl(fe, col1l, (col1l+col2r)/2-width, y, y+height*7/4, "BUTTON",
- BS_PUSHBUTTON | BS_NOTIFY | WS_TABSTOP | BS_DEFPUSHBUTTON, 0,
+ BS_PUSHBUTTON | WS_TABSTOP | BS_DEFPUSHBUTTON, 0,
"OK", IDOK);
mkctrl(fe, (col1l+col2r)/2+width, col2r, y, y+height*7/4, "BUTTON",
- BS_PUSHBUTTON | BS_NOTIFY | WS_TABSTOP, 0, "Cancel", IDCANCEL);
+ BS_PUSHBUTTON | WS_TABSTOP, 0, "Cancel", IDCANCEL);
SendMessage(fe->cfgbox, WM_INITDIALOG, 0, 0);
*wx_r = wx; *wy_r = wy;
}
+static void update_type_menu_tick(frontend *fe)
+{
+ int total, n, i;
+
+ if (fe->typemenu == INVALID_HANDLE_VALUE)
+ return;
+
+ total = GetMenuItemCount(fe->typemenu);
+ n = midend_which_preset(fe->me);
+ if (n < 0)
+ n = total - 1; /* "Custom" item */
+
+ for (i = 0; i < total; i++) {
+ int flag = (i == n ? MF_CHECKED : MF_UNCHECKED);
+ CheckMenuItem(fe->typemenu, i, MF_BYPOSITION | flag);
+ }
+
+ DrawMenuBar(fe->hwnd);
+}
+
+static void update_copy_menu_greying(frontend *fe)
+{
+ UINT enable = (midend_can_format_as_text_now(fe->me) ?
+ MF_ENABLED : MF_GRAYED);
+ EnableMenuItem(fe->gamemenu, IDM_COPY, MF_BYCOMMAND | enable);
+}
+
static void new_game_type(frontend *fe)
{
midend_new_game(fe->me);
new_game_size(fe);
+ update_type_menu_tick(fe);
+ update_copy_menu_greying(fe);
}
static int is_alt_pressed(void)