From b27b18708e636a798c44351b33232c66f1609ba4 Mon Sep 17 00:00:00 2001 From: Lennard Sprong Date: Wed, 2 Oct 2024 22:01:48 +0200 Subject: [PATCH] Make compatible with upstream changes --- PuzzleCommon/WindowsModern.cpp | 93 +++++++++++++++++----------------- drawing.c | 2 +- misc.c | 30 ----------- puzzles.h | 4 +- untangle.c | 4 +- 5 files changed, 52 insertions(+), 81 deletions(-) diff --git a/PuzzleCommon/WindowsModern.cpp b/PuzzleCommon/WindowsModern.cpp index 81a5a42..721be2f 100644 --- a/PuzzleCommon/WindowsModern.cpp +++ b/PuzzleCommon/WindowsModern.cpp @@ -65,50 +65,50 @@ Platform::String ^FromChars(char *input, bool kill) return ret; } -void winmodern_status_bar(void *handle, const char *text) +void winmodern_status_bar(drawing *dr, const char *text) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleStatusBar ^bar = *((IPuzzleStatusBar^*)fe->statusbar); bar->UpdateStatusBar(FromChars(text)); } -int winmodern_start_draw(void *handle) +int winmodern_start_draw(drawing *dr) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); return canvas->StartDraw(); } -void winmodern_draw_update(void *handle, int x, int y, int w, int h) +void winmodern_draw_update(drawing *dr, int x, int y, int w, int h) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->UpdateArea(x, y, w, h); } -void winmodern_clip(void *handle, int x, int y, int w, int h) +void winmodern_clip(drawing *dr, int x, int y, int w, int h) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->StartClip(x, y, w, h); } -void winmodern_unclip(void *handle) +void winmodern_unclip(drawing *dr) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->EndClip(); } -void winmodern_draw_text(void *handle, int x, int y, int fonttype, int fontsize, +void winmodern_draw_text(drawing *dr, int x, int y, int fonttype, int fontsize, int align, int colour, const char *text) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); GameFontType gamefont = fonttype == FONT_VARIABLE ? @@ -128,27 +128,27 @@ void winmodern_draw_text(void *handle, int x, int y, int fonttype, int fontsize, canvas->DrawText(x, y, gamefont, halign, valign, fontsize, colour, FromChars(text)); } -void winmodern_draw_rect(void *handle, int x, int y, int w, int h, int colour) +void winmodern_draw_rect(drawing *dr, int x, int y, int w, int h, int colour) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->DrawRect(x, y, w, h, colour); } -void winmodern_draw_line(void *handle, int x1, int y1, int x2, int y2, +void winmodern_draw_line(drawing *dr, int x1, int y1, int x2, int y2, int colour) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->DrawLine(x1, y1, x2, y2, colour); } -void winmodern_draw_poly(void *handle, const int *coords, int npoints, +void winmodern_draw_poly(drawing *dr, const int *coords, int npoints, int fillcolour, int outlinecolour) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); auto pc = ref new Vector(); @@ -162,24 +162,24 @@ void winmodern_draw_poly(void *handle, const int *coords, int npoints, canvas->DrawPolygon(pc, fillcolour, outlinecolour); } -void winmodern_draw_circle(void *handle, int cx, int cy, int radius, +void winmodern_draw_circle(drawing *dr, int cx, int cy, int radius, int fillcolour, int outlinecolour) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->DrawCircle(cx, cy, radius, fillcolour, outlinecolour); } -float winmodern_draw_scale(void *handle) +float winmodern_draw_scale(drawing *dr) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; return fe->scale; } -blitter *winmodern_blitter_new(void *handle, int w, int h) +blitter *winmodern_blitter_new(drawing *dr, int w, int h) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; blitter *bl = snew(blitter); bl->handle = fe->next_blitter_id++; @@ -195,9 +195,9 @@ blitter *winmodern_blitter_new(void *handle, int w, int h) return bl; } -void winmodern_blitter_free(void *handle, blitter *bl) +void winmodern_blitter_free(drawing *dr, blitter *bl) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; if (fe->canvas) { @@ -208,9 +208,9 @@ void winmodern_blitter_free(void *handle, blitter *bl) sfree(bl); } -void winmodern_blitter_save(void *handle, blitter *bl, int x, int y) +void winmodern_blitter_save(drawing *dr, blitter *bl, int x, int y) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); /* Resize the blitter rectangle to never use a negative x or y */ @@ -238,9 +238,9 @@ void winmodern_blitter_save(void *handle, blitter *bl, int x, int y) canvas->BlitterSave(bl->handle, bl->x, bl->y, bl->rw, bl->rh); } -void winmodern_blitter_load(void *handle, blitter *bl, int x, int y) +void winmodern_blitter_load(drawing *dr, blitter *bl, int x, int y) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); if (x == BLITTER_FROMSAVED) @@ -251,40 +251,40 @@ void winmodern_blitter_load(void *handle, blitter *bl, int x, int y) canvas->BlitterLoad(bl->handle, max(x, 0), max(y, 0), bl->rw, bl->rh); } -void winmodern_end_draw(void *handle) +void winmodern_end_draw(drawing *dr) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->EndDraw(); } -static char *winmodern_text_fallback(void *handle, const char *const *strings, +static char *winmodern_text_fallback(drawing *dr, const char *const *strings, int nstrings) { /* Any UTF-8 string is accepted. */ return dupstr(strings[0]); } -void winmodern_line_width(void *handle, float width) +void winmodern_line_width(drawing *dr, float width) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->SetLineWidth(width); } -void winmodern_line_dotted(void *handle, bool dotted) +void winmodern_line_dotted(drawing *dr, bool dotted) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); canvas->SetLineDotted(dotted); } -void winmodern_add_print_colour(void *handle, int id) +void winmodern_add_print_colour(drawing *dr, int id) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; IPuzzleCanvas ^canvas = *((IPuzzleCanvas^*)fe->canvas); int hatch = 0; @@ -295,30 +295,31 @@ void winmodern_add_print_colour(void *handle, int id) // All puzzles which use the hatch brush have been edited. canvas->AddColor(r, g, b); } -void winmodern_begin_doc(void *handle, int pages) +void winmodern_begin_doc(drawing *dr, int pages) { } -void winmodern_begin_page(void *handle, int number) +void winmodern_begin_page(drawing *dr, int number) { } -void winmodern_begin_puzzle(void *handle, float xm, float xc, +void winmodern_begin_puzzle(drawing *dr, float xm, float xc, float ym, float yc, int pw, int ph, float wmm) { - frontend *fe = (frontend *)handle; + frontend *fe = (frontend *)dr->handle; fe->printw = pw; fe->printh = ph; } -void winmodern_end_puzzle(void *handle) +void winmodern_end_puzzle(drawing *dr) { } -void winmodern_end_page(void *handle, int page) +void winmodern_end_page(drawing *dr, int page) { } -void winmodern_end_doc(void *handle) +void winmodern_end_doc(drawing *dr) { } const struct drawing_api winmodern_drawing = { + 1, winmodern_draw_text, winmodern_draw_rect, winmodern_draw_line, diff --git a/drawing.c b/drawing.c index d98a735..5aa6570 100644 --- a/drawing.c +++ b/drawing.c @@ -113,7 +113,7 @@ void draw_line(drawing *dr, int x1, int y1, int x2, int y2, int colour) float draw_scale(drawing *dr) { drawing_internal *dri = PRIVATE_CAST(dr); - return dri->pub.api->draw_scale(dr->handle); + return dri->pub.api->draw_scale(dr); } void draw_thick_line(drawing *dr, float thickness, diff --git a/misc.c b/misc.c index 11b54eb..b8871a9 100644 --- a/misc.c +++ b/misc.c @@ -324,36 +324,6 @@ void game_colour_preset(frontend* fe, float* ret, enum colourpreset_type preset) } } -void game_colour_preset(frontend* fe, float* ret, enum colourpreset_type preset) -{ - const char* envkey = NULL, *e; - - switch (preset) { - case COLOURPRESET_ENTRY: - envkey = "COLOURPRESET_ENTRY"; - frontend_default_colour(fe, ret); - ret[0] = 0.0F; - ret[1] *= 0.6F; - ret[2] = 0.0F; - break; - case COLOURPRESET_PENCIL: - envkey = "COLOURPRESET_PENCIL"; - frontend_default_colour(fe, ret); - ret[0] *= 0.5F; - ret[1] *= 0.5F; - break; - default: return; - } - - unsigned int r, g, b; - if ((e = getenv(envkey)) != NULL && - sscanf(e, "%2x%2x%2x", &r, &g, &b) == 3) { - ret[0] = r / 255.0F; - ret[1] = g / 255.0F; - ret[2] = b / 255.0F; - } -} - void swap_regions(void *av, void *bv, size_t size) { char tmpbuf[512]; diff --git a/puzzles.h b/puzzles.h index b6a1a40..d91ba17 100644 --- a/puzzles.h +++ b/puzzles.h @@ -820,7 +820,7 @@ struct drawing_api { int fillcolour, int outlinecolour); void (*draw_circle)(drawing *dr, int cx, int cy, int radius, int fillcolour, int outlinecolour); - float (*draw_scale)(void *handle); + float (*draw_scale)(drawing *dr); void (*draw_update)(drawing *dr, int x, int y, int w, int h); void (*clip)(drawing *dr, int x, int y, int w, int h); void (*unclip)(drawing *dr); @@ -831,7 +831,7 @@ struct drawing_api { void (*blitter_free)(drawing *dr, blitter *bl); void (*blitter_save)(drawing *dr, blitter *bl, int x, int y); void (*blitter_load)(drawing *dr, blitter *bl, int x, int y); - void (*add_print_colour)(void *handle, int colour); + void (*add_print_colour)(drawing *dr, int colour); void (*begin_doc)(drawing *dr, int pages); void (*begin_page)(drawing *dr, int number); void (*begin_puzzle)(drawing *dr, float xm, float xc, diff --git a/untangle.c b/untangle.c index 56e1c72..b4c4fc7 100644 --- a/untangle.c +++ b/untangle.c @@ -1936,10 +1936,10 @@ static void game_redraw(drawing *dr, game_drawstate *ds, if (c == thisc) { if (ui->vertex_numbers) { char buf[80]; - draw_circle(dr, ds->x[i], ds->y[i], DRAG_THRESHOLD, COL_BACKGROUND, COL_BACKGROUND); + draw_circle(dr, ds->x[i], ds->y[i], radius*2, COL_BACKGROUND, COL_BACKGROUND); sprintf(buf, "%d", i); draw_text(dr, ds->x[i], ds->y[i], FONT_VARIABLE, - DRAG_THRESHOLD*3/2, + radius*3, ALIGN_VCENTRE|ALIGN_HCENTRE, c, buf); } else { draw_circle(dr, ds->x[i], ds->y[i], radius,