00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 00002 /* 00003 * This file is part of the libetonyek project. 00004 * 00005 * This Source Code Form is subject to the terms of the Mozilla Public 00006 * License, v. 2.0. If a copy of the MPL was not distributed with this 00007 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 00008 */ 00009 00010 #ifndef KEYTYPES_H_INCLUDED 00011 #define KEYTYPES_H_INCLUDED 00012 00013 #include <deque> 00014 00015 #include <boost/optional.hpp> 00016 00017 #include "libetonyek_utils.h" 00018 #include "KEYObject.h" 00019 #include "KEYPath_fwd.h" 00020 #include "KEYStyle.h" 00021 #include "KEYText_fwd.h" 00022 #include "KEYTypes_fwd.h" 00023 00024 namespace libetonyek 00025 { 00026 00027 struct KEYSize 00028 { 00029 double width; 00030 double height; 00031 00032 KEYSize(); 00033 KEYSize(double w, double h); 00034 }; 00035 00036 struct KEYPosition 00037 { 00038 double x; 00039 double y; 00040 00041 KEYPosition(); 00042 KEYPosition(double x_, double y_); 00043 }; 00044 00045 struct KEYGeometry 00046 { 00047 KEYSize naturalSize; 00048 KEYPosition position; 00049 boost::optional<double> angle; 00050 boost::optional<double> shearXAngle; 00051 boost::optional<double> shearYAngle; 00052 boost::optional<bool> horizontalFlip; 00053 boost::optional<bool> verticalFlip; 00054 boost::optional<bool> aspectRatioLocked; 00055 boost::optional<bool> sizesLocked; 00056 00057 KEYGeometry(); 00058 }; 00059 00060 struct KEYColor 00061 { 00062 double red; 00063 double green; 00064 double blue; 00065 double alpha; 00066 00067 KEYColor(); 00068 KEYColor(double r, double g, double b, double a); 00069 }; 00070 00071 struct KEYPadding 00072 { 00073 boost::optional<int> top; 00074 boost::optional<int> right; 00075 boost::optional<int> bottom; 00076 boost::optional<int> left; 00077 00078 KEYPadding(); 00079 }; 00080 00081 struct KEYLine 00082 { 00083 KEYGeometryPtr_t geometry; 00084 KEYStylePtr_t style; 00085 boost::optional<double> x1; 00086 boost::optional<double> y1; 00087 boost::optional<double> x2; 00088 boost::optional<double> y2; 00089 00090 KEYLine(); 00091 }; 00092 00093 struct KEYData 00094 { 00095 WPXInputStreamPtr_t stream; 00096 boost::optional<std::string> displayName; 00097 boost::optional<int> type; 00098 00099 KEYData(); 00100 }; 00101 00102 struct KEYMediaContent 00103 { 00104 boost::optional<KEYSize> size; 00105 KEYDataPtr_t data; 00106 00107 KEYMediaContent(); 00108 }; 00109 00110 struct KEYBinary 00111 { 00112 boost::optional<KEYSize> size; 00113 boost::optional<std::string> path; 00114 boost::optional<std::string> type; 00115 boost::optional<unsigned> dataSize; 00116 00117 KEYBinary(); 00118 }; 00119 00120 struct KEYImage 00121 { 00122 boost::optional<bool> locked; 00123 KEYGeometryPtr_t geometry; 00124 boost::optional<KEYBinary> binary; 00125 00126 KEYImage(); 00127 }; 00128 00129 struct KEYMedia 00130 { 00131 KEYGeometryPtr_t geometry; 00132 KEYGraphicStylePtr_t style; 00133 boost::optional<bool> placeholder; 00134 boost::optional<KEYSize> placeholderSize; 00135 KEYMediaContentPtr_t content; 00136 00137 KEYMedia(); 00138 }; 00139 00140 struct KEYWrap 00141 { 00142 KEYPathPtr_t path; 00143 KEYGeometryPtr_t geometry; 00144 00145 KEYWrap(); 00146 }; 00147 00148 struct KEYGroup 00149 { 00150 KEYObjectList_t objects; 00151 00152 KEYGroup(); 00153 }; 00154 00155 struct KEYLayer 00156 { 00157 boost::optional<std::string> type; 00158 KEYObjectList_t objects; 00159 00160 KEYLayer(); 00161 }; 00162 00163 struct KEYPlaceholder 00164 { 00165 boost::optional<bool> title; 00166 boost::optional<bool> empty; 00167 KEYPlaceholderStylePtr_t style; 00168 KEYGeometryPtr_t geometry; 00169 KEYTextPtr_t text; 00170 00171 KEYPlaceholder(); 00172 }; 00173 00174 struct KEYStickyNote 00175 { 00176 KEYGeometryPtr_t geometry; 00177 KEYTextPtr_t text; 00178 00179 KEYStickyNote(); 00180 KEYStickyNote(const KEYGeometryPtr_t &geometry, const KEYTextPtr_t &text); 00181 }; 00182 00183 typedef std::deque<KEYStickyNote> KEYStickyNotes_t; 00184 00185 struct KEYTabStop 00186 { 00187 double pos; 00188 00189 explicit KEYTabStop(double pos_); 00190 }; 00191 00192 typedef std::deque<KEYTabStop> KEYTabStops_t; 00193 00194 KEYObjectPtr_t makeObject(const KEYGroupPtr_t &group); 00195 KEYObjectPtr_t makeObject(const KEYImagePtr_t &image); 00196 KEYObjectPtr_t makeObject(const KEYLinePtr_t &line); 00197 KEYObjectPtr_t makeObject(const KEYMediaPtr_t &media); 00198 KEYObjectPtr_t makeObject(const KEYPlaceholderPtr_t &placeholder); 00199 00200 } 00201 00202 #endif // KEYTYPES_H_INCLUDED 00203 00204 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */