add initial examples, replacing the 'Demos/Demos3'. Will make it work cross-platform, OpenGL3/OpenGL2 and add more examples to it.
This commit is contained in:
150
examples/ThirdPartyLibs/Gwen/Controls/WindowControl.cpp
Normal file
150
examples/ThirdPartyLibs/Gwen/Controls/WindowControl.cpp
Normal file
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
GWEN
|
||||
Copyright (c) 2010 Facepunch Studios
|
||||
See license in Gwen.h
|
||||
*/
|
||||
|
||||
|
||||
#include "Gwen/Controls/WindowControl.h"
|
||||
#include "Gwen/Controls/ImagePanel.h"
|
||||
#include "Gwen/Controls/Label.h"
|
||||
#include "Gwen/Controls/Modal.h"
|
||||
|
||||
using namespace Gwen;
|
||||
using namespace Gwen::Controls;
|
||||
using namespace Gwen::ControlsInternal;
|
||||
|
||||
GWEN_CONTROL_CONSTRUCTOR( WindowControl )
|
||||
{
|
||||
m_Modal = NULL;
|
||||
m_bInFocus = false;
|
||||
m_bDeleteOnClose = false;
|
||||
|
||||
m_TitleBar = new Dragger( this );
|
||||
m_TitleBar->Dock( Pos::Top );
|
||||
m_TitleBar->SetHeight( 18 );
|
||||
m_TitleBar->SetPadding( Padding( 0, 0, 0, 5 ) );
|
||||
m_TitleBar->SetTarget( this );
|
||||
|
||||
m_Title = new Label( m_TitleBar );
|
||||
m_Title->SetAlignment( Pos::Center );
|
||||
m_Title->SetText( "Window" );
|
||||
m_Title->SetTextColor(Gwen::Colors::White);
|
||||
m_Title->Dock( Pos::Fill );
|
||||
|
||||
m_CloseButton = new Button( m_TitleBar );
|
||||
m_CloseButton->SetText( "" );
|
||||
m_CloseButton->SetSize( m_TitleBar->Height(), m_TitleBar->Height() );
|
||||
m_CloseButton->Dock(Pos::Right);
|
||||
m_CloseButton->onPress.Add( this, &WindowControl::CloseButtonPressed );
|
||||
m_CloseButton->SetTabable( false );
|
||||
m_CloseButton->SetName( "closeButton" );
|
||||
|
||||
//Create a blank content control, dock it to the top - Should this be a ScrollControl?
|
||||
m_InnerPanel = new Base( this );
|
||||
m_InnerPanel->Dock( Pos::Fill );
|
||||
|
||||
BringToFront();
|
||||
|
||||
SetTabable( false );
|
||||
Focus();
|
||||
|
||||
SetMinimumSize( Gwen::Point( 100, 40 ) );
|
||||
SetClampMovement( true );
|
||||
SetKeyboardInputEnabled( false );
|
||||
}
|
||||
|
||||
|
||||
WindowControl::~WindowControl()
|
||||
{
|
||||
if ( m_Modal )
|
||||
{
|
||||
m_Modal->DelayedDelete();
|
||||
}
|
||||
}
|
||||
|
||||
void WindowControl::MakeModal( bool invisible )
|
||||
{
|
||||
if ( m_Modal ) return;
|
||||
|
||||
m_Modal = new ControlsInternal::Modal( GetCanvas() );
|
||||
SetParent( m_Modal );
|
||||
|
||||
if ( invisible )
|
||||
{
|
||||
m_Modal->SetShouldDrawBackground( false );
|
||||
}
|
||||
}
|
||||
|
||||
bool WindowControl::IsOnTop()
|
||||
{
|
||||
for (Base::List::reverse_iterator iter = GetParent()->Children.rbegin(); iter != GetParent()->Children.rend(); ++iter)
|
||||
{
|
||||
if (!*iter)
|
||||
continue;
|
||||
|
||||
WindowControl* pWindow = (*iter)->DynamicCastWindowControl();
|
||||
|
||||
if ( !pWindow )
|
||||
continue;
|
||||
|
||||
if ( pWindow == this )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
void WindowControl::Render( Skin::Base* skin )
|
||||
{
|
||||
//This should use m_bInFocus but I need to figure out best way to make layout happen
|
||||
skin->DrawWindow( this, m_TitleBar->Bottom(), IsOnTop() );
|
||||
}
|
||||
|
||||
void WindowControl::RenderUnder( Skin::Base* skin )
|
||||
{
|
||||
BaseClass::RenderUnder( skin );
|
||||
skin->DrawShadow( this );
|
||||
}
|
||||
|
||||
void WindowControl::SetTitle(Gwen::UnicodeString title)
|
||||
{
|
||||
m_Title->SetText( title );
|
||||
}
|
||||
void WindowControl::SetClosable(bool closeable)
|
||||
{
|
||||
m_CloseButton->SetHidden( !closeable );
|
||||
}
|
||||
|
||||
void WindowControl::SetHidden(bool hidden)
|
||||
{
|
||||
if ( !hidden )
|
||||
BringToFront();
|
||||
|
||||
BaseClass::SetHidden(hidden);
|
||||
}
|
||||
|
||||
void WindowControl::Touch()
|
||||
{
|
||||
BaseClass::Touch();
|
||||
BringToFront();
|
||||
m_bInFocus = IsOnTop();
|
||||
//If Keyboard focus isn't one of our children, make it us
|
||||
}
|
||||
|
||||
void WindowControl::CloseButtonPressed( Gwen::Controls::Base* /*pFromPanel*/ )
|
||||
{
|
||||
SetHidden( true );
|
||||
|
||||
if ( m_bDeleteOnClose )
|
||||
DelayedDelete();
|
||||
}
|
||||
|
||||
|
||||
void WindowControl::RenderFocus( Gwen::Skin::Base* /*skin*/ )
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user