New reworked AnimatedSprite!
-New SpriteFrames editor, with support for drag&drop, multiple animation sets, animation speed and loop. -New AnimatedSprite, with support for all the new features! AnimatedSprite3D has not been updated yet. -Added support for drag&drop to other editors, such as resourcepreload, sample library, etc.
This commit is contained in:
parent
7913e792ac
commit
bed3efb17e
23 changed files with 1400 additions and 193 deletions
|
|
@ -383,6 +383,17 @@ Size2 ItemList::get_min_icon_size() const {
|
|||
return min_icon_size;
|
||||
}
|
||||
|
||||
|
||||
void ItemList::set_max_icon_size(const Size2& p_size) {
|
||||
|
||||
max_icon_size=p_size;
|
||||
update();
|
||||
}
|
||||
|
||||
Size2 ItemList::get_max_icon_size() const {
|
||||
|
||||
return max_icon_size;
|
||||
}
|
||||
Size2 ItemList::Item::get_icon_size() const {
|
||||
|
||||
if (icon.is_null())
|
||||
|
|
@ -690,6 +701,55 @@ void ItemList::ensure_current_is_visible() {
|
|||
update();
|
||||
}
|
||||
|
||||
static Size2 _adjust_to_max_size(Size2 p_size, Size2 p_max_size) {
|
||||
|
||||
if (p_max_size.x<=0)
|
||||
p_max_size.x=1e20;
|
||||
if (p_max_size.y<=0)
|
||||
p_max_size.y=1e20;
|
||||
|
||||
|
||||
Size2 new_size;
|
||||
|
||||
if (p_size.x > p_max_size.x) {
|
||||
|
||||
new_size.width=p_max_size.x;
|
||||
new_size.height=p_size.height * p_max_size.width / p_size.width;
|
||||
|
||||
if (new_size.height > p_max_size.height) {
|
||||
new_size=Size2(); //invalid
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (p_size.y > p_max_size.y) {
|
||||
|
||||
Size2 new_size2;
|
||||
new_size2.height=p_max_size.y;
|
||||
new_size2.width=p_size.width * p_max_size.height / p_size.height;
|
||||
|
||||
if (new_size2.width < p_max_size.width) {
|
||||
|
||||
if (new_size!=Size2()) {
|
||||
|
||||
if (new_size2.x*new_size2.y > new_size.x*new_size.y) {
|
||||
new_size=new_size2;
|
||||
}
|
||||
} else {
|
||||
new_size=new_size2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (new_size==Size2())
|
||||
return p_size;
|
||||
else
|
||||
return new_size;
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ItemList::_notification(int p_what) {
|
||||
|
||||
if (p_what==NOTIFICATION_RESIZED) {
|
||||
|
|
@ -752,12 +812,7 @@ void ItemList::_notification(int p_what) {
|
|||
Size2 minsize;
|
||||
if (items[i].icon.is_valid()) {
|
||||
|
||||
minsize=items[i].get_icon_size();
|
||||
|
||||
if (min_icon_size.x!=0)
|
||||
minsize.x = MAX(minsize.x,min_icon_size.x);
|
||||
if (min_icon_size.y!=0)
|
||||
minsize.y = MAX(minsize.y,min_icon_size.y);
|
||||
minsize=_adjust_to_max_size(items[i].get_icon_size(),max_icon_size);
|
||||
|
||||
if (items[i].text!="") {
|
||||
if (icon_mode==ICON_MODE_TOP) {
|
||||
|
|
@ -902,7 +957,7 @@ void ItemList::_notification(int p_what) {
|
|||
Vector2 text_ofs;
|
||||
if (items[i].icon.is_valid()) {
|
||||
|
||||
Size2 icon_size = items[i].get_icon_size();
|
||||
Size2 icon_size = _adjust_to_max_size(items[i].get_icon_size(),max_icon_size);
|
||||
|
||||
Vector2 icon_ofs;
|
||||
if (min_icon_size!=Vector2()) {
|
||||
|
|
@ -922,7 +977,7 @@ void ItemList::_notification(int p_what) {
|
|||
}
|
||||
|
||||
if (items[i].icon_region.has_no_area())
|
||||
draw_texture(items[i].icon, pos);
|
||||
draw_texture_rect(items[i].icon, Rect2(pos,icon_size) );
|
||||
else
|
||||
draw_texture_rect_region(items[i].icon, Rect2(pos, icon_size), items[i].icon_region);
|
||||
|
||||
|
|
@ -1044,7 +1099,7 @@ void ItemList::_scroll_changed(double) {
|
|||
update();
|
||||
}
|
||||
|
||||
int ItemList::get_item_at_pos(const Point2& p_pos) const {
|
||||
int ItemList::get_item_at_pos(const Point2& p_pos, bool p_exact) const {
|
||||
|
||||
Vector2 pos=p_pos;
|
||||
Ref<StyleBox> bg = get_stylebox("bg");
|
||||
|
|
@ -1067,7 +1122,7 @@ int ItemList::get_item_at_pos(const Point2& p_pos) const {
|
|||
}
|
||||
|
||||
float dist = rc.distance_to(pos);
|
||||
if (dist<closest_dist) {
|
||||
if (!p_exact && dist<closest_dist) {
|
||||
closest=i;
|
||||
closest_dist=dist;
|
||||
}
|
||||
|
|
@ -1174,7 +1229,10 @@ void ItemList::_bind_methods(){
|
|||
ObjectTypeDB::bind_method(_MD("set_min_icon_size","size"),&ItemList::set_min_icon_size);
|
||||
ObjectTypeDB::bind_method(_MD("get_min_icon_size"),&ItemList::get_min_icon_size);
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("get_item_at_pos","pos"),&ItemList::get_item_at_pos);
|
||||
ObjectTypeDB::bind_method(_MD("set_max_icon_size","size"),&ItemList::set_max_icon_size);
|
||||
ObjectTypeDB::bind_method(_MD("get_max_icon_size"),&ItemList::get_max_icon_size);
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("get_item_at_pos","pos","exact"),&ItemList::get_item_at_pos,DEFVAL(false));
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("ensure_current_is_visible"),&ItemList::ensure_current_is_visible);
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ private:
|
|||
int max_text_lines;
|
||||
int max_columns;
|
||||
Size2 min_icon_size;
|
||||
Size2 max_icon_size;
|
||||
|
||||
int defer_select_single;
|
||||
|
||||
|
|
@ -134,13 +135,16 @@ public:
|
|||
void set_min_icon_size(const Size2& p_size);
|
||||
Size2 get_min_icon_size() const;
|
||||
|
||||
void set_max_icon_size(const Size2& p_size);
|
||||
Size2 get_max_icon_size() const;
|
||||
|
||||
void ensure_current_is_visible();
|
||||
|
||||
void sort_items_by_text();
|
||||
int find_metadata(const Variant& p_metadata) const;
|
||||
|
||||
virtual String get_tooltip(const Point2& p_pos) const;
|
||||
int get_item_at_pos(const Point2& p_pos) const;
|
||||
int get_item_at_pos(const Point2& p_pos,bool p_exact=false) const;
|
||||
|
||||
ItemList();
|
||||
~ItemList();
|
||||
|
|
|
|||
|
|
@ -1566,7 +1566,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_
|
|||
if (p_button==BUTTON_LEFT) {
|
||||
/* process selection */
|
||||
|
||||
if (p_doubleclick && (!c.editable || c.mode==TreeItem::CELL_MODE_CUSTOM || c.mode==TreeItem::CELL_MODE_ICON || c.mode==TreeItem::CELL_MODE_CHECK)) {
|
||||
if (p_doubleclick && (!c.editable || c.mode==TreeItem::CELL_MODE_CUSTOM || c.mode==TreeItem::CELL_MODE_ICON /*|| c.mode==TreeItem::CELL_MODE_CHECK*/)) { //it' s confusing for check
|
||||
|
||||
emit_signal("item_activated");
|
||||
return -1;
|
||||
|
|
@ -1626,7 +1626,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_
|
|||
|
||||
/* editing */
|
||||
|
||||
bool bring_up_editor=c.selected;// && already_selected;
|
||||
bool bring_up_editor=force_select_on_already_selected ? (c.selected && already_selected) : c.selected;
|
||||
bool bring_up_value_editor=false;
|
||||
String editor_text=c.text;
|
||||
|
||||
|
|
@ -3455,6 +3455,16 @@ int Tree::get_drop_mode_flags() const {
|
|||
return drop_mode_flags;
|
||||
}
|
||||
|
||||
void Tree::set_single_select_cell_editing_only_when_already_selected(bool p_enable) {
|
||||
|
||||
force_select_on_already_selected=p_enable;
|
||||
}
|
||||
|
||||
bool Tree::get_single_select_cell_editing_only_when_already_selected() const {
|
||||
|
||||
return force_select_on_already_selected;
|
||||
}
|
||||
|
||||
void Tree::_bind_methods() {
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("_range_click_timeout"),&Tree::_range_click_timeout);
|
||||
|
|
@ -3505,6 +3515,8 @@ void Tree::_bind_methods() {
|
|||
ObjectTypeDB::bind_method(_MD("set_drop_mode_flags","flags"),&Tree::set_drop_mode_flags);
|
||||
ObjectTypeDB::bind_method(_MD("get_drop_mode_flags"),&Tree::get_drop_mode_flags);
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("set_single_select_cell_editing_only_when_already_selected","enable"),&Tree::set_single_select_cell_editing_only_when_already_selected);
|
||||
ObjectTypeDB::bind_method(_MD("get_single_select_cell_editing_only_when_already_selected"),&Tree::get_single_select_cell_editing_only_when_already_selected);
|
||||
|
||||
ADD_SIGNAL( MethodInfo("item_selected"));
|
||||
ADD_SIGNAL( MethodInfo("cell_selected"));
|
||||
|
|
@ -3610,6 +3622,7 @@ Tree::Tree() {
|
|||
drop_mode_over=NULL;
|
||||
drop_mode_section=0;
|
||||
single_select_defer=NULL;
|
||||
force_select_on_already_selected=false;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -439,6 +439,8 @@ friend class TreeItem;
|
|||
bool drag_touching_deaccel;
|
||||
bool click_handled;
|
||||
|
||||
bool force_select_on_already_selected;
|
||||
|
||||
bool hide_folding;
|
||||
|
||||
ValueEvaluator *evaluator;
|
||||
|
|
@ -514,6 +516,9 @@ public:
|
|||
void set_drop_mode_flags(int p_flags);
|
||||
int get_drop_mode_flags() const;
|
||||
|
||||
void set_single_select_cell_editing_only_when_already_selected(bool p_enable);
|
||||
bool get_single_select_cell_editing_only_when_already_selected() const;
|
||||
|
||||
void set_value_evaluator(ValueEvaluator *p_evaluator);
|
||||
|
||||
Tree();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue