1
0
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:
IntelOrca
2014-09-23 21:22:14 +01:00
parent 912c80f867
commit 91bfc392c9
4 changed files with 45 additions and 13 deletions

View File

@@ -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);
}
}
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;
}