221 lines
4.3 KiB
C++
221 lines
4.3 KiB
C++
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||
//
|
||
// 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.
|
||
|
||
#pragma once
|
||
#include "Node.h"
|
||
#include "Font.hpp"
|
||
#include "TextStyle.hpp"
|
||
#include <dwrite.h>
|
||
|
||
namespace kiwano
|
||
{
|
||
// 文本
|
||
class KGE_API Text
|
||
: public VisualNode
|
||
{
|
||
public:
|
||
Text();
|
||
|
||
explicit Text(
|
||
String const& text /* 文字内容 */
|
||
);
|
||
|
||
explicit Text(
|
||
String const& text, /* 文字内容 */
|
||
const Font& font /* 字体 */
|
||
);
|
||
|
||
explicit Text(
|
||
String const& text, /* 文字内容 */
|
||
const TextStyle& style /* 文本样式 */
|
||
);
|
||
|
||
explicit Text(
|
||
String const& text, /* 文字内容 */
|
||
const Font& font, /* 字体 */
|
||
const TextStyle& style /* 文本样式 */
|
||
);
|
||
|
||
virtual ~Text();
|
||
|
||
// 获取文本
|
||
String const& GetText() const;
|
||
|
||
// 获取字体
|
||
const Font& GetFont() const;
|
||
|
||
// 获取文本样式
|
||
const TextStyle& GetStyle() const;
|
||
|
||
// 获取字体族
|
||
String const& GetFontFamily() const;
|
||
|
||
// 获取当前字号
|
||
float GetFontSize() const;
|
||
|
||
// 获取当前字体粗细值
|
||
unsigned int GetFontWeight() const;
|
||
|
||
// 获取文字颜色
|
||
const Color& GetColor() const;
|
||
|
||
// 获取描边颜色
|
||
const Color& GetOutlineColor() const;
|
||
|
||
// 获取描边线宽
|
||
float GetOutlineWidth() const;
|
||
|
||
// 获取描边线相交样式
|
||
StrokeStyle GetOutlineStroke() const;
|
||
|
||
// 获取文本显示行数
|
||
int GetLineCount();
|
||
|
||
// 获取文字布局大小
|
||
Size const& GetLayoutSize() const;
|
||
|
||
// 是否是斜体
|
||
bool IsItalic() const;
|
||
|
||
// 是否显示删除线
|
||
bool HasStrikethrough() const;
|
||
|
||
// 是否显示下划线
|
||
bool HasUnderline() const;
|
||
|
||
// 是否显示描边
|
||
bool HasOutline() const;
|
||
|
||
// 设置文本
|
||
void SetText(
|
||
String const& text
|
||
);
|
||
|
||
// 设置文本样式
|
||
void SetStyle(
|
||
const TextStyle& style
|
||
);
|
||
|
||
// 设置字体
|
||
void SetFont(
|
||
const Font& font
|
||
);
|
||
|
||
// 设置字体族
|
||
void SetFontFamily(
|
||
String const& family
|
||
);
|
||
|
||
// 设置字号(默认值为 18)
|
||
void SetFontSize(
|
||
float size
|
||
);
|
||
|
||
// 设置字体粗细值(默认值为 FontWeight::Normal)
|
||
void SetFontWeight(
|
||
unsigned int weight
|
||
);
|
||
|
||
// 设置文字颜色(默认值为 Color::White)
|
||
void SetColor(
|
||
Color const& color
|
||
);
|
||
|
||
// 设置文字斜体(默认值为 false)
|
||
void SetItalic(
|
||
bool val
|
||
);
|
||
|
||
// 打开或关闭文本自动换行(默认为关闭)
|
||
void SetWrapEnabled(
|
||
bool wrap
|
||
);
|
||
|
||
// 设置文本自动换行的宽度(默认为 0)
|
||
void SetWrapWidth(
|
||
float wrap_width
|
||
);
|
||
|
||
// 设置行间距(默认为 0)
|
||
void SetLineacingPtr(
|
||
float line_spacing
|
||
);
|
||
|
||
// 设置对齐方式(默认为 TextAlign::Left)
|
||
void SetAlignment(
|
||
TextAlign align
|
||
);
|
||
|
||
// 设置下划线(默认值为 false)
|
||
void SetUnderline(
|
||
bool underline
|
||
);
|
||
|
||
// 设置删除线(默认值为 false)
|
||
void SetStrikethrough(
|
||
bool strikethrough
|
||
);
|
||
|
||
// 设置是否显示描边
|
||
void SetOutline(
|
||
bool outline
|
||
);
|
||
|
||
// 设置描边颜色
|
||
void SetOutlineColor(
|
||
Color const& outline_color
|
||
);
|
||
|
||
// 设置描边线宽
|
||
void SetOutlineWidth(
|
||
float outline_width
|
||
);
|
||
|
||
// 设置描边线相交样式
|
||
void SetOutlineStroke(
|
||
StrokeStyle outline_stroke
|
||
);
|
||
|
||
// 设置默认字体
|
||
static void SetDefaultFont(
|
||
Font const& font
|
||
);
|
||
|
||
// 设置默认文字样式
|
||
static void SetDefaultStyle(
|
||
TextStyle const& style
|
||
);
|
||
|
||
void OnRender() override;
|
||
|
||
protected:
|
||
void UpdateLayout() const;
|
||
|
||
protected:
|
||
String text_;
|
||
Font font_;
|
||
TextStyle style_;
|
||
|
||
mutable bool layout_dirty_;
|
||
mutable Size layout_size_;
|
||
mutable ComPtr<IDWriteTextFormat> text_format_;
|
||
mutable ComPtr<IDWriteTextLayout> text_layout_;
|
||
};
|
||
} |