1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-15 03:12:41 +01:00
phorge-phorge/src/view/phui/PHUIImageMaskView.php

117 lines
2.8 KiB
PHP
Raw Normal View History

<?php
final class PHUIImageMaskView extends AphrontTagView {
private $image;
private $withMask;
private $displayWidth;
private $displayHeight;
private $centerX;
private $centerY;
private $maskH;
private $maskW;
public function setImage($image) {
$this->image = $image;
return $this;
}
public function setDisplayWidth($width) {
$this->displayWidth = $width;
return $this;
}
public function setDisplayHeight($height) {
$this->displayHeight = $height;
return $this;
}
public function centerViewOnPoint($x, $y, $h, $w) {
$this->centerX = $x;
$this->centerY = $y;
$this->maskH = $h;
$this->maskW = $w;
return $this;
}
public function withMask($mask) {
$this->withMask = $mask;
return $this;
}
protected function getTagName() {
return 'div';
}
protected function getTagAttributes() {
require_celerity_resource('phui-image-mask-css');
$classes = array();
$classes[] = 'phui-image-mask';
$styles = array();
$styles[] = 'height: '.$this->displayHeight.'px;';
$styles[] = 'width: '.$this->displayWidth.'px;';
return array(
'class' => implode(' ', $classes),
'styles' => implode(' ', $styles),
);
}
protected function getTagContent() {
/* Center it in the middle of the selected area */
$center_x = round($this->centerX + ($this->maskW / 2));
$center_y = round($this->centerY + ($this->maskH / 2));
$center_x = round($center_x - ($this->displayWidth / 2));
$center_y = round($center_y - ($this->displayHeight / 2));
$center_x = -$center_x;
$center_y = -$center_y;
$classes = array();
$classes[] = 'phui-image-mask-image';
$styles = array();
$styles[] = 'height: '.$this->displayHeight.'px;';
$styles[] = 'width: '.$this->displayWidth.'px;';
$styles[] = 'background-image: url('.$this->image.');';
$styles[] = 'background-position: '.$center_x.'px '.$center_y.'px;';
$mask = null;
if ($this->withMask) {
/* The mask is a 300px border around a transparent box.
so we do the math here to position the box correctly. */
$border = 300;
$left = round((($this->displayWidth - $this->maskW) / 2) - $border);
$top = round((($this->displayHeight - $this->maskH) / 2) - $border);
$mstyles = array();
$mstyles[] = 'left: '.$left.'px;';
$mstyles[] = 'top: '.$top.'px;';
$mstyles[] = 'height: '.$this->maskH.'px;';
$mstyles[] = 'width: '.$this->maskW.'px;';
$mask = phutil_tag(
'span',
array(
'class' => 'phui-image-mask-mask',
'style' => implode(' ', $mstyles),
),
null);
}
return phutil_tag(
'div',
array(
'class' => implode(' ', $classes),
'style' => implode(' ', $styles),
),
$mask);
}
}