1004 lines
32 KiB
C++
1004 lines
32 KiB
C++
|
// Copyright (C) 2007 Id Software, Inc.
|
||
|
//
|
||
|
|
||
|
#include "../precompiled.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#if defined( _DEBUG ) && !defined( ID_REDIRECT_NEWDELETE )
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
#include "UserInterfaceManager.h"
|
||
|
#include "UIWindow.h"
|
||
|
#include "UserInterfaceLocal.h"
|
||
|
#include "../../decllib/declTypeHolder.h"
|
||
|
#include "../../renderer/Image.h"
|
||
|
|
||
|
#include "../../sys/sys_local.h"
|
||
|
|
||
|
using namespace sdProperties;
|
||
|
|
||
|
#define INIT_SCRIPT_FUNCTION( SCRIPTNAME, RETURN, PARMS, FUNCTION ) windowFunctions.Set( SCRIPTNAME, new sdUITemplateFunction< sdUIWindow >( RETURN, PARMS, &sdUIWindow::FUNCTION ) );
|
||
|
|
||
|
/*
|
||
|
===============================================================================
|
||
|
|
||
|
sdUIWindow
|
||
|
|
||
|
===============================================================================
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::InitFunctions
|
||
|
============
|
||
|
*/
|
||
|
#pragma inline_depth( 0 )
|
||
|
#pragma optimize( "", off )
|
||
|
SD_UI_PUSH_CLASS_TAG( sdUIWindow )
|
||
|
void sdUIWindow::InitFunctions( void ) {
|
||
|
SD_UI_FUNC_TAG( attachRenderCallback, "Attach a render callback to the drawing of the window." )
|
||
|
SD_UI_FUNC_PARM( string, "callbackName", "Name of the render callback." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "attachRenderCallback", 'v', "s", Script_AttachRenderCallback );
|
||
|
|
||
|
SD_UI_FUNC_TAG( attachInputHandler, "Attach an input handler for the window." )
|
||
|
SD_UI_FUNC_PARM( string, "inputHandlerName", "Name of the input handler callback." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "attachInputHandler", 'v', "s", Script_AttachInputHandler );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawMaterial, "Draw a material." )
|
||
|
SD_UI_FUNC_PARM( string, "materialName", "Material name." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "The rectangle where we draw the material." )
|
||
|
SD_UI_FUNC_PARM( color, "materialColor", "The color to use." )
|
||
|
SD_UI_FUNC_PARM( vec2, "offset", "Texture offset." )
|
||
|
SD_UI_FUNC_PARM( vec2, "scale", "Texture scale." )
|
||
|
SD_UI_FUNC_PARM( float, "angle", "Angle to draw." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawMaterial", 'v', "s4422f", Script_DrawMaterial );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawRenderCallback, "Call the draw render callback for the given render callback handle." )
|
||
|
SD_UI_FUNC_PARM( handle, "renderCallback", "Render callback handle." )
|
||
|
SD_UI_FUNC_PARM( rect, "drawRect", "Draw rectangle." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawRenderCallback", 'v', "i4", Script_DrawRenderCallback );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawCachedMaterial, "Draw cached material." )
|
||
|
SD_UI_FUNC_PARM( handle, "materialHandle", "Material handle." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "Rectangle to draw in." )
|
||
|
SD_UI_FUNC_PARM( color, "materialColor", "Color of the material." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawCachedMaterial", 'v', "i44", Script_DrawCachedMaterial );
|
||
|
|
||
|
SD_UI_FUNC_TAG( getCachedMaterialDimensions, "Get the width and height of the material." )
|
||
|
SD_UI_FUNC_PARM( handle, "materialHandle", "Material handle." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "getCachedMaterialDimensions", '2', "i", Script_GetCachedMaterialDimensions );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawMaterialInfo, "Draw material. Get data from the material info." )
|
||
|
SD_UI_FUNC_PARM( handle, "material", "Material name." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "Rectangle to draw in." )
|
||
|
SD_UI_FUNC_PARM( color, "materialColor", "Color of the material." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawMaterialInfo", 'v', "s44", Script_DrawMaterialInfo );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawMaterialArc, "Draw an arc." )
|
||
|
SD_UI_FUNC_PARM( string, "material", "Material name." )
|
||
|
SD_UI_FUNC_PARM( vec2, "origin", "Origin where arc is drawn from." )
|
||
|
SD_UI_FUNC_PARM( color, "materialColor", "Color of the material." )
|
||
|
SD_UI_FUNC_PARM( float, "radius", "Radius of arc." )
|
||
|
SD_UI_FUNC_PARM( float, "start", "Starting angle." )
|
||
|
SD_UI_FUNC_PARM( float, "percent", "Percent of coverage." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawMaterialArc", 'v', "s24fff", Script_DrawMaterialArc );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawTimer, "Draw a timer, used by the grenade indicator and progress indicators by the crosshair." )
|
||
|
SD_UI_FUNC_PARM( handle, "materialHandle", "Material handle." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "Position and size of timer." )
|
||
|
SD_UI_FUNC_PARM( color, "materialColor", "Color of the material." )
|
||
|
SD_UI_FUNC_PARM( float, "percent", "Percent complete, between 0 and 1." )
|
||
|
SD_UI_FUNC_PARM( float, "invert", "Invert the direction of the timer." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawTimer", 'v', "i44ff", Script_DrawTimer );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawText, "Draw text." )
|
||
|
SD_UI_FUNC_PARM( wstring, "text", "Text to be drawn." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "rectangle to draw text in." )
|
||
|
SD_UI_FUNC_PARM( color, "materialColor", "Color of the material." )
|
||
|
SD_UI_FUNC_PARM( float, "scale", "Text scale." )
|
||
|
SD_UI_FUNC_PARM( float, "flags", "Draw text flags." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawText", 'v', "w44ff", Script_DrawText );
|
||
|
|
||
|
SD_UI_FUNC_TAG( measureText, "Measure the text." )
|
||
|
SD_UI_FUNC_PARM( wstring, "text", "Text to measure." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "rectangle to draw text in." )
|
||
|
SD_UI_FUNC_PARM( float, "scale", "Text scale." )
|
||
|
SD_UI_FUNC_PARM( float, "flags", "Draw text flags." )
|
||
|
SD_UI_FUNC_RETURN_PARM( vec2, "The width and height of the text measured." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "measureText", '2', "w4ff", Script_MeasureText );
|
||
|
|
||
|
SD_UI_FUNC_TAG( measureLocalizedText, "Measure the text." )
|
||
|
SD_UI_FUNC_PARM( handle, "textHandle", "Handle to text to measure." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "rectangle to draw text in." )
|
||
|
SD_UI_FUNC_PARM( float, "scale", "Text scale." )
|
||
|
SD_UI_FUNC_PARM( float, "flags", "Draw text flags." )
|
||
|
SD_UI_FUNC_RETURN_PARM( vec2, "The width and height of the text measured." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "measureLocalizedText", '2', "i4ff", Script_MeasureLocalizedText );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawTiledMaterial, "Draw a tiled material." )
|
||
|
SD_UI_FUNC_PARM( handle, "textHandle", "Handle to text to measure." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "rectangle to draw text in." )
|
||
|
SD_UI_FUNC_PARM( color, "materialColor", "Color of the material." )
|
||
|
SD_UI_FUNC_PARM( vec2, "repeats", "Number of X/Y repeats." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawTiledMaterial", 'v', "i442", Script_DrawTiledMaterial );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawLocalizedText, "Text to be drawn." )
|
||
|
SD_UI_FUNC_PARM( handle, "textHandle", "Handle to text to be drawn." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "rectangle to draw text in." )
|
||
|
SD_UI_FUNC_PARM( color, "materialColor", "Color of the material." )
|
||
|
SD_UI_FUNC_PARM( float, "scale", "Text scale." )
|
||
|
SD_UI_FUNC_PARM( float, "flags", "Draw text flags." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawLocalizedText", 'v', "i44ff", Script_DrawLocalizedText );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawLine, "Draw a line." )
|
||
|
SD_UI_FUNC_PARM( vec2, "start", "Line start." )
|
||
|
SD_UI_FUNC_PARM( vec2, "end", "Line end." )
|
||
|
SD_UI_FUNC_PARM( color, "lineColor", "Line color." )
|
||
|
SD_UI_FUNC_PARM( float, "width", "Line width." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawLine", 'v', "224f", Script_DrawLine );
|
||
|
|
||
|
SD_UI_FUNC_TAG( requestLayout, "Request the window layout to be calculated again." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "requestLayout", 'v', "", Script_RequestLayout );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawRect, "Draw a rectangle." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "Rectangle to draw." )
|
||
|
SD_UI_FUNC_PARM( color, "rectangleColor", "Rectangle color." )
|
||
|
SD_UI_FUNC_PARM( float, "borderWidth", "Width of the border." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawRect", 'v', "44f", Script_DrawRect );
|
||
|
|
||
|
SD_UI_FUNC_TAG( nextTabStop, "Get the next tab stop for the specified window." )
|
||
|
SD_UI_FUNC_PARM( string, "window", "Window name." )
|
||
|
SD_UI_FUNC_RETURN_PARM( string, "The name of the next tab stop window or self.name if there are no other tab stops." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "nextTabStop", 's', "s", Script_NextTabStop );
|
||
|
|
||
|
SD_UI_FUNC_TAG( prevTabStop, "Get the previous tab stop for the specified window." )
|
||
|
SD_UI_FUNC_PARM( string, "window", "Window name." )
|
||
|
SD_UI_FUNC_RETURN_PARM( string, "The name of the previous tab stop window or self.name if there are no other tab stops." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "prevTabStop", 's', "s", Script_PrevTabStop );
|
||
|
|
||
|
SD_UI_FUNC_TAG( setTabStop, "Focuses the nth tab stop." )
|
||
|
SD_UI_FUNC_PARM( float, "tabIndex", "Tab stop to focus." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "setTabStop", 'v', "f", Script_SetTabStop );
|
||
|
|
||
|
SD_UI_FUNC_TAG( containsPoint, "Checks if the (world-based) point is in the client rectangle." )
|
||
|
SD_UI_FUNC_PARM( rect, "rectangle", "Client rectangle." )
|
||
|
SD_UI_FUNC_PARM( float, "screenX", "X position." )
|
||
|
SD_UI_FUNC_PARM( float, "screenY", "Y position." )
|
||
|
SD_UI_FUNC_RETURN_PARM( float, "Return 1 if screenX,screenY is within the client rectangle." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "containsPoint", 'f', "4ff", Script_ContainsPoint );
|
||
|
|
||
|
SD_UI_FUNC_TAG( cacheRenderCallback, "Return a reference to a render callback." )
|
||
|
SD_UI_FUNC_PARM( string, "callbackName", "Name of the render callback." )
|
||
|
SD_UI_FUNC_RETURN_PARM( string, "Reference to the render callback." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "cacheRenderCallback", 'i', "s", Script_CacheRenderCallback );
|
||
|
|
||
|
SD_UI_FUNC_TAG( clipToRect, "Clip subsequent drawing to the clipping rectangle. Must be ended with unclipRect after clipped drawing is finished." )
|
||
|
SD_UI_FUNC_PARM( rect, "clipRectangle", "Clipping rectangle." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "clipToRect", 'v', "4", Script_ClipToRect );
|
||
|
|
||
|
SD_UI_FUNC_TAG( unclipRect, "Remove clipping to rectangle specified in clipToRect." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "unclipRect", 'v', "", Script_UnclipRect );
|
||
|
|
||
|
SD_UI_FUNC_TAG( pushColor, "Push a color on the GUI's color stack." )
|
||
|
SD_UI_FUNC_PARM( color, "pushColor", "Color to push." )
|
||
|
SD_UI_FUNC_PARM( float, "inherit", "If not 0, multiply the color with the color on the top of the color stack before pushing." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "pushColor", 'v', "4f", Script_PushColor );
|
||
|
|
||
|
SD_UI_FUNC_TAG( pushColorComponents, "Push a color on the GUI's color stack." )
|
||
|
SD_UI_FUNC_PARM( float, "R", "Red." )
|
||
|
SD_UI_FUNC_PARM( float, "G", "Green." )
|
||
|
SD_UI_FUNC_PARM( float, "B", "Blue." )
|
||
|
SD_UI_FUNC_PARM( float, "A", "Alpha." )
|
||
|
SD_UI_FUNC_PARM( float, "inherit", "If not 0, multiply the color with the color on the top of the color stack before pushing." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "pushColorComponents", 'v', "fffff", Script_PushColor ); // r,g,b,a, inherit previous alpha (not a C&P error, just different ways of getting the same inputs)
|
||
|
|
||
|
SD_UI_FUNC_TAG( popColor, "Pop a color from the GUI's color stack." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "popColor", 'v', "", Script_PopColor );
|
||
|
|
||
|
SD_UI_FUNC_TAG( drawShaderParm, "Set a shader parm value." )
|
||
|
SD_UI_FUNC_PARM( float, "index", "Shader parameter index." )
|
||
|
SD_UI_FUNC_PARM( float, "value", "Shader parameter value." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "drawShaderParm", 'v', "ff", Script_SetShaderParm );
|
||
|
|
||
|
SD_UI_FUNC_TAG( isVisible, "Check if self is visible." )
|
||
|
SD_UI_FUNC_RETURN_PARM( float, "Returns false if self or any parents are hidden." )
|
||
|
SD_UI_END_FUNC_TAG
|
||
|
INIT_SCRIPT_FUNCTION( "isVisible", 'f', "", Script_IsVisible );
|
||
|
|
||
|
SD_UI_PUSH_GROUP_TAG( "Text Align Flags" )
|
||
|
|
||
|
SD_UI_ENUM_TAG( TA_LEFT, "Left align text." )
|
||
|
sdDeclGUI::AddDefine( va( "TA_LEFT %i", TA_LEFT ) );
|
||
|
SD_UI_ENUM_TAG( TA_CENTER, "Center align text." )
|
||
|
sdDeclGUI::AddDefine( va( "TA_CENTER %i", TA_CENTER ) );
|
||
|
SD_UI_ENUM_TAG( TA_RIGHT, "Right align text." )
|
||
|
sdDeclGUI::AddDefine( va( "TA_RIGHT %i", TA_RIGHT ) );
|
||
|
|
||
|
SD_UI_ENUM_TAG( TA_TOP, "Align to the top." )
|
||
|
sdDeclGUI::AddDefine( va( "TA_TOP %i", TA_TOP ) );
|
||
|
SD_UI_ENUM_TAG( TA_VCENTER, "Align to the vertical center." )
|
||
|
sdDeclGUI::AddDefine( va( "TA_VCENTER %i", TA_VCENTER ) );
|
||
|
SD_UI_ENUM_TAG( TA_BOTTOM, "Align to the bottom." )
|
||
|
sdDeclGUI::AddDefine( va( "TA_BOTTOM %i", TA_BOTTOM ) );
|
||
|
|
||
|
SD_UI_POP_GROUP_TAG
|
||
|
SD_UI_PUSH_GROUP_TAG( "Window Flags" )
|
||
|
|
||
|
SD_UI_ENUM_TAG( WF_CLIP_TO_RECT, "Clip all drawing to the window rectangle." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_CLIP_TO_RECT %i", WF_CLIP_TO_RECT ) );
|
||
|
SD_UI_ENUM_TAG( WF_COLOR_ESCAPES, "Parse color escapes when drawing text." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_COLOR_ESCAPES %i", WF_COLOR_ESCAPES ) );
|
||
|
SD_UI_ENUM_TAG( WF_CAPTURE_KEYS, "Capture all key events even if the window does not have focus." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_CAPTURE_KEYS %i", WF_CAPTURE_KEYS ) );
|
||
|
SD_UI_ENUM_TAG( WF_CAPTURE_MOUSE, "Capture mouse click events even if mouse is not inside the window. Capture mouse movement even when window does not have focus." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_CAPTURE_MOUSE %i", WF_CAPTURE_MOUSE ) );
|
||
|
SD_UI_ENUM_TAG( WF_WRAP_TEXT, "Wrap text if wider than rectangle width." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_WRAP_TEXT %i", WF_WRAP_TEXT ) );
|
||
|
SD_UI_ENUM_TAG( WF_MULTILINE_TEXT, "Support line breaks." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_MULTILINE_TEXT %i", WF_MULTILINE_TEXT ) );
|
||
|
SD_UI_ENUM_TAG( WF_AUTO_SIZE_WIDTH, "Resize the width to fit all the text inside the rectangle. Recalculated when the window layout is dirty." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_AUTO_SIZE_WIDTH %i", WF_AUTO_SIZE_WIDTH ) );
|
||
|
SD_UI_ENUM_TAG( WF_AUTO_SIZE_HEIGHT, "Resize the height to fit all the text inside the rectangle. Recalculated when the window layout is dirty." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_AUTO_SIZE_HEIGHT %i", WF_AUTO_SIZE_HEIGHT ) );
|
||
|
SD_UI_ENUM_TAG( WF_ALLOW_FOCUS, "Allow window to have focus." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_ALLOW_FOCUS %i", WF_ALLOW_FOCUS ) );
|
||
|
SD_UI_ENUM_TAG( WF_TAB_STOP, "Should stop at window when using tab to cycle focus window." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_TAB_STOP %i", WF_TAB_STOP ) );
|
||
|
SD_UI_ENUM_TAG( WF_TRUNCATE_TEXT, "Truncate with ... if text goes outside the rectangle. WF_MULTILINE_TEXT and WF_WRAP_TEXT must not be specified for this flag to have an effect." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_TRUNCATE_TEXT %i", WF_TRUNCATE_TEXT ) );
|
||
|
SD_UI_ENUM_TAG( WF_INHERIT_PARENT_COLORS, "Multiply colorMultiplier with the parent's color before pushing on the color stack." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_INHERIT_PARENT_COLORS %i", WF_INHERIT_PARENT_COLORS ) );
|
||
|
SD_UI_ENUM_TAG( WF_DROPSHADOW, "Add a drop shadow to the text." )
|
||
|
sdDeclGUI::AddDefine( va( "WF_DROPSHADOW %i", WF_DROPSHADOW ) );
|
||
|
|
||
|
SD_UI_POP_GROUP_TAG
|
||
|
SD_UI_PUSH_GROUP_TAG( "Draw Text Flags" )
|
||
|
|
||
|
SD_UI_ENUM_TAG( DTF_TOP, "Align to the top." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_TOP %i", DTF_TOP ) );
|
||
|
SD_UI_ENUM_TAG( DTF_VCENTER, "Align to the vertical center." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_VCENTER %i", DTF_VCENTER ) );
|
||
|
SD_UI_ENUM_TAG( DTF_BOTTOM, "Align to the bottom." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_BOTTOM %i", DTF_BOTTOM ) );
|
||
|
|
||
|
SD_UI_ENUM_TAG( DTF_LEFT, "Align text to the left." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_LEFT %i", DTF_LEFT ) );
|
||
|
SD_UI_ENUM_TAG( DTF_CENTER, "Center align text." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_CENTER %i", DTF_CENTER ) );
|
||
|
SD_UI_ENUM_TAG( DTF_RIGHT, "Align text to the right." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_RIGHT %i", DTF_RIGHT ) );
|
||
|
|
||
|
SD_UI_ENUM_TAG( DTF_SINGLELINE, "Single line text only." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_SINGLELINE %i", DTF_SINGLELINE ) );
|
||
|
SD_UI_ENUM_TAG( DTF_WORDWRAP, "Wrap the text to the next line if longer than the rectangle width." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_WORDWRAP %i", DTF_WORDWRAP ) );
|
||
|
SD_UI_ENUM_TAG( DTF_DROPSHADOW, "Add a drop shadow to the text." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_DROPSHADOW %i", DTF_DROPSHADOW ) );
|
||
|
SD_UI_ENUM_TAG( DTF_TRUNCATE, "Truncate with ... if text goes outside the rectangle. DTF_SINGLELINE must also be specified for this flag to have an effect." )
|
||
|
sdDeclGUI::AddDefine( va( "DTF_TRUNCATE %i", DTF_TRUNCATE ) );
|
||
|
|
||
|
SD_UI_POP_GROUP_TAG
|
||
|
}
|
||
|
SD_UI_POP_CLASS_TAG
|
||
|
#pragma optimize( "", on )
|
||
|
#pragma inline_depth()
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_AttachRenderCallback
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_AttachRenderCallback( sdUIFunctionStack& stack ) {
|
||
|
idStr name;
|
||
|
stack.Pop( name );
|
||
|
|
||
|
uiManager->SetRenderCallback( this, name );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_AttachInputHandler
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_AttachInputHandler( sdUIFunctionStack& stack ) {
|
||
|
idStr name;
|
||
|
stack.Pop( name );
|
||
|
|
||
|
uiManager->SetInputHandler( this, name );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawMaterial
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawMaterial( sdUIFunctionStack& stack ) {
|
||
|
idStr material;
|
||
|
idVec4 rect;
|
||
|
idVec4 color;
|
||
|
idVec2 shift;
|
||
|
idVec2 scale;
|
||
|
float angle;
|
||
|
|
||
|
stack.Pop( material );
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( color );
|
||
|
stack.Pop( shift );
|
||
|
stack.Pop( scale );
|
||
|
stack.Pop( angle );
|
||
|
|
||
|
uiMaterialInfo_t mi;
|
||
|
GetUI()->LookupMaterial( material, mi );
|
||
|
deviceContext->DrawMaterial( rect, mi.material, color, scale, shift, angle );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawMaterialInfo
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawMaterialInfo( sdUIFunctionStack& stack ) {
|
||
|
idStr material;
|
||
|
idVec4 rect;
|
||
|
idVec4 color;
|
||
|
|
||
|
stack.Pop( material );
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( color );
|
||
|
|
||
|
uiMaterialInfo_t mi;
|
||
|
idStr outMaterial;
|
||
|
|
||
|
GetUI()->LookupMaterial( material, mi );
|
||
|
DrawMaterial( mi, rect.x, rect.y, rect.z, rect.w, color );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawRect
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawRect( sdUIFunctionStack& stack ) {
|
||
|
idVec4 rect;
|
||
|
idVec4 color;
|
||
|
float size;
|
||
|
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( color );
|
||
|
stack.Pop( size );
|
||
|
|
||
|
if ( size <= 0.0f ) {
|
||
|
deviceContext->DrawClippedRect( rect.x, rect.y, rect.z, rect.w, color );
|
||
|
} else {
|
||
|
deviceContext->DrawClippedBox( rect.x, rect.y, rect.z, rect.w, size, color );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawText
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawText( sdUIFunctionStack& stack ) {
|
||
|
idWStr text;
|
||
|
idVec4 rect;
|
||
|
idVec4 color;
|
||
|
float scale;
|
||
|
float flags;
|
||
|
|
||
|
stack.Pop( text );
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( color );
|
||
|
stack.Pop( scale );
|
||
|
stack.Pop( flags );
|
||
|
|
||
|
if( text.IsEmpty() ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ActivateFont( false );
|
||
|
|
||
|
int iFlags = idMath::Ftoi( flags );
|
||
|
|
||
|
sdWStringBuilder_Heap builder;
|
||
|
const wchar_t* drawText = text.c_str();
|
||
|
if( ( iFlags & DTF_TRUNCATE ) && ( iFlags & DTF_SINGLELINE ) ) {
|
||
|
|
||
|
const wchar_t* truncationText = L"...";
|
||
|
int truncationWidth;
|
||
|
int truncationHeight;
|
||
|
deviceContext->GetTextDimensions( truncationText, sdBounds2D( 0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT ), DTF_SINGLELINE | DTF_VCENTER | DTF_CENTER, cachedFontHandle, scale, truncationWidth, truncationHeight );
|
||
|
|
||
|
ShortenText( text.c_str(), sdBounds2D( rect ), cachedFontHandle, iFlags, scale, truncationText, truncationWidth, builder );
|
||
|
drawText = builder.c_str();
|
||
|
}
|
||
|
deviceContext->SetColor( color );
|
||
|
deviceContext->SetFontSize( scale );
|
||
|
deviceContext->DrawText( drawText, sdBounds2D( rect ), iFlags );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_MeasureText
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_MeasureText( sdUIFunctionStack& stack ) {
|
||
|
idWStr text;
|
||
|
idVec4 rect;
|
||
|
float scale;
|
||
|
float flags;
|
||
|
|
||
|
stack.Pop( text );
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( scale );
|
||
|
stack.Pop( flags );
|
||
|
|
||
|
if ( text.Length() == 0 ) {
|
||
|
stack.Push( idVec2( 0.0f, 0.0f ) );
|
||
|
} else {
|
||
|
ActivateFont( false );
|
||
|
|
||
|
int w, h;
|
||
|
deviceContext->GetTextDimensions( text.c_str(), sdBounds2D( rect ), idMath::Ftoi( flags ), cachedFontHandle, idMath::Ftoi( scale ), w, h );
|
||
|
stack.Push( idVec2( w, h ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_MeasureLocalizedText
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_MeasureLocalizedText( sdUIFunctionStack& stack ) {
|
||
|
int text;
|
||
|
idVec4 rect;
|
||
|
float scale;
|
||
|
float flags;
|
||
|
|
||
|
stack.Pop( text );
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( scale );
|
||
|
stack.Pop( flags );
|
||
|
|
||
|
int w = 0;
|
||
|
int h = 0;
|
||
|
|
||
|
ActivateFont( false );
|
||
|
|
||
|
const sdDeclLocStr* str = declHolder.declLocStrType.LocalFindByIndex( text, false );
|
||
|
if ( str != NULL && str->GetText()[ 0 ] != L'\0' ) {
|
||
|
deviceContext->GetTextDimensions( str->GetText(), sdBounds2D( rect ), idMath::Ftoi( flags ), cachedFontHandle, idMath::Ftoi( scale ), w, h );
|
||
|
}
|
||
|
|
||
|
stack.Push( idVec2( w, h ) );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawLocalizedText
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawLocalizedText( sdUIFunctionStack& stack ) {
|
||
|
int text;
|
||
|
idVec4 rect;
|
||
|
idVec4 color;
|
||
|
float scale;
|
||
|
float flags;
|
||
|
|
||
|
stack.Pop( text );
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( color );
|
||
|
stack.Pop( scale );
|
||
|
stack.Pop( flags );
|
||
|
|
||
|
if( text >= 0 && text < declHolder.declLocStrType.Num() ) {
|
||
|
const wchar_t* textStr = declHolder.FindLocStrByIndex( text )->GetText();
|
||
|
|
||
|
if( textStr[ 0 ] == L'\0' ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ActivateFont( false );
|
||
|
|
||
|
int iFlags = idMath::Ftoi( flags );
|
||
|
const wchar_t* drawText = textStr;
|
||
|
sdWStringBuilder_Heap builder;
|
||
|
if( ( iFlags & DTF_TRUNCATE ) && ( iFlags & DTF_SINGLELINE ) ) {
|
||
|
const wchar_t* truncationText = L"...";
|
||
|
int truncationWidth;
|
||
|
int truncationHeight;
|
||
|
deviceContext->GetTextDimensions( truncationText, sdBounds2D( 0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT ), DTF_SINGLELINE | DTF_VCENTER | DTF_CENTER, cachedFontHandle, scale, truncationWidth, truncationHeight );
|
||
|
|
||
|
ShortenText(textStr, sdBounds2D( rect ), cachedFontHandle, iFlags, scale, truncationText, truncationWidth, builder );
|
||
|
drawText = builder.c_str();
|
||
|
}
|
||
|
|
||
|
deviceContext->SetColor( color );
|
||
|
deviceContext->SetFontSize( scale );
|
||
|
deviceContext->DrawText( drawText, sdBounds2D( rect ), iFlags );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawLine
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawLine( sdUIFunctionStack& stack ) {
|
||
|
idVec2 start;
|
||
|
idVec2 end;
|
||
|
idVec4 color;
|
||
|
float width;
|
||
|
|
||
|
stack.Pop( start );
|
||
|
stack.Pop( end );
|
||
|
stack.Pop( color );
|
||
|
stack.Pop( width );
|
||
|
|
||
|
deviceContext->DrawLine( start, end, width, color );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawMaterialArc
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawMaterialArc( sdUIFunctionStack& stack ) {
|
||
|
idStr material;
|
||
|
idVec2 origin;
|
||
|
float radius;
|
||
|
float percent;
|
||
|
float start;
|
||
|
idVec4 color;
|
||
|
|
||
|
stack.Pop( material );
|
||
|
stack.Pop( origin );
|
||
|
stack.Pop( color );
|
||
|
stack.Pop( radius );
|
||
|
stack.Pop( start );
|
||
|
stack.Pop( percent );
|
||
|
|
||
|
uiMaterialInfo_t mi;
|
||
|
GetUI()->LookupMaterial( material, mi );
|
||
|
deviceContext->DrawFilledArc( origin.x, origin.y, radius, 32, percent, color, start, mi.material );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_RequestLayout
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_RequestLayout( sdUIFunctionStack& stack ) {
|
||
|
MakeLayoutDirty();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_NextTabStop
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_NextTabStop( sdUIFunctionStack& stack ) {
|
||
|
idStr currentItem;
|
||
|
stack.Pop( currentItem );
|
||
|
|
||
|
const sdUIObject* targetChild = GetUI()->GetWindow( currentItem.c_str() );
|
||
|
if( targetChild == NULL ) {
|
||
|
stack.Push( "" );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int numTabStops = NumTabStops_r( this );
|
||
|
if( numTabStops == 0 ) {
|
||
|
stack.Push( "" );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int index = 0;
|
||
|
const sdUIObject** tabStops = static_cast< const sdUIObject** >( _alloca( numTabStops * sizeof( const sdUIObject* )) );
|
||
|
ListTabStops_r( this, tabStops, index );
|
||
|
|
||
|
int i;
|
||
|
for( i = 0; i < numTabStops; i++ ) {
|
||
|
if( tabStops[ i ] == targetChild ) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if( i < numTabStops - 1 ) {
|
||
|
i++;
|
||
|
} else {
|
||
|
i = 0;
|
||
|
}
|
||
|
const sdUIObject* tabStop = tabStops[ i ];
|
||
|
|
||
|
assert( tabStop != NULL );
|
||
|
stack.Push( tabStop->name.GetValue().c_str() );
|
||
|
|
||
|
if( sdUserInterfaceLocal::g_debugGUIEvents.GetInteger() ) {
|
||
|
gameLocal.Printf( "NextTabStop: Found '%s'\n", tabStop->name.GetValue().c_str() );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_PrevTabStop
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_PrevTabStop( sdUIFunctionStack& stack ) {
|
||
|
idStr currentItem;
|
||
|
stack.Pop( currentItem );
|
||
|
|
||
|
const sdUIObject* targetChild = GetUI()->GetWindow( currentItem.c_str() );
|
||
|
if( targetChild == NULL ) {
|
||
|
stack.Push( "" );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int numTabStops = NumTabStops_r( this );
|
||
|
if( numTabStops == 0 ) {
|
||
|
stack.Push( "" );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int index = 0;
|
||
|
const sdUIObject** tabStops = static_cast< const sdUIObject** >( _alloca( numTabStops * sizeof( const sdUIObject* )) );
|
||
|
ListTabStops_r( this, tabStops, index );
|
||
|
|
||
|
int i;
|
||
|
for( i = numTabStops - 1; i >= 0; i-- ) {
|
||
|
if( tabStops[ i ] == targetChild ) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if( i > 0 ) {
|
||
|
i--;
|
||
|
} else {
|
||
|
i = numTabStops - 1;
|
||
|
}
|
||
|
const sdUIObject* tabStop = tabStops[ i ];
|
||
|
|
||
|
stack.Push( tabStop->name.GetValue().c_str() );
|
||
|
|
||
|
if( sdUserInterfaceLocal::g_debugGUIEvents.GetInteger() ) {
|
||
|
gameLocal.Printf( "PrevTabStop: Found '%s'\n", tabStop->name.GetValue().c_str() );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_SetTabStop
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_SetTabStop( sdUIFunctionStack& stack ) {
|
||
|
int targetIndex;
|
||
|
stack.Pop( targetIndex );
|
||
|
|
||
|
if( targetIndex < 0 ) {
|
||
|
gameLocal.Warning( "Script_SetTabStop: '%s' '%i' out of range", name.GetValue().c_str(), targetIndex );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int numTabStops = NumTabStops_r( this );
|
||
|
if( numTabStops == 0 ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int index = 0;
|
||
|
const sdUIObject** tabStops = static_cast< const sdUIObject** >( _alloca( numTabStops * sizeof( const sdUIObject* )) );
|
||
|
ListTabStops_r( this, tabStops, index );
|
||
|
if( targetIndex < numTabStops ) {
|
||
|
GetUI()->focusedWindowName = tabStops[ targetIndex ]->name;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
gameLocal.Warning( "Script_SetTabStop: '%s' '%i' out of range", name.GetValue().c_str(), index );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_ContainsPoint
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_ContainsPoint( sdUIFunctionStack& stack ) {
|
||
|
idVec4 rect;
|
||
|
stack.Pop( rect );
|
||
|
|
||
|
idVec2 point;
|
||
|
stack.Pop( point );
|
||
|
|
||
|
sdBounds2D bounds( rect );
|
||
|
bool contained = bounds.ContainsPoint( point );
|
||
|
stack.Push( contained ? 1.0f : 0.0f );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawCachedMaterial
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawCachedMaterial( sdUIFunctionStack& stack ) {
|
||
|
int handle;
|
||
|
idVec4 rect;
|
||
|
idVec4 color;
|
||
|
|
||
|
stack.Pop( handle );
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( color );
|
||
|
|
||
|
uiMaterialCache_t::Iterator iter = GetUI()->FindCachedMaterialForHandle( handle );
|
||
|
if( !GetUI()->IsValidMaterial( iter ) ) {
|
||
|
//assert( 0 );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
uiCachedMaterial_t& cached = *( iter->second );
|
||
|
|
||
|
switch( cached.drawMode ) {
|
||
|
case BDM_USE_ST:
|
||
|
case BDM_SINGLE_MATERIAL:
|
||
|
DrawMaterial( cached.material, rect.x, rect.y, rect.z, rect.w, color );
|
||
|
break;
|
||
|
case BDM_FRAME:
|
||
|
case BDM_TRI_PART_H: // FALL THROUGH
|
||
|
case BDM_TRI_PART_V: // FALL THROUGH
|
||
|
case BDM_FIVE_PART_H: // FALL THROUGH
|
||
|
DrawFrame( rect, iter, color );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawTiledMaterial
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawTiledMaterial( sdUIFunctionStack& stack ) {
|
||
|
int handle;
|
||
|
idVec4 rect;
|
||
|
idVec4 color;
|
||
|
idVec2 repeats;
|
||
|
|
||
|
stack.Pop( handle );
|
||
|
stack.Pop( rect );
|
||
|
stack.Pop( color );
|
||
|
stack.Pop( repeats );
|
||
|
|
||
|
uiMaterialCache_t::Iterator iter = GetUI()->FindCachedMaterialForHandle( handle );
|
||
|
if( !GetUI()->IsValidMaterial( iter ) ) {
|
||
|
//assert( 0 );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
uiCachedMaterial_t& cached = *( iter->second );
|
||
|
|
||
|
int xRepeat = idMath::Ftoi( repeats.x );
|
||
|
int yRepeat = idMath::Ftoi( repeats.y );
|
||
|
|
||
|
idVec4 drawRect = rect;
|
||
|
for( int x = 0; x < xRepeat; x++ ) {
|
||
|
drawRect.x = rect.x + ( x * rect.z );
|
||
|
for( int y = 0; y < yRepeat; y++ ) {
|
||
|
drawRect.y = rect.y + ( y * rect.w );
|
||
|
switch( cached.drawMode ) {
|
||
|
case BDM_USE_ST:
|
||
|
case BDM_SINGLE_MATERIAL:
|
||
|
DrawMaterial( cached.material, drawRect.x, drawRect.y, drawRect.z, drawRect.w, color );
|
||
|
break;
|
||
|
case BDM_FRAME:
|
||
|
case BDM_TRI_PART_H: // FALL THROUGH
|
||
|
case BDM_TRI_PART_V: // FALL THROUGH
|
||
|
case BDM_FIVE_PART_H: // FALL THROUGH
|
||
|
DrawFrame( drawRect, iter, color );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawRenderCallback
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawRenderCallback ( sdUIFunctionStack& stack ) {
|
||
|
int callbackHandle;
|
||
|
stack.Pop( callbackHandle );
|
||
|
|
||
|
idVec4 rect;
|
||
|
stack.Pop( rect );
|
||
|
|
||
|
uiRenderCallback_t callback = uiManager->GetRenderCallback( callbackHandle );
|
||
|
if( callback != NULL ) {
|
||
|
callback( GetUI(), rect.x, rect.y, rect.z, rect.w );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_CacheRenderCallback
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_CacheRenderCallback( sdUIFunctionStack& stack ) {
|
||
|
idStr callbackName;
|
||
|
stack.Pop( callbackName );
|
||
|
|
||
|
sdUserInterfaceManager::renderCallbackHandle_t handle = uiManager->GetRenderCallbackHandle( callbackName.c_str() );
|
||
|
stack.Push( handle );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_DrawTimer
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_DrawTimer( sdUIFunctionStack& stack ) {
|
||
|
int handle;
|
||
|
stack.Pop( handle );
|
||
|
|
||
|
idVec4 rect;
|
||
|
stack.Pop( rect );
|
||
|
|
||
|
idVec4 color;
|
||
|
stack.Pop( color );
|
||
|
|
||
|
float percent;
|
||
|
stack.Pop( percent );
|
||
|
|
||
|
float invert;
|
||
|
stack.Pop( invert );
|
||
|
|
||
|
uiMaterialCache_t::Iterator iter = GetUI()->FindCachedMaterialForHandle( handle );
|
||
|
if( !GetUI()->IsValidMaterial( iter ) ) {
|
||
|
return;
|
||
|
}
|
||
|
uiCachedMaterial_t& cached = *iter->second;
|
||
|
if( cached.material.material == NULL ) {
|
||
|
return;
|
||
|
}
|
||
|
float halfW = rect.z * 0.5f;
|
||
|
float halfH = rect.w * 0.5f;
|
||
|
deviceContext->DrawTimer( rect.x + halfW, rect.y + halfH, halfW, halfH, percent, color, cached.material.material, invert != 0.0f, cached.material.st0, cached.material.st1 );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_ClipToRect
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_ClipToRect( sdUIFunctionStack& stack ) {
|
||
|
idVec4 rect;
|
||
|
stack.Pop( rect );
|
||
|
deviceContext->PushClipRect( sdBounds2D( rect ) );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_UnclipRect
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_UnclipRect( sdUIFunctionStack& stack ) {
|
||
|
deviceContext->PopClipRect();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_GetCachedMaterialDimensions
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_GetCachedMaterialDimensions( sdUIFunctionStack& stack ) {
|
||
|
int handle;
|
||
|
stack.Pop( handle );
|
||
|
|
||
|
uiMaterialCache_t::Iterator iter = GetUI()->FindCachedMaterialForHandle( handle );
|
||
|
if( !GetUI()->IsValidMaterial( iter ) ) {
|
||
|
stack.Push( idVec2( cachedClientRect.z, cachedClientRect.w ) );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
uiCachedMaterial_t& cached = *( iter->second );
|
||
|
switch( cached.drawMode ) {
|
||
|
case BDM_USE_ST:
|
||
|
case BDM_SINGLE_MATERIAL:
|
||
|
if( const idImage* image = cached.material.material->GetEditorImage() ) {
|
||
|
stack.Push( idVec2( image->sourceWidth, image->sourceHeight ) );
|
||
|
return;
|
||
|
}
|
||
|
break;
|
||
|
case BDM_FRAME:
|
||
|
case BDM_TRI_PART_H: // FALL THROUGH
|
||
|
case BDM_TRI_PART_V: // FALL THROUGH
|
||
|
case BDM_FIVE_PART_H: // FALL THROUGH
|
||
|
break;
|
||
|
}
|
||
|
stack.Push( idVec2( cachedClientRect.z, cachedClientRect.w ) );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_IsVisible
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_IsVisible( sdUIFunctionStack& stack ) {
|
||
|
stack.Push( IsVisible() ? 1.0f : 0.0f );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_PushColor
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_PushColor( sdUIFunctionStack& stack ) {
|
||
|
idVec4 color;
|
||
|
stack.Pop( color );
|
||
|
bool inherit;
|
||
|
stack.Pop( inherit );
|
||
|
|
||
|
if( inherit ) {
|
||
|
const idVec4& parent = GetUI()->TopColor();
|
||
|
color.x *= parent.x;
|
||
|
color.y *= parent.y;
|
||
|
color.z *= parent.z;
|
||
|
color.w *= parent.w;
|
||
|
}
|
||
|
GetUI()->PushColor( color );
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_PopColor
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_PopColor( sdUIFunctionStack& stack ) {
|
||
|
GetUI()->PopColor();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
============
|
||
|
sdUIWindow::Script_SetShaderParm
|
||
|
============
|
||
|
*/
|
||
|
void sdUIWindow::Script_SetShaderParm( sdUIFunctionStack& stack ) {
|
||
|
int parm;
|
||
|
stack.Pop( parm );
|
||
|
|
||
|
float value;
|
||
|
stack.Pop( value );
|
||
|
|
||
|
if( parm < 0 || parm >= MAX_ENTITY_SHADER_PARMS ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
deviceContext->SetRegister( parm, value );
|
||
|
}
|