summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp
index 3ddd7b7..58192d3 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.cpp
+++ b/noncore/graphics/drawpad/drawpadcanvas.cpp
@@ -68,192 +68,194 @@ DrawPadCanvasXmlHandler::~DrawPadCanvasXmlHandler()
68} 68}
69 69
70QList<QPixmap> DrawPadCanvasXmlHandler::pixmaps() 70QList<QPixmap> DrawPadCanvasXmlHandler::pixmaps()
71{ 71{
72 return m_pixmaps; 72 return m_pixmaps;
73} 73}
74 74
75bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName, 75bool DrawPadCanvasXmlHandler::startElement(const QString& namespaceURI, const QString& localName,
76 const QString& qName, const QXmlAttributes& atts) 76 const QString& qName, const QXmlAttributes& atts)
77{ 77{
78 Q_CONST_UNUSED(namespaceURI) 78 Q_CONST_UNUSED(namespaceURI)
79 Q_CONST_UNUSED(localName) 79 Q_CONST_UNUSED(localName)
80 80
81 if (qName.compare("data") == 0) { 81 if (qName.compare("data") == 0) {
82 m_state = InData; 82 m_state = InData;
83 m_dataLenght = atts.value("length").toULong(); 83 m_dataLenght = atts.value("length").toULong();
84 m_dataFormat = atts.value("format"); 84 m_dataFormat = atts.value("format");
85 85
86 if (m_dataFormat.isEmpty()) { 86 if (m_dataFormat.isEmpty()) {
87 m_dataFormat = "XPM"; 87 m_dataFormat = "XPM";
88 } 88 }
89 } 89 }
90 90
91 return true; 91 return true;
92} 92}
93 93
94bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName, 94bool DrawPadCanvasXmlHandler::endElement(const QString& namespaceURI, const QString& localName,
95 const QString& qName) 95 const QString& qName)
96{ 96{
97 Q_CONST_UNUSED(namespaceURI) 97 Q_CONST_UNUSED(namespaceURI)
98 Q_CONST_UNUSED(localName) 98 Q_CONST_UNUSED(localName)
99 99
100 if (qName.compare("data") == 0) { 100 if (qName.compare("data") == 0) {
101 m_state = Unknown; 101 m_state = Unknown;
102 } 102 }
103 103
104 return true; 104 return true;
105} 105}
106 106
107bool DrawPadCanvasXmlHandler::characters(const QString& ch) 107bool DrawPadCanvasXmlHandler::characters(const QString& ch)
108{ 108{
109 if (m_state == InData) { 109 if (m_state == InData) {
110 QByteArray byteArray(ch.length() / 2); 110 QByteArray byteArray(ch.length() / 2);
111 111
112 for (int i = 0; i < (int)ch.length() / 2; i++) { 112 for (int i = 0; i < (int)ch.length() / 2; i++) {
113 char h = ch[2 * i].latin1(); 113 char h = ch[2 * i].latin1();
114 char l = ch[2 * i + 1].latin1(); 114 char l = ch[2 * i + 1].latin1();
115 uchar r = 0; 115 uchar r = 0;
116 116
117 if (h <= '9') { 117 if (h <= '9') {
118 r += h - '0'; 118 r += h - '0';
119 } else { 119 } else {
120 r += h - 'a' + 10; 120 r += h - 'a' + 10;
121 } 121 }
122 122
123 r = r << 4; 123 r = r << 4;
124 124
125 if (l <= '9') { 125 if (l <= '9') {
126 r += l - '0'; 126 r += l - '0';
127 } else { 127 } else {
128 r += l - 'a' + 10; 128 r += l - 'a' + 10;
129 } 129 }
130 130
131 byteArray[i] = r; 131 byteArray[i] = r;
132 } 132 }
133 133
134 134
135 QImage image; 135 QImage image;
136 136
137 if (m_dataFormat == "XPM") { 137 if (m_dataFormat == "XPM") {
138 if (m_dataLenght < ch.length() * 5) { 138 if (m_dataLenght < ch.length() * 5) {
139 m_dataLenght = ch.length() * 5; 139 m_dataLenght = ch.length() * 5;
140 } 140 }
141 141
142 QByteArray byteArrayUnzipped(m_dataLenght); 142 QByteArray byteArrayUnzipped(m_dataLenght);
143 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size()); 143 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size());
144 144
145 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat); 145 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat);
146 } else { 146 } else {
147 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat); 147 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
148 } 148 }
149 149
150 QPixmap* pixmap = new QPixmap(image.width(), image.height()); 150 QPixmap* pixmap = new QPixmap(image.width(), image.height());
151 pixmap->convertFromImage(image); 151 pixmap->convertFromImage(image);
152 m_pixmaps.append(pixmap); 152 m_pixmaps.append(pixmap);
153 } 153 }
154 154
155 return true; 155 return true;
156} 156}
157 157
158DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name) 158DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name)
159 : QScrollView(parent, name) 159 : QScrollView(parent, name)
160{ 160{
161 m_pDrawPad = drawPad; 161 m_pDrawPad = drawPad;
162 m_pages.setAutoDelete(true); 162 m_pages.setAutoDelete(true);
163 m_pageBackups.setAutoDelete(true); 163 m_pageBackups.setAutoDelete(true);
164
165 viewport()->setBackgroundMode(QWidget::NoBackground);
164} 166}
165 167
166DrawPadCanvas::~DrawPadCanvas() 168DrawPadCanvas::~DrawPadCanvas()
167{ 169{
168} 170}
169 171
170void DrawPadCanvas::load(QIODevice* ioDevice) 172void DrawPadCanvas::load(QIODevice* ioDevice)
171{ 173{
172 QTextStream textStream(ioDevice); 174 QTextStream textStream(ioDevice);
173 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 175 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
174 176
175 QXmlInputSource xmlInputSource(textStream); 177 QXmlInputSource xmlInputSource(textStream);
176 QXmlSimpleReader xmlSimpleReader; 178 QXmlSimpleReader xmlSimpleReader;
177 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler; 179 DrawPadCanvasXmlHandler drawPadCanvasXmlHandler;
178 180
179 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); 181 xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler);
180 xmlSimpleReader.parse(xmlInputSource); 182 xmlSimpleReader.parse(xmlInputSource);
181 183
182 m_pages = drawPadCanvasXmlHandler.pixmaps(); 184 m_pages = drawPadCanvasXmlHandler.pixmaps();
183 185
184 if (m_pages.isEmpty()) { 186 if (m_pages.isEmpty()) {
185 m_pages.append(new QPixmap(contentsRect().size())); 187 m_pages.append(new QPixmap(contentsRect().size()));
186 m_pages.current()->fill(Qt::white); 188 m_pages.current()->fill(Qt::white);
187 } 189 }
188 190
189 m_pageBackups.clear(); 191 m_pageBackups.clear();
190 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 192 m_pageBackups.append(new QPixmap(*(m_pages.current())));
191 193
192 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 194 resizeContents(m_pages.current()->width(), m_pages.current()->height());
193 viewport()->update(); 195 viewport()->update();
194 196
195 emit pagesChanged(); 197 emit pagesChanged();
196 emit pageBackupsChanged(); 198 emit pageBackupsChanged();
197} 199}
198 200
199void DrawPadCanvas::initialPage() 201void DrawPadCanvas::initialPage()
200{ 202{
201 m_pages.append(new QPixmap(236, 232)); 203 m_pages.append(new QPixmap(236, 232));
202 m_pages.current()->fill(Qt::white); 204 m_pages.current()->fill(Qt::white);
203 205
204 m_pageBackups.clear(); 206 m_pageBackups.clear();
205 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 207 m_pageBackups.append(new QPixmap(*(m_pages.current())));
206 208
207 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 209 resizeContents(m_pages.current()->width(), m_pages.current()->height());
208 viewport()->update(); 210 viewport()->update();
209 211
210 emit pagesChanged(); 212 emit pagesChanged();
211 emit pageBackupsChanged(); 213 emit pageBackupsChanged();
212} 214}
213 215
214void DrawPadCanvas::save(QIODevice* ioDevice) 216void DrawPadCanvas::save(QIODevice* ioDevice)
215{ 217{
216 QTextStream textStream(ioDevice); 218 QTextStream textStream(ioDevice);
217 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 219 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
218 220
219 textStream << "<drawpad>" << endl; 221 textStream << "<drawpad>" << endl;
220 textStream << " <images>" << endl; 222 textStream << " <images>" << endl;
221 223
222 QListIterator<QPixmap> bufferIterator(m_pages); 224 QListIterator<QPixmap> bufferIterator(m_pages);
223 225
224 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { 226 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) {
225 textStream << " <image>" << endl; 227 textStream << " <image>" << endl;
226 228
227 QImage image = bufferIterator.current()->convertToImage(); 229 QImage image = bufferIterator.current()->convertToImage();
228 QByteArray byteArray; 230 QByteArray byteArray;
229 QBuffer buffer(byteArray); 231 QBuffer buffer(byteArray);
230 QImageIO imageIO(&buffer, "PNG"); 232 QImageIO imageIO(&buffer, "PNG");
231 233
232 buffer.open(IO_WriteOnly); 234 buffer.open(IO_WriteOnly);
233 imageIO.setImage(image); 235 imageIO.setImage(image);
234 imageIO.write(); 236 imageIO.write();
235 buffer.close(); 237 buffer.close();
236 238
237 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">"; 239 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">";
238 240
239 static const char hexchars[] = "0123456789abcdef"; 241 static const char hexchars[] = "0123456789abcdef";
240 242
241 for (int i = 0; i < (int)byteArray.size(); i++ ) { 243 for (int i = 0; i < (int)byteArray.size(); i++ ) {
242 uchar s = (uchar)byteArray[i]; 244 uchar s = (uchar)byteArray[i];
243 textStream << hexchars[s >> 4]; 245 textStream << hexchars[s >> 4];
244 textStream << hexchars[s & 0x0f]; 246 textStream << hexchars[s & 0x0f];
245 } 247 }
246 248
247 textStream << "</data>" << endl; 249 textStream << "</data>" << endl;
248 textStream << " </image>" << endl; 250 textStream << " </image>" << endl;
249 } 251 }
250 252
251 textStream << " </images>" << endl; 253 textStream << " </images>" << endl;
252 textStream << "</drawpad>"; 254 textStream << "</drawpad>";
253} 255}
254 256
255void DrawPadCanvas::importPage(const QString& fileName) 257void DrawPadCanvas::importPage(const QString& fileName)
256{ 258{
257 QPixmap* importedPixmap = new QPixmap(); 259 QPixmap* importedPixmap = new QPixmap();
258 260
259 importedPixmap->load(fileName); 261 importedPixmap->load(fileName);