mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-10 08:00:05 +00:00
(svn r27174) -Feature[FS#6236]: Display relative offset changes in the sprite aligner (juzza1).
This commit is contained in:
parent
a4756c477d
commit
a5843149b5
@ -2879,7 +2879,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous
|
|||||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the first sprite to the last
|
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the first sprite to the last
|
||||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
|
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
|
||||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets
|
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets
|
||||||
STR_SPRITE_ALIGNER_OFFSETS :{BLACK}X offset: {NUM}, Y offset: {NUM}
|
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relative
|
||||||
|
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset the current relative offsets
|
||||||
|
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute)
|
||||||
|
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X offset: {NUM}, Y offset: {NUM} (Relative)
|
||||||
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Pick sprite
|
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Pick sprite
|
||||||
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Pick a sprite from anywhere on the screen
|
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Pick a sprite from anywhere on the screen
|
||||||
|
|
||||||
|
@ -806,8 +806,11 @@ GrfSpecFeature GetGrfSpecFeature(VehicleType type)
|
|||||||
|
|
||||||
/** Window used for aligning sprites. */
|
/** Window used for aligning sprites. */
|
||||||
struct SpriteAlignerWindow : Window {
|
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;
|
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)
|
SpriteAlignerWindow(WindowDesc *desc, WindowNumber wno) : Window(desc)
|
||||||
{
|
{
|
||||||
@ -821,17 +824,31 @@ struct SpriteAlignerWindow : Window {
|
|||||||
|
|
||||||
virtual void SetStringParameters(int widget) const
|
virtual void SetStringParameters(int widget) const
|
||||||
{
|
{
|
||||||
|
const Sprite *spr = GetSprite(this->current_sprite, ST_NORMAL);
|
||||||
switch (widget) {
|
switch (widget) {
|
||||||
case WID_SA_CAPTION:
|
case WID_SA_CAPTION:
|
||||||
SetDParam(0, this->current_sprite);
|
SetDParam(0, this->current_sprite);
|
||||||
SetDParamStr(1, FioGetFilename(GetOriginFileSlot(this->current_sprite)));
|
SetDParamStr(1, FioGetFilename(GetOriginFileSlot(this->current_sprite)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_SA_OFFSETS: {
|
case WID_SA_OFFSETS_ABS:
|
||||||
const Sprite *spr = GetSprite(this->current_sprite, ST_NORMAL);
|
|
||||||
SetDParam(0, spr->x_offs);
|
SetDParam(0, spr->x_offs);
|
||||||
SetDParam(1, spr->y_offs);
|
SetDParam(1, spr->y_offs);
|
||||||
break;
|
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:
|
default:
|
||||||
@ -949,6 +966,11 @@ struct SpriteAlignerWindow : Window {
|
|||||||
* particular NewGRF developer.
|
* particular NewGRF developer.
|
||||||
*/
|
*/
|
||||||
Sprite *spr = const_cast<Sprite *>(GetSprite(this->current_sprite, ST_NORMAL));
|
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) {
|
switch (widget) {
|
||||||
case WID_SA_UP: spr->y_offs--; break;
|
case WID_SA_UP: spr->y_offs--; break;
|
||||||
case WID_SA_DOWN: spr->y_offs++; break;
|
case WID_SA_DOWN: spr->y_offs++; break;
|
||||||
@ -960,6 +982,12 @@ struct SpriteAlignerWindow : Window {
|
|||||||
MarkWholeScreenDirty();
|
MarkWholeScreenDirty();
|
||||||
break;
|
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(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),
|
NWidget(NWID_SPACER), SetFill(1, 1),
|
||||||
EndContainer(),
|
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(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(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(NWID_VERTICAL), SetPIP(10, 5, 10),
|
NWidget(NWID_VERTICAL), SetPIP(10, 5, 10),
|
||||||
|
@ -774,10 +774,12 @@ void SQGSWindow_Register(Squirrel *engine)
|
|||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_RIGHT, "WID_SA_RIGHT");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_RIGHT, "WID_SA_RIGHT");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_DOWN, "WID_SA_DOWN");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_DOWN, "WID_SA_DOWN");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_SPRITE, "WID_SA_SPRITE");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_SPRITE, "WID_SA_SPRITE");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_OFFSETS, "WID_SA_OFFSETS");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_OFFSETS_ABS, "WID_SA_OFFSETS_ABS");
|
||||||
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_OFFSETS_REL, "WID_SA_OFFSETS_REL");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_PICKER, "WID_SA_PICKER");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_PICKER, "WID_SA_PICKER");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_LIST, "WID_SA_LIST");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_LIST, "WID_SA_LIST");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_SCROLLBAR, "WID_SA_SCROLLBAR");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_SCROLLBAR, "WID_SA_SCROLLBAR");
|
||||||
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SA_RESET_REL, "WID_SA_RESET_REL");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_SHOW_NUMPAR, "WID_NP_SHOW_NUMPAR");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_SHOW_NUMPAR, "WID_NP_SHOW_NUMPAR");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_NUMPAR_DEC, "WID_NP_NUMPAR_DEC");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_NUMPAR_DEC, "WID_NP_NUMPAR_DEC");
|
||||||
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_NUMPAR_INC, "WID_NP_NUMPAR_INC");
|
SQGSWindow.DefSQConst(engine, ScriptWindow::WID_NP_NUMPAR_INC, "WID_NP_NUMPAR_INC");
|
||||||
|
@ -1800,10 +1800,12 @@ public:
|
|||||||
WID_SA_RIGHT = ::WID_SA_RIGHT, ///< Move the sprite to the right.
|
WID_SA_RIGHT = ::WID_SA_RIGHT, ///< Move the sprite to the right.
|
||||||
WID_SA_DOWN = ::WID_SA_DOWN, ///< Move the sprite down.
|
WID_SA_DOWN = ::WID_SA_DOWN, ///< Move the sprite down.
|
||||||
WID_SA_SPRITE = ::WID_SA_SPRITE, ///< The actual sprite.
|
WID_SA_SPRITE = ::WID_SA_SPRITE, ///< The actual sprite.
|
||||||
WID_SA_OFFSETS = ::WID_SA_OFFSETS, ///< The sprite offsets.
|
WID_SA_OFFSETS_ABS = ::WID_SA_OFFSETS_ABS, ///< The sprite offsets (absolute).
|
||||||
|
WID_SA_OFFSETS_REL = ::WID_SA_OFFSETS_REL, ///< The sprite offsets (relative).
|
||||||
WID_SA_PICKER = ::WID_SA_PICKER, ///< Sprite picker.
|
WID_SA_PICKER = ::WID_SA_PICKER, ///< Sprite picker.
|
||||||
WID_SA_LIST = ::WID_SA_LIST, ///< Queried sprite list.
|
WID_SA_LIST = ::WID_SA_LIST, ///< Queried sprite list.
|
||||||
WID_SA_SCROLLBAR = ::WID_SA_SCROLLBAR, ///< Scrollbar for sprite list.
|
WID_SA_SCROLLBAR = ::WID_SA_SCROLLBAR, ///< Scrollbar for sprite list.
|
||||||
|
WID_SA_RESET_REL = ::WID_SA_RESET_REL, ///< Reset relative sprite offset
|
||||||
};
|
};
|
||||||
|
|
||||||
/* automatically generated from ../../widgets/newgrf_widget.h */
|
/* automatically generated from ../../widgets/newgrf_widget.h */
|
||||||
|
@ -25,19 +25,21 @@ enum NewGRFInspectWidgets {
|
|||||||
|
|
||||||
/** Widgets of the #SpriteAlignerWindow class. */
|
/** Widgets of the #SpriteAlignerWindow class. */
|
||||||
enum SpriteAlignerWidgets {
|
enum SpriteAlignerWidgets {
|
||||||
WID_SA_CAPTION, ///< Caption of the window.
|
WID_SA_CAPTION, ///< Caption of the window.
|
||||||
WID_SA_PREVIOUS, ///< Skip to the previous sprite.
|
WID_SA_PREVIOUS, ///< Skip to the previous sprite.
|
||||||
WID_SA_GOTO, ///< Go to a given sprite.
|
WID_SA_GOTO, ///< Go to a given sprite.
|
||||||
WID_SA_NEXT, ///< Skip to the next sprite.
|
WID_SA_NEXT, ///< Skip to the next sprite.
|
||||||
WID_SA_UP, ///< Move the sprite up.
|
WID_SA_UP, ///< Move the sprite up.
|
||||||
WID_SA_LEFT, ///< Move the sprite to the left.
|
WID_SA_LEFT, ///< Move the sprite to the left.
|
||||||
WID_SA_RIGHT, ///< Move the sprite to the right.
|
WID_SA_RIGHT, ///< Move the sprite to the right.
|
||||||
WID_SA_DOWN, ///< Move the sprite down.
|
WID_SA_DOWN, ///< Move the sprite down.
|
||||||
WID_SA_SPRITE, ///< The actual sprite.
|
WID_SA_SPRITE, ///< The actual sprite.
|
||||||
WID_SA_OFFSETS, ///< The sprite offsets.
|
WID_SA_OFFSETS_ABS, ///< The sprite offsets (absolute).
|
||||||
WID_SA_PICKER, ///< Sprite picker.
|
WID_SA_OFFSETS_REL, ///< The sprite offsets (relative).
|
||||||
WID_SA_LIST, ///< Queried sprite list.
|
WID_SA_PICKER, ///< Sprite picker.
|
||||||
WID_SA_SCROLLBAR, ///< Scrollbar for sprite list.
|
WID_SA_LIST, ///< Queried sprite list.
|
||||||
|
WID_SA_SCROLLBAR, ///< Scrollbar for sprite list.
|
||||||
|
WID_SA_RESET_REL, ///< Reset relative sprite offset
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* WIDGETS_NEWGRF_DEBUG_WIDGET_H */
|
#endif /* WIDGETS_NEWGRF_DEBUG_WIDGET_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user