+static void menu_darken_bg(void *dst, void *src, int pixels, int darker)\r
+{\r
+ unsigned int *dest = dst;\r
+ unsigned int *sorc = src;\r
+ pixels /= 2;\r
+ if (darker)\r
+ {\r
+ while (pixels--)\r
+ {\r
+ unsigned int p = *sorc++;\r
+ *dest++ = ((p&0xf79ef79e)>>1) - ((p&0xc618c618)>>3);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ while (pixels--)\r
+ {\r
+ unsigned int p = *sorc++;\r
+ *dest++ = (p&0xf79ef79e)>>1;\r
+ }\r
+ }\r
+}\r
+\r
+static void menu_enter(int is_rom_loaded)\r
+{\r
+ if (is_rom_loaded)\r
+ {\r
+ // darken the active framebuffer\r
+ menu_darken_bg(g_menubg_ptr, g_screen_ptr, g_screen_width * g_screen_height, 1);\r
+ }\r
+ else\r
+ {\r
+ char buff[256];\r
+\r
+ // should really only happen once, on startup..\r
+ emu_make_path(buff, "skin/background.png", sizeof(buff));\r
+ if (readpng(g_menubg_ptr, buff, READPNG_BG) < 0)\r
+ memset(g_menubg_ptr, 0, g_screen_width * g_screen_height * 2);\r
+ }\r
+\r
+ plat_video_menu_enter(is_rom_loaded);\r
+}\r
+\r