Author: jghali
Date: Sun May 23 20:15:03 2021
New Revision: 24647

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=24647
Log:
#13132: 16bit CMYK tiff image does not show correctly in scribus (and doesn't 
report why)

Added:
    trunk/Scribus/scribus/util_image.h
Modified:
    trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.cpp
    trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.h
    trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj
    trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj.filters
    trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj
    trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj.filters
    trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj
    trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj.filters

Modified: trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24647&path=/trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.cpp
==============================================================================
--- trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.cpp     
(original)
+++ trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.cpp     Sun May 
23 20:15:03 2021
@@ -14,6 +14,7 @@
 #include "scimgdataloader_tiff.h"
 #include "scribuscore.h"
 #include "util_color.h"
+#include "util_image.h"
 
 static void TagExtender(TIFF *tiff)
 {
@@ -27,7 +28,7 @@
 ScImgDataLoader_TIFF::ScImgDataLoader_TIFF()
 {
        m_photometric = PHOTOMETRIC_MINISBLACK;
-       m_samplesperpixel = 72;
+       m_samplesPerPixel = 72;
 
        initSupportedFormatList();
 }
@@ -248,118 +249,115 @@
        }
 }
 
-bool ScImgDataLoader_TIFF::getImageData(TIFF* tif, RawImage *image, uint 
widtht, uint heightt, uint size, uint16_t photometric, uint16_t bitspersample, 
uint16_t samplesperpixel, bool &bilevel, bool &isCMYK)
+bool ScImgDataLoader_TIFF::getImageData(TIFF* tif, RawImage *image, uint 
widtht, uint heightt, uint size, const SampleFormatInfo& sampleInfo, bool 
&bilevel, bool &isCMYK)
 {
-       uint32_t *bits = nullptr;
-       if (photometric == PHOTOMETRIC_SEPARATED)
-       {
-               if (samplesperpixel > 5)
-               {
-                       if (!getImageData_RGBA(tif, image, widtht, heightt, 
size, bitspersample, samplesperpixel))
-                               return false;
-                       if (bitspersample == 1)
-                               bilevel = true;
-                       isCMYK = false;
-                       m_pixelFormat = Format_RGBA_8;
-               }
-               else
-               {
-                       if (TIFFIsTiled(tif))
-                       {
-                               uint32_t columns, rows;
-                               uint32_t *tile_buf;
-                               uint32_t xt, yt;
-                               TIFFGetField(tif, TIFFTAG_TILEWIDTH,  &columns);
-                               TIFFGetField(tif, TIFFTAG_TILELENGTH, &rows);
-                               tile_buf = (uint32_t*) _TIFFmalloc(columns * 
rows * sizeof(uint32_t));
-                               if (tile_buf == nullptr)
-                               {
-                                       TIFFClose(tif);
-                                       return false;
-                               }
-                               uint32_t tileW = columns, tileH = rows;
-                               for (yt = 0; yt < (uint32_t) image->height(); 
yt += rows)
-                               {
-                                       if (yt > (uint) image->height())
-                                               break;
-                                       if (image->height()-yt < rows)
-                                               tileH = image->height() - yt;
-                                       tileW = columns;
-                                       uint32_t yi;
-                                       int chans = image->channels();
-                                       for (xt = 0; xt < (uint) 
image->width(); xt += columns)
-                                       {
-                                               TIFFReadTile(tif, tile_buf, xt, 
yt, 0, 0);
-                                               for (yi = 0; yi < tileH; yi++)
-                                               {
-                                                       
_TIFFmemcpy(image->scanLine(yt + (tileH - 1 - yi)) + xt, tile_buf + tileW * yi, 
tileW * chans);
-                                               }
-                                       }
-                               }
-                               _TIFFfree(tile_buf);
-                       }
-                       else
-                       {
-                               tsize_t bytesperrow = TIFFScanlineSize(tif);
-                               bits = (uint32_t *) _TIFFmalloc(bytesperrow);
-                               int chans = image->channels();
-                               if (bits)
-                               {
-                                       for (unsigned int y = 0; y < heightt; 
y++)
-                                       {
-                                               if (TIFFReadScanline(tif, bits, 
y, 0))
-                                               {
-                                                       /* The code below 
allows loading of CMYK TIFFs generated by ImageMagick, 
-                                                          currently commented 
out because its an ugly hack atm
-                                                          When converting 
8-bit PNGs with an alpha channel to CMYK Tiff, ImageMagick
-                                                          creates a 16-bit 
CMYK Tiff !?!??
-                                                       if (bitspersample > 8)
-                                                       {
-                                                               uchar *ptrT = 
image->scanLine(y);
-                                                               uchar *ptrS = 
(uchar*)bits;
-                                                               for (unsigned 
int x = 0; x < widtht; x++)
-                                                               {
-                                                                       ptrT[0] 
= ptrS[1];
-                                                                       ptrT[1] 
= ptrS[3];
-                                                                       ptrT[2] 
= ptrS[5];
-                                                                       ptrT[3] 
= ptrS[7];
-                                                                       if 
(samplesperpixel > 4)
-                                                                               
ptrT[4] = ptrS[9];
-                                                                       ptrT += 
chans;
-                                                                       ptrS += 
chans * 2;
-                                                               }
-                                                       }
-                                                       else */
-                                                               
memcpy(image->scanLine(y), bits, chans * widtht);
-                                               }
-                                       }
-                                       _TIFFfree(bits);
-                               }
-                       }
-                       isCMYK = true;
-                       m_pixelFormat = (image->channels() == 5) ? 
Format_CMYKA_8 : Format_CMYK_8;
-               }
-       }
-       else
-       {
-               if (!getImageData_RGBA(tif, image, widtht, heightt, size, 
bitspersample, samplesperpixel))
+       if (sampleInfo.photometric != PHOTOMETRIC_SEPARATED)
+       {
+               if (!getImageData_RGBA(tif, image, widtht, heightt, size, 
sampleInfo))
                        return false;
-               if (bitspersample == 1)
+               if (sampleInfo.bitsPerSample == 1)
                        bilevel = true;
                m_pixelFormat = Format_RGBA_8;
-       }
+               return true;
+       }
+
+       // Now we are in the PHOTOMETRIC_SEPARATED case
+       if (sampleInfo.samplesPerPixel > 5)
+       {
+               if (!getImageData_RGBA(tif, image, widtht, heightt, size, 
sampleInfo))
+                       return false;
+               if (sampleInfo.bitsPerSample == 1)
+                       bilevel = true;
+               isCMYK = false;
+               m_pixelFormat = Format_RGBA_8;
+               return true;
+       }
+
+       if (sampleInfo.samplesFormat != SAMPLEFORMAT_UINT && 
sampleInfo.samplesFormat != SAMPLEFORMAT_INT)
+       {
+               m_message = QObject::tr("This image uses an unsupported non 
integer sample format");
+               m_msgType = errorMsg;
+               return false;
+       }
+
+       if (sampleInfo.bitsPerSample > 16)
+       {
+               m_message = QObject::tr("This image uses an unsupported bit 
depth: %1 bits per sample.").arg(sampleInfo.bitsPerSample);
+               m_msgType = errorMsg;
+               return false;
+       }
+
+       if (TIFFIsTiled(tif))
+       {
+               uint32_t columns, rows;
+               uint32_t *tile_buf;
+               uint32_t xt, yt;
+               TIFFGetField(tif, TIFFTAG_TILEWIDTH,  &columns);
+               TIFFGetField(tif, TIFFTAG_TILELENGTH, &rows);
+               tile_buf = (uint32_t*) _TIFFmalloc(columns * rows * 
sizeof(uint32_t));
+               if (tile_buf == nullptr)
+               {
+                       TIFFClose(tif);
+                       return false;
+               }
+               uint32_t tileW = columns, tileH = rows;
+               for (yt = 0; yt < (uint32_t) image->height(); yt += rows)
+               {
+                       if (yt > (uint) image->height())
+                               break;
+                       if (image->height() - yt < rows)
+                               tileH = image->height() - yt;
+                       tileW = columns;
+                       uint32_t yi;
+                       int chans = image->channels();
+                       for (xt = 0; xt < (uint) image->width(); xt += columns)
+                       {
+                               TIFFReadTile(tif, tile_buf, xt, yt, 0, 0);
+                               for (yi = 0; yi < tileH; yi++)
+                               {
+                                       _TIFFmemcpy(image->scanLine(yt + (tileH 
- 1 - yi)) + xt, tile_buf + tileW * yi, tileW * chans);
+                               }
+                       }
+               }
+               _TIFFfree(tile_buf);
+       }
+       else
+       {
+               int chans = image->channels();
+               tsize_t bytesperrow = TIFFScanlineSize(tif);
+               uint32_t *bits = (uint32_t *) _TIFFmalloc(bytesperrow);
+               if (bits)
+               {
+                       for (unsigned int y = 0; y < heightt; y++)
+                       {
+                               if (!TIFFReadScanline(tif, bits, y, 0))
+                                       break;
+
+                               if (sampleInfo.bitsPerSample == 16 && 
sampleInfo.samplesFormat == SAMPLEFORMAT_UINT)
+                                       convertImageData((uint16_t*) bits, 
(uint8_t*) image->scanLine(y), chans * widtht);
+                               else if (sampleInfo.bitsPerSample == 16 && 
sampleInfo.samplesFormat == SAMPLEFORMAT_INT)
+                                       convertImageData((int16_t*) bits, 
(uint8_t*) image->scanLine(y), chans * widtht);
+                               else
+                                       memcpy(image->scanLine(y), bits, chans 
* widtht);
+                       }
+                       _TIFFfree(bits);
+               }
+       }
+       isCMYK = true;
+       m_pixelFormat = (image->channels() == 5) ? Format_CMYKA_8 : 
Format_CMYK_8;
+
        return true;
 }
 
-bool ScImgDataLoader_TIFF::getImageData_RGBA(TIFF* tif, RawImage *image, uint 
widtht, uint heightt, uint size, uint16_t bitspersample, uint16_t 
samplesperpixel)
+bool ScImgDataLoader_TIFF::getImageData_RGBA(TIFF* tif, RawImage *image, uint 
widtht, uint heightt, uint size, const SampleFormatInfo& sampleInfo)
 {
        uint32_t* bits = (uint32_t *) _TIFFmalloc(size * sizeof(uint32_t));
        if (!bits)
                return false;
 
-       uint16_t  extrasamples(0), *extratypes(nullptr);
-       if (!TIFFGetField (tif, TIFFTAG_EXTRASAMPLES, &extrasamples, 
&extratypes))
-               extrasamples = 0;
+       uint16_t  extraSamples(0), *extraTypes(nullptr);
+       if (!TIFFGetField (tif, TIFFTAG_EXTRASAMPLES, &extraSamples, 
&extraTypes))
+               extraSamples = 0;
        
        bool gotData = false;
        if (TIFFReadRGBAImage(tif, widtht, heightt, bits, 0))
@@ -369,7 +367,7 @@
                        memcpy(image->scanLine(heightt - 1 - y), bits + y * 
widtht, widtht * image->channels());
                        if (QSysInfo::ByteOrder == QSysInfo::BigEndian)
                        {
-                               unsigned char *s = image->scanLine( heightt - 1 
- y );
+                               unsigned char *s = image->scanLine(heightt - 1 
- y);
                                unsigned char r, g, b, a;
                                for (uint xi = 0; xi < widtht; ++xi)
                                {
@@ -385,7 +383,7 @@
                                }
                        }
                }
-               if (extrasamples > 0 && extratypes[0] == EXTRASAMPLE_ASSOCALPHA)
+               if (extraSamples > 0 && extraTypes[0] == EXTRASAMPLE_ASSOCALPHA)
                        unmultiplyRGBA(image);
                gotData = true;
        }
@@ -652,7 +650,7 @@
        bool bilevel = false;
        bool failedPS = false;
        bool foundPS = false;
-       short resolutionunit = RESUNIT_INCH; // Default unit is inch
+       short resolutionUnit = RESUNIT_INCH; // Default unit is inch
        float xres = 72.0, yres = 72.0;
        if (!QFile::exists(fn))
                return false;
@@ -693,18 +691,22 @@
        bool isCMYK = false;
        unsigned int widtht, heightt, size;
        char *description=nullptr, *copyright=nullptr, *datetime=nullptr, 
*artist=nullptr, *scannerMake=nullptr, *scannerModel=nullptr;
-       uint16_t bitspersample, fillorder, planar;
+       uint16_t bitsPerSample = 1;
+       uint16_t sampleFormat = SAMPLEFORMAT_UINT;
+       uint16_t fillorder = FILLORDER_MSB2LSB;
+       uint16_t planar = PLANARCONFIG_CONTIG;
 
        TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widtht);
        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &heightt);
        TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xres);
        TIFFGetField(tif, TIFFTAG_YRESOLUTION, &yres);
