From 09222f004455ddbb5ae4c023664b48038cd39c52 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 5 Sep 2016 15:04:28 -0700 Subject: [PATCH] Widget/View: Consolidate dirty code inside Widget. --- firmware/common/ui_widget.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/firmware/common/ui_widget.cpp b/firmware/common/ui_widget.cpp index d760faaaf..947167533 100644 --- a/firmware/common/ui_widget.cpp +++ b/firmware/common/ui_widget.cpp @@ -70,12 +70,19 @@ Widget* Widget::parent() const { } void Widget::set_parent(Widget* const widget) { + if( widget == parent_ ) { + return; + } + if( parent_ && !widget ) { // We have a parent, but are losing it. Update visible status. + dirty_overlapping_children_in_rect(screen_rect()); visible(false); } parent_ = widget; + + set_dirty(); } void Widget::set_dirty() { @@ -227,7 +234,6 @@ void View::add_child(Widget* const widget) { if( widget->parent() == nullptr ) { widget->set_parent(this); children_.push_back(widget); - widget->set_dirty(); } } } @@ -236,14 +242,12 @@ void View::add_children(const std::initializer_list children) { children_.insert(std::end(children_), children); for(auto child : children) { child->set_parent(this); - child->set_dirty(); } } void View::remove_child(Widget* const widget) { if( widget ) { children_.erase(std::remove(children_.begin(), children_.end(), widget), children_.end()); - dirty_overlapping_children_in_rect(widget->screen_rect()); widget->set_parent(nullptr); } }