Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
4.9 KiB

5 years ago
//========= 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