diff options
| author | Michele Calgaro <michele.calgaro@yahoo.it> | 2023-08-30 13:53:23 +0900 | 
|---|---|---|
| committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2023-09-06 10:58:46 +0900 | 
| commit | b463ff907b38648225347c4c27e74e2067ea273c (patch) | |
| tree | 3488b625448d54630a3895065271306f23036a6b /src/hardware.cpp | |
| parent | 2a85caa9dfbf6e374f575159b26f1c7cf5a2f878 (diff) | |
| download | tdepowersave-b463ff907b38648225347c4c27e74e2067ea273c.tar.gz tdepowersave-b463ff907b38648225347c4c27e74e2067ea273c.zip | |
Separate logic to set brightness by absolute level or percentage
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit fa1f792e610a6a26b2cbd3aa98866eefc200d0dd)
Diffstat (limited to 'src/hardware.cpp')
| -rw-r--r-- | src/hardware.cpp | 141 | 
1 files changed, 71 insertions, 70 deletions
| diff --git a/src/hardware.cpp b/src/hardware.cpp index 86098db..500967d 100644 --- a/src/hardware.cpp +++ b/src/hardware.cpp @@ -898,31 +898,71 @@ bool HardwareInfo::suspend( suspend_type suspend ) {  }  /*! - * Function to set brightness via TDE hardware library (if supported by hardware) + * Function to set brightness level via TDE hardware library (if supported by hardware)   * \param level		Integer with the level to set, (range: 0 - \ref availableBrightnessLevels ) - * \param percent	Integer with the brightness percentage to set   * \return boolean with result of the operation   * \retval true  	if successful   * \retval false 	else, if a error occurs   */ -bool HardwareInfo::setBrightness ( int level, int percent ){ -	if (trace) kdDebug() << funcinfo << "IN: " << "level: " << level << " percent: " << percent << endl; +bool HardwareInfo::setBrightnessLevel(int level) +{ +	if (trace) kdDebug() << funcinfo << "IN: " << "level: " << level << endl;  	bool retval = false; +	int maxBrightness = getMaxBrightnessLevel(); + +	// Use the first backlight in the list +	TDEGenericHardwareList hwlist = m_hwdevices->listByDeviceClass(TDEGenericDeviceType::Backlight); +	TDEGenericDevice *hwdevice; +	hwdevice = hwlist.first(); +	TDEBacklightDevice *backlightdevice = static_cast<TDEBacklightDevice*>(hwdevice); -	if ((level == -1) && (percent >= 0)) { -		if (percent == 0) { +	if (backlightdevice) { +		if (!brightness) { +			checkBrightness(); +		} + +		// Make sure level is within valid range +		if (level < 0) {  			level = 0; -		} else if (percent >= 98) { -			level = (availableBrightnessLevels - 1); +		} +		else if (level > maxBrightness) { +			level = maxBrightness; +		} + +		if (!brightness) { +			kdError() << "Change brightness not supported " << endl;  		} else { -			level = (int)((float)availableBrightnessLevels * ((float)percent/100.0)); -			if (level > (availableBrightnessLevels -1)) -				level = availableBrightnessLevels -1; -			kdDebug() << "percentage mapped to new level: " << level << endl; +			if (currentBrightnessLevel == level) { +				kdDebug() << "Brightness level not changed, requested level == current level" << endl; +				retval = true; +			} else { +				backlightdevice->setRawBrightness(level); +				retval = true; +			}  		}  	} +	// check for actual brightness level to be sure everything was set correct +	checkCurrentBrightness(); +	kdDebugFuncOut(trace); +	return retval; +} + +/*! + * Function to set brightness percentage via TDE hardware library (if supported by hardware) + * \param percent	Integer with the brightness percentage to set + * \return boolean with result of the operation + * \retval true  	if successful + * \retval false 	else, if a error occurs + */ +bool HardwareInfo::setBrightnessPercentage(int percent) +{ +	if (trace) kdDebug() << funcinfo << "IN: " << " percent: " << percent << endl; + +	bool retval = false; +	int maxBrightness = getMaxBrightnessLevel(); +  	// Use the first backlight in the list  	TDEGenericHardwareList hwlist = m_hwdevices->listByDeviceClass(TDEGenericDeviceType::Backlight);  	TDEGenericDevice *hwdevice; @@ -934,8 +974,17 @@ bool HardwareInfo::setBrightness ( int level, int percent ){  			checkBrightness();  		} -		if (!brightness || (level < 0 ) || (level >= availableBrightnessLevels)) { -			kdError() << "Change brightness or requested level not supported " << endl; +		// Make sure percentage is within valid range +		if (percent < 0) { +			percent = 0; +		} +		else if (percent > 100) { +			percent = 100; +		} +		int level = (int)(maxBrightness * percent / 100.0); + +		if (!brightness) { +			kdError() << "Change brightness not supported " << endl;  		} else {  			if (currentBrightnessLevel == level) {  				kdDebug() << "Brightness level not changed, requested level == current level" << endl; @@ -1137,35 +1186,11 @@ bool HardwareInfo::setBrightnessUp(int percentageStep) {  	checkCurrentBrightness(); -	if (supportBrightness() && (getCurrentBrightnessLevel() >= 0) && -            (getCurrentBrightnessLevel() != (getMaxBrightnessLevel()-1))) { -		int setTo = 0; -		int minPercStep = 10; -		int currentPerc = (int)(((float)getCurrentBrightnessLevel()/(float)(getMaxBrightnessLevel()-1))*100.0); - -		if (percentageStep > 0 && (percentageStep <= (100-currentPerc))) { -			minPercStep = percentageStep; -		} - -		if ((currentPerc + minPercStep) > 100) { -			// set to 100 % -			setTo = getMaxBrightnessLevel() -1; -		} else { -			setTo = (int)(((float)(getMaxBrightnessLevel()-1))*(((float)(currentPerc + minPercStep))/100.0)); -			if ((setTo == getCurrentBrightnessLevel()) && (setTo <  (getMaxBrightnessLevel() -1))) { -				setTo++; -			} -		} - -		if (trace) { -			kdDebug() << "Max: " << getMaxBrightnessLevel() -				  << " Current: " << getCurrentBrightnessLevel() -				  << " minPercStep: " << minPercStep -				  << " currentPerc: " << currentPerc -				  << " setTo: " << setTo << endl; -		} - -		retval = setBrightness(setTo, -1); +	if (supportBrightness() && getCurrentBrightnessLevel() < getMaxBrightnessLevel() && +			percentageStep > 0) +	{ +		int currentPerc = (int)(100.0 * getCurrentBrightnessLevel() / getMaxBrightnessLevel()); +		retval = setBrightnessPercentage(currentPerc + percentageStep);  	}  	kdDebugFuncOut(trace); @@ -1186,33 +1211,9 @@ bool HardwareInfo::setBrightnessDown(int percentageStep) {  	checkCurrentBrightness(); -	if (supportBrightness() && (getCurrentBrightnessLevel() > 0)) { -		int setTo = 0; -		int minPercStep = 10; -		int currentPerc = (int)(((float)getCurrentBrightnessLevel()/(float)(getMaxBrightnessLevel()-1))*100.0); - -		if (percentageStep > 0 && (percentageStep < currentPerc)) { -			minPercStep = percentageStep; -		} - -		if ((currentPerc - minPercStep) < 0) { -			setTo = 0; -		} else { -			setTo = (int)(((float)(getMaxBrightnessLevel()-1))*(((float)(currentPerc - minPercStep))/100.0)); -			if ((setTo == getCurrentBrightnessLevel()) && (setTo > 0)) { -				setTo--; -			} -		} - -		if (trace) { -			kdDebug() << "Max: " << getMaxBrightnessLevel() -				  << " Current: " << getCurrentBrightnessLevel() -				  << " minPercStep: " << minPercStep -				  << " currentPerc: " << currentPerc -				  << " setTo: " << setTo << endl; -		} - -		retval = setBrightness(setTo, -1); +	if (supportBrightness() && getCurrentBrightnessLevel() > 0 && percentageStep > 0) { +		int currentPerc = (int)(100.0 * getCurrentBrightnessLevel() / getMaxBrightnessLevel()); +		retval = setBrightnessPercentage(currentPerc - percentageStep);  	}  	kdDebugFuncOut(trace); | 
