diff options
Diffstat (limited to 'scene/gui/tree.cpp')
-rw-r--r-- | scene/gui/tree.cpp | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 2cfebb7c1e..1a7392f27e 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -943,7 +943,7 @@ void Tree::draw_item_rect(const TreeItem::Cell& p_cell,const Rect2i& p_rect,cons bmsize.width=p_cell.icon_max_w; } - p_cell.draw_icon(ci,rect.pos + Size2i(0,Math::floor((rect.size.y-bmsize.y)/2)),bmsize); + p_cell.draw_icon(ci,rect.pos + Size2i(0,Math::floor((real_t)(rect.size.y-bmsize.y)/2)),bmsize); rect.pos.x+=bmsize.x+cache.hseparation; rect.size.x-=bmsize.x+cache.hseparation; @@ -1008,7 +1008,7 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2& /* Draw label, if height fits */ - bool skip=(p_item==root && hide_root); + bool skip=(p_item==root && hide_root); if (!skip && (p_pos.y+label_h-cache.offset.y)>0) { @@ -1173,7 +1173,7 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2& Ref<Texture> checked = cache.checked; Ref<Texture> unchecked = cache.unchecked; Point2i check_ofs=item_rect.pos; - check_ofs.y+=Math::floor((item_rect.size.y-checked->get_height())/2); + check_ofs.y+=Math::floor((real_t)(item_rect.size.y-checked->get_height())/2); if (p_item->cells[i].checked) { @@ -1711,8 +1711,15 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_ case TreeItem::CELL_MODE_CHECK: { bring_up_editor=false; //checkboxes are not edited with editor - p_item->set_checked(col, !c.checked); - item_edited(col, p_item); + if (force_edit_checkbox_only_on_checkbox) { + if (x < cache.checked->get_width()) { + p_item->set_checked(col, !c.checked); + item_edited(col, p_item); + } + } else { + p_item->set_checked(col, !c.checked); + item_edited(col, p_item); + } click_handled = true; //p_item->edited_signal.call(col); @@ -2321,7 +2328,7 @@ void Tree::_gui_input(InputEvent p_event) { TreeItem::Cell &c=popup_edited_item->cells[popup_edited_item_col]; float diff_y = -b.relative_y; - diff_y=Math::pow(ABS(diff_y),1.8)*SGN(diff_y); + diff_y=Math::pow(ABS(diff_y),1.8f)*SGN(diff_y); diff_y*=0.1; range_drag_base=CLAMP(range_drag_base + c.step * diff_y, c.min, c.max); popup_edited_item->set_range(popup_edited_item_col,range_drag_base); @@ -3555,6 +3562,16 @@ bool Tree::get_single_select_cell_editing_only_when_already_selected() const { return force_select_on_already_selected; } +void Tree::set_edit_checkbox_cell_only_when_checkbox_is_pressed(bool p_enable) { + + force_edit_checkbox_only_on_checkbox=p_enable; +} + +bool Tree::get_edit_checkbox_cell_only_when_checkbox_is_pressed() const { + + return force_edit_checkbox_only_on_checkbox; +} + void Tree::set_allow_rmb_select(bool p_allow) { @@ -3733,6 +3750,7 @@ Tree::Tree() { force_select_on_already_selected=false; allow_rmb_select=false; + force_edit_checkbox_only_on_checkbox=false; set_clip_contents(true); } |