0ad/source/gui/CButton.cpp

102 lines
3.1 KiB
C++
Raw Normal View History

/* Copyright (C) 2019 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 0 A.D. is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/
#include "precompiled.h"
2004-05-28 21:06:50 -07:00
#include "CButton.h"
#include "gui/CGUIColor.h"
#include "lib/ogl.h"
2003-11-24 18:47:12 -08:00
CButton::CButton(CGUI& pGUI)
: IGUIObject(pGUI), IGUIButtonBehavior(pGUI), IGUITextOwner(pGUI)
{
AddSetting<float>("buffer_zone");
AddSetting<CGUIString>("caption");
AddSetting<i32>("cell_id");
AddSetting<CStrW>("font");
AddSetting<CStrW>("sound_disabled");
AddSetting<CStrW>("sound_enter");
AddSetting<CStrW>("sound_leave");
AddSetting<CStrW>("sound_pressed");
AddSetting<CStrW>("sound_released");
AddSetting<CGUISpriteInstance>("sprite");
AddSetting<CGUISpriteInstance>("sprite_over");
AddSetting<CGUISpriteInstance>("sprite_pressed");
AddSetting<CGUISpriteInstance>("sprite_disabled");
AddSetting<EAlign>("text_align");
AddSetting<EVAlign>("text_valign");
AddSetting<CGUIColor>("textcolor");
AddSetting<CGUIColor>("textcolor_over");
AddSetting<CGUIColor>("textcolor_pressed");
AddSetting<CGUIColor>("textcolor_disabled");
AddSetting<CStrW>("tooltip");
AddSetting<CStr>("tooltip_style");
2004-05-28 21:06:50 -07:00
AddText();
}
CButton::~CButton()
{
}
2004-05-28 21:06:50 -07:00
void CButton::SetupText()
{
ENSURE(m_GeneratedTexts.size() == 1);
2004-05-28 21:06:50 -07:00
m_GeneratedTexts[0] = CGUIText(
m_pGUI,
GetSetting<CGUIString>("caption"),
GetSetting<CStrW>("font"),
m_CachedActualSize.GetWidth(),
GetSetting<float>("buffer_zone"),
this);
CalculateTextPosition(m_CachedActualSize, m_TextPos, m_GeneratedTexts[0]);
2004-05-28 21:06:50 -07:00
}
void CButton::HandleMessage(SGUIMessage& Message)
{
2003-11-24 18:47:12 -08:00
// Important
2003-11-23 18:18:41 -08:00
IGUIButtonBehavior::HandleMessage(Message);
2004-05-28 21:06:50 -07:00
IGUITextOwner::HandleMessage(Message);
}
void CButton::Draw()
{
const float bz = GetBufferedZ();
2004-05-28 21:06:50 -07:00
// Statically initialise some strings, so we don't have to do
// lots of allocation every time this function is called
static const CStr strSprite("sprite");
static const CStr strSpriteOver("sprite_over");
static const CStr strSpritePressed("sprite_pressed");
static const CStr strSpriteDisabled("sprite_disabled");
static const CStr strCellId("cell_id");
CGUISpriteInstance& sprite = GetSetting<CGUISpriteInstance>(strSprite);
CGUISpriteInstance& sprite_over = GetSetting<CGUISpriteInstance>(strSpriteOver);
CGUISpriteInstance& sprite_pressed = GetSetting<CGUISpriteInstance>(strSpritePressed);
CGUISpriteInstance& sprite_disabled = GetSetting<CGUISpriteInstance>(strSpriteDisabled);
const i32 cell_id = GetSetting<i32>(strCellId);
DrawButton(m_CachedActualSize, bz, sprite, sprite_over, sprite_pressed, sprite_disabled, cell_id);
2004-05-28 21:06:50 -07:00
DrawText(0, ChooseColor(), m_TextPos, bz + 0.1f);
2003-11-24 09:13:37 -08:00
}