reorganize files and add btgui
This commit is contained in:
110
btgui/Gwen/Controls/ResizableControl.cpp
Normal file
110
btgui/Gwen/Controls/ResizableControl.cpp
Normal file
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
GWEN
|
||||
Copyright (c) 2010 Facepunch Studios
|
||||
See license in Gwen.h
|
||||
*/
|
||||
|
||||
|
||||
#include "Gwen/Controls/ImagePanel.h"
|
||||
#include "Gwen/Controls/Label.h"
|
||||
#include "Gwen/Controls/Resizer.h"
|
||||
#include "Gwen/Controls/ResizableControl.h"
|
||||
|
||||
using namespace Gwen;
|
||||
using namespace Gwen::Controls;
|
||||
using namespace Gwen::ControlsInternal;
|
||||
|
||||
GWEN_CONTROL_CONSTRUCTOR( ResizableControl )
|
||||
{
|
||||
m_bResizable = true;
|
||||
m_MinimumSize = Gwen::Point( 5, 5 );
|
||||
m_bClampMovement = false;
|
||||
|
||||
Resizer* resizerBottom = new Resizer (this );
|
||||
resizerBottom->Dock( Pos::Bottom );
|
||||
resizerBottom->SetResizeDir( Pos::Bottom );
|
||||
resizerBottom->SetTarget( this );
|
||||
resizerBottom->onResize.Add( this, &ResizableControl::OnResizedInternal );
|
||||
|
||||
Resizer* resizerBottomLeft = new Resizer( resizerBottom );
|
||||
resizerBottomLeft->Dock( Pos::Left );
|
||||
resizerBottomLeft->SetResizeDir( Pos::Bottom | Pos::Left );
|
||||
resizerBottomLeft->SetTarget(this );
|
||||
resizerBottomLeft->onResize.Add( this, &ResizableControl::OnResizedInternal );
|
||||
|
||||
Resizer* resizerBottomRight = new Resizer( resizerBottom );
|
||||
resizerBottomRight->Dock( Pos::Right);
|
||||
resizerBottomRight->SetResizeDir( Pos::Bottom | Pos::Right );
|
||||
resizerBottomRight->SetTarget( this );
|
||||
resizerBottomRight->onResize.Add( this, &ResizableControl::OnResizedInternal );
|
||||
|
||||
Resizer* resizerTop = new Resizer( this );
|
||||
resizerTop->Dock( Pos::Top );
|
||||
resizerTop->SetResizeDir( Pos::Top );
|
||||
resizerTop->SetTarget( this );
|
||||
resizerTop->onResize.Add( this, &ResizableControl::OnResizedInternal );
|
||||
|
||||
Resizer* resizerTopLeft = new Resizer( resizerTop );
|
||||
resizerTopLeft->Dock( Pos::Left );
|
||||
resizerTopLeft->SetResizeDir( Pos::Top | Pos::Left );
|
||||
resizerTopLeft->SetTarget( this );
|
||||
resizerTopLeft->onResize.Add( this, &ResizableControl::OnResizedInternal );
|
||||
|
||||
Resizer* resizerTopRight = new Resizer( resizerTop );
|
||||
resizerTopRight->Dock( Pos::Right );
|
||||
resizerTopRight->SetResizeDir( Pos::Top| Pos::Right );
|
||||
resizerTopRight->SetTarget( this );
|
||||
resizerTopRight->onResize.Add( this, &ResizableControl::OnResizedInternal );
|
||||
|
||||
Resizer* resizerLeft = new Resizer( this );
|
||||
resizerLeft->Dock( Pos::Left );
|
||||
resizerLeft->SetResizeDir( Pos::Left );
|
||||
resizerLeft->SetTarget( this );
|
||||
resizerLeft->onResize.Add( this, &ResizableControl::OnResizedInternal );
|
||||
|
||||
Resizer* resizerRight = new Resizer( this );
|
||||
resizerRight->Dock( Pos::Right );
|
||||
resizerRight->SetResizeDir( Pos::Right );
|
||||
resizerRight->SetTarget( this );
|
||||
resizerRight->onResize.Add( this, &ResizableControl::OnResizedInternal );
|
||||
}
|
||||
|
||||
void ResizableControl::DisableResizing()
|
||||
{
|
||||
for ( Base::List::iterator it = Children.begin(); it != Children.end(); ++it )
|
||||
{
|
||||
Resizer* resizer = (*it)->DynamicCastResizer();
|
||||
if ( !resizer ) continue;
|
||||
|
||||
resizer->SetMouseInputEnabled( false );
|
||||
resizer->SetHidden( true );
|
||||
SetPadding( Padding( resizer->Width(), resizer->Width(), resizer->Width(), resizer->Width() ) );
|
||||
}
|
||||
}
|
||||
|
||||
bool ResizableControl::SetBounds( int x, int y, int w, int h )
|
||||
{
|
||||
Gwen::Point minSize = GetMinimumSize();
|
||||
|
||||
// Clamp Minimum Size
|
||||
if ( w < minSize.x ) w = minSize.x;
|
||||
if ( h < minSize.y ) h = minSize.y;
|
||||
|
||||
// Clamp to parent's window
|
||||
Base* pParent = GetParent();
|
||||
if ( pParent && m_bClampMovement )
|
||||
{
|
||||
if ( x + w > pParent->Width() ) x = pParent->Width() - w;
|
||||
if ( x < 0 ) x = 0;
|
||||
if ( y + h > pParent->Height() ) y = pParent->Height() - h;
|
||||
if ( y < 0 ) y = 0;
|
||||
}
|
||||
|
||||
return BaseClass::SetBounds( x, y, w, h );
|
||||
}
|
||||
|
||||
void ResizableControl::OnResizedInternal( Controls::Base* /*pControl*/ )
|
||||
{
|
||||
onResize.Call( this );
|
||||
OnResized();
|
||||
}
|
||||
Reference in New Issue
Block a user