mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-24 07:14:31 +01:00
remove gScreenDPI
This commit is contained in:
@@ -224,58 +224,7 @@ void sub_683326(int left, int top, int right, int bottom)
|
||||
RCT2_CALLPROC_X(0x00683359, left, top, right, bottom, 0, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* shifts pixels from the region in a direction. Used when a viewport moves;
|
||||
* consider putting in src/drawing/drawing.c or src/drawing/rect.c
|
||||
*
|
||||
* rct2: 0x00683359
|
||||
* ax = x
|
||||
* bx = y;
|
||||
* cx = width;
|
||||
* dx = height;
|
||||
* di = dx;
|
||||
* si = dy;
|
||||
*/
|
||||
void gfx_move_screen_rect(int x, int y, int width, int height, int dx, int dy)
|
||||
{
|
||||
// nothing to do
|
||||
if (dx == 0 && dy == 0)
|
||||
return;
|
||||
|
||||
// get screen info
|
||||
rct_drawpixelinfo *screenDPI = &gScreenDPI;
|
||||
|
||||
// adjust for move off screen
|
||||
// NOTE: when zooming, there can be x, y, dx, dy combinations that go off the
|
||||
// screen; hence the checks. This code should ultimately not be called when
|
||||
// zooming because this function is specific to updating the screen on move
|
||||
int lmargin = min(x - dx, 0);
|
||||
int rmargin = min(gScreenWidth - (x - dx + width), 0);
|
||||
int tmargin = min(y - dy, 0);
|
||||
int bmargin = min(gScreenHeight - (y - dy + height), 0);
|
||||
x -= lmargin;
|
||||
y -= tmargin;
|
||||
width += lmargin + rmargin;
|
||||
height += tmargin + bmargin;
|
||||
|
||||
sint32 stride = screenDPI->width + screenDPI->pitch;
|
||||
uint8* to = screenDPI->bits + y * stride + x;
|
||||
uint8* from = screenDPI->bits + (y - dy) * stride + x - dx;
|
||||
|
||||
if (dy > 0)
|
||||
{
|
||||
// if positive dy, reverse directions
|
||||
to += (height - 1) * stride;
|
||||
from += (height - 1) * stride;
|
||||
stride = -stride;
|
||||
}
|
||||
|
||||
// move bits
|
||||
for (int i = 0; i < height; i++, to += stride, from += stride)
|
||||
memmove(to, from, width);
|
||||
}
|
||||
|
||||
void sub_6E7FF3(rct_window *window, rct_viewport *viewport, int x, int y)
|
||||
void sub_6E7FF3(rct_drawpixelinfo *dpi, rct_window *window, rct_viewport *viewport, int x, int y)
|
||||
{
|
||||
// sub-divide by intersecting windows
|
||||
if (window < gWindowNextSlot)
|
||||
@@ -286,7 +235,7 @@ void sub_6E7FF3(rct_window *window, rct_viewport *viewport, int x, int y)
|
||||
viewport->x >= window->x + window->width ||
|
||||
viewport->y + viewport->height <= window->y ||
|
||||
viewport->y >= window->y + window->height){
|
||||
sub_6E7FF3(window + 1, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window + 1, viewport, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -298,49 +247,49 @@ void sub_6E7FF3(rct_window *window, rct_viewport *viewport, int x, int y)
|
||||
{
|
||||
viewport->width = window->x - viewport->x;
|
||||
viewport->view_width = viewport->width << viewport->zoom;
|
||||
sub_6E7FF3(window, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window, viewport, x, y);
|
||||
|
||||
viewport->x += viewport->width;
|
||||
viewport->view_x += viewport->width << viewport->zoom;
|
||||
viewport->width = view_copy.width - viewport->width;
|
||||
viewport->view_width = viewport->width << viewport->zoom;
|
||||
sub_6E7FF3(window, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window, viewport, x, y);
|
||||
}
|
||||
else if (viewport->x + viewport->width > window->x + window->width)
|
||||
{
|
||||
viewport->width = window->x + window->width - viewport->x;
|
||||
viewport->view_width = viewport->width << viewport->zoom;
|
||||
sub_6E7FF3(window, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window, viewport, x, y);
|
||||
|
||||
viewport->x += viewport->width;
|
||||
viewport->view_x += viewport->width << viewport->zoom;
|
||||
viewport->width = view_copy.width - viewport->width;
|
||||
viewport->view_width = viewport->width << viewport->zoom;
|
||||
sub_6E7FF3(window, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window, viewport, x, y);
|
||||
}
|
||||
else if (viewport->y < window->y)
|
||||
{
|
||||
viewport->height = window->y - viewport->y;
|
||||
viewport->view_width = viewport->width << viewport->zoom;
|
||||
sub_6E7FF3(window, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window, viewport, x, y);
|
||||
|
||||
viewport->y += viewport->height;
|
||||
viewport->view_y += viewport->height << viewport->zoom;
|
||||
viewport->height = view_copy.height - viewport->height;
|
||||
viewport->view_width = viewport->width << viewport->zoom;
|
||||
sub_6E7FF3(window, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window, viewport, x, y);
|
||||
}
|
||||
else if (viewport->y + viewport->height > window->y + window->height)
|
||||
{
|
||||
viewport->height = window->y + window->height - viewport->y;
|
||||
viewport->view_width = viewport->width << viewport->zoom;
|
||||
sub_6E7FF3(window, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window, viewport, x, y);
|
||||
|
||||
viewport->y += viewport->height;
|
||||
viewport->view_y += viewport->height << viewport->zoom;
|
||||
viewport->height = view_copy.height - viewport->height;
|
||||
viewport->view_width = viewport->width << viewport->zoom;
|
||||
sub_6E7FF3(window, viewport, x, y);
|
||||
sub_6E7FF3(dpi, window, viewport, x, y);
|
||||
}
|
||||
|
||||
// restore viewport
|
||||
@@ -357,20 +306,20 @@ void sub_6E7FF3(rct_window *window, rct_viewport *viewport, int x, int y)
|
||||
if (abs(x) < viewport->width && abs(y) < viewport->height)
|
||||
{
|
||||
// update whole block ?
|
||||
gfx_move_screen_rect(viewport->x, viewport->y, viewport->width, viewport->height, x, y);
|
||||
drawing_engine_copy_rect(viewport->x, viewport->y, viewport->width, viewport->height, x, y);
|
||||
|
||||
if (x > 0)
|
||||
{
|
||||
// draw left
|
||||
sint16 _right = viewport->x + x;
|
||||
gfx_redraw_screen_rect(left, top, _right, bottom);
|
||||
window_draw_all(dpi, left, top, _right, bottom);
|
||||
left += x;
|
||||
}
|
||||
else if (x < 0)
|
||||
{
|
||||
// draw right
|
||||
sint16 _left = viewport->x + viewport->width + x;
|
||||
gfx_redraw_screen_rect(_left, top, right, bottom);
|
||||
window_draw_all(dpi, _left, top, right, bottom);
|
||||
right += x;
|
||||
}
|
||||
|
||||
@@ -378,24 +327,24 @@ void sub_6E7FF3(rct_window *window, rct_viewport *viewport, int x, int y)
|
||||
{
|
||||
// draw top
|
||||
bottom = viewport->y + y;
|
||||
gfx_redraw_screen_rect(left, top, right, bottom);
|
||||
window_draw_all(dpi, left, top, right, bottom);
|
||||
}
|
||||
else if (y < 0)
|
||||
{
|
||||
// draw bottom
|
||||
top = viewport->y + viewport->height + y;
|
||||
gfx_redraw_screen_rect(left, top, right, bottom);
|
||||
window_draw_all(dpi, left, top, right, bottom);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// redraw whole viewport
|
||||
gfx_redraw_screen_rect(left, top, right, bottom);
|
||||
window_draw_all(dpi, left, top, right, bottom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void viewport_shift_pixels(rct_window* w, rct_viewport* viewport, sint16 x_diff, sint16 y_diff)
|
||||
void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* w, rct_viewport* viewport, sint16 x_diff, sint16 y_diff)
|
||||
{
|
||||
rct_window* orignal_w = w;
|
||||
int left = 0, right = 0, top = 0, bottom = 0;
|
||||
@@ -424,11 +373,11 @@ void viewport_shift_pixels(rct_window* w, rct_viewport* viewport, sint16 x_diff,
|
||||
if (left >= right) continue;
|
||||
if (top >= bottom) continue;
|
||||
|
||||
gfx_redraw_screen_rect(left, top, right, bottom);
|
||||
window_draw_all(dpi, left, top, right, bottom);
|
||||
}
|
||||
|
||||
w = orignal_w;
|
||||
sub_6E7FF3(w, viewport, x_diff, y_diff);
|
||||
sub_6E7FF3(dpi, w, viewport, x_diff, y_diff);
|
||||
}
|
||||
|
||||
void viewport_move(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport)
|
||||
@@ -456,8 +405,11 @@ void viewport_move(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport)
|
||||
if (left >= right) return;
|
||||
if (top >= bottom) return;
|
||||
|
||||
gfx_redraw_screen_rect(left, top, right, bottom);
|
||||
return;
|
||||
if (drawing_engine_has_dirty_optimisations()) {
|
||||
rct_drawpixelinfo *dpi = drawing_engine_get_dpi();
|
||||
window_draw_all(dpi, left, top, right, bottom);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
rct_viewport view_copy;
|
||||
@@ -500,7 +452,8 @@ void viewport_move(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport)
|
||||
}
|
||||
|
||||
if (drawing_engine_has_dirty_optimisations()) {
|
||||
viewport_shift_pixels(w, viewport, x_diff, y_diff);
|
||||
rct_drawpixelinfo *dpi = drawing_engine_get_dpi();
|
||||
viewport_shift_pixels(dpi, w, viewport, x_diff, y_diff);
|
||||
}
|
||||
|
||||
memcpy(viewport, &view_copy, sizeof(rct_viewport));
|
||||
|
||||
@@ -560,6 +560,7 @@ void window_zoom_out(rct_window *w);
|
||||
void window_show_textinput(rct_window *w, int widgetIndex, uint16 title, uint16 text, int value);
|
||||
void window_text_input_key(rct_window* w, int key);
|
||||
|
||||
void window_draw_all(rct_drawpixelinfo *dpi, short left, short top, short right, short bottom);
|
||||
void window_draw(rct_drawpixelinfo *dpi, rct_window *w, int left, int top, int right, int bottom);
|
||||
void window_draw_widgets(rct_window *w, rct_drawpixelinfo *dpi);
|
||||
void window_draw_viewport(rct_drawpixelinfo *dpi, rct_window *w);
|
||||
|
||||
Reference in New Issue
Block a user