diff options
author | Lars Muldjord <muldjordlars@gmail.com> | 2017-03-23 19:22:38 +0100 |
---|---|---|
committer | Lars Muldjord <muldjordlars@gmail.com> | 2017-03-23 19:22:38 +0100 |
commit | 889070f5c84f67cb52a5038fe93aca6234bbc360 (patch) | |
tree | 5c9ccdac1c8e7c13e501c89b2fbbaffa04340391 /plugingui/window.cc | |
parent | 83745f8bf86d22936c5c2c7becc86885119f5d29 (diff) | |
parent | 494e7218597a6cd94902b3ae6f827e74b41c00b0 (diff) |
Merge branch 'master' of http://git.drumgizmo.org/drumgizmo
Diffstat (limited to 'plugingui/window.cc')
-rw-r--r-- | plugingui/window.cc | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/plugingui/window.cc b/plugingui/window.cc index d4046c2..8bc5c62 100644 --- a/plugingui/window.cc +++ b/plugingui/window.cc @@ -262,10 +262,50 @@ bool Window::updateBuffer() }; } } + + if(pixel_buffer->has_last) + { + auto x1 = (std::size_t)pixel_buffer->last_x; + auto x2 = (std::size_t)(pixel_buffer->last_x + pixel_buffer->last_width); + auto y1 = (std::size_t)pixel_buffer->last_y; + auto y2 = (std::size_t)(pixel_buffer->last_y + pixel_buffer->last_height); + + pixel_buffer->has_last = false; + if(!has_dirty_rect) + { + // Insert this area: + dirty_rect = {x1, y1, x2, y2}; + has_dirty_rect = true; + } + else + { + // Expand existing area: + auto x1_0 = dirty_rect.x1; + auto y1_0 = dirty_rect.y1; + auto x2_0 = dirty_rect.x2; + auto y2_0 = dirty_rect.y2; + dirty_rect = { + (x1_0 < x1) ? x1_0 : x1, + (y1_0 < y1) ? y1_0 : y1, + (x2_0 > x2) ? x2_0 : x2, + (y2_0 > y2) ? y2_0 : y2 + }; + } + } + } + + if(!has_dirty_rect) + { + return false; } for(auto& pixel_buffer : pixel_buffers) { + if(!pixel_buffer->visible) + { + continue; + } + int update_width = pixel_buffer->width; int update_height = pixel_buffer->height; @@ -308,6 +348,9 @@ bool Window::updateBuffer() } } + dirty_rect.x2 = std::min(wpixbuf.width, dirty_rect.x2); + dirty_rect.y2 = std::min(wpixbuf.height, dirty_rect.y2); + native->redraw(dirty_rect); needs_redraw = false; |