aboutsummaryrefslogtreecommitdiff
path: root/dw/layout.hh
diff options
context:
space:
mode:
Diffstat (limited to 'dw/layout.hh')
-rw-r--r--dw/layout.hh43
1 files changed, 39 insertions, 4 deletions
diff --git a/dw/layout.hh b/dw/layout.hh
index 47554b42..32b9a134 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);
};
@@ -150,9 +152,28 @@ private:
~Anchor ();
};
+ class QueueResizeItem: public lout::object::Object
+ {
+ public:
+ Widget *widget;
+ int ref;
+ bool extremesChanged, fast;
+
+ inline QueueResizeItem (Widget *widget, int ref, bool extremesChanged,
+ bool fast)
+ {
+ this->widget = widget;
+ this->ref = ref;
+ this->extremesChanged = extremesChanged;
+ this->fast = fast;
+ }
+ };
+
Platform *platform;
View *view;
Widget *topLevel, *widgetAtPoint;
+ lout::container::typed::Stack<QueueResizeItem> *queueQueueResizeList;
+ lout::container::typed::Vector<Widget> *queueResizeList;
/* The state, which must be projected into the view. */
style::Color *bgColor;
@@ -186,6 +207,8 @@ private:
enum ButtonEventType { BUTTON_PRESS, BUTTON_RELEASE, MOTION_NOTIFY };
+ void detachWidget (Widget *widget);
+
Widget *getWidgetAtPoint (int x, int y);
void moveToWidget (Widget *newWidgetAtPoint, ButtonState state);
@@ -233,9 +256,19 @@ 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
+ methods. Accessed by respective methods (enter..., leave...,
+ ...Entered) defined here and in Widget. */
+
+ int resizeIdleCounter, queueResizeCounter, sizeAllocateCounter,
+ sizeRequestCounter, getExtremesCounter;
+
+ void enterResizeIdle () { resizeIdleCounter++; }
+ void leaveResizeIdle () { resizeIdleCounter--; }
+
public:
Layout (Platform *platform);
~Layout ();
@@ -297,6 +330,8 @@ public:
return buttonEvent (BUTTON_PRESS, view, numPressed, x, y, state, button);
}
+ void containerSizeChanged ();
+
/**
* \brief This function is called by a view, to delegate a button press
* event.
@@ -310,7 +345,7 @@ public:
button);
}
- bool motionNotify (View *view, int x, int y, ButtonState state);
+ bool motionNotify (View *view, int x, int y, ButtonState state);
void enterNotify (View *view, int x, int y, ButtonState state);
void leaveNotify (View *view, ButtonState state);