diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile.am | 4 | ||||
-rw-r--r-- | test/dw_simple_container.cc | 16 | ||||
-rw-r--r-- | test/dw_simple_container.hh | 4 | ||||
-rw-r--r-- | test/identity.cc | 55 |
4 files changed, 71 insertions, 8 deletions
diff --git a/test/Makefile.am b/test/Makefile.am index 3b474466..fd3252dc 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -25,6 +25,7 @@ noinst_PROGRAMS = \ dw-resource-test \ dw-ui-test \ containers \ + identity \ shapes \ cookies \ liang \ @@ -191,6 +192,9 @@ shapes_LDADD = \ containers_SOURCES = containers.cc containers_LDADD = $(top_builddir)/lout/liblout.a +identity_SOURCES = identity.cc +identity_LDADD = $(top_builddir)/lout/liblout.a + cookies_SOURCES = cookies.c cookies_LDADD = \ $(top_builddir)/dpip/libDpip.a \ diff --git a/test/dw_simple_container.cc b/test/dw_simple_container.cc index 7fa9bf75..c1f22458 100644 --- a/test/dw_simple_container.cc +++ b/test/dw_simple_container.cc @@ -32,7 +32,7 @@ int SimpleContainer::CLASS_ID = -1; // ---------------------------------------------------------------------- SimpleContainer::SimpleContainerIterator::SimpleContainerIterator - (SimpleContainer *simpleContainer, Content::Type mask, bool atEnd) : +(SimpleContainer *simpleContainer, Content::Type mask, bool atEnd) : Iterator (simpleContainer, mask, atEnd) { content.type = atEnd ? Content::END : Content::START; @@ -63,7 +63,7 @@ int SimpleContainer::SimpleContainerIterator::index () } int SimpleContainer::SimpleContainerIterator::compareTo - (lout::object::Comparable *other) +(lout::object::Comparable *other) { return index () - ((SimpleContainerIterator*)other)->index (); } @@ -182,8 +182,9 @@ void SimpleContainer::getExtremesImpl (Extremes *extremes) if (child) child->getExtremes (&childExtr); else - childExtr.minWidth = childExtr.maxWidth = 0; - + childExtr.minWidth = childExtr.minWidthIntrinsic = childExtr.maxWidth = + childExtr.maxWidthIntrinsic = extremes->adjustmentWidth = 0; + extremes->minWidth = childExtr.minWidth + boxDiffWidth (); extremes->minWidthIntrinsic = childExtr.minWidthIntrinsic + boxDiffWidth (); extremes->maxWidth = childExtr.maxWidth + boxDiffWidth (); @@ -193,7 +194,6 @@ void SimpleContainer::getExtremesImpl (Extremes *extremes) correctExtremes (extremes, true); } - void SimpleContainer::sizeAllocateImpl (Allocation *allocation) { Allocation childAlloc; @@ -208,12 +208,14 @@ void SimpleContainer::sizeAllocateImpl (Allocation *allocation) } } -void SimpleContainer::draw (View *view, Rectangle *area) +void SimpleContainer::draw (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { drawWidgetBox (view, area, false); Rectangle childArea; if (child && child->intersects (area, &childArea)) - child->draw (view, &childArea); + child->drawTotal (view, &childArea, iteratorStack, interruptedWidget); } Iterator *SimpleContainer::iterator (Content::Type mask, bool atEnd) diff --git a/test/dw_simple_container.hh b/test/dw_simple_container.hh index fdb67bec..423b1fab 100644 --- a/test/dw_simple_container.hh +++ b/test/dw_simple_container.hh @@ -44,7 +44,9 @@ public: SimpleContainer (); ~SimpleContainer (); - void draw (core::View *view, core::Rectangle *area); + void draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); core::Iterator *iterator (core::Content::Type mask, bool atEnd); void removeChild (Widget *child); diff --git a/test/identity.cc b/test/identity.cc new file mode 100644 index 00000000..a1a136eb --- /dev/null +++ b/test/identity.cc @@ -0,0 +1,55 @@ +/* + * This small program tests how IdentifiableObject works with multiple + * inheritance ("diamond" inheritance, more precisely, since all + * classes have there root in IdentifiableObject.) + * + * Current status: With virtual superclasses, you get a class + * hierarchie "root -> A -> B -> C", so that the first part of this + * example works actually (C is a subclass of A and of B), but the + * second fails (it should print "false", but it is erroneously + * assumed that B is a subclass of A.) + */ + +#include "../lout/identity.hh" + +using namespace lout::identity; + +class A: virtual public IdentifiableObject +{ +public: + static int CLASS_ID; + inline A () { registerName ("A", &CLASS_ID); } +}; + +class B: virtual public IdentifiableObject +{ +public: + static int CLASS_ID; + inline B () { registerName ("B", &CLASS_ID); } +}; + +class C: public A, public B +{ +public: + static int CLASS_ID; + inline C () { registerName ("C", &CLASS_ID); } +}; + +int A::CLASS_ID = -1, B::CLASS_ID = -1, C::CLASS_ID = -1; + +int main (int argc, char *argv[]) +{ + printf ("A: %d, B: %d, C: %d\n", A::CLASS_ID, B::CLASS_ID, C::CLASS_ID); + + C x; + assert (x.instanceOf (A::CLASS_ID)); + assert (x.instanceOf (B::CLASS_ID)); + assert (x.instanceOf (C::CLASS_ID)); + printf ("x: %d\n", x.getClassId ()); + + B y; + printf ("y: %d; instance of A: %s\n", + y.getClassId (), y.instanceOf (B::CLASS_ID) ? "true" : "false"); + + return 0; +} |