346 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			346 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __GUI_TEXTBLOCK_H__
							 | 
						||
| 
								 | 
							
								#define __GUI_TEXTBLOCK_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/ReflectionDeclareEnum.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Vector.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/FrameworkElement.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FormattedText;
							 | 
						||
| 
								 | 
							
								class Brush;
							 | 
						||
| 
								 | 
							
								class FontFamily;
							 | 
						||
| 
								 | 
							
								class Inline;
							 | 
						||
| 
								 | 
							
								class RectangleGeometry;
							 | 
						||
| 
								 | 
							
								enum LineStackingStrategy: int32_t;
							 | 
						||
| 
								 | 
							
								enum FontStretch: int32_t;
							 | 
						||
| 
								 | 
							
								enum FontStyle: int32_t;
							 | 
						||
| 
								 | 
							
								enum FontWeight: int32_t;
							 | 
						||
| 
								 | 
							
								enum TextAlignment: int32_t;
							 | 
						||
| 
								 | 
							
								enum TextTrimming: int32_t;
							 | 
						||
| 
								 | 
							
								enum TextWrapping: int32_t;
							 | 
						||
| 
								 | 
							
								struct Typography;
							 | 
						||
| 
								 | 
							
								struct NotifyCollectionChangedEventArgs;
							 | 
						||
| 
								 | 
							
								struct Uri;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<class T> class UICollection;
							 | 
						||
| 
								 | 
							
								typedef UICollection<Inline> InlineCollection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_PUSH
							 | 
						||
| 
								 | 
							
								NS_MSVC_WARNING_DISABLE(4251 4275)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Provides a lightweight control for displaying small amounts of text content.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// A TextBlock can contain a string in its *Text* property or *Inline* flow content elements, such
							 | 
						||
| 
								 | 
							
								/// as Bold, Hyperlink, and InlineUIContainer, in its *Inlines* property.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// TextBlock is designed to be lightweight, and is geared specifically at integrating small
							 | 
						||
| 
								 | 
							
								/// portions of flow content into a user interface (UI). TextBlock is optimized for single-line
							 | 
						||
| 
								 | 
							
								/// display, and provides good performance for displaying up to a few lines of content.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// Horizontally aligning text within a TextBlock is done with the *TextAlignment* property.
							 | 
						||
| 
								 | 
							
								/// Aligning the TextBlock within the layout of the page is done with the *HorizontalAlignment* and
							 | 
						||
| 
								 | 
							
								/// *VerticalAlignment* properties.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// .. code-block:: xml
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								///    <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
							 | 
						||
| 
								 | 
							
								///      <StackPanel>
							 | 
						||
| 
								 | 
							
								///        <TextBlock TextWrapping="Wrap">
							 | 
						||
| 
								 | 
							
								///          <Bold>TextBlock</Bold> is designed to be <Italic>lightweight</Italic>,
							 | 
						||
| 
								 | 
							
								///          and is geared specifically at integrating <Italic>small</Italic> portions
							 | 
						||
| 
								 | 
							
								///          of flow content into a UI.
							 | 
						||
| 
								 | 
							
								///        </TextBlock>
							 | 
						||
| 
								 | 
							
								///        <Button Width="100" Margin="10">Click Me</Button>
							 | 
						||
| 
								 | 
							
								///        <TextBlock TextWrapping="Wrap" Background="DarkSalmon" TextAlignment="Center">
							 | 
						||
| 
								 | 
							
								///          By default, a TextBlock provides no UI beyond simply displaying its contents.
							 | 
						||
| 
								 | 
							
								///        </TextBlock>
							 | 
						||
| 
								 | 
							
								///        <Button Width="100" Margin="10">Click Me</Button>
							 | 
						||
| 
								 | 
							
								///      </StackPanel>
							 | 
						||
| 
								 | 
							
								///    </Page>
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.aspx
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								class NS_GUI_CORE_API TextBlock: public FrameworkElement
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    /// Default constructor
							 | 
						||
| 
								 | 
							
								    TextBlock();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Constructor
							 | 
						||
| 
								 | 
							
								    TextBlock(const char* text);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Destructor
							 | 
						||
| 
								 | 
							
								    ~TextBlock();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the Brush used to fill the background of content area.
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Brush* GetBackground() const;
							 | 
						||
