(svn r15423) -Codechange: split widget related types to their own header and add a bit of type strictness.

pull/155/head
rubidium 16 years ago
parent a7264bd5aa
commit 66cb1fe1ff

@ -301,6 +301,21 @@
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\hebrew.txt"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Generating hebrew language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;&#x0D;&#x0A;"
AdditionalDependencies=""
Outputs="..\bin\lang\hebrew.lng"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\hungarian.txt"
>

@ -302,6 +302,21 @@
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\hebrew.txt"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Generating hebrew language file"
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang &quot;$(InputPath)&quot;&#x0D;&#x0A;"
AdditionalDependencies=""
Outputs="..\bin\lang\hebrew.lng"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\src\lang\hungarian.txt"
>

@ -1591,6 +1591,10 @@
RelativePath=".\..\src\waypoint_type.h"
>
</File>
<File
RelativePath=".\..\src\widget_type.h"
>
</File>
<File
RelativePath=".\..\src\win32.h"
>

@ -1588,6 +1588,10 @@
RelativePath=".\..\src\waypoint_type.h"
>
</File>
<File
RelativePath=".\..\src\widget_type.h"
>
</File>
<File
RelativePath=".\..\src\win32.h"
>

@ -328,6 +328,7 @@ viewport_type.h
water.h
waypoint.h
waypoint_type.h
widget_type.h
win32.h
music/win32_m.h
sound/win32_s.h

@ -282,8 +282,8 @@ public:
SetDParam(2, this->wagon_btnstate ? STR_ENGINES : STR_WAGONS);
/* sets the colour of that art thing */
this->widget[RVW_WIDGET_TRAIN_FLUFF_LEFT].color = _company_colours[_local_company];
this->widget[RVW_WIDGET_TRAIN_FLUFF_RIGHT].color = _company_colours[_local_company];
this->widget[RVW_WIDGET_TRAIN_FLUFF_LEFT].colour = _company_colours[_local_company];
this->widget[RVW_WIDGET_TRAIN_FLUFF_RIGHT].colour = _company_colours[_local_company];
}
if (this->window_number == VEH_TRAIN) {

@ -37,7 +37,7 @@
CompanyByte _local_company;
CompanyByte _current_company;
/* NOSAVE: can be determined from company structs */
byte _company_colours[MAX_COMPANIES];
Colours _company_colours[MAX_COMPANIES];
CompanyManagerFace _company_manager_face; ///< for company manager face storage in openttd.cfg
DEFINE_OLD_POOL_GENERIC(Company, Company)
@ -434,7 +434,7 @@ Company *DoStartupNewCompany(bool is_ai)
c->colour = colour;
ResetCompanyLivery(c);
_company_colours[c->index] = c->colour;
_company_colours[c->index] = (Colours)c->colour;
c->money = c->current_loan = 100000;

@ -9,6 +9,7 @@
#include "company_type.h"
#include "tile_type.h"
#include "strings_type.h"
#include "gfx_type.h"
void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner);
void GetNameOfOwner(Owner owner, TileIndex tile);
@ -17,7 +18,7 @@ void SetLocalCompany(CompanyID new_company);
extern CompanyByte _local_company;
extern CompanyByte _current_company;
extern byte _company_colours[MAX_COMPANIES]; ///< NOSAVE: can be determined from company structs
extern Colours _company_colours[MAX_COMPANIES]; ///< NOSAVE: can be determined from company structs
extern CompanyManagerFace _company_manager_face; ///< for company manager face storage in openttd.cfg
bool IsHumanCompany(CompanyID company);

@ -634,7 +634,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
Widget *wi = &this->widget[3 + i];
wi->type = WWT_PANEL;
wi->display_flags = RESIZE_NONE;
wi->color = COLOUR_ORANGE;
wi->colour = COLOUR_ORANGE;
wi->left = 493;
wi->right = 562;
wi->top = 24 + i * 8;

