From 5f03047c400d97428a89a2450d7a07af450336d2 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Sat, 31 Dec 2016 11:47:12 +0100 Subject: [PATCH] View clipping window fixes. Cleaned up widget positions - looks like a proper interface now. Remaining Issues: - Window only displays correctly every second time it is opened; - Clip height in Units (ft/m) is displayed without the decimal point; - Scroll bar is not working; - Decide how the View menu entry should work. --- src/openrct2/paint/paint.c | 2 +- src/windows/view_clipping.c | 60 ++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/openrct2/paint/paint.c b/src/openrct2/paint/paint.c index f61e4565e4..efee14c7d6 100644 --- a/src/openrct2/paint/paint.c +++ b/src/openrct2/paint/paint.c @@ -24,7 +24,7 @@ #include "supports.h" // zax: globals for paint clipping height -uint8 gClipHeight = 255; +uint8 gClipHeight = 128; // Default to middle value bool gClipHeightEnable = false; const uint32 construction_markers[] = { diff --git a/src/windows/view_clipping.c b/src/windows/view_clipping.c index 9ddba97988..48e9449508 100644 --- a/src/windows/view_clipping.c +++ b/src/windows/view_clipping.c @@ -21,25 +21,26 @@ #include "../interface/viewport.h" #include "../localisation/localisation.h" #include "../paint/paint.h" +#include "../rct2.h" enum WINDOW_VIEW_CLIPPING_WIDGET_IDX { WIDX_BACKGROUND, WIDX_TITLE, WIDX_CLOSE, WIDX_CLIP_HEIGHT_CHECKBOX, - WIDX_CLIP_HEIGHT_SLIDER, - WIDX_CLIP_HEIGHT_VALUE + WIDX_CLIP_HEIGHT_VALUE, + WIDX_CLIP_HEIGHT_SLIDER }; #pragma region Widgets rct_widget window_view_clipping_widgets[] = { - { WWT_FRAME, 0, 0, 99, 0, 49, 0xFFFFFFFF, STR_NONE }, // panel / background - { WWT_CAPTION, 0, 1, 98, 1, 14, STR_VIEW_CLIPPING, STR_WINDOW_TITLE_TIP }, // title bar - { WWT_CLOSEBOX, 0, 87, 97, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button + { WWT_FRAME, 0, 0, 159, 0, 64, 0xFFFFFFFF, STR_NONE }, // panel / background + { WWT_CAPTION, 0, 1, 158, 1, 14, STR_VIEW_CLIPPING, STR_WINDOW_TITLE_TIP }, // title bar + { WWT_CLOSEBOX, 0, 147, 157, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button { WWT_CHECKBOX, 1, 11, 89, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box - { WWT_SPINNER, 1, 11, 89, 34, 44, STR_VIEW_CLIPPING_HEIGHT_VALUE, STR_VIEW_CLIPPING_HEIGHT_SPINNER_TIP }, // clip height value spinner - { WWT_SCROLL, 1, 11, 89, 49, 59, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar + { WWT_SPINNER, 1, 81, 139, 34, 44, STR_NONE, STR_NONE }, // clip height value spinner + { WWT_SCROLL, 1, 11, 149, 49, 59, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar // Future: add checkbox(es) to only clip height in front of the cursor position; behind the cursor position is rendered normally. { WIDGETS_END } @@ -96,15 +97,17 @@ void window_view_clipping_open() { rct_window* window; - fprintf(stderr, "Open start\n"); // Check if window is already open if (window_find_by_class(WC_VIEW_CLIPPING) != NULL) return; - window = window_create(gScreenWidth - 98, 29, 98, 94, &window_view_clipping_events, WC_VIEW_CLIPPING, 0); + window = window_create(32, 32, 160, 65, &window_view_clipping_events, WC_VIEW_CLIPPING, 0); window->widgets = window_view_clipping_widgets; window->enabled_widgets = (1 << WIDX_CLOSE) | - (1 << WIDX_CLIP_HEIGHT_CHECKBOX); //| (1 << WIDX_CLIP_HEIGHT_SLIDER); + (1 << WIDX_CLIP_HEIGHT_CHECKBOX) | + (1 << WIDX_CLIP_HEIGHT_VALUE) | + (1 << WIDX_CLIP_HEIGHT_SLIDER); + window->frame_no = 0; // Needed for scroll widgets to function? window_init_scroll_widgets(window); window_push_others_below(window); @@ -132,7 +135,6 @@ void window_view_clipping_open() mainWindow->viewport->flags |= VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; window_invalidate(mainWindow); } - fprintf(stderr, "Open end\n"); } void window_view_clipping_close() @@ -200,6 +202,7 @@ static void window_view_clipping_update(rct_window *w) } } widget_invalidate(w, WIDX_CLIP_HEIGHT_SLIDER); + fprintf(stderr, "Update end\n"); } static void window_view_clipping_invalidate(rct_window *w) @@ -212,15 +215,15 @@ static void window_view_clipping_invalidate(rct_window *w) w->disabled_widgets = 0; // Disable the height slider and height value according to the height checkbox. rct_window *mainWindow = window_get_main(); - if (mainWindow != NULL) { - if ((mainWindow->viewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) == 0) { - w->disabled_widgets |= (1 << WIDX_CLIP_HEIGHT_SLIDER); - w->disabled_widgets |= (1 << WIDX_CLIP_HEIGHT_VALUE); - } - } + //if (mainWindow != NULL) { + // if ((mainWindow->viewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) == 0) { + // w->disabled_widgets |= (1 << WIDX_CLIP_HEIGHT_SLIDER); + // w->disabled_widgets |= (1 << WIDX_CLIP_HEIGHT_VALUE); + // } + //} // Set the clip height slider value. - if (w->frame_no == 0) { + if (w->frame_no == 0) { // No animation in this windows so should not be needed? widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; w->scrolls[0].h_left = (sint16)ceil((gClipHeight / 255.0f) * (w->scrolls[0].h_right - ((widget->right - widget->left) - 1))); } @@ -242,11 +245,7 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) { window_draw_widgets(w, dpi); - // Clip height checkbox text - // TODO: Adjust string position - gfx_draw_string_left(dpi, STR_VIEW_CLIPPING_HEIGHT_ENABLE, w, w->colours[1], w->x + 10, w->y + window_view_clipping_widgets[WIDX_CLIP_HEIGHT_CHECKBOX].top + 1); - - // TODO: Clip height value + // Clip height value // Currently as a spinner. // Alternately could try putting the value on the scrollbar. int x; @@ -254,24 +253,25 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) if (w->widgets[WIDX_CLIP_HEIGHT_VALUE].type != WWT_EMPTY) { x = w->x + 8; y = w->y + w->widgets[WIDX_CLIP_HEIGHT_VALUE].top; - gfx_draw_string_left(dpi, STR_VIEW_CLIPPING_HEIGHT_VALUE, NULL, 0, x, y); + gfx_draw_string_left(dpi, STR_VIEW_CLIPPING_HEIGHT_VALUE, NULL, w->colours[1], x, y); x = w->x + w->widgets[WIDX_CLIP_HEIGHT_VALUE].left + 1; y = w->y + w->widgets[WIDX_CLIP_HEIGHT_VALUE].top; - gfx_draw_string_left(dpi, STR_CURRENCY_FORMAT_LABEL, &gClipHeight, 0, x, y); + gfx_draw_string_left(dpi, STR_FORMAT_INTEGER, &gClipHeight, w->colours[1], x, y); //Printing the raw value. - fixed8_1dp clipHeightValueInUnits; // The clip height in the unit type - feet or meters. TODO: value in meters needs to be a fixed point number w/ 1DP! + fixed16_1dp clipHeightValueInUnits; // The clip height in the unit type - feet or meters. For value in meters a fixed point number is needed. switch (clipHeight_Units_StringId) { case STR_UNIT_SUFFIX_FEET: - clipHeightValueInUnits = gClipHeight * 10 / 2 * 5 - 35 * 10; // The "* 10" shifts the decimal as appropriate for fixed8_1dp. + clipHeightValueInUnits = FIXED_1DP(gClipHeight, 0) / 2 * 5 - FIXED_1DP(35,0); break; case STR_UNIT_SUFFIX_METRES: default: - clipHeightValueInUnits = gClipHeight * 10 / 2 * 1.5 - 10.5; // The "* 10" shifts the decimal as appropriate for fixed8_1dp. + clipHeightValueInUnits = FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10,5); + fprintf(stderr, "Meters: %d\n", clipHeightValueInUnits); break; } - // TODO: Adjust string position - gfx_draw_string_left(dpi, clipHeight_Units_StringId, &clipHeightValueInUnits, w->colours[1], w->x + 10, w->y + window_view_clipping_widgets[WIDX_CLIP_HEIGHT_VALUE].top + 1); + // TODO: Display fixed point value correctly. + gfx_draw_string_left(dpi, clipHeight_Units_StringId, &clipHeightValueInUnits, w->colours[1], x + 30, y); } }