1<?php
2
3class LayoutVertical {
4  // Calculate the vertical offset of current box due the 'clear' CSS property
5  //
6  // @param $y initial Y coordinate to begin offset from
7  // @param $context flow context containing the list of floats to interact with
8  // @return updated value of Y coordinate
9  //
10  function apply_clear($box, $y, &$context) {
11    $clear = $box->get_css_property(CSS_CLEAR);
12
13    // Check if we need to offset box vertically due the 'clear' property
14    if ($clear == CLEAR_BOTH || $clear == CLEAR_LEFT) {
15      $floats =& $context->current_floats();
16      for ($cf = 0; $cf < count($floats); $cf++) {
17        $current_float =& $floats[$cf];
18        if ($current_float->get_css_property(CSS_FLOAT) == FLOAT_LEFT) {
19          // Float vertical margins are never collapsed
20          //
21          $margin = $box->get_css_property(CSS_MARGIN);
22          $y = min($y, $current_float->get_bottom_margin() - $margin->top->value);
23        };
24      }
25    };
26
27    if ($clear == CLEAR_BOTH || $clear == CLEAR_RIGHT) {
28      $floats =& $context->current_floats();
29      for ($cf = 0; $cf < count($floats); $cf++) {
30        $current_float =& $floats[$cf];
31        if ($current_float->get_css_property(CSS_FLOAT) == FLOAT_RIGHT) {
32          // Float vertical margins are never collapsed
33          $margin = $box->get_css_property(CSS_MARGIN);
34          $y = min($y, $current_float->get_bottom_margin() - $margin->top->value);
35        };
36      }
37    };
38
39    return $y;
40  }
41}
42
43?>