PhycialDisplay: detect phycial size

This commit is contained in:
李通洲
2023-08-09 10:52:12 +08:00
parent abae204ab8
commit 008c9a597e
7 changed files with 29 additions and 7 deletions
@@ -5,6 +5,8 @@ typedef struct FFPhycialDisplayResult
FFstrbuf name;
uint32_t width; // native / maximum resolution, in pixels
uint32_t height; // native / maximum resolution, in pixels
uint32_t phycialWidth; // in mm
uint32_t phycialHeight; // in mm
} FFPhycialDisplayResult;
const char* ffDetectPhycialDisplay(FFlist* results);
@@ -31,6 +31,10 @@ static const char* detectWithDisplayServices(const FFDisplayServerResult* displa
CFDictionaryRef productNames;
if(!ffCfDictGetDict(displayInfo, CFSTR(kDisplayProductName), &productNames))
ffCfDictGetString(productNames, CFSTR("en_US"), &phycialDisplay->name);
CGSize size = CGDisplayScreenSize((CGDirectDisplayID) display->id);
phycialDisplay->phycialWidth = (uint32_t) (size.width + 0.5);
phycialDisplay->phycialHeight = (uint32_t) (size.height + 0.5);
}
}
}
@@ -83,14 +87,16 @@ static const char* detectWithDdcci(FFlist* results)
continue;
uint32_t width, height;
ffEdidGetPhycialResolution(CFDataGetBytePtr(edid), &width, &height);
const uint8_t* edidData = CFDataGetBytePtr(edid);
ffEdidGetPhycialResolution(edidData, &width, &height);
if (width == 0 || height == 0) continue;
FFPhycialDisplayResult* display = (FFPhycialDisplayResult*) ffListAdd(results);
display->width = width;
display->height = height;
ffStrbufInit(&display->name);
ffEdidGetName(CFDataGetBytePtr(edid), &display->name);
ffEdidGetName(edidData, &display->name);
ffEdidGetPhycialSize(edidData, &display->phycialWidth, &display->phycialHeight);
}
return NULL;
}
@@ -50,6 +50,7 @@ const char* ffDetectPhycialDisplay(FFlist* results)
display->width = width;
display->height = height;
ffStrbufInitS(&display->name, plainName);
ffEdidGetPhycialSize(edidData, &display->phycialWidth, &display->phycialHeight);
}
ffStrbufSubstrBefore(&drmDir, drmDirLength);
@@ -36,13 +36,12 @@ const char* ffDetectPhycialDisplay(FFlist* results)
ffEdidGetPhycialResolution(edidData, &width, &height);
if (width == 0 || height == 0) continue;
wchar_t wName[MAX_PATH] = {}; // MONITOR\BOE09F9
if (!SetupDiGetDeviceRegistryPropertyW(hdev, &did, SPDRP_HARDWAREID, NULL, (BYTE*) wName, sizeof(wName), NULL)) continue;
FFPhycialDisplayResult* display = (FFPhycialDisplayResult*) ffListAdd(results);
display->width = width;
display->height = height;
ffStrbufInitWS(&display->name, wcschr(wName, L'\\') + 1);
ffStrbufInit(&display->name);
ffEdidGetName(edidData, &display->name);
ffEdidGetPhycialSize(edidData, &display->phycialWidth, &display->phycialHeight);
}
return NULL;
}