1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#include "clBitmap.h"
#include <wx/dcscreen.h>
#include <wx/filename.h>
#include <wx/window.h>
#ifdef __WXGTK20__
#include <gtk/gtk.h>
#endif
clBitmap::clBitmap() {}
clBitmap::clBitmap(const wxImage& img, double scale)
#if wxVERSION_NUMBER >= 3100
: wxBitmap(img, -1, scale)
#else
: wxBitmap(img, -1)
#endif
{
}
clBitmap::~clBitmap() {}
bool clBitmap::LoadFile(const wxString& name, wxBitmapType type)
{
wxFileName filename(name);
#ifndef __WXOSX__
double scale = 1.0;
if(ShouldLoadHiResImages()) {
wxFileName hiResFileName = filename;
wxString hiresName = hiResFileName.GetName();
hiresName << "@2x";
hiResFileName.SetName(hiresName);
if(hiResFileName.Exists()) {
filename = hiResFileName;
scale = 2.0;
}
}
wxImage img(filename.GetFullPath(), type);
*this = clBitmap(img, scale);
return true;
#else
return wxBitmap::LoadFile(name, type);
#endif
}
bool clBitmap::ShouldLoadHiResImages()
{
static bool once = false;
static bool shouldLoad = false;
if(!once) {
once = true;
#ifdef __WXGTK__
GdkScreen *screen = gdk_screen_get_default();
if(screen) {
double res = gdk_screen_get_resolution(screen);
shouldLoad = ((res / 96.) >= 1.5);
}
#else
shouldLoad = ((wxScreenDC().GetPPI().y / 96.) >= 1.5);
#endif
}
return shouldLoad;
}
|