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 }