diff options
author | Sebastian Geerken <devnull@localhost> | 2014-05-06 20:23:53 +0200 |
---|---|---|
committer | Sebastian Geerken <devnull@localhost> | 2014-05-06 20:23:53 +0200 |
commit | 5e8dec509c8402a8f761e3156bd22278c332c5fc (patch) | |
tree | 41a62bd0d660b93a5758a9b36cbfb6e6046f741d /dw | |
parent | e0d27594996a9aca98ae1c25b64f14ff2dfeb1de (diff) |
New signal "resizeQueued" for Layout. It is used by ComplexButtonResource, instead of "canvasSizeChange"; this seems to fix a CPU hogging problem.
Diffstat (limited to 'dw')
-rw-r--r-- | dw/layout.cc | 24 | ||||
-rw-r--r-- | dw/layout.hh | 8 | ||||
-rw-r--r-- | dw/ui.cc | 16 | ||||
-rw-r--r-- | dw/ui.hh | 2 | ||||
-rw-r--r-- | dw/widget.cc | 2 |
5 files changed, 37 insertions, 15 deletions
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, "<b>queueResize</b>"); + DBG_OBJ_MSGF ("resize", 0, "<b>queueResize</b> (%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; diff --git a/dw/layout.hh b/dw/layout.hh index 6b6ceadb..2120d877 100644 --- a/dw/layout.hh +++ b/dw/layout.hh @@ -42,11 +42,12 @@ public: /** * \brief Receiver interface different signals. * - * May be extended + * May be extended. */ class Receiver: public lout::signal::Receiver { public: + virtual void resizeQueued (bool extremesChanged); virtual void canvasSizeChanged (int width, int ascent, int descent); }; @@ -126,7 +127,7 @@ private: class Emitter: public lout::signal::Emitter { private: - enum { CANVAS_SIZE_CHANGED }; + enum { RESIZE_QUEUED, CANVAS_SIZE_CHANGED }; protected: bool emitToReceiver (lout::signal::Receiver *receiver, int signalNo, @@ -135,6 +136,7 @@ private: public: inline void connectLayout (Receiver *receiver) { connect (receiver); } + void emitResizeQueued (bool extremesChanged); void emitCanvasSizeChanged (int width, int ascent, int descent); }; @@ -252,7 +254,7 @@ private: void queueDraw (int x, int y, int width, int height); void queueDrawExcept (int x, int y, int width, int height, int ex, int ey, int ewidth, int eheight); - void queueResize (); + void queueResize (bool extremesChanged); void removeWidget (); /* For tests regarding the respective Layout and (mostly) Widget @@ -288,14 +288,16 @@ Iterator *LabelButtonResource::iterator (Content::Type mask, bool atEnd) // ---------------------------------------------------------------------- -void ComplexButtonResource::LayoutReceiver::canvasSizeChanged (int width, - int ascent, - int descent) +void ComplexButtonResource::LayoutReceiver::resizeQueued (bool extremesChanged) { - /** - * \todo Verify that this is correct. - */ - resource->queueResize (resource->childWidget->extremesQueued ()); + DBG_OBJ_MSGF_O ("resize", 0, resource, + "LayoutReceiver::<b>resizeQueued</b> (%s)", + extremesChanged ? "true" : "false"); + DBG_OBJ_MSG_START_O (resource); + + resource->queueResize (extremesChanged); + + DBG_OBJ_MSG_END_O (resource); } ComplexButtonResource::ComplexButtonResource () @@ -378,7 +378,7 @@ private: public: ComplexButtonResource *resource; - void canvasSizeChanged (int width, int ascent, int descent); + void resizeQueued (bool extremesChanged); }; friend class LayoutReceiver; diff --git a/dw/widget.cc b/dw/widget.cc index 0ef1fc78..82677cc8 100644 --- a/dw/widget.cc +++ b/dw/widget.cc @@ -262,7 +262,7 @@ void Widget::actualQueueResize (int ref, bool extremesChanged) } if (layout) - layout->queueResize (); + layout->queueResize (extremesChanged); leaveQueueResize (); |