Apply clang-format-all.sh using the _clang-format file through all the cpp/.h files. make sure not to apply it to certain serialization structures, since some parser expects the * as part of the name, instead of type. This commit contains no other changes aside from adding and applying clang-format-all.sh
145 lines
2.9 KiB
C++
145 lines
2.9 KiB
C++
/*
|
|
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*/)
|
|
{
|
|
} |