From 5dda583a94cc035141b6de0deb4c7b181f3fefd6 Mon Sep 17 00:00:00 2001
From: Tatsuya79 <jeanpascalmeunier@hotmail.com>
Date: Wed, 7 Mar 2018 12:17:10 +0100
Subject: [PATCH] Fix MaterialUI scaling bug in long lists, lower res devices.

---
 menu/drivers/materialui.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c
index 4310e01a2f..21653045f3 100644
--- a/menu/drivers/materialui.c
+++ b/menu/drivers/materialui.c
@@ -1846,21 +1846,31 @@ static bool materialui_load_image(void *userdata, void *data, enum menu_image_ty
 /* Compute the scroll value depending on the highlighted entry */
 static float materialui_get_scroll(materialui_handle_t *mui)
 {
-   unsigned width, height, half = 0;
-   size_t selection             = menu_navigation_get_selection();
+   unsigned i, width, height = 0;
+   float half, sum = 0;
+   size_t selection   = menu_navigation_get_selection();
+   file_list_t *list  = menu_entries_get_selection_buf_ptr(0);
 
    if (!mui)
       return 0;
 
    video_driver_get_size(&width, &height);
 
-   if (mui->line_height)
-      half = (height / mui->line_height) / 3;
+   half = height / 2;
 
-   if (selection < half)
+   for (i = 0; i < selection; i++)
+   {
+      materialui_node_t *node   = (materialui_node_t*)
+            file_list_get_userdata_at_offset(list, i);
+
+      if (node)
+      sum += node->line_height;
+   }
+
+   if (sum < half)
       return 0;
 
-   return ((selection + 2 - half) * mui->line_height);
+   return sum - half;
 }
 
 /* The navigation pointer has been updated (for example by pressing up or down