aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2013-04-11 13:42:41 +0200
committerSebastian Geerken <devnull@localhost>2013-04-11 13:42:41 +0200
commit27ceea65b6e055a2ec9fe450f1a9aed9febe1e5c (patch)
treeae1188747e5b37261a634429ac8fc7081e74451b
parent59decaaa65d9956d772dbc73574a9a815753ddb3 (diff)
Reactivated hasFloat (plus some cleanup).
-rw-r--r--dw/outofflowmgr.cc60
-rw-r--r--dw/outofflowmgr.hh2
2 files changed, 17 insertions, 45 deletions
diff --git a/dw/outofflowmgr.cc b/dw/outofflowmgr.cc
index 1a37bff2..8d9830e4 100644
--- a/dw/outofflowmgr.cc
+++ b/dw/outofflowmgr.cc
@@ -974,14 +974,7 @@ int OutOfFlowMgr::getBorder (Textblock *textblock, Side side, int y, int h)
// wasAllocated (textblock) ? "true" : "false",
// side == LEFT ? "LEFT" : "RIGHT", y, h);
- TBInfo *tbInfo = registerCaller (textblock);
-
- SortedFloatsVector *list;
- if (wasAllocated (textblock))
- list = side == LEFT ? leftFloatsCB : rightFloatsCB;
- else
- list = side == LEFT ? tbInfo->leftFloatsGB : tbInfo->rightFloatsGB;
-
+ SortedFloatsVector *list = getFloatsListForTextblock (textblock, side);
int first = list->findFirst (textblock, y, h);
//printf ("[%p] GET_BORDER (...): %d floats, first is %d\n",
@@ -1023,6 +1016,18 @@ int OutOfFlowMgr::getBorder (Textblock *textblock, Side side, int y, int h)
}
}
+
+OutOfFlowMgr::SortedFloatsVector *OutOfFlowMgr::getFloatsListForTextblock
+ (Textblock *textblock, Side side)
+{
+ TBInfo *tbInfo = registerCaller (textblock);
+ if (wasAllocated (textblock))
+ return side == LEFT ? leftFloatsCB : rightFloatsCB;
+ else
+ return side == LEFT ? tbInfo->leftFloatsGB : tbInfo->rightFloatsGB;
+}
+
+
bool OutOfFlowMgr::hasFloatLeft (Textblock *textblock, int y, int h)
{
return hasFloat (textblock, LEFT, y, h);
@@ -1035,43 +1040,8 @@ bool OutOfFlowMgr::hasFloatRight (Textblock *textblock, int y, int h)
bool OutOfFlowMgr::hasFloat (Textblock *textblock, Side side, int y, int h)
{
- assertNotReached ();
-
-#if 0
- // Compare to getBorder(). Actually much copy and paste.
-
- TBInfo *tbInfo = registerCaller (textblock);
-
- SortedFloatsVector *list;
- if (wasAllocated (textblock))
- list = side == LEFT ? leftFloatsCB : rightFloatsCB;
- else
- list = side == LEFT ? tbInfo->leftFloatsGB : tbInfo->rightFloatsGB;
-
- // TODO binary search
- for (int i = 0; i < list->size(); i++) {
- Float *vloat = list->get(i);
- ensureFloatSize (vloat);
-
- int yWidget;
- if (getYWidget (textblock, vloat, &yWidget)
- && y + h > yWidget
- && y < yWidget + vloat->size.ascent + vloat->size.descent) {
- // As opposed to getBorder, finding the first float is
- // sufficient.
-
- //printf ("[%p] float on %s side (%d, %d): (%d, %d)\n",
- // textblock, right ? "right" : "left", y, h,
- // yWidget, vloat->size.ascent + vloat->size.descent);
- return true;
- }
- }
-
- //printf ("[%p] no float on %s side (%d, %d)\n",
- // textblock, right ? "right" : "left", y, h);
-#endif
-
- return false;
+ return getFloatsListForTextblock(textblock,
+ side)->findFirst (textblock, y, h) != -1;
}
void OutOfFlowMgr::ensureFloatSize (Float *vloat)
diff --git a/dw/outofflowmgr.hh b/dw/outofflowmgr.hh
index 4d743399..ae5a7922 100644
--- a/dw/outofflowmgr.hh
+++ b/dw/outofflowmgr.hh
@@ -173,6 +173,8 @@ private:
int *oofMaxWidth);
TBInfo *registerCaller (Textblock *textblock);
int getBorder (Textblock *textblock, Side side, int y, int h);
+ SortedFloatsVector *getFloatsListForTextblock (Textblock *textblock,
+ Side side);
bool hasFloat (Textblock *textblock, Side side, int y, int h);
void ensureFloatSize (Float *vloat);