summaryrefslogtreecommitdiffstats
path: root/src/hardware.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hardware.cpp')
-rw-r--r--src/hardware.cpp141
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);