Skip to content

Commit 45fe6d1

Browse files
committed
feat(fav2): moved logic to create icon stack to action
action is used in v1 and v2 endpoints for font-awesome v5 icons
1 parent c77383f commit 45fe6d1

3 files changed

Lines changed: 117 additions & 109 deletions

File tree

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?php
2+
3+
namespace App\Actions\FontAwesome\v5;
4+
5+
use App\Helpers\Encoders\FontAwesome\v5\FontAwesomeV5Encoder;
6+
use Intervention\Image\Facades\Image;
7+
use Lorisleiva\Actions\Concerns\AsAction;
8+
9+
class CreateIconStack
10+
{
11+
use AsAction;
12+
13+
public function handle(array $params, $scale = 1.0, $forceOddSize = false)
14+
{
15+
$size = (data_get($params, 'size') ?: 30) * $scale;
16+
if ($forceOddSize && $size % 2 == 0) {
17+
$size++;
18+
}
19+
20+
// OPEN ICON DEFAULT IMAGE
21+
$img = file_get_contents(resource_path('images/icon.png'));
22+
$img = Image::make($img);
23+
24+
// INPUTS
25+
$icon = data_get($params, 'icon') ?: null;
26+
$on = data_get($params, 'on') ?: $this->getDefaultOnIcon();
27+
28+
// RESIZE THE ICON
29+
$iconSize = data_get($params, 'iconsize') * $scale ?: ($size * 0.3);
30+
$voffset = data_get($params, 'voffset') * $scale ?: 0;
31+
$hoffset = data_get($params, 'hoffset') * $scale ?: 0;
32+
33+
$img->resize($size, $size, function ($constraint) {
34+
$constraint->aspectRatio();
35+
});
36+
37+
$large_color = (data_get($params, 'oncolor') ?: data_get($params, 'color')) ?: '000000';
38+
$img->text($this->getUnicodeCharFromIcon($on), $size / 2, $size / 2, function ($font) use ($on, $size, $large_color) {
39+
$font->file($this->getIconFontPath($on));
40+
$font->size($size * 0.8);
41+
$font->color($large_color);
42+
$font->align('center');
43+
$font->valign('center');
44+
});
45+
46+
$small_color = data_get($params, 'color') ?: null;
47+
$img->text($this->getUnicodeCharFromIcon($icon), ($size / 2) + $hoffset, ($size / 2) + $voffset, function ($font) use ($icon, $iconSize, $large_color, $small_color) {
48+
$font->file($this->getIconFontPath($icon));
49+
$font->size($iconSize);
50+
$font->color($small_color ?: $large_color);
51+
$font->align('center');
52+
$font->valign('center');
53+
});
54+
55+
$label = data_get($params, 'label') ?: null;
56+
$labelOffset = data_get($params, 'labelOffset') ?: 0;
57+
if (! is_null($label)) {
58+
59+
// ADD THE LABEL
60+
$img->text($this->getUnicodeCharFromIcon('fa-circle'), $size * 0.8, $size * 0.8, function ($font) use ($size, $params) {
61+
$font->file($this->getIconFontPath('fa-circle'));
62+
$font->size($size * 0.44);
63+
$font->color(data_get($params, 'labelColor') ?: 'D9534F');
64+
$font->align('center');
65+
$font->valign('center');
66+
});
67+
68+
// ADD THE LABEL TEXT
69+
$img->text($label, $size * 0.8 + $labelOffset, $size * 0.8, function ($font) use ($size, $params) {
70+
$font->file($this->getTextFontPath());
71+
$font->size($size * 0.25);
72+
$font->color(data_get($params, 'labelTextColor') ?: 'FFFFFF');
73+
$font->align('center');
74+
$font->valign('center');
75+
});
76+
}
77+
78+
return $img;
79+
}
80+
81+
protected function getDefaultOnIcon()
82+
{
83+
return 'fa-circle-regular';
84+
}
85+
86+
protected function getIconFontPath($icon)
87+
{
88+
return FontAwesomeV5Encoder::getFile($icon);
89+
}
90+
91+
protected function getTextFontPath()
92+
{
93+
return base_path('resources/fonts/monofonto.ttf');
94+
}
95+
96+
protected function getUnicodeCharFromIcon($icon)
97+
{
98+
return FontAwesomeV5Encoder::getUnicodeFromIcon($icon);
99+
}
100+
}

‎app/Http/Controllers/API/v1/FontAwesome/v5/IconStackController.php‎

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,21 @@
22

33
namespace App\Http\Controllers\API\v1\FontAwesome\v5;
44

5-
use App\Helpers\Encoders\FontAwesome\v5\FontAwesomeV5Encoder;
6-
use App\Http\Controllers\API\v1\FaStackController as Controller;
5+
use App\Actions\FontAwesome\v5\CreateIconStack;
6+
use App\Http\Controllers\Controller as Controller;
7+
use Illuminate\Http\Request;
78

89
class IconStackController extends Controller
910
{
10-
protected function getDefaultOnIcon()
11-
{
12-
return 'fa-circle-regular';
13-
}
11+
const SCALE = 1.0;
1412

15-
protected function getIconFontPath($icon)
16-
{
17-
return FontAwesomeV5Encoder::getFile($icon);
18-
}
13+
const FORCE_ODD_SIZE = false;
1914

20-
protected function getTextFontPath()
15+
public function show(Request $request)
2116
{
22-
return base_path('resources/fonts/monofonto.ttf');
23-
}
17+
$size = $request->get('size') ?: 30;
18+
$img = CreateIconStack::run($request->all(), self::SCALE, self::FORCE_ODD_SIZE);
2419

25-
protected function getUnicodeCharFromIcon($icon)
26-
{
27-
return FontAwesomeV5Encoder::getUnicodeFromIcon($icon);
20+
return $img->response('png');
2821
}
2922
}

