-create_xr (struct psppire_output_view *view)
-{
- const GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (view->output));
- struct text_item *text_item;
- PangoFontDescription *font_desc;
- struct xr_rendering *r;
- char *font_name;
- int font_width;
- cairo_t *cr;
- gchar *fgc;
-
- cr = gdk_cairo_create (GTK_WIDGET (view->output)->window);
-
- /* Set the widget's text color as the foreground color for the output driver */
- fgc = gdk_color_to_string (&style->text[gtk_widget_get_state (GTK_WIDGET (view->output))]);
-
- string_map_insert (&view->render_opts, "foreground-color", fgc);
- g_free (fgc);
-
- /* Use GTK+ default font as proportional font. */
- font_name = pango_font_description_to_string (style->font_desc);
- string_map_insert (&view->render_opts, "prop-font", font_name);
- g_free (font_name);
-
- /* Derived emphasized font from proportional font. */
- font_desc = pango_font_description_copy (style->font_desc);
- pango_font_description_set_style (font_desc, PANGO_STYLE_ITALIC);
- font_name = pango_font_description_to_string (font_desc);
- string_map_insert (&view->render_opts, "emph-font", font_name);
- g_free (font_name);
- pango_font_description_free (font_desc);
-
- /* Pretend that the "page" has a reasonable width and a very big length,
- so that most tables can be conveniently viewed on-screen with vertical
- scrolling only. (The length should not be increased very much because
- it is already close enough to INT_MAX when expressed as thousands of a
- point.) */
- string_map_insert_nocopy (&view->render_opts, xstrdup ("paper-size"),
- xasprintf ("%dx1000000pt", view->render_width));
- string_map_insert (&view->render_opts, "left-margin", "0");
- string_map_insert (&view->render_opts, "right-margin", "0");
- string_map_insert (&view->render_opts, "top-margin", "0");
- string_map_insert (&view->render_opts, "bottom-margin", "0");
-
- view->xr = xr_driver_create (cr, &view->render_opts);
-
- text_item = text_item_create (TEXT_ITEM_PARAGRAPH, "X");
- r = xr_rendering_create (view->xr, text_item_super (text_item), cr);
- xr_rendering_measure (r, &font_width, &view->font_height);
- /* xr_rendering_destroy (r); */
- text_item_unref (text_item);
+create_drawing_area (struct psppire_output_view *view,
+ GtkWidget *drawing_area, struct xr_fsm *r,
+ int tw, int th, const struct output_item *item)
+{
+ g_object_set_data_full (G_OBJECT (drawing_area),
+ "fsm", r, free_fsm);
+ g_signal_connect (drawing_area, "button-press-event",
+ G_CALLBACK (button_press_event_cb), view);
+ gtk_widget_add_events (drawing_area, GDK_BUTTON_PRESS_MASK);
+
+ { /* Drag and Drop */
+ GtkTargetList *tl = build_target_list (item);
+ g_assert (tl);
+ gtk_drag_source_set (drawing_area, GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY);
+ gtk_drag_source_set_target_list (drawing_area, tl);
+ gtk_target_list_unref (tl);
+ g_signal_connect (drawing_area, "drag-data-get",
+ G_CALLBACK (drag_data_get_cb), view);
+ }
+ GtkStyleContext *context = gtk_widget_get_style_context (drawing_area);
+ gtk_style_context_add_class (context,
+ GTK_STYLE_CLASS_VIEW);
+ g_signal_connect (drawing_area, "draw",
+ G_CALLBACK (draw_callback), view);