@ -53,7 +53,7 @@ CommandCost CmdSetCompanyColor(TileIndex tile, uint32 flags, uint32 p1, uint32 p
{
if (p2 >= 16) return CMD_ERROR; // max 16 colours
byte colour = p2;
Colours colour = (Colours)p2;
LiveryScheme scheme = (LiveryScheme)GB(p1, 0, 8);
byte state = GB(p1, 8, 2);

@ -124,7 +124,7 @@ struct OskWindow : public Window {
if (HasBit(_keystate, KEYS_SHIFT)) {
ToggleBit(_keystate, KEYS_SHIFT);
this->widget[OSK_WIDGET_SHIFT].color = HasBit(_keystate, KEYS_SHIFT) ? COLOUR_WHITE : COLOUR_GREY;
this->widget[OSK_WIDGET_SHIFT].colour = HasBit(_keystate, KEYS_SHIFT) ? COLOUR_WHITE : COLOUR_GREY;
this->SetDirty();
}
return;

@ -272,7 +272,7 @@ static void Load_PLYR()
while ((index = SlIterateArray()) != -1) {
Company *c = new (index) Company();
SaveLoad_PLYR(c);
_company_colours[index] = c->colour;
_company_colours[index] = (Colours)c->colour;
}
}

@ -1051,7 +1051,7 @@ static bool LoadOldCompany(LoadgameState *ls, int num)
if (c->money == 893288) c->money = c->current_loan = 100000;
}
_company_colours[num] = c->colour;
_company_colours[num] = (Colours)c->colour;
c->inaugurated_year -= ORIGINAL_BASE_YEAR;
return true;

@ -255,7 +255,7 @@ public:
Widget *wi = &this->widget[SLW_CARGOSTART + i];
wi->type = WWT_PANEL;
wi->display_flags = RESIZE_NONE;
wi->color = COLOUR_GREY;
wi->colour = COLOUR_GREY;
wi->left = 89 + i * 14;
wi->right = wi->left + 13;
wi->top = 14;

@ -163,15 +163,15 @@ int GetWidgetFromPos(const Window *w, int x, int y)
* @param top Top edge of the frame
* @param right Right edge of the frame
* @param bottom Bottom edge of the frame
* @param color Colour table to use. @see _colour_gradient
* @param colour Colour table to use. @see _colour_gradient
* @param flags Flags controlling how to draw the frame. @see FrameFlags
*/
void DrawFrameRect(int left, int top, int right, int bottom, int color, FrameFlags flags)
void DrawFrameRect(int left, int top, int right, int bottom, int colour, FrameFlags flags)
{
uint dark = _colour_gradient[color][3];
uint medium_dark = _colour_gradient[color][5];
uint medium_light = _colour_gradient[color][6];
uint light = _colour_gradient[color][7];
uint dark = _colour_gradient[colour][3];
uint medium_dark = _colour_gradient[colour][5];
uint medium_light = _colour_gradient[colour][6];
uint light = _colour_gradient[colour][7];
if (flags & FR_TRANSPARENT) {
GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT, FILLRECT_RECOLOR);
@ -223,7 +223,7 @@ void Window::DrawWidgets() const
case WWT_IMGBTN_2: {
SpriteID img = wi->data;
assert(img != 0);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
/* show different image when clicked for WWT_IMGBTN_2 */
if ((wi->type & WWT_MASK) == WWT_IMGBTN_2 && clicked) img++;
@ -233,16 +233,16 @@ void Window::DrawWidgets() const
case WWT_PANEL:
assert(wi->data == 0);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
break;
case WWT_EDITBOX:
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_LOWERED | FR_DARKENED);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, FR_LOWERED | FR_DARKENED);
break;
case WWT_TEXTBTN:
case WWT_TEXTBTN_2:
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
/* FALL THROUGH */
case WWT_LABEL: {
@ -257,20 +257,20 @@ void Window::DrawWidgets() const
case WWT_TEXT: {
const StringID str = wi->data;
if (str != STR_NULL) DrawStringTruncated(r.left, r.top, str, wi->color, r.right - r.left);
if (str != STR_NULL) DrawStringTruncated(r.left, r.top, str, wi->colour, r.right - r.left);
break;
}
case WWT_INSET: {
const StringID str = wi->data;
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_LOWERED | FR_DARKENED);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, FR_LOWERED | FR_DARKENED);
if (str != STR_NULL) DrawStringTruncated(r.left + 2, r.top + 1, str, TC_FROMSTRING, r.right - r.left - 10);
break;
}
case WWT_MATRIX: {
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
int c = GB(wi->data, 0, 8);
int amt1 = (wi->right - wi->left + 1) / c;
@ -278,32 +278,32 @@ void Window::DrawWidgets() const
int d = GB(wi->data, 8, 8);
int amt2 = (wi->bottom - wi->top + 1) / d;
int color = _colour_gradient[wi->color & 0xF][6];
int colour = _colour_gradient[wi->colour & 0xF][6];
int x = r.left;
for (int ctr = c; ctr > 1; ctr--) {
x += amt1;
GfxFillRect(x, r.top + 1, x, r.bottom - 1, color);
GfxFillRect(x, r.top + 1, x, r.bottom - 1, colour);
}
x = r.top;
for (int ctr = d; ctr > 1; ctr--) {
x += amt2;
GfxFillRect(r.left + 1, x, r.right - 1, x, color);
GfxFillRect(r.left + 1, x, r.right - 1, x, colour);
}
color = _colour_gradient[wi->color & 0xF][4];
colour = _colour_gradient[wi->colour & 0xF][4];
x = r.left - 1;
for (int ctr = c; ctr > 1; ctr--) {
x += amt1;
GfxFillRect(x, r.top + 1, x, r.bottom - 1, color);
GfxFillRect(x, r.top + 1, x, r.bottom - 1, colour);
}
x = r.top - 1;
for (int ctr = d; ctr > 1; ctr--) {
x += amt2;
GfxFillRect(r.left + 1, x, r.right - 1, x, color);
GfxFillRect(r.left + 1, x, r.right - 1, x, colour);
}
break;
@ -316,15 +316,15 @@ void Window::DrawWidgets() const
/* draw up/down buttons */
clicked = ((this->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_UP);
DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, TC_BLACK);
clicked = (((this->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_DOWN));
DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
DoDrawString(DOWNARROW, r.left + 2 + clicked, r.bottom - 9 + clicked, TC_BLACK);
int c1 = _colour_gradient[wi->color & 0xF][3];
int c2 = _colour_gradient[wi->color & 0xF][7];
int c1 = _colour_gradient[wi->colour & 0xF][3];
int c2 = _colour_gradient[wi->colour & 0xF][7];
/* draw "shaded" background */
GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c2);
@ -337,7 +337,7 @@ void Window::DrawWidgets() const
GfxFillRect(r.left + 8, r.top + 10, r.left + 8, r.bottom - 10, c2);
Point pt = HandleScrollbarHittest(&this->vscroll, r.top, r.bottom);
DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (this->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_MIDDLE ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->colour, (this->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_MIDDLE ? FR_LOWERED : FR_NONE);
break;
}
@ -347,15 +347,15 @@ void Window::DrawWidgets() const
/* draw up/down buttons */
clicked = ((this->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_UP | WF_SCROLL2));
DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, TC_BLACK);
clicked = ((this->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_DOWN | WF_SCROLL2));
DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
DoDrawString(DOWNARROW, r.left + 2 + clicked, r.bottom - 9 + clicked, TC_BLACK);
int c1 = _colour_gradient[wi->color & 0xF][3];
int c2 = _colour_gradient[wi->color & 0xF][7];
int c1 = _colour_gradient[wi->colour & 0xF][3];
int c2 = _colour_gradient[wi->colour & 0xF][7];
/* draw "shaded" background */
GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c2);
@ -368,7 +368,7 @@ void Window::DrawWidgets() const
GfxFillRect(r.left + 8, r.top + 10, r.left + 8, r.bottom - 10, c2);
Point pt = HandleScrollbarHittest(&this->vscroll2, r.top, r.bottom);
DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (this->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_MIDDLE | WF_SCROLL2) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->colour, (this->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_MIDDLE | WF_SCROLL2) ? FR_LOWERED : FR_NONE);
break;
}
@ -378,15 +378,15 @@ void Window::DrawWidgets() const
assert(r.bottom - r.top == 11); // To ensure the same sizes are used everywhere!
clicked = ((this->flags4 & (WF_SCROLL_UP | WF_HSCROLL)) == (WF_SCROLL_UP | WF_HSCROLL));
DrawFrameRect(r.left, r.top, r.left + 9, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.left + 9, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
DrawSprite(SPR_ARROW_LEFT, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked);
clicked = ((this->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL)) == (WF_SCROLL_DOWN | WF_HSCROLL));
DrawFrameRect(r.right - 9, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.right - 9, r.top, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
DrawSprite(SPR_ARROW_RIGHT, PAL_NONE, r.right - 8 + clicked, r.top + 1 + clicked);
int c1 = _colour_gradient[wi->color & 0xF][3];
int c2 = _colour_gradient[wi->color & 0xF][7];
int c1 = _colour_gradient[wi->colour & 0xF][3];
int c2 = _colour_gradient[wi->colour & 0xF][7];
/* draw "shaded" background */
GfxFillRect(r.left + 10, r.top, r.right - 10, r.bottom, c2);
@ -400,7 +400,7 @@ void Window::DrawWidgets() const
/* draw actual scrollbar */
Point pt = HandleScrollbarHittest(&this->hscroll, r.left, r.right);
DrawFrameRect(pt.x, r.top, pt.y, r.bottom, wi->color, (this->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL)) == (WF_SCROLL_MIDDLE | WF_HSCROLL) ? FR_LOWERED : FR_NONE);
DrawFrameRect(pt.x, r.top, pt.y, r.bottom, wi->colour, (this->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL)) == (WF_SCROLL_MIDDLE | WF_HSCROLL) ? FR_LOWERED : FR_NONE);
break;
}
@ -411,8 +411,8 @@ void Window::DrawWidgets() const
if (str != STR_NULL) x2 = DrawString(r.left + 6, r.top, str, TC_FROMSTRING);
int c1 = _colour_gradient[wi->color][3];
int c2 = _colour_gradient[wi->color][7];
int c1 = _colour_gradient[wi->colour][3];
int c2 = _colour_gradient[wi->colour][7];
/* Line from upper left corner to start of text */
GfxFillRect(r.left, r.top + 4, r.left + 4, r.top + 4, c1);
@ -441,7 +441,7 @@ void Window::DrawWidgets() const
assert(r.right - r.left == 11); // To ensure the same sizes are used everywhere!
clicked = !!(this->flags4 & WF_STICKY);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
DrawSprite((clicked) ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, r.left + 2 + clicked, r.top + 3 + clicked);
break;
@ -450,7 +450,7 @@ void Window::DrawWidgets() const
assert(r.right - r.left == 11); // To ensure the same sizes are used everywhere!
clicked = !!(this->flags4 & WF_SIZING);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, (clicked) ? FR_LOWERED : FR_NONE);
DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, r.left + 3 + clicked, r.top + 3 + clicked);
break;
@ -460,15 +460,15 @@ void Window::DrawWidgets() const
assert(str == STR_00C5 || str == STR_00C6); // black or silver cross
assert(r.right - r.left == 10); // To ensure the same sizes are used everywhere
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, FR_NONE);
DrawString(r.left + 2, r.top + 2, str, TC_FROMSTRING);
break;
}
case WWT_CAPTION:
assert(r.bottom - r.top == 13); // To ensure the same sizes are used everywhere!
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_BORDERONLY);
DrawFrameRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, wi->color, (this->caption_color == 0xFF) ? FR_LOWERED | FR_DARKENED : FR_LOWERED | FR_DARKENED | FR_BORDERONLY);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, FR_BORDERONLY);
DrawFrameRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, wi->colour, (this->caption_color == 0xFF) ? FR_LOWERED | FR_DARKENED : FR_LOWERED | FR_DARKENED | FR_BORDERONLY);
if (this->caption_color != 0xFF) {
GfxFillRect(r.left + 2, r.top + 2, r.right - 2, r.bottom - 2, _colour_gradient[_company_colours[this->caption_color]][4]);
@ -481,8 +481,8 @@ void Window::DrawWidgets() const
assert(r.bottom - r.top == 11); // ensure consistent size
StringID str = wi->data;
DrawFrameRect(r.left, r.top, r.right - 12, r.bottom, wi->color, FR_NONE);
DrawFrameRect(r.right - 11, r.top, r.right, r.bottom, wi->color, clicked ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right - 12, r.bottom, wi->colour, FR_NONE);
DrawFrameRect(r.right - 11, r.top, r.right, r.bottom, wi->colour, clicked ? FR_LOWERED : FR_NONE);
DrawString(r.right - (clicked ? 8 : 9), r.top + (clicked ? 2 : 1), STR_0225, TC_BLACK);
if (str != STR_NULL) DrawStringTruncated(r.left + 2, r.top + 1, str, TC_BLACK, r.right - r.left - 12);
break;
@ -492,8 +492,8 @@ void Window::DrawWidgets() const
assert(r.bottom - r.top == 11); // ensure consistent size
StringID str = wi->data;
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_LOWERED | FR_DARKENED);
DrawFrameRect(r.right - 11, r.top + 1, r.right - 1, r.bottom - 1, wi->color, clicked ? FR_LOWERED : FR_NONE);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->colour, FR_LOWERED | FR_DARKENED);
DrawFrameRect(r.right - 11, r.top + 1, r.right - 1, r.bottom - 1, wi->colour, clicked ? FR_LOWERED : FR_NONE);
DrawString(r.right - (clicked ? 8 : 9), r.top + (clicked ? 2 : 1), STR_0225, TC_BLACK);
if (str != STR_NULL) DrawStringTruncated(r.left + 2, r.top + 2, str, TC_BLACK, r.right - r.left - 12);
break;
@ -501,7 +501,7 @@ void Window::DrawWidgets() const
}
if (this->IsWidgetDisabled(i)) {
GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, _colour_gradient[wi->color & 0xF][2], FILLRECT_CHECKER);
GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, _colour_gradient[wi->colour & 0xF][2], FILLRECT_CHECKER);
}
}

