Separate launcher draw data setting from launcher widget redrawing.

This commit is contained in:
UnknownShadow200 2016-01-28 13:59:58 +11:00
parent b46f2cff5f
commit 7ff7386b6e
13 changed files with 130 additions and 102 deletions

View File

@ -128,24 +128,24 @@ namespace Launcher2 {
void MakeTableWidget() {
int tableHeight = Math.Max( game.Height - tableY - 50, 1 );
LauncherTableWidget widget;
if( widgets[tableIndex] != null ) {
LauncherTableWidget table = (LauncherTableWidget)widgets[tableIndex];
table.Height = tableHeight;
table.Redraw( drawer, tableFont, inputFont, inputFont );
return;
}
LauncherTableWidget widget = new LauncherTableWidget( game );
widget = (LauncherTableWidget)widgets[tableIndex];
} else {
widget = new LauncherTableWidget( game );
widget.CurrentIndex = 0;
widget.SetEntries( game.Session.Servers );
widget.Height = tableHeight;
widget.DrawAt( drawer, tableFont, inputFont, inputFont,
widget.SetDrawData( drawer, tableFont, inputFont, inputFont,
Anchor.LeftOrTop, Anchor.LeftOrTop, tableX, tableY );
widget.NeedRedraw = Resize;
widget.SelectedChanged = SelectedChanged;
widgets[widgetIndex++] = widget;
widgets[widgetIndex] = widget;
}
widget.Height = tableHeight;
widget.Redraw( drawer );
widgetIndex++;
}
void FilterList() {

View File

@ -56,7 +56,8 @@ namespace Launcher2 {
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
widget.DrawAt( drawer, text, inputFont, Anchor.Centre, Anchor.Centre, 0, 100 );
widget.SetDrawData( drawer, text, inputFont, Anchor.Centre, Anchor.Centre, 0, 100 );
widget.Redraw( drawer );
Dirty = true;
}
}

View File

@ -39,7 +39,8 @@ namespace Launcher2 {
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
lastInput.Redraw( drawer, lastInput.Text, inputFont, inputHintFont );
lastInput.SetDrawData( drawer, lastInput.Text );
lastInput.Redraw( drawer );
if( caretShow )
lastInput.DrawCaret( drawer, inputFont );
Dirty = true;
@ -114,11 +115,11 @@ namespace Launcher2 {
protected virtual void RedrawLastInput() {
if( lastInput.Width > lastInput.ButtonWidth )
game.ClearArea( lastInput.X, lastInput.Y, lastInput.Width + 1, lastInput.Height + 1 );
game.ClearArea( lastInput.X, lastInput.Y, lastInput.Width, lastInput.Height );
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
lastInput.Redraw( drawer, lastInput.Text, inputFont, inputHintFont );
lastInput.Redraw( drawer );
Dirty = true;
}
}
@ -135,8 +136,8 @@ namespace Launcher2 {
}
protected void Set( int index, string text ) {
((LauncherInputWidget)widgets[index])
.Redraw( drawer, text, inputFont, inputHintFont );
((LauncherInputWidget)widgets[index]).SetDrawData( drawer, text );
((LauncherInputWidget)widgets[index]).Redraw( drawer );
}
protected virtual void MouseWheelChanged( object sender, MouseWheelEventArgs e ) {
@ -149,14 +150,14 @@ namespace Launcher2 {
drawer.SetBitmap( game.Framebuffer );
if( lastInput != null ) {
lastInput.Active = false;
lastInput.Redraw( drawer, lastInput.Text, inputFont, inputHintFont );
lastInput.Redraw( drawer );
}
input.Active = true;
widgetOpenTime = DateTime.UtcNow;
lastCaretFlash = false;
input.SetCaretToCursor( mouseX, mouseY, drawer, inputFont );
input.Redraw( drawer, input.Text, inputFont, inputHintFont );
input.Redraw( drawer );
}
lastInput = input;
Dirty = true;
@ -168,7 +169,7 @@ namespace Launcher2 {
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
input.Active = false;
input.Redraw( drawer, lastInput.Text, inputFont, inputHintFont );
input.Redraw( drawer );
}
lastInput = null;
Dirty = true;
@ -181,21 +182,21 @@ namespace Launcher2 {
protected void MakeInput( string text, int width, Anchor horAnchor, Anchor verAnchor,
bool password, int x, int y, int maxChars, string hint ) {
LauncherInputWidget widget;
if( widgets[widgetIndex] != null ) {
LauncherInputWidget input = (LauncherInputWidget)widgets[widgetIndex];
input.DrawAt( drawer, text, inputFont, inputHintFont, horAnchor, verAnchor, width, 30, x, y );
widgetIndex++;
return;
}
LauncherInputWidget widget = new LauncherInputWidget( game );
widget = (LauncherInputWidget)widgets[widgetIndex];
} else {
widget = new LauncherInputWidget( game );
widget.OnClick = InputClick;
widget.Password = password;
widget.MaxTextLength = maxChars;
widget.HintText = hint;
widgets[widgetIndex] = widget;
}
widget.DrawAt( drawer, text, inputFont, inputHintFont, horAnchor, verAnchor, width, 30, x, y );
widgets[widgetIndex++] = widget;
widget.SetDrawData( drawer, text, inputFont, inputHintFont, horAnchor, verAnchor, width, 30, x, y );
widget.Redraw( drawer );
widgetIndex++;
}
public override void Dispose() {

View File

@ -67,7 +67,7 @@ namespace Launcher2 {
button.RedrawBackground();
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
button.Redraw( drawer, button.Text, buttonFont );
button.Redraw( drawer );
}
Dirty = true;
}
@ -81,7 +81,7 @@ namespace Launcher2 {
button.RedrawBackground();
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
button.Redraw( drawer, button.Text, buttonFont );
button.Redraw( drawer );
}
Dirty = true;
}
@ -150,47 +150,50 @@ namespace Launcher2 {
protected void MakeButtonAt( string text, int width, int height, Font font, Anchor horAnchor,
Anchor verAnchor, int x, int y, Action<int, int> onClick ) {
LauncherButtonWidget widget;
if( widgets[widgetIndex] != null ) {
LauncherButtonWidget button = (LauncherButtonWidget)widgets[widgetIndex];
button.Active = false;
button.DrawAt( drawer, text, font, horAnchor, verAnchor, width, height, x, y );
widgetIndex++;
return;
}
LauncherButtonWidget widget = new LauncherButtonWidget( game );
widget = (LauncherButtonWidget)widgets[widgetIndex];
} else {
widget = new LauncherButtonWidget( game );
widget.Text = text;
widget.OnClick = onClick;
widgets[widgetIndex] = widget;
}
widget.Active = false;
widget.DrawAt( drawer, text, font, horAnchor, verAnchor, width, height, x, y );
widgets[widgetIndex++] = widget;
widget.SetDrawData( drawer, text, font, horAnchor, verAnchor, width, height, x, y );
widget.Redraw( drawer );
widgetIndex++;
}
protected void MakeLabelAt( string text, Font font, Anchor horAnchor, Anchor verAnchor, int x, int y ) {
LauncherLabelWidget widget;
if( widgets[widgetIndex] != null ) {
LauncherLabelWidget label = (LauncherLabelWidget)widgets[widgetIndex];
label.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y );
widget = (LauncherLabelWidget)widgets[widgetIndex];
} else {
LauncherLabelWidget widget = new LauncherLabelWidget( game, text );
widget.DrawAt( drawer, text, font, horAnchor, verAnchor, x, y );
widget = new LauncherLabelWidget( game, text );
widgets[widgetIndex] = widget;
}
widget.SetDrawData( drawer, text, font, horAnchor, verAnchor, x, y );
widget.Redraw( drawer );
widgetIndex++;
}
protected void MakeBooleanAt( Anchor horAnchor, Anchor verAnchor, Font font, bool initValue,
int width, int height, int x, int y, Action<int, int> onClick ) {
LauncherBooleanWidget widget;
if( widgets[widgetIndex] != null ) {
LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[widgetIndex];
widget.DrawAt( drawer, horAnchor, verAnchor, x, y );
widget = (LauncherBooleanWidget)widgets[widgetIndex];
} else {
LauncherBooleanWidget widget = new LauncherBooleanWidget( game, font, width, height );
widget = new LauncherBooleanWidget( game, font, width, height );
widget.Value = initValue;
widget.DrawAt( drawer, horAnchor, verAnchor, x, y );
widget.OnClick = onClick;
widgets[widgetIndex] = widget;
}
widget.SetDrawData( drawer, horAnchor, verAnchor, x, y );
widget.Redraw( drawer );
widgetIndex++;
}
}

