svx/source/xoutdev/_xoutbmp.cxx             |    4 +
 sw/source/filter/html/htmlflywriter.cxx     |    6 -
 vcl/inc/graphic/UnoGraphicDescriptor.hxx    |   50 +++++++--------
 vcl/source/graphic/UnoGraphicDescriptor.cxx |   90 +++++++++++++---------------
 4 files changed, 72 insertions(+), 78 deletions(-)

New commits:
commit ab07ba6a9f89aedf4c33fbe911ed8a7d55ced1dd
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Thu Mar 30 10:13:12 2023 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Thu Mar 30 09:39:32 2023 +0000

    Report correct mimetypes for TIF and EMF
    
    Change-Id: I2eeb07780e3581eea29a9ad98b493de4e78a5d65
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149745
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/svx/source/xoutdev/_xoutbmp.cxx b/svx/source/xoutdev/_xoutbmp.cxx
index d392426defb5..9fbb4d5690b5 100644
--- a/svx/source/xoutdev/_xoutbmp.cxx
+++ b/svx/source/xoutdev/_xoutbmp.cxx
@@ -155,6 +155,10 @@ ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, 
OUString& rFileName,
             }
 
             rFileName = aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE);
+            if (pMediaType)
+                if (auto xGraphic = 
rGraphic.GetXGraphic().query<css::beans::XPropertySet>())
+                    xGraphic->getPropertyValue("MimeType") >>= *pMediaType;
+
             SfxMedium 
aMedium(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE), 
StreamMode::WRITE | StreamMode::SHARE_DENYNONE | StreamMode::TRUNC);
             SvStream* pOStm = aMedium.GetOutStream();
 
