|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef GESTURETOOL_H
#define GESTURETOOL_H
#ifdef _WIN32
#pragma once
#endif
#include <mxtk/mx.h>
#include "studio.h"
#include "utlvector.h"
#include "faceposertoolwindow.h"
class CChoreoEvent; class CChoreoWidgetDrawHelper; class CChoreoView; class CEventAbsoluteTag;
#define IDC_REDO_GT 1000
#define IDC_UNDO_GT 1001
#define IDC_GT_DELETE_TAG 1002
#define IDC_GT_INSERT_TAG 1003
#define IDC_GT_REVERT 1004
#define IDC_GT_CHANGESCALE 1005
#define IDC_GESTUREHSCROLL 1006
class GestureTool : public mxWindow, public IFacePoserToolWindow { public: // Construction
GestureTool( mxWindow *parent ); ~GestureTool( void );
virtual void Think( float dt ); void ScrubThink( float dt, bool scrubbing ); virtual bool IsScrubbing( void ) const; virtual bool IsProcessing( void );
virtual int handleEvent( mxEvent *event ); virtual void redraw( void ); virtual bool PaintBackground();
void SetEvent( CChoreoEvent *event );
void GetScrubHandleRect( RECT& rcHandle, float scrub, bool clipped = false ); void GetScrubHandleReferenceRect( RECT& rcHandle, float scrub, bool clipped = false );
void DrawScrubHandle( CChoreoWidgetDrawHelper& drawHelper, RECT& rcHandle, float scrub, bool reference ); void DrawTimeLine( CChoreoWidgetDrawHelper& drawHelper, RECT& rc, float left, float right ); void DrawEventEnd( CChoreoWidgetDrawHelper& drawHelper );
void DrawAbsoluteTags( CChoreoWidgetDrawHelper& drawHelper ); bool GetAbsTagRect( RECT& rcClient, CChoreoEvent *event, int tagtype, CEventAbsoluteTag *tag, RECT& rcTag ); void GetTagTrayRect( RECT &rcClient, int tagtype, RECT& rcTray );
void SetMouseOverPos( int x, int y ); void GetMouseOverPos( int &x, int& y ); void GetMouseOverPosRect( RECT& rcPos ); void DrawMouseOverPos( CChoreoWidgetDrawHelper& drawHelper, RECT& rcPos ); void DrawMouseOverPos();
void DrawScrubHandles();
CChoreoEvent *GetSafeEvent( void );
bool IsMouseOverScrubHandle( mxEvent *event ); void ForceScrubPosition( float newtime ); void ForceScrubPositionFromSceneTime( float scenetime );
void SetScrubTime( float t ); void SetScrubTargetTime( float t ); virtual void OnModelChanged();
private:
void StartDragging( int dragtype, int startx, int starty, HCURSOR cursor ); void AddFocusRect( RECT& rc ); void OnMouseMove( mxEvent *event ); void DrawFocusRect( void ); void ShowContextMenu( mxEvent *event, bool include_track_menus ); void GetWorkspaceLeftRight( int& left, int& right ); void SetClickedPos( int x, int y ); float GetTimeForClickedPos( void ); void ApplyBounds( int& mx, int& my ); void CalcBounds( int movetype ); void OnUndo( void ); void OnRedo( void );
CEventAbsoluteTag *IsMouseOverTag( int mx, int my ); int GetTagTypeForMouse( int mx, int my );
int GetTagTypeForTag( CEventAbsoluteTag const *tag ); void OnInsertTag( void ); void OnDeleteTag( void ); void OnRevert( void );
void DrawRelativeTags( CChoreoWidgetDrawHelper& drawHelper, RECT& rc ); void DrawRelativeTagsForEvent( CChoreoWidgetDrawHelper& drawHelper, RECT& rc, CChoreoEvent *gesture, CChoreoEvent *event, float starttime, float endtime );
// Readjust slider
void MoveTimeSliderToPos( int x ); void OnChangeScale(); int ComputeHPixelsNeeded( void ); float GetPixelsPerSecond( void ); void InvalidateLayout( void ); void RepositionHSlider( void ); void GetStartAndEndTime( float& st, float& ed ); float GetEventEndTime(); float GetTimeValueForMouse( int mx, bool clip = false ); int GetPixelForTimeValue( float time, bool *clipped = NULL );
float m_flScrub; float m_flScrubTarget;
enum { DRAGTYPE_NONE = 0, DRAGTYPE_SCRUBBER, DRAGTYPE_ABSOLUTE_TIMING_TAG, };
int m_nFocusEventGlobalID;
int m_nMousePos[ 2 ];
bool m_bUseBounds; int m_nMinX; int m_nMaxX;
HCURSOR m_hPrevCursor; int m_nDragType;
int m_nStartX; int m_nStartY; int m_nLastX; int m_nLastY;
int m_nClickedX; int m_nClickedY;
struct CFocusRect { RECT m_rcOrig; RECT m_rcFocus; }; CUtlVector < CFocusRect > m_FocusRects; CChoreoEvent *m_pLastEvent;
bool m_bSuppressLayout; // Height/width of scroll bars
int m_nScrollbarHeight; float m_flLeftOffset; mxScrollbar *m_pHorzScrollBar; int m_nLastHPixelsNeeded; // How many pixels per second we are showing in the UI
float m_flPixelsPerSecond; // Do we need to move controls?
bool m_bLayoutIsValid; float m_flLastDuration; bool m_bInSetEvent; float m_flScrubberTimeOffset;
friend class CChoreoView; };
extern GestureTool *g_pGestureTool; #endif // GESTURETOOL_H
|