Normalize slider

This commit is contained in:
Paul Chote
2011-05-16 23:23:41 +12:00
parent e09cd16042
commit 04e5794678
6 changed files with 71 additions and 51 deletions

View File

@@ -10,16 +10,19 @@
using System; using System;
using System.Drawing; using System.Drawing;
using OpenRA.Graphics;
namespace OpenRA.Widgets namespace OpenRA.Widgets
{ {
public class SliderWidget : Widget public class SliderWidget : Widget
{ {
public Func<bool> IsDisabled = () => false;
public event Action<float> OnChange; public event Action<float> OnChange;
public Func<float> GetOffset; public Func<float> GetOffset;
public int Ticks = 0; public int Ticks = 0;
public int TrackHeight = 5; public int TrackHeight = 5;
// TODO: Changing this breaks the semantics of Get/SetOffset // TODO: Changing this breaks the semantics of Get/SetOffset
// This is bogus // This is bogus
public float2 Range = new float2(0f, 1f); public float2 Range = new float2(0f, 1f);
@@ -177,8 +180,9 @@ namespace OpenRA.Widgets
if (!IsVisible()) if (!IsVisible())
return; return;
var trackWidth = RenderBounds.Width - thumbRect.Width; var tr = thumbRect;
var trackOrigin = RenderBounds.X + thumbRect.Width / 2; var trackWidth = RenderBounds.Width - tr.Width;
var trackOrigin = RenderBounds.X + tr.Width / 2;
var trackRect = new Rectangle(trackOrigin - 1, RenderBounds.Y + (RenderBounds.Height - TrackHeight) / 2, trackWidth + 2, TrackHeight); var trackRect = new Rectangle(trackOrigin - 1, RenderBounds.Y + (RenderBounds.Height - TrackHeight) / 2, trackWidth + 2, TrackHeight);
// Tickmarks (hacked until we have real art) // Tickmarks (hacked until we have real art)
@@ -186,13 +190,19 @@ namespace OpenRA.Widgets
{ {
var tickRect = new Rectangle(trackOrigin - 1 + (int)(i * trackWidth * 1f / (Ticks - 1)), var tickRect = new Rectangle(trackOrigin - 1 + (int)(i * trackWidth * 1f / (Ticks - 1)),
RenderBounds.Y + RenderBounds.Height / 2, 2, RenderBounds.Height / 2); RenderBounds.Y + RenderBounds.Height / 2, 2, RenderBounds.Height / 2);
WidgetUtils.DrawPanel("dialog2", tickRect); WidgetUtils.DrawPanel("slider-tick", tickRect);
} }
// Track // Track
WidgetUtils.DrawPanel("dialog3", trackRect); WidgetUtils.DrawPanel("slider-track", trackRect);
// Thumb // Thumb
WidgetUtils.DrawPanel("dialog2", thumbRect); var state = IsDisabled() ? "button-disabled" :
isMoving ? "button-pressed" :
tr.Contains(Viewport.LastMousePos) ? "button-hover" :
"button";
WidgetUtils.DrawPanel(state, tr);
} }
} }
} }

View File

