⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 backlightmanager.cpp

📁 Example of using HTC sensor api to get Light sensor value and set backlight level in modern HTC phon
💻 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 + -