View File

@ -58,7 +58,8 @@ namespace Launcher2 {
game.ClearArea( widget.X, widget.Y, widget.Width, widget.Height );
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
widget.DrawAt( drawer, text, inputFont, Anchor.Centre, Anchor.Centre, 0, 20 );
widget.SetDrawData( drawer, text, inputFont, Anchor.Centre, Anchor.Centre, 0, 20 );
widget.Redraw( drawer );
}
Dirty = true;
}

View File

@ -103,7 +103,8 @@ namespace Launcher2 {
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
drawer.Clear( backCol, widget.X, widget.Y, widget.Width, widget.Height );
widget.Redraw( drawer, text, statusFont );
widget.SetDrawData( drawer, text, statusFont, Anchor.Centre, Anchor.Centre, 0, 5 );
widget.Redraw( drawer );
Dirty = true;
}
}

View File

@ -98,7 +98,7 @@ namespace Launcher2 {
MakeLabelAt( "Update to dev build", titleFont, Anchor.Centre, Anchor.Centre, -120, 30 );
MakeLabelAt( "Latest dev:", infoFont, Anchor.Centre, Anchor.Centre, -100, 60 );
string latestDev = GetDateString( lastDev, validDev );
MakeLabelAt( latestDev, infoFont, Anchor.Centre, Anchor.Centre, 30, 60 );
MakeLabelAt( latestDev, infoFont, Anchor.Centre, Anchor.Centre, 50, 60 );
MakeButtonAt( "Direct3D 9", 130, 30, titleFont, Anchor.Centre, -80, 95,
(x, y) => UpdateBuild( lastDev, validDev, false, true ) );
MakeButtonAt( "OpenGL", 130, 30, titleFont, Anchor.Centre, 80, 95,

View File

@ -67,13 +67,16 @@ namespace Launcher2 {
public int Y, Height;
}
public void DrawAt( IDrawer2D drawer, Font font, Font titleFont, Font boldFont,
Font font, titleFont, boldFont;
public void SetDrawData( IDrawer2D drawer, Font font, Font titleFont, Font boldFont,
Anchor horAnchor, Anchor verAnchor, int x, int y ) {
CalculateOffset( x, y, horAnchor, verAnchor );
Redraw( drawer, font, titleFont, boldFont );
this.font = font;
this.titleFont = titleFont;
this.boldFont = boldFont;
}
public void Redraw( IDrawer2D drawer, Font font, Font titleFont, Font boldFont ) {
public override void Redraw( IDrawer2D drawer ) {
for( int i = 0; i < ColumnWidths.Length; i++ ) {
ColumnWidths[i] = DesiredColumnWidths[i];
Utils.Clamp( ref ColumnWidths[i], 20, Window.Width - 20 );

View File

@ -17,12 +17,11 @@ namespace Launcher2 {
this.font = font;
}
public void DrawAt( IDrawer2D drawer, Anchor horAnchor, Anchor verAnchor, int x, int y ) {
public void SetDrawData( IDrawer2D drawer, Anchor horAnchor, Anchor verAnchor, int x, int y ) {
CalculateOffset( x, y, horAnchor, verAnchor );
Redraw( drawer );
}
public void Redraw( IDrawer2D drawer ) {
public override void Redraw( IDrawer2D drawer ) {
drawer.DrawRect( FastColour.Black, X, Y, Width, Height );
if( Value ) {
DrawTextArgs args = new DrawTextArgs( "X", font, false );

View File

@ -9,33 +9,36 @@ namespace Launcher2 {
public bool Shadow = true;
public bool Active = false;
const int border = 2;
Size textSize;
Font font;
public LauncherButtonWidget( LauncherWindow window ) : base( window ) {
}
public void DrawAt( IDrawer2D drawer, string text, Font font, Anchor horAnchor,
public void SetDrawData( IDrawer2D drawer, string text, Font font, Anchor horAnchor,
Anchor verAnchor, int width, int height, int x, int y ) {
Width = width; Height = height;
CalculateOffset( x, y, horAnchor, verAnchor );
RedrawBackground();
Redraw( drawer, text, font );
this.font = font;
Text = text;
DrawTextArgs args = new DrawTextArgs( text, font, true );
textSize = drawer.MeasureSize( ref args );
}
public void Redraw( IDrawer2D drawer, string text, Font font ) {
Text = text;
if( !Active )
text = "&7" + text;
public override void Redraw( IDrawer2D drawer ) {
string text = Text;
if( !Active ) text = "&7" + text;
int xOffset = Width - textSize.Width, yOffset = Height - textSize.Height;
DrawTextArgs args = new DrawTextArgs( text, font, true );
Size size = drawer.MeasureSize( ref args );
int xOffset = Width - size.Width, yOffset = Height - size.Height;
RedrawBackground();
DrawBorder( drawer );
if( Window.ClassicMode )
DrawClassic( drawer, ref args, xOffset, yOffset );
DrawClassic( drawer, xOffset, yOffset );
else
DrawNormal( drawer, ref args, xOffset, yOffset );
DrawNormal( drawer, xOffset, yOffset );
args.SkipPartsCheck = true;
drawer.DrawText( ref args, X + xOffset / 2, Y + yOffset / 2 );
}
@ -47,13 +50,13 @@ namespace Launcher2 {
drawer.Clear( backCol, X + Width - border, Y + 1, border, Height - 2 );
}
void DrawNormal( IDrawer2D drawer, ref DrawTextArgs args, int xOffset, int yOffset ) {
void DrawNormal( IDrawer2D drawer, int xOffset, int yOffset ) {
if( Active ) return;
FastColour lineCol = LauncherSkin.ButtonHighlightCol;
drawer.Clear( lineCol, X + border + 1, Y + border, Width - (border * 2 + 1), border );
}
void DrawClassic( IDrawer2D drawer, ref DrawTextArgs args, int xOffset, int yOffset ) {
void DrawClassic( IDrawer2D drawer, int xOffset, int yOffset ) {
FastColour highlightCol = Active ? new FastColour( 189, 198, 255 ) : new FastColour( 168, 168, 168 );
drawer.Clear( highlightCol, X + border + 1, Y + border, Width - (border * 2 + 1), border );
drawer.Clear( highlightCol, X + border, Y + border + 1, border, Height - (border * 2 + 1) );

View File

@ -33,24 +33,42 @@ namespace Launcher2 {
public int CaretPos = -1;
Font font, hintFont;
int textHeight;
public LauncherInputWidget( LauncherWindow window ) : base( window ) {
}
public void DrawAt( IDrawer2D drawer, string text, Font font, Font hintFont,
public void SetDrawData( IDrawer2D drawer, string text, Font font, Font hintFont,
Anchor horAnchor, Anchor verAnchor, int width, int height, int x, int y ) {
ButtonWidth = width; ButtonHeight = height;
Width = width; Height = height;
CalculateOffset( x, y, horAnchor, verAnchor );
Redraw( drawer, text, font, hintFont );
}
public void Redraw( IDrawer2D drawer, string text, Font font, Font hintFont ) {
Text = text;
if( Password )
text = new String( '*', text.Length );
if( Password ) text = new String( '*', text.Length );
this.font = font;
this.hintFont = hintFont;
DrawTextArgs args = new DrawTextArgs( text, font, true );
Size size = drawer.MeasureSize( ref args );
Width = Math.Max( ButtonWidth, size.Width + 7 );
Width = Math.Max( ButtonWidth, size.Width + 15 );
textHeight = size.Height;
}
public void SetDrawData( IDrawer2D drawer, string text ) {
Text = text;
if( Password ) text = new String( '*', text.Length );
DrawTextArgs args = new DrawTextArgs( text, font, true );
Size size = drawer.MeasureSize( ref args );
Width = Math.Max( ButtonWidth, size.Width + 15 );
textHeight = size.Height;
}
public override void Redraw( IDrawer2D drawer ) {
string text = Text;
if( Password ) text = new String( '*', text.Length );
DrawTextArgs args = new DrawTextArgs( text, font, true );
FastColour col = Active ? new FastColour( 240, 240, 240 ) : new FastColour( 180, 180, 180 );
drawer.Clear( col, X + 1, Y, Width - 2, 2 );
@ -59,9 +77,8 @@ namespace Launcher2 {
drawer.Clear( col, X + Width - 2, Y + 1, 2, Height - 2 );
drawer.Clear( FastColour.Black, X + 2, Y + 2, Width - 4, Height - 4 );
args.SkipPartsCheck = true;
if( Text.Length != 0 || HintText == null ) {
int y = Y + 2 + (Height - size.Height) / 2;
int y = Y + 2 + (Height - textHeight) / 2;
drawer.DrawText( ref args, X + 5, y );
} else {
args.SkipPartsCheck = false;

View File

@ -7,28 +7,25 @@ namespace Launcher2 {
/// <summary> Widget that represents text that cannot be modified by the user. </summary>
public sealed class LauncherLabelWidget : LauncherWidget {
Font font;
public LauncherLabelWidget( LauncherWindow window, string text ) : base( window ) {
Text = text;
}
public void DrawAt( IDrawer2D drawer, string text, Font font,
public void SetDrawData( IDrawer2D drawer, string text, Font font,
Anchor horAnchor, Anchor verAnchor, int x, int y ) {
DrawTextArgs args = new DrawTextArgs( text, font, true );
Size size = drawer.MeasureSize( ref args );
Width = size.Width; Height = size.Height;
CalculateOffset( x, y, horAnchor, verAnchor );
Redraw( drawer, text, font );
Text = text;
this.font = font;
}
public void Redraw( IDrawer2D drawer, string text, Font font ) {
DrawTextArgs args = new DrawTextArgs( text, font, true );
Size size = drawer.MeasureSize( ref args );
Width = size.Width; Height = size.Height;
args.SkipPartsCheck = true;
public override void Redraw( IDrawer2D drawer ) {
DrawTextArgs args = new DrawTextArgs( Text, font, true );
drawer.DrawText( ref args, X, Y );
Text = text;
}
}
}

View File

@ -24,5 +24,7 @@ namespace Launcher2 {
else if( verAnchor == Anchor.Centre ) Y = y + Window.Height / 2 - Height / 2;
else if( verAnchor == Anchor.BottomOrRight ) Y = y + Window.Height - Height;
}
public abstract void Redraw( IDrawer2D drawer );
}
}