Browse Source

PixelPaint: Only update the layer thumbnail on layer bitmap changes

When a layer bitmap is modified, we don't have to repaint the whole
layer gadget in the layer list, only the little thumbnail. :^)
Andreas Kling 4 years ago
parent
commit
fd898be51a

+ 2 - 2
Userland/Applications/PixelPaint/Image.cpp

@@ -434,7 +434,7 @@ void Image::layer_did_modify_bitmap(Badge<Layer>, Layer const& layer, Gfx::IntRe
 {
 {
     auto layer_index = index_of(layer);
     auto layer_index = index_of(layer);
     for (auto* client : m_clients)
     for (auto* client : m_clients)
-        client->image_did_modify_layer(layer_index);
+        client->image_did_modify_layer_bitmap(layer_index);
 
 
     did_change(modified_layer_rect.translated(layer.location()));
     did_change(modified_layer_rect.translated(layer.location()));
 }
 }
@@ -443,7 +443,7 @@ void Image::layer_did_modify_properties(Badge<Layer>, Layer const& layer)
 {
 {
     auto layer_index = index_of(layer);
     auto layer_index = index_of(layer);
     for (auto* client : m_clients)
     for (auto* client : m_clients)
-        client->image_did_modify_layer(layer_index);
+        client->image_did_modify_layer_properties(layer_index);
 
 
     did_change();
     did_change();
 }
 }

+ 2 - 1
Userland/Applications/PixelPaint/Image.h

@@ -26,7 +26,8 @@ class ImageClient {
 public:
 public:
     virtual void image_did_add_layer(size_t) { }
     virtual void image_did_add_layer(size_t) { }
     virtual void image_did_remove_layer(size_t) { }
     virtual void image_did_remove_layer(size_t) { }
-    virtual void image_did_modify_layer(size_t) { }
+    virtual void image_did_modify_layer_properties(size_t) { }
+    virtual void image_did_modify_layer_bitmap(size_t) { }
     virtual void image_did_modify_layer_stack() { }
     virtual void image_did_modify_layer_stack() { }
     virtual void image_did_change(Gfx::IntRect const&) { }
     virtual void image_did_change(Gfx::IntRect const&) { }
     virtual void image_select_layer(Layer*) { }
     virtual void image_select_layer(Layer*) { }

+ 10 - 1
Userland/Applications/PixelPaint/LayerListWidget.cpp

@@ -231,11 +231,20 @@ void LayerListWidget::image_did_remove_layer(size_t layer_index)
     relayout_gadgets();
     relayout_gadgets();
 }
 }
 
 
-void LayerListWidget::image_did_modify_layer(size_t layer_index)
+void LayerListWidget::image_did_modify_layer_properties(size_t layer_index)
 {
 {
     update(m_gadgets[layer_index].rect);
     update(m_gadgets[layer_index].rect);
 }
 }
 
 
+void LayerListWidget::image_did_modify_layer_bitmap(size_t layer_index)
+{
+    Gfx::IntRect adjusted_rect;
+    Gfx::IntRect thumbnail_rect;
+    Gfx::IntRect text_rect;
+    get_gadget_rects(m_gadgets[layer_index], adjusted_rect, thumbnail_rect, text_rect);
+    update(thumbnail_rect);
+}
+
 void LayerListWidget::image_did_modify_layer_stack()
 void LayerListWidget::image_did_modify_layer_stack()
 {
 {
     rebuild_gadgets();
     rebuild_gadgets();

+ 2 - 1
Userland/Applications/PixelPaint/LayerListWidget.h

@@ -41,7 +41,8 @@ private:
 
 
     virtual void image_did_add_layer(size_t) override;
     virtual void image_did_add_layer(size_t) override;
     virtual void image_did_remove_layer(size_t) override;
     virtual void image_did_remove_layer(size_t) override;
-    virtual void image_did_modify_layer(size_t) override;
+    virtual void image_did_modify_layer_properties(size_t) override;
+    virtual void image_did_modify_layer_bitmap(size_t) override;
     virtual void image_did_modify_layer_stack() override;
     virtual void image_did_modify_layer_stack() override;
 
 
     void rebuild_gadgets();
     void rebuild_gadgets();