|
@@ -29,6 +29,7 @@
|
|
|
/*************************************************************************/
|
|
|
|
|
|
#include "canvas_layer.h"
|
|
|
+#include "canvas_item.h"
|
|
|
#include "viewport.h"
|
|
|
|
|
|
void CanvasLayer::set_layer(int p_xform) {
|
|
@@ -42,6 +43,32 @@ int CanvasLayer::get_layer() const {
|
|
|
return layer;
|
|
|
}
|
|
|
|
|
|
+void CanvasLayer::set_visible(bool p_visible) {
|
|
|
+ if (p_visible == visible) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ visible = p_visible;
|
|
|
+ emit_signal(SNAME("visibility_changed"));
|
|
|
+
|
|
|
+ for (int i = 0; i < get_child_count(); i++) {
|
|
|
+ CanvasItem *c = Object::cast_to<CanvasItem>(get_child(i));
|
|
|
+ if (c) {
|
|
|
+ RenderingServer::get_singleton()->canvas_item_set_visible(c->get_canvas_item(), p_visible && c->is_visible());
|
|
|
+
|
|
|
+ if (c->is_visible()) {
|
|
|
+ c->_propagate_visibility_changed(p_visible);
|
|
|
+ } else {
|
|
|
+ c->notification(CanvasItem::NOTIFICATION_VISIBILITY_CHANGED);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+bool CanvasLayer::is_visible() const {
|
|
|
+ return visible;
|
|
|
+}
|
|
|
+
|
|
|
void CanvasLayer::set_transform(const Transform2D &p_xform) {
|
|
|
transform = p_xform;
|
|
|
locrotscale_dirty = true;
|
|
@@ -264,6 +291,9 @@ void CanvasLayer::_bind_methods() {
|
|
|
ClassDB::bind_method(D_METHOD("set_layer", "layer"), &CanvasLayer::set_layer);
|
|
|
ClassDB::bind_method(D_METHOD("get_layer"), &CanvasLayer::get_layer);
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("set_visible", "visible"), &CanvasLayer::set_visible);
|
|
|
+ ClassDB::bind_method(D_METHOD("is_visible"), &CanvasLayer::is_visible);
|
|
|
+
|
|
|
ClassDB::bind_method(D_METHOD("set_transform", "transform"), &CanvasLayer::set_transform);
|
|
|
ClassDB::bind_method(D_METHOD("get_transform"), &CanvasLayer::get_transform);
|
|
|
|
|
@@ -289,6 +319,7 @@ void CanvasLayer::_bind_methods() {
|
|
|
|
|
|
ADD_GROUP("Layer", "");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "layer", PROPERTY_HINT_RANGE, "-128,128,1"), "set_layer", "get_layer");
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible");
|
|
|
ADD_GROUP("Transform", "");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "offset"), "set_offset", "get_offset");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation", PROPERTY_HINT_RANGE, "-1080,1080,0.1,or_lesser,or_greater,radians"), "set_rotation", "get_rotation");
|
|
@@ -299,6 +330,8 @@ void CanvasLayer::_bind_methods() {
|
|
|
ADD_GROUP("Follow Viewport", "follow_viewport");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "follow_viewport_enable"), "set_follow_viewport", "is_following_viewport");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "follow_viewport_scale", PROPERTY_HINT_RANGE, "0.001,1000,0.001,or_greater,or_lesser"), "set_follow_viewport_scale", "get_follow_viewport_scale");
|
|
|
+
|
|
|
+ ADD_SIGNAL(MethodInfo("visibility_changed"));
|
|
|
}
|
|
|
|
|
|
CanvasLayer::CanvasLayer() {
|