aboutsummaryrefslogtreecommitdiff
path: root/dw/outofflowmgr.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dw/outofflowmgr.cc')
-rw-r--r--dw/outofflowmgr.cc60
1 files changed, 15 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)