2013-12-12 15:33:35 +01:00
|
|
|
From: Egbert Eich <eich@suse.de>
|
|
|
|
|
|
|
|
Fix calculation of DPI using mode data if present.
|
|
|
|
|
2009-08-04 21:52:16 +02:00
|
|
|
Index: hw/xfree86/common/xf86Helper.c
|
2012-04-20 11:32:05 +02:00
|
|
|
===================================================================
|
|
|
|
--- hw/xfree86/common/xf86Helper.c.orig
|
2009-08-04 21:52:16 +02:00
|
|
|
+++ hw/xfree86/common/xf86Helper.c
|
2019-09-18 14:48:07 +02:00
|
|
|
@@ -875,12 +875,22 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int
|
2012-04-20 11:32:05 +02:00
|
|
|
else if (pScrn->widthmm > 0 || pScrn->heightmm > 0) {
|
|
|
|
from = X_CONFIG;
|
|
|
|
if (pScrn->widthmm > 0) {
|
|
|
|
- pScrn->xDpi =
|
|
|
|
- (int) ((double) pScrn->virtualX * MMPERINCH / pScrn->widthmm);
|
2008-05-26 23:18:34 +02:00
|
|
|
+ if (pScrn->modes && pScrn->modes->HDisplay > 0) {
|
|
|
|
+ pScrn->xDpi =
|
2012-04-20 11:32:05 +02:00
|
|
|
+ (int)((double) pScrn->modes->HDisplay * MMPERINCH / pScrn->widthmm);
|
2008-05-26 23:18:34 +02:00
|
|
|
+ } else {
|
2012-04-20 11:32:05 +02:00
|
|
|
+ pScrn->xDpi =
|
|
|
|
+ (int)((double)pScrn->virtualX * MMPERINCH / pScrn->widthmm);
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
if (pScrn->heightmm > 0) {
|
|
|
|
- pScrn->yDpi =
|
|
|
|
- (int) ((double) pScrn->virtualY * MMPERINCH / pScrn->heightmm);
|
|
|
|
+ if (pScrn->modes && pScrn->modes->VDisplay > 0) {
|
|
|
|
+ pScrn->yDpi =
|
|
|
|
+ (int)((double)pScrn->modes->VDisplay * MMPERINCH / pScrn->heightmm);
|
|
|
|
+ } else {
|
|
|
|
+ pScrn->yDpi =
|
|
|
|
+ (int)((double)pScrn->virtualY * MMPERINCH / pScrn->heightmm);
|
2008-05-26 23:18:34 +02:00
|
|
|
+ }
|
2012-04-20 11:32:05 +02:00
|
|
|
}
|
|
|
|
if (pScrn->xDpi > 0 && pScrn->yDpi <= 0)
|
|
|
|
pScrn->yDpi = pScrn->xDpi;
|
2019-09-18 14:48:07 +02:00
|
|
|
@@ -919,12 +929,22 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int
|
2012-04-20 11:32:05 +02:00
|
|
|
pScrn->widthmm = ddcWidthmm;
|
|
|
|
pScrn->heightmm = ddcHeightmm;
|
|
|
|
if (pScrn->widthmm > 0) {
|
|
|
|
- pScrn->xDpi =
|
|
|
|
- (int) ((double) pScrn->virtualX * MMPERINCH / pScrn->widthmm);
|
|
|
|
+ if (pScrn->modes && pScrn->modes->HDisplay > 0) {
|
|
|
|
+ pScrn->xDpi =
|
|
|
|
+ (int)((double) pScrn->modes->HDisplay * MMPERINCH / pScrn->widthmm);
|
|
|
|
+ } else {
|
|
|
|
+ pScrn->xDpi =
|
|
|
|
+ (int)((double)pScrn->virtualX * MMPERINCH / pScrn->widthmm);
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
if (pScrn->heightmm > 0) {
|
|
|
|
- pScrn->yDpi =
|
|
|
|
- (int) ((double) pScrn->virtualY * MMPERINCH / pScrn->heightmm);
|
|
|
|
+ if (pScrn->modes && pScrn->modes->VDisplay > 0) {
|
|
|
|
+ pScrn->yDpi =
|
|
|
|
+ (int)((double)pScrn->modes->VDisplay * MMPERINCH / pScrn->heightmm);
|
|
|
|
+ } else {
|
|
|
|
+ pScrn->yDpi =
|
|
|
|
+ (int)((double)pScrn->virtualY * MMPERINCH / pScrn->heightmm);
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
if (pScrn->xDpi > 0 && pScrn->yDpi <= 0)
|
|
|
|
pScrn->yDpi = pScrn->xDpi;
|