Skip to content

Commit a84e729

Browse files
committed
Merge pull request #215 from Progi1984/featAlphaChannel
#203 : Implement alpha channel to Fill
2 parents bd86d7c + 8880507 commit a84e729

File tree

6 files changed

+60
-131
lines changed

6 files changed

+60
-131
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
- ODPresentation & PowerPoint2007 Writer : Support for video - @Progi1984 GH-123
2727
- ODPresentation & PowerPoint2007 Writer : Support for Visibility for slides - @Progi1984
2828
- PowerPoint2007 Writer : Presentation with predefined View Type - @Progi1984 GH-120
29+
- PowerPoint2007 Writer : Implement alpha channel to Fills - @Dayjo GH-203 / @Progi1984 GH-215
2930

3031
## 0.6.0 - 2016-01-24
3132

src/PhpPresentation/Style/Color.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public function getAlpha()
9797
$alpha = 100;
9898
if (strlen($this->argb) >= 6) {
9999
$dec = hexdec(substr($this->argb, 0, 2));
100-
$alpha = number_format(( $dec/255 ) * 100, 2);
100+
$alpha = number_format(($dec/255) * 100, 2);
101101
}
102102
return $alpha;
103103
}

src/PhpPresentation/Writer/PowerPoint2007/AbstractDecoratorWriter.php

Lines changed: 30 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use PhpOffice\Common\Drawing as CommonDrawing;
66
use PhpOffice\Common\XMLWriter;
77
use PhpOffice\PhpPresentation\Style\Border;
8+
use PhpOffice\PhpPresentation\Style\Color;
89
use PhpOffice\PhpPresentation\Style\Fill;
910
use PhpOffice\PhpPresentation\Style\Outline;
1011

@@ -76,12 +77,7 @@ protected function writeBorder(XMLWriter $objWriter, Border $pBorder, $pElementN
7677
} else {
7778
// a:solidFill
7879
$objWriter->startElement('a:solidFill');
79-
80-
// a:srgbClr
81-
$objWriter->startElement('a:srgbClr');
82-
$objWriter->writeAttribute('val', $pBorder->getColor()->getRGB());
83-
$objWriter->endElement();
84-
80+
$this->writeColor($objWriter, $pBorder->getColor());
8581
$objWriter->endElement();
8682
}
8783

@@ -110,6 +106,29 @@ protected function writeBorder(XMLWriter $objWriter, Border $pBorder, $pElementN
110106
$objWriter->endElement();
111107
}
112108

