123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /*
- 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();
- }
|