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)