From 205aefe12fc232f828f21a4f79da81c7c7d2a68c Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Fri, 8 Jun 2012 22:15:58 -0300 Subject: [PATCH] add missing file --- src/framework/graphics/cachedtext.cpp | 60 +++++++++++++++++++++++++++ src/framework/graphics/cachedtext.h | 58 ++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 src/framework/graphics/cachedtext.cpp create mode 100644 src/framework/graphics/cachedtext.h diff --git a/src/framework/graphics/cachedtext.cpp b/src/framework/graphics/cachedtext.cpp new file mode 100644 index 00000000..0d69534c --- /dev/null +++ b/src/framework/graphics/cachedtext.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2010-2012 OTClient + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "cachedtext.h" +#include "painter.h" +#include "fontmanager.h" +#include "font.h" + +CachedText::CachedText() +{ + m_font = g_fonts.getDefaultFont(); + m_align = Fw::AlignCenter; +} + +void CachedText::draw(const Rect& rect) +{ + if(!m_font) + return; + + if(m_textMustRecache || m_textCachedScreenCoords != rect) { + m_textMustRecache = false; + m_textCachedScreenCoords = rect; + + m_textCoordsBuffer.clear(); + m_font->calculateDrawTextCoords(m_textCoordsBuffer, m_text, rect, Fw::AlignCenter); + } + g_painter->drawTextureCoords(m_textCoordsBuffer, m_font->getTexture()); +} + +void CachedText::update() +{ + if(m_font) + m_textSize = m_font->calculateTextRectSize(m_text); + m_textMustRecache = true; +} + +void CachedText::wrapText(int maxWidth) +{ + if(m_font) + m_text = m_font->wrapText(m_text, maxWidth); +} diff --git a/src/framework/graphics/cachedtext.h b/src/framework/graphics/cachedtext.h new file mode 100644 index 00000000..cd0b4b91 --- /dev/null +++ b/src/framework/graphics/cachedtext.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2010-2012 OTClient + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef CACHEDTEXT_H +#define CACHEDTEXT_H + +#include "declarations.h" +#include "coordsbuffer.h" + +class CachedText +{ +public: + CachedText(); + + void draw(const Rect& rect); + + void wrapText(int maxWidth); + void setFont(const FontPtr& font) { m_font = font; update(); } + void setText(const std::string& text) { m_text = text; update(); } + void setAlign(Fw::AlignmentFlag align) { m_align = align; update(); } + + Size getTextSize() { return m_textSize; } + std::string getText() { return m_text; } + FontPtr getFont() { return m_font; } + Fw::AlignmentFlag getAlign() { return m_align; } + +private: + void update(); + + std::string m_text; + Size m_textSize; + Boolean m_textMustRecache; + CoordsBuffer m_textCoordsBuffer; + Rect m_textCachedScreenCoords; + FontPtr m_font; + Fw::AlignmentFlag m_align; +}; + +#endif