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:
erwincoumans
2015-04-16 09:55:32 -07:00
parent d9feaf2d2a
commit a1bf9c5556
425 changed files with 255913 additions and 0 deletions

View 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*/ )
{
}