mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-11 11:19:09 +00:00
1
This commit is contained in:
@@ -0,0 +1,216 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#include <stdio.h>
|
||||
#include "hlfaceposer.h"
|
||||
#include "choreoviewcolors.h"
|
||||
#include "choreoglobaleventwidget.h"
|
||||
#include "choreowidgetdrawhelper.h"
|
||||
#include "ChoreoView.h"
|
||||
#include "choreoevent.h"
|
||||
#include "choreoeventwidget.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
// Input : *parent -
|
||||
//-----------------------------------------------------------------------------
|
||||
CChoreoGlobalEventWidget::CChoreoGlobalEventWidget( CChoreoWidget *parent )
|
||||
: CChoreoWidget( parent )
|
||||
{
|
||||
m_pEvent = NULL;
|
||||
|
||||
m_bDragging = false;
|
||||
m_xStart = 0;
|
||||
m_hPrevCursor = 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
CChoreoGlobalEventWidget::~CChoreoGlobalEventWidget( void )
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CChoreoGlobalEventWidget::Create( void )
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
// Input : rc -
|
||||
//-----------------------------------------------------------------------------
|
||||
void CChoreoGlobalEventWidget::Layout( RECT& rc )
|
||||
{
|
||||
setBounds( rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Redraw to screen
|
||||
//-----------------------------------------------------------------------------
|
||||
void CChoreoGlobalEventWidget::redraw( CChoreoWidgetDrawHelper& drawHelper )
|
||||
{
|
||||
if ( !getVisible() )
|
||||
return;
|
||||
|
||||
CChoreoEvent *event = GetEvent();
|
||||
if ( !event )
|
||||
return;
|
||||
|
||||
RECT rcTab;
|
||||
rcTab = getBounds();
|
||||
|
||||
bool isLoop = false;
|
||||
COLORREF pointColor = COLOR_CHOREO_SEGMENTDIVIDER;
|
||||
COLORREF clr = COLOR_CHOREO_SEGMENTDIVIDER_BG;
|
||||
switch ( event->GetType() )
|
||||
{
|
||||
default:
|
||||
break;
|
||||
case CChoreoEvent::LOOP:
|
||||
{
|
||||
clr = COLOR_CHOREO_LOOPPOINT_BG;
|
||||
pointColor = COLOR_CHOREO_LOOPPOINT;
|
||||
isLoop = true;
|
||||
}
|
||||
break;
|
||||
case CChoreoEvent::STOPPOINT:
|
||||
{
|
||||
clr = COLOR_CHOREO_STOPPOINT_BG;
|
||||
pointColor = COLOR_CHOREO_STOPPOINT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ( IsSelected() )
|
||||
{
|
||||
InflateRect( &rcTab, 2, 2 );
|
||||
|
||||
drawHelper.DrawTriangleMarker( rcTab, pointColor );
|
||||
|
||||
InflateRect( &rcTab, -2, -2 );
|
||||
|
||||
drawHelper.DrawTriangleMarker( rcTab, RGB( 240, 240, 220 ) );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
drawHelper.DrawTriangleMarker( rcTab, pointColor );
|
||||
}
|
||||
|
||||
RECT rcClient;
|
||||
drawHelper.GetClientRect( rcClient );
|
||||
|
||||
RECT rcLine = rcTab;
|
||||
rcLine.top = rcTab.bottom + 2;
|
||||
rcLine.bottom = rcClient.bottom;
|
||||
rcLine.left = ( rcLine.left + rcLine.right ) / 2;
|
||||
rcLine.right = rcLine.left;
|
||||
|
||||
if ( IsSelected() )
|
||||
{
|
||||
drawHelper.DrawColoredLine( clr, PS_DOT, 2, rcLine.left, rcLine.top, rcLine.right, rcLine.bottom );
|
||||
}
|
||||
else
|
||||
{
|
||||
drawHelper.DrawColoredLine( clr, PS_DOT, 1, rcLine.left, rcLine.top, rcLine.right, rcLine.bottom );
|
||||
}
|
||||
|
||||
if ( event->GetType() == CChoreoEvent::STOPPOINT )
|
||||
{
|
||||
OffsetRect( &rcTab, -4, 15 );
|
||||
|
||||
mxbitmapdata_t *image = CChoreoEventWidget::GetImage( event->GetType() );
|
||||
if ( image )
|
||||
{
|
||||
drawHelper.OffsetSubRect( rcTab );
|
||||
DrawBitmapToDC( drawHelper.GrabDC(), rcTab.left, rcTab.top, 16, 16, *image );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !isLoop )
|
||||
return;
|
||||
|
||||
COLORREF labelText = COLOR_INFO_TEXT;
|
||||
DrawLabel( drawHelper, labelText, rcLine.left, rcLine.top + 2, false );
|
||||
|
||||
// Figure out loop spot
|
||||
float looptime = (float)atof( event->GetParameters() );
|
||||
|
||||
// Find pixel for that
|
||||
bool clipped = false;
|
||||
int x = m_pView->GetPixelForTimeValue( looptime, &clipped );
|
||||
if ( clipped )
|
||||
return;
|
||||
|
||||
rcLine.left = x;
|
||||
rcLine.right = x;
|
||||
|
||||
clr = COLOR_CHOREO_LOOPPOINT_START_BG;
|
||||
drawHelper.DrawColoredLine( clr, PS_SOLID, 1, rcLine.left, rcLine.top, rcLine.right, rcLine.top + 28);
|
||||
|
||||
DrawLabel( drawHelper, labelText, rcLine.left, rcLine.top + 2, true );
|
||||
}
|
||||
|
||||
void CChoreoGlobalEventWidget::DrawLabel( CChoreoWidgetDrawHelper& drawHelper, COLORREF clr, int x, int y, bool right )
|
||||
{
|
||||
CChoreoEvent *event = GetEvent();
|
||||
if ( !event )
|
||||
return;
|
||||
|
||||
int len = drawHelper.CalcTextWidth( "Arial", 9, FW_NORMAL, va( "%s", event->GetName() ) );
|
||||
|
||||
RECT rcText;
|
||||
rcText.top = y;
|
||||
rcText.bottom = y + 10;
|
||||
rcText.left = x - len / 2;
|
||||
rcText.right = rcText.left + len;
|
||||
|
||||
if ( !right )
|
||||
{
|
||||
drawHelper.DrawColoredTextCharset( "Marlett", 9, FW_NORMAL, SYMBOL_CHARSET, clr, rcText, "3" );
|
||||
OffsetRect( &rcText, 8, 0 );
|
||||
drawHelper.DrawColoredText( "Arial", 9, FW_NORMAL, clr, rcText, va( "%s", event->GetName() ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
drawHelper.DrawColoredText( "Arial", 9, FW_NORMAL, clr, rcText, va( "%s", event->GetName() ) );
|
||||
OffsetRect( &rcText, len, 0 );
|
||||
drawHelper.DrawColoredTextCharset( "Marlett", 9, FW_NORMAL, SYMBOL_CHARSET, clr, rcText, "4" );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CChoreoGlobalEventWidget::DrawFocusRect( void )
|
||||
{
|
||||
HDC dc = GetDC( NULL );
|
||||
|
||||
::DrawFocusRect( dc, &m_rcFocus );
|
||||
|
||||
ReleaseDC( NULL, dc );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
// Output : CChoreoEvent
|
||||
//-----------------------------------------------------------------------------
|
||||
CChoreoEvent *CChoreoGlobalEventWidget::GetEvent( void )
|
||||
{
|
||||
return m_pEvent;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
// Input : *event -
|
||||
//-----------------------------------------------------------------------------
|
||||
void CChoreoGlobalEventWidget::SetEvent( CChoreoEvent *event )
|
||||
{
|
||||
m_pEvent = event;
|
||||
}
|
||||
Reference in New Issue
Block a user