KF2-YetAnotherScoreboard/ScoreboardExt/Classes/KF2Style.uc
2021-06-12 23:11:37 +03:00

455 lines
12 KiB
Ucode

Class KF2Style extends GUIStyleBase;
`include(Build.uci)
`include(Logger.uci)
var Texture2D LoadedTex[2];
const TOOLTIP_BORDER=4;
function InitStyle()
{
local byte i;
Super.InitStyle();
LoadedTex[0] = Texture2D(DynamicLoadObject("EditorMaterials.CASC_ModuleEnable",class'Texture2D'));
LoadedTex[1] = Texture2D(DynamicLoadObject("EditorMaterials.Tick",class'Texture2D'));
for( i=0; i<ArrayCount(LoadedTex); ++i )
{
if( LoadedTex[i]==None )
LoadedTex[i] = Texture2D'EngineMaterials.DefaultWhiteGrid';
}
}
function RenderFramedWindow( KFGUI_FloatingWindow P )
{
local int XS,YS,CornerSlope,TitleHeight;
XS = Canvas.ClipX-Canvas.OrgX;
YS = Canvas.ClipY-Canvas.OrgY;
CornerSlope = DefaultHeight*0.4;
TitleHeight = DefaultHeight;
// Frame Header
if( P.bWindowFocused )
Canvas.SetDrawColor(220,2,2,255);
else Canvas.SetDrawColor(100,1,1,P.FrameOpacity);
Canvas.SetPos(0,0);
DrawCornerTex(CornerSlope,0);
Canvas.SetPos(0,TitleHeight);
DrawCornerTex(CornerSlope,3);
Canvas.SetPos(XS-CornerSlope,0);
DrawCornerTex(CornerSlope,1);
Canvas.SetPos(XS-CornerSlope,TitleHeight);
DrawCornerTex(CornerSlope,2);
// Header filling
Canvas.SetPos(0,CornerSlope);
DrawWhiteBox(XS,TitleHeight-CornerSlope);
Canvas.SetPos(CornerSlope,0);
DrawWhiteBox(XS-(CornerSlope*2),CornerSlope);
// Frame itself.
if( P.bWindowFocused )
Canvas.SetDrawColor(32,6,6,255);
else Canvas.SetDrawColor(16,2,2,P.FrameOpacity);
Canvas.SetPos(0,TitleHeight);
DrawCornerTex(CornerSlope,0);
Canvas.SetPos(XS-CornerSlope,TitleHeight);
DrawCornerTex(CornerSlope,1);
Canvas.SetPos(0,YS-CornerSlope);
DrawCornerTex(CornerSlope,2);
Canvas.SetPos(XS-CornerSlope,YS-CornerSlope);
DrawCornerTex(CornerSlope,3);
// Filling
Canvas.SetPos(CornerSlope,TitleHeight);
DrawWhiteBox(XS-(CornerSlope*2),YS-TitleHeight);
Canvas.SetPos(0,TitleHeight+CornerSlope);
DrawWhiteBox(CornerSlope,YS-(CornerSlope*2)-TitleHeight);
Canvas.SetPos(XS-CornerSlope,TitleHeight+CornerSlope);
DrawWhiteBox(CornerSlope,YS-(CornerSlope*2)-TitleHeight);
// Title.
if( P.WindowTitle!="" )
{
Canvas.SetDrawColor(250,250,250,P.FrameOpacity);
Canvas.SetPos(CornerSlope,0);
DrawText(P.WindowTitle);
}
}
function RenderWindow( KFGUI_Page P )
{
local int XS,YS,CornerSlope;
XS = Canvas.ClipX-Canvas.OrgX;
YS = Canvas.ClipY-Canvas.OrgY;
CornerSlope = DefaultHeight*0.4;
// Frame itself.
if( P.bWindowFocused )
Canvas.SetDrawColor(64,64,64,255);
else Canvas.SetDrawColor(32,32,32,P.FrameOpacity);
Canvas.SetPos(0,0);
DrawCornerTex(CornerSlope,0);
Canvas.SetPos(XS-CornerSlope,0);
DrawCornerTex(CornerSlope,1);
Canvas.SetPos(0,YS-CornerSlope);
DrawCornerTex(CornerSlope,2);
Canvas.SetPos(XS-CornerSlope,YS-CornerSlope);
DrawCornerTex(CornerSlope,3);
// Filling
Canvas.SetPos(CornerSlope,0);
DrawWhiteBox(XS-(CornerSlope*2),YS);
Canvas.SetPos(0,CornerSlope);
DrawWhiteBox(CornerSlope,YS-(CornerSlope*2));
Canvas.SetPos(XS-CornerSlope,CornerSlope);
DrawWhiteBox(CornerSlope,YS-(CornerSlope*2));
}
function RenderToolTip( KFGUI_Tooltip TT )
{
local int i;
local float X,Y,XS,YS,TX,TY,TS,DefFontHeight;
Canvas.Font = PickFont(TS);
// First compute textbox size.
TY = DefaultHeight*TT.Lines.Length;
for( i=0; i<TT.Lines.Length; ++i )
{
if( TT.Lines[i]!="" )
Canvas.TextSize(TT.Lines[i],XS,YS);
TX = FMax(XS,TX);
}
TX*=TS;
// Give some borders.
TX += TOOLTIP_BORDER*2;
TY += TOOLTIP_BORDER*2;
X = TT.CompPos[0];
Y = TT.CompPos[1]+24.f;
// Then check if too close to window edge, then move it to another pivot.
if( (X+TX)>TT.Owner.ScreenSize.X )
X = TT.Owner.ScreenSize.X-TX;
if( (Y+TY)>TT.Owner.ScreenSize.Y )
Y = TT.CompPos[1]-TY;
if( TT.CurrentAlpha<255 )
TT.CurrentAlpha = Min(TT.CurrentAlpha+25,255);
// Reset clipping.
Canvas.SetOrigin(0,0);
Canvas.SetClip(TT.Owner.ScreenSize.X,TT.Owner.ScreenSize.Y);
// Draw frame.
Canvas.SetDrawColor(200,200,80,TT.CurrentAlpha);
Canvas.SetPos(X-2,Y-2);
DrawBoxHollow(X-2,Y-2,TX+4,TY+4,2);
Canvas.SetDrawColor(80,10,80,TT.CurrentAlpha);
Canvas.SetPos(X,Y);
DrawWhiteBox(TX,TY);
DefFontHeight = DefaultHeight;
// Draw text.
Canvas.SetDrawColor(255,255,255,TT.CurrentAlpha);
X+=TOOLTIP_BORDER;
Y+=TOOLTIP_BORDER;
for( i=0; i<TT.Lines.Length; ++i )
{
Canvas.SetPos(X,Y);
Canvas.DrawText(TT.Lines[i],,TS,TS,TT.TextFontInfo);
Y+=DefFontHeight;
}
}
function RenderScrollBar( KFGUI_ScrollBarBase S )
{
local float A;
local byte i;
if( S.bDisabled )
Canvas.SetDrawColor(5, 5, 5, 0);
else if( S.bFocused || S.bGrabbedScroller )
Canvas.SetDrawColor(15, 15, 15, 160);
else Canvas.SetDrawColor(15, 15, 15, 160);
DrawRectBox (0.f, 0.f, S.CompPos[2], S.CompPos[3], 4);
if( S.bDisabled )
return;
if( S.bVertical )
i = 3;
else i = 2;
S.SliderScale = FMax(S.PageStep * (S.CompPos[i] - 32.f) / (S.MaxRange + S.PageStep),S.CalcButtonScale);
if( S.bGrabbedScroller )
{
// Track mouse.
if( S.bVertical )
A = S.Owner.MousePosition.Y - S.CompPos[1] - S.GrabbedOffset;
else A = S.Owner.MousePosition.X - S.CompPos[0] - S.GrabbedOffset;
A /= ((S.CompPos[i]-S.SliderScale) / float(S.MaxRange));
S.SetValue(A);
}
A = float(S.CurrentScroll) / float(S.MaxRange);
S.ButtonOffset = A*(S.CompPos[i]-S.SliderScale);
if( S.bGrabbedScroller )
Canvas.SetDrawColor(255,0,0,200);
else if( S.bFocused )
Canvas.SetDrawColor(200,0,0,200);
else Canvas.SetDrawColor(150,0,0,200);
if( S.bVertical )
DrawRectBox (0.f, S.ButtonOffset, S.CompPos[2], S.SliderScale, 4);
else DrawRectBox (S.ButtonOffset, 0.f, S.SliderScale, S.CompPos[3], 4);
}
function RenderColumnHeader( KFGUI_ColumnTop C, float XPos, float Width, int Index, bool bFocus, bool bSort )
{
local int XS;
if( bSort )
{
if( bFocus )
Canvas.SetDrawColor(175,240,8,255);
else Canvas.SetDrawColor(128,200,56,255);
}
else if( bFocus )
Canvas.SetDrawColor(220,220,8,255);
else Canvas.SetDrawColor(220,86,56,255);
XS = DefaultHeight*0.125;
Canvas.SetPos(XPos,0.f);
DrawCornerTexNU(XS,C.CompPos[3],0);
Canvas.SetPos(XPos+XS,0.f);
DrawWhiteBox(Width-(XS*2),C.CompPos[3]);
Canvas.SetPos(XPos+Width-(XS*2),0.f);
DrawCornerTexNU(XS,C.CompPos[3],1);
Canvas.SetDrawColor(250,250,250,255);
Canvas.SetPos(XPos+XS,(C.CompPos[3]-C.ListOwner.TextHeight)*0.5f);
C.ListOwner.DrawStrClipped(C.ListOwner.Columns[Index].Text);
}
function RenderCheckbox( KFGUI_CheckBox C )
{
if( C.bDisabled )
Canvas.SetDrawColor(86,86,86,255);
else if( C.bPressedDown )
Canvas.SetDrawColor(128,255,128,255);
else if( C.bFocused )
Canvas.SetDrawColor(150,200,128,255);
else Canvas.SetDrawColor(128,186,128,255);
Canvas.SetPos(0.f,0.f);
Canvas.DrawTileStretched(LoadedTex[0],C.CompPos[2],C.CompPos[3],0,0,LoadedTex[0].GetSurfaceWidth(),LoadedTex[0].GetSurfaceHeight());
if( C.bChecked )
{
if( C.bDisabled )
Canvas.SetDrawColor(128,128,128,255);
else Canvas.SetDrawColor(255,255,255,255);
Canvas.SetPos(0.f,0.f);
Canvas.DrawTile(LoadedTex[1],C.CompPos[2],C.CompPos[3],0,0,LoadedTex[1].GetSurfaceWidth(),LoadedTex[1].GetSurfaceHeight());
}
}
function RenderComboBox( KFGUI_ComboBox C )
{
if( C.bDisabled )
Canvas.SetDrawColor(64,4,4,255);
else if( C.bPressedDown )
Canvas.SetDrawColor(220,56,56,255);
else if( C.bFocused )
Canvas.SetDrawColor(190,48,48,255);
else Canvas.SetDrawColor(186,4,4,255);
Canvas.SetPos(0.f,0.f);
DrawWhiteBox(C.CompPos[2],C.CompPos[3]);
if( C.SelectedIndex<C.Values.Length && C.Values[C.SelectedIndex]!="" )
{
Canvas.SetPos(C.BorderSize,(C.CompPos[3]-C.TextHeight)*0.5);
if( C.bDisabled )
Canvas.DrawColor = C.TextColor*0.5f;
else Canvas.DrawColor = C.TextColor;
Canvas.PushMaskRegion(Canvas.OrgX,Canvas.OrgY,Canvas.ClipX-C.BorderSize,Canvas.ClipY);
Canvas.DrawText(C.Values[C.SelectedIndex],,C.TextScale,C.TextScale,C.TextFontInfo);
Canvas.PopMaskRegion();
}
}
function RenderComboList( KFGUI_ComboSelector C )
{
local float X,Y,YL,YP,Edge;
local int i;
local bool bCheckMouse;
// Draw background.
Edge = C.Combo.BorderSize;
Canvas.SetPos(0.f,0.f);
Canvas.SetDrawColor(128,4,4,255);
DrawWhiteBox(C.CompPos[2],C.CompPos[3]);
Canvas.SetPos(Edge,Edge);
Canvas.SetDrawColor(64,4,4,255);
DrawWhiteBox(C.CompPos[2]-(Edge*2.f),C.CompPos[3]-(Edge*2.f));
// While rendering, figure out mouse focus row.
X = C.Owner.MousePosition.X - Canvas.OrgX;
Y = C.Owner.MousePosition.Y - Canvas.OrgY;
bCheckMouse = (X>0.f && X<C.CompPos[2] && Y>0.f && Y<C.CompPos[3]);
Canvas.Font = C.Combo.TextFont;
YL = C.Combo.TextHeight;
YP = Edge;
C.CurrentRow = -1;
Canvas.PushMaskRegion(Canvas.OrgX,Canvas.OrgY,Canvas.ClipX,Canvas.ClipY);
for( i=0; i<C.Combo.Values.Length; ++i )
{
if( bCheckMouse && Y>=YP && Y<=(YP+YL) )
{
bCheckMouse = false;
C.CurrentRow = i;
Canvas.SetPos(4.f,YP);
Canvas.SetDrawColor(128,48,48,255);
DrawWhiteBox(C.CompPos[2]-(Edge*2.f),YL);
}
Canvas.SetPos(Edge,YP);
if( i==C.Combo.SelectedIndex )
Canvas.DrawColor = C.Combo.SelectedTextColor;
else Canvas.DrawColor = C.Combo.TextColor;
Canvas.DrawText(C.Combo.Values[i],,C.Combo.TextScale,C.Combo.TextScale,C.Combo.TextFontInfo);
YP+=YL;
}
Canvas.PopMaskRegion();
if( C.OldRow!=C.CurrentRow )
{
C.OldRow = C.CurrentRow;
C.PlayMenuSound(MN_DropdownChange);
}
}
function RenderRightClickMenu( KFGUI_RightClickMenu C )
{
local float X,Y,YP,Edge,TextScale,TexDefHieght;
local int i;
local bool bCheckMouse;
// Draw background.
Edge = C.EdgeSize;
Canvas.SetDrawColor(148,4,4,255);
DrawBoxHollow(0.f,0.f,C.CompPos[2],C.CompPos[3],Edge);
Canvas.SetPos(Edge,Edge);
Canvas.SetDrawColor(64,4,4,200);
DrawWhiteBox(C.CompPos[2]-(Edge*2.f),C.CompPos[3]-(Edge*2.f));
// While rendering, figure out mouse focus row.
X = C.Owner.MousePosition.X - Canvas.OrgX;
Y = C.Owner.MousePosition.Y - Canvas.OrgY;
bCheckMouse = (X>0.f && X<C.CompPos[2] && Y>0.f && Y<C.CompPos[3]);
Canvas.Font = PickFont(TextScale);
YP = Edge;
C.CurrentRow = -1;
TexDefHieght = DefaultHeight;
Canvas.PushMaskRegion(Canvas.OrgX,Canvas.OrgY,Canvas.ClipX,Canvas.ClipY);
for( i=0; i<C.ItemRows.Length; ++i )
{
if( bCheckMouse && Y>=YP && Y<=(YP+TexDefHieght) )
{
bCheckMouse = false;
C.CurrentRow = i;
Canvas.SetPos(4.f,YP);
Canvas.SetDrawColor(128,48,48,255);
DrawWhiteBox(C.CompPos[2]-(Edge*2.f),TexDefHieght);
}
Canvas.SetPos(Edge,YP);
if( C.ItemRows[i].bSplitter )
{
Canvas.SetDrawColor(0,0,0,255);
Canvas.DrawText("-------",,TextScale,TextScale);
}
else
{
if( C.ItemRows[i].bDisabled )
Canvas.SetDrawColor(148,148,148,255);
else Canvas.SetDrawColor(248,248,248,255);
Canvas.DrawText(C.ItemRows[i].Text,,TextScale,TextScale);
}
YP+=TexDefHieght;
}
Canvas.PopMaskRegion();
if( C.OldRow!=C.CurrentRow )
{
C.OldRow = C.CurrentRow;
C.PlayMenuSound(MN_DropdownChange);
}
}
function RenderButton( KFGUI_Button B )
{
local float XL,YL,TS;
local byte i;
if( B.bDisabled )
Canvas.SetDrawColor(32,0,0,255);
else if( B.bPressedDown )
Canvas.SetDrawColor(255,64,64,255);
else if( B.bFocused )
Canvas.SetDrawColor(180,45,45,255);
else Canvas.SetDrawColor(164,8,8,255);
if( B.bIsHighlighted )
{
Canvas.DrawColor.R = Min(Canvas.DrawColor.R+25,255);
Canvas.DrawColor.G = Min(Canvas.DrawColor.G+25,255);
Canvas.DrawColor.B = Min(Canvas.DrawColor.B+25,255);
}
Canvas.SetPos(0.f,0.f);
if( B.ExtravDir==255 )
DrawWhiteBox(B.CompPos[2],B.CompPos[3]);
else DrawRectBox(0,0,B.CompPos[2],B.CompPos[3],Min(B.CompPos[2],B.CompPos[3])*0.2,B.ExtravDir);
if( B.OverlayTexture.Texture!=None )
{
Canvas.SetPos(0.f,0.f);
Canvas.DrawTile(B.OverlayTexture.Texture,B.CompPos[2],B.CompPos[3],B.OverlayTexture.U,B.OverlayTexture.V,B.OverlayTexture.UL,B.OverlayTexture.VL);
}
if( B.ButtonText!="" )
{
// Chose the best font to fit this button.
i = Min(B.FontScale,MaxFontScale);
while( true )
{
Canvas.Font = PickFont(TS);
Canvas.TextSize(B.ButtonText,XL,YL,TS,TS);
if( i==0 || (XL<(B.CompPos[2]*0.95) && YL<(B.CompPos[3]*0.95)) )
break;
--i;
}
Canvas.SetPos((B.CompPos[2]-XL)*0.5,(B.CompPos[3]-YL)*0.5);
if( B.bDisabled )
Canvas.DrawColor = B.TextColor*0.5f;
else Canvas.DrawColor = B.TextColor;
Canvas.DrawText(B.ButtonText,,TS,TS,B.TextFontInfo);
}
}
defaultproperties
{
MaxFontScale=5
}