Added tooltip to colour selector

This commit is contained in:
LRFLEW 2015-09-01 00:08:28 -06:00
parent 5abb923525
commit 7ef15a4326
7 changed files with 83 additions and 24 deletions

View File

@ -3854,3 +3854,35 @@ STR_5512 :Save Game As
STR_5513 :(Quick) save game
STR_5514 :Disable vandalism
STR_5515 :{SMALLFONT}{BLACK}Stops guests from vandalising your park when they're angry
STR_5516 :Colour 00
STR_5517 :Colour 01
STR_5518 :Colour 02
STR_5519 :Colour 03
STR_5520 :Colour 04
STR_5521 :Colour 05
STR_5522 :Colour 06
STR_5523 :Colour 07
STR_5524 :Colour 08
STR_5525 :Colour 09
STR_5526 :Colour 0A
STR_5527 :Colour 0B
STR_5528 :Colour 0C
STR_5529 :Colour 0D
STR_5530 :Colour 0E
STR_5531 :Colour 0F
STR_5532 :Colour 10
STR_5533 :Colour 11
STR_5534 :Colour 12
STR_5535 :Colour 13
STR_5536 :Colour 14
STR_5537 :Colour 15
STR_5538 :Colour 16
STR_5539 :Colour 17
STR_5540 :Colour 18
STR_5541 :Colour 19
STR_5542 :Colour 1A
STR_5543 :Colour 1B
STR_5544 :Colour 1C
STR_5545 :Colour 1D
STR_5546 :Colour 1E
STR_5547 :Colour 1F

View File

@ -1197,6 +1197,12 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
if (dropdown_index == -1) return;
if (gDropdownIsColour && gDropdownLastColourHover != dropdown_index) {
gDropdownLastColourHover = dropdown_index;
window_tooltip_close();
window_tooltip_show(STR_COLOUR_NAMES_START + dropdown_index, x, y);
}
// _dropdown_unknown?? highlighted?
if (dropdown_index < 32 && RCT2_GLOBAL(0x009DED34, sint32) & (1 << dropdown_index))return;
@ -1206,6 +1212,9 @@ void input_state_widget_pressed(int x, int y, int state, int widgetIndex, rct_wi
// _dropdown_highlighted_index
RCT2_GLOBAL(0x009DEBA2, sint16) = dropdown_index;
window_invalidate_by_class(WC_DROPDOWN);
} else {
gDropdownLastColourHover = -1;
window_tooltip_close();
}
}

View File

@ -2076,6 +2076,8 @@ enum {
STR_CHEAT_DISABLE_VANDALISM = 5514,
STR_CHEAT_DISABLE_VANDALISM_TIP = 5515,
STR_COLOUR_NAMES_START = 5516,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768
};

View File

