221 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
		
		
			
		
	
	
			221 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
|  | // Copyright (c) 2016-2018 Easy2D - 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 easy2d | |||
|  | { | |||
|  | 	// <20>ı<EFBFBD>
 | |||
|  | 	class E2D_API Text | |||
|  | 		: public VisualNode | |||
|  | 	{ | |||
|  | 	public: | |||
|  | 		Text(); | |||
|  | 
 | |||
|  | 		explicit Text( | |||
|  | 			String const& text		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 		); | |||
|  | 
 | |||
|  | 		explicit Text( | |||
|  | 			String const& text,		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 			const Font& font		/* <20><><EFBFBD><EFBFBD> */ | |||
|  | 		); | |||
|  | 
 | |||
|  | 		explicit Text( | |||
|  | 			String const& text,		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 			const TextStyle& style	/* <20>ı<EFBFBD><C4B1><EFBFBD>ʽ */ | |||
|  | 		); | |||
|  | 
 | |||
|  | 		explicit Text( | |||
|  | 			String const& text,		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 			const Font& font,		/* <20><><EFBFBD><EFBFBD> */ | |||
|  | 			const TextStyle& style	/* <20>ı<EFBFBD><C4B1><EFBFBD>ʽ */ | |||
|  | 		); | |||
|  | 
 | |||
|  | 		virtual ~Text(); | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD>ı<EFBFBD>
 | |||
|  | 		String const& GetText() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
 | |||
|  | 		const Font& GetFont() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ʽ
 | |||
|  | 		const TextStyle& GetStyle() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 		String const& GetFontFamily() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD>ֺ<EFBFBD>
 | |||
|  | 		float GetFontSize() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸֵ
 | |||
|  | 		unsigned int GetFontWeight() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
 | |||
|  | 		const Color& GetColor() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
 | |||
|  | 		const Color& GetOutlineColor() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD>
 | |||
|  | 		float GetOutlineWidth() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ཻ<EFBFBD><E0BDBB>ʽ
 | |||
|  | 		StrokeStyle GetOutlineStroke() const; | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
 | |||
|  | 		int GetLineCount(); | |||
|  | 
 | |||
|  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ֲ<EFBFBD><D6B2>ִ<EFBFBD>С
 | |||
|  | 		Size const& GetLayoutSize() const; | |||
|  | 
 | |||
|  | 		// <20>Ƿ<EFBFBD><C7B7><EFBFBD>б<EFBFBD><D0B1>
 | |||
|  | 		bool IsItalic() const; | |||
|  | 
 | |||
|  | 		// <20>Ƿ<EFBFBD><C7B7><EFBFBD>ʾɾ<CABE><C9BE><EFBFBD><EFBFBD>
 | |||
|  | 		bool HasStrikethrough() const; | |||
|  | 
 | |||
|  | 		// <20>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD>»<EFBFBD><C2BB><EFBFBD>
 | |||
|  | 		bool HasUnderline() const; | |||
|  | 
 | |||
|  | 		// <20>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
 | |||
|  | 		bool HasOutline() const; | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
 | |||
|  | 		void SetText( | |||
|  | 			String const& text | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ʽ
 | |||
|  | 		void SetStyle( | |||
|  | 			const TextStyle& style | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 		void SetFont( | |||
|  | 			const Font& font | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 		void SetFontFamily( | |||
|  | 			String const& family | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>ֺţ<D6BA>Ĭ<EFBFBD><C4AC>ֵΪ 18<31><38>
 | |||
|  | 		void SetFontSize( | |||
|  | 			float size | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸֵ<CFB8><D6B5>Ĭ<EFBFBD><C4AC>ֵΪ FontWeight::Normal<61><6C>
 | |||
|  | 		void SetFontWeight( | |||
|  | 			unsigned int weight | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>Ĭ<EFBFBD><C4AC>ֵΪ Color::White<74><65>
 | |||
|  | 		void SetColor( | |||
|  | 			Color const& color | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>壨Ĭ<E5A3A8><C4AC>ֵΪ false<73><65>
 | |||
|  | 		void SetItalic( | |||
|  | 			bool val | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><EFBFBD><F2BFAABB>ر<EFBFBD><D8B1>ı<EFBFBD><C4B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>У<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD>رգ<D8B1>
 | |||
|  | 		void SetWrapEnabled( | |||
|  | 			bool wrap | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>еĿ<D0B5><C4BF>ȣ<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ 0<><30>
 | |||
|  | 		void SetWrapWidth( | |||
|  | 			float wrap_width | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>ࣨĬ<E0A3A8><C4AC>Ϊ 0<><30>
 | |||
|  | 		void SetLineacingPtr( | |||
|  | 			float line_spacing | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD>ö<EFBFBD><C3B6>뷽ʽ<EBB7BD><CABD>Ĭ<EFBFBD><C4AC>Ϊ TextAlign::Left<66><74>
 | |||
|  | 		void SetAlignment( | |||
|  | 			TextAlign align | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB>ߣ<EFBFBD>Ĭ<EFBFBD><C4AC>ֵΪ false<73><65>
 | |||
|  | 		void SetUnderline( | |||
|  | 			bool underline | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ߣ<EFBFBD>Ĭ<EFBFBD><C4AC>ֵΪ false<73><65>
 | |||
|  | 		void SetStrikethrough( | |||
|  | 			bool strikethrough | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
 | |||
|  | 		void SetOutline( | |||
|  | 			bool outline | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
 | |||
|  | 		void SetOutlineColor( | |||
|  | 			Color const& outline_color | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD>
 | |||
|  | 		void SetOutlineWidth( | |||
|  | 			float outline_width | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ཻ<EFBFBD><E0BDBB>ʽ
 | |||
|  | 		void SetOutlineStroke( | |||
|  | 			StrokeStyle outline_stroke | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 		static void SetDefaultFont( | |||
|  | 			Font const& font | |||
|  | 		); | |||
|  | 
 | |||
|  | 		// <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
 | |||
|  | 		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_; | |||
|  | 	}; | |||
|  | } |