transformation = clone $t; return $this; } /** * Sets stack position of the layer. * * @param string $position The stack position. * * @return $this */ public function setStackPosition($position) { $this->qualifiers['source']->setStackPosition($position); return $this; } /** * Adds (chains) a transformation action. * * @param BaseAction|BaseQualifier|mixed $action The transformation action to add. * If BaseQualifier is provided, it is wrapped with action. * * @return static */ public function addAction($action) { $this->getTransformation()->addAction($action); return $this; } /** * Adds a flag as a separate action. * * @param FlagQualifier|string $flag The flag to add. * * @return static */ public function addFlag($flag) { $this->getTransformation()->addFlag($flag); return $this; } /** * Adds (appends) a transformation. * * Appended transformation is nested. * * @param CommonTransformation $transformation The transformation to add. * * @return static */ public function addTransformation($transformation) { $this->getTransformation()->addTransformation($transformation); return $this; } /** * Serializes to string. * * @return string */ public function __toString() { $all = parent::__toString(); return ArrayUtils::implodeUrl([$all, $this->getTransformation(), Flag::layerApply()]); } /** * Serializes to json. * * @return mixed */ public function jsonSerialize() { return [ 'source' => $this::getName(), 'transformation' => $this->transformation, ]; } /** * Gets the transformation. * * @return Transformation * * @internal */ abstract public function getTransformation(); /** * Gets the layer qualifier. * * @return BaseSourceQualifier * * @internal */ abstract protected function getSourceQualifier(); }