-       TIFFGetField(tif, TIFFTAG_RESOLUTIONUNIT , &resolutionunit);
+       TIFFGetField(tif, TIFFTAG_RESOLUTIONUNIT , &resolutionUnit);
        size = widtht * heightt;
        TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &m_photometric);
        TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &planar);
-       TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bitspersample);
-       TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &m_samplesperpixel);
+       TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bitsPerSample);
+       TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &m_samplesPerPixel);
+       TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &sampleFormat);
        TIFFGetField(tif, TIFFTAG_FILLORDER, &fillorder);
 
        TIFFGetField(tif, TIFFTAG_MAKE, &scannerMake);
@@ -713,6 +715,14 @@
        TIFFGetField(tif, TIFFTAG_COPYRIGHT, &copyright);
        TIFFGetField(tif, TIFFTAG_DATETIME, &datetime);
        TIFFGetField(tif, TIFFTAG_ARTIST, &artist);
+
+       SampleFormatInfo sampleInfo;
+       sampleInfo.photometric = m_photometric;
+       sampleInfo.bitsPerSample = bitsPerSample;
+       sampleInfo.samplesPerPixel = m_samplesPerPixel;
+       sampleInfo.samplesFormat = sampleFormat;
+       sampleInfo.fillOrder = fillorder;
+
        m_imageInfoRecord.exifInfo.cameraName = QString(scannerModel);
        m_imageInfoRecord.exifInfo.cameraVendor = QString(scannerMake);
        m_imageInfoRecord.exifInfo.comment = QString(description);
