From 1e5b83c631ba3705238417f291d2b2e2f763b96d Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 21 Oct 2016 09:46:59 +0200 Subject: [PATCH 01/30] Initial prototype of paint clipping. Paint clipping is a possible future feature to assist players building in cluttered areas of a park by controlling which map elements and sprites are rendered, providing a clearer view for construction, inspection, etc. Only clip height is supported in this prototype. Map elements are clipped according to the map element base height (meaning *all* scenery on that map element is currently clipped with it). Sprites are clipped according to their z value being within the "sprite volume" of any non-clipped map element (which means below clip height + 2). Control is only provided through the console in this prototype - use the command: set paint_clip_height _value_ To turn clipping off use the command: set paint_clip_height 255 Clip heights are limited to multiples of two to coincide with the native heights of map elements. Command "get paint_clip_height" prints the clip height as a raw value as well as the equivalent height in ft and m as used when displaying heights in-game. At this time only painting of the main viewport is affected. There is no change to any input control handling. --- src/openrct2/interface/viewport.c | 2 +- src/openrct2/interface/viewport.h | 3 ++- src/openrct2/paint/map_element/map_element.c | 13 +++++++++++++ src/openrct2/paint/paint.c | 5 ++++- src/openrct2/paint/paint.h | 3 +++ src/openrct2/paint/sprite/sprite.c | 6 ++++++ 6 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/openrct2/interface/viewport.c b/src/openrct2/interface/viewport.c index 60cd632756..5f5e226709 100644 --- a/src/openrct2/interface/viewport.c +++ b/src/openrct2/interface/viewport.c @@ -730,7 +730,7 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags) { gCurrentViewportFlags = viewFlags; - if (viewFlags & (VIEWPORT_FLAG_HIDE_VERTICAL | VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_UNDERGROUND_INSIDE)) { + if (viewFlags & (VIEWPORT_FLAG_HIDE_VERTICAL | VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_UNDERGROUND_INSIDE | VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT)) { uint8 colour = 10; if (viewFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES) { colour = 0; diff --git a/src/openrct2/interface/viewport.h b/src/openrct2/interface/viewport.h index a4dd45702f..0ddbd55640 100644 --- a/src/openrct2/interface/viewport.h +++ b/src/openrct2/interface/viewport.h @@ -39,7 +39,8 @@ enum { VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 13), VIEWPORT_FLAG_INVISIBLE_SPRITES = (1 << 14), VIEWPORT_FLAG_15 = (1 << 15), - VIEWPORT_FLAG_SEETHROUGH_PATHS = (1 << 16) + VIEWPORT_FLAG_SEETHROUGH_PATHS = (1 << 16), + VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT = (1 << 17) // zax }; enum { diff --git a/src/openrct2/paint/map_element/map_element.c b/src/openrct2/paint/map_element/map_element.c index 4c8d0b4685..30505e9662 100644 --- a/src/openrct2/paint/map_element/map_element.c +++ b/src/openrct2/paint/map_element/map_element.c @@ -167,6 +167,13 @@ static void sub_68B3FB(sint32 x, sint32 y) rct_map_element* map_element = map_get_first_element_at(x >> 5, y >> 5); uint8 rotation = get_current_rotation(); + /* Check if the first (lowest) map_element is below the clip + * height. */ + if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (map_element->base_height > gClipHeight)) { + blank_tiles_paint(x, y); + return; + } + sint32 dx = 0; switch (rotation) { case 0: @@ -240,6 +247,9 @@ static void sub_68B3FB(sint32 x, sint32 y) gUnk9DE56C = y; gDidPassSurface = false; do { + // Only paint map_elements below the clip height. + if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (map_element->base_height > gClipHeight)) break; + sint32 direction = (map_element->type + rotation) & MAP_ELEMENT_DIRECTION_MASK; sint32 height = map_element->base_height * 8; @@ -309,6 +319,9 @@ static void sub_68B3FB(sint32 x, sint32 y) imageColourFlats = 0b111011 << 19 | 0x40000000; } + // Only draw supports above the clipping height. + if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (segmentHeight > gClipHeight)) continue; + sint32 xOffset = sy * 10; sint32 yOffset = -22 + sx * 10; paint_struct * ps = sub_98197C(5504 | imageColourFlats, xOffset, yOffset, 10, 10, 1, segmentHeight, xOffset + 1, yOffset + 16, segmentHeight, get_current_rotation()); diff --git a/src/openrct2/paint/paint.c b/src/openrct2/paint/paint.c index b058051cdd..b92ea5d8b6 100644 --- a/src/openrct2/paint/paint.c +++ b/src/openrct2/paint/paint.c @@ -23,6 +23,9 @@ #include "sprite/sprite.h" #include "supports.h" +// zax: globals for paint clipping height +uint8 gClipHeight = 255; + const uint32 construction_markers[] = { COLOUR_DARK_GREEN << 19 | COLOUR_GREY << 24 | IMAGE_TYPE_REMAP, // White PALETTE_DARKEN_2 << 19 | IMAGE_TYPE_TRANSPARENT, // Translucent @@ -199,6 +202,7 @@ static paint_struct * sub_9819_c(uint32 image_id, rct_xyz16 offset, rct_xyz16 bo ps->map_x = gPaintMapPosition.x; ps->map_y = gPaintMapPosition.y; ps->mapElement = g_currently_drawn_item; + return ps; } @@ -366,7 +370,6 @@ paint_struct * sub_98197C( sint16 bound_box_offset_x, sint16 bound_box_offset_y, sint16 bound_box_offset_z, uint32 rotation ) { - g_ps_F1AD28 = 0; g_aps_F1AD2C = NULL; diff --git a/src/openrct2/paint/paint.h b/src/openrct2/paint/paint.h index 0ff5d71246..2ac5ee1308 100644 --- a/src/openrct2/paint/paint.h +++ b/src/openrct2/paint/paint.h @@ -23,6 +23,9 @@ #include "../interface/colour.h" #include "../drawing/drawing.h" +// zax: Global paint clipping height. +extern uint8 gClipHeight; + typedef struct attached_paint_struct attached_paint_struct; typedef struct paint_struct paint_struct; typedef union paint_entry paint_entry; diff --git a/src/openrct2/paint/sprite/sprite.c b/src/openrct2/paint/sprite/sprite.c index 4269b18eb5..07e25b06cb 100644 --- a/src/openrct2/paint/sprite/sprite.c +++ b/src/openrct2/paint/sprite/sprite.c @@ -21,6 +21,7 @@ #include "../../ride/ride_data.h" #include "../../interface/viewport.h" #include "../../ride/vehicle_paint.h" +#include "../../localisation/localisation.h" // zax /** * Paint Quadrant @@ -45,6 +46,11 @@ void sprite_paint_setup(const uint16 eax, const uint16 ecx) { for (rct_sprite* spr = get_sprite(sprite_idx); sprite_idx != SPRITE_INDEX_NULL; sprite_idx = spr->unknown.next_in_quadrant) { spr = get_sprite(sprite_idx); + + // zax: Only paint sprites that are below the clip height. + // Here converting from land/path/etc height scale to pixel height scale. + if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (spr->unknown.z >= ((gClipHeight+2) * 8))) continue; + dpi = unk_140E9A8; if (dpi->y + dpi->height <= spr->unknown.sprite_top) continue; From e952c607cce539d864656ac54a978dfd59be47a6 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Sun, 23 Oct 2016 11:40:02 +0200 Subject: [PATCH 02/30] Add definition of gClipHeight to compat.c --- test/testpaint/compat.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/testpaint/compat.c b/test/testpaint/compat.c index 1ca8ff1752..5cef9c3d8f 100644 --- a/test/testpaint/compat.c +++ b/test/testpaint/compat.c @@ -165,3 +165,5 @@ bool track_element_is_inverted(rct_map_element *trackElement) { return trackElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED; } + +uint8 gClipHeight = 255; From e8d6cba5bec2c547628427c0baa73dfef5e5c82c Mon Sep 17 00:00:00 2001 From: zaxcav Date: Wed, 28 Dec 2016 21:40:59 +0100 Subject: [PATCH 03/30] Initial attempt at paintClip UI Compiles but untested. NOT INTENDED FOR MERGING --- data/language/en-GB.txt | 5 +++++ src/openrct2/interface/window.h | 4 ++++ src/openrct2/localisation/string_ids.h | 6 ++++++ src/openrct2/paint/paint.c | 1 + src/openrct2/paint/paint.h | 1 + src/openrct2/windows/themes.c | 1 + src/openrct2/windows/top_toolbar.c | 13 +++++++++++++ 7 files changed, 31 insertions(+) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index e86a089d54..bbe6334d98 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4311,6 +4311,11 @@ STR_5999 :Set money STR_6000 :Enter new value STR_6001 :Enable lighting effects (experimental) STR_6002 :{SMALLFONT}{BLACK}Lamps and rides will be lit up at night.{NEWLINE}Requires rendering engine to be set to hardware display. +STR_6003 :View Clipping +STR_6004 :Enable clipping by height +STR_6005 :Height clipping only displays map elements below the clip height +STR_6006 :Clip height +STR_6007 :Select clip height ############# # Scenarios # diff --git a/src/openrct2/interface/window.h b/src/openrct2/interface/window.h index e3931fef1e..cdffc5e4bb 100644 --- a/src/openrct2/interface/window.h +++ b/src/openrct2/interface/window.h @@ -471,6 +471,7 @@ enum { WC_SERVER_START = 128, WC_CUSTOM_CURRENCY_CONFIG = 129, WC_DEBUG_PAINT = 130, + WC_VIEW_CLIPPING = 131, // Only used for colour schemes WC_STAFF = 220, @@ -726,6 +727,9 @@ void window_editor_inventions_list_open(); void window_editor_scenario_options_open(); void window_editor_objective_options_open(); +void window_view_clipping_open(); +void window_view_clipping_close(); + void window_guest_list_init_vars_a(); void window_guest_list_init_vars_b(); void window_bubble_list_item(rct_window* w, sint32 item_position); diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index fbfcc60200..26f4dd03fc 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3654,6 +3654,12 @@ enum { STR_ENABLE_LIGHTING_EFFECTS = 6001, STR_ENABLE_LIGHTING_EFFECTS_TIP = 6002, + STR_VIEW_CLIPPING = 6003, + STR_VIEW_CLIPPING_HEIGHT_ENABLE = 6004, + STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP = 6005, + STR_VIEW_CLIPPING_HEIGHT_VALUE = 6006, + STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP = 6007, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/openrct2/paint/paint.c b/src/openrct2/paint/paint.c index b92ea5d8b6..f61e4565e4 100644 --- a/src/openrct2/paint/paint.c +++ b/src/openrct2/paint/paint.c @@ -25,6 +25,7 @@ // zax: globals for paint clipping height uint8 gClipHeight = 255; +bool gClipHeightEnable = false; const uint32 construction_markers[] = { COLOUR_DARK_GREEN << 19 | COLOUR_GREY << 24 | IMAGE_TYPE_REMAP, // White diff --git a/src/openrct2/paint/paint.h b/src/openrct2/paint/paint.h index 2ac5ee1308..5ecada6a8a 100644 --- a/src/openrct2/paint/paint.h +++ b/src/openrct2/paint/paint.h @@ -25,6 +25,7 @@ // zax: Global paint clipping height. extern uint8 gClipHeight; +extern bool gClipHeightEnable; typedef struct attached_paint_struct attached_paint_struct; typedef struct paint_struct paint_struct; diff --git a/src/openrct2/windows/themes.c b/src/openrct2/windows/themes.c index 9c206d6f13..c5c1a37729 100644 --- a/src/openrct2/windows/themes.c +++ b/src/openrct2/windows/themes.c @@ -245,6 +245,7 @@ static rct_windowclass window_themes_tab_6_classes[] = { WC_MULTIPLAYER, WC_PLAYER, WC_CHAT, + WC_VIEW_CLIPPING, }; static rct_windowclass window_themes_tab_7_classes[] = { diff --git a/src/openrct2/windows/top_toolbar.c b/src/openrct2/windows/top_toolbar.c index 4843cc1b5b..4e81b4dda9 100644 --- a/src/openrct2/windows/top_toolbar.c +++ b/src/openrct2/windows/top_toolbar.c @@ -98,6 +98,7 @@ typedef enum { DDIDX_LAND_HEIGHTS = 10, DDIDX_TRACK_HEIGHTS = 11, DDIDX_PATH_HEIGHTS = 12, + DDIDX_VIEW_CLIPPING = 13, } TOP_TOOLBAR_VIEW_MENU_DDIDX; typedef enum { @@ -3044,6 +3045,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { gDropdownItemsFormat[10] = STR_TOGGLE_OPTION; gDropdownItemsFormat[11] = STR_TOGGLE_OPTION; gDropdownItemsFormat[12] = STR_TOGGLE_OPTION; + gDropdownItemsFormat[13] = STR_TOGGLE_OPTION; gDropdownItemsArgs[0] = STR_UNDERGROUND_VIEW; gDropdownItemsArgs[1] = STR_REMOVE_BASE_LAND; @@ -3056,6 +3058,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { gDropdownItemsArgs[10] = STR_HEIGHT_MARKS_ON_LAND; gDropdownItemsArgs[11] = STR_HEIGHT_MARKS_ON_RIDE_TRACKS; gDropdownItemsArgs[12] = STR_HEIGHT_MARKS_ON_PATHS; + gDropdownItemsArgs[13] = STR_VIEW_CLIPPING; window_dropdown_show_text( w->x + widget->left, @@ -3090,6 +3093,8 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { dropdown_set_checked(11, true); if (mainViewport->flags & VIEWPORT_FLAG_PATH_HEIGHTS) dropdown_set_checked(12, true); + if (mainViewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) + dropdown_set_checked(13, true); gDropdownDefaultIndex = DDIDX_UNDERGROUND_INSIDE; } @@ -3136,6 +3141,14 @@ void top_toolbar_view_menu_dropdown(sint16 dropdownIndex) case DDIDX_PATH_HEIGHTS: w->viewport->flags ^= VIEWPORT_FLAG_PATH_HEIGHTS; break; + case DDIDX_VIEW_CLIPPING: + if ((w->viewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) == 0) { + window_view_clipping_open(); + } + else { + window_view_clipping_close(); + } + break; default: return; } From 0284667cc856f90fd153894aab7e651307ecfb26 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Wed, 28 Dec 2016 21:45:52 +0100 Subject: [PATCH 04/30] View Clipping UI Missing file in previous commit NOT INTENDED FOR MERGING --- src/windows/view_clipping.c | 277 ++++++++++++++++++++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 src/windows/view_clipping.c diff --git a/src/windows/view_clipping.c b/src/windows/view_clipping.c new file mode 100644 index 0000000000..48006b5e24 --- /dev/null +++ b/src/windows/view_clipping.c @@ -0,0 +1,277 @@ +#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers +/***************************************************************************** + * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. + * + * OpenRCT2 is the work of many authors, a full list can be found in contributors.md + * For more information, visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * A full copy of the GNU General Public License can be found in licence.txt + *****************************************************************************/ +#pragma endregion + +#include "../config.h" +#include "../interface/themes.h" +#include "../interface/widget.h" +#include "../interface/window.h" +#include "../interface/viewport.h" +#include "../localisation/localisation.h" +#include "../paint/paint.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 +}; + +#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_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 + // Future: add checkbox(es) to only clip height in front of the cursor position; behind the cursor position is rendered normally. + + { WIDGETS_END } +}; + +#pragma endregion + +#pragma region Events + +static void window_view_clipping_mouseup(rct_window *w, int widgetIndex); +static void window_view_clipping_mousedown(int widgetIndex, rct_window*w, rct_widget* widget); +static void window_view_clipping_update(rct_window *w); +static void window_view_clipping_invalidate(rct_window *w); +static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi); +static void window_view_clipping_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height); +//static void window_view_clipping_text_input(rct_window *w, int widgetIndex, char *text); + +static rct_window_event_list window_view_clipping_events = { + window_view_clipping_close, + window_view_clipping_mouseup, + NULL, + window_view_clipping_mousedown, + NULL, + NULL, + window_view_clipping_update, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + window_view_clipping_scrollgetsize, + NULL, + NULL, + NULL, + NULL, //window_view_clipping_text_input, + NULL, + NULL, + NULL, + NULL, + NULL, + window_view_clipping_invalidate, + window_view_clipping_paint, + NULL +}; + +#pragma endregion + +rct_string_id clipHeight_Units_StringId; + +void window_view_clipping_open() +{ + rct_window* window; + + // 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->widgets = window_view_clipping_widgets; + window->enabled_widgets = (1 << WIDX_CLOSE) | + (1 << WIDX_CLIP_HEIGHT_CHECKBOX) | (1 << WIDX_CLIP_HEIGHT_SLIDER); + window_init_scroll_widgets(window); + window_push_others_below(window); + + //window_invalidate(window); + + colour_scheme_update(window); + + // Set the height units symbol + switch (gConfigGeneral.measurement_format) { + case MEASUREMENT_FORMAT_METRIC: + case MEASUREMENT_FORMAT_SI: + clipHeight_Units_StringId = STR_UNIT_SUFFIX_METRES; + break; + case MEASUREMENT_FORMAT_IMPERIAL: + default: + clipHeight_Units_StringId = STR_UNIT_SUFFIX_FEET; + break; + } + + //gClipHeightEnable = true; // Use the VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT to record whether clipping is on/off. + + // Turn on view clipping when the window is opened. + rct_window *mainWindow = window_get_main(); + if (mainWindow != NULL) { + mainWindow->viewport->flags |= VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; + window_invalidate(mainWindow); + } +} + +void window_view_clipping_close() +{ + //gClipHeightEnable = false; + + // Turn off view clipping when the window is closed. + rct_window *mainWindow = window_get_main(); + if (mainWindow != NULL) { + mainWindow->viewport->flags &= ~VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; + window_invalidate(mainWindow); + } + +} + +static void window_view_clipping_mouseup(rct_window *w, int widgetIndex) +{ + rct_window *mainWindow; + + // mouseup appears to be used for buttons, checkboxes + switch (widgetIndex) { + case WIDX_CLOSE: + window_close(w); + break; + case WIDX_CLIP_HEIGHT_CHECKBOX: + //gClipHeightEnable = !gClipHeightEnable; + + // Toggle height clipping. + mainWindow = window_get_main(); + if (mainWindow != NULL) { + if ((mainWindow->viewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) == 0) { + mainWindow->viewport->flags |= VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; + } + else { + mainWindow->viewport->flags &= ~VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; + } + window_invalidate(mainWindow); + } + break; + } +} + +static void window_view_clipping_mousedown(int widgetIndex, rct_window*w, rct_widget* widget) +{ + // mousedown appears to be used primarily for dropdown list boxes + switch (widgetIndex) { + default: + break; + } +} + +static void window_view_clipping_update(rct_window *w) +{ + rct_widget *widget; + widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; + uint8 clip_height = (uint8)(((float)w->scrolls[0].h_left / (w->scrolls[0].h_right - ((widget->right - widget->left) - 1))) * 255); + if (clip_height != gClipHeight) { + gClipHeight = clip_height; + + // Update the main window accordingly. + rct_window *mainWindow = window_get_main(); + if (mainWindow != NULL) { + window_invalidate(mainWindow); + } + } + widget_invalidate(w, WIDX_CLIP_HEIGHT_SLIDER); +} + +static void window_view_clipping_invalidate(rct_window *w) +{ + rct_widget* widget; + + colour_scheme_update(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); + } + } + + // Set the clip height slider value. + if (w->frame_no == 0) { + 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))); + } + widget_scroll_update_thumbs(w, WIDX_CLIP_HEIGHT_SLIDER); + + if (mainWindow != NULL) { + widget_set_checkbox_value(w, WIDX_CLIP_HEIGHT_CHECKBOX, mainWindow->viewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT); + } + + // TODO: is the following necessary if the widgets are always shown? + // Widgets should be enabled/disabled (i.e. greyed out to make inactive) using w->disabled_widgets above). + //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_CHECKBOX].type = WWT_CHECKBOX; + //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER].type = WWT_SCROLL; + //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_VALUE].type = WWT_SPINNER; +} + +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 + // Currently as a spinner. + // Alternately could try putting the value on the scrollbar. + int x; + int y; + 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); + + 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); + + 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! + 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. + 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. + 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); + } +} + +static void window_view_clipping_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height) +{ + *width = 1000; +} + From fc8da2086ff0373c64cb43921c42a9fc166ecd7c Mon Sep 17 00:00:00 2001 From: zaxcav Date: Thu, 29 Dec 2016 21:46:44 +0100 Subject: [PATCH 05/30] Fix view menu so view clipping entry shows --- src/openrct2/windows/top_toolbar.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/openrct2/windows/top_toolbar.c b/src/openrct2/windows/top_toolbar.c index 4e81b4dda9..c19de53e34 100644 --- a/src/openrct2/windows/top_toolbar.c +++ b/src/openrct2/windows/top_toolbar.c @@ -98,7 +98,7 @@ typedef enum { DDIDX_LAND_HEIGHTS = 10, DDIDX_TRACK_HEIGHTS = 11, DDIDX_PATH_HEIGHTS = 12, - DDIDX_VIEW_CLIPPING = 13, + DDIDX_VIEW_CLIPPING = 14, } TOP_TOOLBAR_VIEW_MENU_DDIDX; typedef enum { @@ -3045,7 +3045,8 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { gDropdownItemsFormat[10] = STR_TOGGLE_OPTION; gDropdownItemsFormat[11] = STR_TOGGLE_OPTION; gDropdownItemsFormat[12] = STR_TOGGLE_OPTION; - gDropdownItemsFormat[13] = STR_TOGGLE_OPTION; + gDropdownItemsFormat[13] = STR_EMPTY; + gDropdownItemsFormat[14] = STR_TOGGLE_OPTION; gDropdownItemsArgs[0] = STR_UNDERGROUND_VIEW; gDropdownItemsArgs[1] = STR_REMOVE_BASE_LAND; @@ -3058,7 +3059,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { gDropdownItemsArgs[10] = STR_HEIGHT_MARKS_ON_LAND; gDropdownItemsArgs[11] = STR_HEIGHT_MARKS_ON_RIDE_TRACKS; gDropdownItemsArgs[12] = STR_HEIGHT_MARKS_ON_PATHS; - gDropdownItemsArgs[13] = STR_VIEW_CLIPPING; + gDropdownItemsArgs[14] = STR_VIEW_CLIPPING; window_dropdown_show_text( w->x + widget->left, @@ -3066,7 +3067,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { widget->bottom - widget->top + 1, w->colours[1] | 0x80, 0, - 13 + 15 ); // Set checkmarks @@ -3094,7 +3095,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { if (mainViewport->flags & VIEWPORT_FLAG_PATH_HEIGHTS) dropdown_set_checked(12, true); if (mainViewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) - dropdown_set_checked(13, true); + dropdown_set_checked(14, true); gDropdownDefaultIndex = DDIDX_UNDERGROUND_INSIDE; } From 5155540b54f5787ab479f25658564d3cf32ede71 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Thu, 29 Dec 2016 22:35:35 +0100 Subject: [PATCH 06/30] Remove calls to colour_scheme_update Theses are causing segfaults. Presumably the window is not set up correctly for this. Window now actually opens. --- src/windows/view_clipping.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/windows/view_clipping.c b/src/windows/view_clipping.c index 48006b5e24..9ddba97988 100644 --- a/src/windows/view_clipping.c +++ b/src/windows/view_clipping.c @@ -96,6 +96,7 @@ 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; @@ -103,13 +104,13 @@ void window_view_clipping_open() window = window_create(gScreenWidth - 98, 29, 98, 94, &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_SLIDER); window_init_scroll_widgets(window); window_push_others_below(window); //window_invalidate(window); - colour_scheme_update(window); + //colour_scheme_update(window); // Segfaults - not set up for colour schemes? // Set the height units symbol switch (gConfigGeneral.measurement_format) { @@ -131,6 +132,7 @@ 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() @@ -184,6 +186,7 @@ static void window_view_clipping_mousedown(int widgetIndex, rct_window*w, rct_wi static void window_view_clipping_update(rct_window *w) { + fprintf(stderr, "Update start\n"); rct_widget *widget; widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; uint8 clip_height = (uint8)(((float)w->scrolls[0].h_left / (w->scrolls[0].h_right - ((widget->right - widget->left) - 1))) * 255); @@ -203,7 +206,8 @@ static void window_view_clipping_invalidate(rct_window *w) { rct_widget* widget; - colour_scheme_update(w); + fprintf(stderr, "Invalidate start\n"); + //colour_scheme_update(w); w->disabled_widgets = 0; // Disable the height slider and height value according to the height checkbox. @@ -231,6 +235,7 @@ static void window_view_clipping_invalidate(rct_window *w) //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_CHECKBOX].type = WWT_CHECKBOX; //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER].type = WWT_SCROLL; //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_VALUE].type = WWT_SPINNER; + fprintf(stderr, "Invalidate end\n"); } static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) From 5f03047c400d97428a89a2450d7a07af450336d2 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Sat, 31 Dec 2016 11:47:12 +0100 Subject: [PATCH 07/30] 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); } } From c6da3fa8628cdc007af58cd20928e23713be31ed Mon Sep 17 00:00:00 2001 From: zaxcav Date: Sun, 1 Jan 2017 22:09:04 +0100 Subject: [PATCH 08/30] Scrollbar for clipping height now works. Initialisatation of scrollbar with clip height is temporarily disabled. Revised view menu entry bahaviour. Other minor window tweaks. --- src/openrct2/windows/top_toolbar.c | 7 +---- src/windows/view_clipping.c | 49 +++++++++++++++++------------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/openrct2/windows/top_toolbar.c b/src/openrct2/windows/top_toolbar.c index c19de53e34..917d0fc4c7 100644 --- a/src/openrct2/windows/top_toolbar.c +++ b/src/openrct2/windows/top_toolbar.c @@ -3143,12 +3143,7 @@ void top_toolbar_view_menu_dropdown(sint16 dropdownIndex) w->viewport->flags ^= VIEWPORT_FLAG_PATH_HEIGHTS; break; case DDIDX_VIEW_CLIPPING: - if ((w->viewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) == 0) { - window_view_clipping_open(); - } - else { - window_view_clipping_close(); - } + window_view_clipping_open(); break; default: return; diff --git a/src/windows/view_clipping.c b/src/windows/view_clipping.c index 48e9449508..c369004638 100644 --- a/src/windows/view_clipping.c +++ b/src/windows/view_clipping.c @@ -35,11 +35,11 @@ enum WINDOW_VIEW_CLIPPING_WIDGET_IDX { #pragma region Widgets rct_widget window_view_clipping_widgets[] = { - { 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_FRAME, 0, 0, 159, 0, 64, STR_NONE, 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, 81, 139, 34, 44, STR_NONE, STR_NONE }, // clip height value spinner + { WWT_SPINNER, 1, 81, 111, 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. @@ -97,10 +97,21 @@ void window_view_clipping_open() { rct_window* window; - // Check if window is already open - if (window_find_by_class(WC_VIEW_CLIPPING) != NULL) - return; + // Get the main viewport to set the view clipping flag. + rct_window *mainWindow = window_get_main(); + // Check if window is already open + if (window_find_by_class(WC_VIEW_CLIPPING) != NULL) { + // If window is already open, toggle the view clipping on/off + if (mainWindow != NULL) { + mainWindow->viewport->flags ^= VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; + window_invalidate(mainWindow); + } + + return; + } + + // Window is not open - create it. 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) | @@ -130,7 +141,6 @@ void window_view_clipping_open() //gClipHeightEnable = true; // Use the VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT to record whether clipping is on/off. // Turn on view clipping when the window is opened. - rct_window *mainWindow = window_get_main(); if (mainWindow != NULL) { mainWindow->viewport->flags |= VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; window_invalidate(mainWindow); @@ -160,19 +170,13 @@ static void window_view_clipping_mouseup(rct_window *w, int widgetIndex) window_close(w); break; case WIDX_CLIP_HEIGHT_CHECKBOX: - //gClipHeightEnable = !gClipHeightEnable; - // Toggle height clipping. mainWindow = window_get_main(); if (mainWindow != NULL) { - if ((mainWindow->viewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) == 0) { - mainWindow->viewport->flags |= VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; - } - else { - mainWindow->viewport->flags &= ~VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; - } + mainWindow->viewport->flags ^= VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; window_invalidate(mainWindow); } + window_invalidate(w); break; } } @@ -193,6 +197,7 @@ static void window_view_clipping_update(rct_window *w) widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; uint8 clip_height = (uint8)(((float)w->scrolls[0].h_left / (w->scrolls[0].h_right - ((widget->right - widget->left) - 1))) * 255); if (clip_height != gClipHeight) { + fprintf(stderr, "Update clip height from scrollbar\n"); gClipHeight = clip_height; // Update the main window accordingly. @@ -207,11 +212,12 @@ static void window_view_clipping_update(rct_window *w) static void window_view_clipping_invalidate(rct_window *w) { - rct_widget* widget; + //rct_widget* widget; fprintf(stderr, "Invalidate start\n"); //colour_scheme_update(w); + //window_init_scroll_widgets(w); // Needed? w->disabled_widgets = 0; // Disable the height slider and height value according to the height checkbox. rct_window *mainWindow = window_get_main(); @@ -223,10 +229,11 @@ static void window_view_clipping_invalidate(rct_window *w) //} // Set the clip height slider value. - 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))); - } + // TODO: Initialise the scroll position - do this once, not based on frame_no -> try moving to opening the window? + //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))); + //} widget_scroll_update_thumbs(w, WIDX_CLIP_HEIGHT_SLIDER); if (mainWindow != NULL) { From 0620321fb2abba8fd368ea301d74eee22c658880 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Mon, 2 Jan 2017 22:32:34 +0100 Subject: [PATCH 09/30] Re-added initialisation of scrollbar. Added window theme, so window displays correctly everytime. Changed strings. Other minor tweaks to window. --- data/language/en-GB.txt | 10 +-- src/openrct2/interface/Theme.cpp | 1 + src/windows/view_clipping.c | 125 ++++++++++++------------------- 3 files changed, 52 insertions(+), 84 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index bbe6334d98..f3ee404d33 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4311,11 +4311,11 @@ STR_5999 :Set money STR_6000 :Enter new value STR_6001 :Enable lighting effects (experimental) STR_6002 :{SMALLFONT}{BLACK}Lamps and rides will be lit up at night.{NEWLINE}Requires rendering engine to be set to hardware display. -STR_6003 :View Clipping -STR_6004 :Enable clipping by height -STR_6005 :Height clipping only displays map elements below the clip height -STR_6006 :Clip height -STR_6007 :Select clip height +STR_6003 :Cut-away View +STR_6004 :Enable cut-away view +STR_6005 :Cut-away view only displays map elements at or below the cut height +STR_6006 :Cut height +STR_6007 :Select cut height ############# # Scenarios # diff --git a/src/openrct2/interface/Theme.cpp b/src/openrct2/interface/Theme.cpp index f244850360..0603e77f53 100644 --- a/src/openrct2/interface/Theme.cpp +++ b/src/openrct2/interface/Theme.cpp @@ -173,6 +173,7 @@ WindowThemeDesc WindowThemeDescriptors[] = { THEME_WC(WC_NETWORK_STATUS), STR_THEMES_WINDOW_NETWORK_STATUS, COLOURS_1(COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_SERVER_LIST), STR_SERVER_LIST, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_CHAT), STR_CHAT, COLOURS_1(TRANSLUCENT(COLOUR_GREY) ) }, + { THEME_WC(WC_VIEW_CLIPPING), STR_TILE_INSPECTOR_TITLE, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, }; #pragma endregion diff --git a/src/windows/view_clipping.c b/src/windows/view_clipping.c index c369004638..3f70389f8b 100644 --- a/src/windows/view_clipping.c +++ b/src/windows/view_clipping.c @@ -35,14 +35,12 @@ enum WINDOW_VIEW_CLIPPING_WIDGET_IDX { #pragma region Widgets rct_widget window_view_clipping_widgets[] = { - { WWT_FRAME, 0, 0, 159, 0, 64, STR_NONE, STR_NONE }, // panel / background + { WWT_FRAME, 0, 0, 159, 0, 69, STR_NONE, 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, 81, 111, 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. - + { WWT_CHECKBOX, 1, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box + { WWT_SPINNER, 1, 81, 104, 34, 44, STR_NONE, STR_NONE }, // clip height value spinner + { WWT_SCROLL, 1, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar { WIDGETS_END } }; @@ -91,8 +89,6 @@ static rct_window_event_list window_view_clipping_events = { #pragma endregion -rct_string_id clipHeight_Units_StringId; - void window_view_clipping_open() { rct_window* window; @@ -118,39 +114,29 @@ void window_view_clipping_open() (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); + + // Initialise the clip height slider from the current clip height value. + rct_widget* widget; + widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; + window->scrolls[0].h_left = (sint16)ceil(((gClipHeight >> 1)/ 127.0f) * (window->scrolls[0].h_right - ((widget->right - widget->left) - 1))); + window_push_others_below(window); - //window_invalidate(window); - //colour_scheme_update(window); // Segfaults - not set up for colour schemes? - // Set the height units symbol - switch (gConfigGeneral.measurement_format) { - case MEASUREMENT_FORMAT_METRIC: - case MEASUREMENT_FORMAT_SI: - clipHeight_Units_StringId = STR_UNIT_SUFFIX_METRES; - break; - case MEASUREMENT_FORMAT_IMPERIAL: - default: - clipHeight_Units_StringId = STR_UNIT_SUFFIX_FEET; - break; - } - - //gClipHeightEnable = true; // Use the VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT to record whether clipping is on/off. - // Turn on view clipping when the window is opened. if (mainWindow != NULL) { mainWindow->viewport->flags |= VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT; window_invalidate(mainWindow); } + + window_invalidate(window); } void window_view_clipping_close() { - //gClipHeightEnable = false; - // Turn off view clipping when the window is closed. rct_window *mainWindow = window_get_main(); if (mainWindow != NULL) { @@ -192,12 +178,10 @@ static void window_view_clipping_mousedown(int widgetIndex, rct_window*w, rct_wi static void window_view_clipping_update(rct_window *w) { - fprintf(stderr, "Update start\n"); rct_widget *widget; widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; - uint8 clip_height = (uint8)(((float)w->scrolls[0].h_left / (w->scrolls[0].h_right - ((widget->right - widget->left) - 1))) * 255); + uint8 clip_height = (uint8)(((float)w->scrolls[0].h_left / (w->scrolls[0].h_right - ((widget->right - widget->left) - 1))) * 127) << 1; if (clip_height != gClipHeight) { - fprintf(stderr, "Update clip height from scrollbar\n"); gClipHeight = clip_height; // Update the main window accordingly. @@ -207,45 +191,18 @@ 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) { - //rct_widget* widget; + colour_scheme_update(w); - fprintf(stderr, "Invalidate start\n"); - //colour_scheme_update(w); - - //window_init_scroll_widgets(w); // Needed? - 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); - // } - //} - - // Set the clip height slider value. - // TODO: Initialise the scroll position - do this once, not based on frame_no -> try moving to opening the window? - //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))); - //} widget_scroll_update_thumbs(w, WIDX_CLIP_HEIGHT_SLIDER); + rct_window *mainWindow = window_get_main(); if (mainWindow != NULL) { widget_set_checkbox_value(w, WIDX_CLIP_HEIGHT_CHECKBOX, mainWindow->viewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT); } - - // TODO: is the following necessary if the widgets are always shown? - // Widgets should be enabled/disabled (i.e. greyed out to make inactive) using w->disabled_widgets above). - //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_CHECKBOX].type = WWT_CHECKBOX; - //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER].type = WWT_SCROLL; - //window_view_clipping_widgets[WIDX_CLIP_HEIGHT_VALUE].type = WWT_SPINNER; - fprintf(stderr, "Invalidate end\n"); } static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) @@ -257,29 +214,39 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) // Alternately could try putting the value on the scrollbar. int x; int y; - 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, w->colours[1], x, y); + 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, 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_FORMAT_INTEGER, &gClipHeight, w->colours[1], x, y); //Printing the raw value. + 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_FORMAT_INTEGER, &gClipHeight, w->colours[1], x, y); //Printing the raw value. - 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 = FIXED_1DP(gClipHeight, 0) / 2 * 5 - FIXED_1DP(35,0); - break; - case STR_UNIT_SUFFIX_METRES: - default: - clipHeightValueInUnits = FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10,5); - fprintf(stderr, "Meters: %d\n", clipHeightValueInUnits); - break; - } - // TODO: Display fixed point value correctly. - gfx_draw_string_left(dpi, clipHeight_Units_StringId, &clipHeightValueInUnits, w->colours[1], x + 30, y); + // Set the height units symbol + rct_string_id clipHeight_Units_StringId; + switch (gConfigGeneral.measurement_format) { + case MEASUREMENT_FORMAT_METRIC: + case MEASUREMENT_FORMAT_SI: + clipHeight_Units_StringId = STR_UNIT_SUFFIX_METRES; + break; + case MEASUREMENT_FORMAT_IMPERIAL: + default: + clipHeight_Units_StringId = STR_UNIT_SUFFIX_FEET; + break; } + + 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 = FIXED_1DP(gClipHeight, 0) / 2 * 5 - FIXED_1DP(35,0); + break; + case STR_UNIT_SUFFIX_METRES: + default: + clipHeightValueInUnits = FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10,5); + break; + } + // TODO: Display fixed point value correctly. + gfx_draw_string_left(dpi, clipHeight_Units_StringId, &clipHeightValueInUnits, w->colours[1], x + 30, y); } static void window_view_clipping_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height) From c3aabede6453b995aa962fec7d4c54a9dfbd03a1 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 21 Oct 2016 09:46:59 +0200 Subject: [PATCH 10/30] Initial prototype of paint clipping. Paint clipping is a possible future feature to assist players building in cluttered areas of a park by controlling which map elements and sprites are rendered, providing a clearer view for construction, inspection, etc. Only clip height is supported in this prototype. Map elements are clipped according to the map element base height (meaning *all* scenery on that map element is currently clipped with it). Sprites are clipped according to their z value being within the "sprite volume" of any non-clipped map element (which means below clip height + 2). Control is only provided through the console in this prototype - use the command: set paint_clip_height _value_ To turn clipping off use the command: set paint_clip_height 255 Clip heights are limited to multiples of two to coincide with the native heights of map elements. Command "get paint_clip_height" prints the clip height as a raw value as well as the equivalent height in ft and m as used when displaying heights in-game. At this time only painting of the main viewport is affected. There is no change to any input control handling. --- src/openrct2/paint/paint.c | 3 +-- src/openrct2/paint/paint.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/openrct2/paint/paint.c b/src/openrct2/paint/paint.c index efee14c7d6..b92ea5d8b6 100644 --- a/src/openrct2/paint/paint.c +++ b/src/openrct2/paint/paint.c @@ -24,8 +24,7 @@ #include "supports.h" // zax: globals for paint clipping height -uint8 gClipHeight = 128; // Default to middle value -bool gClipHeightEnable = false; +uint8 gClipHeight = 255; const uint32 construction_markers[] = { COLOUR_DARK_GREEN << 19 | COLOUR_GREY << 24 | IMAGE_TYPE_REMAP, // White diff --git a/src/openrct2/paint/paint.h b/src/openrct2/paint/paint.h index 5ecada6a8a..2475b70d69 100644 --- a/src/openrct2/paint/paint.h +++ b/src/openrct2/paint/paint.h @@ -25,7 +25,7 @@ // zax: Global paint clipping height. extern uint8 gClipHeight; -extern bool gClipHeightEnable; + typedef struct attached_paint_struct attached_paint_struct; typedef struct paint_struct paint_struct; From c97f624965dc4123f4bbe07171f7a95f620a47ab Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 6 Jan 2017 16:45:45 +0100 Subject: [PATCH 11/30] Move view_clipping.c to under src/openrct2/windows --- src/{ => openrct2}/windows/view_clipping.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{ => openrct2}/windows/view_clipping.c (100%) diff --git a/src/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c similarity index 100% rename from src/windows/view_clipping.c rename to src/openrct2/windows/view_clipping.c From a008dcb1861ea21cd51c52cacbf2a1f179e961fa Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 6 Jan 2017 20:46:04 +0100 Subject: [PATCH 12/30] Display clip height in METRIC/SI units with 1DP. --- data/language/en-GB.txt | 1 + src/openrct2/localisation/string_ids.h | 1 + src/openrct2/windows/view_clipping.c | 26 +++++++------------------- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index f3ee404d33..2b0d7d9c0f 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4316,6 +4316,7 @@ STR_6004 :Enable cut-away view STR_6005 :Cut-away view only displays map elements at or below the cut height STR_6006 :Cut height STR_6007 :Select cut height +STE_6008 :{COMMA1DP16}m ############# # Scenarios # diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index 26f4dd03fc..f4c19a08b3 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3659,6 +3659,7 @@ enum { STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP = 6005, STR_VIEW_CLIPPING_HEIGHT_VALUE = 6006, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP = 6007, + STR_UNIT1DP_SUFFIX_METRES = 6008, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index 3f70389f8b..f1b58950ee 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -210,8 +210,6 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) window_draw_widgets(w, dpi); // Clip height value - // Currently as a spinner. - // Alternately could try putting the value on the scrollbar. int x; int y; x = w->x + 8; @@ -222,31 +220,21 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) y = w->y + w->widgets[WIDX_CLIP_HEIGHT_VALUE].top; gfx_draw_string_left(dpi, STR_FORMAT_INTEGER, &gClipHeight, w->colours[1], x, y); //Printing the raw value. - // Set the height units symbol - rct_string_id clipHeight_Units_StringId; + // Print the value in the configured game units. + fixed16_1dp clipHeightValueInMeters; + sint16 clipHeightValueInFeet; switch (gConfigGeneral.measurement_format) { case MEASUREMENT_FORMAT_METRIC: case MEASUREMENT_FORMAT_SI: - clipHeight_Units_StringId = STR_UNIT_SUFFIX_METRES; + clipHeightValueInMeters = FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10,5); + gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[1], x + 30, y); break; case MEASUREMENT_FORMAT_IMPERIAL: default: - clipHeight_Units_StringId = STR_UNIT_SUFFIX_FEET; + clipHeightValueInFeet = gClipHeight / 2 * 5 - 35; + gfx_draw_string_left(dpi, STR_UNIT_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[1], x + 30, y); break; } - - 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 = FIXED_1DP(gClipHeight, 0) / 2 * 5 - FIXED_1DP(35,0); - break; - case STR_UNIT_SUFFIX_METRES: - default: - clipHeightValueInUnits = FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10,5); - break; - } - // TODO: Display fixed point value correctly. - gfx_draw_string_left(dpi, clipHeight_Units_StringId, &clipHeightValueInUnits, w->colours[1], x + 30, y); } static void window_view_clipping_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height) From a30c9b371708f390ea7a65399a4d6ecbd43b19c6 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 6 Jan 2017 21:02:46 +0100 Subject: [PATCH 13/30] Minor code cleanups --- src/openrct2/windows/view_clipping.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index f1b58950ee..8dbd13a6a2 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -49,18 +49,16 @@ rct_widget window_view_clipping_widgets[] = { #pragma region Events static void window_view_clipping_mouseup(rct_window *w, int widgetIndex); -static void window_view_clipping_mousedown(int widgetIndex, rct_window*w, rct_widget* widget); static void window_view_clipping_update(rct_window *w); static void window_view_clipping_invalidate(rct_window *w); static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_view_clipping_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height); -//static void window_view_clipping_text_input(rct_window *w, int widgetIndex, char *text); static rct_window_event_list window_view_clipping_events = { window_view_clipping_close, window_view_clipping_mouseup, NULL, - window_view_clipping_mousedown, + NULL, NULL, NULL, window_view_clipping_update, @@ -76,7 +74,7 @@ static rct_window_event_list window_view_clipping_events = { NULL, NULL, NULL, - NULL, //window_view_clipping_text_input, + NULL, NULL, NULL, NULL, @@ -124,7 +122,7 @@ void window_view_clipping_open() window_push_others_below(window); - //colour_scheme_update(window); // Segfaults - not set up for colour schemes? + colour_scheme_update(window); // Turn on view clipping when the window is opened. if (mainWindow != NULL) { @@ -167,15 +165,6 @@ static void window_view_clipping_mouseup(rct_window *w, int widgetIndex) } } -static void window_view_clipping_mousedown(int widgetIndex, rct_window*w, rct_widget* widget) -{ - // mousedown appears to be used primarily for dropdown list boxes - switch (widgetIndex) { - default: - break; - } -} - static void window_view_clipping_update(rct_window *w) { rct_widget *widget; @@ -220,7 +209,7 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) y = w->y + w->widgets[WIDX_CLIP_HEIGHT_VALUE].top; gfx_draw_string_left(dpi, STR_FORMAT_INTEGER, &gClipHeight, w->colours[1], x, y); //Printing the raw value. - // Print the value in the configured game units. + // Print the value in the configured measurement units. fixed16_1dp clipHeightValueInMeters; sint16 clipHeightValueInFeet; switch (gConfigGeneral.measurement_format) { From 77e3827935df6d9101d0827fb0dbe825e1b616a7 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 6 Jan 2017 21:43:39 +0100 Subject: [PATCH 14/30] Add view_clipping.c to openrct2.vcxproj --- src/openrct2/libopenrct2.vcxproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index fce1fa922d..f83b8ea4a0 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -391,6 +391,7 @@ + @@ -595,4 +596,4 @@ - \ No newline at end of file + From c615368115bbb8d4252c6f8e3780f93433e70ebb Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 6 Jan 2017 22:05:20 +0100 Subject: [PATCH 15/30] Correct errors identified by AppVeyor --- src/openrct2/windows/view_clipping.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index 8dbd13a6a2..0415f5d522 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -133,7 +133,7 @@ void window_view_clipping_open() window_invalidate(window); } -void window_view_clipping_close() +void window_view_clipping_close(rct_window *w) { // Turn off view clipping when the window is closed. rct_window *mainWindow = window_get_main(); @@ -215,7 +215,7 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) switch (gConfigGeneral.measurement_format) { case MEASUREMENT_FORMAT_METRIC: case MEASUREMENT_FORMAT_SI: - clipHeightValueInMeters = FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10,5); + clipHeightValueInMeters = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10,5)); gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[1], x + 30, y); break; case MEASUREMENT_FORMAT_IMPERIAL: From c91871822ba8379eed11a391478a9d185ae1c005 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 6 Jan 2017 22:14:32 +0100 Subject: [PATCH 16/30] Correct more errors detected by AppVeyor --- src/openrct2/windows/view_clipping.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index 0415f5d522..7851098186 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -48,6 +48,7 @@ rct_widget window_view_clipping_widgets[] = { #pragma region Events +static void window_view_clipping_close(rct_window *w); static void window_view_clipping_mouseup(rct_window *w, int widgetIndex); static void window_view_clipping_update(rct_window *w); static void window_view_clipping_invalidate(rct_window *w); From d06d37e8624caa51de6b9b5b6280288643b4acae Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 6 Jan 2017 22:25:50 +0100 Subject: [PATCH 17/30] Revise previous error corrections --- src/openrct2/windows/view_clipping.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index 7851098186..b22f5425f3 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -48,7 +48,6 @@ rct_widget window_view_clipping_widgets[] = { #pragma region Events -static void window_view_clipping_close(rct_window *w); static void window_view_clipping_mouseup(rct_window *w, int widgetIndex); static void window_view_clipping_update(rct_window *w); static void window_view_clipping_invalidate(rct_window *w); @@ -134,7 +133,7 @@ void window_view_clipping_open() window_invalidate(window); } -void window_view_clipping_close(rct_window *w) +void window_view_clipping_close() { // Turn off view clipping when the window is closed. rct_window *mainWindow = window_get_main(); From f76628bff041c3dcde7f713c1882d21068107b7f Mon Sep 17 00:00:00 2001 From: zaxcav Date: Fri, 6 Jan 2017 22:43:32 +0100 Subject: [PATCH 18/30] Recorrect errors identified by AppVeyor. --- src/openrct2/windows/view_clipping.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index b22f5425f3..dd783df909 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -48,6 +48,7 @@ rct_widget window_view_clipping_widgets[] = { #pragma region Events +static void window_view_clipping_close_button(rct_window *w); static void window_view_clipping_mouseup(rct_window *w, int widgetIndex); static void window_view_clipping_update(rct_window *w); static void window_view_clipping_invalidate(rct_window *w); @@ -55,7 +56,7 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_view_clipping_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height); static rct_window_event_list window_view_clipping_events = { - window_view_clipping_close, + window_view_clipping_close_button, window_view_clipping_mouseup, NULL, NULL, @@ -144,6 +145,11 @@ void window_view_clipping_close() } +static void window_view_clipping_close_button(rct_window *w) +{ + window_view_clipping_close(); +} + static void window_view_clipping_mouseup(rct_window *w, int widgetIndex) { rct_window *mainWindow; From e87da614366b9d03cba78fe14b26e1f76435b1a2 Mon Sep 17 00:00:00 2001 From: Broxzier Date: Sat, 7 Jan 2017 13:24:55 +0100 Subject: [PATCH 19/30] Fix screen invalidation on drag The window size did not match the sizes given to window_create, causing the window to think it was actually smaller, and as a result not clearing the screen properly. This commit adds the WW and WH macros and uses them. This commit also has a few formatting changes. --- src/openrct2/windows/view_clipping.c | 40 +++++++++++++++------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index dd783df909..780ba0b8c8 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -34,13 +34,16 @@ enum WINDOW_VIEW_CLIPPING_WIDGET_IDX { #pragma region Widgets +#define WW 160 +#define WH 70 + rct_widget window_view_clipping_widgets[] = { - { WWT_FRAME, 0, 0, 159, 0, 69, STR_NONE, 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, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box - { WWT_SPINNER, 1, 81, 104, 34, 44, STR_NONE, STR_NONE }, // clip height value spinner - { WWT_SCROLL, 1, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar + { WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, STR_NONE, STR_NONE }, // panel / background + { WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_VIEW_CLIPPING, STR_WINDOW_TITLE_TIP }, // title bar + { WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button + { WWT_CHECKBOX, 1, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box + { WWT_SPINNER, 1, 81, 104, 34, 44, STR_NONE, STR_NONE }, // clip height value spinner + { WWT_SCROLL, 1, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar { WIDGETS_END } }; @@ -107,7 +110,7 @@ void window_view_clipping_open() } // Window is not open - create it. - window = window_create(32, 32, 160, 65, &window_view_clipping_events, WC_VIEW_CLIPPING, 0); + window = window_create(32, 32, WW, WH, &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) | @@ -119,7 +122,7 @@ void window_view_clipping_open() // Initialise the clip height slider from the current clip height value. rct_widget* widget; widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; - window->scrolls[0].h_left = (sint16)ceil(((gClipHeight >> 1)/ 127.0f) * (window->scrolls[0].h_right - ((widget->right - widget->left) - 1))); + window->scrolls[0].h_left = (sint16)ceil(((gClipHeight >> 1) / 127.0f) * (window->scrolls[0].h_right - ((widget->right - widget->left) - 1))); window_push_others_below(window); @@ -219,16 +222,16 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) fixed16_1dp clipHeightValueInMeters; sint16 clipHeightValueInFeet; switch (gConfigGeneral.measurement_format) { - case MEASUREMENT_FORMAT_METRIC: - case MEASUREMENT_FORMAT_SI: - clipHeightValueInMeters = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10,5)); - gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[1], x + 30, y); - break; - case MEASUREMENT_FORMAT_IMPERIAL: - default: - clipHeightValueInFeet = gClipHeight / 2 * 5 - 35; - gfx_draw_string_left(dpi, STR_UNIT_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[1], x + 30, y); - break; + case MEASUREMENT_FORMAT_METRIC: + case MEASUREMENT_FORMAT_SI: + clipHeightValueInMeters = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10, 5)); + gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[1], x + 30, y); + break; + case MEASUREMENT_FORMAT_IMPERIAL: + default: + clipHeightValueInFeet = gClipHeight / 2 * 5 - 35; + gfx_draw_string_left(dpi, STR_UNIT_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[1], x + 30, y); + break; } } @@ -236,4 +239,3 @@ static void window_view_clipping_scrollgetsize(rct_window *w, int scrollIndex, i { *width = 1000; } - From ef5f4a5f5af067eb53bbe13af102617b13840bf0 Mon Sep 17 00:00:00 2001 From: Broxzier Date: Sat, 7 Jan 2017 14:51:29 +0100 Subject: [PATCH 20/30] Add spinners for better control of clip-height This commit also changes the step size to 1 (I did not notice anything strange). --- src/openrct2/windows/view_clipping.c | 62 ++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index 780ba0b8c8..ea6df9b02d 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -29,6 +29,8 @@ enum WINDOW_VIEW_CLIPPING_WIDGET_IDX { WIDX_CLOSE, WIDX_CLIP_HEIGHT_CHECKBOX, WIDX_CLIP_HEIGHT_VALUE, + WIDX_CLIP_HEIGHT_INCREASE, + WIDX_CLIP_HEIGHT_DECREASE, WIDX_CLIP_HEIGHT_SLIDER }; @@ -38,12 +40,14 @@ enum WINDOW_VIEW_CLIPPING_WIDGET_IDX { #define WH 70 rct_widget window_view_clipping_widgets[] = { - { WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, STR_NONE, STR_NONE }, // panel / background - { WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_VIEW_CLIPPING, STR_WINDOW_TITLE_TIP }, // title bar - { WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button - { WWT_CHECKBOX, 1, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box - { WWT_SPINNER, 1, 81, 104, 34, 44, STR_NONE, STR_NONE }, // clip height value spinner - { WWT_SCROLL, 1, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar + { WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, STR_NONE, STR_NONE }, // panel / background + { WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_VIEW_CLIPPING, STR_WINDOW_TITLE_TIP }, // title bar + { WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button + { WWT_CHECKBOX, 1, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box + { WWT_SPINNER, 1, 71, 104, 34, 45, STR_NONE, STR_NONE }, // clip height value + { WWT_DROPDOWN_BUTTON, 1, 93, 103, 35, 39, STR_NUMERIC_UP, STR_NONE }, // clip height increase + { WWT_DROPDOWN_BUTTON, 1, 93, 103, 40, 44, STR_NUMERIC_DOWN, STR_NONE }, // clip height decrease + { WWT_SCROLL, 1, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar { WIDGETS_END } }; @@ -91,6 +95,14 @@ static rct_window_event_list window_view_clipping_events = { #pragma endregion +static void window_view_slippint_set_clipheight(rct_window *w, const uint8 clipheight) +{ + gClipHeight = clipheight; + rct_widget* widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; + const float clip_height_ratio = (float)gClipHeight / 255; + w->scrolls[0].h_left = (sint16)ceil(clip_height_ratio * (w->scrolls[0].h_right - ((widget->right - widget->left) - 1))); +} + void window_view_clipping_open() { rct_window* window; @@ -112,17 +124,16 @@ void window_view_clipping_open() // Window is not open - create it. window = window_create(32, 32, WW, WH, &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_VALUE) | - (1 << WIDX_CLIP_HEIGHT_SLIDER); + window->enabled_widgets = (1ULL << WIDX_CLOSE) | + (1ULL << WIDX_CLIP_HEIGHT_CHECKBOX) | + (1ULL << WIDX_CLIP_HEIGHT_INCREASE) | + (1ULL << WIDX_CLIP_HEIGHT_DECREASE) | + (1ULL << WIDX_CLIP_HEIGHT_SLIDER); window_init_scroll_widgets(window); // Initialise the clip height slider from the current clip height value. - rct_widget* widget; - widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; - window->scrolls[0].h_left = (sint16)ceil(((gClipHeight >> 1) / 127.0f) * (window->scrolls[0].h_right - ((widget->right - widget->left) - 1))); + window_view_slippint_set_clipheight(window, gClipHeight); window_push_others_below(window); @@ -171,14 +182,29 @@ static void window_view_clipping_mouseup(rct_window *w, int widgetIndex) } window_invalidate(w); break; + case WIDX_CLIP_HEIGHT_INCREASE: + if (gClipHeight < 255) + window_view_slippint_set_clipheight(w, gClipHeight + 1); + mainWindow = window_get_main(); + if (mainWindow != NULL) + window_invalidate(mainWindow); + break; + case WIDX_CLIP_HEIGHT_DECREASE: + if(gClipHeight > 0) + window_view_slippint_set_clipheight(w, gClipHeight - 1); + mainWindow = window_get_main(); + if (mainWindow != NULL) + window_invalidate(mainWindow); + break; } } static void window_view_clipping_update(rct_window *w) { - rct_widget *widget; - widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; - uint8 clip_height = (uint8)(((float)w->scrolls[0].h_left / (w->scrolls[0].h_right - ((widget->right - widget->left) - 1))) * 127) << 1; + const rct_widget *const widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; + const rct_scroll *const scroll = &w->scrolls[0]; + const sint16 scroll_width = widget->right - widget->left - 1; + const uint8 clip_height = (uint8)(((float)scroll->h_left / (scroll->h_right - scroll_width)) * 255); if (clip_height != gClipHeight) { gClipHeight = clip_height; @@ -225,12 +251,12 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) case MEASUREMENT_FORMAT_METRIC: case MEASUREMENT_FORMAT_SI: clipHeightValueInMeters = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10, 5)); - gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[1], x + 30, y); + gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[1], x + 40, y); break; case MEASUREMENT_FORMAT_IMPERIAL: default: clipHeightValueInFeet = gClipHeight / 2 * 5 - 35; - gfx_draw_string_left(dpi, STR_UNIT_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[1], x + 30, y); + gfx_draw_string_left(dpi, STR_UNIT_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[1], x + 40, y); break; } } From e287b4ec3e69002c6f1b98ea7996d427b299c632 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Sat, 7 Jan 2017 20:57:01 +0100 Subject: [PATCH 21/30] Fix typo. --- src/openrct2/windows/view_clipping.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index ea6df9b02d..d42384075b 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -95,7 +95,7 @@ static rct_window_event_list window_view_clipping_events = { #pragma endregion -static void window_view_slippint_set_clipheight(rct_window *w, const uint8 clipheight) +static void window_view_clipping_set_clipheight(rct_window *w, const uint8 clipheight) { gClipHeight = clipheight; rct_widget* widget = &window_view_clipping_widgets[WIDX_CLIP_HEIGHT_SLIDER]; @@ -133,7 +133,7 @@ void window_view_clipping_open() window_init_scroll_widgets(window); // Initialise the clip height slider from the current clip height value. - window_view_slippint_set_clipheight(window, gClipHeight); + window_view_clipping_set_clipheight(window, gClipHeight); window_push_others_below(window); @@ -184,14 +184,14 @@ static void window_view_clipping_mouseup(rct_window *w, int widgetIndex) break; case WIDX_CLIP_HEIGHT_INCREASE: if (gClipHeight < 255) - window_view_slippint_set_clipheight(w, gClipHeight + 1); + window_view_clipping_set_clipheight(w, gClipHeight + 1); mainWindow = window_get_main(); if (mainWindow != NULL) window_invalidate(mainWindow); break; case WIDX_CLIP_HEIGHT_DECREASE: if(gClipHeight > 0) - window_view_slippint_set_clipheight(w, gClipHeight - 1); + window_view_clipping_set_clipheight(w, gClipHeight - 1); mainWindow = window_get_main(); if (mainWindow != NULL) window_invalidate(mainWindow); From d17c435c0ec62c2b4d0d5a834f5f1b31abcea748 Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Sat, 7 Jan 2017 21:47:08 +0100 Subject: [PATCH 22/30] Update Xcode project --- OpenRCT2.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OpenRCT2.xcodeproj/project.pbxproj b/OpenRCT2.xcodeproj/project.pbxproj index 8abd77e0ba..8cec0fb816 100644 --- a/OpenRCT2.xcodeproj/project.pbxproj +++ b/OpenRCT2.xcodeproj/project.pbxproj @@ -37,6 +37,7 @@ C606CCD51DB4DD6C00FE4015 /* VerticalTunnelCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C606CCD31DB4DD6C00FE4015 /* VerticalTunnelCall.cpp */; }; C606CD261DB5120C00FE4015 /* TestPaint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C606CD231DB5120900FE4015 /* TestPaint.cpp */; }; C612A8991D64825300B634CA /* vehicle_data.c in Sources */ = {isa = PBXBuildFile; fileRef = C612A8971D64825300B634CA /* vehicle_data.c */; }; + C6136C551E21893500F3ED2B /* view_clipping.c in Sources */ = {isa = PBXBuildFile; fileRef = C6136C541E21893500F3ED2B /* view_clipping.c */; }; C61FB7241CF86356004CE991 /* NetworkUser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C61FB7221CF86356004CE991 /* NetworkUser.cpp */; }; C647C6911E1D0CA000C7FB21 /* AudioMixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C647C68F1E1D0CA000C7FB21 /* AudioMixer.cpp */; }; C649B3D41DF04ED2008AC826 /* format_codes.c in Sources */ = {isa = PBXBuildFile; fileRef = C649B3D31DF04ED2008AC826 /* format_codes.c */; }; @@ -550,6 +551,7 @@ C606CD241DB5120900FE4015 /* TestPaint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TestPaint.hpp; sourceTree = ""; }; C612A8971D64825300B634CA /* vehicle_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vehicle_data.c; sourceTree = ""; }; C612A8981D64825300B634CA /* vehicle_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vehicle_data.h; sourceTree = ""; }; + C6136C541E21893500F3ED2B /* view_clipping.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = view_clipping.c; sourceTree = ""; }; C61FB7221CF86356004CE991 /* NetworkUser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkUser.cpp; sourceTree = ""; usesTabs = 0; }; C61FB7231CF86356004CE991 /* NetworkUser.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = NetworkUser.h; sourceTree = ""; usesTabs = 0; }; C647C68F1E1D0CA000C7FB21 /* AudioMixer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioMixer.cpp; sourceTree = ""; }; @@ -1955,6 +1957,7 @@ D44271D31CC81B3200D84D28 /* track_list.c */, D44271D41CC81B3200D84D28 /* track_manage.c */, D44271D51CC81B3200D84D28 /* track_place.c */, + C6136C541E21893500F3ED2B /* view_clipping.c */, D44271D61CC81B3200D84D28 /* viewport.c */, D44271D71CC81B3200D84D28 /* water.c */, ); @@ -2719,6 +2722,7 @@ C61FB7241CF86356004CE991 /* NetworkUser.cpp in Sources */, D44272191CC81B3200D84D28 /* colour.c in Sources */, D442724C1CC81B3200D84D28 /* vehicle.c in Sources */, + C6136C551E21893500F3ED2B /* view_clipping.c in Sources */, D464FEED1D31A6AA00CBABAC /* ObjectManager.cpp in Sources */, D44272261CC81B3200D84D28 /* currency.c in Sources */, C65A88931E1B1148000368D7 /* FileAudioSource.cpp in Sources */, From 87a80ac9569ef40820cb3810ab7fdab3cb1a71ae Mon Sep 17 00:00:00 2001 From: zaxcav Date: Sat, 7 Jan 2017 23:15:44 +0100 Subject: [PATCH 23/30] Minor code cleanups. Adjusted sprite trimming. --- src/openrct2/interface/viewport.h | 2 +- src/openrct2/paint/map_element/map_element.c | 2 +- src/openrct2/paint/paint.c | 4 ++-- src/openrct2/paint/paint.h | 2 +- src/openrct2/paint/sprite/sprite.c | 8 +++++--- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/openrct2/interface/viewport.h b/src/openrct2/interface/viewport.h index 0ddbd55640..23d3f54b46 100644 --- a/src/openrct2/interface/viewport.h +++ b/src/openrct2/interface/viewport.h @@ -40,7 +40,7 @@ enum { VIEWPORT_FLAG_INVISIBLE_SPRITES = (1 << 14), VIEWPORT_FLAG_15 = (1 << 15), VIEWPORT_FLAG_SEETHROUGH_PATHS = (1 << 16), - VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT = (1 << 17) // zax + VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT = (1 << 17) }; enum { diff --git a/src/openrct2/paint/map_element/map_element.c b/src/openrct2/paint/map_element/map_element.c index 30505e9662..1b0e748d1e 100644 --- a/src/openrct2/paint/map_element/map_element.c +++ b/src/openrct2/paint/map_element/map_element.c @@ -319,7 +319,7 @@ static void sub_68B3FB(sint32 x, sint32 y) imageColourFlats = 0b111011 << 19 | 0x40000000; } - // Only draw supports above the clipping height. + // Only draw supports below the clipping height. if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (segmentHeight > gClipHeight)) continue; sint32 xOffset = sy * 10; diff --git a/src/openrct2/paint/paint.c b/src/openrct2/paint/paint.c index b92ea5d8b6..95121d63ca 100644 --- a/src/openrct2/paint/paint.c +++ b/src/openrct2/paint/paint.c @@ -23,8 +23,8 @@ #include "sprite/sprite.h" #include "supports.h" -// zax: globals for paint clipping height -uint8 gClipHeight = 255; +// Global for paint clipping height +uint8 gClipHeight = 128; // Default to middle value const uint32 construction_markers[] = { COLOUR_DARK_GREEN << 19 | COLOUR_GREY << 24 | IMAGE_TYPE_REMAP, // White diff --git a/src/openrct2/paint/paint.h b/src/openrct2/paint/paint.h index 2475b70d69..2defef1976 100644 --- a/src/openrct2/paint/paint.h +++ b/src/openrct2/paint/paint.h @@ -23,7 +23,7 @@ #include "../interface/colour.h" #include "../drawing/drawing.h" -// zax: Global paint clipping height. +// Global for paint clipping height. extern uint8 gClipHeight; diff --git a/src/openrct2/paint/sprite/sprite.c b/src/openrct2/paint/sprite/sprite.c index 07e25b06cb..cf9482bf1a 100644 --- a/src/openrct2/paint/sprite/sprite.c +++ b/src/openrct2/paint/sprite/sprite.c @@ -21,7 +21,7 @@ #include "../../ride/ride_data.h" #include "../../interface/viewport.h" #include "../../ride/vehicle_paint.h" -#include "../../localisation/localisation.h" // zax +#include "../../localisation/localisation.h" /** * Paint Quadrant @@ -47,9 +47,11 @@ void sprite_paint_setup(const uint16 eax, const uint16 ecx) { for (rct_sprite* spr = get_sprite(sprite_idx); sprite_idx != SPRITE_INDEX_NULL; sprite_idx = spr->unknown.next_in_quadrant) { spr = get_sprite(sprite_idx); - // zax: Only paint sprites that are below the clip height. + // Only paint sprites that are below the clip height. // Here converting from land/path/etc height scale to pixel height scale. - if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (spr->unknown.z >= ((gClipHeight+2) * 8))) continue; + // Note: peeps/scenery on slopes will be above the base + // height of the slope element, and consequently clipped. + if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (spr->unknown.z > (gClipHeight * 8) )) continue; dpi = unk_140E9A8; From 25e57ca50d34583d17b7a112342824044826ad24 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Sun, 8 Jan 2017 21:31:34 +0100 Subject: [PATCH 24/30] Updated code as requested by reviewer. Removed display of raw cut height value. Changed display of cut height in METRIC/SI from 1DP to 2DP to display odd raw heights with accurate value. Changed display of cut height in IMPERIAL to 1DP to display odd raw heights with accurate value. --- data/language/en-GB.txt | 3 ++- src/openrct2/interface/Theme.cpp | 2 +- src/openrct2/localisation/string_ids.h | 3 ++- src/openrct2/windows/top_toolbar.c | 11 ++++++----- src/openrct2/windows/view_clipping.c | 26 +++++++++++++------------- test/testpaint/compat.c | 3 +-- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 2b0d7d9c0f..80238bf106 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4316,7 +4316,8 @@ STR_6004 :Enable cut-away view STR_6005 :Cut-away view only displays map elements at or below the cut height STR_6006 :Cut height STR_6007 :Select cut height -STE_6008 :{COMMA1DP16}m +STR_6008 :{COMMA2DP32}m +STR_6009 :{COMMA1DP16}ft ############# # Scenarios # diff --git a/src/openrct2/interface/Theme.cpp b/src/openrct2/interface/Theme.cpp index 0603e77f53..bde4ab0b3e 100644 --- a/src/openrct2/interface/Theme.cpp +++ b/src/openrct2/interface/Theme.cpp @@ -167,13 +167,13 @@ WindowThemeDesc WindowThemeDescriptors[] = { THEME_WC(WC_EDITOR_SCENARIO_BOTTOM_TOOLBAR), STR_THEMES_WINDOW_BOTTOM_TOOLBAR_SCENARIO_EDITOR, COLOURS_3(TRANSLUCENT(COLOUR_LIGHT_BROWN), TRANSLUCENT(COLOUR_LIGHT_BROWN), TRANSLUCENT(COLOUR_MOSS_GREEN) ) }, { THEME_WC(WC_TITLE_EDITOR), STR_TITLE_EDITOR_TITLE, COLOURS_3(COLOUR_GREY, COLOUR_OLIVE_GREEN, COLOUR_OLIVE_GREEN ) }, { THEME_WC(WC_TILE_INSPECTOR), STR_TILE_INSPECTOR_TITLE, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, + { THEME_WC(WC_VIEW_CLIPPING), STR_TILE_INSPECTOR_TITLE, COLOURS_1(COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_CHANGELOG), STR_CHANGELOG_TITLE, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_MULTIPLAYER), STR_MULTIPLAYER, COLOURS_3(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_PLAYER), STR_THEMES_WINDOW_PLAYER, COLOURS_3(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_NETWORK_STATUS), STR_THEMES_WINDOW_NETWORK_STATUS, COLOURS_1(COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_SERVER_LIST), STR_SERVER_LIST, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_CHAT), STR_CHAT, COLOURS_1(TRANSLUCENT(COLOUR_GREY) ) }, - { THEME_WC(WC_VIEW_CLIPPING), STR_TILE_INSPECTOR_TITLE, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, }; #pragma endregion diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index f4c19a08b3..c8c5d87ce6 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3659,7 +3659,8 @@ enum { STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP = 6005, STR_VIEW_CLIPPING_HEIGHT_VALUE = 6006, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP = 6007, - STR_UNIT1DP_SUFFIX_METRES = 6008, + STR_UNIT2DP_SUFFIX_METRES = 6008, + STR_UNIT1DP_SUFFIX_FEET = 6009, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 diff --git a/src/openrct2/windows/top_toolbar.c b/src/openrct2/windows/top_toolbar.c index 917d0fc4c7..f1680aaf4b 100644 --- a/src/openrct2/windows/top_toolbar.c +++ b/src/openrct2/windows/top_toolbar.c @@ -99,6 +99,7 @@ typedef enum { DDIDX_TRACK_HEIGHTS = 11, DDIDX_PATH_HEIGHTS = 12, DDIDX_VIEW_CLIPPING = 14, + TOP_TOOLBAR_VIEW_MENU_COUNT } TOP_TOOLBAR_VIEW_MENU_DDIDX; typedef enum { @@ -3045,8 +3046,8 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { gDropdownItemsFormat[10] = STR_TOGGLE_OPTION; gDropdownItemsFormat[11] = STR_TOGGLE_OPTION; gDropdownItemsFormat[12] = STR_TOGGLE_OPTION; - gDropdownItemsFormat[13] = STR_EMPTY; - gDropdownItemsFormat[14] = STR_TOGGLE_OPTION; + gDropdownItemsFormat[13] = DROPDOWN_SEPARATOR; + gDropdownItemsFormat[DDIDX_VIEW_CLIPPING] = STR_TOGGLE_OPTION; gDropdownItemsArgs[0] = STR_UNDERGROUND_VIEW; gDropdownItemsArgs[1] = STR_REMOVE_BASE_LAND; @@ -3059,7 +3060,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { gDropdownItemsArgs[10] = STR_HEIGHT_MARKS_ON_LAND; gDropdownItemsArgs[11] = STR_HEIGHT_MARKS_ON_RIDE_TRACKS; gDropdownItemsArgs[12] = STR_HEIGHT_MARKS_ON_PATHS; - gDropdownItemsArgs[14] = STR_VIEW_CLIPPING; + gDropdownItemsArgs[DDIDX_VIEW_CLIPPING] = STR_VIEW_CLIPPING; window_dropdown_show_text( w->x + widget->left, @@ -3067,7 +3068,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { widget->bottom - widget->top + 1, w->colours[1] | 0x80, 0, - 15 + TOP_TOOLBAR_VIEW_MENU_COUNT ); // Set checkmarks @@ -3095,7 +3096,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { if (mainViewport->flags & VIEWPORT_FLAG_PATH_HEIGHTS) dropdown_set_checked(12, true); if (mainViewport->flags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) - dropdown_set_checked(14, true); + dropdown_set_checked(DDIDX_VIEW_CLIPPING, true); gDropdownDefaultIndex = DDIDX_UNDERGROUND_INSIDE; } diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index d42384075b..da3320a6f0 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -43,11 +43,11 @@ rct_widget window_view_clipping_widgets[] = { { WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, STR_NONE, STR_NONE }, // panel / background { WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_VIEW_CLIPPING, STR_WINDOW_TITLE_TIP }, // title bar { WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button - { WWT_CHECKBOX, 1, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box - { WWT_SPINNER, 1, 71, 104, 34, 45, STR_NONE, STR_NONE }, // clip height value - { WWT_DROPDOWN_BUTTON, 1, 93, 103, 35, 39, STR_NUMERIC_UP, STR_NONE }, // clip height increase - { WWT_DROPDOWN_BUTTON, 1, 93, 103, 40, 44, STR_NUMERIC_DOWN, STR_NONE }, // clip height decrease - { WWT_SCROLL, 1, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar + { WWT_CHECKBOX, 0, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box + { WWT_SPINNER, 0, 71, 130, 34, 45, STR_NONE, STR_NONE }, // clip height value + { WWT_DROPDOWN_BUTTON, 0, 119, 129, 35, 39, STR_NUMERIC_UP, STR_NONE }, // clip height increase + { WWT_DROPDOWN_BUTTON, 0, 119, 129, 40, 44, STR_NUMERIC_DOWN, STR_NONE }, // clip height decrease + { WWT_SCROLL, 0, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar { WIDGETS_END } }; @@ -238,25 +238,25 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) int y; 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, w->colours[1], x, y); + gfx_draw_string_left(dpi, STR_VIEW_CLIPPING_HEIGHT_VALUE, NULL, w->colours[0], 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_FORMAT_INTEGER, &gClipHeight, w->colours[1], x, y); //Printing the raw value. + //gfx_draw_string_left(dpi, STR_FORMAT_INTEGER, &gClipHeight, w->colours[0], x + 60, y); //Printing the raw value. // Print the value in the configured measurement units. - fixed16_1dp clipHeightValueInMeters; - sint16 clipHeightValueInFeet; + fixed32_2dp clipHeightValueInMeters; + fixed16_1dp clipHeightValueInFeet; switch (gConfigGeneral.measurement_format) { case MEASUREMENT_FORMAT_METRIC: case MEASUREMENT_FORMAT_SI: - clipHeightValueInMeters = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2 * 1.5 - FIXED_1DP(10, 5)); - gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[1], x + 40, y); + clipHeightValueInMeters = (fixed32_2dp)(FIXED_2DP(gClipHeight, 0) / 2 * 1.5 - FIXED_2DP(10, 50)); + gfx_draw_string_left(dpi, STR_UNIT2DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[0], x, y); break; case MEASUREMENT_FORMAT_IMPERIAL: default: - clipHeightValueInFeet = gClipHeight / 2 * 5 - 35; - gfx_draw_string_left(dpi, STR_UNIT_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[1], x + 40, y); + clipHeightValueInFeet = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2.0 * 5 - FIXED_1DP(35, 0)); + gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[0], x, y); break; } } diff --git a/test/testpaint/compat.c b/test/testpaint/compat.c index 5cef9c3d8f..7b8a1a671e 100644 --- a/test/testpaint/compat.c +++ b/test/testpaint/compat.c @@ -36,6 +36,7 @@ sint16 gMapSizeUnits; sint16 gMapBaseZ; bool gTrackDesignSaveMode = false; uint8 gTrackDesignSaveRideIndex = 255; +uint8 gClipHeight = 255; const rct_xy16 TileDirectionDelta[] = { {-32, 0}, @@ -165,5 +166,3 @@ bool track_element_is_inverted(rct_map_element *trackElement) { return trackElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED; } - -uint8 gClipHeight = 255; From e8f97da2c6ac86025cbc475d64b67eaee75f00fe Mon Sep 17 00:00:00 2001 From: zaxcav Date: Mon, 9 Jan 2017 22:23:05 +0100 Subject: [PATCH 25/30] Implement further changes as requested by reviewer. Add toggling displayed clip height value between the raw value and value in units. --- data/language/en-GB.txt | 7 +-- src/openrct2/interface/Theme.cpp | 2 +- src/openrct2/interface/viewport.h | 2 +- src/openrct2/localisation/string_ids.h | 9 ++-- src/openrct2/windows/view_clipping.c | 64 +++++++++++++++++--------- 5 files changed, 52 insertions(+), 32 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 80238bf106..b189903179 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4315,9 +4315,10 @@ STR_6003 :Cut-away View STR_6004 :Enable cut-away view STR_6005 :Cut-away view only displays map elements at or below the cut height STR_6006 :Cut height -STR_6007 :Select cut height -STR_6008 :{COMMA2DP32}m -STR_6009 :{COMMA1DP16}ft +STR_6007 :Click to toggle raw value<->value in measurement units +STR_6008 :Select cut height +STR_6009 :{COMMA2DP32}m +STR_6010 :{COMMA1DP16}ft ############# # Scenarios # diff --git a/src/openrct2/interface/Theme.cpp b/src/openrct2/interface/Theme.cpp index bde4ab0b3e..4c419ce5f8 100644 --- a/src/openrct2/interface/Theme.cpp +++ b/src/openrct2/interface/Theme.cpp @@ -167,7 +167,7 @@ WindowThemeDesc WindowThemeDescriptors[] = { THEME_WC(WC_EDITOR_SCENARIO_BOTTOM_TOOLBAR), STR_THEMES_WINDOW_BOTTOM_TOOLBAR_SCENARIO_EDITOR, COLOURS_3(TRANSLUCENT(COLOUR_LIGHT_BROWN), TRANSLUCENT(COLOUR_LIGHT_BROWN), TRANSLUCENT(COLOUR_MOSS_GREEN) ) }, { THEME_WC(WC_TITLE_EDITOR), STR_TITLE_EDITOR_TITLE, COLOURS_3(COLOUR_GREY, COLOUR_OLIVE_GREEN, COLOUR_OLIVE_GREEN ) }, { THEME_WC(WC_TILE_INSPECTOR), STR_TILE_INSPECTOR_TITLE, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, - { THEME_WC(WC_VIEW_CLIPPING), STR_TILE_INSPECTOR_TITLE, COLOURS_1(COLOUR_LIGHT_BLUE ) }, + { THEME_WC(WC_VIEW_CLIPPING), STR_VIEW_CLIPPING_TITLE, COLOURS_1(COLOUR_DARK_GREEN ) }, { THEME_WC(WC_CHANGELOG), STR_CHANGELOG_TITLE, COLOURS_2(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_MULTIPLAYER), STR_MULTIPLAYER, COLOURS_3(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, { THEME_WC(WC_PLAYER), STR_THEMES_WINDOW_PLAYER, COLOURS_3(COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE ) }, diff --git a/src/openrct2/interface/viewport.h b/src/openrct2/interface/viewport.h index 23d3f54b46..1aa293f887 100644 --- a/src/openrct2/interface/viewport.h +++ b/src/openrct2/interface/viewport.h @@ -40,7 +40,7 @@ enum { VIEWPORT_FLAG_INVISIBLE_SPRITES = (1 << 14), VIEWPORT_FLAG_15 = (1 << 15), VIEWPORT_FLAG_SEETHROUGH_PATHS = (1 << 16), - VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT = (1 << 17) + VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT = (1 << 17), }; enum { diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index c8c5d87ce6..724a273b2a 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3654,13 +3654,14 @@ enum { STR_ENABLE_LIGHTING_EFFECTS = 6001, STR_ENABLE_LIGHTING_EFFECTS_TIP = 6002, - STR_VIEW_CLIPPING = 6003, + STR_VIEW_CLIPPING_TITLE = 6003, STR_VIEW_CLIPPING_HEIGHT_ENABLE = 6004, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP = 6005, STR_VIEW_CLIPPING_HEIGHT_VALUE = 6006, - STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP = 6007, - STR_UNIT2DP_SUFFIX_METRES = 6008, - STR_UNIT1DP_SUFFIX_FEET = 6009, + STR_VIEW_CLIPPING_HEIGHT_VALUE_TOGGLE = 6007, + STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP = 6008, + STR_UNIT2DP_SUFFIX_METRES = 6009, + STR_UNIT1DP_SUFFIX_FEET = 6010, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index da3320a6f0..f306e54f44 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -34,20 +34,27 @@ enum WINDOW_VIEW_CLIPPING_WIDGET_IDX { WIDX_CLIP_HEIGHT_SLIDER }; +typedef enum DISPLAY_TYPE { + DISPLAY_RAW = 0, + DISPLAY_UNITS = 1 +} clip_value_display_type; + +clip_value_display_type gClipHeightDisplayType = DISPLAY_UNITS; + #pragma region Widgets #define WW 160 #define WH 70 rct_widget window_view_clipping_widgets[] = { - { WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, STR_NONE, STR_NONE }, // panel / background - { WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_VIEW_CLIPPING, STR_WINDOW_TITLE_TIP }, // title bar - { WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button - { WWT_CHECKBOX, 0, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box - { WWT_SPINNER, 0, 71, 130, 34, 45, STR_NONE, STR_NONE }, // clip height value - { WWT_DROPDOWN_BUTTON, 0, 119, 129, 35, 39, STR_NUMERIC_UP, STR_NONE }, // clip height increase - { WWT_DROPDOWN_BUTTON, 0, 119, 129, 40, 44, STR_NUMERIC_DOWN, STR_NONE }, // clip height decrease - { WWT_SCROLL, 0, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar + { WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, STR_NONE, STR_NONE }, // panel / background + { WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_VIEW_CLIPPING_TITLE, STR_WINDOW_TITLE_TIP }, // title bar + { WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button + { WWT_CHECKBOX, 0, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box + { WWT_SPINNER, 0, 90, 149, 34, 45, STR_NONE, STR_VIEW_CLIPPING_HEIGHT_VALUE_TOGGLE }, // clip height value + { WWT_DROPDOWN_BUTTON, 0, 138, 148, 35, 39, STR_NUMERIC_UP, STR_NONE }, // clip height increase + { WWT_DROPDOWN_BUTTON, 0, 138, 148, 40, 44, STR_NUMERIC_DOWN, STR_NONE }, // clip height decrease + { WWT_SCROLL, 0, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar { WIDGETS_END } }; @@ -126,6 +133,7 @@ void window_view_clipping_open() window->widgets = window_view_clipping_widgets; window->enabled_widgets = (1ULL << WIDX_CLOSE) | (1ULL << WIDX_CLIP_HEIGHT_CHECKBOX) | + (1ULL << WIDX_CLIP_HEIGHT_VALUE) | (1ULL << WIDX_CLIP_HEIGHT_INCREASE) | (1ULL << WIDX_CLIP_HEIGHT_DECREASE) | (1ULL << WIDX_CLIP_HEIGHT_SLIDER); @@ -196,6 +204,11 @@ static void window_view_clipping_mouseup(rct_window *w, int widgetIndex) if (mainWindow != NULL) window_invalidate(mainWindow); break; + case WIDX_CLIP_HEIGHT_VALUE: + // Toggle display of the cut height value in RAW vs UNITS + gClipHeightDisplayType = !gClipHeightDisplayType; + window_invalidate(w); + break; } } @@ -234,30 +247,35 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) window_draw_widgets(w, dpi); // Clip height value - int x; - int y; - x = w->x + 8; - y = w->y + w->widgets[WIDX_CLIP_HEIGHT_VALUE].top; + sint32 x = w->x + 8; + sint32 y = w->y + w->widgets[WIDX_CLIP_HEIGHT_VALUE].top; gfx_draw_string_left(dpi, STR_VIEW_CLIPPING_HEIGHT_VALUE, NULL, w->colours[0], 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_FORMAT_INTEGER, &gClipHeight, w->colours[0], x + 60, y); //Printing the raw value. - // Print the value in the configured measurement units. fixed32_2dp clipHeightValueInMeters; fixed16_1dp clipHeightValueInFeet; - switch (gConfigGeneral.measurement_format) { - case MEASUREMENT_FORMAT_METRIC: - case MEASUREMENT_FORMAT_SI: - clipHeightValueInMeters = (fixed32_2dp)(FIXED_2DP(gClipHeight, 0) / 2 * 1.5 - FIXED_2DP(10, 50)); - gfx_draw_string_left(dpi, STR_UNIT2DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[0], x, y); - break; - case MEASUREMENT_FORMAT_IMPERIAL: + switch (gClipHeightDisplayType) { + case DISPLAY_RAW: default: - clipHeightValueInFeet = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2.0 * 5 - FIXED_1DP(35, 0)); - gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[0], x, y); + gfx_draw_string_left(dpi, STR_FORMAT_INTEGER, &gClipHeight, w->colours[0], x, y); //Printing the raw value. break; + + case DISPLAY_UNITS: + // Print the value in the configured measurement units. + switch (gConfigGeneral.measurement_format) { + case MEASUREMENT_FORMAT_METRIC: + case MEASUREMENT_FORMAT_SI: + clipHeightValueInMeters = (fixed32_2dp)(FIXED_2DP(gClipHeight, 0) / 2 * 1.5 - FIXED_2DP(10, 50)); + gfx_draw_string_left(dpi, STR_UNIT2DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[0], x, y); + break; + case MEASUREMENT_FORMAT_IMPERIAL: + default: + clipHeightValueInFeet = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2.0 * 5 - FIXED_1DP(35, 0)); + gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[0], x, y); + break; + } } } From 93e5e80e263a5cfb42e251d5d4eed276b9c808fa Mon Sep 17 00:00:00 2001 From: zaxcav Date: Tue, 10 Jan 2017 20:53:10 +0100 Subject: [PATCH 26/30] Correct code alignment in widget placement code (tab based). --- src/openrct2/windows/view_clipping.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index f306e54f44..218f237346 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -53,8 +53,8 @@ rct_widget window_view_clipping_widgets[] = { { WWT_CHECKBOX, 0, 11, 149, 19, 29, STR_VIEW_CLIPPING_HEIGHT_ENABLE, STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP }, // clip height enable/disable check box { WWT_SPINNER, 0, 90, 149, 34, 45, STR_NONE, STR_VIEW_CLIPPING_HEIGHT_VALUE_TOGGLE }, // clip height value { WWT_DROPDOWN_BUTTON, 0, 138, 148, 35, 39, STR_NUMERIC_UP, STR_NONE }, // clip height increase - { WWT_DROPDOWN_BUTTON, 0, 138, 148, 40, 44, STR_NUMERIC_DOWN, STR_NONE }, // clip height decrease - { WWT_SCROLL, 0, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar + { WWT_DROPDOWN_BUTTON, 0, 138, 148, 40, 44, STR_NUMERIC_DOWN, STR_NONE }, // clip height decrease + { WWT_SCROLL, 0, 11, 149, 49, 61, SCROLL_HORIZONTAL, STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP }, // clip height scrollbar { WIDGETS_END } }; From 0d81835224d3973d4668efc2f77f90760109dd73 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Thu, 12 Jan 2017 22:33:33 +0100 Subject: [PATCH 27/30] Correct mistakes during rebase. --- data/language/en-GB.txt | 15 ++++++++------- src/openrct2/localisation/string_ids.h | 17 +++++++++-------- src/openrct2/windows/top_toolbar.c | 3 ++- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index b189903179..8c727f58f3 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4312,13 +4312,14 @@ STR_6000 :Enter new value STR_6001 :Enable lighting effects (experimental) STR_6002 :{SMALLFONT}{BLACK}Lamps and rides will be lit up at night.{NEWLINE}Requires rendering engine to be set to hardware display. STR_6003 :Cut-away View -STR_6004 :Enable cut-away view -STR_6005 :Cut-away view only displays map elements at or below the cut height -STR_6006 :Cut height -STR_6007 :Click to toggle raw value<->value in measurement units -STR_6008 :Select cut height -STR_6009 :{COMMA2DP32}m -STR_6010 :{COMMA1DP16}ft +STR_6004 :Cut-away View +STR_6005 :Enable cut-away view +STR_6006 :Cut-away view only displays map elements at or below the cut height +STR_6007 :Cut height +STR_6008 :Click to toggle raw value<->value in measurement units +STR_6009 :Select cut height +STR_6010 :{COMMA2DP32}m +STR_6011 :{COMMA1DP16}ft ############# # Scenarios # diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index 724a273b2a..3e693925e3 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3654,14 +3654,15 @@ enum { STR_ENABLE_LIGHTING_EFFECTS = 6001, STR_ENABLE_LIGHTING_EFFECTS_TIP = 6002, - STR_VIEW_CLIPPING_TITLE = 6003, - STR_VIEW_CLIPPING_HEIGHT_ENABLE = 6004, - STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP = 6005, - STR_VIEW_CLIPPING_HEIGHT_VALUE = 6006, - STR_VIEW_CLIPPING_HEIGHT_VALUE_TOGGLE = 6007, - STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP = 6008, - STR_UNIT2DP_SUFFIX_METRES = 6009, - STR_UNIT1DP_SUFFIX_FEET = 6010, + STR_VIEW_CLIPPING_MENU = 6003, + STR_VIEW_CLIPPING_TITLE = 6004, + STR_VIEW_CLIPPING_HEIGHT_ENABLE = 6005, + STR_VIEW_CLIPPING_HEIGHT_ENABLE_TIP = 6006, + STR_VIEW_CLIPPING_HEIGHT_VALUE = 6007, + STR_VIEW_CLIPPING_HEIGHT_VALUE_TOGGLE = 6008, + STR_VIEW_CLIPPING_HEIGHT_SCROLL_TIP = 6009, + STR_UNIT2DP_SUFFIX_METRES = 6010, + STR_UNIT1DP_SUFFIX_FEET = 6011, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 diff --git a/src/openrct2/windows/top_toolbar.c b/src/openrct2/windows/top_toolbar.c index f1680aaf4b..8781785bef 100644 --- a/src/openrct2/windows/top_toolbar.c +++ b/src/openrct2/windows/top_toolbar.c @@ -99,6 +99,7 @@ typedef enum { DDIDX_TRACK_HEIGHTS = 11, DDIDX_PATH_HEIGHTS = 12, DDIDX_VIEW_CLIPPING = 14, + TOP_TOOLBAR_VIEW_MENU_COUNT } TOP_TOOLBAR_VIEW_MENU_DDIDX; @@ -3060,7 +3061,7 @@ void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) { gDropdownItemsArgs[10] = STR_HEIGHT_MARKS_ON_LAND; gDropdownItemsArgs[11] = STR_HEIGHT_MARKS_ON_RIDE_TRACKS; gDropdownItemsArgs[12] = STR_HEIGHT_MARKS_ON_PATHS; - gDropdownItemsArgs[DDIDX_VIEW_CLIPPING] = STR_VIEW_CLIPPING; + gDropdownItemsArgs[DDIDX_VIEW_CLIPPING] = STR_VIEW_CLIPPING_MENU; window_dropdown_show_text( w->x + widget->left, From 6a4ced856e01dbb6ffafe15628dc328fbde2d721 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Thu, 12 Jan 2017 22:37:54 +0100 Subject: [PATCH 28/30] Minor code changes per reviewer comments. --- src/openrct2/paint/sprite/sprite.c | 1 - src/openrct2/windows/themes.c | 2 +- src/openrct2/windows/view_clipping.c | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/openrct2/paint/sprite/sprite.c b/src/openrct2/paint/sprite/sprite.c index cf9482bf1a..3bbf720dba 100644 --- a/src/openrct2/paint/sprite/sprite.c +++ b/src/openrct2/paint/sprite/sprite.c @@ -21,7 +21,6 @@ #include "../../ride/ride_data.h" #include "../../interface/viewport.h" #include "../../ride/vehicle_paint.h" -#include "../../localisation/localisation.h" /** * Paint Quadrant diff --git a/src/openrct2/windows/themes.c b/src/openrct2/windows/themes.c index c5c1a37729..70467d57fb 100644 --- a/src/openrct2/windows/themes.c +++ b/src/openrct2/windows/themes.c @@ -234,6 +234,7 @@ static rct_windowclass window_themes_tab_5_classes[] = { static rct_windowclass window_themes_tab_6_classes[] = { WC_CHEATS, WC_TILE_INSPECTOR, + WC_VIEW_CLIPPING, WC_THEMES, WC_TITLE_EDITOR, WC_OPTIONS, @@ -245,7 +246,6 @@ static rct_windowclass window_themes_tab_6_classes[] = { WC_MULTIPLAYER, WC_PLAYER, WC_CHAT, - WC_VIEW_CLIPPING, }; static rct_windowclass window_themes_tab_7_classes[] = { diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index 218f237346..534734324a 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -1,4 +1,4 @@ -#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers +#pragma region Copyright (c) 2014-2017 OpenRCT2 Developers /***************************************************************************** * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. * @@ -35,8 +35,8 @@ enum WINDOW_VIEW_CLIPPING_WIDGET_IDX { }; typedef enum DISPLAY_TYPE { - DISPLAY_RAW = 0, - DISPLAY_UNITS = 1 + DISPLAY_RAW, + DISPLAY_UNITS } clip_value_display_type; clip_value_display_type gClipHeightDisplayType = DISPLAY_UNITS; @@ -198,7 +198,7 @@ static void window_view_clipping_mouseup(rct_window *w, int widgetIndex) window_invalidate(mainWindow); break; case WIDX_CLIP_HEIGHT_DECREASE: - if(gClipHeight > 0) + if (gClipHeight > 0) window_view_clipping_set_clipheight(w, gClipHeight - 1); mainWindow = window_get_main(); if (mainWindow != NULL) From 80b0df3b74535c02d07082d64221c60754bff779 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Sat, 14 Jan 2017 21:17:41 +0100 Subject: [PATCH 29/30] Add formatting to tooltip texts; Fix printing of raw clip height value. --- data/language/en-GB.txt | 6 +++--- src/openrct2/windows/view_clipping.c | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 8c727f58f3..786722a52c 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4314,10 +4314,10 @@ STR_6002 :{SMALLFONT}{BLACK}Lamps and rides will be lit up at night.{NEWLINE} STR_6003 :Cut-away View STR_6004 :Cut-away View STR_6005 :Enable cut-away view -STR_6006 :Cut-away view only displays map elements at or below the cut height +STR_6006 :{SMALLFONT}{BLACK}Cut-away view only displays map elements at or below the cut height STR_6007 :Cut height -STR_6008 :Click to toggle raw value<->value in measurement units -STR_6009 :Select cut height +STR_6008 :{SMALLFONT}{BLACK}Click to toggle raw value<->value in measurement units +STR_6009 :{SMALLFONT}{BLACK}Select cut height STR_6010 :{COMMA2DP32}m STR_6011 :{COMMA1DP16}ft diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index 534734324a..b0f6433fb1 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -256,10 +256,11 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) fixed32_2dp clipHeightValueInMeters; fixed16_1dp clipHeightValueInFeet; + sint32 clipHeightRawValue = (sint32)gClipHeight; switch (gClipHeightDisplayType) { case DISPLAY_RAW: default: - gfx_draw_string_left(dpi, STR_FORMAT_INTEGER, &gClipHeight, w->colours[0], x, y); //Printing the raw value. + gfx_draw_string_left(dpi, STR_FORMAT_INTEGER, &clipHeightRawValue, w->colours[0], x, y); //Printing the raw value. break; case DISPLAY_UNITS: From a4b476ac92cd390fb6e882d887cf293e9185a885 Mon Sep 17 00:00:00 2001 From: zaxcav Date: Wed, 18 Jan 2017 21:03:19 +0100 Subject: [PATCH 30/30] Minor changes as requested by reviewer. --- src/openrct2/windows/top_toolbar.c | 1 + src/openrct2/windows/view_clipping.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/openrct2/windows/top_toolbar.c b/src/openrct2/windows/top_toolbar.c index 8781785bef..3feb68b2e2 100644 --- a/src/openrct2/windows/top_toolbar.c +++ b/src/openrct2/windows/top_toolbar.c @@ -98,6 +98,7 @@ typedef enum { DDIDX_LAND_HEIGHTS = 10, DDIDX_TRACK_HEIGHTS = 11, DDIDX_PATH_HEIGHTS = 12, + // 13 is a separator DDIDX_VIEW_CLIPPING = 14, TOP_TOOLBAR_VIEW_MENU_COUNT diff --git a/src/openrct2/windows/view_clipping.c b/src/openrct2/windows/view_clipping.c index b0f6433fb1..c11d127e96 100644 --- a/src/openrct2/windows/view_clipping.c +++ b/src/openrct2/windows/view_clipping.c @@ -268,12 +268,12 @@ static void window_view_clipping_paint(rct_window *w, rct_drawpixelinfo *dpi) switch (gConfigGeneral.measurement_format) { case MEASUREMENT_FORMAT_METRIC: case MEASUREMENT_FORMAT_SI: - clipHeightValueInMeters = (fixed32_2dp)(FIXED_2DP(gClipHeight, 0) / 2 * 1.5 - FIXED_2DP(10, 50)); + clipHeightValueInMeters = (fixed32_2dp)(FIXED_2DP(gClipHeight, 0) / 2 * 1.5f - FIXED_2DP(10, 50)); gfx_draw_string_left(dpi, STR_UNIT2DP_SUFFIX_METRES, &clipHeightValueInMeters, w->colours[0], x, y); break; case MEASUREMENT_FORMAT_IMPERIAL: default: - clipHeightValueInFeet = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2.0 * 5 - FIXED_1DP(35, 0)); + clipHeightValueInFeet = (fixed16_1dp)(FIXED_1DP(gClipHeight, 0) / 2.0f * 5 - FIXED_1DP(35, 0)); gfx_draw_string_left(dpi, STR_UNIT1DP_SUFFIX_FEET, &clipHeightValueInFeet, w->colours[0], x, y); break; }