(svn r17331) -Codechange: don't depend on static widget position/size for drawing of volumer sliders in music window

This commit is contained in:
yexo 2009-08-30 21:31:54 +00:00
parent 1f7fc96a78
commit 51806af03d
1 changed files with 22 additions and 28 deletions

View File

@ -419,6 +419,10 @@ enum MusicWidgets {
};
struct MusicWindow : public Window {
static const int slider_bar_height = 4;
static const int slider_height = 7;
static const int slider_width = 3;
MusicWindow(const WindowDesc *desc, WindowNumber number) : Window()
{
this->InitNested(desc, number);
@ -460,28 +464,23 @@ struct MusicWindow : public Window {
}
DrawString(r.left, r.right, r.top + 1, str, TC_FROMSTRING, SA_CENTER);
} break;
case MW_MUSIC_VOL: case MW_EFFECT_VOL: {
DrawString(r.left, r.right, r.top + 1, (widget == MW_MUSIC_VOL) ? STR_MUSIC_MUSIC_VOLUME : STR_MUSIC_EFFECTS_VOLUME, TC_FROMSTRING, SA_CENTER);
int y = (r.top + r.bottom - slider_bar_height) / 2;
DrawFrameRect(r.left, y, r.right, y + slider_bar_height, COLOUR_GREY, FR_LOWERED);
DrawString(r.left, r.right, r.bottom - FONT_HEIGHT_SMALL, STR_MUSIC_MIN_MAX_RULER, TC_FROMSTRING, SA_CENTER);
y = (r.top + r.bottom - slider_height) / 2;
byte volume = (widget == MW_MUSIC_VOL) ? msf.music_vol : msf.effect_vol;
int x = r.left + (volume * (r.right - r.left) / 127);
DrawFrameRect(x, y, x + slider_width, y + slider_height, COLOUR_GREY, FR_NONE);
} break;
}
}
virtual void OnPaint()
{
this->DrawWidgets();
DrawString(108, 174, 15, STR_MUSIC_MUSIC_VOLUME, TC_FROMSTRING, SA_CENTER);
DrawString(108, 174, 29, STR_MUSIC_MIN_MAX_RULER, TC_FROMSTRING, SA_CENTER);
DrawString(214, 280, 15, STR_MUSIC_EFFECTS_VOLUME, TC_FROMSTRING, SA_CENTER);
DrawString(214, 280, 29, STR_MUSIC_MIN_MAX_RULER, TC_FROMSTRING, SA_CENTER);
DrawFrameRect(108, 23, 174, 26, COLOUR_GREY, FR_LOWERED);
DrawFrameRect(214, 23, 280, 26, COLOUR_GREY, FR_LOWERED);
DrawFrameRect(
108 + msf.music_vol / 2, 22, 111 + msf.music_vol / 2, 28, COLOUR_GREY, FR_NONE
);
DrawFrameRect(
214 + msf.effect_vol / 2, 22, 217 + msf.effect_vol / 2, 28, COLOUR_GREY, FR_NONE
);
}
virtual void OnClick(Point pt, int widget)
@ -506,19 +505,14 @@ struct MusicWindow : public Window {
break;
case MW_MUSIC_VOL: case MW_EFFECT_VOL: { // volume sliders
int x = pt.x - 88;
if (x < 0) return;
int x = pt.x - this->nested_array[widget]->pos_x;
byte *vol = &msf.music_vol;
if (x >= 106) {
vol = &msf.effect_vol;
x -= 106;
}
byte *vol = (widget == MW_MUSIC_VOL) ? &msf.music_vol : &msf.effect_vol;
byte new_vol = min(max(x - 21, 0) * 2, 127);
byte new_vol = x * 127 / this->nested_array[widget]->current_x;
if (new_vol != *vol) {
*vol = new_vol;
if (vol == &msf.music_vol) MusicVolumeChanged(new_vol);
if (widget == MW_MUSIC_VOL) MusicVolumeChanged(new_vol);
this->SetDirty();
}
@ -570,10 +564,10 @@ static const NWidgetPart _nested_music_window_widgets[] = {
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, MW_STOP), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_STOP_MUSIC, STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, MW_PLAY), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_PLAY_MUSIC, STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC),
NWidget(WWT_PANEL, COLOUR_GREY, MW_SLIDERS),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_EMPTY, COLOUR_GREY, MW_MUSIC_VOL), SetMinimalSize(98, 22), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
NWidget(NWID_HORIZONTAL), SetPIP(20, 11, 20),
NWidget(WWT_EMPTY, COLOUR_GREY, MW_MUSIC_VOL), SetMinimalSize(67, 22), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
NWidget(WWT_PANEL, COLOUR_GREY, MW_GAUGE), SetMinimalSize(16, 20), SetPadding(1, 0, 1, 0), EndContainer(),
NWidget(WWT_EMPTY, COLOUR_GREY, MW_EFFECT_VOL), SetMinimalSize(98, 22), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
NWidget(WWT_EMPTY, COLOUR_GREY, MW_EFFECT_VOL), SetMinimalSize(67, 22), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
EndContainer(),
EndContainer(),
NWidget(NWID_SPACER), SetFill(true, false),