From b5a4e77a26f9fd9e2a60a538abd1bb4a5316b157 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Sun, 26 Jun 2022 15:41:42 +0300 Subject: [PATCH 59/59] Gui API: Add canvas_put_sprite_full_scaled() Qt-client has an implementation, other clients just dummies. No callers yet. See osdn #44953 Signed-off-by: Marko Lindqvist --- client/gui-gtk-3.22/canvas.c | 13 +++++++++++++ client/gui-gtk-4.0/canvas.c | 13 +++++++++++++ client/gui-qt/canvas.cpp | 19 +++++++++++++++++++ client/gui-qt/qtg_cxxside.cpp | 1 + client/gui-qt/qtg_cxxside.h | 4 ++++ client/gui-sdl2/canvas.c | 13 +++++++++++++ client/gui-stub/canvas.c | 11 +++++++++++ client/gui_interface.c | 12 ++++++++++++ client/gui_interface.h | 4 ++++ client/include/canvas_g.h | 5 ++++- 10 files changed, 94 insertions(+), 1 deletion(-) diff --git a/client/gui-gtk-3.22/canvas.c b/client/gui-gtk-3.22/canvas.c index a6aee763f6..b789e1df45 100644 --- a/client/gui-gtk-3.22/canvas.c +++ b/client/gui-gtk-3.22/canvas.c @@ -156,6 +156,19 @@ void canvas_put_sprite_full(struct canvas *pcanvas, 0, 0, width, height); } +/************************************************************************//** + Draw a full sprite onto the canvas, scaled to the canvas size. +****************************************************************************/ +void canvas_put_sprite_full_scaled(struct canvas *pcanvas, + int canvas_x, int canvas_y, + int canvas_w, int canvas_h, + struct sprite *sprite) +{ + /* This should never be called as we have not enabled support + * in this client yet. */ + fc_assert(FALSE); +} + /************************************************************************//** Draw a full sprite onto the canvas. If "fog" is specified draw it with fog. diff --git a/client/gui-gtk-4.0/canvas.c b/client/gui-gtk-4.0/canvas.c index 55ff70deaf..4c3beee9cb 100644 --- a/client/gui-gtk-4.0/canvas.c +++ b/client/gui-gtk-4.0/canvas.c @@ -156,6 +156,19 @@ void canvas_put_sprite_full(struct canvas *pcanvas, 0, 0, width, height); } +/************************************************************************//** + Draw a full sprite onto the canvas, scaled to the canvas size. +****************************************************************************/ +void canvas_put_sprite_full_scaled(struct canvas *pcanvas, + int canvas_x, int canvas_y, + int canvas_w, int canvas_h, + struct sprite *sprite) +{ + /* This should never be called as we have not enabled support + * in this client yet. */ + fc_assert(FALSE); +} + /************************************************************************//** Draw a full sprite onto the canvas. If "fog" is specified draw it with fog. diff --git a/client/gui-qt/canvas.cpp b/client/gui-qt/canvas.cpp index 83c177d9ec..9d395e54ea 100644 --- a/client/gui-qt/canvas.cpp +++ b/client/gui-qt/canvas.cpp @@ -162,6 +162,25 @@ void qtg_canvas_put_sprite_full(struct canvas *pcanvas, 0, 0, width, height); } +/************************************************************************//** + Draw a full sprite onto the canvas, scaled to the canvas size. +****************************************************************************/ +void qtg_canvas_put_sprite_full_scaled(struct canvas *pcanvas, + int canvas_x, int canvas_y, + int canvas_w, int canvas_h, + struct sprite *sprite) +{ + QPainter p; + int width, height; + + get_sprite_dimensions(sprite, &width, &height); + + p.begin(&pcanvas->map_pixmap); + p.drawPixmap(canvas_x, canvas_y, canvas_w, canvas_h, + *sprite->pm, 0, 0, width, height); + p.end(); +} + /************************************************************************//** Draw a full sprite onto the canvas. If "fog" is specified draw it with fog. diff --git a/client/gui-qt/qtg_cxxside.cpp b/client/gui-qt/qtg_cxxside.cpp index a94746a826..2710ec8d14 100644 --- a/client/gui-qt/qtg_cxxside.cpp +++ b/client/gui-qt/qtg_cxxside.cpp @@ -60,6 +60,7 @@ void setup_gui_funcs() funcs->canvas_copy = qtg_canvas_copy; funcs->canvas_put_sprite = qtg_canvas_put_sprite; funcs->canvas_put_sprite_full = qtg_canvas_put_sprite_full; + funcs->canvas_put_sprite_full_scaled = qtg_canvas_put_sprite_full_scaled; funcs->canvas_put_sprite_fogged = qtg_canvas_put_sprite_fogged; funcs->canvas_put_rectangle = qtg_canvas_put_rectangle; funcs->canvas_fill_sprite_area = qtg_canvas_fill_sprite_area; diff --git a/client/gui-qt/qtg_cxxside.h b/client/gui-qt/qtg_cxxside.h index 8a29823397..168736123e 100644 --- a/client/gui-qt/qtg_cxxside.h +++ b/client/gui-qt/qtg_cxxside.h @@ -70,6 +70,10 @@ void qtg_canvas_put_sprite(struct canvas *pcanvas, void qtg_canvas_put_sprite_full(struct canvas *pcanvas, int canvas_x, int canvas_y, struct sprite *sprite); +void qtg_canvas_put_sprite_full_scaled(struct canvas *pcanvas, + int canvas_x, int canvas_y, + int canvas_w, int canvas_h, + struct sprite *sprite); void qtg_canvas_put_sprite_fogged(struct canvas *pcanvas, int canvas_x, int canvas_y, struct sprite *psprite, diff --git a/client/gui-sdl2/canvas.c b/client/gui-sdl2/canvas.c index e58eb81752..8ba1c1f1c1 100644 --- a/client/gui-sdl2/canvas.c +++ b/client/gui-sdl2/canvas.c @@ -122,6 +122,19 @@ void canvas_put_sprite_full(struct canvas *pcanvas, alphablit(GET_SURF(sprite), NULL, pcanvas->surf, &dst, 255); } +/************************************************************************//** + Draw a full sprite onto the canvas, scaled to the canvas size. +****************************************************************************/ +void canvas_put_sprite_full_scaled(struct canvas *pcanvas, + int canvas_x, int canvas_y, + int canvas_w, int canvas_h, + struct sprite *sprite) +{ + /* This should never be called as we have not enabled support + * in this client yet. */ + fc_assert(FALSE); +} + /**********************************************************************//** Draw a full sprite onto the canvas. If "fog" is specified draw it with fog. diff --git a/client/gui-stub/canvas.c b/client/gui-stub/canvas.c index 66cf353694..fbf1f96f1a 100644 --- a/client/gui-stub/canvas.c +++ b/client/gui-stub/canvas.c @@ -92,6 +92,17 @@ void gui_canvas_put_sprite_full(struct canvas *pcanvas, /* PORTME */ } +/************************************************************************//** + Draw a full sprite onto the canvas, scaled to the canvas size. +****************************************************************************/ +void gui_canvas_put_sprite_full_scaled(struct canvas *pcanvas, + int canvas_x, int canvas_y, + int canvas_w, int canvas_h, + struct sprite *sprite) +{ + /* PORTME */ +} + /************************************************************************//** Draw a full sprite onto the canvas. If "fog" is specified draw it with fog. diff --git a/client/gui_interface.c b/client/gui_interface.c index d6b1bc08df..76c2e77375 100644 --- a/client/gui_interface.c +++ b/client/gui_interface.c @@ -258,6 +258,18 @@ void canvas_put_sprite_full(struct canvas *pcanvas, funcs.canvas_put_sprite_full(pcanvas, canvas_x, canvas_y, psprite); } +/**********************************************************************//** + Call canvas_put_sprite_full_scaled callback +**************************************************************************/ +void canvas_put_sprite_full_scaled(struct canvas *pcanvas, + int canvas_x, int canvas_y, + int canvas_w, int canvas_h, + struct sprite *psprite) +{ + funcs.canvas_put_sprite_full_scaled(pcanvas, canvas_x, canvas_y, + canvas_w, canvas_h, psprite); +} + /**********************************************************************//** Call canvas_put_sprite_fogged callback **************************************************************************/ diff --git a/client/gui_interface.h b/client/gui_interface.h index aad1a477e7..b59c5412d7 100644 --- a/client/gui_interface.h +++ b/client/gui_interface.h @@ -75,6 +75,10 @@ struct gui_funcs { void (*canvas_put_sprite_full)(struct canvas *pcanvas, int canvas_x, int canvas_y, struct sprite *psprite); + void (*canvas_put_sprite_full_scaled)(struct canvas *pcanvas, + int canvas_x, int canvas_y, + int canvas_w, int canvas_h, + struct sprite *psprite); void (*canvas_put_sprite_fogged)(struct canvas *pcanvas, int canvas_x, int canvas_y, struct sprite *psprite, diff --git a/client/include/canvas_g.h b/client/include/canvas_g.h index be6bc1152a..144fef9514 100644 --- a/client/include/canvas_g.h +++ b/client/include/canvas_g.h @@ -20,7 +20,7 @@ struct color; struct sprite; -struct canvas; /* opaque type, real type is gui-dep */ +struct canvas; /* opaque type, real type is gui-dep */ enum line_type { LINE_NORMAL, LINE_BORDER, LINE_TILE_FRAME, LINE_GOTO @@ -45,6 +45,9 @@ GUI_FUNC_PROTO(void, canvas_put_sprite, struct canvas *pcanvas, GUI_FUNC_PROTO(void, canvas_put_sprite_full, struct canvas *pcanvas, int canvas_x, int canvas_y, struct sprite *sprite) +GUI_FUNC_PROTO(void, canvas_put_sprite_full_scaled, struct canvas *pcanvas, + int canvas_x, int canvas_y, int canvas_w, int canvas_h, + struct sprite *sprite) GUI_FUNC_PROTO(void, canvas_put_sprite_fogged, struct canvas *pcanvas, int canvas_x, int canvas_y, struct sprite *psprite, -- 2.35.1