예제 #1
0
void ygtk_html_wrap_set_text (GtkWidget *widget, const gchar* text, gboolean plain_mode)
{
	// TODO: implement plain_mode
	GtkHTMLStream *stream = gtk_html_begin (GTK_HTML (widget));
	gtk_html_write (GTK_HTML (widget), stream, text, strlen (text));
	gtk_html_end (GTK_HTML (widget), stream, GTK_HTML_STREAM_OK);
}
예제 #2
0
static HTMLAnchor *
find_anchor (HTMLObject *self,
             const gchar *name,
             gint *x,
             gint *y)
{
	HTMLFrame *frame;
	HTMLAnchor *anchor;

	g_return_val_if_fail (HTML_IS_FRAME (self), NULL);

	frame = HTML_FRAME (self);

	if (!frame || !frame->html || !GTK_IS_HTML (frame->html) || !GTK_HTML (frame->html)->engine || !GTK_HTML (frame->html)->engine->clue)
		return NULL;

	anchor = html_object_find_anchor (GTK_HTML (frame->html)->engine->clue, name, x, y);

	if (anchor) {
		*x += self->x;
		*y += self->y - self->ascent;
	}

	return anchor;
}
예제 #3
0
static gboolean
search (HTMLObject *self,
        HTMLSearch *info)
{
	HTMLEngine *e = GTK_HTML (HTML_FRAME (self)->html)->engine;

	/* printf ("search\n"); */

	/* search_next? */
	if (info->stack && HTML_OBJECT (info->stack->data) == e->clue) {
		/* printf ("next\n"); */
		info->engine = GTK_HTML (GTK_HTML (HTML_FRAME (self)->html)->iframe_parent)->engine;
		html_search_pop (info);
		html_engine_unselect_all (e);
		return html_search_next_parent (info);
	}

	info->engine = e;
	html_search_push (info, e->clue);
	if (html_object_search (e->clue, info))
		return TRUE;
	html_search_pop (info);

	info->engine = GTK_HTML (GTK_HTML (HTML_FRAME (self)->html)->iframe_parent)->engine;
	/* printf ("FALSE\n"); */

	return FALSE;
}
예제 #4
0
static gboolean
select_range (HTMLObject *self,
              HTMLEngine *engine,
              guint start,
              gint length,
              gboolean queue_draw)
{
	return html_object_select_range (GTK_HTML (HTML_FRAME (self)->html)->engine->clue,
					 GTK_HTML (HTML_FRAME (self)->html)->engine,
					 start, length, queue_draw);
}
예제 #5
0
static void
reparent (HTMLEmbedded *emb,
          GtkWidget *html)
{
	HTMLFrame *frame = HTML_FRAME (emb);

	gtk_html_set_iframe_parent (GTK_HTML (frame->html),
				    html,
				    GTK_HTML (frame->html)->frame);
	(* HTML_EMBEDDED_CLASS (parent_class)->reparent) (emb, html);
}
예제 #6
0
static void
set_painter (HTMLObject *o,
             HTMLPainter *painter)
{
	HTMLFrame *frame;

	frame = HTML_FRAME (o);
	if (G_OBJECT_TYPE (GTK_HTML (frame->html)->engine->painter) != HTML_TYPE_PRINTER) {
		frame_set_gdk_painter (frame, GTK_HTML (frame->html)->engine->painter);
	}

	html_engine_set_painter (GTK_HTML (frame->html)->engine,
				 G_OBJECT_TYPE (painter) != HTML_TYPE_PRINTER ? frame->gdk_painter : painter);
}
예제 #7
0
static HTMLObject *
check_point (HTMLObject *self,
             HTMLPainter *painter,
             gint x,
             gint y,
             guint *offset_return,
             gboolean for_cursor)
{
	HTMLEngine *e = GTK_HTML (HTML_FRAME (self)->html)->engine;

	if (x < self->x || x >= self->x + self->width
	    || y >= self->y + self->descent || y < self->y - self->ascent)
		return NULL;

	x -= self->x + html_engine_get_left_border (e) - e->x_offset;
	y -= self->y - self->ascent + html_engine_get_top_border (e) - e->y_offset;

	if (for_cursor && (x < 0 || y < e->clue->y - e->clue->ascent))
		return html_object_check_point (e->clue, e->painter, 0, e->clue->y - e->clue->ascent,
						offset_return, for_cursor);

	if (for_cursor && (x > e->clue->width - 1 || y > e->clue->y + e->clue->descent - 1))
		return html_object_check_point (e->clue, e->painter, e->clue->width - 1, e->clue->y + e->clue->descent - 1,
						offset_return, for_cursor);

	return html_object_check_point (e->clue, e->painter, x, y, offset_return, for_cursor);
}
예제 #8
0
static void
draw (HTMLObject *o,
      HTMLPainter *p,
      gint x,
      gint y,
      gint width,
      gint height,
      gint tx,
      gint ty)
{
	HTMLFrame   *frame  = HTML_FRAME (o);
	HTMLEngine   *e       = GTK_HTML (frame->html)->engine;
	GdkRectangle paint;

	if (G_OBJECT_TYPE (e->painter) == HTML_TYPE_PRINTER) {
		gint pixel_size = html_painter_get_pixel_size (e->painter);

		if (!html_object_intersect (o, &paint, x, y, width, height))
			return;

		html_object_draw (e->clue, e->painter,
				  x, y,
				  width - pixel_size * (html_engine_get_left_border (e) + html_engine_get_right_border (e)),
				  height - pixel_size * (html_engine_get_top_border (e) + html_engine_get_bottom_border (e)),
				  tx + pixel_size * html_engine_get_left_border (e), ty + pixel_size * html_engine_get_top_border (e));
	} else
		(*HTML_OBJECT_CLASS (parent_class)->draw) (o, p, x, y, width, height, tx, ty);
}
예제 #9
0
파일: slib-editor.c 프로젝트: acli/xiphos
static GtkPrintOperationResult
_do_print(EDITOR * e, GtkPrintOperationAction action)
{
	GtkPrintOperation *operation;
	GtkPrintSettings *psettings;
	GtkPageSetup *setup;
	GtkPrintOperationResult result;
	GError *error = NULL;

	operation = gtk_print_operation_new();
	psettings = gtk_print_settings_new();

	psettings = gtk_print_operation_get_print_settings(operation);

	setup = gtk_page_setup_new();
	gtk_page_setup_set_top_margin(setup, 30, GTK_UNIT_PIXEL);
	gtk_page_setup_set_left_margin(setup, 50, GTK_UNIT_PIXEL);

#ifdef WIN32
	gtk_print_operation_set_unit(operation, GTK_UNIT_POINTS);
#endif
	gtk_print_operation_set_default_page_setup(operation, setup);

	result = gtk_html_print_operation_run(GTK_HTML(e->html_widget), operation, action, GTK_WINDOW(e->window), (GtkHTMLPrintCalcHeight) _calc_header_height,	/* GtkHTMLPrintCalcHeight  calc_header_height */
					      (GtkHTMLPrintCalcHeight) _calc_footer_height,	/* GtkHTMLPrintCalcHeight  calc_footer_height */
					      (GtkHTMLPrintDrawFunc) _draw_header,	/* GtkHTMLPrintDrawFunc draw_header */
					      (GtkHTMLPrintDrawFunc) _draw_footer,	/* GtkHTMLPrintDrawFunc draw_footer */
					      e,	/* gpointer user_data */
					      &error);

	g_object_unref(operation);
	handle_error(&error);

	return result;
}
예제 #10
0
static gint
check_page_split (HTMLObject *self,
                  HTMLPainter *p,
                  gint y)
{
	return html_object_check_page_split (GTK_HTML (HTML_FRAME (self)->html)->engine->clue, p, y);
}
예제 #11
0
GtkWidget *glen_html_new()
{
	GtkWidget *ret;

	ret = gtk_html_new();
	g_assert(ret != NULL);
	
	g_signal_connect(G_OBJECT(ret), "url_requested",
		G_CALLBACK(url_requested_cb), NULL);
	g_signal_connect(G_OBJECT(ret), "link_clicked",
		G_CALLBACK(link_clicked_cb), NULL);

	gtk_html_set_animate(GTK_HTML(ret), TRUE);
	gtk_html_set_images_blocking(GTK_HTML(ret), FALSE);

	return ret;
}
예제 #12
0
static void
frame_size_changed (GtkHTML *html,
                    gpointer data)
{
	HTMLFrame *frame = HTML_FRAME (data);
	GtkHTML *parent = GTK_HTML (HTML_EMBEDDED (frame)->parent);

	html_engine_schedule_update (parent->engine);
}
예제 #13
0
static void
set_max_width (HTMLObject *o,
               HTMLPainter *painter,
               gint max_width)
{
	HTMLEngine *e = GTK_HTML (HTML_FRAME (o)->html)->engine;

	o->max_width = max_width;
	html_object_set_max_width (e->clue, e->painter, max_width - (html_engine_get_left_border (e) + html_engine_get_right_border (e)));
}
static void
tny_gtk_html_mime_part_view_instance_init (GTypeInstance *instance, gpointer g_class)
{
	TnyGtkHtmlMimePartView *self  = (TnyGtkHtmlMimePartView*) instance;
	TnyGtkHtmlMimePartViewPriv *priv = TNY_GTK_HTML_MIME_PART_VIEW_GET_PRIVATE (self);

	gtk_html_set_editable (GTK_HTML(self), FALSE);
	gtk_html_allow_selection (GTK_HTML(self), TRUE);
	gtk_html_set_caret_mode (GTK_HTML(self), FALSE);
	gtk_html_set_blocking (GTK_HTML(self), FALSE);
	gtk_html_set_images_blocking (GTK_HTML(self), FALSE);

	g_signal_connect (G_OBJECT(self), "url_requested",
			G_CALLBACK(on_url_requested), self);

	priv->part = NULL;

	return;
}
예제 #15
0
void
html_frame_set_margin_height (HTMLFrame *frame,
                              gint margin_height)
{
	HTMLEngine *e;

	e = GTK_HTML (frame->html)->engine;

	e->bottomBorder = e->topBorder = margin_height;
	html_engine_schedule_redraw (e);
}
예제 #16
0
void
html_frame_set_margin_width (HTMLFrame *frame,
                             gint margin_width)
{
	HTMLEngine *e;

	e = GTK_HTML (frame->html)->engine;

	e->leftBorder = e->rightBorder = margin_width;
	html_engine_schedule_redraw (e);
}
예제 #17
0
static void
forall (HTMLObject *self,
        HTMLEngine *e,
        HTMLObjectForallFunc func,
        gpointer data)
{
	HTMLFrame *frame;

	frame = HTML_FRAME (self);
	(* func) (self, html_object_get_engine (self, e), data);
	html_object_forall (GTK_HTML (frame->html)->engine->clue, html_object_get_engine (self, e), func, data);
}
예제 #18
0
static void
frame_submit (GtkHTML *html,
              const gchar *method,
              const gchar *action,
              const gchar *encoding,
              gpointer data)
{
	HTMLFrame *frame = HTML_FRAME (data);
	GtkHTML *parent = GTK_HTML (HTML_EMBEDDED (frame)->parent);

	g_signal_emit_by_name (parent, "submit", method, action, encoding);
}
예제 #19
0
static void
frame_url_requested (GtkHTML *html,
                     const gchar *url,
                     GtkHTMLStream *handle,
                     gpointer data)
{
	HTMLFrame *frame = HTML_FRAME (data);
	GtkHTML *parent = GTK_HTML (HTML_EMBEDDED (frame)->parent);

	if (!html->engine->stopped)
		g_signal_emit_by_name (parent->engine, "url_requested", url, handle);
}
예제 #20
0
gint main (gint argc, gchar *argv[])
{
	GtkWidget *win, *html_widget, *sw;
	GtkHTML *html;
	gint i = 0, n_all, n_successful;

	if (argc > 1)
		return 0;

	gtk_init (&argc, &argv);

	html_widget = gtk_html_new ();
	html = GTK_HTML (html_widget);
	gtk_html_load_empty (html);
	gtk_html_set_editable (html, TRUE);
	win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	sw = gtk_scrolled_window_new (NULL, NULL);
	gtk_widget_set_size_request (win, 600, 400);
	gtk_container_add (GTK_CONTAINER (sw), html_widget);
	gtk_container_add (GTK_CONTAINER (win), sw);

	gtk_widget_show_all (win);
	gtk_widget_show_now (win);

	n_all = n_successful = 0;

	fprintf (stderr, "\nGtkHTML test suite\n");
	fprintf (stderr, "--------------------------------------------------------------------------------\n");
	for (i = 0; tests [i].name; i ++) {
		gint j, result;

		if (tests [i].test_function) {
			fprintf (stderr, "  %s ", tests [i].name);
			for (j = strlen (tests [i].name); j < 69; j ++)
				fputc ('.', stderr);
			result = (*tests [i].test_function) (html);
			fprintf (stderr, " %s\n", result ? "passed" : "failed");

			n_all ++;
			if (result)
				n_successful ++;
		} else {
			fprintf (stderr, "* %s\n", tests [i].name);
		}
	}

	fprintf (stderr, "--------------------------------------------------------------------------------\n");
	fprintf (stderr, "%d tests failed %d tests passed (of %d tests)\n\n", n_all - n_successful, n_successful, n_all);

	gtk_main ();

	return n_all != n_successful;
}
예제 #21
0
static gint
calc_min_width (HTMLObject *o,
                HTMLPainter *painter)
{
  gint min_width;

  if (HTML_FRAME (o)->width < 0)
	  min_width =  html_engine_calc_min_width (GTK_HTML (HTML_FRAME (o)->html)->engine);
  else
	  min_width = HTML_FRAME (o)->width;

  return min_width;
}
static void
on_html_http_link_clicked_disconnect (C2Request *request, gboolean success, C2Pthread3 *data)
{
	GtkHTML *html = GTK_HTML (data->v1);
	GtkHTMLStream *stream = data->v3;
	const gchar *ptr;
	gint length = request->got_size;

	ptr = (request->source+request->got_size)-length;

	gtk_html_stream_write (stream, request->source, request->got_size);
	gtk_html_end (html, stream, success ? GTK_HTML_STREAM_OK : GTK_HTML_STREAM_ERROR);
}
예제 #23
0
static gboolean
frame_object_requested (GtkHTML *html,
                        GtkHTMLEmbedded *eb,
                        gpointer data)
{
	HTMLFrame *frame = HTML_FRAME (data);
	GtkHTML *parent = GTK_HTML (HTML_EMBEDDED (frame)->parent);
	gboolean ret_val;

	ret_val = FALSE;
	g_signal_emit_by_name (parent, "object_requested", eb, &ret_val);
	return ret_val;
}
static void
set_html_part (TnyGtkHtmlMimePartView *self, TnyMimePart *part)
{
	SomeData *info = g_slice_new (SomeData);

	info->self = (TnyGtkHtmlMimePartView *) g_object_ref (self);
	info->gtkhtml_stream = gtk_html_begin(GTK_HTML(self));
	info->tny_stream = TNY_STREAM (tny_gtk_html_stream_new (info->gtkhtml_stream));
	tny_stream_reset (info->tny_stream);

	tny_mime_part_decode_to_stream_async ((TnyMimePart*)part, info->tny_stream, 
			on_set_stream_finished, on_status, info);

	return;
}
예제 #25
0
파일: object.c 프로젝트: Distrotech/gtkhtml
static void
gtk_html_a11y_initialize (AtkObject *obj,
                          gpointer data)
{
	GtkWidget *widget;
	GtkHTML *html;
	AtkObject *accessible;
	AtkObject *focus_object = NULL;

	/* printf ("gtk_html_a11y_initialize\n"); */

	if (ATK_OBJECT_CLASS (parent_class)->initialize)
		ATK_OBJECT_CLASS (parent_class)->initialize (obj, data);

	g_object_set_data (G_OBJECT (obj), GTK_HTML_ID, data);

	obj->role = ATK_ROLE_PANEL;

	widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
	accessible = ATK_OBJECT (obj);

	g_signal_connect (widget, "grab_focus",
			G_CALLBACK (gtk_html_a11y_grab_focus_cb),
			NULL);
	g_signal_connect (widget, "cursor_changed",
			G_CALLBACK (gtk_html_a11y_cursor_changed_cb),
			NULL);
	g_signal_connect_after (widget, "object_inserted",
			G_CALLBACK (gtk_html_a11y_insert_object_cb),
			NULL);
	g_signal_connect_after (widget, "object_delete",
			G_CALLBACK (gtk_html_a11y_delete_object_cb),
			NULL);

	html = GTK_HTML (widget);

	if (html->engine != NULL && html->engine->clue != NULL) {
		html_utils_get_accessible (html->engine->clue, accessible);
		focus_object = gtk_html_a11y_get_focus_object (widget);
	}

	if (focus_object && gtk_html_a11y_focus_object != focus_object) {
		gtk_html_a11y_focus_object = focus_object;
		atk_focus_tracker_notify (focus_object);
	}
}
예제 #26
0
파일: object.c 프로젝트: Distrotech/gtkhtml
static void
gtk_html_a11y_grab_focus_cb (GtkWidget *widget)
{
	AtkObject *focus_object, *obj, *clue;

	focus_object = gtk_html_a11y_get_focus_object (widget);
	if (focus_object == NULL)
		return;

	obj = gtk_widget_get_accessible (widget);

	clue = html_utils_get_accessible (GTK_HTML (widget)->engine->clue, obj);
	atk_object_set_parent (clue, obj);

	gtk_html_a11y_focus_object = focus_object;
	atk_focus_tracker_notify (focus_object);
}
static void
on_html_http_link_clicked (C2Pthread3 *data)
{
	C2Request *request;
	const gchar *url = data->v2;
	GtkHTML *html = GTK_HTML (data->v1);
	GtkHTMLStream *stream;

	stream = gtk_html_begin (html);
	data->v3 = (gpointer) stream;
	
	request = c2_request_new (url);
	gtk_signal_connect (GTK_OBJECT (request), "exchange",
							GTK_SIGNAL_FUNC (on_html_http_link_clicked_exchange), data);
	gtk_signal_connect (GTK_OBJECT (request), "disconnect",
							GTK_SIGNAL_FUNC (on_html_http_link_clicked_disconnect), data);
	c2_request_run (request);
}
예제 #28
0
static void
draw (HTMLObject *o,
      HTMLPainter *p,
      gint x,
      gint y,
      gint width,
      gint height,
      gint tx,
      gint ty)
{
	HTMLEmbedded *element = HTML_EMBEDDED (o);
	gint new_x, new_y;

	d (printf ("draw embedded %p\n", element));
	if (!element->widget)
		return;

	if (element->parent) {
		GtkWidget *parent;
		new_x = o->x + tx;
		new_y = o->y + ty - o->ascent;

		if ((parent = gtk_widget_get_parent (element->widget))) {
			if (new_x != element->abs_x || new_y != element->abs_y) {
				d (printf ("element: %p moveto: %d,%d shown: %d\n", element, new_x, new_y, GTK_WIDGET_VISIBLE (element->widget)));
				gtk_layout_move (GTK_LAYOUT (parent), element->widget, new_x, new_y);
			} else if (!GTK_HTML (parent)->engine->expose)
				gtk_widget_queue_draw (element->widget);
		}

		element->abs_x = new_x;
		element->abs_y = new_y;

		if (!parent) {
			d (printf ("element: %p put: %d,%d shown: %d\n", element, new_x, new_y, GTK_WIDGET_VISIBLE (element->widget)));
			gtk_layout_put (GTK_LAYOUT (element->parent), element->widget, new_x, new_y);
		}
	}

	d (printf ("draw embedded %p - call painter tx %d ty %d\n", element, tx, ty));
	html_painter_draw_embedded (p, element, tx, ty);
}
예제 #29
0
파일: object.c 프로젝트: Distrotech/gtkhtml
static void
gtk_html_a11y_cursor_changed_cb (GtkWidget *widget)
{
	AtkObject *focus_object;

	focus_object = gtk_html_a11y_get_focus_object (widget);
	g_return_if_fail (focus_object != NULL);

	if (gtk_html_a11y_focus_object != focus_object) {
		gtk_html_a11y_focus_object = focus_object;
		atk_focus_tracker_notify (focus_object);
	} else {
		if (G_IS_HTML_A11Y_TEXT (focus_object)) {
			gint offset;

			offset = (GTK_HTML (widget))->engine->cursor->offset;
			g_signal_emit_by_name (focus_object, "text_caret_moved",offset);
		}
	}
}
예제 #30
0
static void
html_embedded_allocate (GtkWidget *w,
                        GtkAllocation *allocation,
                        HTMLEmbedded *e)
{
	GtkWidget *parent;

	parent = gtk_widget_get_parent (w);

	if (e->width != allocation->width || e->height != allocation->height) {
		if (e->width != allocation->width) {
			html_object_change_set (HTML_OBJECT (e), HTML_CHANGE_ALL_CALC);
			e->width = allocation->width;
		}
		e->height = allocation->height;

		if (GTK_IS_HTML (parent))
			html_engine_schedule_update (GTK_HTML (parent)->engine);
	}
}