mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-24 00:03:11 +01:00
fix viewport bug
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
26
src/window.c
26
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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user