@@ -764,14 +774,14 @@
                                        isCMYK = true;
                                        m_imageInfoRecord.colorspace = 
ColorSpaceCMYK;
                                }
-                               else if (m_samplesperpixel == 1)
+                               else if (m_samplesPerPixel == 1)
                                {
                                        m_imageInfoRecord.colorspace = 
ColorSpaceGray;
                                        isCMYK = false;
                                }
                                else
                                        m_imageInfoRecord.colorspace = 
ColorSpaceRGB;
-                               if (bitspersample == 1)
+                               if (bitsPerSample == 1)
                                        bilevel = true;
                                if 
(!m_imageInfoRecord.exifInfo.thumbnail.isNull())
                                {
@@ -855,7 +865,7 @@
                                fakeHeader.color_mode = CM_CMYK;
                                chans = 5;
                        }
-                       else if (m_samplesperpixel == 1)
+                       else if (m_samplesPerPixel == 1)
                        {
                                fakeHeader.color_mode = CM_GRAYSCALE;
                                isCMYK = false;
@@ -900,10 +910,10 @@
                int chans = 4;
                if (m_photometric == PHOTOMETRIC_SEPARATED)
                {
-                       if (m_samplesperpixel > 5) 
+                       if (m_samplesPerPixel > 5) 
                                chans = 4;
                        else
-                               chans = m_samplesperpixel;
+                               chans = m_samplesPerPixel;
                }
                else
                        chans = 4;
@@ -924,7 +934,7 @@
                        }
 
                        tmpImg.fill(0);