@ -0,0 +1,126 @@
/* $Id$ */
/** @file widget_type.h Definitions about widgets. */
#ifndef WIDGET_TYPE_H
#define WIDGET_TYPE_H
#include "core/bitmath_func.hpp"
#include "strings_type.h"
#include "gfx_type.h"
/* How the resize system works:
First, you need to add a WWT_RESIZEBOX to the widgets, and you need
to add the flag WDF_RESIZABLE to the window. Now the window is ready
to resize itself.
As you may have noticed, all widgets have a RESIZE_XXX in their line.
This lines controls how the widgets behave on resize. RESIZE_NONE means
it doesn't do anything. Any other option let's one of the borders
move with the changed width/height. So if a widget has
RESIZE_RIGHT, and the window is made 5 pixels wider by the user,
the right of the window will also be made 5 pixels wider.
Now, what if you want to clamp a widget to the bottom? Give it the flag
RESIZE_TB. This is RESIZE_TOP + RESIZE_BOTTOM. Now if the window gets
5 pixels bigger, both the top and bottom gets 5 bigger, so the whole
widgets moves downwards without resizing, and appears to be clamped
to the bottom. Nice aint it?
You should know one more thing about this system. Most windows can't
handle an increase of 1 pixel. So there is a step function, which
let the windowsize only be changed by X pixels. You configure this
after making the window, like this:
w->resize.step_height = 10;
Now the window will only change in height in steps of 10.
You can also give a minimum width and height. The default value is
the default height/width of the window itself. You can change this
AFTER window - creation, with:
w->resize.width or w->resize.height.
That was all.. good luck, and enjoy :) -- TrueLight */
enum DisplayFlags {
RESIZE_NONE = 0, ///< no resize required
RESIZE_LEFT = 1, ///< left resize flag
RESIZE_RIGHT = 2, ///< rigth resize flag
RESIZE_TOP = 4, ///< top resize flag
RESIZE_BOTTOM = 8, ///< bottom resize flag
RESIZE_LR = RESIZE_LEFT | RESIZE_RIGHT, ///< combination of left and right resize flags
RESIZE_RB = RESIZE_RIGHT | RESIZE_BOTTOM, ///< combination of right and bottom resize flags
RESIZE_TB = RESIZE_TOP | RESIZE_BOTTOM, ///< combination of top and bottom resize flags
RESIZE_LRB = RESIZE_LEFT | RESIZE_RIGHT | RESIZE_BOTTOM, ///< combination of left, right and bottom resize flags
RESIZE_LRTB = RESIZE_LEFT | RESIZE_RIGHT | RESIZE_TOP | RESIZE_BOTTOM, ///< combination of all resize flags
RESIZE_RTB = RESIZE_RIGHT | RESIZE_TOP | RESIZE_BOTTOM, ///< combination of right, top and bottom resize flag
/* The following flags are used by the system to specify what is disabled, hidden, or clicked
* They are used in the same place as the above RESIZE_x flags, Widget visual_flags.
* These states are used in exceptions. If nothing is specified, they will indicate
* Enabled, visible or unclicked widgets*/
WIDG_DISABLED = 4, ///< widget is greyed out, not available
WIDG_HIDDEN = 5, ///< widget is made invisible
WIDG_LOWERED = 6, ///< widget is paint lowered, a pressed button in fact
};
DECLARE_ENUM_AS_BIT_SET(DisplayFlags);
enum {
WIDGET_LIST_END = -1, ///< indicate the end of widgets' list for vararg functions
};
/**
* Window widget types
*/
enum WidgetType {
WWT_EMPTY, ///< Empty widget, place holder to reserve space in widget array
WWT_PANEL, ///< Simple depressed panel
WWT_INSET, ///< Pressed (inset) panel, most commonly used as combo box _text_ area
WWT_IMGBTN, ///< Button with image
WWT_IMGBTN_2, ///< Button with diff image when clicked
WWT_TEXTBTN, ///< Button with text
WWT_TEXTBTN_2, ///< Button with diff text when clicked
WWT_LABEL, ///< Centered label
WWT_TEXT, ///< Pure simple text
WWT_MATRIX, ///< List of items underneath each other
WWT_SCROLLBAR, ///< Vertical scrollbar
WWT_FRAME, ///< Frame
WWT_CAPTION, ///< Window caption (window title between closebox and stickybox)
WWT_HSCROLLBAR, ///< Horizontal scrollbar
WWT_STICKYBOX, ///< Sticky box (normally at top-right of a window)
WWT_SCROLL2BAR, ///< 2nd vertical scrollbar
WWT_RESIZEBOX, ///< Resize box (normally at bottom-right of a window)
WWT_CLOSEBOX, ///< Close box (at top-left of a window)
WWT_DROPDOWN, ///< Raised drop down list (regular)
WWT_DROPDOWNIN, ///< Inset drop down list (used on game options only)
WWT_EDITBOX, ///< a textbox for typing
WWT_LAST, ///< Last Item. use WIDGETS_END to fill up padding!!
WWT_MASK = 0x1F,
WWB_PUSHBUTTON = 1 << 5,
WWB_MASK = 0xE0,
WWT_PUSHBTN = WWT_PANEL | WWB_PUSHBUTTON,
WWT_PUSHTXTBTN = WWT_TEXTBTN | WWB_PUSHBUTTON,
WWT_PUSHIMGBTN = WWT_IMGBTN | WWB_PUSHBUTTON,
};
/** Marker for the "end of widgets" in a Window(Desc) widget table. */
#define WIDGETS_END WWT_LAST, RESIZE_NONE, INVALID_COLOUR, 0, 0, 0, 0, 0, STR_NULL
/**
* Window widget data structure
*/
struct Widget {
WidgetType type; ///< Widget type
DisplayFlags display_flags; ///< Resize direction, alignment, etc. during resizing
Colours colour; ///< Widget colour, see docs/ottd-colourtext-palette.png
int16 left; ///< The left edge of the widget
int16 right; ///< The right edge of the widget
int16 top; ///< The top edge of the widget
int16 bottom; ///< The bottom edge of the widget
uint16 data; ///< The String/Image or special code (list-matrixes) of a widget
StringID tooltips; ///< Tooltips that are shown when rightclicking on a widget
};
#endif /* WIDGET_TYPE_H */

