package toffee

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file layout.ml

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
type t = {
  order : int;
  location : float Geometry.point;
  size : float Geometry.size;
  content_size : float Geometry.size;
  scrollbar_size : float Geometry.size;
  border : float Geometry.rect;
  padding : float Geometry.rect;
  margin : float Geometry.rect;
}

let make ~order ~location ~size ~content_size ~scrollbar_size ~border ~padding
    ~margin =
  {
    order;
    location;
    size;
    content_size;
    scrollbar_size;
    border;
    padding;
    margin;
  }

let order t = t.order
let location t = t.location
let size t = t.size
let content_size t = t.content_size
let scrollbar_size t = t.scrollbar_size
let border t = t.border
let padding t = t.padding
let margin t = t.margin

let default =
  {
    order = 0;
    location = Geometry.Point.zero;
    size = Geometry.Size.zero;
    content_size = Geometry.Size.zero;
    scrollbar_size = Geometry.Size.zero;
    border = Geometry.Rect.zero;
    padding = Geometry.Rect.zero;
    margin = Geometry.Rect.zero;
  }

let with_order order = { default with order }

let content_box_width layout =
  layout.size.width -. layout.padding.left -. layout.padding.right
  -. layout.border.left -. layout.border.right

let content_box_height layout =
  layout.size.height -. layout.padding.top -. layout.padding.bottom
  -. layout.border.top -. layout.border.bottom

let content_box_size layout =
  Geometry.Size.
    {
      width =
        layout.size.width -. layout.border.left -. layout.border.right
        -. layout.padding.left -. layout.padding.right;
      height =
        layout.size.height -. layout.border.top -. layout.border.bottom
        -. layout.padding.top -. layout.padding.bottom;
    }

let content_box_x layout =
  layout.location.x +. layout.margin.left +. layout.border.left
  +. layout.padding.left

let content_box_y layout =
  layout.location.y +. layout.margin.top +. layout.border.top
  +. layout.padding.top

let scroll_width layout =
  Float.max 0.0
    (layout.content_size.width
    +. Float.min layout.scrollbar_size.width layout.size.width
    -. layout.size.width +. layout.border.right)

let scroll_height layout =
  Float.max 0.0
    (layout.content_size.height
    +. Float.min layout.scrollbar_size.height layout.size.height
    -. layout.size.height +. layout.border.bottom)

let to_string t =
  Printf.sprintf
    "Layout { order: %d; location: %s; size: %s; content_size: %s }" t.order
    (Geometry.Point.to_string Float.to_string t.location)
    (Geometry.Size.to_string Float.to_string t.size)
    (Geometry.Size.to_string Float.to_string t.content_size)

let compare a b =
  let cmp = Int.compare a.order b.order in
  if cmp <> 0 then cmp
  else
    let cmp = Geometry.Point.compare Float.compare a.location b.location in
    if cmp <> 0 then cmp
    else
      let cmp = Geometry.Size.compare Float.compare a.size b.size in
      if cmp <> 0 then cmp
      else
        let cmp =
          Geometry.Size.compare Float.compare a.content_size b.content_size
        in
        if cmp <> 0 then cmp
        else
          let cmp =
            Geometry.Size.compare Float.compare a.scrollbar_size
              b.scrollbar_size
          in
          if cmp <> 0 then cmp
          else
            let cmp = Geometry.Rect.compare Float.compare a.border b.border in
            if cmp <> 0 then cmp
            else
              let cmp =
                Geometry.Rect.compare Float.compare a.padding b.padding
              in
              if cmp <> 0 then cmp
              else Geometry.Rect.compare Float.compare a.margin b.margin

let equal a b = compare a b = 0
let pp fmt t = Format.pp_print_string fmt (to_string t)