| 
								 | 
							
								    void SetBackground(Brush* brush);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// 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 TextBlock.
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    FontFamily* GetFontFamily() const;
							 | 
						||
| 
								 | 
							
								    void SetFontFamily(FontFamily* fontFamily);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the top-level font size for the TextBlock.
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetFontSize() const;
							 | 
						||
| 
								 | 
							
								    void SetFontSize(float size);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the top-level font stretch for the TextBlock.
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    FontStretch GetFontStretch() const;
							 | 
						||
| 
								 | 
							
								    void SetFontStretch(FontStretch stretch);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the top-level font style for the TextBlock.
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    FontStyle GetFontStyle() const;
							 | 
						||
| 
								 | 
							
								    void SetFontStyle(FontStyle style);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the top-level font weight for the TextBlock.
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    FontWeight GetFontWeight() const;
							 | 
						||
| 
								 | 
							
								    void SetFontWeight(FontWeight weight);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the Brush to apply to the text contents of the TextBlock.
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    Brush* GetForeground() const;
							 | 
						||
| 
								 | 
							
								    void SetForeground(Brush* foreground);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets an InlineCollection containing the top-level Inline elements that comprise the
							 | 
						||
| 
								 | 
							
								    /// contents of the TextBlock
							 | 
						||
| 
								 | 
							
								    InlineCollection* GetInlines() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Indicates if this TextBlock contains any inlines (avoids creating Inlines if not needed)
							 | 
						||
| 
								 | 
							
								    bool HasInlines() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the height of each line of content
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    float GetLineHeight() const;
							 | 
						||
| 
								 | 
							
								    void SetLineHeight(float value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the mechanism by which a line box is determined for each line of text
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    LineStackingStrategy GetLineStackingStrategy() const;
							 | 
						||
| 
								 | 
							
								    void SetLineStackingStrategy(LineStackingStrategy value);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the padding inside a control
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    const Thickness& GetPadding() const;
							 | 
						||
| 
								 | 
							
								    void SetPadding(const Thickness& padding);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// 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);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets text alignment
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    TextAlignment GetTextAlignment() const;
							 | 
						||
| 
								 | 
							
								    void SetTextAlignment(TextAlignment align);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the text decoration to apply to the text
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    TextDecorations GetTextDecorations() const;
							 | 
						||
| 
								 | 
							
								    void SetTextDecorations(TextDecorations decorations);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets text string
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    const char* GetText() const;
							 | 
						||
| 
								 | 
							
								    void SetText(const char* text);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets the text trimming behavior to employ when content overflows the content area
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    TextTrimming GetTextTrimming() const;
							 | 
						||
| 
								 | 
							
								    void SetTextTrimming(TextTrimming trimming);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets or sets text wrapping
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    TextWrapping GetTextWrapping() const;
							 | 
						||
| 
								 | 
							
								    void SetTextWrapping(TextWrapping textWrap);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Indicates if first inline is generated from Text property
							 | 
						||
| 
								 | 
							
								    /// \prop
							 | 
						||
| 
								 | 
							
								    bool FirstInlineIsFromText() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Gets the currently effective typography variations for the text contents of this TextBlock
							 | 
						||
| 
								 | 
							
								    /// \prop
							 | 
						||
| 
								 | 
							
								    Typography GetTypography() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns the object used to layout and render text for this TextBlock
							 | 
						||
| 
								 | 
							
								    FormattedText* GetFormattedText() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From BaseObject
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    String ToString() const override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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* LineHeightProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* LineStackingStrategyProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* PaddingProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* StrokeProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* StrokeThicknessProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TextAlignmentProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TextDecorationsProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TextProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TextTrimmingProperty;
							 | 
						||
| 
								 | 
							
								    static const DependencyProperty* TextWrappingProperty;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    /// From DependencyObject
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void OnPostInit() override;
							 | 
						||
| 
								 | 
							
								    bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& args) override;
							 | 
						||
| 
								 | 
							
								    int32_t OnDestroy() override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From Visual
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void OnConnectToViewChildren() override;
							 | 
						||
| 
								 | 
							
								    void OnDisconnectFromViewChildren() override;
							 | 
						||
| 
								 | 
							
								    uint32_t GetVisualChildrenCount() const override;
							 | 
						||
