Trying to dynamically track the DPI did not really work as we'd start accumulating errors and eventually the DPI would start to drift. Instead maintain a fixed, sensible DPI at all times.tags/v1.11.90
{ | { | ||||
vncGlueContext *ctx = &randrGlueContext; | vncGlueContext *ctx = &randrGlueContext; | ||||
int xwidth = DisplayWidth(ctx->dpy, DefaultScreen(ctx->dpy)); | |||||
int xheight = DisplayHeight(ctx->dpy, DefaultScreen(ctx->dpy)); | |||||
int xwidthmm = DisplayWidthMM(ctx->dpy, DefaultScreen(ctx->dpy)); | |||||
int xheightmm = DisplayHeightMM(ctx->dpy, DefaultScreen(ctx->dpy)); | |||||
/* Try to retain DPI when we resize */ | |||||
XRRSetScreenSize(ctx->dpy, DefaultRootWindow(ctx->dpy), width, height, | |||||
xwidthmm * width / xwidth, | |||||
xheightmm * height / xheight); | |||||
int mwidth, mheight; | |||||
// Always calculate a DPI of 96. | |||||
// It's what mutter does, so good enough for us. | |||||
mwidth = width * 254 / 96 / 10; | |||||
mheight = height * 254 / 96 / 10; | |||||
XRRSetScreenSize(ctx->dpy, DefaultRootWindow(ctx->dpy), | |||||
width, height, mwidth, mheight); | |||||
return 1; | return 1; | ||||
} | } |
int vncRandRResizeScreen(int width, int height) | int vncRandRResizeScreen(int width, int height) | ||||
{ | { | ||||
ScreenPtr pScreen = screenInfo.screens[scrIdx]; | ScreenPtr pScreen = screenInfo.screens[scrIdx]; | ||||
int dpi, mwidth, mheight; | |||||
/* Try to retain DPI when we resize */ | |||||
return RRScreenSizeSet(pScreen, width, height, | |||||
pScreen->mmWidth * width / pScreen->width, | |||||
pScreen->mmHeight * height / pScreen->height); | |||||
/* Keep the DPI specified at start */ | |||||
dpi = monitorResolution ? monitorResolution : 96; | |||||
mwidth = width * 254 / dpi / 10; | |||||
mheight = height * 254 / dpi / 10; | |||||
return RRScreenSizeSet(pScreen, width, height, mwidth, mheight); | |||||
} | } | ||||
void vncRandRUpdateSetTime(void) | void vncRandRUpdateSetTime(void) |