summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/drawpad/drawpadcanvas.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp
index b8a1c2e..4e17245 100644
--- a/noncore/graphics/drawpad/drawpadcanvas.cpp
+++ b/noncore/graphics/drawpad/drawpadcanvas.cpp
@@ -110,57 +110,63 @@ bool DrawPadCanvasXmlHandler::characters(const QString& ch)
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 if (m_dataLenght < ch.length() * 5) {
135 m_dataLenght = ch.length() * 5;
136 }
137
138 QByteArray byteArrayUnzipped(m_dataLenght);
139 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size());
140 134
141 QImage image; 135 QImage image;
142 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat); 136
137 if (m_dataFormat == "XPM") {
138 if (m_dataLenght < ch.length() * 5) {
139 m_dataLenght = ch.length() * 5;
140 }
141
142 QByteArray byteArrayUnzipped(m_dataLenght);
143 ::uncompress((uchar*)byteArrayUnzipped.data(), &m_dataLenght, (uchar*)byteArray.data(), byteArray.size());
144
145 image.loadFromData((const uchar*)byteArrayUnzipped.data(), m_dataLenght, m_dataFormat);
146 } else {
147 image.loadFromData((const uchar*)byteArray.data(), m_dataLenght, m_dataFormat);
148 }
143 149
144 QPixmap* pixmap = new QPixmap(image.width(), image.height()); 150 QPixmap* pixmap = new QPixmap(image.width(), image.height());
145 pixmap->convertFromImage(image); 151 pixmap->convertFromImage(image);
146 m_pixmaps.append(pixmap); 152 m_pixmaps.append(pixmap);
147 } 153 }
148 154
149 return true; 155 return true;
150} 156}
151 157
152DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name) 158DrawPadCanvas::DrawPadCanvas(DrawPad* drawPad, QWidget* parent, const char* name)
153 : QScrollView(parent, name) 159 : QScrollView(parent, name)
154{ 160{
155 m_pDrawPad = drawPad; 161 m_pDrawPad = drawPad;
156 m_pages.setAutoDelete(true); 162 m_pages.setAutoDelete(true);
157 m_pageBackups.setAutoDelete(true); 163 m_pageBackups.setAutoDelete(true);
158} 164}
159 165
160DrawPadCanvas::~DrawPadCanvas() 166DrawPadCanvas::~DrawPadCanvas()
161{ 167{
162} 168}
163 169
164void DrawPadCanvas::load(QIODevice* ioDevice) 170void DrawPadCanvas::load(QIODevice* ioDevice)
165{ 171{
166 QTextStream textStream(ioDevice); 172 QTextStream textStream(ioDevice);
@@ -207,58 +213,60 @@ void DrawPadCanvas::initialPage()
207 213
208void DrawPadCanvas::save(QIODevice* ioDevice) 214void DrawPadCanvas::save(QIODevice* ioDevice)
209{ 215{
210 QTextStream textStream(ioDevice); 216 QTextStream textStream(ioDevice);
211 textStream.setCodec(QTextCodec::codecForName("UTF-8")); 217 textStream.setCodec(QTextCodec::codecForName("UTF-8"));
212 218
213 textStream << "<drawpad>" << endl; 219 textStream << "<drawpad>" << endl;
214 textStream << " <images>" << endl; 220 textStream << " <images>" << endl;
215 221
216 QListIterator<QPixmap> bufferIterator(m_pages); 222 QListIterator<QPixmap> bufferIterator(m_pages);
217 223
218 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) { 224 for (bufferIterator.toFirst(); bufferIterator.current() != 0; ++bufferIterator) {
219 textStream << " <image>" << endl; 225 textStream << " <image>" << endl;
220 226
221 QImage image = bufferIterator.current()->convertToImage(); 227 QImage image = bufferIterator.current()->convertToImage();
222 QByteArray byteArray; 228 QByteArray byteArray;
223 QBuffer buffer(byteArray); 229 QBuffer buffer(byteArray);
224 QImageIO imageIO(&buffer, "PNG"); 230 QImageIO imageIO(&buffer, "PNG");
225 231
226 buffer.open(IO_WriteOnly); 232 buffer.open(IO_WriteOnly);
227 imageIO.setImage(image); 233 imageIO.setImage(image);
228 imageIO.write(); 234 imageIO.write();
229 buffer.close(); 235 buffer.close();
230 236
237/*
231 ulong size = byteArray.size() * 2; 238 ulong size = byteArray.size() * 2;
232 QByteArray byteArrayZipped(size); 239 QByteArray byteArrayZipped(size);
233 ::compress((uchar*)byteArrayZipped.data(), &size, (uchar*)byteArray.data(), byteArray.size()); 240 ::compress((uchar*)byteArrayZipped.data(), &size, (uchar*)byteArray.data(), byteArray.size());
241*/
234 242
235 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">"; 243 textStream << " <data length=\"" << byteArray.size() << "\" format=\"PNG\">";
236 244
237 static const char hexchars[] = "0123456789abcdef"; 245 static const char hexchars[] = "0123456789abcdef";
238 246
239 for (int i = 0; i < (int)size; i++ ) { 247 for (int i = 0; i < (int)byteArray.size(); i++ ) {
240 uchar s = (uchar)byteArrayZipped[i]; 248 uchar s = (uchar)byteArray[i];
241 textStream << hexchars[s >> 4]; 249 textStream << hexchars[s >> 4];
242 textStream << hexchars[s & 0x0f]; 250 textStream << hexchars[s & 0x0f];
243 } 251 }
244 252
245 textStream << "</data>" << endl; 253 textStream << "</data>" << endl;
246 textStream << " </image>" << endl; 254 textStream << " </image>" << endl;
247 } 255 }
248 256
249 textStream << " </images>" << endl; 257 textStream << " </images>" << endl;
250 textStream << "</drawpad>"; 258 textStream << "</drawpad>";
251} 259}
252 260
253void DrawPadCanvas::importPage(const QString& fileName) 261void DrawPadCanvas::importPage(const QString& fileName)
254{ 262{
255 QPixmap* importedPixmap = new QPixmap(); 263 QPixmap* importedPixmap = new QPixmap();
256 264
257 importedPixmap->load(fileName); 265 importedPixmap->load(fileName);
258 m_pages.insert(m_pages.at() + 1, importedPixmap); 266 m_pages.insert(m_pages.at() + 1, importedPixmap);
259 267
260 m_pageBackups.clear(); 268 m_pageBackups.clear();
261 m_pageBackups.append(new QPixmap(*(m_pages.current()))); 269 m_pageBackups.append(new QPixmap(*(m_pages.current())));
262 270
263 resizeContents(m_pages.current()->width(), m_pages.current()->height()); 271 resizeContents(m_pages.current()->width(), m_pages.current()->height());
264 viewport()->update(); 272 viewport()->update();