aboutsummaryrefslogtreecommitdiff
path: root/shell/shell.c
diff options
context:
space:
mode:
authorLeandro Pereira <leandro@hardinfo.org>2016-07-31 23:21:08 -0300
committerLeandro Pereira <leandro@hardinfo.org>2016-08-01 08:30:08 -0300
commit6e91ba6f92e0dd9402cbca6616fccc0d7d5c84af (patch)
tree28d1af35711b31703da86ba3988c0d01c36c3c0d /shell/shell.c
parenta7b777a4363909d9a284a87da7f9f135a88c1d9d (diff)
Simplify relative percentage calculation
Use a simple linear interpolation.
Diffstat (limited to 'shell/shell.c')
-rw-r--r--shell/shell.c49
1 files changed, 22 insertions, 27 deletions
diff --git a/shell/shell.c b/shell/shell.c
index 98e5d185..354bd3ad 100644
--- a/shell/shell.c
+++ b/shell/shell.c
@@ -1195,7 +1195,7 @@ static void update_progress()
GtkTreeStore *store = GTK_TREE_STORE(model);
GtkTreeIter iter, fiter;
gchar *tmp;
- gdouble maxv = 0, maxp = 0, minp = 100.0, cur, floatval;
+ gdouble maxv = INT_MIN, minv = INT_MAX, coeff, cur;
if (!gtk_tree_model_get_iter_first(model, &fiter))
return;
@@ -1208,52 +1208,47 @@ static void update_progress()
cur = atof(tmp);
if (cur > maxv)
- maxv = cur;
+ maxv = cur;
+ if (cur < minv)
+ minv = cur;
g_free(tmp);
} while (gtk_tree_model_iter_next(model, &iter));
+
+ if (minv - maxv < 0.001)
+ maxv += 1.0f;
} else {
+ minv = 1.0f;
maxv = 100.0f;
}
- /* calculates the relative percentage and finds the maximum percentage */
- if (shell->_order_type == SHELL_ORDER_ASCENDING) {
- iter = fiter;
- do {
- gtk_tree_model_get(model, &iter, INFO_TREE_COL_VALUE, &tmp, -1);
-
- cur = ceil((100.0 * atof(tmp)) / maxv);
- if (minp > cur)
- minp = cur;
-
- g_free(tmp);
- } while (gtk_tree_model_iter_next(model, &iter));
- }
+ coeff = (100.0f - 1.0f) / (maxv - minv);
/* fix the maximum relative percentage */
iter = fiter;
do {
- char *space;
- char formatted[128];
+ char *space;
+ char formatted[128];
+ gdouble pct;
gtk_tree_model_get(model, &iter, INFO_TREE_COL_VALUE, &tmp, -1);
- floatval = atof(tmp);
+ cur = atof(tmp);
space = strchr(tmp, ' ');
- cur = ceil((100.0 * floatval) / maxv);
-
- if (shell->_order_type == SHELL_ORDER_ASCENDING)
- cur = ceil(100.0 - cur + minp);
+ pct = coeff * (cur - minv) + 1.0f;
+ if (shell->_order_type == SHELL_ORDER_ASCENDING)
+ pct = 100.0 - pct;
+ pct = ceil(pct);
if (space) {
- snprintf(formatted, sizeof(formatted), "%.2f%s", floatval, space);
+ snprintf(formatted, sizeof(formatted), "%.2f%s", cur, space);
} else {
- snprintf(formatted, sizeof(formatted), "%.2f", floatval);
+ snprintf(formatted, sizeof(formatted), "%.2f", cur);
}
- gtk_tree_store_set(store, &iter, INFO_TREE_COL_PROGRESS, cur,
- INFO_TREE_COL_VALUE, strreplacechr(formatted, ",", '.'),
- -1);
+ gtk_tree_store_set(store, &iter, INFO_TREE_COL_PROGRESS, pct,
+ INFO_TREE_COL_VALUE, strreplacechr(formatted, ",",
+ '.'), -1);
g_free(tmp);
} while (gtk_tree_model_iter_next(model, &iter));