aboutsummaryrefslogtreecommitdiffstats
path: root/pugl
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-02-02 14:55:16 +0100
committerDavid Robillard <d@drobilla.net>2020-02-02 14:55:16 +0100
commitc1c69abf7bc964b6e2c1c5d5c1ba7f1542dcecc4 (patch)
tree72139763618bfe995d0ffd2402fe42f8b1f47adf /pugl
parent0f114d846286355c90df02ef45e9c7e098b71104 (diff)
downloadpugl-c1c69abf7bc964b6e2c1c5d5c1ba7f1542dcecc4.tar.gz
pugl-c1c69abf7bc964b6e2c1c5d5c1ba7f1542dcecc4.tar.bz2
pugl-c1c69abf7bc964b6e2c1c5d5c1ba7f1542dcecc4.zip
Only resize backend when necessary
This avoids resizing the backend when the window is only moved, which fixes flicker with Cairo where resizing is expensive.
Diffstat (limited to 'pugl')
-rw-r--r--pugl/detail/win.c23
-rw-r--r--pugl/detail/x11.c20
2 files changed, 26 insertions, 17 deletions
diff --git a/pugl/detail/win.c b/pugl/detail/win.c
index 9debb6d..6ef9255 100644
--- a/pugl/detail/win.c
+++ b/pugl/detail/win.c
@@ -435,20 +435,25 @@ handleConfigure(PuglView* view, PuglEvent* event)
(LPPOINT)&rect,
2);
- view->frame.x = rect.left;
- view->frame.y = rect.top;
- view->frame.width = rect.right - rect.left;
- view->frame.height = rect.bottom - rect.top;
+ const LONG width = rect.right - rect.left;
+ const LONG height = rect.bottom - rect.top;
+
+ view->frame.x = rect.left;
+ view->frame.y = rect.top;
event->configure.type = PUGL_CONFIGURE;
event->configure.x = view->frame.x;
event->configure.y = view->frame.y;
- event->configure.width = view->frame.width;
- event->configure.height = view->frame.height;
+ event->configure.width = width;
+ event->configure.height = height;
+
+ if (view->frame.width != width || view->frame.height != height) {
+ view->frame.width = width;
+ view->frame.height = height;
+
+ view->backend->resize(view, width, height);
+ }
- view->backend->resize(view,
- rect.right - rect.left,
- rect.bottom - rect.top);
return rect;
}
diff --git a/pugl/detail/x11.c b/pugl/detail/x11.c
index 49c843b..4099553 100644
--- a/pugl/detail/x11.c
+++ b/pugl/detail/x11.c
@@ -648,14 +648,18 @@ flushPendingConfigure(PuglView* view)
PuglEvent* const configure = &view->impl->pendingConfigure;
if (configure->type) {
- view->frame.x = configure->configure.x;
- view->frame.y = configure->configure.y;
- view->frame.width = configure->configure.width;
- view->frame.height = configure->configure.height;
-
- view->backend->resize(view,
- (int)view->frame.width,
- (int)view->frame.height);
+ view->frame.x = configure->configure.x;
+ view->frame.y = configure->configure.y;
+
+ if (configure->configure.width != view->frame.width ||
+ configure->configure.height != view->frame.height) {
+ view->frame.width = configure->configure.width;
+ view->frame.height = configure->configure.height;
+
+ view->backend->resize(view,
+ (int)view->frame.width,
+ (int)view->frame.height);
+ }
view->eventFunc(view, configure);
configure->type = 0;