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