‎app/Http/Controllers/API/v2/FontAwesome/v5/IconStackController.php‎

Lines changed: 8 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -2,110 +2,25 @@
22

33
namespace App\Http\Controllers\API\v2\FontAwesome\v5;
44

5+
use App\Actions\FontAwesome\v5\CreateIconStack;
56
use App\Actions\Image\ResizeToHeight;
67
use App\Actions\Image\TrimTransparentBorder;
7-
use App\Helpers\Encoders\FontAwesome\v5\FontAwesomeV5Encoder;
88
use App\Http\Controllers\Controller as Controller;
99
use Illuminate\Http\Request;
10-
use Intervention\Image\Facades\Image;
1110

1211
class IconStackController extends Controller
1312
{
14-
public function show(Request $request)
15-
{
16-
$params = $request->all();
17-
$size = data_get($params, 'size') ?: 30;
18-
$finalSize = $size;
19-
20-
// calculate temp size
21-
// up 2x and make odd for better auto-centering
22-
$size = round($size * 2.0);
23-
if ($size % 2 == 0) {
24-
$size += 1;
25-
}
26-
$params['size'] = $size;
27-
28-
// OPEN ICON DEFAULT IMAGE
29-
$img = file_get_contents(resource_path('images/icon.png'));
30-
$img = Image::make($img);
31-
32-
// INPUTS
33-
$icon = data_get($params, 'icon') ?: null;
34-
$on = data_get($params, 'on') ?: $this->getDefaultOnIcon();
35-
36-
// RESIZE THE ICON
37-
$iconSize = data_get($params, 'iconsize') * 2.0 ?: ($size * 0.3);
38-
$voffset = data_get($params, 'voffset') * 2.0 ?: 0;
39-
$hoffset = data_get($params, 'hoffset') * 2.0 ?: 0;
40-
41-
$img->resize($size, $size, function ($constraint) {
42-
$constraint->aspectRatio();
43-
});
13+
const SCALE = 2.0;
4414

45-
$large_color = (data_get($params, 'oncolor') ?: data_get($params, 'color')) ?: '000000';
46-
$img->text($this->getUnicodeCharFromIcon($on), $size / 2, $size / 2, function ($font) use ($on, $size, $large_color) {
47-
$font->file($this->getIconFontPath($on));
48-
$font->size($size * 0.8);
49-
$font->color($large_color);
50-
$font->align('center');
51-
$font->valign('center');
52-
});
53-
54-
$small_color = data_get($params, 'color') ?: null;
55-
$img->text($this->getUnicodeCharFromIcon($icon), ($size / 2) + $hoffset, ($size / 2) + $voffset, function ($font) use ($icon, $iconSize, $large_color, $small_color) {
56-
$font->file($this->getIconFontPath($icon));
57-
$font->size($iconSize);
58-
$font->color($small_color ?: $large_color);
59-
$font->align('center');
60-
$font->valign('center');
61-
});
62-
63-
$label = data_get($params, 'label') ?: null;
64-
$labelOffset = data_get($params, 'labelOffset') ?: 0;
65-
if (! is_null($label)) {
66-
67-
// ADD THE LABEL
68-
$img->text($this->getUnicodeCharFromIcon('fa-circle'), $size * 0.8, $size * 0.8, function ($font) use ($size, $params) {
69-
$font->file($this->getIconFontPath('fa-circle'));
70-
$font->size($size * 0.44);
71-
$font->color(data_get($params, 'labelColor') ?: 'D9534F');
72-
$font->align('center');
73-
$font->valign('center');
74-
});
75-
76-
// ADD THE LABEL TEXT
77-
$img->text($label, $size * 0.8 + $labelOffset, $size * 0.8, function ($font) use ($size, $params) {
78-
$font->file($this->getTextFontPath());
79-
$font->size($size * 0.25);
80-
$font->color(data_get($params, 'labelTextColor') ?: 'FFFFFF');
81-
$font->align('center');
82-
$font->valign('center');
83-
});
84-
}
15+
const FORCE_ODD_SIZE = true;
8516

17+
public function show(Request $request)
18+
{
19+
$size = $request->get('size') ?: 30;
20+
$img = CreateIconStack::run($request->all(), self::SCALE, self::FORCE_ODD_SIZE);
8621
TrimTransparentBorder::run($img);
87-
ResizeToHeight::run($img, $finalSize);
22+
ResizeToHeight::run($img, $size);
8823

8924
return $img->response('png');
9025
}
91-
92-
protected function getDefaultOnIcon()
93-
{
94-
return 'fa-circle-regular';
95-
}
96-
97-
protected function getIconFontPath($icon)
98-
{
99-
return FontAwesomeV5Encoder::getFile($icon);
100-
}
101-
102-
protected function getTextFontPath()
103-
{
104-
return base_path('resources/fonts/monofonto.ttf');
105-
}
106-
107-
protected function getUnicodeCharFromIcon($icon)
108-
{
109-
return FontAwesomeV5Encoder::getUnicodeFromIcon($icon);
110-
}
11126
}

0 commit comments

Comments
 (0)