📄 backlightmanager.cpp
字号:
#include "BacklightManager.h"
#include "HwStuff.h"
#include "HTCStuff.h"
#include "HashContainer.h"
#define Math_E 2.7182818284590452354
BacklightManager::BacklightManager(LumosConfig* lconfig)
{
this->cfg = lconfig;
this->curBrightnessLevel = -1;
}
int BacklightManager::ExpandBrightnessLevel(int lev)
{
cfg->EXCEPTION_BACKLIGHT = -1;
if (lev < 0) lev = cfg->MIN_REPORTED_BACKLIGHT + (-lev - 1);
if (lev < cfg->MIN_REPORTED_BACKLIGHT) lev = cfg->MIN_REPORTED_BACKLIGHT;
if (lev > cfg->MAX_REPORTED_BACKLIGHT) lev = cfg->MAX_REPORTED_BACKLIGHT;
return lev;
}
void BacklightManager::SetBrightness(int val)
{
int lev = this->ExpandBrightnessLevel(val);
bool acPowered = IsAcPowered();
if (acPowered != lastAcPower || curBrightnessLevel != lev)
{
if (acPowered == lastAcPower && cfg->BACKLIGHT_TOLERANCE > 0 &&
lev != cfg->MAX_REPORTED_BACKLIGHT && lev != cfg->MIN_REPORTED_BACKLIGHT &&
abs(curBrightnessLevel - lev) < cfg->BACKLIGHT_TOLERANCE) return;
if (!acPowered)
HTCUtilSetOnBatteryBrightnessLevel(lev);
else if (acPowered && cfg->USE_ON_AC_POWER)
HTCUtilSetOnPowerBrightnessLevel(lev);
curBrightnessLevel = lev;
}
lastAcPower = acPowered;
}
typedef bool (*funcSearchWnd)(TCHAR* text);
bool appActive(TCHAR* text) { return (FindWindow(0, text)!=0); }
bool clsActive(TCHAR* text) { return (FindWindow(text, 0)!=0); }
bool clspActive(TCHAR* text) { return (FindWindow(text, text)!=0); }
int ExceptionSearchWnd(HashContainer<int>& excs, funcSearchWnd searchFunc)
{
int cnt = excs.GetCount();
for (int i=0; i < cnt; i++)
{
if (searchFunc(excs.GetKey(i))) return *(excs[i]);
}
return -1;
}
static void EmulateActivity()
{
static DWORD lastmove = 0;
DWORD ticks = GetTickCount();
if (lastmove - ticks > 5000)
{
mouse_event(1, 0, 0, 0, 0);
SystemIdleTimerReset();
lastmove = ticks;
}
}
void BacklightManager::CheckExceptions()
{
TCHAR buf[256];
TCHAR buf2[256];
int lev = -1;
if (cfg->EXCEPTION_ONLY_ACTIVE_WINDOW)
{
HWND hwnd = GetForegroundWindow();
GetWindowText(hwnd, buf, sizeof(buf)/sizeof(TCHAR));
GetClassName(hwnd, buf2, sizeof(buf2)/sizeof(TCHAR));
TCHAR* title = wctrim(buf);
TCHAR* clsname = wctrim(buf2);
int index = cfg->exceptions.GetIndex(title);
if (index >=0)
lev = *(cfg->exceptions[index]);
else
{
index = cfg->exceptions_class.GetIndex(clsname);
if (index >= 0)
lev = *(cfg->exceptions_class[index]);
else
if (wcscmp(title, clsname)==0)
{
index = cfg->exceptions_progclass.GetIndex(title);
if (index >= 0)
lev = *(cfg->exceptions_progclass[index]);
}
}
if (lev >= 0)
{
EmulateActivity();
}
if (lev < cfg->MIN_BACKLIGHT) lev = -1;
}
else
{
if (lev < 0) lev = ExceptionSearchWnd(cfg->exceptions, appActive);
if (lev < 0) lev = ExceptionSearchWnd(cfg->exceptions_class, clsActive);
if (lev < 0) lev = ExceptionSearchWnd(cfg->exceptions_progclass, clspActive);
}
cfg->EXCEPTION_BACKLIGHT = lev;
}
int BacklightManager::CalculateBrightness(int medium)
{
if (cfg->EXCEPTION_BACKLIGHT >= 0)
return cfg->EXCEPTION_BACKLIGHT;
if (medium < cfg->DIM_TO_MINIMUM_BELOW)
return -1;
if (medium < cfg->DIM_TO_MINIMUM_PLUS_ONE_BELOW)
return -2;
double midbkl;
// linear change
//midbkl = cfg->MIN_BACKLIGHT +
// (double)medium /
// (cfg->MAX_BL_LUMENS - cfg->MIN_BL_LUMENS) *
// (cfg->MAX_BACKLIGHT - cfg->MIN_BACKLIGHT);
// logarithm change
midbkl = cfg->MIN_BACKLIGHT +
log(1 + (double)(medium - cfg->MIN_BL_LUMENS) / (cfg->MAX_BL_LUMENS - cfg->MIN_BL_LUMENS) * (Math_E - 1)) *
(cfg->MAX_BACKLIGHT - cfg->MIN_BACKLIGHT);
return (int)midbkl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -