openttd 1.5-rc1

--HG--
branch : openttd
This commit is contained in:
Pavel Stupnikov
2015-03-19 14:33:13 +03:00
parent 5eed164aa7
commit 46e74a9a05
97 changed files with 647 additions and 1107 deletions

View File

@@ -1,4 +1,4 @@
/* $Id: newgrf_debug_gui.cpp 27134 2015-02-01 20:54:24Z frosch $ */
/* $Id: newgrf_debug_gui.cpp 27174 2015-03-01 08:17:14Z alberth $ */
/*
* This file is part of OpenTTD.
@@ -806,8 +806,11 @@ GrfSpecFeature GetGrfSpecFeature(VehicleType type)
/** Window used for aligning sprites. */
struct SpriteAlignerWindow : Window {
SpriteID current_sprite; ///< The currently shown sprite
typedef SmallPair<int16, int16> XyOffs; ///< Pair for x and y offsets of the sprite before alignment. First value contains the x offset, second value y offset.
SpriteID current_sprite; ///< The currently shown sprite.
Scrollbar *vscroll;
SmallMap<SpriteID, XyOffs> offs_start_map; ///< Mapping of starting offsets for the sprites which have been aligned in the sprite aligner window.
SpriteAlignerWindow(WindowDesc *desc, WindowNumber wno) : Window(desc)
{
@@ -821,17 +824,31 @@ struct SpriteAlignerWindow : Window {
virtual void SetStringParameters(int widget) const
{
const Sprite *spr = GetSprite(this->current_sprite, ST_NORMAL);
switch (widget) {
case WID_SA_CAPTION:
SetDParam(0, this->current_sprite);
SetDParamStr(1, FioGetFilename(GetOriginFileSlot(this->current_sprite)));
break;
case WID_SA_OFFSETS: {
const Sprite *spr = GetSprite(this->current_sprite, ST_NORMAL);
case WID_SA_OFFSETS_ABS:
SetDParam(0, spr->x_offs);
SetDParam(1, spr->y_offs);
break;
case WID_SA_OFFSETS_REL: {
/* Relative offset is new absolute offset - starting absolute offset.
* Show 0, 0 as the relative offsets if entry is not in the map (meaning they have not been changed yet).
*/
const SmallPair<SpriteID, XyOffs> *key_offs_pair = this->offs_start_map.Find(this->current_sprite);
if (key_offs_pair != this->offs_start_map.End()) {
SetDParam(0, spr->x_offs - key_offs_pair->second.first);
SetDParam(1, spr->y_offs - key_offs_pair->second.second);
} else {
SetDParam(0, 0);
SetDParam(1, 0);
}
break;
}
default:
@@ -856,20 +873,20 @@ struct SpriteAlignerWindow : Window {
case WID_SA_SPRITE: {
/* Center the sprite ourselves */
const Sprite *spr = GetSprite(this->current_sprite, ST_NORMAL);
int width = r.right - r.left + 1;
int height = r.bottom - r.top + 1;
int x = r.left - UnScaleGUI(spr->x_offs) + (width - UnScaleGUI(spr->width) ) / 2;
int y = r.top - UnScaleGUI(spr->y_offs) + (height - UnScaleGUI(spr->height)) / 2;
int width = r.right - r.left + 1 - WD_BEVEL_LEFT - WD_BEVEL_RIGHT;
int height = r.bottom - r.top + 1 - WD_BEVEL_TOP - WD_BEVEL_BOTTOM;
int x = -UnScaleGUI(spr->x_offs) + (width - UnScaleGUI(spr->width) ) / 2;
int y = -UnScaleGUI(spr->y_offs) + (height - UnScaleGUI(spr->height)) / 2;
/* And draw only the part within the sprite area */
SubSprite subspr = {
spr->x_offs + (spr->width - UnScaleGUI(width) ) / 2 + 1,
spr->y_offs + (spr->height - UnScaleGUI(height)) / 2 + 1,
spr->x_offs + (spr->width + UnScaleGUI(width) ) / 2 - 1,
spr->y_offs + (spr->height + UnScaleGUI(height)) / 2 - 1,
};
DrawPixelInfo new_dpi;
if (!FillDrawPixelInfo(&new_dpi, r.left + WD_BEVEL_LEFT, r.top + WD_BEVEL_TOP, width, height)) break;
DrawPixelInfo *old_dpi = _cur_dpi;
_cur_dpi = &new_dpi;
DrawSprite(this->current_sprite, PAL_NONE, x, y, NULL, ZOOM_LVL_GUI);
_cur_dpi = old_dpi;
DrawSprite(this->current_sprite, PAL_NONE, x, y, &subspr, ZOOM_LVL_GUI);
break;
}
@@ -949,6 +966,11 @@ struct SpriteAlignerWindow : Window {
* particular NewGRF developer.
*/
Sprite *spr = const_cast<Sprite *>(GetSprite(this->current_sprite, ST_NORMAL));
/* Remember the original offsets of the current sprite, if not already in mapping. */
if (!(this->offs_start_map.Contains(this->current_sprite))) {
this->offs_start_map.Insert(this->current_sprite, XyOffs(spr->x_offs, spr->y_offs));
}
switch (widget) {
case WID_SA_UP: spr->y_offs--; break;
case WID_SA_DOWN: spr->y_offs++; break;
@@ -960,6 +982,12 @@ struct SpriteAlignerWindow : Window {
MarkWholeScreenDirty();
break;
}
case WID_SA_RESET_REL:
/* Reset the starting offsets for the current sprite. */
this->offs_start_map.Erase(this->current_sprite);
this->SetDirty();
break;
}
}
@@ -1035,8 +1063,12 @@ static const NWidgetPart _nested_sprite_aligner_widgets[] = {
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SA_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SPRITE_ALIGNER_MOVE_TOOLTIP), SetResize(0, 0),
NWidget(NWID_SPACER), SetFill(1, 1),
EndContainer(),
NWidget(WWT_LABEL, COLOUR_GREY, WID_SA_OFFSETS_ABS), SetDataTip(STR_SPRITE_ALIGNER_OFFSETS_ABS, STR_NULL), SetFill(1, 0), SetPadding(0, 10, 0, 10),
NWidget(WWT_LABEL, COLOUR_GREY, WID_SA_OFFSETS_REL), SetDataTip(STR_SPRITE_ALIGNER_OFFSETS_REL, STR_NULL), SetFill(1, 0), SetPadding(0, 10, 0, 10),
NWidget(NWID_HORIZONTAL), SetPIP(10, 5, 10),
NWidget(WWT_LABEL, COLOUR_GREY, WID_SA_OFFSETS), SetDataTip(STR_SPRITE_ALIGNER_OFFSETS, STR_NULL), SetFill(1, 0),
NWidget(NWID_SPACER), SetFill(1, 1),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_RESET_REL), SetDataTip(STR_SPRITE_ALIGNER_RESET_BUTTON, STR_SPRITE_ALIGNER_RESET_TOOLTIP), SetFill(0, 0),
NWidget(NWID_SPACER), SetFill(1, 1),
EndContainer(),
EndContainer(),
NWidget(NWID_VERTICAL), SetPIP(10, 5, 10),