[gnome-settings-daemon/gnome-3-34] power: Fix rounding of brightness value
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon/gnome-3-34] power: Fix rounding of brightness value
- Date: Sat, 12 Oct 2019 12:56:58 +0000 (UTC)
commit 0f92d19da6141c8295644b6edb80f38be7b5c46b
Author: Benjamin Otte <otte benjamin googlemail com>
Date: Fri Oct 11 23:24:55 2019 +0000
power: Fix rounding of brightness value
We rounded properly for percentage to absolute value, but we always floored the other way around.
The new code achieves this by always rounding. This way the following rule holds (assuming the the min
value is 0 for this discussion)
x = round (round (x * scale) / scale)
with
scale = (max - min) / 100
and assuming that scale >= 1
If scale < 1, the rule holds for the other direction.
(cherry picked from commit db37493692fe5e49898f4ee969f5012ad31c3a21)
plugins/power/gpm-common.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
---
diff --git a/plugins/power/gpm-common.c b/plugins/power/gpm-common.c
index 0934a205..a7ca87fb 100644
--- a/plugins/power/gpm-common.c
+++ b/plugins/power/gpm-common.c
@@ -43,6 +43,13 @@
#define UPS_SOUND_LOOP_ID 99
#define GSD_POWER_MANAGER_CRITICAL_ALERT_TIMEOUT 5 /* seconds */
+static int
+gsd_power_backlight_convert_safe (int value, int from_range, int to_range)
+{
+ /* round (value / from_range) * to_range */
+ return (value * to_range + from_range / 2) / from_range;
+}
+
/* take a discrete value with offset and convert to percentage */
int
gsd_power_backlight_abs_to_percentage (int min, int max, int value)
@@ -50,26 +57,18 @@ gsd_power_backlight_abs_to_percentage (int min, int max, int value)
g_return_val_if_fail (max > min, -1);
g_return_val_if_fail (value >= min, -1);
g_return_val_if_fail (value <= max, -1);
- return (((value - min) * 100) / (max - min));
+ return gsd_power_backlight_convert_safe (value - min, max - min, 100);
}
/* take a percentage and convert to a discrete value with offset */
int
gsd_power_backlight_percentage_to_abs (int min, int max, int value)
{
- int steps, step_size;
-
g_return_val_if_fail (max > min, -1);
g_return_val_if_fail (value >= 0, -1);
g_return_val_if_fail (value <= 100, -1);
- steps = max - min;
- step_size = 100 / steps;
-
- /* Round for better precision when steps is small */
- value += step_size / 2;
-
- return min + (steps * value) / 100;
+ return min + gsd_power_backlight_convert_safe (value, 100, max - min);
}
#define GPM_UP_TIME_PRECISION 5*60
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]