]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/core/bitmap.cpp
avoid setting initial position if it was not specified, broken in r70734
[wxWidgets.git] / src / osx / core / bitmap.cpp
index bf31f8a00c0798847d7ef0361c64df0782b74b49..8ee6127b11a1fb931b4302bd39ecfd34421df8a1 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
-// RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) Stefan Csomor
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -25,6 +24,8 @@
 
 #include "wx/rawbmp.h"
 
 
 #include "wx/rawbmp.h"
 
+#include "wx/filename.h"
+
 IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
 IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
 
 IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject)
 IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject)
 
@@ -1235,10 +1236,29 @@ bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type)
     else
     {
 #if wxUSE_IMAGE
     else
     {
 #if wxUSE_IMAGE
-        wxImage loadimage(filename, type);
+        double scale = 1.0;
+        wxString fname = filename;
+        
+        if  ( type == wxBITMAP_TYPE_PNG )
+        {
+            if ( wxOSXGetMainScreenContentScaleFactor() > 1.9 )
+            {
+                wxFileName fn(filename);
+                fn.MakeAbsolute();
+                fn.SetName(fn.GetName()+"@2x");
+                
+                if ( fn.Exists() )
+                {
+                    fname = fn.GetFullPath();
+                    scale = 2.0;
+                }
+            }
+        }
+
+        wxImage loadimage(fname, type);
         if (loadimage.IsOk())
         {
         if (loadimage.IsOk())
         {
-            *this = loadimage;
+            *this = wxBitmap(loadimage,-1,scale);
 
             return true;
         }
 
             return true;
         }
@@ -1270,7 +1290,7 @@ bool wxBitmap::Create(const void* data, wxBitmapType type, int width, int height
 
 #if wxUSE_IMAGE
 
 
 #if wxUSE_IMAGE
 
-wxBitmap::wxBitmap(const wxImage& image, int depth)
+wxBitmap::wxBitmap(const wxImage& image, int depth, double scale)
 {
     wxCHECK_RET( image.IsOk(), wxT("invalid image") );
 
 {
     wxCHECK_RET( image.IsOk(), wxT("invalid image") );
 
@@ -1280,7 +1300,7 @@ wxBitmap::wxBitmap(const wxImage& image, int depth)
 
     wxBitmapRefData* bitmapRefData;
 
 
     wxBitmapRefData* bitmapRefData;
 
-    m_refData = bitmapRefData = new wxBitmapRefData( width , height , depth ) ;
+    m_refData = bitmapRefData = new wxBitmapRefData( width/scale, height/scale, depth, scale) ;
 
     if ( bitmapRefData->IsOk())
     {
 
     if ( bitmapRefData->IsOk())
     {
@@ -1851,9 +1871,23 @@ bool wxBundleResourceHandler::LoadFile(wxBitmap *bitmap,
 {
     wxString ext = GetExtension().Lower();
     wxCFStringRef resname(name);
 {
     wxString ext = GetExtension().Lower();
     wxCFStringRef resname(name);
+    wxCFStringRef resname2x(name+"@2x");
     wxCFStringRef restype(ext);
     wxCFStringRef restype(ext);
+    double scale = 1.0;
+    
+    wxCFRef<CFURLRef> imageURL;
+    
+    if ( wxOSXGetMainScreenContentScaleFactor() > 1.9 )
+    {
+        imageURL.reset(CFBundleCopyResourceURL(CFBundleGetMainBundle(), resname2x, restype, NULL));
+        scale = 2.0;
+    }
     
     
-    wxCFRef<CFURLRef> imageURL(CFBundleCopyResourceURL(CFBundleGetMainBundle(), resname, restype, NULL));
+    if ( imageURL.get() == NULL )
+    {
+        imageURL.reset(CFBundleCopyResourceURL(CFBundleGetMainBundle(), resname, restype, NULL));
+        scale = 1.0;
+    }
     
     if ( imageURL.get() != NULL )
     {
     
     if ( imageURL.get() != NULL )
     {
@@ -1869,7 +1903,7 @@ bool wxBundleResourceHandler::LoadFile(wxBitmap *bitmap,
                                                        kCGRenderingIntentDefault);
         if ( image != NULL )
         {
                                                        kCGRenderingIntentDefault);
         if ( image != NULL )
         {
-            bitmap->Create(image);
+            bitmap->Create(image,scale);
             CGImageRelease(image);
         }
     }
             CGImageRelease(image);
         }
     }