diff --git a/src/viewport.c b/src/viewport.c index 6369ebb507..446c9d927e 100644 --- a/src/viewport.c +++ b/src/viewport.c @@ -76,6 +76,8 @@ void viewport_init_all() */ void viewport_create(rct_window *w, int x, int y, int width, int height, int ecx, int edx) { + x &= 0xFFFF; + y &= 0xFFFF; RCT2_CALLPROC_X(0x006EB009, (y << 16) | x, (height << 16) | width, ecx, edx, w, 0, 0); } diff --git a/src/window.c b/src/window.c index b1addd9dd0..b85a972f9c 100644 --- a/src/window.c +++ b/src/window.c @@ -770,4 +770,30 @@ void window_draw_widgets(rct_window *w, rct_drawpixelinfo *dpi) void window_draw_viewport(rct_drawpixelinfo *dpi, rct_window *w) { viewport_render(dpi, w->viewport, dpi->x, dpi->y, dpi->x + dpi->width, dpi->y + dpi->height); +} + +void window_resize(rct_window *w, int minWidth, int minHeight, int maxWidth, int maxHeight) +{ + w->min_width = minWidth; + w->min_height = minHeight; + w->max_width = maxWidth; + w->max_height = maxHeight; + + // Clamp width and height to minimum and maximum + if (w->width < minWidth) { + w->width = minWidth; + window_invalidate(w); + } + if (w->height < minHeight) { + w->height = minHeight; + window_invalidate(w); + } + if (w->width > maxWidth) { + w->width = maxWidth; + window_invalidate(w); + } + if (w->height > maxHeight) { + w->height = maxHeight; + window_invalidate(w); + } } \ No newline at end of file diff --git a/src/window.h b/src/window.h index 67fdccd2d2..9aa08e6413 100644 --- a/src/window.h +++ b/src/window.h @@ -294,6 +294,8 @@ void window_draw(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); +void window_resize(rct_window *w, int minWidth, int minHeight, int maxWidth, int maxHeight); + // Open window functions void window_main_open(); void window_game_top_toolbar_open(); diff --git a/src/window_park.c b/src/window_park.c index 6e7ab72428..d4a87d0f31 100644 --- a/src/window_park.c +++ b/src/window_park.c @@ -227,32 +227,38 @@ static void window_park_entrance_invalidate(); static void window_park_entrance_paint(); static void window_park_rating_mouseup(); +static void window_park_rating_resize(); static void window_park_rating_update(); static void window_park_rating_invalidate(); static void window_park_rating_paint(); static void window_park_guests_mouseup(); +static void window_park_guests_resize(); static void window_park_guests_update(); static void window_park_guests_invalidate(); static void window_park_guests_paint(); static void window_park_price_mouseup(); +static void window_park_price_resize(); static void window_park_price_mousedown(); static void window_park_price_update(); static void window_park_price_invalidate(); static void window_park_price_paint(); static void window_park_stats_mouseup(); +static void window_park_stats_resize(); static void window_park_stats_update(); static void window_park_stats_invalidate(); static void window_park_stats_paint(); static void window_park_objective_mouseup(); +static void window_park_objective_resize(); static void window_park_objective_update(); static void window_park_objective_invalidate(); static void window_park_objective_paint(); static void window_park_awards_mouseup(); +static void window_park_awards_resize(); static void window_park_awards_update(); static void window_park_awards_invalidate(); static void window_park_awards_paint(); @@ -291,7 +297,7 @@ static uint32 window_park_entrance_events[] = { static uint32 window_park_rating_events[] = { window_park_emptysub, window_park_rating_mouseup, - window_park_emptysub, + window_park_rating_resize, window_park_emptysub, window_park_emptysub, window_park_emptysub, @@ -322,7 +328,7 @@ static uint32 window_park_rating_events[] = { static uint32 window_park_guests_events[] = { window_park_emptysub, window_park_guests_mouseup, - window_park_emptysub, + window_park_guests_resize, window_park_emptysub, window_park_emptysub, window_park_emptysub, @@ -353,7 +359,7 @@ static uint32 window_park_guests_events[] = { static uint32 window_park_price_events[] = { window_park_emptysub, window_park_price_mouseup, - window_park_emptysub, + window_park_price_resize, window_park_price_mousedown, window_park_emptysub, window_park_emptysub, @@ -384,7 +390,7 @@ static uint32 window_park_price_events[] = { static uint32 window_park_stats_events[] = { window_park_emptysub, window_park_stats_mouseup, - window_park_emptysub, + window_park_stats_resize, window_park_emptysub, window_park_emptysub, window_park_emptysub, @@ -415,7 +421,7 @@ static uint32 window_park_stats_events[] = { static uint32 window_park_objective_events[] = { window_park_emptysub, window_park_objective_mouseup, - window_park_emptysub, + window_park_objective_resize, window_park_emptysub, window_park_emptysub, window_park_emptysub, @@ -446,7 +452,7 @@ static uint32 window_park_objective_events[] = { static uint32 window_park_awards_events[] = { window_park_emptysub, window_park_awards_mouseup, - window_park_emptysub, + window_park_awards_resize, window_park_emptysub, window_park_emptysub, window_park_emptysub, @@ -698,27 +704,7 @@ static void window_park_entrance_resize() __asm mov w, esi w->flags |= WF_RESIZABLE; - w->min_width = 230; - w->max_width = 230 * 2; - w->min_height = 174 + 9; - w->max_height = 174 * 2; - if (w->width < w->min_width) { - w->width = w->min_width; - window_invalidate(w); - } - if (w->height < w->min_height) { - w->height = w->min_height; - window_invalidate(w); - } - if (w->width > w->max_width) { - w->width = w->max_width; - window_invalidate(w); - } - if (w->height > w->max_height) { - w->height = w->max_height; - window_invalidate(w); - } - + window_resize(w, 230, 174 + 9, 230 * 3, (274 + 9) * 3); window_park_init_viewport(w); } @@ -1118,6 +1104,19 @@ static void window_park_rating_mouseup() window_park_set_page(w, widgetIndex - WIDX_TAB_1); } +/** + * + * rct2: 0x00668A36 + */ +static void window_park_rating_resize() +{ + rct_window *w; + + __asm mov w, esi + + window_resize(w, 230, 182, 230, 182); +} + /** * * rct2: 0x00668A21 @@ -1197,6 +1196,19 @@ static void window_park_guests_mouseup() window_park_set_page(w, widgetIndex - WIDX_TAB_1); } +/** + * + * rct2: 0x00668E33 + */ +static void window_park_guests_resize() +{ + rct_window *w; + + __asm mov w, esi + + window_resize(w, 230, 182, 230, 182); +} + /** * * rct2: 0x00668E06 @@ -1277,6 +1289,19 @@ static void window_park_price_mouseup() window_park_set_page(w, widgetIndex - WIDX_TAB_1); } +/** + * + * rct2: 0x0066908C + */ +static void window_park_price_resize() +{ + rct_window *w; + + __asm mov w, esi + + window_resize(w, 230, 124, 230, 124); +} + /** * * rct2: 0x0066902C @@ -1414,6 +1439,19 @@ static void window_park_stats_mouseup() window_park_set_page(w, widgetIndex - WIDX_TAB_1); } +/** + * + * rct2: 0x00669338 + */ +static void window_park_stats_resize() +{ + rct_window *w; + + __asm mov w, esi + + window_resize(w, 230, 109, 230, 109); +} + /** * * rct2: 0x006692A8 @@ -1587,6 +1625,19 @@ static void window_park_objective_mouseup() } } +/** + * + * rct2: 0x00669681 + */ +static void window_park_objective_resize() +{ + rct_window *w; + + __asm mov w, esi + + window_resize(w, 230, 224, 230, 224); +} + /** * * rct2: 0x0066966C @@ -1699,6 +1750,19 @@ static void window_park_awards_mouseup() window_park_set_page(w, widgetIndex - WIDX_TAB_1); } +/** + * + * rct2: 0x00669882 + */ +static void window_park_awards_resize() +{ + rct_window *w; + + __asm mov w, esi + + window_resize(w, 230, 182, 230, 182); +} + /** * * rct2: 0x0066986D