@ -148,11 +148,11 @@ struct DropdownWindow : Window {
if (y + item_height < height) {
if (sel == item->result) GfxFillRect(x + 1, y, x + width - 1, y + item_height - 1, 0);
item->Draw(x, y, width, height, sel == item->result, (TextColour)this->widget[0].color);
item->Draw(x, y, width, height, sel == item->result, (TextColour)this->widget[0].colour);
if (item->masked) {
GfxFillRect(x, y, x + width - 1, y + item_height - 1,
_colour_gradient[this->widget[0].color][5], FILLRECT_CHECKER
_colour_gradient[this->widget[0].colour][5], FILLRECT_CHECKER
);
}
}
@ -307,7 +307,7 @@ void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, u
height + 4,
_dropdown_menu_widgets);
dw->widget[0].color = wi->color;
dw->widget[0].colour = wi->colour;
dw->widget[0].right = width - 1;
dw->widget[0].bottom = height + 3;
@ -316,7 +316,7 @@ void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, u
if (scroll) {
/* We're scrolling, so enable the scroll bar and shrink the list by
* the scrollbar's width */
dw->widget[1].color = wi->color;
dw->widget[1].colour = wi->colour;
dw->widget[1].right = dw->widget[0].right;
dw->widget[1].left = dw->widget[1].right - 11;
dw->widget[1].bottom = dw->widget[0].bottom;

@ -172,6 +172,7 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, bool double_click)
if (wi->type & WWB_MASK) {
/* special widget handling for buttons*/
switch (wi->type) {
default: NOT_REACHED();
case WWT_PANEL | WWB_PUSHBUTTON: /* WWT_PUSHBTN */
case WWT_IMGBTN | WWB_PUSHBUTTON: /* WWT_PUSHIMGBTN */
case WWT_TEXTBTN | WWB_PUSHBUTTON: /* WWT_PUSHTXTBTN */

@ -5,85 +5,14 @@
#ifndef WINDOW_GUI_H
#define WINDOW_GUI_H
#include "core/bitmath_func.hpp"
#include "core/geometry_type.hpp"
#include "vehicle_type.h"
#include "viewport_type.h"
#include "company_type.h"
#include "strings_type.h"
#include "core/alloc_type.hpp"
#include "window_type.h"
#include "tile_type.h"
/* How the resize system works:
First, you need to add a WWT_RESIZEBOX to the widgets, and you need
to add the flag WDF_RESIZABLE to the window. Now the window is ready
to resize itself.
As you may have noticed, all widgets have a RESIZE_XXX in their line.
This lines controls how the widgets behave on resize. RESIZE_NONE means
it doesn't do anything. Any other option let's one of the borders
move with the changed width/height. So if a widget has
RESIZE_RIGHT, and the window is made 5 pixels wider by the user,
the right of the window will also be made 5 pixels wider.
Now, what if you want to clamp a widget to the bottom? Give it the flag
RESIZE_TB. This is RESIZE_TOP + RESIZE_BOTTOM. Now if the window gets
5 pixels bigger, both the top and bottom gets 5 bigger, so the whole
widgets moves downwards without resizing, and appears to be clamped
to the bottom. Nice aint it?
You should know one more thing about this system. Most windows can't
handle an increase of 1 pixel. So there is a step function, which
let the windowsize only be changed by X pixels. You configure this
after making the window, like this:
w->resize.step_height = 10;
Now the window will only change in height in steps of 10.
You can also give a minimum width and height. The default value is
the default height/width of the window itself. You can change this
AFTER window - creation, with:
w->resize.width or w->resize.height.
That was all.. good luck, and enjoy :) -- TrueLight */
enum ResizeFlag {
RESIZE_NONE = 0, ///< no resize required
RESIZE_LEFT = 1, ///< left resize flag
RESIZE_RIGHT = 2, ///< rigth resize flag
RESIZE_TOP = 4, ///< top resize flag
RESIZE_BOTTOM = 8, ///< bottom resize flag
RESIZE_LR = RESIZE_LEFT | RESIZE_RIGHT, ///< combination of left and right resize flags
RESIZE_RB = RESIZE_RIGHT | RESIZE_BOTTOM, ///< combination of right and bottom resize flags
RESIZE_TB = RESIZE_TOP | RESIZE_BOTTOM, ///< combination of top and bottom resize flags
RESIZE_LRB = RESIZE_LEFT | RESIZE_RIGHT | RESIZE_BOTTOM, ///< combination of left, right and bottom resize flags
RESIZE_LRTB = RESIZE_LEFT | RESIZE_RIGHT | RESIZE_TOP | RESIZE_BOTTOM, ///< combination of all resize flags
RESIZE_RTB = RESIZE_RIGHT | RESIZE_TOP | RESIZE_BOTTOM, ///< combination of right, top and bottom resize flag
/* The following flags are used by the system to specify what is disabled, hidden, or clicked
* They are used in the same place as the above RESIZE_x flags, Widget visual_flags.
* These states are used in exceptions. If nothing is specified, they will indicate
* Enabled, visible or unclicked widgets*/
WIDG_DISABLED = 4, ///< widget is greyed out, not available
WIDG_HIDDEN = 5, ///< widget is made invisible
WIDG_LOWERED = 6, ///< widget is paint lowered, a pressed button in fact
};
enum {
WIDGET_LIST_END = -1, ///< indicate the end of widgets' list for vararg functions
};
/**
* Window widget data structure
*/
struct Widget {
byte type; ///< Widget type, see WindowWidgetTypes
byte display_flags; ///< Resize direction, alignment, etc. during resizing. @see ResizeFlags
byte color; ///< Widget colour, see docs/ottd-colourtext-palette.png
int16 left; ///< The left edge of the widget
int16 right; ///< The right edge of the widget
int16 top; ///< The top edge of the widget
int16 bottom; ///< The bottom edge of the widget
uint16 data; ///< The String/Image or special code (list-matrixes) of a widget
StringID tooltips; ///< Tooltips that are shown when rightclicking on a widget
};
#include "widget_type.h"
/**
* Flags to describe the look of the frame
@ -445,54 +374,6 @@ public:
virtual ~PickerWindowBase();
};
/****************** THESE ARE NOT WIDGET TYPES!!!!! *******************/
enum WindowWidgetBehaviours {
WWB_PUSHBUTTON = 1 << 5,
WWB_MASK = 0xE0,
};
/**
* Window widget types
*/
enum WindowWidgetTypes {
WWT_EMPTY, ///< Empty widget, place holder to reserve space in widget array
WWT_PANEL, ///< Simple depressed panel
WWT_INSET, ///< Pressed (inset) panel, most commonly used as combo box _text_ area
WWT_IMGBTN, ///< Button with image
WWT_IMGBTN_2, ///< Button with diff image when clicked
WWT_TEXTBTN, ///< Button with text
WWT_TEXTBTN_2, ///< Button with diff text when clicked
WWT_LABEL, ///< Centered label
WWT_TEXT, ///< Pure simple text
WWT_MATRIX, ///< List of items underneath each other
WWT_SCROLLBAR, ///< Vertical scrollbar
WWT_FRAME, ///< Frame
WWT_CAPTION, ///< Window caption (window title between closebox and stickybox)
WWT_HSCROLLBAR, ///< Horizontal scrollbar
WWT_STICKYBOX, ///< Sticky box (normally at top-right of a window)
WWT_SCROLL2BAR, ///< 2nd vertical scrollbar
WWT_RESIZEBOX, ///< Resize box (normally at bottom-right of a window)
WWT_CLOSEBOX, ///< Close box (at top-left of a window)
WWT_DROPDOWN, ///< Raised drop down list (regular)
WWT_DROPDOWNIN, ///< Inset drop down list (used on game options only)
WWT_EDITBOX, ///< a textbox for typing
WWT_LAST, ///< Last Item. use WIDGETS_END to fill up padding!!
WWT_MASK = 0x1F,
WWT_PUSHBTN = WWT_PANEL | WWB_PUSHBUTTON,
WWT_PUSHTXTBTN = WWT_TEXTBTN | WWB_PUSHBUTTON,
WWT_PUSHIMGBTN = WWT_IMGBTN | WWB_PUSHBUTTON,
};
/** Marker for the "end of widgets" in a Window(Desc) widget table. */
#define WIDGETS_END WWT_LAST, RESIZE_NONE, 0, 0, 0, 0, 0, 0, STR_NULL
/**
* Window flags
*/

Loading…
Cancel
Save