Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/view/phui/PHUIImageMaskView.php
12249 views
1
<?php
2
3
final class PHUIImageMaskView extends AphrontTagView {
4
5
private $image;
6
private $withMask;
7
8
private $displayWidth;
9
private $displayHeight;
10
11
private $centerX;
12
private $centerY;
13
private $maskH;
14
private $maskW;
15
16
public function setImage($image) {
17
$this->image = $image;
18
return $this;
19
}
20
21
public function setDisplayWidth($width) {
22
$this->displayWidth = $width;
23
return $this;
24
}
25
26
public function setDisplayHeight($height) {
27
$this->displayHeight = $height;
28
return $this;
29
}
30
31
public function centerViewOnPoint($x, $y, $h, $w) {
32
$this->centerX = $x;
33
$this->centerY = $y;
34
$this->maskH = $h;
35
$this->maskW = $w;
36
return $this;
37
}
38
39
public function withMask($mask) {
40
$this->withMask = $mask;
41
return $this;
42
}
43
44
protected function getTagName() {
45
return 'div';
46
}
47
48
protected function getTagAttributes() {
49
require_celerity_resource('phui-image-mask-css');
50
51
$classes = array();
52
$classes[] = 'phui-image-mask';
53
54
$styles = array();
55
$styles[] = 'height: '.$this->displayHeight.'px;';
56
$styles[] = 'width: '.$this->displayWidth.'px;';
57
58
return array(
59
'class' => implode(' ', $classes),
60
'styles' => implode(' ', $styles),
61
);
62
63
}
64
65
protected function getTagContent() {
66
67
/* Center it in the middle of the selected area */
68
$center_x = round($this->centerX + ($this->maskW / 2));
69
$center_y = round($this->centerY + ($this->maskH / 2));
70
$center_x = round($center_x - ($this->displayWidth / 2));
71
$center_y = round($center_y - ($this->displayHeight / 2));
72
73
$center_x = -$center_x;
74
$center_y = -$center_y;
75
76
$classes = array();
77
$classes[] = 'phui-image-mask-image';
78
79
$styles = array();
80
$styles[] = 'height: '.$this->displayHeight.'px;';
81
$styles[] = 'width: '.$this->displayWidth.'px;';
82
$styles[] = 'background-image: url('.$this->image.');';
83
$styles[] = 'background-position: '.$center_x.'px '.$center_y.'px;';
84
85
$mask = null;
86
if ($this->withMask) {
87
/* The mask is a 300px border around a transparent box.
88
so we do the math here to position the box correctly. */
89
$border = 300;
90
$left = round((($this->displayWidth - $this->maskW) / 2) - $border);
91
$top = round((($this->displayHeight - $this->maskH) / 2) - $border);
92
93
$mstyles = array();
94
$mstyles[] = 'left: '.$left.'px;';
95
$mstyles[] = 'top: '.$top.'px;';
96
$mstyles[] = 'height: '.$this->maskH.'px;';
97
$mstyles[] = 'width: '.$this->maskW.'px;';
98
99
$mask = phutil_tag(
100
'span',
101
array(
102
'class' => 'phui-image-mask-mask',
103
'style' => implode(' ', $mstyles),
104
),
105
null);
106
}
107
108
return phutil_tag(
109
'div',
110
array(
111
'class' => implode(' ', $classes),
112
'style' => implode(' ', $styles),
113
),
114
$mask);
115
}
116
}
117
118