Fix #12085: Use ScreenCoordsXY on clip_drawpixelinfo (#12105)

This commit is contained in:
frutiemax 2020-07-02 13:06:28 -04:00 committed by GitHub
parent 67a8d833ea
commit 4661262572
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 33 additions and 30 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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

View File

@ -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();

View File

@ -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;
}

View File

@ -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();