11using System ;
2+ using System . Drawing ;
23using System . Windows . Forms ;
34
45namespace XRay . SdkControls
@@ -8,6 +9,7 @@ public sealed partial class IntegerSlider : UserControl
89 public IntegerSlider ( )
910 {
1011 InitializeComponent ( ) ;
12+ MinimumSize = Size . Empty ; // just to trigger MinimumSize setter logic
1113 }
1214
1315 public event EventHandler ValueChanged ;
@@ -86,6 +88,43 @@ public TickStyle TickStyle
8688 set { trackBar . TickStyle = value ; }
8789 }
8890
91+ public int SpinnerWidth
92+ {
93+ get { return numSpinner . Width ; }
94+ set
95+ {
96+ var minSpinnerWidth = numSpinner . MinimumSize . Width ;
97+ var minTrackBarWidth = trackBar . MinimumSize . Width ;
98+ if ( value < minSpinnerWidth )
99+ value = minSpinnerWidth ;
100+ if ( trackBar . Width + numSpinner . Width - value < minTrackBarWidth )
101+ {
102+ value = trackBar . Width + numSpinner . Width - minTrackBarWidth ;
103+ if ( value == numSpinner . Width )
104+ return ;
105+ }
106+ var delta = value - numSpinner . Width ;
107+ if ( delta == 0 )
108+ return ;
109+ var spinnerLoc = numSpinner . Location ;
110+ numSpinner . Location = new Point ( spinnerLoc . X - delta , spinnerLoc . Y ) ;
111+ trackBar . Width -= delta ;
112+ numSpinner . Width = value ;
113+ }
114+ }
115+
116+ public override Size MinimumSize
117+ {
118+ get { return base . MinimumSize ; }
119+ set
120+ {
121+ var minWidth = numSpinner . MinimumSize . Width + trackBar . MinimumSize . Width ;
122+ if ( value . Width < minWidth )
123+ value . Width = minWidth ;
124+ base . MinimumSize = value ;
125+ }
126+ }
127+
89128 private void OnValueChanged ( )
90129 {
91130 if ( ValueChanged != null )
0 commit comments