diff options
Diffstat (limited to 'dw/tools.hh')
-rw-r--r-- | dw/tools.hh | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/dw/tools.hh b/dw/tools.hh new file mode 100644 index 00000000..973881af --- /dev/null +++ b/dw/tools.hh @@ -0,0 +1,56 @@ +#ifndef __DW_TOOLS_HH__ +#define __DW_TOOLS_HH__ + +#include "core.hh" +#include "../lout/debug.hh" + +namespace dw { +namespace core { + +/** + * \brief Hold arguments passed to dw::core::Widget::sizeRequest and + * dw::core::Widget::getExtremes, as described in \ref dw-size-request-pos. + */ +class SizeParams +{ +private: + int numPos; + Widget **references; + int *x, *y; + + void init (); + void cleanup (); + + inline void debugPrint () { + DBG_IF_RTFL { + DBG_OBJ_SET_NUM ("numPos", numPos); + for (int i = 0; i < numPos; i++) { + DBG_OBJ_ARRSET_PTR ("references", i, references[i]); + DBG_OBJ_ARRSET_NUM ("x", i, x[i]); + DBG_OBJ_ARRSET_NUM ("y", i, y[i]); + } + } + } + +public: + SizeParams (); + ~SizeParams (); + + void fill (int numPos, Widget **references, int *x, int *y); + void forChild (Widget *parent, Widget *child, int xRel, int yRel, + SizeParams *childParams); + bool findReference (Widget *reference, int *x, int *y); + + inline int getNumPos () { return numPos; } + inline Widget **getReferences () { return references; } + inline int *getX () { return x; } + inline int *getY () { return y; } + inline Widget *getReference (int i) { return references[i]; } + inline int getX (int i) { return x[i]; } + inline int getY (int i) { return y[i]; } +}; + +} // namespace core +} // namespace dw + +#endif // __DW_TOOLS_HH__ |