Krita Source Code Documentation
Loading...
Searching...
No Matches
psd_resource_block.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2009 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef PSD_RESOURCE_BLOCK_H
7#define PSD_RESOURCE_BLOCK_H
8
9#include "kritapsd_export.h"
10
11class QIODevice;
12
13#include <QBuffer>
14#include <QString>
15#include <kis_debug.h>
16#include <klocalizedstring.h>
17
18#include <kis_annotation.h>
19
20#include "psd.h"
22#include "psd_utils.h"
23
27class KRITAPSD_EXPORT PSDInterpretedResource
28{
29public:
31 {
32 }
33
34 virtual bool interpretBlock(QByteArray /*data*/)
35 {
36 return true;
37 }
38 virtual bool createBlock(QByteArray & /*data*/)
39 {
40 return true;
41 }
42 virtual bool valid()
43 {
44 return true;
45 }
46
47 virtual QString displayText()
48 {
49 return QString();
50 }
51
52 QString error;
53
54protected:
55 void startBlock(QBuffer &buf, PSDImageResourceSection::PSDResourceID id, quint32 size)
56 {
57 if (!buf.isOpen()) {
58 buf.open(QBuffer::WriteOnly);
59 }
60 buf.write("8BIM", 4);
61 psdwrite(buf, (quint16)id);
62 psdwrite(buf, (quint16)0); // We simply never save out the name, for now
63 psdwrite(buf, (quint32)size);
64 }
65};
66
70class KRITAPSD_EXPORT PSDResourceBlock : public KisAnnotation
71{
72public:
74
76 {
77 delete resource;
78 }
79
80 KisAnnotation *clone() const Q_DECL_OVERRIDE
81 {
82 // HACK ALERT: we are evil! use normal copying instead!
83 PSDResourceBlock *copied = new PSDResourceBlock();
84
85 QBuffer buffer;
86 buffer.open(QBuffer::WriteOnly);
87
88 if (!write(buffer)) {
89 qWarning() << "Could not copy PSDResourceBlock" << error;
90 delete copied;
91 return 0;
92 }
93 buffer.close();
94 buffer.open(QBuffer::ReadOnly);
95
96 if (!copied->read(buffer)) {
97 qWarning() << "Could not copy PSDResourceBlock" << copied->error;
98 delete copied;
99 return 0;
100 }
101
102 return copied;
103 }
104
105 QString displayText() const override
106 {
107 if (resource) {
108 return resource->displayText();
109 }
110 return i18n("Unparsed Resource Block");
111 }
112
113 bool read(QIODevice &io);
114 bool write(QIODevice &io) const;
115 bool valid();
116
117 quint16 identifier;
118 QString name;
119 quint32 dataSize;
120 QByteArray data;
121
123
124 mutable QString error;
125};
126
127/* 0x03e9 - Optional - Mac print manager print info record */
128struct KRITAPSD_EXPORT MAC_PRINT_INFO_1001 : public PSDInterpretedResource {
129 bool interpretBlock(QByteArray /*data*/) override
130 {
131 dbgFile << "Reading MAC_PRINT_INFO_1001";
132 return true;
133 }
134};
135
136/* 0x03ed - ResolutionInfo structure */
137struct KRITAPSD_EXPORT RESN_INFO_1005 : public PSDInterpretedResource {
138 // XXX: Krita only uses INCH internally
139 enum PSDUnit {
140 PSD_UNIT_INCH = 1, /* inches */
141 PSD_UNIT_CM = 2, /* cm */
142 PSD_UNIT_POINT = 3, /* points (72 points = 1 inch) */
143 PSD_UNIT_PICA = 4, /* pica ( 6 pica = 1 inch) */
144 PSD_UNIT_COLUMN = 5 /* columns ( column defined in ps prefs, default = 2.5 inches) */
145 };
146
148 : hRes(300)
149 , hResUnit(PSD_UNIT_INCH)
150 , widthUnit(PSD_UNIT_INCH)
151 , vRes(300)
152 , vResUnit(PSD_UNIT_INCH)
153 , heightUnit(PSD_UNIT_INCH)
154 {
155 }
156
157 bool interpretBlock(QByteArray data) override;
158 bool createBlock(QByteArray &data) override;
159
161 quint16 hResUnit;
162 quint16 widthUnit;
164 quint16 vResUnit;
165 quint16 heightUnit;
166};
167
168/* 0x03ee - Alpha channel names */
169struct KRITAPSD_EXPORT ALPHA_NAMES_1006 : public PSDInterpretedResource {
170 bool interpretBlock(QByteArray /*data*/) override
171 {
172 dbgFile << "Reading ALPHA_NAMES_1006";
173
174 return true;
175 }
176};
177
178/* 0x03ef - DisplayInfo structure */
179struct KRITAPSD_EXPORT DISPLAY_INFO_1007 : public PSDInterpretedResource {
180 bool interpretBlock(QByteArray /*data*/) override
181 {
182 dbgFile << "Reading DISPLAY_INFO_1007";
183 return true;
184 }
185};
186
187/* 0x03f0 - Optional - Caption string */
188struct KRITAPSD_EXPORT CAPTION_1008 : public PSDInterpretedResource {
189 bool interpretBlock(QByteArray /*data*/) override
190 {
191 dbgFile << "Reading CAPTION_1008";
192 return true;
193 }
194};
195
196/* 0x03f1 - Border info */
197struct KRITAPSD_EXPORT BORDER_INFO_1009 : public PSDInterpretedResource {
198 bool interpretBlock(QByteArray /*data*/) override
199 {
200 dbgFile << "Reading BORDER_INFO_1009";
201 return true;
202 }
203};
204
205/* 0x03f2 - Background color */
206struct KRITAPSD_EXPORT BACKGROUND_COL_1010 : public PSDInterpretedResource {
207 bool interpretBlock(QByteArray /*data*/) override
208 {
209 dbgFile << "Reading BACKGROUND_COL_1010";
210 return true;
211 }
212};
213
214/* 0x03f3 - Print flags */
215struct KRITAPSD_EXPORT PRINT_FLAGS_1011 : public PSDInterpretedResource {
216 bool interpretBlock(QByteArray /*data*/) override
217 {
218 dbgFile << "Reading PRINT_FLAGS_1011";
219 return true;
220 }
221};
222
223/* 0x03f4 - Greyscale and multichannel halftoning info */
224struct KRITAPSD_EXPORT GREY_HALFTONE_1012 : public PSDInterpretedResource {
225 bool interpretBlock(QByteArray /*data*/) override
226 {
227 dbgFile << "Reading GREY_HALFTONE_1012";
228 return true;
229 }
230};
231
232/* 0x03f5 - Color halftoning info */
233struct KRITAPSD_EXPORT COLOR_HALFTONE_1013 : public PSDInterpretedResource {
234 bool interpretBlock(QByteArray /*data*/) override
235 {
236 dbgFile << "Reading COLOR_HALFTONE_1013";
237 return true;
238 }
239};
240
241/* 0x03f6 - Duotone halftoning info */
242struct KRITAPSD_EXPORT DUOTONE_HALFTONE_1014 : public PSDInterpretedResource {
243 bool interpretBlock(QByteArray /*data*/) override
244 {
245 dbgFile << "Reading DUOTONE_HALFTONE_1014";
246 return true;
247 }
248};
249
250/* 0x03f7 - Greyscale and multichannel transfer functions */
251struct KRITAPSD_EXPORT GREY_XFER_1015 : public PSDInterpretedResource {
252 bool interpretBlock(QByteArray /*data*/) override
253 {
254 dbgFile << "Reading GREY_XFER_1015";
255 return true;
256 }
257};
258
259/* 0x03f8 - Color transfer functions */
260struct KRITAPSD_EXPORT COLOR_XFER_1016 : public PSDInterpretedResource {
261 bool interpretBlock(QByteArray /*data*/) override
262 {
263 dbgFile << "Reading COLOR_XFER_1016";
264 return true;
265 }
266};
267
268/* 0x03f9 - Duotone transfer functions */
269struct KRITAPSD_EXPORT DUOTONE_XFER_1017 : public PSDInterpretedResource {
270 bool interpretBlock(QByteArray /*data*/) override
271 {
272 dbgFile << "Reading DUOTONE_XFER_1017";
273 return true;
274 }
275};
276
277/* 0x03fa - Duotone image information */
278struct KRITAPSD_EXPORT DUOTONE_INFO_1018 : public PSDInterpretedResource {
279 bool interpretBlock(QByteArray /*data*/) override
280 {
281 dbgFile << "Reading DUOTONE_INFO_1018";
282 return true;
283 }
284};
285
286/* 0x03fb - Effective black & white values for dot range */
287struct KRITAPSD_EXPORT EFFECTIVE_BW_1019 : public PSDInterpretedResource {
288 bool interpretBlock(QByteArray /*data*/) override
289 {
290 dbgFile << "Reading EFFECTIVE_BW_1019";
291 return true;
292 }
293};
294
295/* 0x03fd - EPS options */
296struct KRITAPSD_EXPORT EPS_OPT_1021 : public PSDInterpretedResource {
297 bool interpretBlock(QByteArray /*data*/) override
298 {
299 dbgFile << "Reading EPS_OPT_1021";
300 return true;
301 }
302};
303
304/* 0x03fe - Quick mask info */
305struct KRITAPSD_EXPORT QUICK_MASK_1022 : public PSDInterpretedResource {
306 bool interpretBlock(QByteArray /*data*/) override
307 {
308 dbgFile << "Reading QUICK_MASK_1022";
309 return true;
310 }
311};
312
313/* 0x0400 - Layer state info */
314struct KRITAPSD_EXPORT LAYER_STATE_1024 : public PSDInterpretedResource {
315 bool interpretBlock(QByteArray /*data*/) override
316 {
317 dbgFile << "Reading LAYER_STATE_1024";
318 return true;
319 }
320};
321
322/* 0x0401 - Working path (not saved) */
323struct KRITAPSD_EXPORT WORKING_PATH_1025 : public PSDInterpretedResource {
324 bool interpretBlock(QByteArray /*data*/) override
325 {
326 dbgFile << "Reading WORKING_PATH_1025";
327 return true;
328 }
329};
330
331/* 0x0402 - Layers group info */
332struct KRITAPSD_EXPORT LAYER_GROUP_1026 : public PSDInterpretedResource {
333 bool interpretBlock(QByteArray /*data*/) override
334 {
335 dbgFile << "Reading LAYER_GROUP_1026";
336 return true;
337 }
338};
339
340/* 0x0404 - IPTC-NAA record (IMV4.pdf) */
341struct KRITAPSD_EXPORT IPTC_NAA_DATA_1028 : public PSDInterpretedResource {
342 bool interpretBlock(QByteArray /*data*/) override
343 {
344 dbgFile << "Reading IPTC_NAA_DATA_1028";
345 return true;
346 }
347};
348
349/* 0x0405 - Image mode for raw format files */
350struct KRITAPSD_EXPORT IMAGE_MODE_RAW_1029 : public PSDInterpretedResource {
351 bool interpretBlock(QByteArray /*data*/) override
352 {
353 dbgFile << "Reading IMAGE_MODE_RAW_1029";
354 return true;
355 }
356};
357
358/* 0x0406 - JPEG quality */
359struct KRITAPSD_EXPORT JPEG_QUAL_1030 : public PSDInterpretedResource {
360 bool interpretBlock(QByteArray /*data*/) override
361 {
362 dbgFile << "Reading JPEG_QUAL_1030";
363 return true;
364 }
365};
366
367/* 0x0408 - Grid & guide info */
368struct KRITAPSD_EXPORT GRID_GUIDE_1032 : public PSDInterpretedResource {
370 : version(1)
371 , gridHorizontal(0)
372 , gridVertical(0)
373 {
374 }
375
376 bool interpretBlock(QByteArray data) override
377 {
378 dbgFile << "Reading GRID_GUIDE_1032";
379 QDataStream ds(data);
380 ds.setByteOrder(QDataStream::BigEndian);
381 qint32 guidesLength;
382
383 // version == 1, adobe documentation says that grid values are for
384 //'future implementation document-specific grids', but this future
385 // does not seem to have come to pass as of yet.
386 ds >> version >> gridHorizontal >> gridVertical >> guidesLength;
387
388 for (qint32 i=0; i < guidesLength; i++) {
389 quint32 guide;
390 bool horizontal;
391 ds >> guide >> horizontal;
392 if (horizontal) {
393 horizontalGuides.append(guide / documentMultiplier);
394 } else {
395 verticalGuides.append(guide / documentMultiplier);
396 }
397 }
398
399 return ds.atEnd();
400 }
401
402 bool createBlock(QByteArray &data) override
403 {
404 QBuffer buf(&data);
405 quint32 size = 16;
406 size += (horizontalGuides.size() * 5);
407 size += (verticalGuides.size() * 5);
408 startBlock(buf, PSDImageResourceSection::GRID_GUIDE, size);
409 psdwrite(buf, version);
410 psdwrite(buf, (quint32)gridHorizontal);
411 psdwrite(buf, (quint32)gridVertical);
412 psdwrite(buf, quint32(horizontalGuides.size()+verticalGuides.size()));
413 Q_FOREACH(quint32 guide, verticalGuides) {
414 psdwrite(buf, quint32(guide * documentMultiplier));
415 psdwrite(buf, false);
416 }
417 Q_FOREACH(quint32 guide, horizontalGuides) {
418 psdwrite(buf, quint32(guide * documentMultiplier));
419 psdwrite(buf, true);
420 }
421 buf.close();
422 return true;
423 }
424
425 bool valid() override
426 {
427 return true;
428 }
429
430 QString displayText() override
431 {
432 QStringList guidesText;
433 guidesText.append(QString("Grids and Guides version: %1").arg(version));
434 guidesText.append(QString("Grids vertical: %1, horizontal: %2")
435 .arg(gridVertical).arg(gridHorizontal));
436 QStringList vertical;
437 QStringList horizontal;
438 Q_FOREACH(quint32 guide, verticalGuides) {
439 vertical.append(QString::number(guide));
440 }
441 Q_FOREACH(quint32 guide, horizontalGuides) {
442 horizontal.append(QString::number(guide));
443 }
444 guidesText.append(QString("Vertical guides: %1").arg(vertical.join(", ")));
445 guidesText.append(QString("Horizontal guides: %1").arg(horizontal.join(", ")));
446 return guidesText.join("\n");
447 }
448
449 const int documentMultiplier{32};
450 quint32 version;
455};
456
457/* 0x0409 - Thumbnail resource */
458struct KRITAPSD_EXPORT THUMB_RES_1033 : public PSDInterpretedResource {
459 bool interpretBlock(QByteArray /*data*/) override
460 {
461 dbgFile << "Reading THUMB_RES_1033";
462 return true;
463 }
464};
465
466/* 0x040a - Copyright flag */
467struct KRITAPSD_EXPORT COPYRIGHT_FLG_1034 : public PSDInterpretedResource {
468 bool interpretBlock(QByteArray /*data*/) override
469 {
470 dbgFile << "Reading COPYRIGHT_FLG_1034";
471 return true;
472 }
473};
474
475/* 0x040b - URL string */
476struct KRITAPSD_EXPORT URL_1035 : public PSDInterpretedResource {
477 bool interpretBlock(QByteArray /*data*/) override
478 {
479 dbgFile << "Reading URL_1035";
480 return true;
481 }
482};
483
484/* 0x040c - Thumbnail resource */
485struct KRITAPSD_EXPORT THUMB_RES2_1036 : public PSDInterpretedResource {
486 bool interpretBlock(QByteArray /*data*/) override
487 {
488 dbgFile << "Reading THUMB_RES2_1036";
489 return true;
490 }
491};
492
493/* 0x040d - Global angle */
494struct KRITAPSD_EXPORT GLOBAL_ANGLE_1037 : public PSDInterpretedResource {
496 : angle(30)
497 {
498 }
499
500 bool interpretBlock(QByteArray data) override
501 {
502 dbgFile << "Reading GLOBAL_ANGLE_1037";
503
504 QDataStream ds(data);
505 ds.setByteOrder(QDataStream::BigEndian);
506
507 ds >> angle;
508
509 return true;
510 }
511
512 bool createBlock(QByteArray &data) override
513 {
514 QBuffer buf(&data);
515 startBlock(buf, PSDImageResourceSection::GLOBAL_ANGLE, 4);
516 psdwrite(buf, (quint32)angle);
517 return true;
518 }
519
520 bool valid() override
521 {
522 return true;
523 }
524
525 QString displayText() override
526 {
527 return QString("Global Angle: %1").arg(angle);
528 }
529
530 qint32 angle;
531};
532
533/* 0x040e - Color samplers resource */
534struct KRITAPSD_EXPORT COLOR_SAMPLER_1038 : public PSDInterpretedResource {
535 bool interpretBlock(QByteArray /*data*/) override
536 {
537 dbgFile << "Reading COLOR_SAMPLER_1038";
538 return true;
539 }
540};
541
542/* 0x040f - ICC Profile */
543struct KRITAPSD_EXPORT ICC_PROFILE_1039 : public PSDInterpretedResource {
544 bool interpretBlock(QByteArray data) override;
545 bool createBlock(QByteArray &data) override;
546
547 QByteArray icc;
548};
549
550/* 0x0410 - Watermark */
551struct KRITAPSD_EXPORT WATERMARK_1040 : public PSDInterpretedResource {
552 bool interpretBlock(QByteArray /*data*/) override
553 {
554 dbgFile << "Reading WATERMARK_1040";
555 return true;
556 }
557};
558
559/* 0x0411 - Do not use ICC profile flag */
560struct KRITAPSD_EXPORT ICC_UNTAGGED_1041 : public PSDInterpretedResource {
561 bool interpretBlock(QByteArray /*data*/) override
562 {
563 dbgFile << "Reading ICC_UNTAGGED_1041";
564 return true;
565 }
566};
567
568/* 0x0412 - Show / hide all effects layers */
569struct KRITAPSD_EXPORT EFFECTS_VISIBLE_1042 : public PSDInterpretedResource {
570 bool interpretBlock(QByteArray /*data*/) override
571 {
572 dbgFile << "Reading EFFECTS_VISIBLE_1042";
573 return true;
574 }
575};
576
577/* 0x0413 - Spot halftone */
578struct KRITAPSD_EXPORT SPOT_HALFTONE_1043 : public PSDInterpretedResource {
579 bool interpretBlock(QByteArray /*data*/) override
580 {
581 dbgFile << "Reading SPOT_HALFTONE_1043";
582 return true;
583 }
584};
585
586/* 0x0414 - Document specific IDs */
587struct KRITAPSD_EXPORT DOC_IDS_1044 : public PSDInterpretedResource {
588 bool interpretBlock(QByteArray /*data*/) override
589 {
590 dbgFile << "Reading DOC_IDS_1044";
591 return true;
592 }
593};
594
595/* 0x0415 - Unicode alpha names */
596struct KRITAPSD_EXPORT ALPHA_NAMES_UNI_1045 : public PSDInterpretedResource {
597 bool interpretBlock(QByteArray /*data*/) override
598 {
599 dbgFile << "Reading ALPHA_NAMES_UNI_1045";
600 return true;
601 }
602};
603
604/* 0x0416 - Indexed color table count */
605struct KRITAPSD_EXPORT IDX_COL_TAB_CNT_1046 : public PSDInterpretedResource {
606 bool interpretBlock(QByteArray /*data*/) override
607 {
608 dbgFile << "Reading IDX_COL_TAB_CNT_1046";
609 return true;
610 }
611};
612
613/* 0x0417 - Index of transparent color (if any) */
614struct KRITAPSD_EXPORT IDX_TRANSPARENT_1047 : public PSDInterpretedResource {
615 bool interpretBlock(QByteArray /*data*/) override
616 {
617 dbgFile << "Reading IDX_TRANSPARENT_1047";
618 return true;
619 }
620};
621
622/* 0x0419 - Global altitude */
623struct KRITAPSD_EXPORT GLOBAL_ALT_1049 : public PSDInterpretedResource {
625 : altitude(30)
626 {
627 }
628 bool interpretBlock(QByteArray data) override
629 {
630 dbgFile << "Reading GLOBAL_ALT_1049";
631 QDataStream ds(data);
632 ds.setByteOrder(QDataStream::BigEndian);
633 ds >> altitude;
634 return true;
635 }
636
637 bool createBlock(QByteArray &data) override
638 {
639 QBuffer buf(&data);
640 startBlock(buf, PSDImageResourceSection::GLOBAL_ALT, 4);
641 psdwrite(buf, (quint32)altitude);
642 return true;
643 }
644
645 bool valid() override
646 {
647 return true;
648 }
649
650 QString displayText() override
651 {
652 return QString("Global Altitude: %1").arg(altitude);
653 }
654
655 qint32 altitude;
656};
657
658/* 0x041a - Slices */
659struct KRITAPSD_EXPORT SLICES_1050 : public PSDInterpretedResource {
660 bool interpretBlock(QByteArray /*data*/) override
661 {
662 dbgFile << "Reading SLICES_1050";
663 return true;
664 }
665};
666
667/* 0x041b - Workflow URL - Unicode string */
668struct KRITAPSD_EXPORT WORKFLOW_URL_UNI_1051 : public PSDInterpretedResource {
669 bool interpretBlock(QByteArray /*data*/) override
670 {
671 dbgFile << "Reading WORKFLOW_URL_UNI_1051";
672 return true;
673 }
674};
675
676/* 0x041c - Jump to XPEP (?) */
677struct KRITAPSD_EXPORT JUMP_TO_XPEP_1052 : public PSDInterpretedResource {
678 bool interpretBlock(QByteArray /*data*/) override
679 {
680 dbgFile << "JUMP_TO_XPEP_1052";
681 return true;
682 }
683};
684
685/* 0x041d - Alpha IDs */
686struct KRITAPSD_EXPORT ALPHA_ID_1053 : public PSDInterpretedResource {
687 bool interpretBlock(QByteArray /*data*/) override
688 {
689 dbgFile << "ALPHA_ID_1053";
690 return true;
691 }
692};
693
694/* 0x041e - URL list - unicode */
695struct KRITAPSD_EXPORT URL_LIST_UNI_1054 : public PSDInterpretedResource {
696 bool interpretBlock(QByteArray /*data*/) override
697 {
698 dbgFile << "URL_LIST_UNI_1054";
699 return true;
700 }
701};
702
703/* 0x0421 - Version info */
704struct KRITAPSD_EXPORT VERSION_INFO_1057 : public PSDInterpretedResource {
705 bool interpretBlock(QByteArray /*data*/) override
706 {
707 dbgFile << "VERSION_INFO_1057";
708 return true;
709 }
710};
711
712/* 0x0422 - Exif data block */
713struct KRITAPSD_EXPORT EXIF_DATA_1058 : public PSDInterpretedResource {
714 bool interpretBlock(QByteArray /*data*/) override
715 {
716 dbgFile << "Reading EXIF_DATA_1058";
717 return true;
718 }
719};
720
721/* 0x0424 - XMP data block */
722struct KRITAPSD_EXPORT XMP_DATA_1060 : public PSDInterpretedResource {
723 bool interpretBlock(QByteArray /*data*/) override
724 {
725 dbgFile << "Reading XMP_DATA_1060";
726 return true;
727 }
728};
729
730/* 0x07d0 - First path info block */
731struct KRITAPSD_EXPORT PATH_INFO_FIRST_2000 : public PSDInterpretedResource {
732 bool interpretBlock(QByteArray /*data*/) override
733 {
734 dbgFile << "PATH_INFO_FIRST_2000";
735 return true;
736 }
737};
738
739/* 0x0bb6 - Last path info block */
740struct KRITAPSD_EXPORT PATH_INFO_LAST_2998 : public PSDInterpretedResource {
741 bool interpretBlock(QByteArray /*data*/) override
742 {
743 dbgFile << "PATH_INFO_LAST_2998";
744 return true;
745 }
746};
747
748/* 0x0bb7 - Name of clipping path */
749struct KRITAPSD_EXPORT CLIPPING_PATH_2999 : public PSDInterpretedResource {
750 bool interpretBlock(QByteArray /*data*/) override
751 {
752 dbgFile << "Reading CLIPPING_PATH_2999";
753 return true;
754 }
755};
756
757/* 0x2710 - Print flags */
758struct KRITAPSD_EXPORT PRINT_FLAGS_2_10000 : public PSDInterpretedResource {
759 bool interpretBlock(QByteArray /*data*/) override
760 {
761 dbgFile << "Reading PRINT_FLAGS_2_10000";
762 return true;
763 }
764};
765
766#endif // PSD_RESOURCE_BLOCK_H
A data extension mechanism for Krita.
The PSDResourceInterpreter struct interprets the data in a psd resource block.
virtual bool createBlock(QByteArray &)
virtual bool interpretBlock(QByteArray)
void startBlock(QBuffer &buf, PSDImageResourceSection::PSDResourceID id, quint32 size)
virtual QString displayText()
~PSDResourceBlock() override
bool read(QIODevice &io)
PSDInterpretedResource * resource
KisAnnotation * clone() const Q_DECL_OVERRIDE
QString displayText() const override
displayText: override this to return an interpreted version of the annotation
This file is part of the Krita application in calligra.
#define dbgFile
Definition kis_debug.h:53
qint32 Fixed
Definition psd.h:31
std::enable_if_t< std::is_arithmetic< T >::value, bool > psdwrite(QIODevice &io, T v)
Definition psd_utils.h:170
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray data) override
QString displayText() override
bool createBlock(QByteArray &data) override
bool valid() override
QString displayText() override
bool createBlock(QByteArray &data) override
bool interpretBlock(QByteArray data) override
bool valid() override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
QList< quint32 > verticalGuides
bool interpretBlock(QByteArray data) override
bool createBlock(QByteArray &data) override
bool valid() override
QString displayText() override
QList< quint32 > horizontalGuides
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override
bool interpretBlock(QByteArray) override