| 
								 | 
							
								    Visual* GetVisualChild(uint32_t index) const override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From UIElement
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void OnRender(DrawingContext* context) override;
							 | 
						||
| 
								 | 
							
								    HitTestResult HitTestCore(const Point& point) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// From FrameworkElement
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    void CloneOverride(FrameworkElement* clone, FrameworkTemplate* template_) const override;
							 | 
						||
| 
								 | 
							
								    uint32_t GetLogicalChildrenCount() const override;
							 | 
						||
| 
								 | 
							
								    Ptr<BaseComponent> GetLogicalChild(uint32_t index) const override;
							 | 
						||
| 
								 | 
							
								    Size MeasureOverride(const Size& availableSize) override;
							 | 
						||
| 
								 | 
							
								    Size ArrangeOverride(const Size& finalSize) override;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    void UpdateTypography();
							 | 
						||
| 
								 | 
							
								    void UpdateTextRuns();
							 | 
						||
| 
								 | 
							
								    void UpdateTextLayout(const Size& finalSize);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void InvalidateTypography();
							 | 
						||
| 
								 | 
							
								    void InvalidateTextMeasure();
							 | 
						||
| 
								 | 
							
								    void InvalidateTextRuns();
							 | 
						||
| 
								 | 
							
								    void InvalidateTextLayout();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void OnTextChanged(const char* newText);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void OnInlinesChanged(BaseComponent* sender,
							 | 
						||
| 
								 | 
							
								        const NotifyCollectionChangedEventArgs& args);
							 | 
						||
| 
								 | 
							
								    void OnInnerInlinesChanged(BaseComponent* sender,
							 | 
						||
| 
								 | 
							
								        const NotifyCollectionChangedEventArgs& args);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void ConnectInlines();
							 | 
						||
| 
								 | 
							
								    void ConnectInlinesToView();
							 | 
						||
| 
								 | 
							
								    void DisconnectInlineContainers();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void BuildInlinesInfo();
							 | 
						||
| 
								 | 
							
								    void BuildInlinesInfo(InlineCollection* inlines, BaseString& text);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void RegisterInlines(InlineCollection* inlines);
							 | 
						||
| 
								 | 
							
								    void UnregisterInlines(InlineCollection* inlines, bool removeLogical);
							 | 
						||
| 
								 | 
							
								    void RegisterInline(Inline* inline_);
							 | 
						||
| 
								 | 
							
								    void UnregisterInline(Inline* inline_);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void RegisterInnerInlines(InlineCollection* inlines);
							 | 
						||
| 
								 | 
							
								    void UnregisterInnerInlines(InlineCollection* inlines);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void OnInlineChanged(BaseComponent* sender, const DependencyPropertyChangedEventArgs& e);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void EnsureInlines();
							 | 
						||
| 
								 | 
							
								    void EnsureFormattedText();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    struct InlineInfo;
							 | 
						||
| 
								 | 
							
								    const InlineInfo* FindInline(uint32_t position) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    static void OnFontChanged(const Uri&, const char*, FontWeight, FontStretch, FontStyle);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    friend struct Typography;
							 | 
						||
| 
								 | 
							
								    friend class TextContainer;
							 | 
						||
| 
								 | 
							
								    friend class InlineUIContainer;
							 | 
						||
| 
								 | 
							
								    friend class TextBlockTest;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Ptr<InlineCollection> mInlines;
							 | 
						||
| 
								 | 
							
								    Ptr<RectangleGeometry> mBackgroundGeometry;
							 | 
						||
| 
								 | 
							
								    Ptr<FormattedText> mFormattedText;
							 | 
						||
| 
								 | 
							
								    Size mPreviousConstraint;
							 | 
						||
| 
								 | 
							
								    uint32_t mTextFlags;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    struct InlineInfo
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        uint32_t start;
							 | 
						||
| 
								 | 
							
								        uint32_t end;
							 | 
						||
| 
								 | 
							
								        Inline* inl;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef Vector<InlineInfo> InlineInfoList;
							 | 
						||
| 
								 | 
							
								    InlineInfoList mInlineInfo;
							 | 
						||
| 
								 | 
							
								    Vector<uint32_t> mInlineContainers;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    NS_DECLARE_REFLECTION(TextBlock, FrameworkElement)
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_WARNING_POP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |