(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

This commit is contained in:
rubidium 2009-09-28 12:19:15 +00:00
parent b3f7a582d2
commit 244c17e4eb

View File

@ -30,6 +30,7 @@
#include "tunnelbridge.h"
#include "tilehighlight_func.h"
#include "settings_type.h"
#include "spritecache.h"
#include "station_map.h"
#include "tunnelbridge_map.h"
@ -1523,15 +1524,32 @@ private:
*
* @param widget_index index of this widget in the window
* @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;
DrawSprite(image + this->IsWidgetLowered(widget_index), PAL_NONE,
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));
/* First get the right image, which is one later for 'green' signals. */
image += 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:
@ -1551,19 +1569,18 @@ public:
this->DrawWidgets();
/* The 'hardcoded' off sets are needed because they are reused sprites. */
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, -1, 13); // xsize of sprite + 1 == 10
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, 0, 12); // xsize of sprite + 1 == 9
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, -1, 13); // xsize of sprite + 1 == 10
this->DrawSignalSprite(BSW_ELECTRIC_NORM, SPR_IMG_SIGNAL_ELECTRIC_NORM, -1, 4);
this->DrawSignalSprite(BSW_ELECTRIC_ENTRY, SPR_IMG_SIGNAL_ELECTRIC_ENTRY, -2, 6);
this->DrawSignalSprite(BSW_ELECTRIC_EXIT, SPR_IMG_SIGNAL_ELECTRIC_EXIT, -2, 6);
this->DrawSignalSprite(BSW_ELECTRIC_COMBO, SPR_IMG_SIGNAL_ELECTRIC_COMBO, -2, 6);
this->DrawSignalSprite(BSW_ELECTRIC_PBS, SPR_IMG_SIGNAL_ELECTRIC_PBS, -1, 4);
this->DrawSignalSprite(BSW_ELECTRIC_PBS_OWAY,SPR_IMG_SIGNAL_ELECTRIC_PBS_OWAY,-2, 6);
this->DrawSignalSprite(BSW_SEMAPHORE_NORM, SPR_IMG_SIGNAL_SEMAPHORE_NORM);
this->DrawSignalSprite(BSW_SEMAPHORE_ENTRY, SPR_IMG_SIGNAL_SEMAPHORE_ENTRY);
this->DrawSignalSprite(BSW_SEMAPHORE_EXIT, SPR_IMG_SIGNAL_SEMAPHORE_EXIT);
this->DrawSignalSprite(BSW_SEMAPHORE_COMBO, SPR_IMG_SIGNAL_SEMAPHORE_COMBO);
this->DrawSignalSprite(BSW_SEMAPHORE_PBS, SPR_IMG_SIGNAL_SEMAPHORE_PBS);
this->DrawSignalSprite(BSW_SEMAPHORE_PBS_OWAY, SPR_IMG_SIGNAL_SEMAPHORE_PBS_OWAY);
this->DrawSignalSprite(BSW_ELECTRIC_NORM, SPR_IMG_SIGNAL_ELECTRIC_NORM);
this->DrawSignalSprite(BSW_ELECTRIC_ENTRY, SPR_IMG_SIGNAL_ELECTRIC_ENTRY);
this->DrawSignalSprite(BSW_ELECTRIC_EXIT, SPR_IMG_SIGNAL_ELECTRIC_EXIT);
this->DrawSignalSprite(BSW_ELECTRIC_COMBO, SPR_IMG_SIGNAL_ELECTRIC_COMBO);
this->DrawSignalSprite(BSW_ELECTRIC_PBS, SPR_IMG_SIGNAL_ELECTRIC_PBS);
this->DrawSignalSprite(BSW_ELECTRIC_PBS_OWAY, SPR_IMG_SIGNAL_ELECTRIC_PBS_OWAY);
/* Draw dragging signal density value in the BSW_DRAG_SIGNALS_DENSITY widget */
SetDParam(0, _settings_client.gui.drag_signals_density);