1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-24 00:03:11 +01:00

fix viewport bug

This commit is contained in:
IntelOrca
2014-04-18 00:07:06 +01:00
parent b366594a9c
commit d5da8c41c0
4 changed files with 121 additions and 27 deletions

View File

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

View File

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

View File

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

View File

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