70 lines
1.2 KiB
C++
70 lines
1.2 KiB
C++
|
/*
|
||
|
GWEN
|
||
|
Copyright (c) 2010 Facepunch Studios
|
||
|
See license in Gwen.h
|
||
|
*/
|
||
|
|
||
|
|
||
|
#include "gwen_dragger.h"
|
||
|
|
||
|
using namespace Gwen;
|
||
|
using namespace Gwen::ControlsInternal;
|
||
|
|
||
|
|
||
|
|
||
|
GWEN_CONTROL_CONSTRUCTOR( Dragger )
|
||
|
{
|
||
|
m_pTarget = NULL;
|
||
|
SetMouseInputEnabled( true );
|
||
|
m_bDepressed = false;
|
||
|
m_bDoMove = true;
|
||
|
}
|
||
|
|
||
|
void Dragger::OnMouseClickLeft( int x, int y, bool bDown )
|
||
|
{
|
||
|
if ( bDown )
|
||
|
{
|
||
|
m_bDepressed = true;
|
||
|
|
||
|
if ( m_pTarget)
|
||
|
m_HoldPos = m_pTarget->CanvasPosToLocal( Gwen::Point( x, y ) );
|
||
|
|
||
|
Gwen::MouseFocus = this;
|
||
|
onDragStart.Call( this );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_bDepressed = false;
|
||
|
Gwen::MouseFocus = NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Dragger::OnMouseMoved( int x, int y, int deltaX, int deltaY )
|
||
|
{
|
||
|
if ( !m_bDepressed ) return;
|
||
|
|
||
|
if ( m_bDoMove && m_pTarget )
|
||
|
{
|
||
|
Gwen::Point p = Gwen::Point( x - m_HoldPos.x, y - m_HoldPos.y );
|
||
|
|
||
|
// Translate to parent
|
||
|
if ( m_pTarget->GetParent() )
|
||
|
p = m_pTarget->GetParent()->CanvasPosToLocal( p );
|
||
|
|
||
|
m_pTarget->MoveTo( p.x, p.y );
|
||
|
}
|
||
|
|
||
|
Gwen::Event::Information info;
|
||
|
info.Point = Gwen::Point( deltaX, deltaY );
|
||
|
onDragged.Call( this, info );
|
||
|
}
|
||
|
|
||
|
void Dragger::Render( Skin::Base* skin )
|
||
|
{
|
||
|
//skin->DrawButton(this,false,false, false);
|
||
|
}
|
||
|
|
||
|
void Dragger::OnMouseDoubleClickLeft( int x, int y )
|
||
|
{
|
||
|
onDoubleClickLeft.Call( this );
|
||
|
}
|