[mutter] monitor-config: Handle fractional scale precision loss
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor-config: Handle fractional scale precision loss
- Date: Fri, 14 Jul 2017 13:02:22 +0000 (UTC)
commit 41eea5a9429e48577fbd97ebf277431b6fee5c1c
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Jun 9 15:51:14 2017 +0800
monitor-config: Handle fractional scale precision loss
When calculating sizes given some size and a fractional logical monitor
scale with precision loss, round the result of the floating point
calculation to the closest integer, as otherwise we might end up with
result smaller by 1 if there was a loss of precision when calculating
the scale.
https://bugzilla.gnome.org/show_bug.cgi?id=765011
src/backends/meta-monitor-config-manager.c | 6 ++++--
src/backends/meta-monitor-config-store.c | 4 ++--
src/backends/meta-monitor-manager.c | 4 ++--
3 files changed, 8 insertions(+), 6 deletions(-)
---
diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
index 5ff4fd0..81abb65 100644
--- a/src/backends/meta-monitor-config-manager.c
+++ b/src/backends/meta-monitor-config-manager.c
@@ -981,8 +981,10 @@ meta_verify_logical_monitor_config (MetaLogicalMonitorConfig *logical_monitor
switch (layout_mode)
{
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
- expected_mode_width *= logical_monitor_config->scale;
- expected_mode_height *= logical_monitor_config->scale;
+ expected_mode_width = roundf (expected_mode_width *
+ logical_monitor_config->scale);
+ expected_mode_height = roundf (expected_mode_height *
+ logical_monitor_config->scale);
break;
case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
break;
diff --git a/src/backends/meta-monitor-config-store.c b/src/backends/meta-monitor-config-store.c
index aa0310b..6ed1943 100644
--- a/src/backends/meta-monitor-config-store.c
+++ b/src/backends/meta-monitor-config-store.c
@@ -453,8 +453,8 @@ derive_logical_monitor_layout (MetaLogicalMonitorConfig *logical_monitor_conf
switch (layout_mode)
{
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
- width /= logical_monitor_config->scale;
- height /= logical_monitor_config->scale;
+ width = roundf (width / logical_monitor_config->scale);
+ height = roundf (height / logical_monitor_config->scale);
break;
case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
break;
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index aed4604..099a48e 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -1968,8 +1968,8 @@ derive_logical_monitor_size (MetaMonitorConfig *monitor_config,
switch (layout_mode)
{
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
- width /= scale;
- height /= scale;
+ width = roundf (width / scale);
+ height = roundf (height / scale);
break;
case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]