driver()->handleInput($this->font->color()); if ($this->font->hasStrokeEffect() && $color->isTransparent()) { throw new ColorException( 'The text color must be fully opaque when using the stroke effect.' ); } return $color; } /** * Decode outline stroke color * * @throws RuntimeException * @throws ColorException * @return ColorInterface */ protected function strokeColor(): ColorInterface { $color = $this->driver()->handleInput($this->font->strokeColor()); if ($color->isTransparent()) { throw new ColorException( 'The stroke color must be fully opaque.' ); } return $color; } /** * Return array of offset points to draw text stroke effect below the actual text * * @param FontInterface $font * @return array */ protected function strokeOffsets(FontInterface $font): array { $offsets = []; if ($font->strokeWidth() <= 0) { return $offsets; } for ($x = $font->strokeWidth() * -1; $x <= $font->strokeWidth(); $x++) { for ($y = $font->strokeWidth() * -1; $y <= $font->strokeWidth(); $y++) { $offsets[] = new Point($x, $y); } } return $offsets; } }