X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-libraries.git;a=blobdiff_plain;f=minimenu%2Fmmui.c;h=bb8a4eff9a6d48f1e91154184be3ff3d8e069bc6;hp=c7e02ea7dec4ea7b6feedb39472f258d7a5d9166;hb=3a75869cb3f4f25885249faef0830fd3fdf847ce;hpb=9605ab5fb29ce107a849948eb7ada8d3296093ed diff --git a/minimenu/mmui.c b/minimenu/mmui.c index c7e02ea..bb8a4ef 100644 --- a/minimenu/mmui.c +++ b/minimenu/mmui.c @@ -371,6 +371,12 @@ void ui_render ( void ) { ui_context_t *c = &ui_display_context; // for convenience and shorthand + // on demand icon loading + static int load_visible = -1; + if ( load_visible == -1 ) { + load_visible = pnd_conf_get_as_int_d ( g_conf, "minimenu.load_visible_icons", 0 ); + } + // how many total rows do we need? if ( g_categorycount ) { icon_rows = g_categories [ ui_category ] -> refcount / c -> col_max; @@ -745,6 +751,44 @@ void ui_render ( void ) { // show icon mm_cache_t *ic = cache_query_icon ( appiter -> ref -> unique_id ); SDL_Surface *iconsurface; + + // if icon not in cache, and its a pnd-file source, perhaps try to load it right now.. + if ( ( ! ic ) && + ( load_visible ) && + ( ! ( appiter -> ref -> object_flags & PND_DISCO_GENERATED ) ) + ) + { + // try to load any icons that.. + // - are not yet loaded + // - did not fail a previous load attempt + // this way user can upfront load all icons, or defer all icons, or even defer all icons + // and still try to load visible ones 'just before needed'; so not at mmenu load time, but + // as needed (only the ones needed.) + + if ( ( appiter -> ref -> pnd_icon_pos ) || + ( appiter -> ref -> icon && appiter -> ref -> object_flags & PND_DISCO_LIBPND_DD ) + ) + { + + // try to cache it? + if ( ! cache_icon ( appiter -> ref, ui_display_context.icon_max_width, ui_display_context.icon_max_width ) ) { + // erm.. + } + + // avoid churn + appiter -> ref -> pnd_icon_pos = 0; + if ( appiter -> ref -> icon ) { + free ( appiter -> ref -> icon ); + appiter -> ref -> icon = NULL; + } + + // pick up as if nothing happened.. + ic = cache_query_icon ( appiter -> ref -> unique_id ); + + } + + } // load icon during rendering? + if ( ic ) { iconsurface = ic -> i; } else { @@ -4353,7 +4397,8 @@ char *ui_pick_custom_category ( unsigned char mode ) { } void ui_start_defered_icon_thread ( void ) { - if ( pnd_conf_get_as_int_d ( g_conf, "minimenu.load_icons_later", 0 ) == 0 ) { + + if ( pnd_conf_get_as_int_d ( g_conf, "minimenu.load_icons_later", 0 ) != 1 ) { return; }