DisplayServer: revert changes of brightness partially

This commit is contained in:
李通洲
2023-01-09 19:53:41 +08:00
parent 476b0495e0
commit 4cc5f35b04
9 changed files with 19 additions and 119 deletions
+1 -1
View File
@@ -469,7 +469,7 @@ elseif(WIN32)
src/detection/cpuUsage/cpuUsage_windows.c
src/detection/cursor/cursor_windows.c
src/detection/disk/disk_windows.c
src/detection/displayserver/displayserver_windows.cpp
src/detection/displayserver/displayserver_windows.c
src/detection/font/font_windows.c
src/detection/gpu/gpu_windows.cpp
src/detection/host/host_windows.c
+1 -2
View File
@@ -19,7 +19,7 @@ uint32_t ffdsParseRefreshRate(int32_t refreshRate)
return (uint32_t) refreshRate;
}
bool ffdsAppendResolution(FFDisplayServerResult* result, uint32_t width, uint32_t height, uint32_t refreshRate, int32_t brightness)
bool ffdsAppendResolution(FFDisplayServerResult* result, uint32_t width, uint32_t height, uint32_t refreshRate)
{
if(width == 0 || height == 0)
return false;
@@ -28,7 +28,6 @@ bool ffdsAppendResolution(FFDisplayServerResult* result, uint32_t width, uint32_
resolution->width = width;
resolution->height = height;
resolution->refreshRate = refreshRate;
resolution->brightness = brightness;
return true;
}
+1 -2
View File
@@ -10,7 +10,6 @@ typedef struct FFResolutionResult
uint32_t width;
uint32_t height;
uint32_t refreshRate;
int32_t brightness;
} FFResolutionResult;
typedef struct FFDisplayServerResult
@@ -28,6 +27,6 @@ const FFDisplayServerResult* ffConnectDisplayServer(const FFinstance* instance);
//Used internal
uint32_t ffdsParseRefreshRate(int32_t refreshRate);
bool ffdsAppendResolution(FFDisplayServerResult* result, uint32_t width, uint32_t height, uint32_t refreshRate, int32_t brightness);
bool ffdsAppendResolution(FFDisplayServerResult* result, uint32_t width, uint32_t height, uint32_t refreshRate);
#endif
@@ -7,8 +7,6 @@
#include <assert.h>
#include <CoreGraphics/CGDirectDisplay.h>
extern int DisplayServicesGetBrightness(CGDirectDisplayID display, float *brightness) __attribute__((weak_import));
static void detectResolution(FFDisplayServerResult* ds)
{
CGDirectDisplayID screens[128];
@@ -22,15 +20,10 @@ static void detectResolution(FFDisplayServerResult* ds)
CGDisplayModeRef mode = CGDisplayCopyDisplayMode(screen);
if(mode)
{
float brightness;
if(DisplayServicesGetBrightness == NULL || DisplayServicesGetBrightness(screen, &brightness) != kCGErrorSuccess)
brightness = -1;
ffdsAppendResolution(ds,
(uint32_t)CGDisplayModeGetWidth(mode),
(uint32_t)CGDisplayModeGetHeight(mode),
(uint32_t)CGDisplayModeGetRefreshRate(mode),
(int32_t)(brightness * 100)
(uint32_t)CGDisplayModeGetRefreshRate(mode)
);
CGDisplayModeRelease(mode);
}
@@ -1,13 +1,9 @@
extern "C" {
#include "displayserver.h"
#include "detection/os/os.h"
}
#include "util/windows/wmi.hpp"
#include <dwmapi.h>
#include <winuser.h>
#include <WinUser.h>
extern "C"
void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance)
{
FF_UNUSED(instance);
@@ -29,33 +25,16 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* ins
ffStrbufInit(&ds->deVersion);
ffListInit(&ds->resolutions, sizeof(FFResolutionResult));
DISPLAY_DEVICEW displayDevice;
displayDevice.cb = sizeof(DISPLAY_DEVICEW);
DISPLAY_DEVICEW displayDevice = { .cb = sizeof(DISPLAY_DEVICEW) };
for(DWORD devNum = 0; EnumDisplayDevicesW(NULL, devNum, &displayDevice, 0) != 0; ++devNum)
{
if(!(displayDevice.StateFlags & DISPLAY_DEVICE_ACTIVE))
continue;
DEVMODEW devMode;
devMode.dmSize = sizeof(DEVMODEW);
DEVMODEW devMode = { .dmSize = sizeof(DEVMODEW) };
if(EnumDisplaySettingsW(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &devMode) == 0)
continue;
ffdsAppendResolution(ds, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency, -1);
}
//TODO: support multiple monitors
if(ds->resolutions.length == 1)
{
FFWmiQuery query(L"SELECT CurrentBrightness FROM WmiMonitorBrightness WHERE Active = true", nullptr, FFWmiNamespace::WMI);
if(FFWmiRecord record = query.next())
{
uint64_t brightness;
record.getUnsigned(L"CurrentBrightness", &brightness);
FF_LIST_FOR_EACH(FFResolutionResult, resolution, ds->resolutions)
{
resolution->brightness = (int) brightness;
}
}
ffdsAppendResolution(ds, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency);
}
//https://github.com/hykilpikonna/hyfetch/blob/master/neofetch#L2067
@@ -1,61 +1,7 @@
#include "displayserver_linux.h"
#include "common/io.h"
#include <dirent.h>
static void parseBacklight(FFDisplayServerResult* result)
{
if(result->resolutions.length != 1)
return;
//https://www.kernel.org/doc/Documentation/ABI/stable/sysfs-class-backlight
const char* backlightDirPath = "/sys/class/backlight/";
DIR* dirp = opendir(backlightDirPath);
if(dirp == NULL)
return;
FFstrbuf backlightDir;
ffStrbufInitA(&backlightDir, 64);
ffStrbufAppendS(&backlightDir, backlightDirPath);
uint32_t backlightDirLength = backlightDir.length;
FFstrbuf buffer;
ffStrbufInit(&buffer);
struct dirent* entry;
while((entry = readdir(dirp)) != NULL)
{
if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue;
ffStrbufAppendS(&backlightDir, entry->d_name);
ffStrbufAppendS(&backlightDir, "/actual_brightness");
if(ffReadFileBuffer(backlightDir.chars, &buffer))
{
double actualBrightness = ffStrbufToDouble(&buffer);
ffStrbufSubstrBefore(&backlightDir, backlightDirLength);
ffStrbufAppendS(&backlightDir, entry->d_name);
ffStrbufAppendS(&backlightDir, "/max_brightness");
if(ffReadFileBuffer(backlightDir.chars, &buffer))
{
double maxBrightness = ffStrbufToDouble(&buffer);
FF_LIST_FOR_EACH(FFResolutionResult, resolution, result->resolutions)
{
resolution->brightness = (int) (actualBrightness * 100 / maxBrightness);
}
}
break;
}
}
closedir(dirp);
ffStrbufDestroy(&backlightDir);
ffStrbufDestroy(&buffer);
}
static void parseDRM(FFDisplayServerResult* result)
{
const char* drmDirPath = "/sys/class/drm/";
@@ -140,6 +86,4 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* ins
//This fills in missing information about WM / DE by using env vars and iterating processes
ffdsDetectWMDE(instance, ds);
parseBacklight(ds);
}
+5 -10
View File
@@ -119,8 +119,7 @@ void ffdsConnectXcb(const FFinstance* instance, FFDisplayServerResult* result)
result,
(uint32_t) iterator.data->width_in_pixels,
(uint32_t) iterator.data->height_in_pixels,
0,
-1
0
);
ffxcb_screen_next(&iterator);
}
@@ -185,8 +184,7 @@ static bool xcbRandrHandleModeInfo(XcbRandrData* data, xcb_randr_mode_info_t* mo
data->result,
(uint32_t) modeInfo->width,
(uint32_t) modeInfo->height,
refreshRate == 0 ? data->defaultRefreshRate : refreshRate,
-1
refreshRate == 0 ? data->defaultRefreshRate : refreshRate
);
}
@@ -221,8 +219,7 @@ static bool xcbRandrHandleCrtc(XcbRandrData* data, xcb_randr_crtc_t crtc)
data->result,
(uint32_t) crtcInfoReply->width,
(uint32_t) crtcInfoReply->height,
data->defaultRefreshRate,
-1
data->defaultRefreshRate
);
free(crtcInfoReply);
@@ -265,8 +262,7 @@ static bool xcbRandrHandleMonitor(XcbRandrData* data, xcb_randr_monitor_info_t*
data->result,
(uint32_t) monitor->width,
(uint32_t) monitor->height,
data->defaultRefreshRate,
-1
data->defaultRefreshRate
);
}
@@ -324,8 +320,7 @@ static void xcbRandrHandleScreen(XcbRandrData* data, xcb_screen_t* screen)
data->result,
(uint32_t) screen->width_in_pixels,
(uint32_t) screen->height_in_pixels,
data->defaultRefreshRate,
-1
data->defaultRefreshRate
);
}
+5 -10
View File
@@ -83,8 +83,7 @@ void ffdsConnectXlib(const FFinstance* instance, FFDisplayServerResult* result)
result,
(uint32_t) screen->width,
(uint32_t) screen->height,
0,
-1
0
);
}
@@ -143,8 +142,7 @@ static bool xrandrHandleModeInfo(XrandrData* data, XRRModeInfo* modeInfo)
data->result,
(uint32_t) modeInfo->width,
(uint32_t) modeInfo->height,
refreshRate == 0 ? data->defaultRefreshRate : refreshRate,
-1
refreshRate == 0 ? data->defaultRefreshRate : refreshRate
);
}
@@ -173,8 +171,7 @@ static bool xrandrHandleCrtc(XrandrData* data, RRCrtc crtc)
data->result,
(uint32_t) crtcInfo->width,
(uint32_t) crtcInfo->height,
data->defaultRefreshRate,
-1
data->defaultRefreshRate
);
data->ffXRRFreeCrtcInfo(crtcInfo);
@@ -208,8 +205,7 @@ static bool xrandrHandleMonitor(XrandrData* data, XRRMonitorInfo* monitorInfo)
data->result,
(uint32_t) monitorInfo->width,
(uint32_t) monitorInfo->height,
data->defaultRefreshRate,
-1
data->defaultRefreshRate
);
}
@@ -261,8 +257,7 @@ static void xrandrHandleScreen(XrandrData* data, Screen* screen)
data->result,
(uint32_t) WidthOfScreen(screen),
(uint32_t) HeightOfScreen(screen),
data->defaultRefreshRate,
-1
data->defaultRefreshRate
);
}
+1 -5
View File
@@ -27,9 +27,6 @@ void ffPrintResolution(FFinstance* instance)
if(result->refreshRate > 0)
printf(" @ %iHz", result->refreshRate);
if(result->brightness >= 0)
printf(" (Brightness %d%%)", result->brightness);
putchar('\n');
}
else
@@ -37,8 +34,7 @@ void ffPrintResolution(FFinstance* instance)
ffPrintFormat(instance, FF_RESOLUTION_MODULE_NAME, moduleIndex, &instance->config.resolution, FF_RESOLUTION_NUM_FORMAT_ARGS, (FFformatarg[]) {
{FF_FORMAT_ARG_TYPE_INT, &result->width},
{FF_FORMAT_ARG_TYPE_INT, &result->height},
{FF_FORMAT_ARG_TYPE_INT, &result->refreshRate},
{FF_FORMAT_ARG_TYPE_INT, &result->brightness},
{FF_FORMAT_ARG_TYPE_INT, &result->refreshRate}
});
}
}