@@ -49,45 +49,6 @@ namespace OpenRA.Mods.Cnc.Widgets
public override Widget Clone() { return new CncCheckboxWidget(this); } public override Widget Clone() { return new CncCheckboxWidget(this); }
} }
public class CncSliderWidget : SliderWidget
{
public Func<bool> IsDisabled = () => false;
public CncSliderWidget() : base() { }
public CncSliderWidget(CncSliderWidget other) : base(other) { }
public override Widget Clone() { return new CncSliderWidget(this); }
public override void DrawInner()
{
if (!IsVisible())
return;
var tr = thumbRect;
var trackWidth = RenderBounds.Width - tr.Width;
var trackOrigin = RenderBounds.X + tr.Width / 2;
var trackRect = new Rectangle(trackOrigin - 1, RenderBounds.Y + (RenderBounds.Height - TrackHeight) / 2, trackWidth + 2, TrackHeight);
// Tickmarks (hacked until we have real art)
for (int i = 0; i < Ticks; i++)
{
var tickRect = new Rectangle(trackOrigin - 1 + (int)(i * trackWidth * 1f / (Ticks - 1)),
RenderBounds.Y + RenderBounds.Height / 2, 2, RenderBounds.Height / 2);
WidgetUtils.DrawPanel("panel-gray", tickRect);
}
// Track
WidgetUtils.DrawPanel("panel-gray", trackRect);
// Thumb
var state = IsDisabled() ? "button-disabled" :
isMoving ? "button-pressed" :
tr.Contains(Viewport.LastMousePos) ? "button-hover" :
"button";
WidgetUtils.DrawPanel(state, tr);
}
}
public class CncDropDownButtonWidget : DropDownButtonWidget public class CncDropDownButtonWidget : DropDownButtonWidget
{ {

View File

@@ -157,6 +157,30 @@ scrollitem-selected: chrome.png
corner-bl: 64,254,2,2 corner-bl: 64,254,2,2
corner-br: 126,254,2,2 corner-br: 126,254,2,2
# A copy of panel-gray
slider-tick: chrome.png
background: 66,66,60,60
border-r: 126,66,2,60
border-l: 64,66,2,60
border-b: 66,126,60,2
border-t: 66,64,60,2
corner-tl: 64,64,2,2
corner-tr: 126,64,2,2
corner-bl: 64,126,2,2
corner-br: 126,126,2,2
# A copy of panel-gray
slider-track: chrome.png
background: 66,66,60,60
border-r: 126,66,2,60
border-l: 64,66,2,60
border-b: 66,126,60,2
border-t: 66,64,60,2
corner-tl: 64,64,2,2
corner-tr: 126,64,2,2
corner-bl: 64,126,2,2
corner-br: 126,126,2,2
panel-black: chrome.png panel-black: chrome.png
background: 66,2,60,60 background: 66,2,60,60
border-r: 126,2,2,60 border-r: 126,2,2,60

View File

@@ -416,7 +416,7 @@ Background@COLOR_CHOOSER:
Align:Right Align:Right
Text:Hue: Text:Hue:
Font:Bold Font:Bold
CncSlider@HUE: Slider@HUE:
Id:HUE_SLIDER Id:HUE_SLIDER
X:43 X:43
Y:10 Y:10
@@ -431,7 +431,7 @@ Background@COLOR_CHOOSER:
Align:Right Align:Right
Text:Sat: Text:Sat:
Font:Bold Font:Bold
CncSlider@SAT: Slider@SAT:
Id:SAT_SLIDER Id:SAT_SLIDER
X:43 X:43
Y:35 Y:35
@@ -446,7 +446,7 @@ Background@COLOR_CHOOSER:
Align:Right Align:Right
Text:Lum: Text:Lum:
Font:Bold Font:Bold
CncSlider@LUM: Slider@LUM:
Id:LUM_SLIDER Id:LUM_SLIDER
X:43 X:43
Y:60 Y:60

View File

@@ -169,7 +169,7 @@ Container@SETTINGS_PANEL:
Height:25 Height:25
Align:Right Align:Right
Text:Sound Volume: Text:Sound Volume:
CncSlider@SOUND_SLIDER: Slider@SOUND_SLIDER:
Id:SOUND_SLIDER Id:SOUND_SLIDER
X:475 X:475
Y:140 Y:140
@@ -183,7 +183,7 @@ Container@SETTINGS_PANEL:
Height:25 Height:25
Align:Right Align:Right
Text:Music Volume: Text:Music Volume:
CncSlider@MUSIC_SLIDER: Slider@MUSIC_SLIDER:
Id:MUSIC_SLIDER Id:MUSIC_SLIDER
X:475 X:475
Y:170 Y:170
@@ -233,7 +233,7 @@ Container@SETTINGS_PANEL:
Width:95 Width:95
Height:25 Height:25
Text:Scroll Speed: Text:Scroll Speed:
CncSlider@SCROLLSPEED_SLIDER: Slider@SCROLLSPEED_SLIDER:
Id:SCROLLSPEED_SLIDER Id:SCROLLSPEED_SLIDER
X:100 X:100
Y:120 Y:120

View File

@@ -345,3 +345,28 @@ scrollpanel-bg: dialog.png
corner-tr: 722,0,1,1 corner-tr: 722,0,1,1
corner-bl: 640,82,1,1 corner-bl: 640,82,1,1
corner-br: 722,82,1,1 corner-br: 722,82,1,1
# A copy of dialog2
slider-tick: dialog.png
background: 513,1,126,126
border-r: 639,1,1,126
border-l: 512,1,1,126
border-b: 513,127,126,1
border-t: 513,0,126,1
corner-tl: 512,0,1,1
corner-tr: 594,0,1,1
corner-bl: 512,82,1,1
corner-br: 594,82,1,1
# A copy of dialog3
slider-track: dialog.png
background: 641,1,126,126
border-r: 767,1,1,126
border-l: 640,1,1,126
border-b: 641,127,126,1
border-t: 641,0,126,1
corner-tl: 640,0,1,1
corner-tr: 722,0,1,1
corner-bl: 640,82,1,1
corner-br: 722,82,1,1