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)
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;
}
{
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;
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
{
}
}
+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)
{
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;
/* 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*/
{
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);
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"),
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 */
{
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);
}