diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/hlfaceposer/mxstatuswindow.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'utils/hlfaceposer/mxstatuswindow.cpp')
| -rw-r--r-- | utils/hlfaceposer/mxstatuswindow.cpp | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/utils/hlfaceposer/mxstatuswindow.cpp b/utils/hlfaceposer/mxstatuswindow.cpp new file mode 100644 index 0000000..5ce6fbb --- /dev/null +++ b/utils/hlfaceposer/mxstatuswindow.cpp @@ -0,0 +1,311 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#include <mxtk/mx.h> +#include "mxStatusWindow.h" +#include "hlfaceposer.h" +#include "choreowidgetdrawhelper.h" +#include "MDLViewer.h" +#include "faceposertoolwindow.h" + +extern double realtime; + +mxStatusWindow *g_pStatusWindow = NULL; + +#define STATUS_SCROLLBAR_SIZE 12 +#define STATUS_FONT_SIZE 9 + +mxStatusWindow::mxStatusWindow(mxWindow *parent, int x, int y, int w, int h, const char *label /*= 0*/ ) +: mxWindow( parent, x, y, w, h, label ), IFacePoserToolWindow( "Status Window", "Output" ), m_pScrollbar(NULL) +{ + for ( int i = 0; i < MAX_TEXT_LINES; i++ ) + { + m_rgTextLines[ i ].m_szText[ 0 ] = 0; + m_rgTextLines[ i ].rgb = CONSOLE_COLOR; + m_rgTextLines[ i ].curtime = 0; + } + m_nCurrentLine = 0; + + m_pScrollbar = new mxScrollbar( this, 0, 0, STATUS_SCROLLBAR_SIZE, 100, IDC_STATUS_SCROLL, mxScrollbar::Vertical ); + m_pScrollbar->setRange( 0, 1000 ); + m_pScrollbar->setPagesize( 100 ); +} + +mxStatusWindow::~mxStatusWindow() +{ + g_pStatusWindow = NULL; +} + +void mxStatusWindow::redraw() +{ +// if ( !ToolCanDraw() ) +// return; + + if ( !m_pScrollbar ) + return; + + CChoreoWidgetDrawHelper helper( this, RGB( 0, 0, 0 ) ); + HandleToolRedraw( helper ); + + RECT rc; + helper.GetClientRect( rc ); + + RECT rcText = rc; + + int lineheight = ( STATUS_FONT_SIZE + 2 ); + + InflateRect( &rcText, -4, 0 ); + rcText.bottom = h2() - 4; + rcText.top = rcText.bottom - lineheight; + + //int minval = m_pScrollbar->getMinValue(); + int maxval = m_pScrollbar->getMaxValue(); + int pagesize = m_pScrollbar->getPagesize(); + int curval = m_pScrollbar->getValue(); + + int offset = ( maxval - pagesize ) - curval; + offset = ( offset + lineheight - 1 ) / lineheight; + + offset = max( 0, offset ); + //offset = 0; + //offset += 10; + //offset = max( 0, offset ); + + for ( int i = 0; i < MAX_TEXT_LINES - offset; i++ ) + { + int rawline = m_nCurrentLine - i - 1; + if ( rawline <= 0 ) + continue; + + if ( rcText.bottom < 0 ) + break; + + int line = ( rawline - offset ) & TEXT_LINE_MASK; + + char *ptext = m_rgTextLines[ line ].m_szText; + + RECT rcTime = rcText; + rcTime.right = rcTime.left + 50; + + char sz[ 32 ]; + sprintf( sz, "%.3f", m_rgTextLines[ line ].curtime ); + + int len = helper.CalcTextWidth( "Arial", STATUS_FONT_SIZE, FW_NORMAL, sz ); + + rcTime.left = rcTime.right - len - 5; + + helper.DrawColoredText( "Arial", STATUS_FONT_SIZE, FW_NORMAL, RGB( 255, 255, 150 ), rcTime, sz ); + + rcTime = rcText; + rcTime.left += 50; + + helper.DrawColoredText( "Arial", STATUS_FONT_SIZE, FW_NORMAL, m_rgTextLines[ line ].rgb, rcTime, ptext ); + + OffsetRect( &rcText, 0, -lineheight ); + } + + DrawActiveTool(); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : Returns true on success, false on failure. +//----------------------------------------------------------------------------- +bool mxStatusWindow::PaintBackground( void ) +{ + redraw(); + return false; +} + +void mxStatusWindow::StatusPrint( COLORREF clr, bool overwrite, const char *text ) +{ + float curtime = (float)Plat_FloatTime(); + + char sz[32]; + sprintf( sz, "%.3f ", curtime ); + + OutputDebugString( sz ); + OutputDebugString( text ); + + char fixedtext[ 512 ]; + char *in, *out; + in = (char *)text; + out = fixedtext; + + int c = 0; + while ( *in && c < 511 ) + { + if ( *in == '\n' || *in == '\r' ) + { + in++; + } + else + { + *out++ = *in++; + c++; + } + } + *out = 0; + + if ( overwrite ) + { + m_nCurrentLine--; + } + + int i = m_nCurrentLine & TEXT_LINE_MASK; + + strncpy( m_rgTextLines[ i ].m_szText, fixedtext, 511 ); + m_rgTextLines[ i ].m_szText[ 511 ] = 0; + + m_rgTextLines[ i ].rgb = clr; + m_rgTextLines[ i ].curtime = curtime; + + m_nCurrentLine++; + + if ( m_nCurrentLine <= MAX_TEXT_LINES ) + { + PositionSliders( 0 ); + } + m_pScrollbar->setValue( m_pScrollbar->getMaxValue() ); + + redraw(); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : sboffset - +//----------------------------------------------------------------------------- +void mxStatusWindow::PositionSliders( int sboffset ) +{ + int lineheight = ( STATUS_FONT_SIZE + 2 ); + + int linesused = min( (int)MAX_TEXT_LINES, m_nCurrentLine ); + linesused = max( linesused, 1 ); + + int trueh = h2() - GetCaptionHeight(); + + int vpixelsneeded = max( linesused * lineheight, trueh ); + m_pScrollbar->setVisible( linesused * lineheight > trueh ); + + + m_pScrollbar->setPagesize( trueh ); + m_pScrollbar->setRange( 0, vpixelsneeded ); + + redraw(); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *event - +// Output : int +//----------------------------------------------------------------------------- +int mxStatusWindow::handleEvent( mxEvent *event ) +{ + int iret = 0; + + if ( HandleToolEvent( event ) ) + { + return iret; + } + + switch ( event->event ) + { + default: + break; + case mxEvent::Size: + { + m_pScrollbar->setBounds( w2() - STATUS_SCROLLBAR_SIZE, GetCaptionHeight(), STATUS_SCROLLBAR_SIZE, h2()-GetCaptionHeight() ); + PositionSliders( 0 ); + m_pScrollbar->setValue( m_pScrollbar->getMaxValue() ); + iret = 1; + } + break; + case mxEvent::Action: + { + iret = 1; + switch ( event->action ) + { + default: + iret = 0; + break; + case IDC_STATUS_SCROLL: + { + if ( event->event == mxEvent::Action && + event->modifiers == SB_THUMBTRACK) + { + int offset = event->height; + m_pScrollbar->setValue( offset ); + PositionSliders( offset ); + DrawActiveTool(); + } + } + break; + } + } + break; + } + + return iret; +} +#include "StudioModel.h" + +#include "faceposer_models.h" + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void mxStatusWindow::DrawActiveTool() +{ + RECT rcTool; + rcTool.left = 0; + rcTool.top = GetCaptionHeight() + 2; + rcTool.bottom = h2(); + rcTool.right = w2() - 16; + + rcTool.bottom = rcTool.top + 10; + rcTool.left = rcTool.right - 500; + + char sz[ 256 ]; + + IFacePoserToolWindow *activeTool = IFacePoserToolWindow::GetActiveTool(); + + static float lastrealtime = 0.0f; + + float dt = (float)realtime - lastrealtime; + dt = clamp( dt, 0.0f, 1.0f ); + + float fps = 0.0f; + if ( dt > 0.0001f ) + { + fps = 1.0f / dt; + } + + sprintf( sz, "%s (%i) at %.3f (%.2f fps) (soundcount %i)", + activeTool ? activeTool->GetToolName() : "None", + g_MDLViewer->GetCurrentFrame(), + (float)realtime, + fps, + models->CountActiveSources() ); + + lastrealtime = realtime; + + int len = CChoreoWidgetDrawHelper::CalcTextWidth( "Courier New", 10, FW_NORMAL, sz ); + + CChoreoWidgetDrawHelper helper( this, rcTool, RGB( 32, 0, 0 ) ); + + rcTool.left = rcTool.right - len - 15; + + helper.DrawColoredText( "Courier New", 10, FW_NORMAL, RGB( 255, 255, 200 ), rcTool, sz ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : dt - +//----------------------------------------------------------------------------- +void mxStatusWindow::Think( float dt ) +{ + DrawActiveTool(); +}
\ No newline at end of file |