xmake.repo/packages/n/noesis/latest/Include/NsGui/TextElement.h
2024-12-22 19:15:02 +08:00

178 lines
5.5 KiB
C++

////////////////////////////////////////////////////////////////////////////////////////////////////
// NoesisGUI - http://www.noesisengine.com
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef __GUI_TEXTELEMENT_H__
#define __GUI_TEXTELEMENT_H__
#include <NsCore/Noesis.h>
#include <NsCore/Ptr.h>
#include <NsCore/ReflectionDeclare.h>
#include <NsGui/FrameworkElement.h>
#include <NsGui/CoreApi.h>
#include <NsCore/String.h>
namespace Noesis
{
class DependencyObject;
class DependencyProperty;
class Brush;
class FontFamily;
enum FontStretch: int32_t;
enum FontStyle: int32_t;
enum FontWeight: int32_t;
struct Typography;
////////////////////////////////////////////////////////////////////////////////////////////////////
/// Defines text attached properties.
///
/// http://msdn.microsoft.com/en-us/library/system.windows.documents.textelement.aspx
////////////////////////////////////////////////////////////////////////////////////////////////////
class NS_GUI_CORE_API TextElement: public FrameworkElement
{
public:
TextElement();
virtual ~TextElement() = 0;
/// Gets or sets the Brush used to fill the background of the content area
//@{
Brush* GetBackground() const;
void SetBackground(Brush* background);
//@}
/// Gets or sets the uniform spacing between characters, in units of 1/1000 of an em
//@{
int32_t GetCharacterSpacing() const;
void SetCharacterSpacing(int32_t spacing);
//@}
/// Gets or sets the preferred top-level font family for the content of the element
//@{
FontFamily* GetFontFamily() const;
void SetFontFamily(FontFamily* family);
//@}
/// Gets or sets the font size for the content of the element
//@{
float GetFontSize() const;
void SetFontSize(float size);
//@}
/// Gets or sets the font stretct for the content of the element
//@{
FontStretch GetFontStretch() const;
void SetFontStretch(FontStretch stretch);
//@}
/// Gets or sets the font style for the content of the element
//@{
FontStyle GetFontStyle() const;
void SetFontStyle(FontStyle style);
//@}
/// Gets or sets the top-level font weight for the content of the element
//@{
FontWeight GetFontWeight() const;
void SetFontWeight(FontWeight weight);
//@}
/// Gets or sets the Brush to apply to the content of the element
//@{
Brush* GetForeground() const;
void SetForeground(Brush* foreground);
//@}
/// Gets or sets the Brush used to stroke the text
//@{
Brush* GetStroke() const;
void SetStroke(Brush* stroke);
//@}
/// Gets or sets the width (in pixels) of the text stroke
//@{
float GetStrokeThickness() const;
void SetStrokeThickness(float strokeThickness);
//@}
// As ATTACHED PROPERTIES
/// Gets or sets the preferred top-level font family for the content of the element
//@{
static FontFamily* GetFontFamily(const DependencyObject* element);
static void SetFontFamily(DependencyObject* element, FontFamily* family);
//@}
/// Gets or sets the font size for the content of the element
//@{
static float GetFontSize(const DependencyObject* element);
static void SetFontSize(DependencyObject* element, float size);
//@}
/// Gets or sets the font stretch for the content of the element
//@{
static FontStretch GetFontStretch(const DependencyObject* element);
static void SetFontStretch(DependencyObject* element, FontStretch stretch);
//@}
/// Gets or sets the font style for the content of the element
//@{
static FontStyle GetFontStyle(const DependencyObject* element);
static void SetFontStyle(DependencyObject* element, FontStyle style);
//@}
/// Gets or sets the top-level font weight for the content of the element
//@{
static FontWeight GetFontWeight(const DependencyObject* element);
static void SetFontWeight(DependencyObject* element, FontWeight weight);
//@}
/// Gets or sets the Brush to apply to the content of the element
//@{
static Brush* GetForeground(const DependencyObject* element);
static void SetForeground(DependencyObject* element, Brush* foreground);
//@}
/// Gets or sets the Brush used to stroke the text
//@{
static Brush* GetStroke(const DependencyObject* element);
static void SetStroke(DependencyObject* element, Brush* stroke);
//@}
/// Gets or sets the width (in pixels) of the text stroke
//@{
static float GetStrokeThickness(const DependencyObject* element);
static void SetStrokeThickness(DependencyObject* element, float strokeThickness);
//@}
/// Gets the currently effective typography variations for the text contents of this TextElement
/// \prop
Typography GetTypography() const;
public:
/// Dependency properties
//@{
static const DependencyProperty* BackgroundProperty;
static const DependencyProperty* CharacterSpacingProperty;
static const DependencyProperty* FontFamilyProperty;
static const DependencyProperty* FontSizeProperty;
static const DependencyProperty* FontStretchProperty;
static const DependencyProperty* FontStyleProperty;
static const DependencyProperty* FontWeightProperty;
static const DependencyProperty* ForegroundProperty;
static const DependencyProperty* StrokeProperty;
static const DependencyProperty* StrokeThicknessProperty;
//@}
NS_DECLARE_REFLECTION(TextElement, FrameworkElement)
};
}
#endif