Provides Canvas2D for sprite rendering.
Differential Revision: https://code.wildfiregames.com/D4029 This was SVN commit r25591.
This commit is contained in:
parent
283f524fcf
commit
57dde8d082
@ -85,7 +85,7 @@ void CCanvas2D::DrawRect(const CRect& rect, const CColor& color)
|
||||
tech->BeginPass();
|
||||
CShaderProgramPtr shader = tech->GetShader();
|
||||
|
||||
shader->BindTexture(str_tex, g_Renderer.GetTextureManager().GetWhiteTexture());
|
||||
shader->BindTexture(str_tex, g_Renderer.GetTextureManager().GetTransparentTexture());
|
||||
shader->Uniform(str_transform, GetDefaultGuiMatrix());
|
||||
shader->Uniform(str_colorAdd, color);
|
||||
shader->Uniform(str_colorMul, CColor(0.0f, 0.0f, 0.0f, 0.0f));
|
||||
|
@ -350,7 +350,7 @@ void CGUI::Draw()
|
||||
visibleObject.object->Draw(canvas);
|
||||
}
|
||||
|
||||
void CGUI::DrawSprite(const CGUISpriteInstance& Sprite, const CRect& Rect, const CRect& UNUSED(Clipping))
|
||||
void CGUI::DrawSprite(const CGUISpriteInstance& Sprite, CCanvas2D& canvas, const CRect& Rect, const CRect& UNUSED(Clipping))
|
||||
{
|
||||
// If the sprite doesn't exist (name == ""), don't bother drawing anything
|
||||
if (!Sprite)
|
||||
@ -358,7 +358,7 @@ void CGUI::DrawSprite(const CGUISpriteInstance& Sprite, const CRect& Rect, const
|
||||
|
||||
// TODO: Clipping?
|
||||
|
||||
Sprite.Draw(*this, Rect, m_Sprites);
|
||||
Sprite.Draw(*this, canvas, Rect, m_Sprites);
|
||||
}
|
||||
|
||||
void CGUI::UpdateResolution()
|
||||
|
@ -41,6 +41,7 @@
|
||||
|
||||
extern const double SELECT_DBLCLICK_RATE;
|
||||
|
||||
class CCanvas2D;
|
||||
class CGUISpriteInstance;
|
||||
class CGUISprite;
|
||||
class IGUIObject;
|
||||
@ -102,10 +103,11 @@ public:
|
||||
*
|
||||
* @param Sprite Object referring to the sprite (which also caches
|
||||
* calculations for faster rendering)
|
||||
* @param Canvas Canvas to draw on
|
||||
* @param Rect Position and Size
|
||||
* @param Clipping The sprite shouldn't be drawn outside this rectangle
|
||||
*/
|
||||
void DrawSprite(const CGUISpriteInstance& Sprite, const CRect& Rect, const CRect& Clipping = CRect());
|
||||
void DrawSprite(const CGUISpriteInstance& Sprite, CCanvas2D& canvas, const CRect& Rect, const CRect& Clipping = CRect());
|
||||
|
||||
/**
|
||||
* The replacement of Process(), handles an SDL_Event_
|
||||
|
@ -47,7 +47,7 @@ void CGUIScrollBarVertical::SetPosFromMousePos(const CVector2D& mouse)
|
||||
m_Pos = m_PosWhenPressed + GetMaxPos() * (mouse.Y - m_BarPressedAtPos.Y) / emptyBackground;
|
||||
}
|
||||
|
||||
void CGUIScrollBarVertical::Draw()
|
||||
void CGUIScrollBarVertical::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
if (!GetStyle())
|
||||
{
|
||||
@ -61,6 +61,7 @@ void CGUIScrollBarVertical::Draw()
|
||||
|
||||
m_pGUI.DrawSprite(
|
||||
GetStyle()->m_SpriteBackVertical,
|
||||
canvas,
|
||||
CRect(
|
||||
outline.left,
|
||||
outline.top + (GetStyle()->m_UseEdgeButtons ? GetStyle()->m_Width : 0),
|
||||
@ -96,6 +97,7 @@ void CGUIScrollBarVertical::Draw()
|
||||
|
||||
m_pGUI.DrawSprite(
|
||||
*button_top,
|
||||
canvas,
|
||||
CRect(
|
||||
outline.left,
|
||||
outline.top,
|
||||
@ -106,6 +108,7 @@ void CGUIScrollBarVertical::Draw()
|
||||
|
||||
m_pGUI.DrawSprite(
|
||||
*button_bottom,
|
||||
canvas,
|
||||
CRect(
|
||||
outline.left,
|
||||
outline.bottom-GetStyle()->m_Width,
|
||||
@ -117,6 +120,7 @@ void CGUIScrollBarVertical::Draw()
|
||||
|
||||
m_pGUI.DrawSprite(
|
||||
GetStyle()->m_SpriteBarVertical,
|
||||
canvas,
|
||||
GetBarRect()
|
||||
);
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public:
|
||||
/**
|
||||
* Draw the scroll-bar
|
||||
*/
|
||||
virtual void Draw();
|
||||
virtual void Draw(CCanvas2D& canvas);
|
||||
|
||||
/**
|
||||
* If an object that contains a scrollbar has got messages, send
|
||||
|
@ -30,14 +30,14 @@ void CGUISprite::AddImage(SGUIImage* image)
|
||||
m_Images.push_back(image);
|
||||
}
|
||||
|
||||
void CGUISpriteInstance::Draw(CGUI& pGUI, const CRect& Size, std::map<CStr, const CGUISprite*>& Sprites) const
|
||||
void CGUISpriteInstance::Draw(CGUI& pGUI, CCanvas2D& canvas, const CRect& Size, std::map<CStr, const CGUISprite*>& Sprites) const
|
||||
{
|
||||
if (m_CachedSize != Size)
|
||||
{
|
||||
GUIRenderer::UpdateDrawCallCache(pGUI, m_DrawCallCache, m_SpriteName, Size, Sprites);
|
||||
m_CachedSize = Size;
|
||||
}
|
||||
GUIRenderer::Draw(m_DrawCallCache);
|
||||
GUIRenderer::Draw(m_DrawCallCache, canvas);
|
||||
}
|
||||
|
||||
// Plus a load of constructors / assignment operators, which don't copy the
|
||||
|
@ -34,6 +34,8 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
class CCanvas2D;
|
||||
|
||||
struct SGUIImageEffects
|
||||
{
|
||||
SGUIImageEffects() : m_Greyscale(false) {}
|
||||
@ -137,7 +139,7 @@ public:
|
||||
CGUISpriteInstance();
|
||||
CGUISpriteInstance(const CStr& SpriteName);
|
||||
|
||||
void Draw(CGUI& pGUI, const CRect& Size, std::map<CStr, const CGUISprite*>& Sprites) const;
|
||||
void Draw(CGUI& pGUI, CCanvas2D& canvas, const CRect& Size, std::map<CStr, const CGUISprite*>& Sprites) const;
|
||||
|
||||
/**
|
||||
* Whether this Sprite has no texture name set.
|
||||
|
@ -428,7 +428,7 @@ bool CGUIText::AssembleCalls(
|
||||
return done;
|
||||
}
|
||||
|
||||
void CGUIText::Draw(CGUI& pGUI, const CGUIColor& DefaultColor, const CVector2D& pos, CRect clipping) const
|
||||
void CGUIText::Draw(CGUI& pGUI, CCanvas2D& canvas, const CGUIColor& DefaultColor, const CVector2D& pos, CRect clipping) const
|
||||
{
|
||||
CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_gui_text);
|
||||
|
||||
@ -469,7 +469,7 @@ void CGUIText::Draw(CGUI& pGUI, const CGUIColor& DefaultColor, const CVector2D&
|
||||
textRenderer.Render();
|
||||
|
||||
for (const SSpriteCall& sc : m_SpriteCalls)
|
||||
pGUI.DrawSprite(sc.m_Sprite, sc.m_Area + pos);
|
||||
pGUI.DrawSprite(sc.m_Sprite, canvas, sc.m_Area + pos);
|
||||
|
||||
if (isClipped)
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <list>
|
||||
#include <vector>
|
||||
|
||||
class CCanvas2D;
|
||||
class CGUI;
|
||||
class CGUIString;
|
||||
class IGUIObject;
|
||||
@ -168,7 +169,7 @@ public:
|
||||
/**
|
||||
* Draw this CGUIText object
|
||||
*/
|
||||
void Draw(CGUI& pGUI, const CGUIColor& DefaultColor, const CVector2D& pos, CRect clipping) const;
|
||||
void Draw(CGUI& pGUI, CCanvas2D& canvas, const CGUIColor& DefaultColor, const CVector2D& pos, CRect clipping) const;
|
||||
|
||||
const CSize2D& GetSize() const { return m_Size; }
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
#include "GUIRenderer.h"
|
||||
|
||||
#include "graphics/Canvas2D.h"
|
||||
#include "graphics/ShaderManager.h"
|
||||
#include "graphics/TextureManager.h"
|
||||
#include "gui/CGUI.h"
|
||||
@ -110,7 +111,6 @@ void GUIRenderer::UpdateDrawCallCache(const CGUI& pGUI, DrawCalls& Calls, const
|
||||
}
|
||||
|
||||
Sprite->AddImage(Image);
|
||||
|
||||
Sprites[SpriteName] = Sprite;
|
||||
}
|
||||
else if (SpriteName.Find("cropped:") != -1)
|
||||
@ -136,7 +136,6 @@ void GUIRenderer::UpdateDrawCallCache(const CGUI& pGUI, DrawCalls& Calls, const
|
||||
}
|
||||
|
||||
Sprite->AddImage(Image);
|
||||
|
||||
Sprites[SpriteName] = Sprite;
|
||||
}
|
||||
if (SpriteName.Find("color:") != -1)
|
||||
@ -166,7 +165,6 @@ void GUIRenderer::UpdateDrawCallCache(const CGUI& pGUI, DrawCalls& Calls, const
|
||||
}
|
||||
|
||||
Sprite->AddImage(Image);
|
||||
|
||||
Sprites[SpriteName] = Sprite;
|
||||
}
|
||||
it = Sprites.find(SpriteName);
|
||||
@ -232,12 +230,14 @@ void GUIRenderer::UpdateDrawCallCache(const CGUI& pGUI, DrawCalls& Calls, const
|
||||
if (!Call.m_HasTexture)
|
||||
{
|
||||
Call.m_Shader = g_Renderer.GetShaderManager().LoadEffect(str_gui_solid);
|
||||
Call.m_Material = str_gui_solid;
|
||||
}
|
||||
else if ((*cit)->m_Effects)
|
||||
{
|
||||
if ((*cit)->m_Effects->m_AddColor != CGUIColor())
|
||||
{
|
||||
Call.m_Shader = g_Renderer.GetShaderManager().LoadEffect(str_gui_add);
|
||||
Call.m_Material = str_gui_add;
|
||||
Call.m_ShaderColorParameter = (*cit)->m_Effects->m_AddColor;
|
||||
// Always enable blending if something's being subtracted from
|
||||
// the alpha channel
|
||||
@ -247,21 +247,25 @@ void GUIRenderer::UpdateDrawCallCache(const CGUI& pGUI, DrawCalls& Calls, const
|
||||
else if ((*cit)->m_Effects->m_Greyscale)
|
||||
{
|
||||
Call.m_Shader = g_Renderer.GetShaderManager().LoadEffect(str_gui_grayscale);
|
||||
Call.m_Material = str_gui_grayscale;
|
||||
}
|
||||
else if ((*cit)->m_Effects->m_SolidColor != CGUIColor())
|
||||
{
|
||||
Call.m_Shader = g_Renderer.GetShaderManager().LoadEffect(str_gui_solid_mask);
|
||||
Call.m_Material = str_gui_solid_mask;
|
||||
Call.m_ShaderColorParameter = (*cit)->m_Effects->m_SolidColor;
|
||||
Call.m_EnableBlending = !(fabs((*cit)->m_Effects->m_SolidColor.a - 1.0f) < 0.0000001f);
|
||||
}
|
||||
else /* Slight confusion - why no effects? */
|
||||
{
|
||||
Call.m_Shader = g_Renderer.GetShaderManager().LoadEffect(str_gui_basic);
|
||||
Call.m_Material = str_gui_basic;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Call.m_Shader = g_Renderer.GetShaderManager().LoadEffect(str_gui_basic);
|
||||
Call.m_Material = str_gui_basic;
|
||||
}
|
||||
|
||||
Calls.push_back(Call);
|
||||
@ -291,9 +295,7 @@ CRect SDrawCall::ComputeTexCoords() const
|
||||
|
||||
// "real_texture_placement" overrides everything
|
||||
if (m_Image->m_TexturePlacementInFile != CRect())
|
||||
{
|
||||
BlockTex = m_Image->m_TexturePlacementInFile;
|
||||
}
|
||||
// Use the whole texture
|
||||
else
|
||||
BlockTex = CRect(0, 0, TexWidth, TexHeight);
|
||||
@ -327,7 +329,7 @@ CRect SDrawCall::ComputeTexCoords() const
|
||||
return TexCoords;
|
||||
}
|
||||
|
||||
void GUIRenderer::Draw(DrawCalls& Calls)
|
||||
void GUIRenderer::Draw(DrawCalls& Calls, CCanvas2D& canvas)
|
||||
{
|
||||
if (Calls.empty())
|
||||
return;
|
||||
@ -344,12 +346,12 @@ void GUIRenderer::Draw(DrawCalls& Calls)
|
||||
// Iterate through each DrawCall, and execute whatever drawing code is being called
|
||||
for (DrawCalls::const_iterator cit = Calls.begin(); cit != Calls.end(); ++cit)
|
||||
{
|
||||
cit->m_Shader->BeginPass();
|
||||
CShaderProgramPtr shader = cit->m_Shader->GetShader();
|
||||
shader->Uniform(str_transform, matrix);
|
||||
|
||||
if (cit->m_HasTexture)
|
||||
{
|
||||
cit->m_Shader->BeginPass();
|
||||
CShaderProgramPtr shader = cit->m_Shader->GetShader();
|
||||
shader->Uniform(str_transform, matrix);
|
||||
|
||||
shader->Uniform(str_color, cit->m_ShaderColorParameter);
|
||||
shader->BindTexture(str_tex, cit->m_Texture);
|
||||
|
||||
@ -390,39 +392,24 @@ void GUIRenderer::Draw(DrawCalls& Calls)
|
||||
|
||||
if (needsBlend)
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
cit->m_Shader->EndPass();
|
||||
}
|
||||
else
|
||||
{
|
||||
shader->Uniform(str_color, *cit->m_BackColor);
|
||||
|
||||
if (cit->m_EnableBlending)
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
// Ensure the quad has the correct winding order
|
||||
CRect Verts = cit->m_Vertices;
|
||||
if (Verts.right < Verts.left)
|
||||
std::swap(Verts.right, Verts.left);
|
||||
if (Verts.bottom < Verts.top)
|
||||
std::swap(Verts.bottom, Verts.top);
|
||||
|
||||
std::vector<float> data;
|
||||
#define ADD(x, y, z) STMT(data.push_back(x); data.push_back(y); data.push_back(z))
|
||||
ADD(Verts.left, Verts.bottom, 0.0f);
|
||||
ADD(Verts.right, Verts.bottom, 0.0f);
|
||||
ADD(Verts.right, Verts.top, 0.0f);
|
||||
|
||||
ADD(Verts.right, Verts.top, 0.0f);
|
||||
ADD(Verts.left, Verts.top, 0.0f);
|
||||
ADD(Verts.left, Verts.bottom, 0.0f);
|
||||
|
||||
shader->VertexPointer(3, GL_FLOAT, 3*sizeof(float), &data[0]);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 6);
|
||||
CRect rect = cit->m_Vertices;
|
||||
if (rect.right < rect.left)
|
||||
std::swap(rect.right, rect.left);
|
||||
if (rect.bottom < rect.top)
|
||||
std::swap(rect.bottom, rect.top);
|
||||
canvas.DrawRect(rect, *(cit->m_BackColor));
|
||||
|
||||
if (cit->m_EnableBlending)
|
||||
glDisable(GL_BLEND);
|
||||
#undef ADD
|
||||
}
|
||||
|
||||
cit->m_Shader->EndPass();
|
||||
}
|
||||
}
|
||||
|
@ -23,10 +23,12 @@
|
||||
#include "graphics/Texture.h"
|
||||
#include "lib/res/handle.h"
|
||||
#include "maths/Rect.h"
|
||||
#include "ps/CStrIntern.h"
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
class CCanvas2D;
|
||||
class CGUI;
|
||||
class CGUISprite;
|
||||
class CStr8;
|
||||
@ -55,6 +57,9 @@ namespace GUIRenderer
|
||||
CRect m_Vertices;
|
||||
|
||||
CGUIColor* m_BackColor;
|
||||
|
||||
// Temporary type to make a soft transition to canvas rendering.
|
||||
CStrIntern m_Material;
|
||||
};
|
||||
|
||||
class DrawCalls : public std::vector<SDrawCall>
|
||||
@ -68,7 +73,7 @@ namespace GUIRenderer
|
||||
|
||||
void UpdateDrawCallCache(const CGUI& pGUI, DrawCalls& Calls, const CStr8& SpriteName, const CRect& Size, std::map<CStr8, const CGUISprite*>& Sprites);
|
||||
|
||||
void Draw(DrawCalls& Calls);
|
||||
void Draw(DrawCalls& Calls, CCanvas2D& canvas);
|
||||
}
|
||||
|
||||
#endif // INCLUDED_GUIRENDERER
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "maths/Vector2D.h"
|
||||
#include "ps/CStr.h"
|
||||
|
||||
class CCanvas2D;
|
||||
class CGUI;
|
||||
class IGUIScrollBarOwner;
|
||||
struct SGUIMessage;
|
||||
@ -162,7 +163,7 @@ public:
|
||||
/**
|
||||
* Draw the scroll-bar
|
||||
*/
|
||||
virtual void Draw() = 0;
|
||||
virtual void Draw(CCanvas2D& canvas) = 0;
|
||||
|
||||
/**
|
||||
* If an object that contains a scrollbar has got messages, send
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -57,10 +57,10 @@ void IGUIScrollBarOwner::HandleMessage(SGUIMessage& msg)
|
||||
sb->HandleMessage(msg);
|
||||
}
|
||||
|
||||
void IGUIScrollBarOwner::Draw()
|
||||
void IGUIScrollBarOwner::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
for (IGUIScrollBar* const& sb : m_ScrollBars)
|
||||
sb->Draw();
|
||||
sb->Draw(canvas);
|
||||
}
|
||||
|
||||
float IGUIScrollBarOwner::GetScrollBarPos(const int index) const
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -20,6 +20,7 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
class CCanvas2D;
|
||||
class CStr8;
|
||||
struct SGUIMessage;
|
||||
struct SGUIScrollBarStyle;
|
||||
@ -40,7 +41,7 @@ public:
|
||||
IGUIScrollBarOwner(IGUIObject& m_pObject);
|
||||
virtual ~IGUIScrollBarOwner();
|
||||
|
||||
virtual void Draw();
|
||||
virtual void Draw(CCanvas2D& canvas);
|
||||
|
||||
/**
|
||||
* @see IGUIObject#HandleMessage()
|
||||
|
@ -91,13 +91,13 @@ void IGUITextOwner::UpdateText()
|
||||
}
|
||||
}
|
||||
|
||||
void IGUITextOwner::DrawText(size_t index, const CGUIColor& color, const CVector2D& pos, const CRect& clipping)
|
||||
void IGUITextOwner::DrawText(CCanvas2D& canvas, size_t index, const CGUIColor& color, const CVector2D& pos, const CRect& clipping)
|
||||
{
|
||||
UpdateText();
|
||||
|
||||
ENSURE(index < m_GeneratedTexts.size() && "Trying to draw a Text Index within a IGUITextOwner that doesn't exist");
|
||||
|
||||
m_GeneratedTexts.at(index).Draw(m_pObject.GetGUI(), color, pos, clipping);
|
||||
m_GeneratedTexts.at(index).Draw(m_pObject.GetGUI(), canvas, color, pos, clipping);
|
||||
}
|
||||
|
||||
void IGUITextOwner::CalculateTextPosition(CRect& ObjSize, CVector2D& TextPos, CGUIText& Text)
|
||||
|
@ -36,6 +36,7 @@ GUI Object Base - Text Owner
|
||||
|
||||
#include <vector>
|
||||
|
||||
class CCanvas2D;
|
||||
struct CGUIColor;
|
||||
struct SGUIMessage;
|
||||
class CGUIText;
|
||||
@ -79,13 +80,14 @@ public:
|
||||
/**
|
||||
* Draws the Text.
|
||||
*
|
||||
* @param canvas Canvas to draw on.
|
||||
* @param index Index value of text. Mostly this will be 0
|
||||
* @param color
|
||||
* @param pos Position
|
||||
* @param clipping Clipping rectangle, don't even add a parameter
|
||||
* to get no clipping.
|
||||
*/
|
||||
virtual void DrawText(size_t index, const CGUIColor& color, const CVector2D& pos, const CRect& clipping = CRect());
|
||||
virtual void DrawText(CCanvas2D& canvas, size_t index, const CGUIColor& color, const CVector2D& pos, const CRect& clipping = CRect());
|
||||
|
||||
protected:
|
||||
/**
|
||||
|
@ -80,13 +80,14 @@ void CButton::HandleMessage(SGUIMessage& Message)
|
||||
IGUITextOwner::HandleMessage(Message);
|
||||
}
|
||||
|
||||
void CButton::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CButton::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
m_pGUI.DrawSprite(
|
||||
GetButtonSprite(m_Sprite, m_SpriteOver, m_SpritePressed, m_SpriteDisabled),
|
||||
canvas,
|
||||
m_CachedActualSize);
|
||||
|
||||
DrawText(0, ChooseColor(), m_TextPos);
|
||||
DrawText(canvas, 0, ChooseColor(), m_TextPos);
|
||||
}
|
||||
|
||||
bool CButton::IsMouseOver() const
|
||||
|
@ -143,7 +143,7 @@ void CChart::Draw(CCanvas2D& canvas)
|
||||
tech->EndPass();
|
||||
|
||||
for (size_t i = 0; i < m_TextPositions.size(); ++i)
|
||||
DrawText(i, CGUIColor(1.f, 1.f, 1.f, 1.f), m_TextPositions[i]);
|
||||
DrawText(canvas, i, CGUIColor(1.f, 1.f, 1.f, 1.f), m_TextPositions[i]);
|
||||
}
|
||||
|
||||
CRect CChart::GetChartRect() const
|
||||
|
@ -64,11 +64,12 @@ void CCheckBox::HandleMessage(SGUIMessage& Message)
|
||||
}
|
||||
}
|
||||
|
||||
void CCheckBox::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CCheckBox::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
m_pGUI.DrawSprite(
|
||||
m_Checked ?
|
||||
GetButtonSprite(m_SpriteChecked, m_SpriteCheckedOver, m_SpriteCheckedPressed, m_SpriteCheckedDisabled) :
|
||||
GetButtonSprite(m_SpriteUnchecked, m_SpriteUncheckedOver, m_SpriteUncheckedPressed, m_SpriteUncheckedDisabled),
|
||||
canvas,
|
||||
m_CachedActualSize);
|
||||
}
|
||||
|
@ -420,12 +420,12 @@ bool CDropDown::IsMouseOver() const
|
||||
return m_CachedActualSize.PointInside(m_pGUI.GetMousePos());
|
||||
}
|
||||
|
||||
void CDropDown::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CDropDown::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
const CGUISpriteInstance& sprite = m_Enabled ? m_Sprite : m_SpriteDisabled;
|
||||
const CGUISpriteInstance& spriteOverlay = m_Enabled ? m_SpriteOverlay : m_SpriteOverlayDisabled;
|
||||
|
||||
m_pGUI.DrawSprite(sprite, m_CachedActualSize);
|
||||
m_pGUI.DrawSprite(sprite, canvas, m_CachedActualSize);
|
||||
|
||||
if (m_ButtonWidth > 0.f)
|
||||
{
|
||||
@ -434,18 +434,18 @@ void CDropDown::Draw(CCanvas2D& UNUSED(canvas))
|
||||
|
||||
if (!m_Enabled)
|
||||
{
|
||||
m_pGUI.DrawSprite(*m_Sprite2Disabled ? m_Sprite2Disabled : m_Sprite2, rect);
|
||||
m_pGUI.DrawSprite(*m_Sprite2Disabled ? m_Sprite2Disabled : m_Sprite2, canvas, rect);
|
||||
}
|
||||
else if (m_Open)
|
||||
{
|
||||
m_pGUI.DrawSprite(*m_Sprite2Pressed ? m_Sprite2Pressed : m_Sprite2, rect);
|
||||
m_pGUI.DrawSprite(*m_Sprite2Pressed ? m_Sprite2Pressed : m_Sprite2, canvas, rect);
|
||||
}
|
||||
else if (m_MouseHovering)
|
||||
{
|
||||
m_pGUI.DrawSprite(*m_Sprite2Over ? m_Sprite2Over : m_Sprite2, rect);
|
||||
m_pGUI.DrawSprite(*m_Sprite2Over ? m_Sprite2Over : m_Sprite2, canvas, rect);
|
||||
}
|
||||
else
|
||||
m_pGUI.DrawSprite(m_Sprite2, rect);
|
||||
m_pGUI.DrawSprite(m_Sprite2, canvas, rect);
|
||||
}
|
||||
|
||||
if (m_Selected != -1) // TODO: Maybe check validity completely?
|
||||
@ -454,7 +454,7 @@ void CDropDown::Draw(CCanvas2D& UNUSED(canvas))
|
||||
m_CachedActualSize.right - m_ButtonWidth, m_CachedActualSize.bottom);
|
||||
|
||||
CVector2D pos(m_CachedActualSize.left, m_CachedActualSize.top);
|
||||
DrawText(m_Selected, m_Enabled ? m_TextColorSelected : m_TextColorDisabled, pos, cliparea);
|
||||
DrawText(canvas, m_Selected, m_Enabled ? m_TextColorSelected : m_TextColorDisabled, pos, cliparea);
|
||||
}
|
||||
|
||||
if (m_Open)
|
||||
@ -466,12 +466,12 @@ void CDropDown::Draw(CCanvas2D& UNUSED(canvas))
|
||||
if (m_HideScrollBar)
|
||||
m_ScrollBar.Set(false, false);
|
||||
|
||||
DrawList(m_ElementHighlight, m_SpriteList, m_SpriteListOverlay, m_SpriteSelectArea, m_SpriteSelectAreaOverlay, m_TextColor);
|
||||
DrawList(canvas, m_ElementHighlight, m_SpriteList, m_SpriteListOverlay, m_SpriteSelectArea, m_SpriteSelectAreaOverlay, m_TextColor);
|
||||
|
||||
if (m_HideScrollBar)
|
||||
m_ScrollBar.Set(old, false);
|
||||
}
|
||||
m_pGUI.DrawSprite(spriteOverlay, m_CachedActualSize);
|
||||
m_pGUI.DrawSprite(spriteOverlay, canvas, m_CachedActualSize);
|
||||
}
|
||||
|
||||
// When a dropdown list is opened, it needs to be visible above all the other
|
||||
|
@ -31,7 +31,7 @@ CImage::~CImage()
|
||||
{
|
||||
}
|
||||
|
||||
void CImage::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CImage::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
m_pGUI.DrawSprite(m_Sprite, m_CachedActualSize);
|
||||
m_pGUI.DrawSprite(m_Sprite, canvas, m_CachedActualSize);
|
||||
}
|
||||
|
@ -1187,7 +1187,7 @@ void CInput::UpdateCachedSize()
|
||||
m_GeneratedPlaceholderTextValid = false;
|
||||
}
|
||||
|
||||
void CInput::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CInput::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
if (m_CursorBlinkRate > 0.0)
|
||||
{
|
||||
@ -1209,7 +1209,7 @@ void CInput::Draw(CCanvas2D& UNUSED(canvas))
|
||||
if (m_Mask && m_MaskChar->length() > 0)
|
||||
mask_char = (*m_MaskChar)[0];
|
||||
|
||||
m_pGUI.DrawSprite(m_Sprite, m_CachedActualSize);
|
||||
m_pGUI.DrawSprite(m_Sprite, canvas, m_CachedActualSize);
|
||||
|
||||
float scroll = 0.f;
|
||||
if (m_ScrollBar && m_MultiLine)
|
||||
@ -1398,7 +1398,7 @@ void CInput::Draw(CCanvas2D& UNUSED(canvas))
|
||||
rect.right = m_CachedActualSize.right;
|
||||
}
|
||||
|
||||
m_pGUI.DrawSprite(m_SpriteSelectArea, rect);
|
||||
m_pGUI.DrawSprite(m_SpriteSelectArea, canvas, rect);
|
||||
}
|
||||
|
||||
if (i < (int)it->m_ListOfX.size())
|
||||
@ -1525,22 +1525,22 @@ void CInput::Draw(CCanvas2D& UNUSED(canvas))
|
||||
tech->EndPass();
|
||||
|
||||
if (m_Caption->empty() && !m_PlaceholderText->GetRawString().empty())
|
||||
DrawPlaceholderText(cliparea);
|
||||
DrawPlaceholderText(canvas, cliparea);
|
||||
|
||||
// Draw scrollbars on top of the content
|
||||
if (m_ScrollBar && m_MultiLine)
|
||||
IGUIScrollBarOwner::Draw();
|
||||
IGUIScrollBarOwner::Draw(canvas);
|
||||
|
||||
// Draw the overlays last
|
||||
m_pGUI.DrawSprite(m_SpriteOverlay, m_CachedActualSize);
|
||||
m_pGUI.DrawSprite(m_SpriteOverlay, canvas, m_CachedActualSize);
|
||||
}
|
||||
|
||||
void CInput::DrawPlaceholderText(const CRect& clipping)
|
||||
void CInput::DrawPlaceholderText(CCanvas2D& canvas, const CRect& clipping)
|
||||
{
|
||||
if (!m_GeneratedPlaceholderTextValid)
|
||||
SetupGeneratedPlaceholderText();
|
||||
|
||||
m_GeneratedPlaceholderText.Draw(m_pGUI, m_PlaceholderColor, m_CachedActualSize.TopLeft(), clipping);
|
||||
m_GeneratedPlaceholderText.Draw(m_pGUI, canvas, m_PlaceholderColor, m_CachedActualSize.TopLeft(), clipping);
|
||||
}
|
||||
|
||||
void CInput::UpdateText(int from, int to_before, int to_after)
|
||||
|
@ -112,11 +112,11 @@ protected:
|
||||
/**
|
||||
* Draws the text generated for placeholder.
|
||||
*
|
||||
* @param z Z value
|
||||
* @param canvas Canvas to draw on.
|
||||
* @param clipping Clipping rectangle, don't even add a parameter
|
||||
* to get no clipping.
|
||||
*/
|
||||
virtual void DrawPlaceholderText(const CRect& clipping = CRect());
|
||||
virtual void DrawPlaceholderText(CCanvas2D& canvas, const CRect& clipping = CRect());
|
||||
|
||||
/**
|
||||
* Delete the current selection. Also places the pointer at the
|
||||
|
@ -299,17 +299,17 @@ InReaction CList::ManuallyHandleKeys(const SDL_Event_* ev)
|
||||
return result;
|
||||
}
|
||||
|
||||
void CList::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CList::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
DrawList(m_Selected, m_Sprite, m_SpriteOverlay, m_SpriteSelectArea, m_SpriteSelectAreaOverlay, m_TextColor);
|
||||
DrawList(canvas, m_Selected, m_Sprite, m_SpriteOverlay, m_SpriteSelectArea, m_SpriteSelectAreaOverlay, m_TextColor);
|
||||
}
|
||||
|
||||
void CList::DrawList(const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
|
||||
void CList::DrawList(CCanvas2D& canvas, const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
|
||||
const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor)
|
||||
{
|
||||
CRect rect = GetListRect();
|
||||
|
||||
m_pGUI.DrawSprite(sprite, rect);
|
||||
m_pGUI.DrawSprite(sprite, canvas, rect);
|
||||
|
||||
float scroll = 0.f;
|
||||
if (m_ScrollBar)
|
||||
@ -343,7 +343,7 @@ void CList::DrawList(const int& selected, const CGUISpriteInstance& sprite, cons
|
||||
rectSel.left = GetScrollBar(0).GetOuterRect().right;
|
||||
}
|
||||
|
||||
m_pGUI.DrawSprite(spriteSelectArea, rectSel);
|
||||
m_pGUI.DrawSprite(spriteSelectArea, canvas, rectSel);
|
||||
drawSelected = true;
|
||||
}
|
||||
}
|
||||
@ -368,17 +368,17 @@ void CList::DrawList(const int& selected, const CGUISpriteInstance& sprite, cons
|
||||
cliparea.left = GetScrollBar(0).GetOuterRect().right;
|
||||
}
|
||||
|
||||
DrawText(i, textColor, rect.TopLeft() - CVector2D(0.f, scroll - m_ItemsYPositions[i]), cliparea);
|
||||
DrawText(canvas, i, textColor, rect.TopLeft() - CVector2D(0.f, scroll - m_ItemsYPositions[i]), cliparea);
|
||||
}
|
||||
|
||||
// Draw scrollbars on top of the content
|
||||
if (m_ScrollBar)
|
||||
IGUIScrollBarOwner::Draw();
|
||||
IGUIScrollBarOwner::Draw(canvas);
|
||||
|
||||
// Draw the overlays last
|
||||
m_pGUI.DrawSprite(spriteOverlay, rect);
|
||||
m_pGUI.DrawSprite(spriteOverlay, canvas, rect);
|
||||
if (drawSelected)
|
||||
m_pGUI.DrawSprite(spriteSelectAreaOverlay, rectSel);
|
||||
m_pGUI.DrawSprite(spriteSelectAreaOverlay, canvas, rectSel);
|
||||
}
|
||||
|
||||
void CList::AddItem(const CGUIString& str, const CGUIString& data)
|
||||
|
@ -106,7 +106,7 @@ protected:
|
||||
|
||||
// Extended drawing interface, this is so that classes built on the this one
|
||||
// can use other sprite names.
|
||||
virtual void DrawList(const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
|
||||
virtual void DrawList(CCanvas2D& canvas, const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
|
||||
const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor);
|
||||
|
||||
// Get the area of the list. This is so that it can easily be changed, like in CDropDown
|
||||
|
@ -280,12 +280,12 @@ void COList::AdditionalChildrenHandled()
|
||||
SetupText();
|
||||
}
|
||||
|
||||
void COList::DrawList(const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
|
||||
void COList::DrawList(CCanvas2D& canvas, const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
|
||||
const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor)
|
||||
{
|
||||
CRect rect = GetListRect();
|
||||
|
||||
m_pGUI.DrawSprite(sprite, rect);
|
||||
m_pGUI.DrawSprite(sprite, canvas, rect);
|
||||
|
||||
float scroll = 0.f;
|
||||
if (m_ScrollBar)
|
||||
@ -324,7 +324,7 @@ void COList::DrawList(const int& selected, const CGUISpriteInstance& sprite, con
|
||||
}
|
||||
|
||||
// Draw item selection
|
||||
m_pGUI.DrawSprite(spriteSelectArea, rectSel);
|
||||
m_pGUI.DrawSprite(spriteSelectArea, canvas, rectSel);
|
||||
drawSelected = true;
|
||||
}
|
||||
}
|
||||
@ -332,7 +332,7 @@ void COList::DrawList(const int& selected, const CGUISpriteInstance& sprite, con
|
||||
// Draw line above column header
|
||||
CRect rect_head(m_CachedActualSize.left, m_CachedActualSize.top, m_CachedActualSize.right,
|
||||
m_CachedActualSize.top + m_HeadingHeight);
|
||||
m_pGUI.DrawSprite(m_SpriteHeading, rect_head);
|
||||
m_pGUI.DrawSprite(m_SpriteHeading, canvas, rect_head);
|
||||
|
||||
// Draw column headers
|
||||
float xpos = 0;
|
||||
@ -369,11 +369,11 @@ void COList::DrawList(const int& selected, const CGUISpriteInstance& sprite, con
|
||||
else
|
||||
pSprite = &*m_SpriteNotSorted;
|
||||
|
||||
m_pGUI.DrawSprite(*pSprite, CRect(leftTopCorner + CVector2D(width - SORT_SPRITE_DIM, 0), leftTopCorner + CVector2D(width, SORT_SPRITE_DIM)));
|
||||
m_pGUI.DrawSprite(*pSprite, canvas, CRect(leftTopCorner + CVector2D(width - SORT_SPRITE_DIM, 0), leftTopCorner + CVector2D(width, SORT_SPRITE_DIM)));
|
||||
}
|
||||
|
||||
// Draw column header text
|
||||
DrawText(col, textColor, leftTopCorner + COLUMN_SHIFT, rect_head);
|
||||
DrawText(canvas, col, textColor, leftTopCorner + COLUMN_SHIFT, rect_head);
|
||||
xpos += width;
|
||||
++col;
|
||||
}
|
||||
@ -424,17 +424,17 @@ void COList::DrawList(const int& selected, const CGUISpriteInstance& sprite, con
|
||||
cliparea2.bottom = std::min(cliparea2.bottom, textPos.Y + rowHeight);
|
||||
|
||||
// Draw list item
|
||||
DrawText(objectsCount * (i +/*Heading*/1) + colIdx, column.m_TextColor, textPos, cliparea2);
|
||||
DrawText(canvas, objectsCount * (i +/*Heading*/1) + colIdx, column.m_TextColor, textPos, cliparea2);
|
||||
xpos += width;
|
||||
}
|
||||
}
|
||||
|
||||
// Draw scrollbars on top of the content
|
||||
if (m_ScrollBar)
|
||||
IGUIScrollBarOwner::Draw();
|
||||
IGUIScrollBarOwner::Draw(canvas);
|
||||
|
||||
// Draw the overlays last
|
||||
m_pGUI.DrawSprite(spriteOverlay, rect);
|
||||
m_pGUI.DrawSprite(spriteOverlay, canvas, rect);
|
||||
if (drawSelected)
|
||||
m_pGUI.DrawSprite(spriteSelectAreaOverlay, rectSel);
|
||||
m_pGUI.DrawSprite(spriteSelectAreaOverlay, canvas, rectSel);
|
||||
}
|
||||
|
@ -67,8 +67,9 @@ protected:
|
||||
virtual bool HandleAdditionalChildren(const XMBData& xmb, const XMBElement& child);
|
||||
virtual void AdditionalChildrenHandled();
|
||||
|
||||
void DrawList(const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
|
||||
const CGUISpriteInstance& spriteSelectarea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor);
|
||||
virtual void DrawList(
|
||||
CCanvas2D& canvas, const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
|
||||
const CGUISpriteInstance& spriteSelectarea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor);
|
||||
|
||||
virtual CRect GetListRect() const;
|
||||
|
||||
|
@ -53,12 +53,12 @@ void CProgressBar::HandleMessage(SGUIMessage& Message)
|
||||
}
|
||||
}
|
||||
|
||||
void CProgressBar::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CProgressBar::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
m_pGUI.DrawSprite(m_SpriteBackground, m_CachedActualSize);
|
||||
m_pGUI.DrawSprite(m_SpriteBackground, canvas, m_CachedActualSize);
|
||||
|
||||
// Get size of bar (notice it is drawn slightly closer, to appear above the background)
|
||||
CRect size = m_CachedActualSize;
|
||||
size.right = size.left + m_CachedActualSize.GetWidth() * (m_Progress / 100.f),
|
||||
m_pGUI.DrawSprite(m_SpriteBar, size);
|
||||
m_pGUI.DrawSprite(m_SpriteBar, canvas, size);
|
||||
}
|
||||
|
@ -102,13 +102,13 @@ void CSlider::HandleMessage(SGUIMessage& Message)
|
||||
}
|
||||
}
|
||||
|
||||
void CSlider::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CSlider::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
CRect slider_line(m_CachedActualSize);
|
||||
slider_line.left += m_ButtonSide / 2.0f;
|
||||
slider_line.right -= m_ButtonSide / 2.0f;
|
||||
m_pGUI.DrawSprite(m_SpriteBar, slider_line);
|
||||
m_pGUI.DrawSprite(m_Sprite, GetButtonRect());
|
||||
m_pGUI.DrawSprite(m_SpriteBar, canvas, slider_line);
|
||||
m_pGUI.DrawSprite(m_Sprite, canvas, GetButtonRect());
|
||||
}
|
||||
|
||||
void CSlider::UpdateValue()
|
||||
|
@ -183,9 +183,9 @@ void CText::HandleMessage(SGUIMessage& Message)
|
||||
IGUITextOwner::HandleMessage(Message);
|
||||
}
|
||||
|
||||
void CText::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CText::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
m_pGUI.DrawSprite(m_Sprite, m_CachedActualSize);
|
||||
m_pGUI.DrawSprite(m_Sprite, canvas, m_CachedActualSize);
|
||||
|
||||
float scroll = 0.f;
|
||||
if (m_ScrollBar)
|
||||
@ -213,14 +213,14 @@ void CText::Draw(CCanvas2D& UNUSED(canvas))
|
||||
const CGUIColor& color = m_Enabled ? m_TextColor : m_TextColorDisabled;
|
||||
|
||||
if (m_ScrollBar)
|
||||
DrawText(0, color, m_CachedActualSize.TopLeft() - CVector2D(0.f, scroll), cliparea);
|
||||
DrawText(canvas, 0, color, m_CachedActualSize.TopLeft() - CVector2D(0.f, scroll), cliparea);
|
||||
else
|
||||
DrawText(0, color, m_TextPos, cliparea);
|
||||
DrawText(canvas, 0, color, m_TextPos, cliparea);
|
||||
|
||||
// Draw scrollbars on top of the content
|
||||
if (m_ScrollBar)
|
||||
IGUIScrollBarOwner::Draw();
|
||||
IGUIScrollBarOwner::Draw(canvas);
|
||||
|
||||
// Draw the overlays last
|
||||
m_pGUI.DrawSprite(m_SpriteOverlay, m_CachedActualSize);
|
||||
m_pGUI.DrawSprite(m_SpriteOverlay, canvas, m_CachedActualSize);
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ void CTooltip::HandleMessage(SGUIMessage& Message)
|
||||
IGUITextOwner::HandleMessage(Message);
|
||||
}
|
||||
|
||||
void CTooltip::Draw(CCanvas2D& UNUSED(canvas))
|
||||
void CTooltip::Draw(CCanvas2D& canvas)
|
||||
{
|
||||
// Normally IGUITextOwner will handle this updating but since SetupText can modify the position
|
||||
// we need to call it now *before* we do the rest of the drawing
|
||||
@ -141,8 +141,8 @@ void CTooltip::Draw(CCanvas2D& UNUSED(canvas))
|
||||
m_GeneratedTextsValid = true;
|
||||
}
|
||||
|
||||
m_pGUI.DrawSprite(m_Sprite, m_CachedActualSize);
|
||||
DrawText(0, m_TextColor, m_CachedActualSize.TopLeft());
|
||||
m_pGUI.DrawSprite(m_Sprite, canvas, m_CachedActualSize);
|
||||
DrawText(canvas, 0, m_TextColor, m_CachedActualSize.TopLeft());
|
||||
}
|
||||
|
||||
float CTooltip::GetBufferedZ() const
|
||||
|
Loading…
Reference in New Issue
Block a user