[mythtv] [patch] LCD redraw fix in themedmenu.cpp

Leo Weppelman leo at wau.mis.ah.nl
Sun Aug 29 16:36:12 EDT 2004


The attached patch factors out the duplicated LCD update code from
parseMenu() and keyPressHandler() into a new function: updateLCD(). Also
a call is added to this function from paintEvent(). The latter causes the
LCD to be redrawn upon return to the menu.

Leo.
-------------- next part --------------
Index: themedmenu.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmyth/themedmenu.cpp,v
retrieving revision 1.87
diff -u -r1.87 themedmenu.cpp
--- themedmenu.cpp	19 Aug 2004 02:02:19 -0000	1.87
+++ themedmenu.cpp	29 Aug 2004 20:15:16 -0000
@@ -141,6 +141,8 @@
                       const QString &password_setting,
                       const QString &text);
 
+    void updateLCD(void);
+
     ThemedMenu *parent;
 
     float wmult;
@@ -1278,28 +1280,37 @@
     {
         titleText = "MYTH-";
         titleText += menumode;
-        QPtrList<LCDMenuItem> menuItems;
-        menuItems.setAutoDelete(true);
-        bool selected;
+        updateLCD();
+    }
 
-        for (int r = 0; r < (int)buttonRows.size(); r++)
-        {
-            if (r == currentrow)
-                selected = true;
-            else
-                selected = false;
+    selection = "";
+    parent->update(menuRect());
+}
 
-            if (currentcolumn < buttonRows[r].numitems)
-                menuItems.append(new LCDMenuItem(selected, NOTCHECKABLE,
-                                 buttonRows[r].buttons[currentcolumn]->text));
-        }
+void ThemedMenuPrivate::updateLCD()
+{
+    if (!lcddev)
+        return;
+
+    // Build a list of the menu items
+    QPtrList<LCDMenuItem> menuItems;
+    menuItems.setAutoDelete(true);
+    bool selected;
 
-        if (!menuItems.isEmpty())
-            lcddev->switchToMenu(&menuItems, titleText);
+    for (int r = 0; r < (int)buttonRows.size(); r++)
+    {
+        if (r == currentrow)
+            selected = true;
+        else
+            selected = false;
+
+        if (currentcolumn < buttonRows[r].numitems)
+            menuItems.append(new LCDMenuItem(selected, NOTCHECKABLE,
+                             buttonRows[r].buttons[currentcolumn]->text));
     }
 
-    selection = "";
-    parent->update(menuRect());
+    if (!menuItems.isEmpty())
+        lcddev->switchToMenu(&menuItems, titleText);
 }
 
 QPoint ThemedMenuPrivate::parsePoint(const QString &text)
@@ -1976,27 +1987,8 @@
     }
 
     activebutton = buttonRows[currentrow].buttons[currentcolumn];
-    if (lcddev)
-    {
-        // Build a list of the menu items
-        QPtrList<LCDMenuItem> menuItems;
-        menuItems.setAutoDelete(true);
-        bool selected;
-        for (int r = 0; r < (int)buttonRows.size(); r++)
-        {
-            if (r == currentrow)
-                selected = true;
-            else
-                selected = false;
 
-            if (currentcolumn < buttonRows[r].numitems)
-                menuItems.append(new LCDMenuItem(selected, NOTCHECKABLE,
-                                 buttonRows[r].buttons[currentcolumn]->text));
-        }
-
-        if (!menuItems.isEmpty())
-            lcddev->switchToMenu(&menuItems, titleText);
-    }
+    updateLCD();
 
     parent->update(watermarkRect);
     if (lastbutton)
@@ -2316,6 +2308,7 @@
         if (r.intersects(d->buttonList[i].posRect))
             d->paintButton(i, &p, e->erased());
     }
+    d->updateLCD();
 }
 
 void ThemedMenu::ReloadTheme(void)


More information about the mythtv-dev mailing list