cascade opacity supported
This commit is contained in:
		
							parent
							
								
									3c63ca3965
								
							
						
					
					
						commit
						331ec42523
					
				|  | @ -46,12 +46,13 @@ namespace kiwano | ||||||
| 		, responsible_(false) | 		, responsible_(false) | ||||||
| 		, dirty_transform_(false) | 		, dirty_transform_(false) | ||||||
| 		, dirty_transform_inverse_(false) | 		, dirty_transform_inverse_(false) | ||||||
|  | 		, cascade_opacity_(false) | ||||||
| 		, parent_(nullptr) | 		, parent_(nullptr) | ||||||
| 		, scene_(nullptr) | 		, scene_(nullptr) | ||||||
| 		, hash_name_(0) | 		, hash_name_(0) | ||||||
| 		, z_order_(0) | 		, z_order_(0) | ||||||
| 		, opacity_(1.f) | 		, opacity_(1.f) | ||||||
| 		, display_opacity_(1.f) | 		, displayed_opacity_(1.f) | ||||||
| 		, anchor_(default_anchor_x, default_anchor_y) | 		, anchor_(default_anchor_x, default_anchor_y) | ||||||
| 	{ | 	{ | ||||||
| 	} | 	} | ||||||
|  | @ -230,10 +231,15 @@ namespace kiwano | ||||||
| 
 | 
 | ||||||
| 	void Node::UpdateOpacity() | 	void Node::UpdateOpacity() | ||||||
| 	{ | 	{ | ||||||
| 		if (parent_) | 		if (parent_ && parent_->IsCascadeOpacityEnabled()) | ||||||
| 		{ | 		{ | ||||||
| 			display_opacity_ = opacity_ * parent_->display_opacity_; | 			displayed_opacity_ = opacity_ * parent_->displayed_opacity_; | ||||||
| 		} | 		} | ||||||
|  | 		else | ||||||
|  | 		{ | ||||||
|  | 			displayed_opacity_ = opacity_; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		for (Node* child = children_.First().Get(); child; child = child->NextItem().Get()) | 		for (Node* child = children_.First().Get(); child; child = child->NextItem().Get()) | ||||||
| 		{ | 		{ | ||||||
| 			child->UpdateOpacity(); | 			child->UpdateOpacity(); | ||||||
|  | @ -298,7 +304,16 @@ namespace kiwano | ||||||
| 		if (opacity_ == opacity) | 		if (opacity_ == opacity) | ||||||
| 			return; | 			return; | ||||||
| 
 | 
 | ||||||
| 		display_opacity_ = opacity_ = std::min(std::max(opacity, 0.f), 1.f); | 		displayed_opacity_ = opacity_ = std::min(std::max(opacity, 0.f), 1.f); | ||||||
|  | 		UpdateOpacity(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	void Node::SetCascadeOpacityEnabled(bool enabled) | ||||||
|  | 	{ | ||||||
|  | 		if (cascade_opacity_ == enabled) | ||||||
|  | 			return; | ||||||
|  | 
 | ||||||
|  | 		cascade_opacity_ = enabled; | ||||||
| 		UpdateOpacity(); | 		UpdateOpacity(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -625,7 +640,7 @@ namespace kiwano | ||||||
| 	void VisualNode::PrepareRender() | 	void VisualNode::PrepareRender() | ||||||
| 	{ | 	{ | ||||||
| 		Renderer::Instance().SetTransform(transform_matrix_); | 		Renderer::Instance().SetTransform(transform_matrix_); | ||||||
| 		Renderer::Instance().SetOpacity(display_opacity_); | 		Renderer::Instance().SetOpacity(displayed_opacity_); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -59,6 +59,9 @@ namespace kiwano | ||||||
| 		// 获取响应状态
 | 		// 获取响应状态
 | ||||||
| 		bool IsResponsible()			const	{ return responsible_; } | 		bool IsResponsible()			const	{ return responsible_; } | ||||||
| 
 | 
 | ||||||
|  | 		// 是否启用级联透明度
 | ||||||
|  | 		bool IsCascadeOpacityEnabled()	const	{ return cascade_opacity_; } | ||||||
|  | 
 | ||||||
| 		// 获取名称的 Hash 值
 | 		// 获取名称的 Hash 值
 | ||||||
| 		size_t GetHashName()			const	{ return hash_name_; } | 		size_t GetHashName()			const	{ return hash_name_; } | ||||||
| 
 | 
 | ||||||
|  | @ -125,6 +128,9 @@ namespace kiwano | ||||||
| 		// 获取透明度
 | 		// 获取透明度
 | ||||||
| 		float GetOpacity()				const	{ return opacity_; } | 		float GetOpacity()				const	{ return opacity_; } | ||||||
| 
 | 
 | ||||||
|  | 		// 获取显示透明度
 | ||||||
|  | 		float GetDisplayedOpacity()		const	{ return displayed_opacity_; } | ||||||
|  | 
 | ||||||
| 		// 获取变换
 | 		// 获取变换
 | ||||||
| 		Transform GetTransform()		const	{ return transform_; } | 		Transform GetTransform()		const	{ return transform_; } | ||||||
| 
 | 
 | ||||||
|  | @ -296,6 +302,7 @@ namespace kiwano | ||||||
| 			const Size & size | 			const Size & size | ||||||
| 		); | 		); | ||||||
| 
 | 
 | ||||||
|  | 		// 设置二维仿射变换
 | ||||||
| 		void SetTransform( | 		void SetTransform( | ||||||
| 			Transform const& transform | 			Transform const& transform | ||||||
| 		); | 		); | ||||||
|  | @ -306,6 +313,11 @@ namespace kiwano | ||||||
| 			float opacity | 			float opacity | ||||||
| 		); | 		); | ||||||
| 
 | 
 | ||||||
|  | 		// 启用或禁用级联透明度
 | ||||||
|  | 		void SetCascadeOpacityEnabled( | ||||||
|  | 			bool enabled | ||||||
|  | 		); | ||||||
|  | 
 | ||||||
| 		// 设置 Z 轴顺序
 | 		// 设置 Z 轴顺序
 | ||||||
| 		// 默认为 0
 | 		// 默认为 0
 | ||||||
| 		void SetZOrder( | 		void SetZOrder( | ||||||
|  | @ -413,9 +425,10 @@ namespace kiwano | ||||||
| 		bool			pressed_; | 		bool			pressed_; | ||||||
| 		bool			responsible_; | 		bool			responsible_; | ||||||
| 		bool			update_pausing_; | 		bool			update_pausing_; | ||||||
|  | 		bool			cascade_opacity_; | ||||||
| 		int				z_order_; | 		int				z_order_; | ||||||
| 		float			opacity_; | 		float			opacity_; | ||||||
| 		float			display_opacity_; | 		float			displayed_opacity_; | ||||||
| 		Node*			parent_; | 		Node*			parent_; | ||||||
| 		Scene*			scene_; | 		Scene*			scene_; | ||||||
| 		size_t			hash_name_; | 		size_t			hash_name_; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue