diff options
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); |