109+
/**
110+
* @param XMLWriter $objWriter
111+
* @param Color $color
112+
* @param int|null $alpha
113+
*/
114+
protected function writeColor(XMLWriter $objWriter, Color $color, $alpha = null)
115+
{
116+
if (is_null($alpha)) {
117+
$alpha = $color->getAlpha();
118+
}
119+
120+
// a:srgbClr
121+
$objWriter->startElement('a:srgbClr');
122+
$objWriter->writeAttribute('val', $color->getRGB());
123+
124+
// a:alpha
125+
$objWriter->startElement('a:alpha');
126+
$objWriter->writeAttribute('val', $alpha * 1000);
127+
$objWriter->endElement();
128+
129+
$objWriter->endElement();
130+
}
131+
113132
/**
114133
* Write Fill
115134
*
@@ -151,18 +170,7 @@ protected function writeSolidFill(XMLWriter $objWriter, Fill $pFill)
151170
{
152171
// a:gradFill
153172
$objWriter->startElement('a:solidFill');
154-
155-
// srgbClr
156-
$objWriter->startElement('a:srgbClr');
157-
$objWriter->writeAttribute('val', $pFill->getStartColor()->getRGB());
158-
159-
// a:alpha
160-
$objWriter->startElement('a:alpha');
161-
$objWriter->writeAttribute('val', $pFill->getStartColor()->getAlpha() * 1000);
162-
$objWriter->endElement();
163-
164-
$objWriter->endElement();
165-
173+
$this->writeColor($objWriter, $pFill->getStartColor());
166174
$objWriter->endElement();
167175
}
168176

@@ -183,35 +191,13 @@ protected function writeGradientFill(XMLWriter $objWriter, Fill $pFill)
183191
// a:gs
184192
$objWriter->startElement('a:gs');
185193
$objWriter->writeAttribute('pos', '0');
186-
187-
// srgbClr
188-
$objWriter->startElement('a:srgbClr');
189-
$objWriter->writeAttribute('val', $pFill->getStartColor()->getRGB());
190-
191-
// a:alpha
192-
$objWriter->startElement('a:alpha');
193-
$objWriter->writeAttribute('val', $pFill->getStartColor()->getAlpha() * 1000);
194-
$objWriter->endElement();
195-
196-
$objWriter->endElement();
197-
194+
$this->writeColor($objWriter, $pFill->getStartColor());
198195
$objWriter->endElement();
199196

200197
// a:gs
201198
$objWriter->startElement('a:gs');
202199
$objWriter->writeAttribute('pos', '100000');
203-
204-
// srgbClr
205-
$objWriter->startElement('a:srgbClr');
206-
$objWriter->writeAttribute('val', $pFill->getEndColor()->getRGB());
207-
208-
// a:alpha
209-
$objWriter->startElement('a:alpha');
210-
$objWriter->writeAttribute('val', $pFill->getEndColor()->getAlpha() * 1000);
211-
$objWriter->endElement();
212-
213-
$objWriter->endElement();
214-
200+
$this->writeColor($objWriter, $pFill->getEndColor());
215201
$objWriter->endElement();
216202

217203
$objWriter->endElement();
@@ -240,32 +226,14 @@ protected function writePatternFill(XMLWriter $objWriter, Fill $pFill)
240226
// fgClr
241227
$objWriter->startElement('a:fgClr');
242228

243-
// srgbClr
244-
$objWriter->startElement('a:srgbClr');
245-
$objWriter->writeAttribute('val', $pFill->getStartColor()->getRGB());
246-
247-
// a:alpha
248-
$objWriter->startElement('a:alpha');
249-
$objWriter->writeAttribute('val', $pFill->getStartColor()->getAlpha() * 1000);
250-
$objWriter->endElement();
251-
252-
$objWriter->endElement();
229+
$this->writeColor($objWriter, $pFill->getStartColor());
253230

254231
$objWriter->endElement();
255232

256233
// bgClr
257234
$objWriter->startElement('a:bgClr');
258235

259-
// srgbClr
260-
$objWriter->startElement('a:srgbClr');
261-
$objWriter->writeAttribute('val', $pFill->getEndColor()->getRGB());
262-
263-
// a:alpha
264-
$objWriter->startElement('a:alpha');
265-
$objWriter->writeAttribute('val', $pFill->getEndColor()->getAlpha() * 1000);
266-
$objWriter->endElement();
267-
268-
$objWriter->endElement();
236+
$this->writeColor($objWriter, $pFill->getEndColor());
269237

270238
$objWriter->endElement();
271239

src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -165,16 +165,7 @@ public function writeChart(Chart $chart)
165165
$objWriter->writeAttribute('algn', $chart->getShadow()->getAlignment());
166166
$objWriter->writeAttribute('rotWithShape', '0');
167167

168-
// a:srgbClr
169-
$objWriter->startElement('a:srgbClr');
170-
$objWriter->writeAttribute('val', $chart->getShadow()->getColor()->getRGB());
171-
172-
// a:alpha
173-
$objWriter->startElement('a:alpha');
174-
$objWriter->writeAttribute('val', $chart->getShadow()->getAlpha() * 1000);
175-
$objWriter->endElement();
176-
177-
$objWriter->endElement();
168+
$this->writeColor($objWriter, $chart->getShadow()->getColor(), $chart->getShadow()->getAlpha());
178169

179170
$objWriter->endElement();
180171

@@ -447,10 +438,7 @@ protected function writeTitle(XMLWriter $objWriter, Title $subject)
447438
// Font - a:solidFill
448439
$objWriter->startElement('a:solidFill');
449440

450-
// a:srgbClr
451-
$objWriter->startElement('a:srgbClr');
452-
$objWriter->writeAttribute('val', $subject->getFont()->getColor()->getRGB());
453-
$objWriter->endElement();
441+
$this->writeColor($objWriter, $subject->getFont()->getColor());
454442

455443
$objWriter->endElement();
456444

@@ -617,10 +605,7 @@ protected function writeLegend(XMLWriter $objWriter, Legend $subject)
617605
// Font - a:solidFill
618606
$objWriter->startElement('a:solidFill');
619607

620-
// a:srgbClr
621-
$objWriter->startElement('a:srgbClr');
622-
$objWriter->writeAttribute('val', $subject->getFont()->getColor()->getRGB());
623-
$objWriter->endElement();
608+
$this->writeColor($objWriter, $subject->getFont()->getColor());
624609

625610
$objWriter->endElement();
626611

@@ -780,10 +765,7 @@ protected function writeTypeArea(XMLWriter $objWriter, Area $subject, $includeSh
780765
// c:ser > c:dLbls > c:txPr > a:p > a:pPr > a:defRPr > a:solidFill
781766
$objWriter->startElement('a:solidFill');
782767

783-
// c:ser > c:dLbls > c:txPr > a:p > a:pPr > a:defRPr > a:solidFill > a:srgbClr
784-
$objWriter->startElement('a:srgbClr');
785-
$objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
786-
$objWriter->endElement();
768+
$this->writeColor($objWriter, $series->getFont()->getColor());
787769

788770
// c:ser > c:dLbls > c:txPr > a:p > a:pPr > a:defRPr > ## a:solidFill
789771
$objWriter->endElement();
@@ -999,10 +981,7 @@ protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, $includeShee
999981
// Font - a:solidFill
1000982
$objWriter->startElement('a:solidFill');
1001983

1002-
// a:srgbClr
1003-
$objWriter->startElement('a:srgbClr');
1004-
$objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1005-
$objWriter->endElement();
984+
$this->writeColor($objWriter, $series->getFont()->getColor());
1006985

1007986
$objWriter->endElement();
1008987

@@ -1216,10 +1195,7 @@ protected function writeTypeBar3D(XMLWriter $objWriter, Bar3D $subject, $include
12161195
// Font - a:solidFill
12171196
$objWriter->startElement('a:solidFill');
12181197

1219-
// a:srgbClr
1220-
$objWriter->startElement('a:srgbClr');
1221-
$objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1222-
$objWriter->endElement();
1198+
$this->writeColor($objWriter, $series->getFont()->getColor());
12231199

12241200
$objWriter->endElement();
12251201

@@ -1417,10 +1393,7 @@ protected function writeTypePie(XMLWriter $objWriter, Pie $subject, $includeShee
14171393
// Font - a:solidFill
14181394
$objWriter->startElement('a:solidFill');
14191395

1420-
// a:srgbClr
1421-
$objWriter->startElement('a:srgbClr');
1422-
$objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1423-
$objWriter->endElement();
1396+
$this->writeColor($objWriter, $series->getFont()->getColor());
14241397

14251398
$objWriter->endElement();
14261399

@@ -1591,10 +1564,7 @@ protected function writeTypePie3D(XMLWriter $objWriter, Pie3D $subject, $include
15911564
// Font - a:solidFill
15921565
$objWriter->startElement('a:solidFill');
15931566

1594-
// a:srgbClr
1595-
$objWriter->startElement('a:srgbClr');
1596-
$objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1597-
$objWriter->endElement();
1567+
$this->writeColor($objWriter, $series->getFont()->getColor());
15981568

15991569
$objWriter->endElement();
16001570

@@ -1743,10 +1713,7 @@ protected function writeTypeLine(XMLWriter $objWriter, Line $subject, $includeSh
17431713
// Font - a:solidFill
17441714
$objWriter->startElement('a:solidFill');
17451715

1746-
// a:srgbClr
1747-
$objWriter->startElement('a:srgbClr');
1748-
$objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1749-
$objWriter->endElement();
1716+
$this->writeColor($objWriter, $series->getFont()->getColor());
17501717

17511718
$objWriter->endElement();
17521719

@@ -1927,10 +1894,7 @@ protected function writeTypeScatter(XMLWriter $objWriter, Scatter $subject, $inc
19271894
// Font - a:solidFill
19281895
$objWriter->startElement('a:solidFill');
19291896

1930-
// a:srgbClr
1931-
$objWriter->startElement('a:srgbClr');
1932-
$objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
1933-
$objWriter->endElement();
1897+
$this->writeColor($objWriter, $series->getFont()->getColor());
19341898

19351899
$objWriter->endElement();
19361900

@@ -2205,10 +2169,7 @@ protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, $typeAxis)
22052169
// Font - a:solidFill
22062170
$objWriter->startElement('a:solidFill');
22072171

2208-
// a:srgbClr
2209-
$objWriter->startElement('a:srgbClr');
2210-
$objWriter->writeAttribute('val', $oAxis->getFont()->getColor()->getRGB());
2211-
$objWriter->endElement();
2172+
$this->writeColor($objWriter, $oAxis->getFont()->getColor());
22122173

22132174
$objWriter->endElement();
22142175

src/PhpPresentation/Writer/PowerPoint2007/PptSlides.php

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -381,10 +381,7 @@ public function writeSlide(Slide $pSlide)
381381
// a:solidFill
382382
$objWriter->startElement('a:solidFill');
383383

384-
// a:srgbClr
385-
$objWriter->startElement('a:srgbClr');
386-
$objWriter->writeAttribute('val', $oBackground->getColor()->getRGB());
387-
$objWriter->endElement();
384+
$this->writeColor($objWriter, $oBackground->getColor());
388385

389386
// > a:solidFill
390387
$objWriter->endElement();
@@ -1257,10 +1254,7 @@ protected function writeParagraphs(XMLWriter $objWriter, $paragraphs)
12571254
// Color - a:solidFill
12581255
$objWriter->startElement('a:solidFill');
12591256

1260-
// a:srgbClr
1261-
$objWriter->startElement('a:srgbClr');
1262-
$objWriter->writeAttribute('val', $element->getFont()->getColor()->getRGB());
1263-
$objWriter->endElement();
1257+
$this->writeColor($objWriter, $element->getFont()->getColor());
12641258

12651259
$objWriter->endElement();
12661260

@@ -1414,16 +1408,7 @@ protected function writeShadow(XMLWriter $objWriter, Shadow $oShadow)
14141408
$objWriter->writeAttribute('algn', $oShadow->getAlignment());
14151409
$objWriter->writeAttribute('rotWithShape', '0');
14161410

1417-
// a:srgbClr
1418-
$objWriter->startElement('a:srgbClr');
1419-
$objWriter->writeAttribute('val', $oShadow->getColor()->getRGB());
1420-
1421-
// a:alpha
1422-
$objWriter->startElement('a:alpha');
1423-
$objWriter->writeAttribute('val', $oShadow->getAlpha() * 1000);
1424-
$objWriter->endElement();
1425-
1426-
$objWriter->endElement();
1411+
$this->writeColor($objWriter, $oShadow->getColor(), $oShadow->getAlpha());
14271412

14281413
$objWriter->endElement();
14291414

tests/PhpPresentation/Tests/Style/ColorTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,20 @@ public function testConstruct()
3737
$this->assertEquals(Color::COLOR_BLUE, $object->getARGB());
3838
}
3939

40+
/**
41+
* Test Alpha
42+
*/
43+
public function testAlpha()
44+
{
45+
$object = new Color();
46+
$this->assertInstanceOf('PhpOffice\\PhpPresentation\\Style\\Color', $object->setARGB());
47+
$this->assertEquals(100, $object->getAlpha());
48+
$this->assertInstanceOf('PhpOffice\\PhpPresentation\\Style\\Color', $object->setARGB(Color::COLOR_BLUE));
49+
$this->assertEquals(100, $object->getAlpha());
50+
$this->assertInstanceOf('PhpOffice\\PhpPresentation\\Style\\Color', $object->setARGB('AA0000FF'));
51+
$this->assertEquals(66.67, $object->getAlpha());
52+
}
53+
4054
/**
4155
* Test get/set ARGB
4256
*/

0 commit comments

Comments
 (0)