See Release Notes
Long Term Support Release
<?php namespace PhpOffice\PhpSpreadsheet\Chart; /** * Created by PhpStorm. * User: nhw2h8s * Date: 7/2/14 * Time: 5:45 PM. */ abstract class Properties {< const < EXCEL_COLOR_TYPE_STANDARD = 'prstClr'; < const EXCEL_COLOR_TYPE_SCHEME = 'schemeClr'; < const EXCEL_COLOR_TYPE_ARGB = 'srgbClr';> /** @deprecated 1.24 use constant from ChartColor instead */ > const EXCEL_COLOR_TYPE_STANDARD = ChartColor::EXCEL_COLOR_TYPE_STANDARD; > /** @deprecated 1.24 use constant from ChartColor instead */ > const EXCEL_COLOR_TYPE_SCHEME = ChartColor::EXCEL_COLOR_TYPE_SCHEME; > /** @deprecated 1.24 use constant from ChartColor instead */ > const EXCEL_COLOR_TYPE_ARGB = ChartColor::EXCEL_COLOR_TYPE_ARGB;const AXIS_LABELS_LOW = 'low'; const AXIS_LABELS_HIGH = 'high'; const AXIS_LABELS_NEXT_TO = 'nextTo'; const AXIS_LABELS_NONE = 'none'; const TICK_MARK_NONE = 'none'; const TICK_MARK_INSIDE = 'in'; const TICK_MARK_OUTSIDE = 'out'; const TICK_MARK_CROSS = 'cross'; const HORIZONTAL_CROSSES_AUTOZERO = 'autoZero'; const HORIZONTAL_CROSSES_MAXIMUM = 'max'; const FORMAT_CODE_GENERAL = 'General'; const FORMAT_CODE_NUMBER = '#,##0.00'; const FORMAT_CODE_CURRENCY = '$#,##0.00'; const FORMAT_CODE_ACCOUNTING = '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)'; const FORMAT_CODE_DATE = 'm/d/yyyy';> const FORMAT_CODE_DATE_ISO8601 = 'yyyy-mm-dd';const FORMAT_CODE_TIME = '[$-F400]h:mm:ss AM/PM'; const FORMAT_CODE_PERCENTAGE = '0.00%'; const FORMAT_CODE_FRACTION = '# ?/?'; const FORMAT_CODE_SCIENTIFIC = '0.00E+00'; const FORMAT_CODE_TEXT = '@'; const FORMAT_CODE_SPECIAL = '00000'; const ORIENTATION_NORMAL = 'minMax'; const ORIENTATION_REVERSED = 'maxMin'; const LINE_STYLE_COMPOUND_SIMPLE = 'sng'; const LINE_STYLE_COMPOUND_DOUBLE = 'dbl'; const LINE_STYLE_COMPOUND_THICKTHIN = 'thickThin'; const LINE_STYLE_COMPOUND_THINTHICK = 'thinThick'; const LINE_STYLE_COMPOUND_TRIPLE = 'tri'; const LINE_STYLE_DASH_SOLID = 'solid'; const LINE_STYLE_DASH_ROUND_DOT = 'sysDot';> const LINE_STYLE_DASH_SQUARE_DOT = 'sysDash'; const LINE_STYLE_DASH_SQUERE_DOT = 'sysDash'; > /** @deprecated 1.24 use LINE_STYLE_DASH_SQUARE_DOT instead */const LINE_STYPE_DASH_DASH = 'dash'; const LINE_STYLE_DASH_DASH_DOT = 'dashDot'; const LINE_STYLE_DASH_LONG_DASH = 'lgDash'; const LINE_STYLE_DASH_LONG_DASH_DOT = 'lgDashDot'; const LINE_STYLE_DASH_LONG_DASH_DOT_DOT = 'lgDashDotDot'; const LINE_STYLE_CAP_SQUARE = 'sq'; const LINE_STYLE_CAP_ROUND = 'rnd'; const LINE_STYLE_CAP_FLAT = 'flat';< const LINE_STYLE_JOIN_ROUND = 'bevel';> const LINE_STYLE_JOIN_ROUND = 'round';const LINE_STYLE_JOIN_MITER = 'miter'; const LINE_STYLE_JOIN_BEVEL = 'bevel'; const LINE_STYLE_ARROW_TYPE_NOARROW = null; const LINE_STYLE_ARROW_TYPE_ARROW = 'triangle'; const LINE_STYLE_ARROW_TYPE_OPEN = 'arrow'; const LINE_STYLE_ARROW_TYPE_STEALTH = 'stealth'; const LINE_STYLE_ARROW_TYPE_DIAMOND = 'diamond'; const LINE_STYLE_ARROW_TYPE_OVAL = 'oval'; const LINE_STYLE_ARROW_SIZE_1 = 1; const LINE_STYLE_ARROW_SIZE_2 = 2; const LINE_STYLE_ARROW_SIZE_3 = 3; const LINE_STYLE_ARROW_SIZE_4 = 4; const LINE_STYLE_ARROW_SIZE_5 = 5; const LINE_STYLE_ARROW_SIZE_6 = 6; const LINE_STYLE_ARROW_SIZE_7 = 7; const LINE_STYLE_ARROW_SIZE_8 = 8; const LINE_STYLE_ARROW_SIZE_9 = 9; const SHADOW_PRESETS_NOSHADOW = null; const SHADOW_PRESETS_OUTER_BOTTTOM_RIGHT = 1; const SHADOW_PRESETS_OUTER_BOTTOM = 2; const SHADOW_PRESETS_OUTER_BOTTOM_LEFT = 3; const SHADOW_PRESETS_OUTER_RIGHT = 4; const SHADOW_PRESETS_OUTER_CENTER = 5; const SHADOW_PRESETS_OUTER_LEFT = 6; const SHADOW_PRESETS_OUTER_TOP_RIGHT = 7; const SHADOW_PRESETS_OUTER_TOP = 8; const SHADOW_PRESETS_OUTER_TOP_LEFT = 9; const SHADOW_PRESETS_INNER_BOTTTOM_RIGHT = 10; const SHADOW_PRESETS_INNER_BOTTOM = 11; const SHADOW_PRESETS_INNER_BOTTOM_LEFT = 12; const SHADOW_PRESETS_INNER_RIGHT = 13; const SHADOW_PRESETS_INNER_CENTER = 14; const SHADOW_PRESETS_INNER_LEFT = 15; const SHADOW_PRESETS_INNER_TOP_RIGHT = 16; const SHADOW_PRESETS_INNER_TOP = 17; const SHADOW_PRESETS_INNER_TOP_LEFT = 18; const SHADOW_PRESETS_PERSPECTIVE_BELOW = 19; const SHADOW_PRESETS_PERSPECTIVE_UPPER_RIGHT = 20; const SHADOW_PRESETS_PERSPECTIVE_UPPER_LEFT = 21; const SHADOW_PRESETS_PERSPECTIVE_LOWER_RIGHT = 22; const SHADOW_PRESETS_PERSPECTIVE_LOWER_LEFT = 23;> const POINTS_WIDTH_MULTIPLIER = 12700; /** > const ANGLE_MULTIPLIER = 60000; // direction and size-kx size-ky * @param float $width > const PERCENTAGE_MULTIPLIER = 100000; // size sx and sy * > * @return float > /** @var bool */ */ > protected $objectState = false; // used only for minor gridlines protected function getExcelPointsWidth($width) > { > /** @var ?float */ return $width * 12700; > protected $glowSize; } > > /** @var ChartColor */ /** > protected $glowColor; * @param float $angle > * > /** @var array */ * @return float > protected $softEdges = [ */ > 'size' => null, protected function getExcelPointsAngle($angle) > ]; { > return $angle * 60000; > /** @var array */ } > protected $shadowProperties = self::PRESETS_OPTIONS[0]; > protected function getTrueAlpha($alpha) > /** @var ChartColor */ { > protected $shadowColor; return (string) 100 - $alpha . '000'; > } > public function __construct() > { protected function setColorProperties($color, $alpha, $type) > $this->lineColor = new ChartColor(); { > $this->glowColor = new ChartColor(); return [ > $this->shadowColor = new ChartColor(); 'type' => (string) $type, > $this->shadowColor->setType(ChartColor::EXCEL_COLOR_TYPE_STANDARD); 'value' => (string) $color, > $this->shadowColor->setValue('black'); 'alpha' => (string) $this->getTrueAlpha($alpha), > $this->shadowColor->setAlpha(40); ]; > } } >< * @param float $width> * Get Object State.< * @return float> * @return bool< protected function getExcelPointsWidth($width)> public function getObjectState()< return $width * 12700;> return $this->objectState;< * @param float $angle> * Change Object State to True.< * @return float> * @return $this< protected function getExcelPointsAngle($angle)> public function activateObject()< return $angle * 60000;> $this->objectState = true; > > return $this;< protected function getTrueAlpha($alpha)> public static function pointsToXml(float $width): string< return (string) 100 - $alpha . '000';> return (string) (int) ($width * self::POINTS_WIDTH_MULTIPLIER);< protected function setColorProperties($color, $alpha, $type)> public static function xmlToPoints(string $width): float< return [ < 'type' => (string) $type, < 'value' => (string) $color, < 'alpha' => (string) $this->getTrueAlpha($alpha), < ];> return ((float) $width) / self::POINTS_WIDTH_MULTIPLIER;< protected function getLineStyleArrowSize($array_selector, $array_kay_selector)> public static function angleToXml(float $angle): string< $sizes = [ < 1 => ['w' => 'sm', 'len' => 'sm'], < 2 => ['w' => 'sm', 'len' => 'med'], < 3 => ['w' => 'sm', 'len' => 'lg'], < 4 => ['w' => 'med', 'len' => 'sm'], < 5 => ['w' => 'med', 'len' => 'med'], < 6 => ['w' => 'med', 'len' => 'lg'], < 7 => ['w' => 'lg', 'len' => 'sm'], < 8 => ['w' => 'lg', 'len' => 'med'], < 9 => ['w' => 'lg', 'len' => 'lg'], < ];> return (string) (int) ($angle * self::ANGLE_MULTIPLIER); > } > > public static function xmlToAngle(string $angle): float > { > return ((float) $angle) / self::ANGLE_MULTIPLIER; > } > > public static function tenthOfPercentToXml(float $value): string > { > return (string) (int) ($value * self::PERCENTAGE_MULTIPLIER); > }< return $sizes[$array_selector][$array_kay_selector];> public static function xmlToTenthOfPercent(string $value): float > { > return ((float) $value) / self::PERCENTAGE_MULTIPLIER;< protected function getShadowPresetsMap($shadow_presets_option)> /** > * @param null|float|int|string $alpha > */ > protected function setColorProperties(?string $color, $alpha, ?string $colorType): array< $presets_options = [> return [ > 'type' => $colorType, > 'value' => $color, > 'alpha' => ($alpha === null) ? null : (int) $alpha, > ]; > } > > protected const PRESETS_OPTIONS = [ > //NONE > 0 => [ > 'presets' => self::SHADOW_PRESETS_NOSHADOW, > 'effect' => null, > //'color' => [ > // 'type' => ChartColor::EXCEL_COLOR_TYPE_STANDARD, > // 'value' => 'black', > // 'alpha' => 40, > //], > 'size' => [ > 'sx' => null, > 'sy' => null, > 'kx' => null, > 'ky' => null, > ], > 'blur' => null, > 'direction' => null, > 'distance' => null, > 'algn' => null, > 'rotWithShape' => null, > ],< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '2700000',> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 2700000 / self::ANGLE_MULTIPLIER,< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '5400000',> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 5400000 / self::ANGLE_MULTIPLIER,], 3 => [ 'effect' => 'outerShdw',< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '8100000',> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 8100000 / self::ANGLE_MULTIPLIER,'algn' => 'tr', 'rotWithShape' => '0', ], 4 => [ 'effect' => 'outerShdw',< 'blur' => '50800', < 'distance' => '38100',> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER,'algn' => 'l', 'rotWithShape' => '0', ], 5 => [ 'effect' => 'outerShdw', 'size' => [< 'sx' => '102000', < 'sy' => '102000',> 'sx' => 102000 / self::PERCENTAGE_MULTIPLIER, > 'sy' => 102000 / self::PERCENTAGE_MULTIPLIER,],< 'blur' => '63500', < 'distance' => '38100',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER,'algn' => 'ctr', 'rotWithShape' => '0', ], 6 => [ 'effect' => 'outerShdw',< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '10800000',> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 10800000 / self::ANGLE_MULTIPLIER,'algn' => 'r', 'rotWithShape' => '0', ], 7 => [ 'effect' => 'outerShdw',< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '18900000',> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 18900000 / self::ANGLE_MULTIPLIER,'algn' => 'bl', 'rotWithShape' => '0', ], 8 => [ 'effect' => 'outerShdw',< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '16200000',> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 16200000 / self::ANGLE_MULTIPLIER,'rotWithShape' => '0', ], 9 => [ 'effect' => 'outerShdw',< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '13500000',> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 13500000 / self::ANGLE_MULTIPLIER,'algn' => 'br', 'rotWithShape' => '0', ], //INNER 10 => [ 'effect' => 'innerShdw',< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '2700000',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 2700000 / self::ANGLE_MULTIPLIER,], 11 => [ 'effect' => 'innerShdw',< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '5400000',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 5400000 / self::ANGLE_MULTIPLIER,], 12 => [ 'effect' => 'innerShdw',< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '8100000',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 8100000 / self::ANGLE_MULTIPLIER,], 13 => [ 'effect' => 'innerShdw',< 'blur' => '63500', < 'distance' => '50800',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER,], 14 => [ 'effect' => 'innerShdw',< 'blur' => '114300',> 'blur' => 114300 / self::POINTS_WIDTH_MULTIPLIER,], 15 => [ 'effect' => 'innerShdw',< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '10800000',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 10800000 / self::ANGLE_MULTIPLIER,], 16 => [ 'effect' => 'innerShdw',< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '18900000',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 18900000 / self::ANGLE_MULTIPLIER,], 17 => [ 'effect' => 'innerShdw',< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '16200000',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 16200000 / self::ANGLE_MULTIPLIER,], 18 => [ 'effect' => 'innerShdw',< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '13500000',> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 13500000 / self::ANGLE_MULTIPLIER,], //perspective 19 => [ 'effect' => 'outerShdw',< 'blur' => '152400', < 'distance' => '317500',> 'blur' => 152400 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 317500 / self::POINTS_WIDTH_MULTIPLIER,'size' => [< 'sx' => '90000', < 'sy' => '-19000',> 'sx' => 90000 / self::PERCENTAGE_MULTIPLIER, > 'sy' => -19000 / self::PERCENTAGE_MULTIPLIER,],< 'direction' => '5400000',> 'direction' => 5400000 / self::ANGLE_MULTIPLIER,'rotWithShape' => '0', ], 20 => [ 'effect' => 'outerShdw',< 'blur' => '76200', < 'direction' => '18900000',> 'blur' => 76200 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 18900000 / self::ANGLE_MULTIPLIER,'size' => [< 'sy' => '23000', < 'kx' => '-1200000',> 'sy' => 23000 / self::PERCENTAGE_MULTIPLIER, > 'kx' => -1200000 / self::ANGLE_MULTIPLIER,], 'algn' => 'bl', 'rotWithShape' => '0', ], 21 => [ 'effect' => 'outerShdw',< 'blur' => '76200', < 'direction' => '13500000',> 'blur' => 76200 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 13500000 / self::ANGLE_MULTIPLIER,'size' => [< 'sy' => '23000', < 'kx' => '1200000',> 'sy' => 23000 / self::PERCENTAGE_MULTIPLIER, > 'kx' => 1200000 / self::ANGLE_MULTIPLIER,], 'algn' => 'br', 'rotWithShape' => '0', ], 22 => [ 'effect' => 'outerShdw',< 'blur' => '76200', < 'distance' => '12700', < 'direction' => '2700000',> 'blur' => 76200 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 12700 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 2700000 / self::ANGLE_MULTIPLIER,'size' => [< 'sy' => '-23000', < 'kx' => '-800400',> 'sy' => -23000 / self::PERCENTAGE_MULTIPLIER, > 'kx' => -800400 / self::ANGLE_MULTIPLIER,], 'algn' => 'bl', 'rotWithShape' => '0', ], 23 => [ 'effect' => 'outerShdw',< 'blur' => '76200', < 'distance' => '12700', < 'direction' => '8100000',> 'blur' => 76200 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 12700 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 8100000 / self::ANGLE_MULTIPLIER,'size' => [< 'sy' => '-23000', < 'kx' => '800400',> 'sy' => -23000 / self::PERCENTAGE_MULTIPLIER, > 'kx' => 800400 / self::ANGLE_MULTIPLIER,], 'algn' => 'br', 'rotWithShape' => '0', ], ];< return $presets_options[$shadow_presets_option];> protected function getShadowPresetsMap(int $presetsOption): array > { > return self::PRESETS_OPTIONS[$presetsOption] ?? self::PRESETS_OPTIONS[0];}> /** protected function getArrayElementsValue($properties, $elements) > * Get value of array element. { > * $reference = &$properties; > * @param mixed $properties if (!is_array($elements)) { > * @param mixed $elements return $reference[$elements]; > * } > * @return mixed > */foreach ($elements as $keys) { $reference = &$reference[$keys]; } return $reference;> } } > } > /** > * Set Glow Properties. > * > * @param float $size > * @param ?string $colorValue > * @param ?int $colorAlpha > * @param ?string $colorType > */ > public function setGlowProperties($size, $colorValue = null, $colorAlpha = null, $colorType = null): void > { > $this > ->activateObject() > ->setGlowSize($size); > $this->glowColor->setColorPropertiesArray( > [ > 'value' => $colorValue, > 'type' => $colorType, > 'alpha' => $colorAlpha, > ] > ); > } > > /** > * Get Glow Property. > * > * @param array|string $property > * > * @return null|array|float|int|string > */ > public function getGlowProperty($property) > { > $retVal = null; > if ($property === 'size') { > $retVal = $this->glowSize; > } elseif ($property === 'color') { > $retVal = [ > 'value' => $this->glowColor->getColorProperty('value'), > 'type' => $this->glowColor->getColorProperty('type'), > 'alpha' => $this->glowColor->getColorProperty('alpha'), > ]; > } elseif (is_array($property) && count($property) >= 2 && $property[0] === 'color') { > $retVal = $this->glowColor->getColorProperty($property[1]); > } > > return $retVal; > } > > /** > * Get Glow Color Property. > * > * @param string $propertyName > * > * @return null|int|string > */ > public function getGlowColor($propertyName) > { > return $this->glowColor->getColorProperty($propertyName); > } > > public function getGlowColorObject(): ChartColor > { > return $this->glowColor; > } > > /** > * Get Glow Size. > * > * @return ?float > */ > public function getGlowSize() > { > return $this->glowSize; > } > > /** > * Set Glow Size. > * > * @param ?float $size > * > * @return $this > */ > protected function setGlowSize($size) > { > $this->glowSize = $size; > > return $this; > } > > /** > * Set Soft Edges Size. > * > * @param ?float $size > */ > public function setSoftEdges($size): void > { > if ($size !== null) { > $this->activateObject(); > $this->softEdges['size'] = $size; > } > } > > /** > * Get Soft Edges Size. > * > * @return string > */ > public function getSoftEdgesSize() > { > return $this->softEdges['size']; > } > > /** > * @param mixed $value > */ > public function setShadowProperty(string $propertyName, $value): self > { > $this->activateObject(); > if ($propertyName === 'color' && is_array($value)) { > $this->shadowColor->setColorPropertiesArray($value); > } else { > $this->shadowProperties[$propertyName] = $value; > } > > return $this; > } > > /** > * Set Shadow Properties. > * > * @param int $presets > * @param string $colorValue > * @param string $colorType > * @param null|float|int|string $colorAlpha > * @param null|float $blur > * @param null|int $angle > * @param null|float $distance > */ > public function setShadowProperties($presets, $colorValue = null, $colorType = null, $colorAlpha = null, $blur = null, $angle = null, $distance = null): void > { > $this->activateObject()->setShadowPresetsProperties((int) $presets); > if ($presets === 0) { > $this->shadowColor->setType(ChartColor::EXCEL_COLOR_TYPE_STANDARD); > $this->shadowColor->setValue('black'); > $this->shadowColor->setAlpha(40); > } > if ($colorValue !== null) { > $this->shadowColor->setValue($colorValue); > } > if ($colorType !== null) { > $this->shadowColor->setType($colorType); > } > if (is_numeric($colorAlpha)) { > $this->shadowColor->setAlpha((int) $colorAlpha); > } > $this > ->setShadowBlur($blur) > ->setShadowAngle($angle) > ->setShadowDistance($distance); > } > > /** > * Set Shadow Presets Properties. > * > * @param int $presets > * > * @return $this > */ > protected function setShadowPresetsProperties($presets) > { > $this->shadowProperties['presets'] = $presets; > $this->setShadowPropertiesMapValues($this->getShadowPresetsMap($presets)); > > return $this; > } > > protected const SHADOW_ARRAY_KEYS = ['size', 'color']; > > /** > * Set Shadow Properties Values. > * > * @param mixed $reference > * > * @return $this > */ > protected function setShadowPropertiesMapValues(array $propertiesMap, &$reference = null) > { > $base_reference = $reference; > foreach ($propertiesMap as $property_key => $property_val) { > if (is_array($property_val)) { > if (in_array($property_key, self::SHADOW_ARRAY_KEYS, true)) { > $reference = &$this->shadowProperties[$property_key]; > $this->setShadowPropertiesMapValues($property_val, $reference); > } > } else { > if ($base_reference === null) { > $this->shadowProperties[$property_key] = $property_val; > } else { > $reference[$property_key] = $property_val; > } > } > } > > return $this; > } > > /** > * Set Shadow Blur. > * > * @param ?float $blur > * > * @return $this > */ > protected function setShadowBlur($blur) > { > if ($blur !== null) { > $this->shadowProperties['blur'] = $blur; > } > > return $this; > } > > /** > * Set Shadow Angle. > * > * @param null|float|int|string $angle > * > * @return $this > */ > protected function setShadowAngle($angle) > { > if (is_numeric($angle)) { > $this->shadowProperties['direction'] = $angle; > } > > return $this; > } > > /** > * Set Shadow Distance. > * > * @param ?float $distance > * > * @return $this > */ > protected function setShadowDistance($distance) > { > if ($distance !== null) { > $this->shadowProperties['distance'] = $distance; > } > > return $this; > } > > public function getShadowColorObject(): ChartColor > { > return $this->shadowColor; > } > > /** > * Get Shadow Property. > * > * @param string|string[] $elements > * > * @return array|string > */ > public function getShadowProperty($elements) > { > if ($elements === 'color') { > return [ > 'value' => $this->shadowColor->getValue(), > 'type' => $this->shadowColor->getType(), > 'alpha' => $this->shadowColor->getAlpha(), > ]; > } > > return $this->getArrayElementsValue($this->shadowProperties, $elements); > } > > public function getShadowArray(): array > { > $array = $this->shadowProperties; > if ($this->getShadowColorObject()->isUsable()) { > $array['color'] = $this->getShadowProperty('color'); > } > > return $array; > } > > /** @var ChartColor */ > protected $lineColor; > > /** @var array */ > protected $lineStyleProperties = [ > 'width' => null, //'9525', > 'compound' => '', //self::LINE_STYLE_COMPOUND_SIMPLE, > 'dash' => '', //self::LINE_STYLE_DASH_SOLID, > 'cap' => '', //self::LINE_STYLE_CAP_FLAT, > 'join' => '', //self::LINE_STYLE_JOIN_BEVEL, > 'arrow' => [ > 'head' => [ > 'type' => '', //self::LINE_STYLE_ARROW_TYPE_NOARROW, > 'size' => '', //self::LINE_STYLE_ARROW_SIZE_5, > 'w' => '', > 'len' => '', > ], > 'end' => [ > 'type' => '', //self::LINE_STYLE_ARROW_TYPE_NOARROW, > 'size' => '', //self::LINE_STYLE_ARROW_SIZE_8, > 'w' => '', > 'len' => '', > ], > ], > ]; > > public function copyLineStyles(self $otherProperties): void > { > $this->lineStyleProperties = $otherProperties->lineStyleProperties; > $this->lineColor = $otherProperties->lineColor; > $this->glowSize = $otherProperties->glowSize; > $this->glowColor = $otherProperties->glowColor; > $this->softEdges = $otherProperties->softEdges; > $this->shadowProperties = $otherProperties->shadowProperties; > } > > public function getLineColor(): ChartColor > { > return $this->lineColor; > } > > /** > * Set Line Color Properties. > * > * @param string $value > * @param ?int $alpha > * @param ?string $colorType > */ > public function setLineColorProperties($value, $alpha = null, $colorType = null): void > { > $this->activateObject(); > $this->lineColor->setColorPropertiesArray( > $this->setColorProperties( > $value, > $alpha, > $colorType > ) > ); > } > > /** > * Get Line Color Property. > * > * @param string $propertyName > * > * @return null|int|string > */ > public function getLineColorProperty($propertyName) > { > return $this->lineColor->getColorProperty($propertyName); > } > > /** > * Set Line Style Properties. > * > * @param null|float|int|string $lineWidth > * @param string $compoundType > * @param string $dashType > * @param string $capType > * @param string $joinType > * @param string $headArrowType > * @param string $headArrowSize > * @param string $endArrowType > * @param string $endArrowSize > * @param string $headArrowWidth > * @param string $headArrowLength > * @param string $endArrowWidth > * @param string $endArrowLength > */ > public function setLineStyleProperties($lineWidth = null, $compoundType = '', $dashType = '', $capType = '', $joinType = '', $headArrowType = '', $headArrowSize = '', $endArrowType = '', $endArrowSize = '', $headArrowWidth = '', $headArrowLength = '', $endArrowWidth = '', $endArrowLength = ''): void > { > $this->activateObject(); > if (is_numeric($lineWidth)) { > $this->lineStyleProperties['width'] = $lineWidth; > } > if ($compoundType !== '') { > $this->lineStyleProperties['compound'] = $compoundType; > } > if ($dashType !== '') { > $this->lineStyleProperties['dash'] = $dashType; > } > if ($capType !== '') { > $this->lineStyleProperties['cap'] = $capType; > } > if ($joinType !== '') { > $this->lineStyleProperties['join'] = $joinType; > } > if ($headArrowType !== '') { > $this->lineStyleProperties['arrow']['head']['type'] = $headArrowType; > } > if (array_key_exists($headArrowSize, self::ARROW_SIZES)) { > $this->lineStyleProperties['arrow']['head']['size'] = $headArrowSize; > $this->lineStyleProperties['arrow']['head']['w'] = self::ARROW_SIZES[$headArrowSize]['w']; > $this->lineStyleProperties['arrow']['head']['len'] = self::ARROW_SIZES[$headArrowSize]['len']; > } > if ($endArrowType !== '') { > $this->lineStyleProperties['arrow']['end']['type'] = $endArrowType; > } > if (array_key_exists($endArrowSize, self::ARROW_SIZES)) { > $this->lineStyleProperties['arrow']['end']['size'] = $endArrowSize; > $this->lineStyleProperties['arrow']['end']['w'] = self::ARROW_SIZES[$endArrowSize]['w']; > $this->lineStyleProperties['arrow']['end']['len'] = self::ARROW_SIZES[$endArrowSize]['len']; > } > if ($headArrowWidth !== '') { > $this->lineStyleProperties['arrow']['head']['w'] = $headArrowWidth; > } > if ($headArrowLength !== '') { > $this->lineStyleProperties['arrow']['head']['len'] = $headArrowLength; > } > if ($endArrowWidth !== '') { > $this->lineStyleProperties['arrow']['end']['w'] = $endArrowWidth; > } > if ($endArrowLength !== '') { > $this->lineStyleProperties['arrow']['end']['len'] = $endArrowLength; > } > } > > public function getLineStyleArray(): array > { > return $this->lineStyleProperties; > } > > public function setLineStyleArray(array $lineStyleProperties = []): self > { > $this->activateObject(); > $this->lineStyleProperties['width'] = $lineStyleProperties['width'] ?? null; > $this->lineStyleProperties['compound'] = $lineStyleProperties['compound'] ?? ''; > $this->lineStyleProperties['dash'] = $lineStyleProperties['dash'] ?? ''; > $this->lineStyleProperties['cap'] = $lineStyleProperties['cap'] ?? ''; > $this->lineStyleProperties['join'] = $lineStyleProperties['join'] ?? ''; > $this->lineStyleProperties['arrow']['head']['type'] = $lineStyleProperties['arrow']['head']['type'] ?? ''; > $this->lineStyleProperties['arrow']['head']['size'] = $lineStyleProperties['arrow']['head']['size'] ?? ''; > $this->lineStyleProperties['arrow']['head']['w'] = $lineStyleProperties['arrow']['head']['w'] ?? ''; > $this->lineStyleProperties['arrow']['head']['len'] = $lineStyleProperties['arrow']['head']['len'] ?? ''; > $this->lineStyleProperties['arrow']['end']['type'] = $lineStyleProperties['arrow']['end']['type'] ?? ''; > $this->lineStyleProperties['arrow']['end']['size'] = $lineStyleProperties['arrow']['end']['size'] ?? ''; > $this->lineStyleProperties['arrow']['end']['w'] = $lineStyleProperties['arrow']['end']['w'] ?? ''; > $this->lineStyleProperties['arrow']['end']['len'] = $lineStyleProperties['arrow']['end']['len'] ?? ''; > > return $this; > } > > /** > * @param mixed $value > */ > public function setLineStyleProperty(string $propertyName, $value): self > { > $this->activateObject(); > $this->lineStyleProperties[$propertyName] = $value; > > return $this; > } > > /** > * Get Line Style Property. > * > * @param array|string $elements > * > * @return string > */ > public function getLineStyleProperty($elements) > { > return $this->getArrayElementsValue($this->lineStyleProperties, $elements); > } > > protected const ARROW_SIZES = [ > 1 => ['w' => 'sm', 'len' => 'sm'], > 2 => ['w' => 'sm', 'len' => 'med'], > 3 => ['w' => 'sm', 'len' => 'lg'], > 4 => ['w' => 'med', 'len' => 'sm'], > 5 => ['w' => 'med', 'len' => 'med'], > 6 => ['w' => 'med', 'len' => 'lg'], > 7 => ['w' => 'lg', 'len' => 'sm'], > 8 => ['w' => 'lg', 'len' => 'med'], > 9 => ['w' => 'lg', 'len' => 'lg'], > ]; > > /** > * Get Line Style Arrow Size. > * > * @param int $arraySelector > * @param string $arrayKaySelector > * > * @return string > */ > protected function getLineStyleArrowSize($arraySelector, $arrayKaySelector) > { > return self::ARROW_SIZES[$arraySelector][$arrayKaySelector] ?? ''; > } > > /** > * Get Line Style Arrow Parameters. > * > * @param string $arrowSelector > * @param string $propertySelector > * > * @return string > */ > public function getLineStyleArrowParameters($arrowSelector, $propertySelector) > { > return $this->getLineStyleArrowSize($this->lineStyleProperties['arrow'][$arrowSelector]['size'], $propertySelector); > } > > /** > * Get Line Style Arrow Width. > * > * @param string $arrow > * > * @return string > */ > public function getLineStyleArrowWidth($arrow) > { > return $this->getLineStyleProperty(['arrow', $arrow, 'w']); > } > > /** > * Get Line Style Arrow Excel Length. > * > * @param string $arrow > * > * @return string > */ > public function getLineStyleArrowLength($arrow) > { > return $this->getLineStyleProperty(['arrow', $arrow, 'len']);