-                       if (!getImageData(tif, &tmpImg, widtht, heightt, size, 
m_photometric, bitspersample, m_samplesperpixel, bilevel, isCMYK))
+                       if (!getImageData(tif, &tmpImg, widtht, heightt, size, 
sampleInfo, bilevel, isCMYK))
                        {
                                TIFFClose(tif);
                                return false;
@@ -987,14 +997,14 @@
                while (test == 1);
                TIFFClose(tif);
        }
-       if (resolutionunit == RESUNIT_INCH)
+       if (resolutionUnit == RESUNIT_INCH)
        {
                m_image.setDotsPerMeterX ((int) (xres / 0.0254));
                m_image.setDotsPerMeterY ((int) (yres / 0.0254));
                m_imageInfoRecord.xres = qRound(xres);
                m_imageInfoRecord.yres = qRound(yres);
        }
-       else if (resolutionunit == RESUNIT_CENTIMETER)
+       else if (resolutionUnit == RESUNIT_CENTIMETER)
        {
                m_image.setDotsPerMeterX ((int) (xres * 100.0));
                m_image.setDotsPerMeterY ((int) (yres * 100.0));
@@ -1006,10 +1016,10 @@
                m_imageInfoRecord.colorspace = ColorSpaceCMYK;
                m_pixelFormat = (r_image.channels() == 5) ? Format_CMYKA_8 : 
Format_CMYK_8;
        }
