From b42a09fce1843cab4b943e6377d1b165839eb9d7 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Thu, 1 Oct 2015 11:01:33 +0200 Subject: [PATCH] Semi-working number frame --- include/GUI/NumberFrame.h | 118 ++++++++++++++++++++++++++------------ 1 file changed, 80 insertions(+), 38 deletions(-) diff --git a/include/GUI/NumberFrame.h b/include/GUI/NumberFrame.h index ac51aed..dae825d 100644 --- a/include/GUI/NumberFrame.h +++ b/include/GUI/NumberFrame.h @@ -1,6 +1,8 @@ #ifndef GUI_NUMBERFRAME_H__ #define GUI_NUMBERFRAME_H__ +#include + #include "GUI/TextureFrame.h" namespace dd @@ -26,20 +28,20 @@ public: m_NumberTextures[9] = "Textures/GUI/Numbers/N9.png"; // Create number frame if missing - for (int i = 0; i < 10; i++) { - auto frame = new GUI::TextureFrame(this, "NumberFrameDigit"); - frame->SetTexture(m_NumberTextures[0]); - frame->DisableScissor(); - // Position frame based on alignment - if (i > 0) { - frame->X = i * 20; - } - Width += frame->Width; - if (Height < frame->Height) { - Height = frame->Height; - } - m_NumberFrames.push_front(frame); - } +// for (int i = 0; i < 10; i++) { +// auto frame = new GUI::TextureFrame(this, "NumberFrameDigit"); +// frame->SetTexture(m_NumberTextures[0]); +// frame->DisableScissor(); +// // Position frame based on alignment +// if (i > 0) { +// frame->SetLeft(m_NumberFrames[0]->Right()); +// } +// Width += frame->Width; +// if (Height < frame->Height) { +// Height = frame->Height; +// } +// m_NumberFrames.push_front(frame); +// } SetNumber(0); } @@ -50,41 +52,80 @@ public: m_Number = number; // Clear number textures - //for (auto& frame : m_NumberFrames) { - // frame->SetTexture(""); - //} + for (auto& frame : m_NumberFrames) { + frame->SetTexture(""); + } - //Width = 0; - //Height = 0; + Width = 0; + Height = 0; + + std::string digits = std::to_string(number); + + Width = 0; + Height = 0; + + std::string digits = std::to_string(number); + + + int i = 0; + for (char& c : digits) { + // Create number frame if missing + if (i >= m_NumberFrames.size()) { + auto frame = new GUI::TextureFrame(this, "NumberFrameDigit"); + if (i > 0) { + frame->SetLeft(m_NumberFrames[i - 1]->Right()); + } + frame->DisableScissor(); + m_NumberFrames.push_back(frame); + } + + // Update value + std::string texture = "Textures/Core/ErrorTexture.png"; + if (m_CharacterTextures.find(c) != m_CharacterTextures.end()) { + texture = m_CharacterTextures.at(c); + } + m_NumberFrames[i]->SetTexture(m_CharacterTextures.at(c)); + Width += m_NumberFrames[i]->Width; + if (Height < m_NumberFrames[i]->Height) { + Height = m_NumberFrames[i]->Height; + } + + i++; + } int n = 0; do { -// // Create number frame if missing -// if (m_NumberFrames.size() <= n) { -// auto frame = new GUI::TextureFrame(this, "NumberFrameDigit"); -// frame->DisableScissor(); -// m_NumberFrames.push_front(frame); -// } + // Create number frame if missing + if (m_NumberFrames.size() <= n) { + auto frame = new GUI::TextureFrame(this, "NumberFrameDigit"); + frame->DisableScissor(); + m_NumberFrames.push_back(frame); + } + + int digit = number % 10; // Update value - int digit = number % 10; m_NumberFrames[n]->SetTexture(m_NumberTextures[digit]); - //Width += m_NumberFrames[n]->Width; - //if (Height < m_NumberFrames[n]->Height) { - // Height = m_NumberFrames[n]->Height; - //} -// // Position frame based on alignment -// if (n > 0) { -// if (!m_LeftAligned) { -// m_NumberFrames[n]->SetLeft(m_NumberFrames[n - 1]->Right()); -// } else { -// m_NumberFrames[n]->SetRight(m_NumberFrames[n - 1]->Left()); -// } -// } + Width += m_NumberFrames[n]->Width; + if (Height < m_NumberFrames[n]->Height) { + Height = m_NumberFrames[n]->Height; + } + // Position frame based on alignment + if (n > 0) { + if (m_LeftAligned) { + m_NumberFrames[n]->SetLeft(m_NumberFrames[n - 1]->Right()); + } else { + m_NumberFrames[n]->SetRight(m_NumberFrames[n - 1]->Left()); + } + } + + ss << digit; number /= 10; n++; } while (number > 0); + + LOG_DEBUG("Number: %s", ss.str().c_str()); } void SetLeftAlign() { m_LeftAligned = true; } @@ -100,6 +141,7 @@ private: bool m_LeftAligned = true; std::string m_NumberTextures[10]; + std::unordered_map m_CharacterTextures; std::deque m_NumberFrames; };