source: pro-violet-viettel/sourcecode/application/libraries/PHPExcel/Style/Color.php

Last change on this file was 289, checked in by dungnv, 11 years ago
File size: 12.6 KB
Line 
1<?php
2/**
3 * PHPExcel
4 *
5 * Copyright (c) 2006 - 2014 PHPExcel
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20 *
21 * @category   PHPExcel
22 * @package     PHPExcel_Style
23 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt       LGPL
25 * @version 1.8.0, 2014-03-02
26 */
27
28
29/**
30 * PHPExcel_Style_Color
31 *
32 * @category   PHPExcel
33 * @package     PHPExcel_Style
34 * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */
36class PHPExcel_Style_Color extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable
37{
38        /* Colors */
39        const COLOR_BLACK                                               = 'FF000000';
40        const COLOR_WHITE                                               = 'FFFFFFFF';
41        const COLOR_RED                                                 = 'FFFF0000';
42        const COLOR_DARKRED                                             = 'FF800000';
43        const COLOR_BLUE                                                = 'FF0000FF';
44        const COLOR_DARKBLUE                                    = 'FF000080';
45        const COLOR_GREEN                                               = 'FF00FF00';
46        const COLOR_DARKGREEN                                   = 'FF008000';
47        const COLOR_YELLOW                                              = 'FFFFFF00';
48        const COLOR_DARKYELLOW                                  = 'FF808000';
49
50        /**
51         * Indexed colors array
52         *
53         * @var array
54         */
55        protected static $_indexedColors;
56
57        /**
58         * ARGB - Alpha RGB
59         *
60         * @var string
61         */
62        protected $_argb        = NULL;
63
64        /**
65         * Parent property name
66         *
67         * @var string
68         */
69        protected $_parentPropertyName;
70
71
72        /**
73         * Create a new PHPExcel_Style_Color
74         *
75         * @param       string  $pARGB                  ARGB value for the colour
76         * @param       boolean $isSupervisor   Flag indicating if this is a supervisor or not
77         *                                                                      Leave this value at default unless you understand exactly what
78         *                                                                              its ramifications are
79         * @param       boolean $isConditional  Flag indicating if this is a conditional style or not
80         *                                                                      Leave this value at default unless you understand exactly what
81         *                                                                              its ramifications are
82         */
83        public function __construct($pARGB = PHPExcel_Style_Color::COLOR_BLACK, $isSupervisor = FALSE, $isConditional = FALSE)
84        {
85                //      Supervisor?
86                parent::__construct($isSupervisor);
87
88                //      Initialise values
89                if (!$isConditional) {
90                        $this->_argb = $pARGB;
91                }
92        }
93
94        /**
95         * Bind parent. Only used for supervisor
96         *
97         * @param mixed $parent
98         * @param string $parentPropertyName
99         * @return PHPExcel_Style_Color
100         */
101        public function bindParent($parent, $parentPropertyName=NULL)
102        {
103                $this->_parent = $parent;
104                $this->_parentPropertyName = $parentPropertyName;
105                return $this;
106        }
107
108        /**
109         * Get the shared style component for the currently active cell in currently active sheet.
110         * Only used for style supervisor
111         *
112         * @return PHPExcel_Style_Color
113         */
114        public function getSharedComponent()
115        {
116                switch ($this->_parentPropertyName) {
117                        case '_endColor':
118                                return $this->_parent->getSharedComponent()->getEndColor();             break;
119                        case '_color':
120                                return $this->_parent->getSharedComponent()->getColor();                break;
121                        case '_startColor':
122                                return $this->_parent->getSharedComponent()->getStartColor();   break;
123                }
124        }
125
126        /**
127         * Build style array from subcomponents
128         *
129         * @param array $array
130         * @return array
131         */
132        public function getStyleArray($array)
133        {
134                switch ($this->_parentPropertyName) {
135                        case '_endColor':
136                                $key = 'endcolor';
137                                break;
138                        case '_color':
139                                $key = 'color';
140                                break;
141                        case '_startColor':
142                                $key = 'startcolor';
143                                break;
144
145                }
146                return $this->_parent->getStyleArray(array($key => $array));
147        }
148
149        /**
150         * Apply styles from array
151         *
152         * <code>
153         * $objPHPExcel->getActiveSheet()->getStyle('B2')->getFont()->getColor()->applyFromArray( array('rgb' => '808080') );
154         * </code>
155         *
156         * @param       array   $pStyles        Array containing style information
157         * @throws      PHPExcel_Exception
158         * @return PHPExcel_Style_Color
159         */
160        public function applyFromArray($pStyles = NULL) {
161                if (is_array($pStyles)) {
162                        if ($this->_isSupervisor) {
163                                $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles));
164                        } else {
165                                if (array_key_exists('rgb', $pStyles)) {
166                                        $this->setRGB($pStyles['rgb']);
167                                }
168                                if (array_key_exists('argb', $pStyles)) {
169                                        $this->setARGB($pStyles['argb']);
170                                }
171                        }
172                } else {
173                        throw new PHPExcel_Exception("Invalid style array passed.");
174                }
175                return $this;
176        }
177
178        /**
179         * Get ARGB
180         *
181         * @return string
182         */
183        public function getARGB() {
184                if ($this->_isSupervisor) {
185                        return $this->getSharedComponent()->getARGB();
186                }
187                return $this->_argb;
188        }
189
190        /**
191         * Set ARGB
192         *
193         * @param string $pValue
194         * @return PHPExcel_Style_Color
195         */
196        public function setARGB($pValue = PHPExcel_Style_Color::COLOR_BLACK) {
197                if ($pValue == '') {
198                        $pValue = PHPExcel_Style_Color::COLOR_BLACK;
199                }
200                if ($this->_isSupervisor) {
201                        $styleArray = $this->getStyleArray(array('argb' => $pValue));
202                        $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
203                } else {
204                        $this->_argb = $pValue;
205                }
206                return $this;
207        }
208
209        /**
210         * Get RGB
211         *
212         * @return string
213         */
214        public function getRGB() {
215                if ($this->_isSupervisor) {
216                        return $this->getSharedComponent()->getRGB();
217                }
218                return substr($this->_argb, 2);
219        }
220
221        /**
222         * Set RGB
223         *
224         * @param       string  $pValue RGB value
225         * @return PHPExcel_Style_Color
226         */
227        public function setRGB($pValue = '000000') {
228                if ($pValue == '') {
229                        $pValue = '000000';
230                }
231                if ($this->_isSupervisor) {
232                        $styleArray = $this->getStyleArray(array('argb' => 'FF' . $pValue));
233                        $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
234                } else {
235                        $this->_argb = 'FF' . $pValue;
236                }
237                return $this;
238        }
239
240        /**
241         * Get a specified colour component of an RGB value
242         *
243         * @private
244         * @param       string          $RGB            The colour as an RGB value (e.g. FF00CCCC or CCDDEE
245         * @param       int                     $offset         Position within the RGB value to extract
246         * @param       boolean         $hex            Flag indicating whether the component should be returned as a hex or a
247         *                                                                      decimal value
248         * @return      string          The extracted colour component
249         */
250        private static function _getColourComponent($RGB,$offset,$hex=TRUE) {
251                $colour = substr($RGB, $offset, 2);
252                if (!$hex)
253                        $colour = hexdec($colour);
254                return $colour;
255        }
256
257        /**
258         * Get the red colour component of an RGB value
259         *
260         * @param       string          $RGB            The colour as an RGB value (e.g. FF00CCCC or CCDDEE
261         * @param       boolean         $hex            Flag indicating whether the component should be returned as a hex or a
262         *                                                                      decimal value
263         * @return      string          The red colour component
264         */
265        public static function getRed($RGB,$hex=TRUE) {
266                return self::_getColourComponent($RGB, strlen($RGB) - 6, $hex);
267        }
268
269        /**
270         * Get the green colour component of an RGB value
271         *
272         * @param       string          $RGB            The colour as an RGB value (e.g. FF00CCCC or CCDDEE
273         * @param       boolean         $hex            Flag indicating whether the component should be returned as a hex or a
274         *                                                                      decimal value
275         * @return      string          The green colour component
276         */
277        public static function getGreen($RGB,$hex=TRUE) {
278                return self::_getColourComponent($RGB, strlen($RGB) - 4, $hex);
279        }
280
281        /**
282         * Get the blue colour component of an RGB value
283         *
284         * @param       string          $RGB            The colour as an RGB value (e.g. FF00CCCC or CCDDEE
285         * @param       boolean         $hex            Flag indicating whether the component should be returned as a hex or a
286         *                                                                      decimal value
287         * @return      string          The blue colour component
288         */
289        public static function getBlue($RGB,$hex=TRUE) {
290                return self::_getColourComponent($RGB, strlen($RGB) - 2, $hex);
291        }
292
293        /**
294         * Adjust the brightness of a color
295         *
296         * @param       string          $hex    The colour as an RGBA or RGB value (e.g. FF00CCCC or CCDDEE)
297         * @param       float           $adjustPercentage       The percentage by which to adjust the colour as a float from -1 to 1
298         * @return      string          The adjusted colour as an RGBA or RGB value (e.g. FF00CCCC or CCDDEE)
299         */
300        public static function changeBrightness($hex, $adjustPercentage) {
301                $rgba = (strlen($hex) == 8);
302
303                $red    = self::getRed($hex, FALSE);
304                $green  = self::getGreen($hex, FALSE);
305                $blue   = self::getBlue($hex, FALSE);
306                if ($adjustPercentage > 0) {
307                        $red    += (255 - $red) * $adjustPercentage;
308                        $green  += (255 - $green) * $adjustPercentage;
309                        $blue   += (255 - $blue) * $adjustPercentage;
310                } else {
311                        $red    += $red * $adjustPercentage;
312                        $green  += $green * $adjustPercentage;
313                        $blue   += $blue * $adjustPercentage;
314                }
315
316                if ($red < 0) $red = 0;
317                elseif ($red > 255) $red = 255;
318                if ($green < 0) $green = 0;
319                elseif ($green > 255) $green = 255;
320                if ($blue < 0) $blue = 0;
321                elseif ($blue > 255) $blue = 255;
322
323                $rgb = strtoupper(      str_pad(dechex($red), 2, '0', 0) .
324                                                        str_pad(dechex($green), 2, '0', 0) .
325                                                        str_pad(dechex($blue), 2, '0', 0)
326                                                 );
327                return (($rgba) ? 'FF' : '') . $rgb;
328        }
329
330        /**
331         * Get indexed color
332         *
333         * @param       int                     $pIndex                 Index entry point into the colour array
334         * @param       boolean         $background             Flag to indicate whether default background or foreground colour
335         *                                                                                      should be returned if the indexed colour doesn't exist
336         * @return      PHPExcel_Style_Color
337         */
338        public static function indexedColor($pIndex, $background=FALSE) {
339                // Clean parameter
340                $pIndex = intval($pIndex);
341
342                // Indexed colors
343                if (is_null(self::$_indexedColors)) {
344                        self::$_indexedColors = array(
345                                        1       => 'FF000000',  //      System Colour #1 - Black
346                                        2       => 'FFFFFFFF',  //      System Colour #2 - White
347                                        3       => 'FFFF0000',  //      System Colour #3 - Red
348                                        4       => 'FF00FF00',  //      System Colour #4 - Green
349                                        5       => 'FF0000FF',  //      System Colour #5 - Blue
350                                        6       => 'FFFFFF00',  //      System Colour #6 - Yellow
351                                        7       => 'FFFF00FF',  //      System Colour #7- Magenta
352                                        8       => 'FF00FFFF',  //      System Colour #8- Cyan
353                                        9       => 'FF800000',  //      Standard Colour #9
354                                        10      => 'FF008000',  //      Standard Colour #10
355                                        11      => 'FF000080',  //      Standard Colour #11
356                                        12      => 'FF808000',  //      Standard Colour #12
357                                        13      => 'FF800080',  //      Standard Colour #13
358                                        14      => 'FF008080',  //      Standard Colour #14
359                                        15      => 'FFC0C0C0',  //      Standard Colour #15
360                                        16      => 'FF808080',  //      Standard Colour #16
361                                        17      => 'FF9999FF',  //      Chart Fill Colour #17
362                                        18      => 'FF993366',  //      Chart Fill Colour #18
363                                        19      => 'FFFFFFCC',  //      Chart Fill Colour #19
364                                        20      => 'FFCCFFFF',  //      Chart Fill Colour #20
365                                        21      => 'FF660066',  //      Chart Fill Colour #21
366                                        22      => 'FFFF8080',  //      Chart Fill Colour #22
367                                        23      => 'FF0066CC',  //      Chart Fill Colour #23
368                                        24      => 'FFCCCCFF',  //      Chart Fill Colour #24
369                                        25      => 'FF000080',  //      Chart Line Colour #25
370                                        26      => 'FFFF00FF',  //      Chart Line Colour #26
371                                        27      => 'FFFFFF00',  //      Chart Line Colour #27
372                                        28      => 'FF00FFFF',  //      Chart Line Colour #28
373                                        29      => 'FF800080',  //      Chart Line Colour #29
374                                        30      => 'FF800000',  //      Chart Line Colour #30
375                                        31      => 'FF008080',  //      Chart Line Colour #31
376                                        32      => 'FF0000FF',  //      Chart Line Colour #32
377                                        33      => 'FF00CCFF',  //      Standard Colour #33
378                                        34      => 'FFCCFFFF',  //      Standard Colour #34
379                                        35      => 'FFCCFFCC',  //      Standard Colour #35
380                                        36      => 'FFFFFF99',  //      Standard Colour #36
381                                        37      => 'FF99CCFF',  //      Standard Colour #37
382                                        38      => 'FFFF99CC',  //      Standard Colour #38
383                                        39      => 'FFCC99FF',  //      Standard Colour #39
384                                        40      => 'FFFFCC99',  //      Standard Colour #40
385                                        41      => 'FF3366FF',  //      Standard Colour #41
386                                        42      => 'FF33CCCC',  //      Standard Colour #42
387                                        43      => 'FF99CC00',  //      Standard Colour #43
388                                        44      => 'FFFFCC00',  //      Standard Colour #44
389                                        45      => 'FFFF9900',  //      Standard Colour #45
390                                        46      => 'FFFF6600',  //      Standard Colour #46
391                                        47      => 'FF666699',  //      Standard Colour #47
392                                        48      => 'FF969696',  //      Standard Colour #48
393                                        49      => 'FF003366',  //      Standard Colour #49
394                                        50      => 'FF339966',  //      Standard Colour #50
395                                        51      => 'FF003300',  //      Standard Colour #51
396                                        52      => 'FF333300',  //      Standard Colour #52
397                                        53      => 'FF993300',  //      Standard Colour #53
398                                        54      => 'FF993366',  //      Standard Colour #54
399                                        55      => 'FF333399',  //      Standard Colour #55
400                                        56      => 'FF333333'   //      Standard Colour #56
401                                );
402                }
403
404                if (array_key_exists($pIndex, self::$_indexedColors)) {
405                        return new PHPExcel_Style_Color(self::$_indexedColors[$pIndex]);
406                }
407
408                if ($background) {
409                        return new PHPExcel_Style_Color('FFFFFFFF');
410                }
411                return new PHPExcel_Style_Color('FF000000');
412        }
413
414        /**
415         * Get hash code
416         *
417         * @return string       Hash code
418         */
419        public function getHashCode() {
420                if ($this->_isSupervisor) {
421                        return $this->getSharedComponent()->getHashCode();
422                }
423                return md5(
424                          $this->_argb
425                        . __CLASS__
426                );
427        }
428
429}
Note: See TracBrowser for help on using the repository browser.