-       else if (m_samplesperpixel == 1)
+       else if (m_samplesPerPixel == 1)
        {
                // Do not set m_pixelFormat here as the real pixel format is 
most probably different than gray
-               if (bitspersample == 1)
+               if (bitsPerSample == 1)
                        m_imageInfoRecord.colorspace = ColorSpaceMonochrome;
                else
                        m_imageInfoRecord.colorspace = ColorSpaceGray;

Modified: trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24647&path=/trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.h
==============================================================================
--- trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.h       
(original)
+++ trunk/Scribus/scribus/imagedataloaders/scimgdataloader_tiff.h       Sun May 
23 20:15:03 2021
@@ -10,9 +10,9 @@
 #include <cstdint>
 #include <tiffio.h>
 
+#include <QList>
+
 #include "scimgdataloader.h"
-//Added by qt3to4:
-#include <QList>
 
 class ScImgDataLoader_TIFF : public ScImgDataLoader
 {
@@ -39,10 +39,20 @@
                CM_DUOTONE = 8,
                CM_LABCOLOR = 9
        };
+
+       struct SampleFormatInfo
+       {
+               uint16_t photometric;
+               uint16_t bitsPerSample;
+               uint16_t samplesPerPixel;
+               uint16_t samplesFormat;
+               uint16_t fillOrder;
+       };
+
        void initSupportedFormatList();
        int  getLayers(const QString& fn, int page);
-       bool getImageData(TIFF* tif, RawImage *image, uint widtht, uint 
heightt, uint size, uint16_t m_photometric, uint16_t bitspersample, uint16_t 
m_samplesperpixel, bool &bilevel, bool &isCMYK);
-       bool getImageData_RGBA(TIFF* tif, RawImage *image, uint widtht, uint 
heightt, uint size, uint16_t bitspersample, uint16_t m_samplesperpixel);
+       bool getImageData(TIFF* tif, RawImage *image, uint widtht, uint 
heightt, uint size, const SampleFormatInfo& sampleInfo, bool &bilevel, bool 
&isCMYK);
+       bool getImageData_RGBA(TIFF* tif, RawImage *image, uint widtht, uint 
heightt, uint size, const SampleFormatInfo& sampleInfo);
        void blendOntoTarget(RawImage *tmp, int layOpa, const QString& 
layBlend, bool cmyk, bool useMask);
        QString getLayerString(QDataStream & s);
        bool loadChannel( QDataStream & s, const PSDHeader & header, 
QList<PSDLayer> &layerInfo, uint layer, int channel, int component, RawImage 
&tmpImg);
@@ -53,7 +63,8 @@
        void unmultiplyRGBA(RawImage *image);
 
        int      m_random_table[4096];
-       uint16_t m_photometric, m_samplesperpixel;
+       uint16_t m_photometric;
+       uint16_t m_samplesPerPixel;
 };
 
 #endif

