Blame view

dompdf/src/FrameDecorator/ListBullet.php 2.14 KB
670b6d6f8   tuan   2016/09/22 - Copy...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  <?php
  /**
   * @package dompdf
   * @link    http://dompdf.github.com/
   * @author  Benj Carson <benjcarson@digitaljunkies.ca>
   * @author  Helmut Tischer <htischer@weihenstephan.org>
   * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
   */
  namespace Dompdf\FrameDecorator;
  
  use Dompdf\Dompdf;
  use Dompdf\Frame;
  
  /**
   * Decorates frames for list bullet rendering
   *
   * @package dompdf
   */
  class ListBullet extends AbstractFrameDecorator
  {
  
      const BULLET_PADDING = 1; // Distance from bullet to text in pt
      // As fraction of font size (including descent). See also DECO_THICKNESS.
      const BULLET_THICKNESS = 0.04; // Thickness of bullet outline. Screen: 0.08, print: better less, e.g. 0.04
      const BULLET_DESCENT = 0.3; //descent of font below baseline. Todo: Guessed for now.
      const BULLET_SIZE = 0.35; // bullet diameter. For now 0.5 of font_size without descent.
  
      static $BULLET_TYPES = array("disc", "circle", "square");
  
      //........................................................................
  
      function __construct(Frame $frame, Dompdf $dompdf)
      {
          parent::__construct($frame, $dompdf);
      }
  
      function get_margin_width()
      {
          $style = $this->_frame->get_style();
  
          // Small hack to prevent extra indenting of list text on list_style_position === "inside"
          // and on suppressed bullet
          if ($style->list_style_position === "outside" ||
              $style->list_style_type === "none"
          ) {
              return 0;
          }
  
          return $style->get_font_size() * self::BULLET_SIZE + 2 * self::BULLET_PADDING;
      }
  
      //hits only on "inset" lists items, to increase height of box
      function get_margin_height()
      {
          $style = $this->_frame->get_style();
  
          if ($style->list_style_type === "none") {
              return 0;
          }
  
          return $style->get_font_size() * self::BULLET_SIZE + 2 * self::BULLET_PADDING;
      }
  
      function get_width()
      {
          return $this->get_margin_height();
      }
  
      function get_height()
      {
          return $this->get_margin_height();
      }
  
      //........................................................................
  }