Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
 
3
class StrategyWidthMinNowrap {
4
  var $_maxw;
5
  var $_cmaxw;
6
 
7
  function StrategyWidthMinNowrap() {
8
  }
9
 
10
  function add_width($delta) {
11
    $this->_cmaxw += $delta;
12
  }
13
 
14
  function line_break() {
15
    $this->_maxw  = max($this->_maxw, $this->_cmaxw);
16
    $this->_cmaxw = 0;
17
  }
18
 
19
  function apply(&$box, &$context) {
20
    $this->_maxw = 0;
21
 
22
    // We need to add text indent to the width
23
    $ti = $box->get_css_property(CSS_TEXT_INDENT);
24
    $this->add_width($ti->calculate($box));
25
 
26
    for ($i=0, $size = count($box->content); $i<$size; $i++) {
27
      $child =& $box->content[$i];
28
      if ($child->isLineBreak()) {
29
        $this->line_break();
30
      } elseif (!$child->out_of_flow()) {
31
        if (is_inline($child)) {
32
          // Inline boxes content will not be wrapped, so we may calculate its max width
33
          $this->add_width($child->get_max_width($context));
34
        } else {
35
          // Non-inline boxes cause line break
36
          $this->line_break();
37
          $this->add_width($child->get_min_width($context));
38
          $this->line_break();
39
        }
40
      };
41
    }
42
 
43
    // Check if last line have maximal width
44
    $this->line_break();
45
 
46
    // Apply width constraint to min width. Return maximal value
47
    $wc = $box->get_css_property(CSS_WIDTH);
48
    return max($this->_maxw, $wc->apply($this->_maxw, $box->parent->get_width())) + $box->_get_hor_extra();
49
  }
50
}
51
 
52
?>