123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- //#include "../base/os.h"
- #if defined(IS_MACOSX)
- #include <ApplicationServices/ApplicationServices.h>
- #elif defined(USE_X11)
- #include <X11/Xlib.h>
- #include <X11/Xresource.h>
- // #include "../base/xdisplay_c.h"
- #endif
- intptr scaleX();
- double sys_scale(int32_t display_id) {
- #if defined(IS_MACOSX)
- CGDirectDisplayID displayID = (CGDirectDisplayID) display_id;
- if (displayID == -1) {
- displayID = CGMainDisplayID();
- }
-
- CGDisplayModeRef modeRef = CGDisplayCopyDisplayMode(displayID);
- double pixelWidth = CGDisplayModeGetPixelWidth(modeRef);
- double targetWidth = CGDisplayModeGetWidth(modeRef);
-
- return pixelWidth / targetWidth;
- #elif defined(USE_X11)
- Display *dpy = XOpenDisplay(NULL);
- int scr = 0; /* Screen number */
- double xres = ((((double) DisplayWidth(dpy, scr)) * 25.4) /
- ((double) DisplayWidthMM(dpy, scr)));
- char *rms = XResourceManagerString(dpy);
- if (rms) {
- XrmDatabase db = XrmGetStringDatabase(rms);
- if (db) {
- XrmValue value;
- char *type = NULL;
- if (XrmGetResource(db, "Xft.dpi", "String", &type, &value)) {
- if (value.addr) {
- xres = atof(value.addr);
- }
- }
- XrmDestroyDatabase(db);
- }
- }
- XCloseDisplay (dpy);
- return xres / 96.0;
- #elif defined(IS_WINDOWS)
- double s = scaleX() / 96.0;
- return s;
- #endif
- }
- intptr scaleX(){
- #if defined(IS_MACOSX)
- return 0;
- #elif defined(USE_X11)
- return 0;
- #elif defined(IS_WINDOWS)
- // Get desktop dc
- HDC desktopDc = GetDC(NULL);
- // Get native resolution
- intptr horizontalDPI = GetDeviceCaps(desktopDc, LOGPIXELSX);
- return horizontalDPI;
- #endif
- }
- MMSizeInt32 getMainDisplaySize(void) {
- #if defined(IS_MACOSX)
- CGDirectDisplayID displayID = CGMainDisplayID();
- CGRect displayRect = CGDisplayBounds(displayID);
-
- CGSize size = displayRect.size;
- return MMSizeInt32Make((int32_t)size.width, (int32_t)size.height);
- #elif defined(USE_X11)
- Display *display = XGetMainDisplay();
- const int screen = DefaultScreen(display);
- return MMSizeInt32Make(
- (int32_t)DisplayWidth(display, screen),
- (int32_t)DisplayHeight(display, screen));
- #elif defined(IS_WINDOWS)
- return MMSizeInt32Make(
- (int32_t)GetSystemMetrics(SM_CXSCREEN),
- (int32_t)GetSystemMetrics(SM_CYSCREEN));
- #endif
- }
- MMRectInt32 getScreenRect(int32_t display_id) {
- #if defined(IS_MACOSX)
- CGDirectDisplayID displayID = (CGDirectDisplayID) display_id;
- if (display_id == -1) {
- displayID = CGMainDisplayID();
- }
- CGRect displayRect = CGDisplayBounds(displayID);
- CGPoint point = displayRect.origin;
- CGSize size = displayRect.size;
- return MMRectInt32Make(
- (int32_t)point.x, (int32_t)point.y,
- (int32_t)size.width, (int32_t)size.height);
- #elif defined(USE_X11)
- Display *display = XGetMainDisplay();
- const int screen = DefaultScreen(display);
- return MMRectInt32Make(
- (int32_t)0, (int32_t)0,
- (int32_t)DisplayWidth(display, screen),
- (int32_t)DisplayHeight(display, screen));
- #elif defined(IS_WINDOWS)
- if (GetSystemMetrics(SM_CMONITORS) == 1
- || display_id == -1 || display_id == 0) {
- return MMRectInt32Make(
- (int32_t)0,
- (int32_t)0,
- (int32_t)GetSystemMetrics(SM_CXSCREEN),
- (int32_t)GetSystemMetrics(SM_CYSCREEN));
- } else {
- return MMRectInt32Make(
- (int32_t)GetSystemMetrics(SM_XVIRTUALSCREEN),
- (int32_t)GetSystemMetrics(SM_YVIRTUALSCREEN),
- (int32_t)GetSystemMetrics(SM_CXVIRTUALSCREEN),
- (int32_t)GetSystemMetrics(SM_CYVIRTUALSCREEN));
- }
- #endif
- }
- bool pointVisibleOnMainDisplay(MMPointInt32 point){
- MMSizeInt32 displaySize = getMainDisplaySize();
- return point.x < displaySize.w && point.y < displaySize.h;
- }
|