mirror of https://github.com/OpenTTD/OpenTTD
(svn r17657) -Fix [FS#3242]: some semaphore signals fell outside of the signal GUI. Now the signals are properly centered which should make that problem go away
parent
1bc18905d7
commit
d74216b7fe
|
@ -30,6 +30,7 @@
|
||||||
#include "tunnelbridge.h"
|
#include "tunnelbridge.h"
|
||||||
#include "tilehighlight_func.h"
|
#include "tilehighlight_func.h"
|
||||||
#include "settings_type.h"
|
#include "settings_type.h"
|
||||||
|
#include "spritecache.h"
|
||||||
|
|
||||||
#include "station_map.h"
|
#include "station_map.h"
|
||||||
#include "tunnelbridge_map.h"
|
#include "tunnelbridge_map.h"
|
||||||
|
@ -1523,15 +1524,32 @@ private:
|
||||||
*
|
*
|
||||||
* @param widget_index index of this widget in the window
|
* @param widget_index index of this widget in the window
|
||||||
* @param image the sprite to draw
|
* @param image the sprite to draw
|
||||||
* @param xrel the relativ x value of the sprite in the grf
|
|
||||||
* @param xsize the width of the sprite
|
|
||||||
*/
|
*/
|
||||||
void DrawSignalSprite(byte widget_index, SpriteID image, int8 xrel, uint8 xsize)
|
void DrawSignalSprite(byte widget_index, SpriteID image)
|
||||||
{
|
{
|
||||||
int bottom = this->GetWidget<NWidgetBase>(widget_index)->pos_y + this->GetWidget<NWidgetBase>(widget_index)->current_y - 1;
|
/* First get the right image, which is one later for 'green' signals. */
|
||||||
DrawSprite(image + this->IsWidgetLowered(widget_index), PAL_NONE,
|
image += this->IsWidgetLowered(widget_index);
|
||||||
this->GetWidget<NWidgetBase>(widget_index)->pos_x + this->GetWidget<NWidgetBase>(widget_index)->current_x / 2 - xrel - xsize / 2 + this->IsWidgetLowered(widget_index),
|
|
||||||
bottom - 3 + this->IsWidgetLowered(widget_index));
|
/* Next get the actual sprite so we can calculate the right offsets. */
|
||||||
|
const Sprite *sprite = GetSprite(image, ST_NORMAL);
|
||||||
|
|
||||||
|
/* For the x offset we want the sprite to be centered, so undo the offset
|
||||||
|
* for sprite drawing and add half of the sprite's width. For the y offset
|
||||||
|
* we want the sprite to be aligned on the bottom, so again we undo the
|
||||||
|
* offset for sprite drawing and assume it is the bottom of the sprite. */
|
||||||
|
int sprite_center_x_offset = sprite->x_offs + sprite->width / 2;
|
||||||
|
int sprite_bottom_y_offset = sprite->height + sprite->y_offs;
|
||||||
|
|
||||||
|
/* Next we want to know where on the window to draw. Calculate the center
|
||||||
|
* and the bottom of the area to draw. */
|
||||||
|
const NWidgetBase *widget = this->GetWidget<NWidgetBase>(widget_index);
|
||||||
|
int widget_center_x = widget->pos_x + widget->current_x / 2;
|
||||||
|
int widget_bottom_y = widget->pos_y + widget->current_y - 2;
|
||||||
|
|
||||||
|
/* Finally we draw the signal. */
|
||||||
|
DrawSprite(image, PAL_NONE,
|
||||||
|
widget_center_x - sprite_center_x_offset + this->IsWidgetLowered(widget_index),
|
||||||
|
widget_bottom_y - sprite_bottom_y_offset + this->IsWidgetLowered(widget_index));
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -1551,19 +1569,18 @@ public:
|
||||||
|
|
||||||
this->DrawWidgets();
|
this->DrawWidgets();
|
||||||
|
|
||||||
/* The 'hardcoded' off sets are needed because they are reused sprites. */
|
this->DrawSignalSprite(BSW_SEMAPHORE_NORM, SPR_IMG_SIGNAL_SEMAPHORE_NORM);
|
||||||
this->DrawSignalSprite(BSW_SEMAPHORE_NORM, SPR_IMG_SIGNAL_SEMAPHORE_NORM, 0, 12); // xsize of sprite + 1 == 9
|
this->DrawSignalSprite(BSW_SEMAPHORE_ENTRY, SPR_IMG_SIGNAL_SEMAPHORE_ENTRY);
|
||||||
this->DrawSignalSprite(BSW_SEMAPHORE_ENTRY, SPR_IMG_SIGNAL_SEMAPHORE_ENTRY, -1, 13); // xsize of sprite + 1 == 10
|
this->DrawSignalSprite(BSW_SEMAPHORE_EXIT, SPR_IMG_SIGNAL_SEMAPHORE_EXIT);
|
||||||
this->DrawSignalSprite(BSW_SEMAPHORE_EXIT, SPR_IMG_SIGNAL_SEMAPHORE_EXIT, 0, 12); // xsize of sprite + 1 == 9
|
this->DrawSignalSprite(BSW_SEMAPHORE_COMBO, SPR_IMG_SIGNAL_SEMAPHORE_COMBO);
|
||||||
this->DrawSignalSprite(BSW_SEMAPHORE_COMBO, SPR_IMG_SIGNAL_SEMAPHORE_COMBO, 0, 12); // xsize of sprite + 1 == 9
|
this->DrawSignalSprite(BSW_SEMAPHORE_PBS, SPR_IMG_SIGNAL_SEMAPHORE_PBS);
|
||||||
this->DrawSignalSprite(BSW_SEMAPHORE_PBS, SPR_IMG_SIGNAL_SEMAPHORE_PBS, 0, 12); // xsize of sprite + 1 == 9
|
this->DrawSignalSprite(BSW_SEMAPHORE_PBS_OWAY, SPR_IMG_SIGNAL_SEMAPHORE_PBS_OWAY);
|
||||||
this->DrawSignalSprite(BSW_SEMAPHORE_PBS_OWAY, SPR_IMG_SIGNAL_SEMAPHORE_PBS_OWAY, -1, 13); // xsize of sprite + 1 == 10
|
this->DrawSignalSprite(BSW_ELECTRIC_NORM, SPR_IMG_SIGNAL_ELECTRIC_NORM);
|
||||||
this->DrawSignalSprite(BSW_ELECTRIC_NORM, SPR_IMG_SIGNAL_ELECTRIC_NORM, -1, 4);
|
this->DrawSignalSprite(BSW_ELECTRIC_ENTRY, SPR_IMG_SIGNAL_ELECTRIC_ENTRY);
|
||||||
this->DrawSignalSprite(BSW_ELECTRIC_ENTRY, SPR_IMG_SIGNAL_ELECTRIC_ENTRY, -2, 6);
|
this->DrawSignalSprite(BSW_ELECTRIC_EXIT, SPR_IMG_SIGNAL_ELECTRIC_EXIT);
|
||||||
this->DrawSignalSprite(BSW_ELECTRIC_EXIT, SPR_IMG_SIGNAL_ELECTRIC_EXIT, -2, 6);
|
this->DrawSignalSprite(BSW_ELECTRIC_COMBO, SPR_IMG_SIGNAL_ELECTRIC_COMBO);
|
||||||
this->DrawSignalSprite(BSW_ELECTRIC_COMBO, SPR_IMG_SIGNAL_ELECTRIC_COMBO, -2, 6);
|
this->DrawSignalSprite(BSW_ELECTRIC_PBS, SPR_IMG_SIGNAL_ELECTRIC_PBS);
|
||||||
this->DrawSignalSprite(BSW_ELECTRIC_PBS, SPR_IMG_SIGNAL_ELECTRIC_PBS, -1, 4);
|
this->DrawSignalSprite(BSW_ELECTRIC_PBS_OWAY, SPR_IMG_SIGNAL_ELECTRIC_PBS_OWAY);
|
||||||
this->DrawSignalSprite(BSW_ELECTRIC_PBS_OWAY,SPR_IMG_SIGNAL_ELECTRIC_PBS_OWAY,-2, 6);
|
|
||||||
|
|
||||||
/* Draw dragging signal density value in the BSW_DRAG_SIGNALS_DENSITY widget */
|
/* Draw dragging signal density value in the BSW_DRAG_SIGNALS_DENSITY widget */
|
||||||
SetDParam(0, _settings_client.gui.drag_signals_density);
|
SetDParam(0, _settings_client.gui.drag_signals_density);
|
||||||
|
|
Loading…
Reference in New Issue