+
+void ui_recache_context ( ui_context_t *c ) {
+
+ c -> screen_width = pnd_conf_get_as_int_d ( g_conf, "display.screen_width", 800 );
+
+ c -> font_rgba_r = pnd_conf_get_as_int_d ( g_conf, "display.font_rgba_r", 200 );
+ c -> font_rgba_g = pnd_conf_get_as_int_d ( g_conf, "display.font_rgba_g", 200 );
+ c -> font_rgba_b = pnd_conf_get_as_int_d ( g_conf, "display.font_rgba_b", 200 );
+ c -> font_rgba_a = pnd_conf_get_as_int_d ( g_conf, "display.font_rgba_a", 100 );
+
+ c -> grid_offset_x = pnd_conf_get_as_int ( g_conf, "grid.grid_offset_x" );
+ c -> grid_offset_y = pnd_conf_get_as_int ( g_conf, "grid.grid_offset_y" );
+
+ c -> icon_offset_x = pnd_conf_get_as_int ( g_conf, "grid.icon_offset_x" );
+ c -> icon_offset_y = pnd_conf_get_as_int ( g_conf, "grid.icon_offset_y" );
+ c -> icon_max_width = pnd_conf_get_as_int ( g_conf, "grid.icon_max_width" );
+ c -> icon_max_height = pnd_conf_get_as_int ( g_conf, "grid.icon_max_height" );
+ c -> sel_icon_offset_x = pnd_conf_get_as_int_d ( g_conf, "grid.sel_offoffset_x", 0 );
+ c -> sel_icon_offset_y = pnd_conf_get_as_int_d ( g_conf, "grid.sel_offoffset_y", 0 );
+
+ c -> text_width = pnd_conf_get_as_int ( g_conf, "grid.text_width" );
+ c -> text_clip_x = pnd_conf_get_as_int ( g_conf, "grid.text_clip_x" );
+ c -> text_offset_x = pnd_conf_get_as_int ( g_conf, "grid.text_offset_x" );
+ c -> text_offset_y = pnd_conf_get_as_int ( g_conf, "grid.text_offset_y" );
+ c -> text_hilite_offset_y = pnd_conf_get_as_int ( g_conf, "grid.text_hilite_offset_y" );
+
+ c -> row_max = pnd_conf_get_as_int_d ( g_conf, "grid.row_max", 4 );
+ c -> col_max = pnd_conf_get_as_int_d ( g_conf, "grid.col_max", 5 );
+
+ c -> cell_width = pnd_conf_get_as_int ( g_conf, "grid.cell_width" );
+ c -> cell_height = pnd_conf_get_as_int ( g_conf, "grid.cell_height" );
+
+ c -> arrow_bar_x = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_bar_x", 450 );
+ c -> arrow_bar_y = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_bar_y", 100 );
+ c -> arrow_bar_clip_w = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_bar_clip_w", 10 );
+ c -> arrow_bar_clip_h = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_bar_clip_h", 100 );
+ c -> arrow_up_x = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_up_x", 450 );
+ c -> arrow_up_y = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_up_y", 80 );
+ c -> arrow_down_x = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_down_x", 450 );
+ c -> arrow_down_y = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_down_y", 80 );
+
+ // font colour
+ SDL_Color tmp = { c -> font_rgba_r, c -> font_rgba_g, c -> font_rgba_b, c -> font_rgba_a };
+ c -> fontcolor = tmp;
+
+ // now that we've got 'normal' (detail pane shown) param's, lets check if detail pane
+ // is hidden; if so, override some values with those alternate skin values where possible.
+ if ( ui_detail_hidden ) {
+ // if detail panel is hidden, and theme cannot support it, unhide the bloody thing. (This may help
+ // when someone is amid theme hacking or changing.)
+ if ( ! ui_is_detail_hideable() ) {
+ ui_detail_hidden = 0;
+ }
+
+ // still hidden?
+ if ( ui_detail_hidden ) {
+
+ c -> row_max = pnd_conf_get_as_int_d ( g_conf, "grid.row_max_w", c -> row_max );
+ c -> col_max = pnd_conf_get_as_int_d ( g_conf, "grid.col_max_w", c -> col_max );
+
+ c -> cell_width = pnd_conf_get_as_int_d ( g_conf, "grid.cell_width_w", c -> cell_width );
+ c -> cell_height = pnd_conf_get_as_int_d ( g_conf, "grid.cell_height_w", c -> cell_height );
+
+ c -> arrow_bar_x = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_bar_x_w", 450 );
+ c -> arrow_bar_y = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_bar_y_w", 100 );
+ c -> arrow_up_x = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_up_x_w", 450 );
+ c -> arrow_up_y = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_up_y_w", 80 );
+ c -> arrow_down_x = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_down_x_w", 450 );
+ c -> arrow_down_y = pnd_conf_get_as_int_d ( g_conf, "grid.arrow_down_y_w", 80 );
+
+ } // if detail hidden.. still.
+
+ } // if detail hidden
+
+ return;
+}
+
+unsigned char ui_is_detail_hideable ( void ) {
+
+ // if skin has a bit of info for wide-mode, we assume wide-mode is available
+ if ( pnd_conf_get_as_char ( g_conf, "grid.row_max_w" ) != NULL ) {
+ return ( 1 );
+ }
+
+ // else not!
+ return ( 0 );
+}
+
+void ui_toggle_detail_pane ( void ) {
+
+ // no bitmask trickery here; I like it to be stand-out obvious at 3am.
+
+ if ( ui_detail_hidden ) {
+ ui_detail_hidden = 0;
+ } else {
+ ui_detail_hidden = 1;
+ }
+
+ // repull skin config
+ ui_recache_context ( &ui_display_context );
+
+ // redraw
+ render_mask |= CHANGED_EVERYTHING;
+
+ return;
+}