# HG changeset patch # User Vladimir Nadvornik # Date 1300612507 -3600 # Node ID 25645af65caf66f91a60c85010976d19938e927d # Parent 018d4fe2f854d67480f2113aa1d7b56a742a7b3c added fixed stereo mode diff -r 018d4fe2f854 -r 25645af65caf src/image.c --- a/src/image.c Sun Mar 20 00:23:54 2011 +0100 +++ b/src/image.c Sun Mar 20 10:15:07 2011 +0100 @@ -1708,6 +1708,10 @@ pixbuf_renderer_set_parent((PixbufRenderer *)imd->pr, (GtkWindow *)imd->top_window); image_stereo_set(imd, options->stereo.mode); + pixbuf_renderer_stereo_fixed_set((PixbufRenderer *)imd->pr, + options->stereo.fixed_w, options->stereo.fixed_h, + options->stereo.fixed_x1, options->stereo.fixed_y1, + options->stereo.fixed_x2, options->stereo.fixed_y2); } void image_options_sync(void) diff -r 018d4fe2f854 -r 25645af65caf src/options.c --- a/src/options.c Sun Mar 20 00:23:54 2011 +0100 +++ b/src/options.c Sun Mar 20 10:15:07 2011 +0100 @@ -124,6 +124,13 @@ options->tree_descend_subdirs = FALSE; options->update_on_time_change = TRUE; + + options->stereo.fixed_w = 640; + options->stereo.fixed_h = 200; + options->stereo.fixed_x1 = 0; + options->stereo.fixed_y1 = 20; + options->stereo.fixed_x2 = 0; + options->stereo.fixed_y2 = 260; return options; } diff -r 018d4fe2f854 -r 25645af65caf src/pixbuf-renderer.c --- a/src/pixbuf-renderer.c Sun Mar 20 00:23:54 2011 +0100 +++ b/src/pixbuf-renderer.c Sun Mar 20 10:15:07 2011 +0100 @@ -1865,9 +1865,26 @@ { gboolean zoom_changed = FALSE; - gint new_viewport_width = (!pr->stereo_temp_disable && (pr->stereo_mode & PR_STEREO_HORIZ)) ? new_width / 2 : new_width; - gint new_viewport_height =(!pr->stereo_temp_disable && (pr->stereo_mode & PR_STEREO_VERT)) ? new_height / 2 : new_height; - + gint new_viewport_width = new_width; + gint new_viewport_height = new_height; + + if (!pr->stereo_temp_disable) + { + if (pr->stereo_mode & PR_STEREO_HORIZ) + { + new_viewport_width = new_width; + } + else if (pr->stereo_mode & PR_STEREO_VERT) + { + new_viewport_height = new_height / 2; + } + else if (pr->stereo_mode & PR_STEREO_FIXED) + { + new_viewport_width = pr->stereo_fixed_width; + new_viewport_height = pr->stereo_fixed_height; + } + } + if (pr->window_width == new_width && pr->window_height == new_height && pr->viewport_width == new_viewport_width && pr->viewport_height == new_viewport_height) return; @@ -2594,10 +2611,10 @@ pr->renderer->stereo_set(pr->renderer, pr->stereo_mode & ~PR_STEREO_MIRROR_RIGHT & ~PR_STEREO_FLIP_RIGHT); - if (pr->stereo_mode & (PR_STEREO_HORIZ | PR_STEREO_VERT)) + if (pr->stereo_mode & (PR_STEREO_HORIZ | PR_STEREO_VERT | PR_STEREO_FIXED)) { if (!pr->renderer2) pr->renderer2 = (void *)renderer_tiles_new(pr); - pr->renderer2->stereo_set(pr->renderer2, pr->stereo_mode & ~PR_STEREO_MIRROR_LEFT & ~PR_STEREO_FLIP_LEFT | PR_STEREO_RIGHT); + pr->renderer2->stereo_set(pr->renderer2, (pr->stereo_mode & ~PR_STEREO_MIRROR_LEFT & ~PR_STEREO_FLIP_LEFT) | PR_STEREO_RIGHT); } else { @@ -2623,6 +2640,15 @@ } } +void pixbuf_renderer_stereo_fixed_set(PixbufRenderer *pr, gint width, gint height, gint x1, gint y1, gint x2, gint y2) +{ + pr->stereo_fixed_width = width; + pr->stereo_fixed_height = height; + pr->stereo_fixed_x_left = x1; + pr->stereo_fixed_y_left = y1; + pr->stereo_fixed_x_right = x2; + pr->stereo_fixed_y_right = y2; +} gint pixbuf_renderer_stereo_get(PixbufRenderer *pr) { diff -r 018d4fe2f854 -r 25645af65caf src/pixbuf-renderer.h --- a/src/pixbuf-renderer.h Sun Mar 20 00:23:54 2011 +0100 +++ b/src/pixbuf-renderer.h Sun Mar 20 10:15:07 2011 +0100 @@ -201,6 +201,12 @@ gint stereo_mode; gboolean stereo_temp_disable; + gint stereo_fixed_width; + gint stereo_fixed_height; + gint stereo_fixed_x_left; + gint stereo_fixed_y_left; + gint stereo_fixed_x_right; + gint stereo_fixed_y_right; RendererFuncs *renderer; RendererFuncs *renderer2; @@ -316,6 +322,7 @@ /* stereo */ void pixbuf_renderer_stereo_set(PixbufRenderer *pr, gint stereo_mode); gint pixbuf_renderer_stereo_get(PixbufRenderer *pr); +void pixbuf_renderer_stereo_fixed_set(PixbufRenderer *pr, gint width, gint height, gint x1, gint y1, gint x2, gint y2); /* protected - for renderer use only*/ diff -r 018d4fe2f854 -r 25645af65caf src/preferences.c --- a/src/preferences.c Sun Mar 20 00:23:54 2011 +0100 +++ b/src/preferences.c Sun Mar 20 10:15:07 2011 +0100 @@ -2054,7 +2054,9 @@ { GtkWidget *vbox; GtkWidget *group; + GtkWidget *group2; GtkWidget *table; + GtkWidget *fs_button; vbox = scrolled_notebook_page(notebook, _("Stereo")); group = pref_group_new(vbox, FALSE, _("Windowed stereo mode"), GTK_ORIENTATION_VERTICAL); @@ -2076,8 +2078,9 @@ options->stereo.mode & PR_STEREO_TEMP_DISABLE, &c_options->stereo.tmp.temp_disable); group = pref_group_new(vbox, FALSE, _("Fullscreen stereo mode"), GTK_ORIENTATION_VERTICAL); - pref_checkbox_new_int(group, _("Use different settings for fullscreen"), + fs_button = pref_checkbox_new_int(group, _("Use different settings for fullscreen"), options->stereo.enable_fsmode, &c_options->stereo.enable_fsmode); + pref_checkbox_link_sensitivity(fs_button, group); table = pref_table_new(group, 2, 1, FALSE, FALSE); add_stereo_mode_menu(table, 0, 0, _("Fullscreen stereo mode"), options->stereo.fsmode, &c_options->stereo.fsmode, TRUE); pref_checkbox_new_int(group, _("Mirror left image"), @@ -2093,6 +2096,20 @@ pref_checkbox_new_int(group, _("Disable stereo mode on single image source"), options->stereo.fsmode & PR_STEREO_TEMP_DISABLE, &c_options->stereo.tmp.fs_temp_disable); + group2 = pref_group_new(group, FALSE, _("Fixed mode"), GTK_ORIENTATION_VERTICAL); + pref_spin_new_int(group2, _("Width"), NULL, + 1, 5000, 1, options->stereo.fixed_w, &c_options->stereo.fixed_w); + pref_spin_new_int(group2, _("Height"), NULL, + 1, 5000, 1, options->stereo.fixed_h, &c_options->stereo.fixed_h); + pref_spin_new_int(group2, _("Left X"), NULL, + 0, 5000, 1, options->stereo.fixed_x1, &c_options->stereo.fixed_x1); + pref_spin_new_int(group2, _("Left Y"), NULL, + 0, 5000, 1, options->stereo.fixed_y1, &c_options->stereo.fixed_y1); + pref_spin_new_int(group2, _("Right X"), NULL, + 0, 5000, 1, options->stereo.fixed_x2, &c_options->stereo.fixed_x2); + pref_spin_new_int(group2, _("Right Y"), NULL, + 0, 5000, 1, options->stereo.fixed_y2, &c_options->stereo.fixed_y2); + } /* Main preferences window */ diff -r 018d4fe2f854 -r 25645af65caf src/renderer-tiles.c --- a/src/renderer-tiles.c Sun Mar 20 00:23:54 2011 +0100 +++ b/src/renderer-tiles.c Sun Mar 20 10:15:07 2011 +0100 @@ -2036,7 +2036,21 @@ { rt->stereo_off_y = rt->pr->viewport_height; } + else if (rt->stereo_mode & PR_STEREO_FIXED) + { + rt->stereo_off_x = rt->pr->stereo_fixed_x_right; + rt->stereo_off_y = rt->pr->stereo_fixed_y_right; + } } + else + { + if (rt->stereo_mode & PR_STEREO_FIXED) + { + rt->stereo_off_x = rt->pr->stereo_fixed_x_left; + rt->stereo_off_y = rt->pr->stereo_fixed_y_left; + } + } + DEBUG_1("update size: %p %d %d %d %d", rt, rt->stereo_off_x, rt->stereo_off_y, rt->pr->viewport_width, rt->pr->viewport_height); rt_sync_scroll(rt); rt_overlay_update_sizes(rt); }