From 4661262572fb88414b020ffb5844e46d8a03d55b Mon Sep 17 00:00:00 2001 From: frutiemax Date: Thu, 2 Jul 2020 13:06:28 -0400 Subject: [PATCH] Fix #12085: Use ScreenCoordsXY on clip_drawpixelinfo (#12105) --- .../windows/EditorInventionsList.cpp | 2 +- .../windows/EditorObjectSelection.cpp | 2 +- src/openrct2-ui/windows/GameBottomToolbar.cpp | 2 +- src/openrct2-ui/windows/Guest.cpp | 4 ++-- src/openrct2-ui/windows/Multiplayer.cpp | 2 +- src/openrct2-ui/windows/Network.cpp | 4 ++-- src/openrct2-ui/windows/News.cpp | 2 +- src/openrct2-ui/windows/Ride.cpp | 4 ++-- src/openrct2-ui/windows/RideConstruction.cpp | 2 +- src/openrct2-ui/windows/Scenery.cpp | 2 +- src/openrct2-ui/windows/Staff.cpp | 2 +- src/openrct2-ui/windows/StaffList.cpp | 6 +++-- src/openrct2-ui/windows/TrackDesignPlace.cpp | 2 +- src/openrct2/drawing/Drawing.cpp | 23 ++++++++++--------- src/openrct2/drawing/Drawing.h | 4 ++-- 15 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index fd984c26e1..6ba352d2be 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -598,7 +598,7 @@ static void window_editor_inventions_list_paint(rct_window* w, rct_drawpixelinfo screenPos = w->windowPos + ScreenCoordsXY{ widget->left + 1, widget->top + 1 }; width = widget->width() - 1; int32_t height = widget->height() - 1; - if (clip_drawpixelinfo(&clipDPI, dpi, screenPos.x, screenPos.y, width, height)) + if (clip_drawpixelinfo(&clipDPI, dpi, screenPos, width, height)) { object_draw_preview(object, &clipDPI, width, height); } diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 294478e7d9..482e536529 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -1050,7 +1050,7 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf auto screenPos = w->windowPos + ScreenCoordsXY{ widget->left + 1, widget->top + 1 }; width = widget->width() - 1; int32_t height = widget->height() - 1; - if (clip_drawpixelinfo(&clipDPI, dpi, screenPos.x, screenPos.y, width, height)) + if (clip_drawpixelinfo(&clipDPI, dpi, screenPos, width, height)) { object_draw_preview(_loadedObject, &clipDPI, width, height); } diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index ab36362581..db8b8f132c 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -602,7 +602,7 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc break; rct_drawpixelinfo cliped_dpi; - if (!clip_drawpixelinfo(&cliped_dpi, dpi, screenCoords.x + 1, screenCoords.y + 1, 22, 22)) + if (!clip_drawpixelinfo(&cliped_dpi, dpi, screenCoords + ScreenCoordsXY{ 1, 1 }, 22, 22)) { break; } diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index 0e3554cce9..1a10488506 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -865,7 +865,7 @@ static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dp height++; rct_drawpixelinfo clip_dpi; - if (!clip_drawpixelinfo(&clip_dpi, dpi, screenCoords.x, screenCoords.y, width, height)) + if (!clip_drawpixelinfo(&clip_dpi, dpi, screenCoords, width, height)) { return; } @@ -1093,7 +1093,7 @@ void window_guest_overview_paint(rct_window* w, rct_drawpixelinfo* dpi) int32_t top = widget->top + w->windowPos.y; int32_t height = widget->height(); rct_drawpixelinfo dpi_marquee; - if (!clip_drawpixelinfo(&dpi_marquee, dpi, left, top, width, height)) + if (!clip_drawpixelinfo(&dpi_marquee, dpi, { left, top }, width, height)) { return; } diff --git a/src/openrct2-ui/windows/Multiplayer.cpp b/src/openrct2-ui/windows/Multiplayer.cpp index 2982fe60a6..2b065f3e24 100644 --- a/src/openrct2-ui/windows/Multiplayer.cpp +++ b/src/openrct2-ui/windows/Multiplayer.cpp @@ -485,7 +485,7 @@ static void window_multiplayer_information_paint(rct_window* w, rct_drawpixelinf window_multiplayer_draw_tab_images(w, dpi); rct_drawpixelinfo clippedDPI; - if (clip_drawpixelinfo(&clippedDPI, dpi, w->windowPos.x, w->windowPos.y, w->width, w->height)) + if (clip_drawpixelinfo(&clippedDPI, dpi, w->windowPos, w->width, w->height)) { dpi = &clippedDPI; diff --git a/src/openrct2-ui/windows/Network.cpp b/src/openrct2-ui/windows/Network.cpp index 12028fb17e..dad915ceb8 100644 --- a/src/openrct2-ui/windows/Network.cpp +++ b/src/openrct2-ui/windows/Network.cpp @@ -323,7 +323,7 @@ static void window_network_draw_graph( height = height - 2; rct_drawpixelinfo clippedDPI; - if (!clip_drawpixelinfo(&clippedDPI, dpi, x, y, width, height)) + if (!clip_drawpixelinfo(&clippedDPI, dpi, { x, y }, width, height)) return; dpi = &clippedDPI; @@ -391,7 +391,7 @@ static void window_network_information_paint(rct_window* w, rct_drawpixelinfo* d const int32_t graphHeight = (totalHeight - totalHeightText - heightTab) / 2; rct_drawpixelinfo clippedDPI; - if (clip_drawpixelinfo(&clippedDPI, dpi, w->windowPos.x, w->windowPos.y, w->width, w->height)) + if (clip_drawpixelinfo(&clippedDPI, dpi, w->windowPos, w->width, w->height)) { dpi = &clippedDPI; diff --git a/src/openrct2-ui/windows/News.cpp b/src/openrct2-ui/windows/News.cpp index 6909e9ad80..7b4b9b4197 100644 --- a/src/openrct2-ui/windows/News.cpp +++ b/src/openrct2-ui/windows/News.cpp @@ -292,7 +292,7 @@ static void window_news_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32 case NEWS_ITEM_PEEP_ON_RIDE: { rct_drawpixelinfo cliped_dpi; - if (!clip_drawpixelinfo(&cliped_dpi, dpi, screenCoords.x + 1, screenCoords.y + 1, 22, 22)) + if (!clip_drawpixelinfo(&cliped_dpi, dpi, screenCoords + ScreenCoordsXY{ 1, 1 }, 22, 22)) { break; } diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 4fa37045f4..db4710f52f 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -1320,7 +1320,7 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo* dpi, rct_window* w) screenCoords += w->windowPos; rct_drawpixelinfo clipDPI; - if (!clip_drawpixelinfo(&clipDPI, dpi, screenCoords.x, screenCoords.y, width, height)) + if (!clip_drawpixelinfo(&clipDPI, dpi, screenCoords, width, height)) { return; } @@ -5104,7 +5104,7 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi) if (widget->type != WWT_EMPTY) { if (clip_drawpixelinfo( - &clippedDpi, dpi, w->windowPos.x + widget->left + 1, w->windowPos.y + widget->top + 1, widget->width(), + &clippedDpi, dpi, w->windowPos + ScreenCoordsXY{ widget->left + 1, widget->top + 1 }, widget->width(), widget->height())) { gfx_clear(&clippedDpi, PALETTE_INDEX_12); diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 77f774679c..a048c218b2 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2334,7 +2334,7 @@ static void window_ride_construction_paint(rct_window* w, rct_drawpixelinfo* dpi auto screenCoords = ScreenCoordsXY{ w->windowPos.x + widget->left + 1, w->windowPos.y + widget->top + 1 }; width = widget->width() - 1; height = widget->height() - 1; - if (clip_drawpixelinfo(&clipdpi, dpi, screenCoords.x, screenCoords.y, width, height)) + if (clip_drawpixelinfo(&clipdpi, dpi, screenCoords, width, height)) { window_ride_construction_draw_track_piece( w, &clipdpi, rideIndex, trackType, trackDirection, liftHillAndInvertedState, width, height); diff --git a/src/openrct2-ui/windows/Scenery.cpp b/src/openrct2-ui/windows/Scenery.cpp index 153c46d5da..b4680c40ba 100644 --- a/src/openrct2-ui/windows/Scenery.cpp +++ b/src/openrct2-ui/windows/Scenery.cpp @@ -1239,7 +1239,7 @@ void window_scenery_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32_t s rct_scenery_entry* sceneryEntry; rct_drawpixelinfo clipdpi; - if (clip_drawpixelinfo(&clipdpi, dpi, left + 1, top + 1, SCENERY_BUTTON_WIDTH - 2, SCENERY_BUTTON_HEIGHT - 2)) + if (clip_drawpixelinfo(&clipdpi, dpi, { left + 1, top + 1 }, SCENERY_BUTTON_WIDTH - 2, SCENERY_BUTTON_HEIGHT - 2)) { if (currentSceneryGlobal.SceneryType == SCENERY_TYPE_BANNER) { diff --git a/src/openrct2-ui/windows/Staff.cpp b/src/openrct2-ui/windows/Staff.cpp index afad33c813..a6b8019a60 100644 --- a/src/openrct2-ui/windows/Staff.cpp +++ b/src/openrct2-ui/windows/Staff.cpp @@ -1017,7 +1017,7 @@ void window_staff_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) height++; rct_drawpixelinfo clip_dpi; - if (!clip_drawpixelinfo(&clip_dpi, dpi, screenCoords.x, screenCoords.y, width, height)) + if (!clip_drawpixelinfo(&clip_dpi, dpi, screenCoords, width, height)) { return; } diff --git a/src/openrct2-ui/windows/StaffList.cpp b/src/openrct2-ui/windows/StaffList.cpp index 56b8925b3a..fd3c3961b7 100644 --- a/src/openrct2-ui/windows/StaffList.cpp +++ b/src/openrct2-ui/windows/StaffList.cpp @@ -609,8 +609,10 @@ void window_staff_list_paint(rct_window* w, rct_drawpixelinfo* dpi) rct_drawpixelinfo sprite_dpi; if (clip_drawpixelinfo( - &sprite_dpi, dpi, window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].left + w->windowPos.x + 1, - window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].top + w->windowPos.y + 1, + &sprite_dpi, dpi, + w->windowPos + + ScreenCoordsXY{ window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].left + 1, + window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].top + 1 }, window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].right - window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].left - 1, window_staff_list_widgets[WIDX_STAFF_LIST_ENTERTAINERS_TAB].bottom diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index bc3362fa28..2c5e5eab49 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -515,7 +515,7 @@ static void window_track_place_paint(rct_window* w, rct_drawpixelinfo* dpi) // Draw mini tile preview rct_drawpixelinfo clippedDpi; - if (clip_drawpixelinfo(&clippedDpi, dpi, w->windowPos.x + 4, w->windowPos.y + 18, 168, 78)) + if (clip_drawpixelinfo(&clippedDpi, dpi, w->windowPos + ScreenCoordsXY{ 4, 18 }, 168, 78)) { rct_g1_element g1temp = {}; g1temp.offset = _window_track_place_mini_preview.data(); diff --git a/src/openrct2/drawing/Drawing.cpp b/src/openrct2/drawing/Drawing.cpp index c4b0cee66e..2eeae26676 100644 --- a/src/openrct2/drawing/Drawing.cpp +++ b/src/openrct2/drawing/Drawing.cpp @@ -675,19 +675,20 @@ void gfx_invalidate_screen() * height (dx) * drawpixelinfo (edi) */ -bool clip_drawpixelinfo(rct_drawpixelinfo* dst, rct_drawpixelinfo* src, int32_t x, int32_t y, int32_t width, int32_t height) +bool clip_drawpixelinfo( + rct_drawpixelinfo* dst, rct_drawpixelinfo* src, const ScreenCoordsXY& coords, int32_t width, int32_t height) { - int32_t right = x + width; - int32_t bottom = y + height; + int32_t right = coords.x + width; + int32_t bottom = coords.y + height; *dst = *src; dst->zoom_level = 0; - if (x > dst->x) + if (coords.x > dst->x) { - uint16_t clippedFromLeft = x - dst->x; + uint16_t clippedFromLeft = coords.x - dst->x; dst->width -= clippedFromLeft; - dst->x = x; + dst->x = coords.x; dst->pitch += clippedFromLeft; dst->bits += clippedFromLeft; } @@ -699,11 +700,11 @@ bool clip_drawpixelinfo(rct_drawpixelinfo* dst, rct_drawpixelinfo* src, int32_t dst->pitch += stickOutWidth; } - if (y > dst->y) + if (coords.y > dst->y) { - uint16_t clippedFromTop = y - dst->y; + uint16_t clippedFromTop = coords.y - dst->y; dst->height -= clippedFromTop; - dst->y = y; + dst->y = coords.y; uint32_t bitsPlus = (dst->pitch + dst->width) * clippedFromTop; dst->bits += bitsPlus; } @@ -716,8 +717,8 @@ bool clip_drawpixelinfo(rct_drawpixelinfo* dst, rct_drawpixelinfo* src, int32_t if (dst->width > 0 && dst->height > 0) { - dst->x -= x; - dst->y -= y; + dst->x -= coords.x; + dst->y -= coords.y; return true; } diff --git a/src/openrct2/drawing/Drawing.h b/src/openrct2/drawing/Drawing.h index e34eebc448..7ec08cf062 100644 --- a/src/openrct2/drawing/Drawing.h +++ b/src/openrct2/drawing/Drawing.h @@ -580,8 +580,8 @@ extern bool gTinyFontAntiAliased; extern rct_drawpixelinfo gScreenDPI; extern rct_drawpixelinfo gWindowDPI; -// -bool clip_drawpixelinfo(rct_drawpixelinfo* dst, rct_drawpixelinfo* src, int32_t x, int32_t y, int32_t width, int32_t height); +bool clip_drawpixelinfo( + rct_drawpixelinfo* dst, rct_drawpixelinfo* src, const ScreenCoordsXY& coords, int32_t width, int32_t height); void gfx_set_dirty_blocks(int16_t left, int16_t top, int16_t right, int16_t bottom); void gfx_draw_all_dirty_blocks(); void gfx_invalidate_screen();