Normalize slider
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user