Counter Strike : Global Offensive Source Code
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.
 
 
 
 
 
 

239 lines
5.2 KiB

//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "stdafx.h"
#if defined( _OSX )
//#include "appframework/icocoamgr.h"
//extern ICocoaMgr *g_extCocoaMgr;
#endif
// memdbgon must be the last include file in a .cpp file!!!
#include <tier0/memdbgon.h>
using namespace SF::GFx;
ConVar sfcursortimeout( "cursortimeout", "60.0", FCVAR_ARCHIVE, "Seconds before mouse cursor hides itself due to inactivity" );
void ScaleformUIImpl::InitCursorImpl( void )
{
m_fCursorTimeUntilHide = sfcursortimeout.GetFloat();
m_iWantCursorShown = 0;
m_loadedCursorImage = CURSOR_IMAGE_NONE;
m_isCursorForced = false;
}
void ScaleformUIImpl::ShutdownCursorImpl( void )
{
}
void ScaleformUIImpl::InitCursor( const char* cursorMovie )
{
// gurjeets - locks commented out, left here for reference, see comment in LockSlotPtr
//m_SlotMutexes[SF_RESERVED_CURSOR_SLOT].Lock();
if ( !m_SlotPtrs[SF_RESERVED_CURSOR_SLOT] )
{
CursorSlot* slotPtr = new CursorSlot();
m_SlotPtrs[SF_RESERVED_CURSOR_SLOT] = slotPtr;
slotPtr->Init( cursorMovie, SF_RESERVED_CURSOR_SLOT );
if ( ConsumesInputEvents() )
{
slotPtr->Hide();
slotPtr->Show();
m_fCursorTimeUntilHide = sfcursortimeout.GetFloat();
}
else
{
slotPtr->Show();
slotPtr->Hide();
m_fCursorTimeUntilHide = 0;
}
}
else
{
m_SlotPtrs[SF_RESERVED_CURSOR_SLOT]->AddRef();
}
// gurjeets - locks commented out, left here for reference, see comment in LockSlotPtr
//m_SlotMutexes[SF_RESERVED_CURSOR_SLOT].Unlock();
}
void ScaleformUIImpl::SetCursorViewport( int x, int y, int width, int height )
{
SetSlotViewport( SF_RESERVED_CURSOR_SLOT, x, y, width, height );
}
void ScaleformUIImpl::ReleaseCursor( void )
{
SlotRelease( SF_RESERVED_CURSOR_SLOT );
}
bool ScaleformUIImpl::IsCursorVisible( void )
{
bool result = false;
CursorSlot* pslot = ( CursorSlot* )m_SlotPtrs[ SF_RESERVED_CURSOR_SLOT ];
if ( pslot )
{
result = pslot->IsVisible();
}
return result;
}
void ScaleformUIImpl::RenderCursor( void )
{
RenderSlot( SF_RESERVED_CURSOR_SLOT );
}
void ScaleformUIImpl::AdvanceCursor( void )
{
AdvanceSlot( SF_RESERVED_CURSOR_SLOT );
}
void ScaleformUIImpl::SetCursorShape( int shapeIndex )
{
CursorSlot* pslot = ( CursorSlot* ) LockSlotPtr( SF_RESERVED_CURSOR_SLOT );
if ( pslot )
{
pslot->SetCursorShape( shapeIndex );
}
UnlockSlotPtr( SF_RESERVED_CURSOR_SLOT );
}
void ScaleformUIImpl::UpdateCursorWaitTime( float newTime )
{
if ( ( m_fCursorTimeUntilHide > 0 ) != ( newTime > 0 ) )
{
if ( ( newTime > 0 ) )
{
if ( m_iWantCursorShown )
InnerShowCursor();
}
else
InnerHideCursor();
}
m_fCursorTimeUntilHide = newTime;
}
void ScaleformUIImpl::CursorMoved( void )
{
UpdateCursorWaitTime( sfcursortimeout.GetFloat() );
}
void ScaleformUIImpl::ControllerMoved( void )
{
// the motion calibration screen requires the cursor to remain visible even though it is a 'controller'
if ( !m_isCursorForced )
{
UpdateCursorWaitTime( 0 );
}
}
void ScaleformUIImpl::UpdateCursorLazyHide( float time )
{
UpdateCursorWaitTime( m_fCursorTimeUntilHide - time );
}
void ScaleformUIImpl::InnerShowCursor( void )
{
#if defined( USE_SDL ) || defined( OSX )
m_pLauncherMgr->SetMouseVisible( true );
#endif
m_fCursorTimeUntilHide = sfcursortimeout.GetFloat();
#if defined( _PS3 )
// use hardware cursor, and skip the show call for the standard scaleform cursor
g_pInputSystem->EnableHardwareCursor();
#else
CursorSlot* pslot = ( CursorSlot* ) LockSlotPtr( SF_RESERVED_CURSOR_SLOT );
if ( pslot )
{
pslot->Show();
}
UnlockSlotPtr( SF_RESERVED_CURSOR_SLOT );
#endif
}
void ScaleformUIImpl::InnerHideCursor( void )
{
#if defined( USE_SDL ) || defined( OSX )
m_pLauncherMgr->SetMouseVisible( false );
#endif
MouseEvent mevent( Event::MouseMove, 0, -100, -100 );
DistributeEvent( mevent, 0, true, false );
CursorSlot* pslot = ( CursorSlot* ) LockSlotPtr( SF_RESERVED_CURSOR_SLOT );
if ( pslot )
{
pslot->Hide();
}
#if defined( _OSX )
// [will] - Grab the delta to clear the mouse delta accumulator.
// int x, y;
// g_extCocoaMgr->GetMouseDelta( x, y, true );
#endif
UnlockSlotPtr( SF_RESERVED_CURSOR_SLOT );
}
void ScaleformUIImpl::ShowCursor( void )
{
m_iWantCursorShown++;
ConVarRef cl_mouseenable( "cl_mouseenable" );
cl_mouseenable.SetValue( false );
if ( m_iWantCursorShown && m_fCursorTimeUntilHide > 0 )
{
InnerShowCursor();
SFDevMsg( "ScaleformUIImpl::ShowCursor want=%d cl_mouseenable=false InnerShowCursor\n", m_iWantCursorShown);
}
else
{
SFDevMsg( "ScaleformUIImpl::ShowCursor want=%d cl_mouseenable=false\n", m_iWantCursorShown);
}
}
void ScaleformUIImpl::HideCursor( void )
{
Assert( m_iWantCursorShown > 0 );
m_iWantCursorShown--;
if ( !m_iWantCursorShown )
{
ConVarRef cl_mouseenable( "cl_mouseenable" );
cl_mouseenable.SetValue( true );
InnerHideCursor();
SFDevMsg( "ScaleformUIImpl::HideCursor want=%d cl_mouseenable=true InnerHideCursor\n", m_iWantCursorShown);
}
else
{
ConVarRef cl_mouseenable( "cl_mouseenable" );
SFDevMsg( "ScaleformUIImpl::HideCursor want=%d cl_mouseenable=%s\n", m_iWantCursorShown, cl_mouseenable.GetBool() ? "TRUE" : "FALSE");
}
}