From 5e8dec509c8402a8f761e3156bd22278c332c5fc Mon Sep 17 00:00:00 2001 From: Sebastian Geerken Date: Tue, 6 May 2014 20:23:53 +0200 Subject: New signal "resizeQueued" for Layout. It is used by ComplexButtonResource, instead of "canvasSizeChange"; this seems to fix a CPU hogging problem. --- dw/layout.cc | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'dw/layout.cc') diff --git a/dw/layout.cc b/dw/layout.cc index b93a1b70..f9b3f763 100644 --- a/dw/layout.cc +++ b/dw/layout.cc @@ -91,6 +91,10 @@ void Layout::LayoutImgRenderer::draw (int x, int y, int width, int height) // ---------------------------------------------------------------------- +void Layout::Receiver::resizeQueued (bool extremesChanged) +{ +} + void Layout::Receiver::canvasSizeChanged (int width, int ascent, int descent) { } @@ -110,6 +114,10 @@ bool Layout::Emitter::emitToReceiver (lout::signal::Receiver *receiver, ((Integer*)argv[2])->getValue ()); break; + case RESIZE_QUEUED: + layoutReceiver->resizeQueued (((Boolean*)argv[0])->getValue ()); + break; + default: misc::assertNotReached (); } @@ -117,6 +125,13 @@ bool Layout::Emitter::emitToReceiver (lout::signal::Receiver *receiver, return false; } +void Layout::Emitter::emitResizeQueued (bool extremesChanged) +{ + Boolean ec (extremesChanged); + Object *argv[1] = { &ec }; + emitVoid (RESIZE_QUEUED, 1, argv); +} + void Layout::Emitter::emitCanvasSizeChanged (int width, int ascent, int descent) { @@ -963,9 +978,10 @@ void Layout::queueDrawExcept (int x, int y, int width, int height, queueDraw (ix2, iy1, x + width - ix2, iy2 - iy1); } -void Layout::queueResize () +void Layout::queueResize (bool extremesChanged) { - DBG_OBJ_MSG ("resize", 0, "queueResize"); + DBG_OBJ_MSGF ("resize", 0, "queueResize (%s)", + extremesChanged ? "true" : "false"); DBG_OBJ_MSG_START (); if (resizeIdleId == -1) { @@ -975,6 +991,8 @@ void Layout::queueResize () DBG_OBJ_MSGF ("resize", 1, "setting resizeIdleId = %d", resizeIdleId); } + emitter.emitResizeQueued (extremesChanged); + DBG_OBJ_MSG_END (); } @@ -1261,7 +1279,7 @@ void Layout::viewportSizeChanged (View *view, int width, int height) // similar to addWidget() topLevel->queueResize (-1, false); else - queueResize (); + queueResize (false); } viewportWidth = width; -- cgit v1.2.3