aboutsummaryrefslogtreecommitdiff
path: root/guilib/GUITextLayout.h
diff options
context:
space:
mode:
Diffstat (limited to 'guilib/GUITextLayout.h')
-rw-r--r--guilib/GUITextLayout.h144
1 files changed, 0 insertions, 144 deletions
diff --git a/guilib/GUITextLayout.h b/guilib/GUITextLayout.h
deleted file mode 100644
index 8dfba0f209..0000000000
--- a/guilib/GUITextLayout.h
+++ /dev/null
@@ -1,144 +0,0 @@
-#pragma once
-
-/*
- * Copyright (C) 2005-2008 Team XBMC
- * http://www.xbmc.org
- *
- * This Program 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, or (at your option)
- * any later version.
- *
- * This Program 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 XBMC; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- */
-
-#include "StdString.h"
-
-#include <vector>
-
-#ifdef __GNUC__
-// under gcc, inline will only take place if optimizations are applied (-O). this will force inline even without optimizations.
-#define XBMC_FORCE_INLINE __attribute__((always_inline))
-#else
-#define XBMC_FORCE_INLINE
-#endif
-
-class CGUIFont;
-class CScrollInfo;
-
-// Process will be:
-
-// 1. String is divided up into a "multiinfo" vector via the infomanager.
-// 2. The multiinfo vector is then parsed by the infomanager at rendertime and the resultant string is constructed.
-// 3. This is saved for comparison perhaps. If the same, we are done. If not, go to 4.
-// 4. The string is then parsed into a vector<CGUIString>.
-// 5. Each item in the vector is length-calculated, and then layout occurs governed by alignment and wrapping rules.
-// 6. A new vector<CGUIString> is constructed
-
-typedef uint32_t character_t;
-typedef uint32_t color_t;
-typedef std::vector<character_t> vecText;
-typedef std::vector<color_t> vecColors;
-
-class CGUIString
-{
-public:
- typedef vecText::const_iterator iString;
-
- CGUIString(iString start, iString end, bool carriageReturn);
-
- CStdString GetAsString() const;
-
- vecText m_text;
- bool m_carriageReturn; // true if we have a carriage return here
-};
-
-class CGUITextLayout
-{
-public:
- CGUITextLayout(CGUIFont *font, bool wrap, float fHeight=0.0f, CGUIFont *borderFont = NULL); // this may need changing - we may just use this class to replace CLabelInfo completely
-
- // main function to render strings
- void Render(float x, float y, float angle, color_t color, color_t shadowColor, uint32_t alignment, float maxWidth, bool solid = false);
- void RenderScrolling(float x, float y, float angle, color_t color, color_t shadowColor, uint32_t alignment, float maxWidth, CScrollInfo &scrollInfo);
- void RenderOutline(float x, float y, color_t color, color_t outlineColor, uint32_t alignment, float maxWidth);
-
- /*! \brief Returns the precalculated width and height of the text to be rendered (in constant time).
- \param width [out] width of text
- \param height [out] height of text
- \sa GetTextWidth, CalcTextExtent
- */
- void GetTextExtent(float &width, float &height) const;
-
- /*! \brief Returns the precalculated width of the text to be rendered (in constant time).
- \return width of text
- \sa GetTextExtent, CalcTextExtent
- */
- float GetTextWidth() const { return m_textWidth; };
-
- float GetTextWidth(const CStdStringW &text) const;
- bool Update(const CStdString &text, float maxWidth = 0, bool forceUpdate = false, bool forceLTRReadingOrder = false);
- void SetText(const CStdStringW &text, float maxWidth = 0, bool forceLTRReadingOrder = false);
-
- unsigned int GetTextLength() const;
- void GetFirstText(vecText &text) const;
- void Reset();
-
- void SetWrap(bool bWrap=true);
- void SetMaxHeight(float fHeight);
-
-
- static void DrawText(CGUIFont *font, float x, float y, color_t color, color_t shadowColor, const CStdString &text, uint32_t align);
- static void Filter(CStdString &text);
-
-protected:
- void ParseText(const CStdStringW &text, vecText &parsedText);
- void LineBreakText(const vecText &text, std::vector<CGUIString> &lines);
- void WrapText(const vecText &text, float maxWidth);
- void BidiTransform(std::vector<CGUIString> &lines, bool forceLTRReadingOrder);
- CStdStringW BidiFlip(const CStdStringW &text, bool forceLTRReadingOrder);
- void CalcTextExtent();
-
- // our text to render
- vecColors m_colors;
- std::vector<CGUIString> m_lines;
- typedef std::vector<CGUIString>::iterator iLine;
-
- // the layout and font details
- CGUIFont *m_font; // has style, colour info
- CGUIFont *m_borderFont; // only used for outlined text
-
- bool m_wrap; // wrapping (true if justify is enabled!)
- float m_maxHeight;
- // the default color (may differ from the font objects defaults)
- color_t m_textColor;
-
- CStdString m_lastText;
- float m_textWidth;
- float m_textHeight;
-private:
- inline bool IsSpace(character_t letter) const XBMC_FORCE_INLINE
- {
- return (letter & 0xffff) == L' ';
- };
- inline bool CanWrapAtLetter(character_t letter) const XBMC_FORCE_INLINE
- {
- character_t ch = letter & 0xffff;
- return ch == L' ' || (ch >=0x4e00 && ch <= 0x9fff);
- };
- static void AppendToUTF32(const CStdString &utf8, character_t colStyle, vecText &utf32);
- static void AppendToUTF32(const CStdStringW &utf16, character_t colStyle, vecText &utf32);
- static void ParseText(const CStdStringW &text, uint32_t defaultStyle, vecColors &colors, vecText &parsedText);
-
- static void utf8ToW(const CStdString &utf8, CStdStringW &utf16);
-};
-