Ability to get the current canvas item being drawn from stylebox.
This commit is contained in:
parent
95bd60f71c
commit
d0b736f7e5
4 changed files with 22 additions and 0 deletions
|
@ -434,6 +434,11 @@ void CanvasItem::hide() {
|
||||||
_change_notify("visible");
|
_change_notify("visible");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CanvasItem *CanvasItem::current_item_drawn = NULL;
|
||||||
|
CanvasItem *CanvasItem::get_current_item_drawn() {
|
||||||
|
return current_item_drawn;
|
||||||
|
}
|
||||||
|
|
||||||
void CanvasItem::_update_callback() {
|
void CanvasItem::_update_callback() {
|
||||||
|
|
||||||
if (!is_inside_tree()) {
|
if (!is_inside_tree()) {
|
||||||
|
@ -449,11 +454,13 @@ void CanvasItem::_update_callback() {
|
||||||
first_draw = false;
|
first_draw = false;
|
||||||
}
|
}
|
||||||
drawing = true;
|
drawing = true;
|
||||||
|
current_item_drawn = this;
|
||||||
notification(NOTIFICATION_DRAW);
|
notification(NOTIFICATION_DRAW);
|
||||||
emit_signal(SceneStringNames::get_singleton()->draw);
|
emit_signal(SceneStringNames::get_singleton()->draw);
|
||||||
if (get_script_instance()) {
|
if (get_script_instance()) {
|
||||||
get_script_instance()->call_multilevel_reversed(SceneStringNames::get_singleton()->_draw, NULL, 0);
|
get_script_instance()->call_multilevel_reversed(SceneStringNames::get_singleton()->_draw, NULL, 0);
|
||||||
}
|
}
|
||||||
|
current_item_drawn = NULL;
|
||||||
drawing = false;
|
drawing = false;
|
||||||
}
|
}
|
||||||
//todo updating = false
|
//todo updating = false
|
||||||
|
|
|
@ -222,6 +222,8 @@ private:
|
||||||
void _set_on_top(bool p_on_top) { set_draw_behind_parent(!p_on_top); }
|
void _set_on_top(bool p_on_top) { set_draw_behind_parent(!p_on_top); }
|
||||||
bool _is_on_top() const { return !is_draw_behind_parent_enabled(); }
|
bool _is_on_top() const { return !is_draw_behind_parent_enabled(); }
|
||||||
|
|
||||||
|
static CanvasItem *current_item_drawn;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
_FORCE_INLINE_ void _notify_transform() {
|
_FORCE_INLINE_ void _notify_transform() {
|
||||||
if (!is_inside_tree()) return;
|
if (!is_inside_tree()) return;
|
||||||
|
@ -324,6 +326,8 @@ public:
|
||||||
void draw_set_transform(const Point2 &p_offset, float p_rot, const Size2 &p_scale);
|
void draw_set_transform(const Point2 &p_offset, float p_rot, const Size2 &p_scale);
|
||||||
void draw_set_transform_matrix(const Transform2D &p_matrix);
|
void draw_set_transform_matrix(const Transform2D &p_matrix);
|
||||||
|
|
||||||
|
static CanvasItem *get_current_item_drawn();
|
||||||
|
|
||||||
/* RECT / TRANSFORM */
|
/* RECT / TRANSFORM */
|
||||||
|
|
||||||
void set_as_toplevel(bool p_toplevel);
|
void set_as_toplevel(bool p_toplevel);
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "style_box.h"
|
#include "style_box.h"
|
||||||
|
#include "scene/2d/canvas_item.h"
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
bool StyleBox::test_mask(const Point2 &p_point, const Rect2 &p_rect) const {
|
bool StyleBox::test_mask(const Point2 &p_point, const Rect2 &p_rect) const {
|
||||||
|
@ -54,6 +56,10 @@ float StyleBox::get_margin(Margin p_margin) const {
|
||||||
return margin[p_margin];
|
return margin[p_margin];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CanvasItem *StyleBox::get_current_item_drawn() const {
|
||||||
|
return CanvasItem::get_current_item_drawn();
|
||||||
|
}
|
||||||
|
|
||||||
Size2 StyleBox::get_minimum_size() const {
|
Size2 StyleBox::get_minimum_size() const {
|
||||||
|
|
||||||
return Size2(get_margin(MARGIN_LEFT) + get_margin(MARGIN_RIGHT), get_margin(MARGIN_TOP) + get_margin(MARGIN_BOTTOM));
|
return Size2(get_margin(MARGIN_LEFT) + get_margin(MARGIN_RIGHT), get_margin(MARGIN_TOP) + get_margin(MARGIN_BOTTOM));
|
||||||
|
@ -83,6 +89,7 @@ void StyleBox::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_minimum_size"), &StyleBox::get_minimum_size);
|
ClassDB::bind_method(D_METHOD("get_minimum_size"), &StyleBox::get_minimum_size);
|
||||||
ClassDB::bind_method(D_METHOD("get_center_size"), &StyleBox::get_center_size);
|
ClassDB::bind_method(D_METHOD("get_center_size"), &StyleBox::get_center_size);
|
||||||
ClassDB::bind_method(D_METHOD("get_offset"), &StyleBox::get_offset);
|
ClassDB::bind_method(D_METHOD("get_offset"), &StyleBox::get_offset);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_current_item_drawn"), &StyleBox::get_current_item_drawn);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("draw", "canvas_item", "rect"), &StyleBox::draw);
|
ClassDB::bind_method(D_METHOD("draw", "canvas_item", "rect"), &StyleBox::draw);
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
/**
|
/**
|
||||||
@author Juan Linietsky <reduzio@gmail.com>
|
@author Juan Linietsky <reduzio@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
class CanvasItem;
|
||||||
|
|
||||||
class StyleBox : public Resource {
|
class StyleBox : public Resource {
|
||||||
|
|
||||||
GDCLASS(StyleBox, Resource);
|
GDCLASS(StyleBox, Resource);
|
||||||
|
@ -58,6 +60,8 @@ public:
|
||||||
|
|
||||||
virtual void draw(RID p_canvas_item, const Rect2 &p_rect) const = 0;
|
virtual void draw(RID p_canvas_item, const Rect2 &p_rect) const = 0;
|
||||||
|
|
||||||
|
CanvasItem *get_current_item_drawn() const;
|
||||||
|
|
||||||
Size2 get_minimum_size() const;
|
Size2 get_minimum_size() const;
|
||||||
Point2 get_offset() const;
|
Point2 get_offset() const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue