// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
/*
* Copyright (C) 2010-2012 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* 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 this program. If not, see .
*
* Authored by: Jay Taoko
* Authored by: Mirco Müller
*/
#ifndef UNITYSHARED_STATICCAIROTEXT_H
#define UNITYSHARED_STATICCAIROTEXT_H
#include
#include
#include
#include
#include "unity-shared/Introspectable.h"
namespace unity
{
class Validator;
class StaticCairoText : public nux::View, public unity::debug::Introspectable
{
NUX_DECLARE_OBJECT_TYPE (StaticCairoText, nux::View);
public:
enum EllipsizeState
{
NUX_ELLIPSIZE_END,
NUX_ELLIPSIZE_START,
NUX_ELLIPSIZE_MIDDLE,
NUX_ELLIPSIZE_NONE,
};
enum AlignState
{
NUX_ALIGN_LEFT,
NUX_ALIGN_CENTRE,
NUX_ALIGN_RIGHT,
NUX_ALIGN_TOP = NUX_ALIGN_LEFT,
NUX_ALIGN_BOTTOM = NUX_ALIGN_RIGHT
};
enum UnderlineState
{
NUX_UNDERLINE_NONE,
NUX_UNDERLINE_SINGLE,
NUX_UNDERLINE_DOUBLE,
NUX_UNDERLINE_LOW
};
StaticCairoText(std::string const& text, NUX_FILE_LINE_PROTO);
StaticCairoText(std::string const& text, bool escape_text, NUX_FILE_LINE_PROTO);
~StaticCairoText();
void PreLayoutManagement();
long PostLayoutManagement(long layoutResult);
void Draw(nux::GraphicsEngine& gfxContext,
bool forceDraw);
void DrawContent(nux::GraphicsEngine& gfxContext,
bool forceDraw);
// public API
void SetText(std::string const& text, bool escape_text = false);
void SetTextAlpha(unsigned int alpha);
void SetTextColor(nux::Color const& textColor);
void SetTextEllipsize(EllipsizeState state);
void SetTextAlignment(AlignState state);
void SetTextVerticalAlignment(AlignState state);
void SetFont(std::string const& font);
void SetFontSize(int);
void SetFontWeight(PangoWeight);
std::string GetFont();
void SetUnderline(UnderlineState underline);
void SetLines(int maximum_lines);
void SetLineSpacing(float line_spacing);
std::string GetText() const;
nux::Color GetTextColor() const;
int GetLineCount() const;
int GetBaseline() const;
void GetTextExtents(int& width, int& height) const;
nux::Size GetTextExtents() const;
void SetScale(double);
double GetScale() const;
sigc::signal sigTextChanged;
sigc::signal sigTextColorChanged;
sigc::signal sigFontChanged;
void SetAcceptKeyNavFocus(bool accept);
void SetMaximumSize(int w, int h);
void SetMaximumWidth(int w);
static std::string GetEscapedText(std::string const& text);
protected:
// Key navigation
virtual bool AcceptKeyNavFocus();
std::vector GetTextureStartIndices();
std::vector GetTextureEndIndices();
// From debug::Introspectable
std::string GetName() const;
void AddProperties(debug::IntrospectionData&);
private:
struct Impl;
Impl* pimpl;
};
}
#endif // STATICCAIROTEXT_H