diff --git a/sw/source/filter/html/htmlflywriter.cxx 
b/sw/source/filter/html/htmlflywriter.cxx
index acfeec1edaec..85cae063cda5 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -1974,8 +1974,6 @@ static SwHTMLWriter& OutHTML_FrameFormatGrfNode( 
SwHTMLWriter& rWrt, const SwFra
             if (!rGraphic.isAvailable())
                 const_cast<Graphic&>(rGraphic).makeAvailable();
 
-            OUString aMimeTypeOverride;
-
             if (rWrt.mbReqIF && bWritePNGFallback)
             {
                 // ReqIF: force native data if possible.
@@ -1987,7 +1985,6 @@ static SwHTMLWriter& OutHTML_FrameFormatGrfNode( 
SwHTMLWriter& rWrt, const SwFra
                 else if (rGraphic.GetGfxLink().IsEMF())
                 {
                     aFilterName = "emf";
-                    aMimeTypeOverride = "image/x-emf"; // avoid image/x-wmf
                 }
                 else if (pVectorGraphicData && pVectorGraphicData->getType() 
== VectorGraphicDataType::Wmf)
                 {
@@ -1996,7 +1993,6 @@ static SwHTMLWriter& OutHTML_FrameFormatGrfNode( 
SwHTMLWriter& rWrt, const SwFra
                 else if (rGraphic.GetGfxLink().GetType() == 
GfxLinkType::NativeTif)
                 {
                     aFilterName = "tif";
-                    aMimeTypeOverride = "image/tiff"; // avoid 
image/x-vclgraphic
                 }
             }
 
@@ -2010,8 +2006,6 @@ static SwHTMLWriter& OutHTML_FrameFormatGrfNode( 
SwHTMLWriter& rWrt, const SwFra
             aGraphicURL = URIHelper::SmartRel2Abs(
                 INetURLObject(rWrt.GetBaseURL()), aGraphicURL,
                 URIHelper::GetMaybeFileHdl() );
-            if (!aMimeTypeOverride.isEmpty())
-                aMimeType = aMimeTypeOverride;
         }
         else
         {
diff --git a/vcl/inc/graphic/UnoGraphicDescriptor.hxx 
b/vcl/inc/graphic/UnoGraphicDescriptor.hxx
index d57bb3a65d28..98b953b443e5 100644
--- a/vcl/inc/graphic/UnoGraphicDescriptor.hxx
+++ b/vcl/inc/graphic/UnoGraphicDescriptor.hxx
@@ -27,31 +27,31 @@
 #include <comphelper/propertysetinfo.hxx>
 #include <vcl/graph.hxx>
 
-#define MIMETYPE_BMP        "image/x-MS-bmp"
-#define MIMETYPE_GIF        "image/gif"
-#define MIMETYPE_JPG        "image/jpeg"
-#define MIMETYPE_PCD        "image/x-photo-cd"
-#define MIMETYPE_PCX        "image/x-pcx"
-#define MIMETYPE_PNG        "image/png"
-#define MIMETYPE_TIF        "image/tiff"
-#define MIMETYPE_XBM        "image/x-xbitmap"
-#define MIMETYPE_XPM        "image/x-xpixmap"
-#define MIMETYPE_PBM        "image/x-portable-bitmap"
-#define MIMETYPE_PGM        "image/x-portable-graymap"
-#define MIMETYPE_PPM        "image/x-portable-pixmap"
-#define MIMETYPE_RAS        "image/x-cmu-raster"
-#define MIMETYPE_TGA        "image/x-targa"
-#define MIMETYPE_PSD        "image/vnd.adobe.photoshop"
-#define MIMETYPE_EPS        "image/x-eps"
-#define MIMETYPE_DXF        "image/vnd.dxf"
-#define MIMETYPE_MET        "image/x-met"
-#define MIMETYPE_PCT        "image/x-pict"
-#define MIMETYPE_SVM        "image/x-svm"
-#define MIMETYPE_WMF        "image/x-wmf"
-#define MIMETYPE_EMF        "image/x-emf"
-#define MIMETYPE_SVG        "image/svg+xml"
-#define MIMETYPE_PDF        "application/pdf"
-#define MIMETYPE_WEBP       "image/webp"
+inline constexpr OUStringLiteral MIMETYPE_BMP = u"image/x-MS-bmp";
+inline constexpr OUStringLiteral MIMETYPE_GIF = u"image/gif";
+inline constexpr OUStringLiteral MIMETYPE_JPG = u"image/jpeg";
+inline constexpr OUStringLiteral MIMETYPE_PCD = u"image/x-photo-cd";
+inline constexpr OUStringLiteral MIMETYPE_PCX = u"image/x-pcx";
+inline constexpr OUStringLiteral MIMETYPE_PNG = u"image/png";
+inline constexpr OUStringLiteral MIMETYPE_TIF = u"image/tiff";
+inline constexpr OUStringLiteral MIMETYPE_XBM = u"image/x-xbitmap";
+inline constexpr OUStringLiteral MIMETYPE_XPM = u"image/x-xpixmap";
+inline constexpr OUStringLiteral MIMETYPE_PBM = u"image/x-portable-bitmap";
+inline constexpr OUStringLiteral MIMETYPE_PGM = u"image/x-portable-graymap";
+inline constexpr OUStringLiteral MIMETYPE_PPM = u"image/x-portable-pixmap";
+inline constexpr OUStringLiteral MIMETYPE_RAS = u"image/x-cmu-raster";
+inline constexpr OUStringLiteral MIMETYPE_TGA = u"image/x-targa";
+inline constexpr OUStringLiteral MIMETYPE_PSD = u"image/vnd.adobe.photoshop";
+inline constexpr OUStringLiteral MIMETYPE_EPS = u"image/x-eps";
+inline constexpr OUStringLiteral MIMETYPE_DXF = u"image/vnd.dxf";
+inline constexpr OUStringLiteral MIMETYPE_MET = u"image/x-met";
+inline constexpr OUStringLiteral MIMETYPE_PCT = u"image/x-pict";
+inline constexpr OUStringLiteral MIMETYPE_SVM = u"image/x-svm";
+inline constexpr OUStringLiteral MIMETYPE_WMF = u"image/x-wmf";
+inline constexpr OUStringLiteral MIMETYPE_EMF = u"image/x-emf";
+inline constexpr OUStringLiteral MIMETYPE_SVG = u"image/svg+xml";
+inline constexpr OUStringLiteral MIMETYPE_PDF = u"application/pdf";
+inline constexpr OUStringLiteral MIMETYPE_WEBP = u"image/webp";
 inline constexpr OUStringLiteral MIMETYPE_VCLGRAPHIC = u"image/x-vclgraphic";
 
 namespace comphelper { class PropertySetInfo; }
diff --git a/vcl/source/graphic/UnoGraphicDescriptor.cxx 
b/vcl/source/graphic/UnoGraphicDescriptor.cxx
index 40f205bfdb64..02d944e12ff4 100644
--- a/vcl/source/graphic/UnoGraphicDescriptor.cxx
+++ b/vcl/source/graphic/UnoGraphicDescriptor.cxx
@@ -107,39 +107,39 @@ void GraphicDescriptor::implCreate( SvStream& rIStm, 
const OUString* pURL )
     if( !(aDescriptor.Detect( true ) && aDescriptor.GetFileFormat() != 
GraphicFileFormat::NOT) )
         return;
 
-    const char*             pMimeType = nullptr;
+    OUString aMimeType;
     sal_uInt8               cType = graphic::GraphicType::EMPTY;
 
     switch( aDescriptor.GetFileFormat() )
     {
-        case GraphicFileFormat::BMP: pMimeType = MIMETYPE_BMP; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::GIF: pMimeType = MIMETYPE_GIF; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::JPG: pMimeType = MIMETYPE_JPG; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::PCD: pMimeType = MIMETYPE_PCD; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::PCX: pMimeType = MIMETYPE_PCX; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::PNG: pMimeType = MIMETYPE_PNG; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::TIF: pMimeType = MIMETYPE_TIF; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::XBM: pMimeType = MIMETYPE_XBM; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::XPM: pMimeType = MIMETYPE_XPM; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::PBM: pMimeType = MIMETYPE_PBM; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::PGM: pMimeType = MIMETYPE_PGM; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::PPM: pMimeType = MIMETYPE_PPM; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::RAS: pMimeType = MIMETYPE_RAS; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::TGA: pMimeType = MIMETYPE_TGA; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::PSD: pMimeType = MIMETYPE_PSD; cType = 
graphic::GraphicType::PIXEL; break;
-        case GraphicFileFormat::WEBP: pMimeType = MIMETYPE_WEBP; cType = 
graphic::GraphicType::PIXEL; break;
-
-        case GraphicFileFormat::EPS: pMimeType = MIMETYPE_EPS; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::DXF: pMimeType = MIMETYPE_DXF; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::MET: pMimeType = MIMETYPE_MET; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::PCT: pMimeType = MIMETYPE_PCT; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::SVM: pMimeType = MIMETYPE_SVM; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::WMF: pMimeType = MIMETYPE_WMF; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::WMZ: pMimeType = MIMETYPE_WMF; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::EMF: pMimeType = MIMETYPE_EMF; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::EMZ: pMimeType = MIMETYPE_EMF; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::SVG: pMimeType = MIMETYPE_SVG; cType = 
graphic::GraphicType::VECTOR; break;
-        case GraphicFileFormat::SVGZ: pMimeType = MIMETYPE_SVG; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::BMP: aMimeType = MIMETYPE_BMP; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::GIF: aMimeType = MIMETYPE_GIF; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::JPG: aMimeType = MIMETYPE_JPG; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::PCD: aMimeType = MIMETYPE_PCD; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::PCX: aMimeType = MIMETYPE_PCX; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::PNG: aMimeType = MIMETYPE_PNG; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::TIF: aMimeType = MIMETYPE_TIF; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::XBM: aMimeType = MIMETYPE_XBM; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::XPM: aMimeType = MIMETYPE_XPM; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::PBM: aMimeType = MIMETYPE_PBM; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::PGM: aMimeType = MIMETYPE_PGM; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::PPM: aMimeType = MIMETYPE_PPM; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::RAS: aMimeType = MIMETYPE_RAS; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::TGA: aMimeType = MIMETYPE_TGA; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::PSD: aMimeType = MIMETYPE_PSD; cType = 
graphic::GraphicType::PIXEL; break;
+        case GraphicFileFormat::WEBP: aMimeType = MIMETYPE_WEBP; cType = 
graphic::GraphicType::PIXEL; break;
+
+        case GraphicFileFormat::EPS: aMimeType = MIMETYPE_EPS; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::DXF: aMimeType = MIMETYPE_DXF; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::MET: aMimeType = MIMETYPE_MET; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::PCT: aMimeType = MIMETYPE_PCT; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::SVM: aMimeType = MIMETYPE_SVM; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::WMF: aMimeType = MIMETYPE_WMF; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::WMZ: aMimeType = MIMETYPE_WMF; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::EMF: aMimeType = MIMETYPE_EMF; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::EMZ: aMimeType = MIMETYPE_EMF; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::SVG: aMimeType = MIMETYPE_SVG; cType = 
graphic::GraphicType::VECTOR; break;
+        case GraphicFileFormat::SVGZ: aMimeType = MIMETYPE_SVG; cType = 
graphic::GraphicType::VECTOR; break;
 
         default:
         break;
@@ -148,7 +148,7 @@ void GraphicDescriptor::implCreate( SvStream& rIStm, const 
OUString* pURL )
     if( graphic::GraphicType::EMPTY != cType )
     {
         meType = ( ( graphic::GraphicType::PIXEL == cType ) ? 
GraphicType::Bitmap : GraphicType::GdiMetafile );
-        maMimeType = OUString( pMimeType, strlen(pMimeType), 
RTL_TEXTENCODING_ASCII_US );
+        maMimeType = aMimeType;
         maSizePixel = aDescriptor.GetSizePixel();
         maSize100thMM = aDescriptor.GetSize_100TH_MM();
         mnBitsPerPixel = aDescriptor.GetBitsPerPixel();
@@ -280,33 +280,29 @@ void GraphicDescriptor::_getPropertyValues( const 
comphelper::PropertyMapEntry**
                 {
                     if( mpGraphic->IsGfxLink() )
                     {
-                        const char* pMimeType;
-
-                        switch( mpGraphic->GetGfxLink().GetType() )
+                        GfxLink aLink = mpGraphic->GetGfxLink();
+                        switch (aLink.GetType())
                         {
-                            case GfxLinkType::NativeGif: pMimeType = 
MIMETYPE_GIF; break;
+                            case GfxLinkType::NativeGif: aMimeType = 
MIMETYPE_GIF; break;
 
                             // #i15508# added BMP type for better exports 
(checked, works)
-                            case GfxLinkType::NativeBmp: pMimeType = 
MIMETYPE_BMP; break;
+                            case GfxLinkType::NativeBmp: aMimeType = 
MIMETYPE_BMP; break;
 
-                            case GfxLinkType::NativeJpg: pMimeType = 
MIMETYPE_JPG; break;
-                            case GfxLinkType::NativePng: pMimeType = 
MIMETYPE_PNG; break;
-                            case GfxLinkType::NativeWmf: pMimeType = 
MIMETYPE_WMF; break;
-                            case GfxLinkType::NativeMet: pMimeType = 
MIMETYPE_MET; break;
-                            case GfxLinkType::NativePct: pMimeType = 
MIMETYPE_PCT; break;
-                            case GfxLinkType::NativeWebp: pMimeType = 
MIMETYPE_WEBP; break;
+                            case GfxLinkType::NativeJpg: aMimeType = 
MIMETYPE_JPG; break;
+                            case GfxLinkType::NativePng: aMimeType = 
MIMETYPE_PNG; break;
+                            case GfxLinkType::NativeTif: aMimeType = 
MIMETYPE_TIF; break;
+                            case GfxLinkType::NativeWmf: aMimeType = 
aLink.IsEMF() ? OUString(MIMETYPE_EMF) : OUString(MIMETYPE_WMF); break;
+                            case GfxLinkType::NativeMet: aMimeType = 
MIMETYPE_MET; break;
+                            case GfxLinkType::NativePct: aMimeType = 
MIMETYPE_PCT; break;
+                            case GfxLinkType::NativeWebp: aMimeType = 
MIMETYPE_WEBP; break;
 
                             // added Svg mimetype support
-                            case GfxLinkType::NativeSvg: pMimeType = 
MIMETYPE_SVG; break;
-                            case GfxLinkType::NativePdf: pMimeType = 
MIMETYPE_PDF; break;
+                            case GfxLinkType::NativeSvg: aMimeType = 
MIMETYPE_SVG; break;
+                            case GfxLinkType::NativePdf: aMimeType = 
MIMETYPE_PDF; break;
 
                             default:
-                                pMimeType = nullptr;
                             break;
                         }
-
-                        if( pMimeType )
-                            aMimeType = OUString::createFromAscii( pMimeType );
                     }
 
                     if( aMimeType.isEmpty() && ( mpGraphic->GetType() != 
GraphicType::NONE ) )

Reply via email to