diff options
| author | Joakim Verona | 2011-07-01 22:32:29 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-01 22:32:29 +0200 |
| commit | b075649f92f1543f61efed28adb25df666a1a03c (patch) | |
| tree | 234f3708f2e51d42aedb956f55241a9868916d53 /src/xwidget.c | |
| parent | 9f13671c09bfdc18336132c40a0cf5b715c8da86 (diff) | |
| download | emacs-b075649f92f1543f61efed28adb25df666a1a03c.tar.gz emacs-b075649f92f1543f61efed28adb25df666a1a03c.zip | |
first working clipping for gtk3.
Diffstat (limited to 'src/xwidget.c')
| -rw-r--r-- | src/xwidget.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/xwidget.c b/src/xwidget.c index b612bc3b283..841e3ee2144 100644 --- a/src/xwidget.c +++ b/src/xwidget.c | |||
| @@ -75,6 +75,7 @@ | |||
| 75 | #ifdef HAVE_GTK3 | 75 | #ifdef HAVE_GTK3 |
| 76 | //for gtk3; sockets and plugs | 76 | //for gtk3; sockets and plugs |
| 77 | #include <gtk/gtkx.h> | 77 | #include <gtk/gtkx.h> |
| 78 | #include "emacsgtkfixed.h" | ||
| 78 | #endif | 79 | #endif |
| 79 | 80 | ||
| 80 | #include <librsvg/rsvg.h> | 81 | #include <librsvg/rsvg.h> |
| @@ -129,8 +130,6 @@ Lisp_Object Qbutton, Qtoggle, Qslider, Qsocket, Qcairo, Qwebkit, | |||
| 129 | extern Lisp_Object QCtype; | 130 | extern Lisp_Object QCtype; |
| 130 | extern Lisp_Object QCwidth, QCheight; | 131 | extern Lisp_Object QCwidth, QCheight; |
| 131 | 132 | ||
| 132 | #define XG_XWIDGET "emacs_xwidget" | ||
| 133 | #define XG_XWIDGET_VIEW "emacs_xwidget_view" | ||
| 134 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); | 133 | struct xwidget_view* xwidget_view_lookup(struct xwidget* xw, struct window *w); |
| 135 | 134 | ||
| 136 | int | 135 | int |
| @@ -555,7 +554,9 @@ xwidget_init_view ( | |||
| 555 | 554 | ||
| 556 | //xv->widgetwindow = GTK_CONTAINER (gtk_fixed_new ()); //works well for clipping on gtk2 not gtk3 | 555 | //xv->widgetwindow = GTK_CONTAINER (gtk_fixed_new ()); //works well for clipping on gtk2 not gtk3 |
| 557 | //xv->widgetwindow = GTK_CONTAINER (gtk_event_box_new ()); //doesnt help clipping gtk3 | 556 | //xv->widgetwindow = GTK_CONTAINER (gtk_event_box_new ()); //doesnt help clipping gtk3 |
| 558 | xv->widgetwindow = GTK_CONTAINER (gtk_scrolled_window_new (NULL, NULL)); //doesnt help clipping gtk3 | 557 | //xv->widgetwindow = GTK_CONTAINER (gtk_scrolled_window_new (NULL, NULL)); //clips in gtk3 |
| 558 | xv->widgetwindow = GTK_CONTAINER (gtk_viewport_new (NULL, NULL)); //clips in gtk3 | ||
| 559 | |||
| 559 | 560 | ||
| 560 | gtk_widget_set_size_request (GTK_WIDGET (xv->widgetwindow), xww->width, xww->height); | 561 | gtk_widget_set_size_request (GTK_WIDGET (xv->widgetwindow), xww->width, xww->height); |
| 561 | /* GtkAllocation a; */ | 562 | /* GtkAllocation a; */ |
| @@ -573,21 +574,24 @@ xwidget_init_view ( | |||
| 573 | 574 | ||
| 574 | 575 | ||
| 575 | //gtk_layout_set_size (GTK_LAYOUT (xw->widgetwindow), xw->width, xw->height); | 576 | //gtk_layout_set_size (GTK_LAYOUT (xw->widgetwindow), xw->width, xw->height); |
| 576 | //gtk_container_add (xv->widgetwindow, xv->widget); | 577 | gtk_container_add (xv->widgetwindow, xv->widget); |
| 577 | 578 | ||
| 578 | gtk_scrolled_window_add_with_viewport (xv->widgetwindow, xv->widget); | 579 | //gtk_scrolled_window_add_with_viewport (xv->widgetwindow, xv->widget); // when using scrollw |
| 579 | |||
| 580 | gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xww->width, xww->height); | ||
| 581 | gtk_fixed_put (GTK_FIXED (s->f->gwfixed), GTK_WIDGET (xv->widgetwindow), x, y); | ||
| 582 | xv->x = x; xv->y = y; | ||
| 583 | gtk_widget_show_all (GTK_WIDGET (xv->widgetwindow)); | ||
| 584 | 580 | ||
| 585 | //store some xwidget data in the gtk widgets | 581 | //store some xwidget data in the gtk widgets |
| 586 | g_object_set_data (G_OBJECT (xv->widget), XG_FRAME_DATA, (gpointer) (s->f)); //the emacs frame | 582 | g_object_set_data (G_OBJECT (xv->widget), XG_FRAME_DATA, (gpointer) (s->f)); //the emacs frame |
| 587 | g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET, (gpointer) (xww)); //the xwidget | 583 | g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET, (gpointer) (xww)); //the xwidget |
| 588 | g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget | 584 | g_object_set_data (G_OBJECT (xv->widget), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget |
| 589 | g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET, (gpointer) (xww)); //the xwidget | 585 | g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET, (gpointer) (xww)); //the xwidget |
| 586 | g_object_set_data (G_OBJECT (xv->widgetwindow), XG_XWIDGET_VIEW, (gpointer) (xv)); //the xwidget | ||
| 590 | 587 | ||
| 588 | |||
| 589 | gtk_widget_set_size_request (GTK_WIDGET (xv->widget), xww->width, xww->height); | ||
| 590 | gtk_fixed_put (EMACS_FIXED (s->f->gwfixed), GTK_WIDGET (xv->widgetwindow), x, y); | ||
| 591 | xv->x = x; xv->y = y; | ||
| 592 | gtk_widget_show_all (GTK_WIDGET (xv->widgetwindow)); | ||
| 593 | |||
| 594 | |||
| 591 | //this seems to enable xcomposition. later we need to paint ourselves somehow, | 595 | //this seems to enable xcomposition. later we need to paint ourselves somehow, |
| 592 | //since the widget is no longer responsible for painting itself | 596 | //since the widget is no longer responsible for painting itself |
| 593 | //if(xw->type!=3) //im having trouble with compositing and sockets. hmmm. | 597 | //if(xw->type!=3) //im having trouble with compositing and sockets. hmmm. |
| @@ -701,6 +705,13 @@ x_draw_xwidget_glyph_string (struct glyph_string *s) | |||
| 701 | gtk_widget_set_size_request (GTK_WIDGET (xv->widgetwindow), | 705 | gtk_widget_set_size_request (GTK_WIDGET (xv->widgetwindow), |
| 702 | clipx, clipy); | 706 | clipx, clipy); |
| 703 | printf("reclip %d %d -> %d %d\n",xv->clipx, xv->clipy, clipx, clipy ); | 707 | printf("reclip %d %d -> %d %d\n",xv->clipx, xv->clipy, clipx, clipy ); |
| 708 | |||
| 709 | //allocation debugging. the correct values cant be expected to show upp immediately, but eventually they should get to be ok | ||
| 710 | // this is because we dont know when the container gets around to doing layout | ||
| 711 | GtkAllocation galloc; | ||
| 712 | gtk_widget_get_allocation(GTK_WIDGET (xv->widgetwindow), &galloc); | ||
| 713 | printf("allocation %d %d , %d %d\n", galloc.x,galloc.y,galloc.width,galloc.height); | ||
| 714 | |||
| 704 | xv->clipx = clipx; xv->clipy = clipy; | 715 | xv->clipx = clipx; xv->clipy = clipy; |
| 705 | } | 716 | } |
| 706 | //a live xwidget paints itself. when using composition, that | 717 | //a live xwidget paints itself. when using composition, that |