@ -55,6 +55,8 @@ sint64 gDropdownItemsArgs[64];
// Replaces 0x009DED38
uint32 gDropdownItemsChecked;
uint32 *gDropdownItemsDisabled = RCT2_ADDRESS(0x009DED34, uint32);
bool gDropdownIsColour;
int gDropdownLastColourHover;
static void window_dropdown_paint(rct_window *w, rct_drawpixelinfo *dpi);
@ -188,6 +190,7 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo
RCT2_GLOBAL(0x009DED40, sint32) = _dropdown_item_width;
RCT2_GLOBAL(0x009DED3C, sint32) = _dropdown_item_height;
RCT2_GLOBAL(0x009DEBA2, sint16) = _dropdown_highlighted_index;
gDropdownIsColour = false;
}
/**
@ -266,6 +269,7 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl
RCT2_GLOBAL(0x009DED40, sint32) = _dropdown_item_width;
RCT2_GLOBAL(0x009DED3C, sint32) = _dropdown_item_height;
RCT2_GLOBAL(0x009DEBA2, sint16) = _dropdown_highlighted_index;
gDropdownIsColour = false;
}
void window_dropdown_close()
@ -429,4 +433,6 @@ void window_dropdown_show_colour_available(rct_window *w, rct_widget *widget, ui
gAppropriateImageDropdownItemsPerRow[numItems]
);
gDropdownIsColour = true;
gDropdownLastColourHover = -1;
}

View File

@ -37,6 +37,8 @@ extern uint16 gDropdownItemsFormat[64];
extern sint64 gDropdownItemsArgs[64];
extern uint32 gDropdownItemsChecked;
extern uint32 *gDropdownItemsDisabled;
extern bool gDropdownIsColour;
extern int gDropdownLastColourHover;
void window_dropdown_show_text(int x, int y, int extray, uint8 colour, uint8 flags, int num_items);
void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colour, uint8 flags, int num_items, int width);

View File

@ -79,30 +79,11 @@ void window_tooltip_reset(int x, int y)
}
uint8* gTooltip_text_buffer = RCT2_ADDRESS(RCT2_ADDRESS_TOOLTIP_TEXT_BUFFER, uint8);
/**
*
* rct2: 0x006EA10D
*/
void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y)
void window_tooltip_show(rct_string_id id, int x, int y)
{
rct_window *w;
rct_widget *widget;
int width, height;
if (widgetWindow == NULL || widgetIndex == -1)
return;
widget = &widgetWindow->widgets[widgetIndex];
window_event_invalidate_call(widgetWindow);
if (widget->tooltip == 0xFFFF)
return;
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WINDOW_CLASS, rct_windowclass) = widgetWindow->classification;
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WINDOW_NUMBER, rct_windownumber) = widgetWindow->number;
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WIDGET_INDEX, uint16) = widgetIndex;
if (window_event_tooltip_call(widgetWindow, widgetIndex) == (rct_string_id)STR_NONE)
return;
w = window_find_by_class(WC_ERROR);
if (w != NULL)
@ -111,7 +92,7 @@ void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y
RCT2_GLOBAL(0x0142006C, sint32) = -1;
char* buffer = RCT2_ADDRESS(RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, char);
format_string(buffer, widget->tooltip, (void*)0x013CE952);
format_string(buffer, id, (void*)0x013CE952);
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = FONT_SPRITE_BASE_MEDIUM;
int tooltip_text_width;
@ -131,7 +112,7 @@ void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y
window_tooltip_widgets[WIDX_BACKGROUND].bottom = height;
memcpy(gTooltip_text_buffer, buffer, 512);
x = clamp(0, x - (width / 2), RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, uint16) - width);
int max_y = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, uint16) - height;
@ -150,12 +131,38 @@ void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y
&window_tooltip_events,
WC_TOOLTIP,
WF_TRANSPARENT | WF_STICK_TO_FRONT
);
);
w->widgets = window_tooltip_widgets;
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_NOT_SHOWN_TICKS, uint16) = 0;
}
/**
*
* rct2: 0x006EA10D
*/
void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y)
{
rct_widget *widget;
if (widgetWindow == NULL || widgetIndex == -1)
return;
widget = &widgetWindow->widgets[widgetIndex];
window_event_invalidate_call(widgetWindow);
if (widget->tooltip == 0xFFFF)
return;
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WINDOW_CLASS, rct_windowclass) = widgetWindow->classification;
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WINDOW_NUMBER, rct_windownumber) = widgetWindow->number;
RCT2_GLOBAL(RCT2_ADDRESS_TOOLTIP_WIDGET_INDEX, uint16) = widgetIndex;
if (window_event_tooltip_call(widgetWindow, widgetIndex) == (rct_string_id)STR_NONE)
return;
window_tooltip_show(widget->tooltip, x, y);
}
/**
*
* rct2: 0x006E98C6

View File

@ -24,6 +24,7 @@
#include "../interface/window.h"
void window_tooltip_reset(int x, int y);
void window_tooltip_show(rct_string_id id, int x, int y);
void window_tooltip_open(rct_window *widgetWindow, int widgetIndex, int x, int y);
void window_tooltip_close();