mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-02-03 18:07:53 +01:00
implement window_dropdown_show_colour
This commit is contained in:
@@ -380,6 +380,11 @@ int dropdown_index_from_point(int x, int y, rct_window* w){
|
||||
return dropdown_index;
|
||||
}
|
||||
|
||||
void window_dropdown_show_colour(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour)
|
||||
{
|
||||
window_dropdown_show_colour_available(w, widget, dropdownColour, selectedColour, 0xFFFFFFFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* rct2: 0x006ED43D
|
||||
* al: dropdown colour
|
||||
@@ -388,7 +393,38 @@ int dropdown_index_from_point(int x, int y, rct_window* w){
|
||||
* edi: widget
|
||||
* ebp: unknown
|
||||
*/
|
||||
void window_dropdown_show_colour(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour)
|
||||
void window_dropdown_show_colour_available(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour,
|
||||
uint32 availableColours)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x006ED43D, (selectedColour << 8) | dropdownColour, 0, 0, 0, (int)w, (int)widget, 0xFFFFFFFF);
|
||||
int i, numItems;
|
||||
|
||||
// Count number of available colours
|
||||
numItems = 0;
|
||||
for (i = 0; i < 32; i++)
|
||||
if (availableColours & (1 << i))
|
||||
numItems++;
|
||||
|
||||
// Show dropdown
|
||||
window_dropdown_show_image(
|
||||
w->x + widget->left,
|
||||
w->y + widget->top,
|
||||
widget->bottom - widget->top + 1,
|
||||
dropdownColour,
|
||||
0x80,
|
||||
numItems,
|
||||
12,
|
||||
12,
|
||||
gAppropriateImageDropdownItemsPerRow[numItems]
|
||||
);
|
||||
|
||||
// Set items
|
||||
for (i = 0; i < 32; i++) {
|
||||
if (availableColours & (1 << i)) {
|
||||
if (selectedColour == i)
|
||||
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
|
||||
|
||||
gDropdownItemsFormat[i] = 0xFFFE;
|
||||
gDropdownItemsArgs[i] = ((uint64)i << 32) | (0x20000000 | (i << 19) | 5059);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,5 +38,6 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl
|
||||
void window_dropdown_close();
|
||||
int dropdown_index_from_point(int x, int y, rct_window* w);
|
||||
void window_dropdown_show_colour(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour);
|
||||
void window_dropdown_show_colour_available(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour, uint32 availableColours);
|
||||
|
||||
#endif
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "viewport.h"
|
||||
#include "widget.h"
|
||||
#include "window.h"
|
||||
#include "window_dropdown.h"
|
||||
#include "window_scenery.h"
|
||||
|
||||
enum {
|
||||
@@ -580,20 +581,15 @@ static void window_scenery_resize()
|
||||
* rct2: 0x006E1A25
|
||||
*/
|
||||
static void window_scenery_mousedown(int widgetIndex, rct_window* w, rct_widget* widget) {
|
||||
int eax;
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_SCENERY_PRIMARY_COLOUR_BUTTON:
|
||||
eax = (window_scenery_primary_colour << 8) + 0x80 + w->colours[1];
|
||||
RCT2_CALLPROC_X(0x006ED43D, eax, 0, 0, widgetIndex, (int)w, (int)widget, 0xFFFFFFFF);
|
||||
window_dropdown_show_colour(w, widget, w->colours[1], window_scenery_primary_colour);
|
||||
break;
|
||||
case WIDX_SCENERY_SECONDARY_COLOUR_BUTTON:
|
||||
eax = (window_scenery_secondary_colour << 8) + 0x80 + w->colours[1];
|
||||
RCT2_CALLPROC_X(0x006ED43D, eax, 0, 0, widgetIndex, (int)w, (int)widget, 0xFFFFFFFF);
|
||||
window_dropdown_show_colour(w, widget, w->colours[1], window_scenery_secondary_colour);
|
||||
break;
|
||||
case WIDX_SCENERY_TERTIARY_COLOUR_BUTTON:
|
||||
eax = (window_scenery_tertiary_colour << 8) + 0x80 + w->colours[1];
|
||||
RCT2_CALLPROC_X(0x006ED43D, eax, 0, 0, widgetIndex, (int)w, (int)widget, 0xFFFFFFFF);
|
||||
window_dropdown_show_colour(w, widget, w->colours[1], window_scenery_tertiary_colour);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "viewport.h"
|
||||
#include "widget.h"
|
||||
#include "window.h"
|
||||
#include "window_dropdown.h"
|
||||
|
||||
enum {
|
||||
WINDOW_STAFF_TAB_HANDYMEN,
|
||||
@@ -263,7 +264,6 @@ static void window_staff_resize()
|
||||
static void window_staff_mousedown(int widgetIndex, rct_window* w, rct_widget* widget)
|
||||
{
|
||||
short newSelectedTab;
|
||||
int eax;
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_STAFF_HANDYMEN_TAB:
|
||||
@@ -279,8 +279,7 @@ static void window_staff_mousedown(int widgetIndex, rct_window* w, rct_widget* w
|
||||
window_staff_cancel_tools(w);
|
||||
break;
|
||||
case WIDX_STAFF_UNIFORM_COLOR_PICKER:
|
||||
eax = (RCT2_ADDRESS(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8)[RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8)] << 8) + 0x80 + w->colours[1];
|
||||
RCT2_CALLPROC_X(0x006ED43D, eax, 0, 0, widgetIndex, (int)w, (int)widget, 0xFFFFFFFF);
|
||||
window_dropdown_show_colour(w, widget, w->colours[1], RCT2_ADDRESS(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8)[RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8)]);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user