Modified: trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24647&path=/trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj
==============================================================================
--- trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj   (original)
+++ trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj   Sun May 23 
20:15:03 2021
@@ -819,6 +819,7 @@
     <ClInclude Include="..\..\..\scribus\util_file.h" />
     <ClInclude Include="..\..\..\scribus\util_formats.h" />
     <ClInclude Include="..\..\..\scribus\util_ghostscript.h" />
+    <ClInclude Include="..\..\..\scribus\util_image.h" />
     <ClInclude Include="..\..\..\scribus\util_layer.h" />
     <ClInclude Include="..\..\..\scribus\util_math.h" />
     <ClInclude Include="..\..\..\scribus\util_printer.h" />

Modified: trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj.filters
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24647&path=/trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj.filters
==============================================================================
--- trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj.filters   
(original)
+++ trunk/Scribus/win32/msvc2015/scribus-main/Scribus.vcxproj.filters   Sun May 
23 20:15:03 2021
@@ -548,6 +548,9 @@
     <ClInclude Include="..\..\..\scribus\util_ghostscript.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\scribus\util_image.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\scribus\util_layer.h">
       <Filter>Header Files</Filter>
     </ClInclude>

Modified: trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24647&path=/trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj
==============================================================================
--- trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj   (original)
+++ trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj   Sun May 23 
20:15:03 2021
@@ -819,6 +819,7 @@
     <ClInclude Include="..\..\..\scribus\util_file.h" />
     <ClInclude Include="..\..\..\scribus\util_formats.h" />
     <ClInclude Include="..\..\..\scribus\util_ghostscript.h" />
+    <ClInclude Include="..\..\..\scribus\util_image.h" />
     <ClInclude Include="..\..\..\scribus\util_layer.h" />
     <ClInclude Include="..\..\..\scribus\util_math.h" />
     <ClInclude Include="..\..\..\scribus\util_printer.h" />

Modified: trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj.filters
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24647&path=/trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj.filters
==============================================================================
--- trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj.filters   
(original)
+++ trunk/Scribus/win32/msvc2017/scribus-main/Scribus.vcxproj.filters   Sun May 
23 20:15:03 2021
@@ -548,6 +548,9 @@
     <ClInclude Include="..\..\..\scribus\util_ghostscript.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\scribus\util_image.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\scribus\util_layer.h">
       <Filter>Header Files</Filter>
     </ClInclude>

Modified: trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24647&path=/trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj
==============================================================================
--- trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj   (original)
+++ trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj   Sun May 23 
20:15:03 2021
@@ -820,6 +820,7 @@
     <ClInclude Include="..\..\..\scribus\util_file.h" />
     <ClInclude Include="..\..\..\scribus\util_formats.h" />
     <ClInclude Include="..\..\..\scribus\util_ghostscript.h" />
+    <ClInclude Include="..\..\..\scribus\util_image.h" />
     <ClInclude Include="..\..\..\scribus\util_layer.h" />
     <ClInclude Include="..\..\..\scribus\util_math.h" />
     <ClInclude Include="..\..\..\scribus\util_printer.h" />

Modified: trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj.filters
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24647&path=/trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj.filters
==============================================================================
--- trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj.filters   
(original)
+++ trunk/Scribus/win32/msvc2019/scribus-main/Scribus.vcxproj.filters   Sun May 
23 20:15:03 2021
@@ -548,6 +548,9 @@
     <ClInclude Include="..\..\..\scribus\util_ghostscript.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\scribus\util_image.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\scribus\util_layer.h">
       <Filter>Header Files</Filter>
     </ClInclude>


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to