diff options
author | Sebastian Geerken <devnull@localhost> | 2013-04-11 13:42:41 +0200 |
---|---|---|
committer | Sebastian Geerken <devnull@localhost> | 2013-04-11 13:42:41 +0200 |
commit | 27ceea65b6e055a2ec9fe450f1a9aed9febe1e5c (patch) | |
tree | ae1188747e5b37261a634429ac8fc7081e74451b | |
parent | 59decaaa65d9956d772dbc73574a9a815753ddb3 (diff) |
Reactivated hasFloat (plus some cleanup).
-rw-r--r-- | dw/outofflowmgr.cc | 60 | ||||
-rw-r--r-- | dw/outofflowmgr.hh | 2 |
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); |