qmjsontype_qcolor.cpp
Go to the documentation of this file.
1 //
2 // QtMark JSON Library
3 //
4 // Copyright (C) 2015 Assured Information Security, Inc.
5 // Author: Rian Quinn <quinnr@ainfosec.com>
6 // Author: Rodney Forbes <forbesr@ainfosec.com>
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 
22 // ============================================================================
23 // Includes
24 // ============================================================================
25 
26 #include <qcolor.h>
27 #include <qmjsontype_qcolor.h>
28 
29 // ============================================================================
30 // QMJsonType<QColor> Implementation
31 // ============================================================================
32 
33 #define COLOR_SPEC_KEY "spec"
34 #define RGB_RED_KEY "red"
35 #define RGB_GREEN_KEY "green"
36 #define RGB_BLUE_KEY "blue"
37 #define RGB_ALPHA_KEY "alpha"
38 #define HSV_HUE_KEY "hue"
39 #define HSV_SAT_KEY "saturation"
40 #define HSV_VALUE_KEY "value"
41 #define HSV_ALPHA_KEY "alpha"
42 #define CMYK_CYAN_KEY "cyan"
43 #define CMYK_MAGENTA_KEY "magenta"
44 #define CMYK_YELLOW_KEY "yellow"
45 #define CMYK_BLACK_KEY "black"
46 #define CMYK_ALPHA_KEY "alpha"
47 #define HSL_HUE_KEY "hue"
48 #define HSL_SAT_KEY "saturation"
49 #define HSL_LIGHT_KEY "light"
50 #define HSL_ALPHA_KEY "alpha"
51 
52 template <>
53 void QM_JSON_EXPORT QMJsonType<QColor>::toComplexJson(const QMPointer<QMJsonObject> &obj)
54 {
55  obj->insert("qmjsontype", "QColor");
56  obj->insert(COLOR_SPEC_KEY, (int32_t)mValue.spec());
57 
58  switch(mValue.spec())
59  {
60  case QColor::Rgb:
61  {
62  obj->insert(RGB_RED_KEY, mValue.red());
63  obj->insert(RGB_GREEN_KEY, mValue.green());
64  obj->insert(RGB_BLUE_KEY, mValue.blue());
65  obj->insert(RGB_ALPHA_KEY, mValue.alpha());
66  break;
67  }
68 
69  case QColor::Hsv:
70  {
71  obj->insert(HSV_HUE_KEY, mValue.hue());
72  obj->insert(HSV_SAT_KEY, mValue.saturation());
73  obj->insert(HSV_VALUE_KEY, mValue.value());
74  obj->insert(HSV_ALPHA_KEY, mValue.alpha());
75  break;
76  }
77 
78  case QColor::Cmyk:
79  {
80  obj->insert(CMYK_CYAN_KEY, mValue.cyan());
81  obj->insert(CMYK_MAGENTA_KEY, mValue.magenta());
82  obj->insert(CMYK_YELLOW_KEY, mValue.yellow());
83  obj->insert(CMYK_BLACK_KEY, mValue.black());
84  obj->insert(CMYK_ALPHA_KEY, mValue.alpha());
85  break;
86  }
87 
88  case QColor::Hsl:
89  {
90  obj->insert(HSL_HUE_KEY, mValue.hslHueF());
91  obj->insert(HSL_SAT_KEY, mValue.hslSaturationF());
92  obj->insert(HSL_LIGHT_KEY, mValue.lightnessF());
93  obj->insert(HSL_ALPHA_KEY, mValue.alphaF());
94  break;
95  }
96 
97  default:
98  break;
99  }
100 }
101 
102 template <>
103 QMPointer<QMJsonValue> QM_JSON_EXPORT QMJsonType<QColor>::fromComplexJson(const QMPointer<QMJsonObject> &obj)
104 {
105  auto color = QColor();
106 
107  if(obj.isNull() == true)
108  return QMPointer<QMJsonValue>(new QMJsonValue(color));
109 
110  switch((int32_t)obj->value(COLOR_SPEC_KEY)->toDouble())
111  {
112  case QColor::Rgb:
113  {
114  color.setRgb(obj->value(RGB_RED_KEY)->toDouble(),
115  obj->value(RGB_GREEN_KEY)->toDouble(),
116  obj->value(RGB_BLUE_KEY)->toDouble(),
117  obj->value(RGB_ALPHA_KEY)->toDouble());
118  break;
119  }
120 
121  case QColor::Hsv:
122  {
123  color.setHsv(obj->value(HSV_HUE_KEY)->toDouble(),
124  obj->value(HSV_SAT_KEY)->toDouble(),
125  obj->value(HSV_VALUE_KEY)->toDouble(),
126  obj->value(HSV_ALPHA_KEY)->toDouble());
127  break;
128  }
129 
130  case QColor::Cmyk:
131  {
132  color.setCmyk(obj->value(CMYK_CYAN_KEY)->toDouble(),
133  obj->value(CMYK_MAGENTA_KEY)->toDouble(),
134  obj->value(CMYK_YELLOW_KEY)->toDouble(),
135  obj->value(CMYK_BLACK_KEY)->toDouble(),
136  obj->value(CMYK_ALPHA_KEY)->toDouble());
137  break;
138  }
139 
140  case QColor::Hsl:
141  {
142  color.setHslF(obj->value(HSL_HUE_KEY)->toDouble(),
143  obj->value(HSL_SAT_KEY)->toDouble(),
144  obj->value(HSL_LIGHT_KEY)->toDouble(),
145  obj->value(HSL_ALPHA_KEY)->toDouble());
146  break;
147  }
148 
149  default:
150  break;
151  }
152 
153  return QMPointer<QMJsonValue>(new QMJsonValue(color));
154 }
#define HSL_HUE_KEY
#define QM_JSON_EXPORT
Definition: qmjsontype.h:36
#define CMYK_MAGENTA_KEY
#define HSV_HUE_KEY
#define HSV_VALUE_KEY
#define HSL_SAT_KEY
#define HSV_SAT_KEY
#define HSL_ALPHA_KEY
#define RGB_BLUE_KEY
#define RGB_GREEN_KEY
#define CMYK_ALPHA_KEY
#define CMYK_YELLOW_KEY
#define CMYK_BLACK_KEY
#define CMYK_CYAN_KEY
#define COLOR_SPEC_KEY
#define RGB_ALPHA_KEY
static QMPointer< QMJsonValue > fromComplexJson(const QMPointer< QMJsonObject > &obj)
#define HSV_ALPHA_KEY
#define RGB_RED_KEY
virtual void toComplexJson(const QMPointer< QMJsonObject > &obj)
Definition: qmjsontype.h:207
#define HSL_LIGHT_KEY