summaryrefslogtreecommitdiff
path: root/snd-draw.c
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@umlautS.umlaeute.mur.at>2018-04-30 21:45:07 +0200
committerIOhannes m zmölnig <zmoelnig@umlautS.umlaeute.mur.at>2018-04-30 21:45:07 +0200
commitbe4b008536f3c28b5f025c8618ac3acb1cd065ad (patch)
treed58751a8750d39e167289b357c96e6da3e5fe67a /snd-draw.c
parent0f71f6cd817b5747663b516d620059680789fbc1 (diff)
New upstream version 18.3
Diffstat (limited to 'snd-draw.c')
-rw-r--r--snd-draw.c87
1 files changed, 24 insertions, 63 deletions
diff --git a/snd-draw.c b/snd-draw.c
index 69b4c5c..afc963a 100644
--- a/snd-draw.c
+++ b/snd-draw.c
@@ -177,7 +177,9 @@ void draw_cursor(chan_info *cp)
case CURSOR_PROC:
#if USE_GTK
+#if (!GTK_CHECK_VERSION(3, 89, 0))
free_cairo(ss->cr);
+#endif
ss->cr = NULL;
#endif
Xen_call_with_3_args((Xen_is_procedure(cp->cursor_proc)) ? (cp->cursor_proc) : (ss->cursor_proc),
@@ -187,7 +189,11 @@ void draw_cursor(chan_info *cp)
C_bool_to_Xen_boolean(ss->tracking),
S_cursor_style " procedure");
#if USE_GTK
+#if GTK_CHECK_VERSION(3, 89, 0)
+ ss->cr = cp->graph_cr;
+#else
ss->cr = make_cairo(ap->ax->wn);
+#endif
copy_context(cp);
#endif
break;
@@ -242,14 +248,16 @@ static graphics_context *get_ax(chan_info *cp, int ax_id, const char *caller, Xe
{
graphics_context *ax;
ax = set_context(cp, (chan_gc_t)ax_id);
- /* (gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (car (channel-widgets 0 0)))))) -> '(cairo_t_ #<c_pointer 0x12bbca0>)
- * (eq? (car hi) 'cairo_t_) -> #t
- */
+#if HAVE_SCHEME
+ if (s7_is_c_pointer(xcr))
+ ss->cr = (cairo_t *)s7_c_pointer(xcr);
+#else
if ((Xen_is_list(xcr)) &&
(Xen_list_length(xcr) == 2) &&
(Xen_is_symbol(Xen_car(xcr))) &&
(strcmp("cairo_t_", Xen_symbol_to_C_string(Xen_car(xcr))) == 0))
ss->cr = (cairo_t *)Xen_unwrap_C_pointer(Xen_cadr(xcr));
+#endif
else
Xen_error(Xen_make_error_type("not-a-graphics-context"),
Xen_list_2(C_string_to_Xen_string("~A: cairo_t argument is not a cairo_t pointer"),
@@ -589,7 +597,6 @@ static Xen g_set_current_font(Xen id, Xen snd, Xen chn, Xen ax_id)
(Xen_list_length(id) >= 2) &&
(Xen_is_symbol(Xen_car(id))) &&
(strcmp("Font", Xen_symbol_to_C_string(Xen_car(id))) == 0), id, 1, S_set S_current_font, "a Font");
-
ax = TO_C_AXIS_CONTEXT_NO_CR(snd, chn, ax_id, S_current_font);
ax->current_font = (Font)Xen_ulong_to_C_ulong(Xen_cadr(id));
XSetFont(ax->dp, ax->gc, ax->current_font);
@@ -1152,68 +1159,27 @@ static Xen g_snd_font(Xen choice)
switch (Xen_integer_to_C_int(choice))
{
#if USE_MOTIF
- case 0: return(WRAP_FONT(ss->peaks_fontstruct->fid)); break;
- case 1: return(WRAP_FONT(ss->bold_peaks_fontstruct->fid)); break;
- case 2: return(WRAP_FONT(ss->tiny_fontstruct->fid)); break;
- case 3: return(WRAP_FONT(ss->axis_label_fontstruct->fid)); break;
- case 4: return(WRAP_FONT(ss->axis_numbers_fontstruct->fid)); break;
- case 5: return(WRAP_FONT(ss->listener_fontstruct->fid)); break;
+ case 0: return(WRAP_FONT(ss->peaks_fontstruct->fid));
+ case 1: return(WRAP_FONT(ss->bold_peaks_fontstruct->fid));
+ case 2: return(WRAP_FONT(ss->tiny_fontstruct->fid));
+ case 3: return(WRAP_FONT(ss->axis_label_fontstruct->fid));
+ case 4: return(WRAP_FONT(ss->axis_numbers_fontstruct->fid));
+ case 5: return(WRAP_FONT(ss->listener_fontstruct->fid));
#endif
#if USE_GTK
- case 0: return(WRAP_FONT(ss->peaks_fnt)); break;
- case 1: return(WRAP_FONT(ss->bold_peaks_fnt)); break;
- case 2: return(WRAP_FONT(ss->tiny_fnt)); break;
- case 3: return(WRAP_FONT(ss->axis_label_fnt)); break;
- case 4: return(WRAP_FONT(ss->axis_numbers_fnt)); break;
- case 5: return(WRAP_FONT(ss->listener_fnt)); break;
+ case 0: return(WRAP_FONT(ss->peaks_fnt));
+ case 1: return(WRAP_FONT(ss->bold_peaks_fnt));
+ case 2: return(WRAP_FONT(ss->tiny_fnt));
+ case 3: return(WRAP_FONT(ss->axis_label_fnt));
+ case 4: return(WRAP_FONT(ss->axis_numbers_fnt));
+ case 5: return(WRAP_FONT(ss->listener_fnt));
#endif
- default: return(Xen_false); break;
+ default: return(Xen_false);
}
return(Xen_false);
}
-static Xen g_make_cairo(Xen drawer)
-{
- #define H_make_cairo "(" S_make_cairo " widget) in gtk, this returns a new cairo_t to draw on the widget."
-
-#if USE_GTK
- #define C_to_Xen_cairo_t(Value) Xen_list_2(C_string_to_Xen_symbol("cairo_t_"), Xen_wrap_C_pointer(Value))
- cairo_t *cr;
-
- Xen_check_type(Xen_is_widget(drawer), drawer, 1, S_make_cairo, "a widget");
-
-#if (!GTK_CHECK_VERSION(3, 0, 0))
- cr = make_cairo(GDK_DRAWABLE(gtk_widget_get_window(Xen_unwrap_widget(drawer))));
-#else
- cr = make_cairo(GDK_WINDOW(gtk_widget_get_window(Xen_unwrap_widget(drawer))));
-#endif
-
- return(C_to_Xen_cairo_t(cr));
-#endif
-
- return(Xen_false);
-}
-
-
-static Xen g_free_cairo(Xen xcr)
-{
- #define H_free_cairo "(" S_free_cairo " cr) in gtk, this frees (destroys) the cairo_t 'cr'."
-
-#if USE_GTK
- if ((Xen_is_list(xcr)) &&
- (Xen_list_length(xcr) == 2) &&
- (Xen_is_symbol(Xen_car(xcr))) &&
- (strcmp("cairo_t_", Xen_symbol_to_C_string(Xen_car(xcr))) == 0))
- free_cairo((cairo_t *)Xen_unwrap_C_pointer(Xen_cadr(xcr)));
- else
- Xen_error(Xen_make_error_type("not-a-graphics-context"),
- Xen_list_2(C_string_to_Xen_string(S_free_cairo ": cairo_t argument is not a cairo_t pointer: ~A"), xcr));
-#endif
- return(Xen_false);
-}
-
-
#if HAVE_GL
static mus_float_t gl_currents[6] = {DEFAULT_SPECTRO_X_ANGLE, DEFAULT_SPECTRO_Y_ANGLE, DEFAULT_SPECTRO_Z_ANGLE,
DEFAULT_SPECTRO_X_SCALE, DEFAULT_SPECTRO_Y_SCALE, DEFAULT_SPECTRO_Z_SCALE};
@@ -1959,8 +1925,6 @@ Xen_wrap_any_args(g_make_bezier_w, g_make_bezier)
Xen_wrap_no_args(g_snd_gcs_w, g_snd_gcs)
Xen_wrap_1_arg(g_snd_color_w, g_snd_color)
Xen_wrap_1_arg(g_snd_font_w, g_snd_font)
-Xen_wrap_1_arg(g_make_cairo_w, g_make_cairo)
-Xen_wrap_1_arg(g_free_cairo_w, g_free_cairo)
Xen_wrap_no_args(g_selection_color_w, g_selection_color)
Xen_wrap_1_arg(g_set_selection_color_w, g_set_selection_color)
@@ -2145,9 +2109,6 @@ void g_init_draw(void)
Xen_define_typed_procedure(S_snd_color, g_snd_color_w, 1, 0, 0, H_snd_color, s7_make_signature(s7, 2, p, i));
Xen_define_typed_procedure(S_snd_font, g_snd_font_w, 1, 0, 0, H_snd_font, s7_make_signature(s7, 2, p, i));
- Xen_define_typed_procedure(S_make_cairo, g_make_cairo_w, 1, 0, 0, H_make_cairo, s7_make_signature(s7, 2, p, t));
- Xen_define_typed_procedure(S_free_cairo, g_free_cairo_w, 1, 0, 0, H_free_cairo, s7_make_signature(s7, 2, b, p));
-
#define H_new_widget_hook S_new_widget_hook " (widget): called each time a dialog or \
a new set of channel or sound widgets is created."