summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.am4
-rw-r--r--test/dw_simple_container.cc16
-rw-r--r--test/dw_simple_container.hh4
-rw-r--r--test/identity.cc55
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;
+}