Re-enable the "find" dialog
2000-10-23 Havoc Pennington <hp@redhat.com> * gtk/testtext.c: Re-enable the "find" dialog * gtk/testgtk.c: Add test for gdk_drawable_get_image * gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix bug where the arguments to gdk_draw_drawable were in the wrong order (gdk_window_paint_init_bg): This function was ignoring the init_region, instead of clipping to it, so the entire backing pixmap was cleared on every begin_paint() (gdk_window_begin_paint_region): Hmm, the same list-walking bug was in here again, the loop kept using the same GtkWindowPaint over and over. (gdk_window_begin_paint_region): Fix a bug where we had two x_offset instead of x_offset and y_offset * gdk/gdkdraw.c (gdk_drawable_get_image): get composite drawable before we get the image. (gdk_draw_drawable): get the composite before we draw the drawable. (gdk_drawable_real_get_composite_drawable): default get_composite_drawable implementation that returns the drawable itself * gdk/gdkdrawable.h (struct _GdkDrawableClass ): Add get_composite_drawable virtual function * gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix a cheesy list-walking bug * gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_drawable): Add a hack to make this work if the source drawable is a GdkDrawableImplX11 instead of a public drawable type. This is really broken; the problem is that GdkDrawable needs a virtual method get_xid(), but of course that doesn't work in practice. Enter RTTI. Also, improve mismatched depth message. * gdk/gdkpixmap.c (gdk_pixmap_get_image): Implement get_image for GdkPixmap * gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_class_init): install _gdk_x11_get_image as our implementation of get_image * gdk/x11/gdkimage-x11.c (gdk_image_get): Rename to _gdk_x11_get_image and export for use in gdkdrawable-x11.c * gdk/gdkimage.c (gdk_image_get): Make this just a wrapper around gdk_drawable_get_image * gdk/gdkdraw.c (gdk_drawable_get_image): call virtual get_image * gdk/gdkdrawable.h (struct _GdkDrawableClass ): Virtualize get_image * gtk/gtktreestore.c (gtk_tree_store_get_node): remove weird trailing semicolon after for loop
This commit is contained in:
parent
ce821b23f5
commit
86b5c82a97
58
ChangeLog
58
ChangeLog
@ -1,3 +1,61 @@
|
|||||||
|
2000-10-23 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gtk/testtext.c: Re-enable the "find" dialog
|
||||||
|
|
||||||
|
* gtk/testgtk.c: Add test for gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix bug where
|
||||||
|
the arguments to gdk_draw_drawable were in the wrong order
|
||||||
|
(gdk_window_paint_init_bg): This function was ignoring the
|
||||||
|
init_region, instead of clipping to it, so the entire backing
|
||||||
|
pixmap was cleared on every begin_paint()
|
||||||
|
(gdk_window_begin_paint_region): Hmm, the same list-walking bug
|
||||||
|
was in here again, the loop kept using the same GtkWindowPaint
|
||||||
|
over and over.
|
||||||
|
(gdk_window_begin_paint_region): Fix a bug where we had two
|
||||||
|
x_offset instead of x_offset and y_offset
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): get composite drawable
|
||||||
|
before we get the image.
|
||||||
|
(gdk_draw_drawable): get the composite before we draw the drawable.
|
||||||
|
(gdk_drawable_real_get_composite_drawable): default
|
||||||
|
get_composite_drawable implementation that returns the drawable
|
||||||
|
itself
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Add
|
||||||
|
get_composite_drawable virtual function
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix a cheesy
|
||||||
|
list-walking bug
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_drawable): Add a hack to
|
||||||
|
make this work if the source drawable is a GdkDrawableImplX11
|
||||||
|
instead of a public drawable type. This is really broken; the
|
||||||
|
problem is that GdkDrawable needs a virtual method get_xid(), but
|
||||||
|
of course that doesn't work in practice. Enter RTTI.
|
||||||
|
|
||||||
|
Also, improve mismatched depth message.
|
||||||
|
|
||||||
|
* gdk/gdkpixmap.c (gdk_pixmap_get_image): Implement get_image for
|
||||||
|
GdkPixmap
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_class_init):
|
||||||
|
install _gdk_x11_get_image as our implementation of get_image
|
||||||
|
|
||||||
|
* gdk/x11/gdkimage-x11.c (gdk_image_get): Rename to
|
||||||
|
_gdk_x11_get_image and export for use in gdkdrawable-x11.c
|
||||||
|
|
||||||
|
* gdk/gdkimage.c (gdk_image_get): Make this just a wrapper around
|
||||||
|
gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): call virtual get_image
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Virtualize
|
||||||
|
get_image
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_get_node): remove weird
|
||||||
|
trailing semicolon after for loop
|
||||||
|
|
||||||
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
||||||
|
@ -1,3 +1,61 @@
|
|||||||
|
2000-10-23 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gtk/testtext.c: Re-enable the "find" dialog
|
||||||
|
|
||||||
|
* gtk/testgtk.c: Add test for gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix bug where
|
||||||
|
the arguments to gdk_draw_drawable were in the wrong order
|
||||||
|
(gdk_window_paint_init_bg): This function was ignoring the
|
||||||
|
init_region, instead of clipping to it, so the entire backing
|
||||||
|
pixmap was cleared on every begin_paint()
|
||||||
|
(gdk_window_begin_paint_region): Hmm, the same list-walking bug
|
||||||
|
was in here again, the loop kept using the same GtkWindowPaint
|
||||||
|
over and over.
|
||||||
|
(gdk_window_begin_paint_region): Fix a bug where we had two
|
||||||
|
x_offset instead of x_offset and y_offset
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): get composite drawable
|
||||||
|
before we get the image.
|
||||||
|
(gdk_draw_drawable): get the composite before we draw the drawable.
|
||||||
|
(gdk_drawable_real_get_composite_drawable): default
|
||||||
|
get_composite_drawable implementation that returns the drawable
|
||||||
|
itself
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Add
|
||||||
|
get_composite_drawable virtual function
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix a cheesy
|
||||||
|
list-walking bug
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_drawable): Add a hack to
|
||||||
|
make this work if the source drawable is a GdkDrawableImplX11
|
||||||
|
instead of a public drawable type. This is really broken; the
|
||||||
|
problem is that GdkDrawable needs a virtual method get_xid(), but
|
||||||
|
of course that doesn't work in practice. Enter RTTI.
|
||||||
|
|
||||||
|
Also, improve mismatched depth message.
|
||||||
|
|
||||||
|
* gdk/gdkpixmap.c (gdk_pixmap_get_image): Implement get_image for
|
||||||
|
GdkPixmap
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_class_init):
|
||||||
|
install _gdk_x11_get_image as our implementation of get_image
|
||||||
|
|
||||||
|
* gdk/x11/gdkimage-x11.c (gdk_image_get): Rename to
|
||||||
|
_gdk_x11_get_image and export for use in gdkdrawable-x11.c
|
||||||
|
|
||||||
|
* gdk/gdkimage.c (gdk_image_get): Make this just a wrapper around
|
||||||
|
gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): call virtual get_image
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Virtualize
|
||||||
|
get_image
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_get_node): remove weird
|
||||||
|
trailing semicolon after for loop
|
||||||
|
|
||||||
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
||||||
|
@ -1,3 +1,61 @@
|
|||||||
|
2000-10-23 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gtk/testtext.c: Re-enable the "find" dialog
|
||||||
|
|
||||||
|
* gtk/testgtk.c: Add test for gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix bug where
|
||||||
|
the arguments to gdk_draw_drawable were in the wrong order
|
||||||
|
(gdk_window_paint_init_bg): This function was ignoring the
|
||||||
|
init_region, instead of clipping to it, so the entire backing
|
||||||
|
pixmap was cleared on every begin_paint()
|
||||||
|
(gdk_window_begin_paint_region): Hmm, the same list-walking bug
|
||||||
|
was in here again, the loop kept using the same GtkWindowPaint
|
||||||
|
over and over.
|
||||||
|
(gdk_window_begin_paint_region): Fix a bug where we had two
|
||||||
|
x_offset instead of x_offset and y_offset
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): get composite drawable
|
||||||
|
before we get the image.
|
||||||
|
(gdk_draw_drawable): get the composite before we draw the drawable.
|
||||||
|
(gdk_drawable_real_get_composite_drawable): default
|
||||||
|
get_composite_drawable implementation that returns the drawable
|
||||||
|
itself
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Add
|
||||||
|
get_composite_drawable virtual function
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix a cheesy
|
||||||
|
list-walking bug
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_drawable): Add a hack to
|
||||||
|
make this work if the source drawable is a GdkDrawableImplX11
|
||||||
|
instead of a public drawable type. This is really broken; the
|
||||||
|
problem is that GdkDrawable needs a virtual method get_xid(), but
|
||||||
|
of course that doesn't work in practice. Enter RTTI.
|
||||||
|
|
||||||
|
Also, improve mismatched depth message.
|
||||||
|
|
||||||
|
* gdk/gdkpixmap.c (gdk_pixmap_get_image): Implement get_image for
|
||||||
|
GdkPixmap
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_class_init):
|
||||||
|
install _gdk_x11_get_image as our implementation of get_image
|
||||||
|
|
||||||
|
* gdk/x11/gdkimage-x11.c (gdk_image_get): Rename to
|
||||||
|
_gdk_x11_get_image and export for use in gdkdrawable-x11.c
|
||||||
|
|
||||||
|
* gdk/gdkimage.c (gdk_image_get): Make this just a wrapper around
|
||||||
|
gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): call virtual get_image
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Virtualize
|
||||||
|
get_image
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_get_node): remove weird
|
||||||
|
trailing semicolon after for loop
|
||||||
|
|
||||||
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
||||||
|
@ -1,3 +1,61 @@
|
|||||||
|
2000-10-23 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gtk/testtext.c: Re-enable the "find" dialog
|
||||||
|
|
||||||
|
* gtk/testgtk.c: Add test for gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix bug where
|
||||||
|
the arguments to gdk_draw_drawable were in the wrong order
|
||||||
|
(gdk_window_paint_init_bg): This function was ignoring the
|
||||||
|
init_region, instead of clipping to it, so the entire backing
|
||||||
|
pixmap was cleared on every begin_paint()
|
||||||
|
(gdk_window_begin_paint_region): Hmm, the same list-walking bug
|
||||||
|
was in here again, the loop kept using the same GtkWindowPaint
|
||||||
|
over and over.
|
||||||
|
(gdk_window_begin_paint_region): Fix a bug where we had two
|
||||||
|
x_offset instead of x_offset and y_offset
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): get composite drawable
|
||||||
|
before we get the image.
|
||||||
|
(gdk_draw_drawable): get the composite before we draw the drawable.
|
||||||
|
(gdk_drawable_real_get_composite_drawable): default
|
||||||
|
get_composite_drawable implementation that returns the drawable
|
||||||
|
itself
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Add
|
||||||
|
get_composite_drawable virtual function
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix a cheesy
|
||||||
|
list-walking bug
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_drawable): Add a hack to
|
||||||
|
make this work if the source drawable is a GdkDrawableImplX11
|
||||||
|
instead of a public drawable type. This is really broken; the
|
||||||
|
problem is that GdkDrawable needs a virtual method get_xid(), but
|
||||||
|
of course that doesn't work in practice. Enter RTTI.
|
||||||
|
|
||||||
|
Also, improve mismatched depth message.
|
||||||
|
|
||||||
|
* gdk/gdkpixmap.c (gdk_pixmap_get_image): Implement get_image for
|
||||||
|
GdkPixmap
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_class_init):
|
||||||
|
install _gdk_x11_get_image as our implementation of get_image
|
||||||
|
|
||||||
|
* gdk/x11/gdkimage-x11.c (gdk_image_get): Rename to
|
||||||
|
_gdk_x11_get_image and export for use in gdkdrawable-x11.c
|
||||||
|
|
||||||
|
* gdk/gdkimage.c (gdk_image_get): Make this just a wrapper around
|
||||||
|
gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): call virtual get_image
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Virtualize
|
||||||
|
get_image
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_get_node): remove weird
|
||||||
|
trailing semicolon after for loop
|
||||||
|
|
||||||
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
||||||
|
@ -1,3 +1,61 @@
|
|||||||
|
2000-10-23 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gtk/testtext.c: Re-enable the "find" dialog
|
||||||
|
|
||||||
|
* gtk/testgtk.c: Add test for gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix bug where
|
||||||
|
the arguments to gdk_draw_drawable were in the wrong order
|
||||||
|
(gdk_window_paint_init_bg): This function was ignoring the
|
||||||
|
init_region, instead of clipping to it, so the entire backing
|
||||||
|
pixmap was cleared on every begin_paint()
|
||||||
|
(gdk_window_begin_paint_region): Hmm, the same list-walking bug
|
||||||
|
was in here again, the loop kept using the same GtkWindowPaint
|
||||||
|
over and over.
|
||||||
|
(gdk_window_begin_paint_region): Fix a bug where we had two
|
||||||
|
x_offset instead of x_offset and y_offset
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): get composite drawable
|
||||||
|
before we get the image.
|
||||||
|
(gdk_draw_drawable): get the composite before we draw the drawable.
|
||||||
|
(gdk_drawable_real_get_composite_drawable): default
|
||||||
|
get_composite_drawable implementation that returns the drawable
|
||||||
|
itself
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Add
|
||||||
|
get_composite_drawable virtual function
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix a cheesy
|
||||||
|
list-walking bug
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_drawable): Add a hack to
|
||||||
|
make this work if the source drawable is a GdkDrawableImplX11
|
||||||
|
instead of a public drawable type. This is really broken; the
|
||||||
|
problem is that GdkDrawable needs a virtual method get_xid(), but
|
||||||
|
of course that doesn't work in practice. Enter RTTI.
|
||||||
|
|
||||||
|
Also, improve mismatched depth message.
|
||||||
|
|
||||||
|
* gdk/gdkpixmap.c (gdk_pixmap_get_image): Implement get_image for
|
||||||
|
GdkPixmap
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_class_init):
|
||||||
|
install _gdk_x11_get_image as our implementation of get_image
|
||||||
|
|
||||||
|
* gdk/x11/gdkimage-x11.c (gdk_image_get): Rename to
|
||||||
|
_gdk_x11_get_image and export for use in gdkdrawable-x11.c
|
||||||
|
|
||||||
|
* gdk/gdkimage.c (gdk_image_get): Make this just a wrapper around
|
||||||
|
gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): call virtual get_image
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Virtualize
|
||||||
|
get_image
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_get_node): remove weird
|
||||||
|
trailing semicolon after for loop
|
||||||
|
|
||||||
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
||||||
|
@ -1,3 +1,61 @@
|
|||||||
|
2000-10-23 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gtk/testtext.c: Re-enable the "find" dialog
|
||||||
|
|
||||||
|
* gtk/testgtk.c: Add test for gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix bug where
|
||||||
|
the arguments to gdk_draw_drawable were in the wrong order
|
||||||
|
(gdk_window_paint_init_bg): This function was ignoring the
|
||||||
|
init_region, instead of clipping to it, so the entire backing
|
||||||
|
pixmap was cleared on every begin_paint()
|
||||||
|
(gdk_window_begin_paint_region): Hmm, the same list-walking bug
|
||||||
|
was in here again, the loop kept using the same GtkWindowPaint
|
||||||
|
over and over.
|
||||||
|
(gdk_window_begin_paint_region): Fix a bug where we had two
|
||||||
|
x_offset instead of x_offset and y_offset
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): get composite drawable
|
||||||
|
before we get the image.
|
||||||
|
(gdk_draw_drawable): get the composite before we draw the drawable.
|
||||||
|
(gdk_drawable_real_get_composite_drawable): default
|
||||||
|
get_composite_drawable implementation that returns the drawable
|
||||||
|
itself
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Add
|
||||||
|
get_composite_drawable virtual function
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix a cheesy
|
||||||
|
list-walking bug
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_drawable): Add a hack to
|
||||||
|
make this work if the source drawable is a GdkDrawableImplX11
|
||||||
|
instead of a public drawable type. This is really broken; the
|
||||||
|
problem is that GdkDrawable needs a virtual method get_xid(), but
|
||||||
|
of course that doesn't work in practice. Enter RTTI.
|
||||||
|
|
||||||
|
Also, improve mismatched depth message.
|
||||||
|
|
||||||
|
* gdk/gdkpixmap.c (gdk_pixmap_get_image): Implement get_image for
|
||||||
|
GdkPixmap
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_class_init):
|
||||||
|
install _gdk_x11_get_image as our implementation of get_image
|
||||||
|
|
||||||
|
* gdk/x11/gdkimage-x11.c (gdk_image_get): Rename to
|
||||||
|
_gdk_x11_get_image and export for use in gdkdrawable-x11.c
|
||||||
|
|
||||||
|
* gdk/gdkimage.c (gdk_image_get): Make this just a wrapper around
|
||||||
|
gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): call virtual get_image
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Virtualize
|
||||||
|
get_image
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_get_node): remove weird
|
||||||
|
trailing semicolon after for loop
|
||||||
|
|
||||||
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
||||||
|
@ -1,3 +1,61 @@
|
|||||||
|
2000-10-23 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gtk/testtext.c: Re-enable the "find" dialog
|
||||||
|
|
||||||
|
* gtk/testgtk.c: Add test for gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix bug where
|
||||||
|
the arguments to gdk_draw_drawable were in the wrong order
|
||||||
|
(gdk_window_paint_init_bg): This function was ignoring the
|
||||||
|
init_region, instead of clipping to it, so the entire backing
|
||||||
|
pixmap was cleared on every begin_paint()
|
||||||
|
(gdk_window_begin_paint_region): Hmm, the same list-walking bug
|
||||||
|
was in here again, the loop kept using the same GtkWindowPaint
|
||||||
|
over and over.
|
||||||
|
(gdk_window_begin_paint_region): Fix a bug where we had two
|
||||||
|
x_offset instead of x_offset and y_offset
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): get composite drawable
|
||||||
|
before we get the image.
|
||||||
|
(gdk_draw_drawable): get the composite before we draw the drawable.
|
||||||
|
(gdk_drawable_real_get_composite_drawable): default
|
||||||
|
get_composite_drawable implementation that returns the drawable
|
||||||
|
itself
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Add
|
||||||
|
get_composite_drawable virtual function
|
||||||
|
|
||||||
|
* gdk/gdkwindow.c (gdk_window_begin_paint_region): Fix a cheesy
|
||||||
|
list-walking bug
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_x11_draw_drawable): Add a hack to
|
||||||
|
make this work if the source drawable is a GdkDrawableImplX11
|
||||||
|
instead of a public drawable type. This is really broken; the
|
||||||
|
problem is that GdkDrawable needs a virtual method get_xid(), but
|
||||||
|
of course that doesn't work in practice. Enter RTTI.
|
||||||
|
|
||||||
|
Also, improve mismatched depth message.
|
||||||
|
|
||||||
|
* gdk/gdkpixmap.c (gdk_pixmap_get_image): Implement get_image for
|
||||||
|
GdkPixmap
|
||||||
|
|
||||||
|
* gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_class_init):
|
||||||
|
install _gdk_x11_get_image as our implementation of get_image
|
||||||
|
|
||||||
|
* gdk/x11/gdkimage-x11.c (gdk_image_get): Rename to
|
||||||
|
_gdk_x11_get_image and export for use in gdkdrawable-x11.c
|
||||||
|
|
||||||
|
* gdk/gdkimage.c (gdk_image_get): Make this just a wrapper around
|
||||||
|
gdk_drawable_get_image
|
||||||
|
|
||||||
|
* gdk/gdkdraw.c (gdk_drawable_get_image): call virtual get_image
|
||||||
|
|
||||||
|
* gdk/gdkdrawable.h (struct _GdkDrawableClass ): Virtualize
|
||||||
|
get_image
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_get_node): remove weird
|
||||||
|
trailing semicolon after for loop
|
||||||
|
|
||||||
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
Mon Oct 23 12:07:57 2000 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
* gtk/gtkwidget.c (gtk_widget_set_style_internal): Fix problem
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
|
2000-10-23 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtk-sections.txt: remove GtkTextBTree
|
||||||
|
|
||||||
|
* gtk/text_widget.sgml: Overview of the text widget
|
||||||
|
|
||||||
|
* gtk/gtk-docs.sgml: Change to using categories for the toplevel
|
||||||
|
organization of the reference entries. We'll add an alphabetical
|
||||||
|
index eventually. The category way is a lot easier for people who
|
||||||
|
aren't familiar with the widgets. Removed objects_grouped.sgml
|
||||||
|
from gtk-docs.sgml for now, it doesn't seem useful anymore.
|
||||||
|
|
||||||
|
* gtk/objects_grouped.sgml: Add a section for deprecated
|
||||||
|
objects; add a section for the TextView object collection
|
||||||
|
|
||||||
Wed Oct 18 11:01:12 2000 Owen Taylor <otaylor@redhat.com>
|
Wed Oct 18 11:01:12 2000 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* gtk/Makefile.am gdk-pixbuf/Makefile.am: Fix typo
|
* gtk/Makefile.am gdk-pixbuf/Makefile.am: Fix typo
|
||||||
|
@ -62,7 +62,8 @@ GTKDOC_CC=$(LIBTOOL) --mode=compile $(CC)
|
|||||||
GTKDOC_LD=$(LIBTOOL) --mode=link $(CC)
|
GTKDOC_LD=$(LIBTOOL) --mode=link $(CC)
|
||||||
|
|
||||||
content_files = \
|
content_files = \
|
||||||
objects_grouped.sgml
|
objects_grouped.sgml \
|
||||||
|
text_widget.sgml
|
||||||
|
|
||||||
####################################
|
####################################
|
||||||
# Everything below here is generic #
|
# Everything below here is generic #
|
||||||
|
@ -120,6 +120,7 @@
|
|||||||
<!entity index-Object-Tree SYSTEM "sgml/tree_index.sgml">
|
<!entity index-Object-Tree SYSTEM "sgml/tree_index.sgml">
|
||||||
|
|
||||||
<!entity index-Objects-Grouped SYSTEM "objects_grouped.sgml">
|
<!entity index-Objects-Grouped SYSTEM "objects_grouped.sgml">
|
||||||
|
<!entity gtk-TextWidget SYSTEM "text_widget.sgml">
|
||||||
]>
|
]>
|
||||||
<book id="index">
|
<book id="index">
|
||||||
<bookinfo>
|
<bookinfo>
|
||||||
@ -173,6 +174,7 @@ An advanced widget set.
|
|||||||
</varlistentry>
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
>k-General;
|
>k-General;
|
||||||
>k-Feature-Test-Macros;
|
>k-Feature-Test-Macros;
|
||||||
>k-Graphics-Contexts;
|
>k-Graphics-Contexts;
|
||||||
@ -188,120 +190,176 @@ An advanced widget set.
|
|||||||
>k-Types;
|
>k-Types;
|
||||||
>k-Bindings;
|
>k-Bindings;
|
||||||
>k-Standard-Enumerations;
|
>k-Standard-Enumerations;
|
||||||
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="gtkobjects" role="no-toc">
|
<chapter id="gtkobjects" role="no-toc">
|
||||||
<title>GTK+ Widgets and Objects</title>
|
<title>GTK+ Widgets and Objects</title>
|
||||||
&index-Objects-Grouped;
|
|
||||||
|
|
||||||
&GtkAccelLabel;
|
|
||||||
&GtkAdjustment;
|
|
||||||
&GtkAlignment;
|
|
||||||
&GtkArrow;
|
|
||||||
&GtkAspectFrame;
|
|
||||||
&GtkButtonBox;
|
|
||||||
&GtkBin;
|
|
||||||
&GtkBox;
|
|
||||||
&GtkButton;
|
|
||||||
&GtkCalendar;
|
|
||||||
&GtkCheckButton;
|
|
||||||
&GtkCheckMenuItem;
|
|
||||||
&GtkCList;
|
|
||||||
&GtkColorSelection;
|
|
||||||
&GtkColorSelectionDialog;
|
|
||||||
&GtkCombo;
|
|
||||||
&GtkContainer;
|
|
||||||
&GtkCTree;
|
|
||||||
&GtkCurve;
|
|
||||||
&GtkData;
|
|
||||||
&GtkDialog;
|
|
||||||
&GtkDrawingArea;
|
|
||||||
&GtkEditable;
|
|
||||||
&GtkEntry;
|
|
||||||
&GtkEventBox;
|
|
||||||
&GtkFileSelection;
|
|
||||||
&GtkFixed;
|
|
||||||
&GtkFontSelection;
|
|
||||||
&GtkFontSelectionDialog;
|
|
||||||
&GtkFrame;
|
|
||||||
&GtkGammaCurve;
|
|
||||||
&GtkHandleBox;
|
|
||||||
&GtkHButtonBox;
|
|
||||||
&GtkHBox;
|
|
||||||
&GtkHPaned;
|
|
||||||
&GtkHRuler;
|
|
||||||
&GtkHScale;
|
|
||||||
&GtkHScrollbar;
|
|
||||||
&GtkHSeparator;
|
|
||||||
&GtkImage;
|
|
||||||
&GtkIMContext;
|
|
||||||
&GtkIMMulticontext;
|
|
||||||
&GtkInputDialog;
|
|
||||||
&GtkInvisible;
|
|
||||||
&GtkItem;
|
|
||||||
&GtkItemFactory;
|
|
||||||
&GtkLabel;
|
|
||||||
&GtkLayout;
|
|
||||||
&GtkList;
|
|
||||||
&GtkListItem;
|
|
||||||
&GtkMenu;
|
|
||||||
&GtkMenuBar;
|
|
||||||
&GtkMenuItem;
|
|
||||||
&GtkMenuShell;
|
|
||||||
&GtkMisc;
|
|
||||||
&GtkNotebook;
|
|
||||||
&GtkObject;
|
|
||||||
&GtkOptionMenu;
|
|
||||||
&GtkPacker;
|
|
||||||
&GtkPaned;
|
|
||||||
&GtkPixmap;
|
|
||||||
&GtkPlug;
|
|
||||||
&GtkPreview;
|
|
||||||
&GtkProgress;
|
|
||||||
&GtkProgressBar;
|
|
||||||
&GtkRadioButton;
|
|
||||||
&GtkRadioMenuItem;
|
|
||||||
&GtkRange;
|
|
||||||
&GtkRuler;
|
|
||||||
&GtkScale;
|
|
||||||
&GtkScrollbar;
|
|
||||||
&GtkScrolledWindow;
|
|
||||||
&GtkSeparator;
|
|
||||||
&GtkSocket;
|
|
||||||
&GtkSpinButton;
|
|
||||||
&GtkStatusbar;
|
|
||||||
&GtkTable;
|
|
||||||
&GtkTearoffMenuItem;
|
|
||||||
&GtkText;
|
|
||||||
&GtkTextBuffer;
|
|
||||||
>k-GtkTextIter;
|
|
||||||
>k-GtkTextMark;
|
|
||||||
&GtkTextTag;
|
|
||||||
&GtkTextTagTable;
|
|
||||||
&GtkTextView;
|
|
||||||
&GtkTipsQuery;
|
|
||||||
&GtkToggleButton;
|
|
||||||
&GtkToolbar;
|
|
||||||
&GtkTooltips;
|
|
||||||
&GtkTree;
|
|
||||||
&GtkTreeItem;
|
|
||||||
&GtkVButtonBox;
|
|
||||||
&GtkVBox;
|
|
||||||
&GtkViewport;
|
|
||||||
&GtkVPaned;
|
|
||||||
&GtkVRuler;
|
|
||||||
&GtkVScale;
|
|
||||||
&GtkVScrollbar;
|
|
||||||
&GtkVSeparator;
|
|
||||||
&GtkWidget;
|
|
||||||
&GtkWindow;
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="gtk-index">
|
|
||||||
<title>Index</title>
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Object Hierarchy</title>
|
<title>Object Hierarchy</title>
|
||||||
&index-Object-Tree;
|
&index-Object-Tree;
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="WindowWidgets">
|
||||||
|
<title>Windows</title>
|
||||||
|
&GtkDialog;
|
||||||
|
&GtkInvisible;
|
||||||
|
&GtkPlug;
|
||||||
|
&GtkWindow;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="DisplayWidgets">
|
||||||
|
<title>Display Widgets</title>
|
||||||
|
&GtkAccelLabel;
|
||||||
|
&GtkImage;
|
||||||
|
&GtkLabel;
|
||||||
|
&GtkProgressBar;
|
||||||
|
&GtkStatusbar;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="ButtonWidgets">
|
||||||
|
<title>Buttons and Toggles</title>
|
||||||
|
&GtkButton;
|
||||||
|
&GtkCheckButton;
|
||||||
|
&GtkRadioButton;
|
||||||
|
&GtkToggleButton;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="NumericEntry">
|
||||||
|
<title>Numeric/Text Data Entry</title>
|
||||||
|
&GtkEntry;
|
||||||
|
&GtkHScale;
|
||||||
|
&GtkSpinButton;
|
||||||
|
&GtkVScale;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="TextWidgetObjects">
|
||||||
|
<title>Multiline Text Editor</title>
|
||||||
|
>k-TextWidget;
|
||||||
|
>k-GtkTextIter;
|
||||||
|
>k-GtkTextMark;
|
||||||
|
&GtkText;
|
||||||
|
&GtkTextBuffer;
|
||||||
|
&GtkTextTag;
|
||||||
|
&GtkTextTagTable;
|
||||||
|
&GtkTextView;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
|
||||||
|
<sect1 id="MenusAndCombos">
|
||||||
|
<title>Menus, Combo Box, Toolbar</title>
|
||||||
|
&GtkCheckMenuItem;
|
||||||
|
&GtkCombo;
|
||||||
|
&GtkItemFactory;
|
||||||
|
&GtkMenu;
|
||||||
|
&GtkMenuBar;
|
||||||
|
&GtkMenuItem;
|
||||||
|
&GtkMenuShell;
|
||||||
|
&GtkOptionMenu;
|
||||||
|
&GtkRadioMenuItem;
|
||||||
|
&GtkTearoffMenuItem;
|
||||||
|
&GtkToolbar;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="SelectorWidgets">
|
||||||
|
<title>Selectors (File/Font/Color/Input Devices)</title>
|
||||||
|
&GtkColorSelection;
|
||||||
|
&GtkColorSelectionDialog;
|
||||||
|
&GtkFileSelection;
|
||||||
|
&GtkFontSelection;
|
||||||
|
&GtkFontSelectionDialog;
|
||||||
|
&GtkInputDialog;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="LayoutContainers">
|
||||||
|
<title>Layout Containers</title>
|
||||||
|
&GtkAlignment;
|
||||||
|
&GtkAspectFrame;
|
||||||
|
&GtkHBox;
|
||||||
|
&GtkHButtonBox;
|
||||||
|
&GtkFixed;
|
||||||
|
&GtkHPaned;
|
||||||
|
&GtkLayout;
|
||||||
|
&GtkNotebook;
|
||||||
|
&GtkTable;
|
||||||
|
&GtkVButtonBox;
|
||||||
|
&GtkVBox;
|
||||||
|
&GtkVPaned;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="Ornaments">
|
||||||
|
<title>Ornaments</title>
|
||||||
|
&GtkFrame;
|
||||||
|
&GtkHSeparator;
|
||||||
|
&GtkVSeparator;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="ScrollingWidgets">
|
||||||
|
<title>Scrolling</title>
|
||||||
|
&GtkHScrollbar;
|
||||||
|
&GtkScrolledWindow;
|
||||||
|
&GtkVScrollbar;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="MiscObjects">
|
||||||
|
<title>Miscellaneous</title>
|
||||||
|
&GtkAdjustment;
|
||||||
|
&GtkArrow;
|
||||||
|
&GtkCalendar;
|
||||||
|
&GtkDrawingArea;
|
||||||
|
&GtkEventBox;
|
||||||
|
&GtkHandleBox;
|
||||||
|
&GtkIMContext;
|
||||||
|
&GtkIMMulticontext;
|
||||||
|
&GtkTooltips;
|
||||||
|
&GtkViewport;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="AbstractObjects">
|
||||||
|
<title>Abstract Base Classes</title>
|
||||||
|
&GtkBin;
|
||||||
|
&GtkBox;
|
||||||
|
&GtkContainer;
|
||||||
|
&GtkEditable;
|
||||||
|
&GtkButtonBox;
|
||||||
|
&GtkMisc;
|
||||||
|
&GtkObject;
|
||||||
|
&GtkPaned;
|
||||||
|
&GtkRange;
|
||||||
|
&GtkScale;
|
||||||
|
&GtkScrollbar;
|
||||||
|
&GtkSeparator;
|
||||||
|
&GtkWidget;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="PlugSocket">
|
||||||
|
<title>Cross-process Embedding</title>
|
||||||
|
&GtkSocket;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="DeprecatedObjects">
|
||||||
|
<title>Deprecated</title>
|
||||||
|
&GtkCList;
|
||||||
|
&GtkCTree;
|
||||||
|
&GtkCurve;
|
||||||
|
&GtkData;
|
||||||
|
&GtkGammaCurve;
|
||||||
|
&GtkHRuler;
|
||||||
|
&GtkItem;
|
||||||
|
&GtkList;
|
||||||
|
&GtkListItem;
|
||||||
|
&GtkPacker;
|
||||||
|
&GtkPixmap;
|
||||||
|
&GtkPreview;
|
||||||
|
&GtkProgress;
|
||||||
|
&GtkRuler;
|
||||||
|
&GtkTipsQuery;
|
||||||
|
&GtkTree;
|
||||||
|
&GtkTreeItem;
|
||||||
|
&GtkVRuler;
|
||||||
|
</sect1>
|
||||||
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
</book>
|
</book>
|
||||||
|
@ -1951,7 +1951,6 @@ GTK_IS_TEXT_CLASS
|
|||||||
|
|
||||||
<SECTION>
|
<SECTION>
|
||||||
<FILE>gtktextbuffer</FILE>
|
<FILE>gtktextbuffer</FILE>
|
||||||
GtkTextBTree
|
|
||||||
<TITLE>GtkTextBuffer</TITLE>
|
<TITLE>GtkTextBuffer</TITLE>
|
||||||
gtk_text_buffer_new
|
gtk_text_buffer_new
|
||||||
gtk_text_buffer_get_line_count
|
gtk_text_buffer_get_line_count
|
||||||
|
@ -46,25 +46,31 @@
|
|||||||
|
|
||||||
<emphasis>Data Entry Widgets</emphasis>
|
<emphasis>Data Entry Widgets</emphasis>
|
||||||
<link linkend="GtkEntry">GtkEntry</link>
|
<link linkend="GtkEntry">GtkEntry</link>
|
||||||
<link linkend="GtkText">GtkText</link>
|
|
||||||
<link linkend="GtkSpinButton">GtkSpinButton</link>
|
<link linkend="GtkSpinButton">GtkSpinButton</link>
|
||||||
|
<link linkend="GtkTextView">GtkTextView</link>
|
||||||
<link linkend="GtkOptionMenu">GtkOptionMenu</link>
|
<link linkend="GtkOptionMenu">GtkOptionMenu</link>
|
||||||
<link linkend="GtkCombo">GtkCombo</link>
|
<link linkend="GtkCombo">GtkCombo</link>
|
||||||
<link linkend="GtkHScale">GtkHScale</link>
|
<link linkend="GtkHScale">GtkHScale</link>
|
||||||
<link linkend="GtkVScale">GtkVScale</link>
|
<link linkend="GtkVScale">GtkVScale</link>
|
||||||
|
|
||||||
|
|
||||||
<emphasis>Lists & Trees</emphasis>
|
<emphasis>Lists & Trees</emphasis>
|
||||||
<link linkend="GtkCList">GtkCList</link>
|
<link linkend="GtkCList">GtkCList</link>
|
||||||
<link linkend="GtkCTree">GtkCTree</link>
|
<link linkend="GtkCTree">GtkCTree</link>
|
||||||
<link linkend="GtkList">GtkList</link>
|
<link linkend="GtkList">GtkList</link>
|
||||||
<link linkend="GtkListItem">GtkListItem</link>
|
<link linkend="GtkListItem">GtkListItem</link>
|
||||||
<link linkend="GtkTree">GtkTree</link>
|
|
||||||
<link linkend="GtkTreeItem">GtkTreeItem</link>
|
<emphasis>Text Widget Objects</emphasis>
|
||||||
|
<link linkend="GtkTextBuffer">GtkTextBuffer</link>
|
||||||
|
<link linkend="GtkTextTag">GtkTextTag</link>
|
||||||
|
<link linkend="GtkTextTagTable">GtkTextTagTable</link>
|
||||||
|
<link linkend="GtkTextView">GtkTextView</link>
|
||||||
|
|
||||||
<emphasis>Tooltips</emphasis>
|
<emphasis>Tooltips</emphasis>
|
||||||
<link linkend="GtkTooltips">GtkTooltips</link>
|
<link linkend="GtkTooltips">GtkTooltips</link>
|
||||||
<link linkend="GtkTipsQuery">GtkTipsQuery</link>
|
<link linkend="GtkTipsQuery">GtkTipsQuery</link>
|
||||||
</literallayout></entry>
|
</literallayout></entry>
|
||||||
|
|
||||||
<entry><literallayout>
|
<entry><literallayout>
|
||||||
<emphasis>Menus & Menu Bars</emphasis>
|
<emphasis>Menus & Menu Bars</emphasis>
|
||||||
<link linkend="GtkMenuBar">GtkMenuBar</link>
|
<link linkend="GtkMenuBar">GtkMenuBar</link>
|
||||||
@ -96,6 +102,7 @@
|
|||||||
<link linkend="GtkColorSelection">GtkColorSelection</link>
|
<link linkend="GtkColorSelection">GtkColorSelection</link>
|
||||||
<link linkend="GtkFontSelection">GtkFontSelection</link>
|
<link linkend="GtkFontSelection">GtkFontSelection</link>
|
||||||
</literallayout></entry>
|
</literallayout></entry>
|
||||||
|
|
||||||
<entry><literallayout>
|
<entry><literallayout>
|
||||||
<emphasis>Abstract Base Classes</emphasis>
|
<emphasis>Abstract Base Classes</emphasis>
|
||||||
<link linkend="GtkWidget">GtkWidget</link>
|
<link linkend="GtkWidget">GtkWidget</link>
|
||||||
@ -126,5 +133,12 @@
|
|||||||
<link linkend="GtkItemFactory">GtkItemFactory</link>
|
<link linkend="GtkItemFactory">GtkItemFactory</link>
|
||||||
<link linkend="GtkInvisible">GtkInvisible</link>
|
<link linkend="GtkInvisible">GtkInvisible</link>
|
||||||
</literallayout></entry>
|
</literallayout></entry>
|
||||||
|
|
||||||
|
<entry><literallayout>
|
||||||
|
<emphasis>Deprecated Objects</emphasis>
|
||||||
|
<link linkend="GtkText">GtkText</link>
|
||||||
|
<link linkend="GtkTree">GtkTree</link>
|
||||||
|
<link linkend="GtkTreeItem">GtkTreeItem</link>
|
||||||
|
</literallayout></entry>
|
||||||
</row>
|
</row>
|
||||||
</tbody></tgroup></informaltable>
|
</tbody></tgroup></informaltable>
|
||||||
|
127
docs/reference/gtk/text_widget.sgml
Normal file
127
docs/reference/gtk/text_widget.sgml
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<refentry id="TextWidget" revision="18 Oct 2000">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>Text Widget Overview</refentrytitle>
|
||||||
|
<manvolnum>3</manvolnum>
|
||||||
|
<refmiscinfo>GTK Library</refmiscinfo>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>Text Widget Overview</refname><refpurpose>Overview of <link linkend="GtkTextBuffer">GtkTextBuffer</link>, <link linkend="GtkTextView">GtkTextView</link>, and friends</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Conceptual Overview</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
GTK+ has an extremely powerful framework for multiline text editing. The
|
||||||
|
primary objects involved in the process are <link
|
||||||
|
linkend="GtkTextBuffer">GtkTextBuffer</link>, which represents the text being
|
||||||
|
edited, and <link linkend="GtkTextView">GtkTextView</link>, a widget which can
|
||||||
|
display a <link linkend="GtkTextBuffer">GtkTextBuffer</link>. Each buffer can be
|
||||||
|
displayed by any number of views.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Text in a buffer can be marked with <firstterm>tags</firstterm>. A tag is an
|
||||||
|
attribute that can be applied to some range of text. For example, a tag might be
|
||||||
|
called "bold" and make the text inside the tag bold. However, the tag concept is
|
||||||
|
more general than that; tags don't have to affect appearance. They can instead
|
||||||
|
affect change the behavior of mouse and key presses, "lock" a range of text so
|
||||||
|
the user can't edit it, or countless other things. A tag is represented by a
|
||||||
|
<link linkend="GtkTextTag">GtkTextTag</link> object. One <link
|
||||||
|
linkend="GtkTextTag">GtkTextTag</link> can be applied to any number of text
|
||||||
|
ranges in any number of buffers.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Each tag is stored in a <link
|
||||||
|
linkend="GtkTextTagTable">GtkTextTagTable</link>. A tag table defines a set of
|
||||||
|
tags that can be used together. Each buffer has one tag table associated with
|
||||||
|
it; only tags from that tag table can be used with the buffer. A single tag
|
||||||
|
table can be shared between multiple buffers, however.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Tags can have names, which is convenient sometimes (for example, you can name
|
||||||
|
your tag that makes things bold "bold"), but they can also be anonymous (which
|
||||||
|
is convenient if you're creating tags on-the-fly).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Most text manipulation is accomplished with <firstterm>iterators</firstterm>,
|
||||||
|
represented by a <link linkend="GtkTextIter">GtkTextIter</link>. An iterator
|
||||||
|
represents a position in the text buffer. <link
|
||||||
|
linkend="GtkTextIter">GtkTextIter</link> is a struct designed to be allocated on
|
||||||
|
the stack; it's guaranteed to be copiable by value and never contain any
|
||||||
|
heap-allocated data. Iterators are not valid indefinitely; whenever the buffer
|
||||||
|
is modified in a way that affects the number of characters in the buffer, all
|
||||||
|
outstanding iterators become invalid. (Note that deleting 5 characters and then
|
||||||
|
reinserting 5 still invalidates iterators, though you end up with the same
|
||||||
|
number of characters).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Because of this, iterators can't be used to preserve positions across buffer
|
||||||
|
modifications. To preserve a position, the <link
|
||||||
|
linkend="GtkTextMark">GtkTextMark</link> object is ideal. You can think of a
|
||||||
|
mark as an invisible cursor or insertion point; it floats in the buffer, saving
|
||||||
|
a position. If the text surrounding the mark is deleted, the mark remains in the
|
||||||
|
position the text once occupied; if text is inserted at the mark, the mark ends
|
||||||
|
up either to the left or to the right of the new text, depending on its
|
||||||
|
<firstterm>gravity</firstterm>. The standard text cursor in left-to-right
|
||||||
|
languages is a mark with right gravity, because it stays to the right of
|
||||||
|
inserted text.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Like tags, marks can be either named or anonymous. There are two marks built-in
|
||||||
|
to <link linkend="GtkTextBuffer">GtkTextBuffer</link>; these are named
|
||||||
|
<literal>"insert"</literal> and <literal>"selection_bound"</literal> and refer
|
||||||
|
to the insertion point and the boundary of the selection which is not the
|
||||||
|
insertion point, respectively. If no text is selected, these two marks will be
|
||||||
|
in the same position. You can manipulate what is selected and where the cursor
|
||||||
|
appears by moving these marks around.
|
||||||
|
|
||||||
|
<footnote>
|
||||||
|
<para>
|
||||||
|
If you want to place the cursor in response to a user action, be sure to use
|
||||||
|
gtk_text_buffer_place_cursor(), which moves both at once without causing a
|
||||||
|
temporary selection (moving one then the other temporarily selects the range in
|
||||||
|
between the old and new positions).
|
||||||
|
</para>
|
||||||
|
</footnote>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Simple Example</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The simplest usage of <link linkend="GtkTextView">GtkTextView</link>
|
||||||
|
might look like this:
|
||||||
|
<programlisting>
|
||||||
|
|
||||||
|
/* Get a buffer (it's a GObject, not a GtkObject, so we own a reference
|
||||||
|
* after this). Passing NULL as argument causes an empty tag table to be
|
||||||
|
* automatically created.
|
||||||
|
*/
|
||||||
|
|
||||||
|
buffer = gtk_text_buffer_new (NULL);
|
||||||
|
|
||||||
|
view = gtk_text_view_new_with_buffer (buffer);
|
||||||
|
|
||||||
|
/* view holds a reference now */
|
||||||
|
g_object_unref (G_OBJECT (buffer));
|
||||||
|
|
||||||
|
/* Now you might put the view in a container and display it on the
|
||||||
|
* screen; when the user edits the text, signals on the buffer
|
||||||
|
* will be emitted, such as "changed", "insert_text", and so on.
|
||||||
|
*/
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
@ -3,15 +3,24 @@ GtkTextBuffer
|
|||||||
|
|
||||||
<!-- ##### SECTION Short_Description ##### -->
|
<!-- ##### SECTION Short_Description ##### -->
|
||||||
|
|
||||||
|
Stores attributed text for display in a <link
|
||||||
|
linkend="GtkTextView">GtkTextView</link>
|
||||||
|
|
||||||
<!-- ##### SECTION Long_Description ##### -->
|
<!-- ##### SECTION Long_Description ##### -->
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may wish to begin by reading the <link linkend="TextWidget">text widget
|
||||||
|
conceptual overview</link> which gives an overview of all the objects and data
|
||||||
|
types related to the text widget and how they work together.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<!-- ##### SECTION See_Also ##### -->
|
<!-- ##### SECTION See_Also ##### -->
|
||||||
<para>
|
<para>
|
||||||
|
#GtkTextView, #GtkTextIter, #GtkTextMark
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<!-- ##### STRUCT GtkTextBTree ##### -->
|
<!-- ##### STRUCT GtkTextBTree ##### -->
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
<!-- ##### SECTION Title ##### -->
|
<!-- ##### SECTION Title ##### -->
|
||||||
gtktextiter
|
GtkTextIter
|
||||||
|
|
||||||
<!-- ##### SECTION Short_Description ##### -->
|
<!-- ##### SECTION Short_Description ##### -->
|
||||||
|
Text buffer iterator
|
||||||
|
|
||||||
<!-- ##### SECTION Long_Description ##### -->
|
<!-- ##### SECTION Long_Description ##### -->
|
||||||
|
<para>
|
||||||
|
You may wish to begin by reading the <link linkend="TextWidget">text widget
|
||||||
|
conceptual overview</link> which gives an overview of all the objects and data
|
||||||
|
types related to the text widget and how they work together.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|
||||||
</para>
|
</para>
|
||||||
|
@ -1,12 +1,51 @@
|
|||||||
<!-- ##### SECTION Title ##### -->
|
<!-- ##### SECTION Title ##### -->
|
||||||
gtktextmark
|
GtkTextMark
|
||||||
|
|
||||||
<!-- ##### SECTION Short_Description ##### -->
|
<!-- ##### SECTION Short_Description ##### -->
|
||||||
|
|
||||||
|
A position in the buffer preserved across buffer modifications
|
||||||
|
|
||||||
<!-- ##### SECTION Long_Description ##### -->
|
<!-- ##### SECTION Long_Description ##### -->
|
||||||
<para>
|
<para>
|
||||||
|
You may wish to begin by reading the <link linkend="TextWidget">text widget
|
||||||
|
conceptual overview</link> which gives an overview of all the objects and data
|
||||||
|
types related to the text widget and how they work together.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A #GtkTextMark is like a bookmark in a text buffer; it preserves a position in
|
||||||
|
the text. You can convert the mark to an iterator using
|
||||||
|
gtk_text_buffer_get_iter_at_mark(). Unlike iterators, marks remain valid across
|
||||||
|
buffer mutations, because their behavior is defined when text is inserted or
|
||||||
|
deleted. When text containing a mark is deleted, the mark remains in the
|
||||||
|
position originally occupied by the deleted text. When text is inserted at a
|
||||||
|
mark, a mark with <firstterm>left gravity</firstterm> will be moved to the
|
||||||
|
beginning of the newly-inserted text, and a mark with <firstterm>right
|
||||||
|
gravity</firstterm> will be moved to the end.
|
||||||
|
|
||||||
|
<footnote>
|
||||||
|
<para>
|
||||||
|
"left" and "right" here refer to logical direction (left is the toward the start
|
||||||
|
of the buffer); in some languages such as Hebrew the logically-leftmost text is
|
||||||
|
not actually on the left when displayed.
|
||||||
|
</para>
|
||||||
|
</footnote>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Marks are reference counted, but the reference count only controls the validity
|
||||||
|
of the memory; marks can be deleted from the buffer at any time with
|
||||||
|
gtk_text_buffer_delete_mark(). Once deleted from the buffer, a mark is
|
||||||
|
essentially useless.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Marks optionally have names; these can be convenient to avoid passing the
|
||||||
|
#GtkTextMark object around.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Marks are typically created using the gtk_text_buffer_create_mark() function.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<!-- ##### SECTION See_Also ##### -->
|
<!-- ##### SECTION See_Also ##### -->
|
||||||
|
@ -3,8 +3,15 @@ GtkTextTag
|
|||||||
|
|
||||||
<!-- ##### SECTION Short_Description ##### -->
|
<!-- ##### SECTION Short_Description ##### -->
|
||||||
|
|
||||||
|
A tag that can be applied to text in a <link linkend="GtkTextBuffer">GtkTextBuffer</link>
|
||||||
|
|
||||||
<!-- ##### SECTION Long_Description ##### -->
|
<!-- ##### SECTION Long_Description ##### -->
|
||||||
|
<para>
|
||||||
|
You may wish to begin by reading the <link linkend="TextWidget">text widget
|
||||||
|
conceptual overview</link> which gives an overview of all the objects and data
|
||||||
|
types related to the text widget and how they work together.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|
||||||
</para>
|
</para>
|
||||||
|
@ -3,8 +3,15 @@ GtkTextTagTable
|
|||||||
|
|
||||||
<!-- ##### SECTION Short_Description ##### -->
|
<!-- ##### SECTION Short_Description ##### -->
|
||||||
|
|
||||||
|
Collection of tags that can be used together
|
||||||
|
|
||||||
<!-- ##### SECTION Long_Description ##### -->
|
<!-- ##### SECTION Long_Description ##### -->
|
||||||
|
<para>
|
||||||
|
You may wish to begin by reading the <link linkend="TextWidget">text widget
|
||||||
|
conceptual overview</link> which gives an overview of all the objects and data
|
||||||
|
types related to the text widget and how they work together.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|
||||||
</para>
|
</para>
|
||||||
|
@ -2,16 +2,22 @@
|
|||||||
GtkTextView
|
GtkTextView
|
||||||
|
|
||||||
<!-- ##### SECTION Short_Description ##### -->
|
<!-- ##### SECTION Short_Description ##### -->
|
||||||
|
Widget that displays a <link linkend="GtkTextBuffer">GtkTextBuffer</link>
|
||||||
|
|
||||||
<!-- ##### SECTION Long_Description ##### -->
|
<!-- ##### SECTION Long_Description ##### -->
|
||||||
|
<para>
|
||||||
|
You may wish to begin by reading the <link linkend="TextWidget">text widget
|
||||||
|
conceptual overview</link> which gives an overview of all the objects and data
|
||||||
|
types related to the text widget and how they work together.
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<!-- ##### SECTION See_Also ##### -->
|
<!-- ##### SECTION See_Also ##### -->
|
||||||
<para>
|
<para>
|
||||||
|
#GtkTextBuffer, #GtkTextIter
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<!-- ##### STRUCT GtkTextView ##### -->
|
<!-- ##### STRUCT GtkTextView ##### -->
|
||||||
|
@ -28,6 +28,16 @@
|
|||||||
#include "gdkinternals.h"
|
#include "gdkinternals.h"
|
||||||
#include "gdkwindow.h"
|
#include "gdkwindow.h"
|
||||||
|
|
||||||
|
static GdkDrawable* gdk_drawable_real_get_composite_drawable (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height,
|
||||||
|
gint *composite_x_offset,
|
||||||
|
gint *composite_y_offset);
|
||||||
|
|
||||||
|
static void gdk_drawable_class_init (GdkDrawableClass *klass);
|
||||||
|
|
||||||
GType
|
GType
|
||||||
gdk_drawable_get_type (void)
|
gdk_drawable_get_type (void)
|
||||||
{
|
{
|
||||||
@ -40,7 +50,7 @@ gdk_drawable_get_type (void)
|
|||||||
sizeof (GdkDrawableClass),
|
sizeof (GdkDrawableClass),
|
||||||
(GBaseInitFunc) NULL,
|
(GBaseInitFunc) NULL,
|
||||||
(GBaseFinalizeFunc) NULL,
|
(GBaseFinalizeFunc) NULL,
|
||||||
(GClassInitFunc) NULL,
|
(GClassInitFunc) gdk_drawable_class_init,
|
||||||
NULL, /* class_finalize */
|
NULL, /* class_finalize */
|
||||||
NULL, /* class_data */
|
NULL, /* class_data */
|
||||||
sizeof (GdkDrawable),
|
sizeof (GdkDrawable),
|
||||||
@ -56,6 +66,12 @@ gdk_drawable_get_type (void)
|
|||||||
return object_type;
|
return object_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gdk_drawable_class_init (GdkDrawableClass *klass)
|
||||||
|
{
|
||||||
|
klass->get_composite_drawable = gdk_drawable_real_get_composite_drawable;
|
||||||
|
}
|
||||||
|
|
||||||
/* Manipulation of drawables
|
/* Manipulation of drawables
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -323,6 +339,10 @@ gdk_draw_drawable (GdkDrawable *drawable,
|
|||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
|
GdkDrawable *composite;
|
||||||
|
gint composite_x_offset = 0;
|
||||||
|
gint composite_y_offset = 0;
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_DRAWABLE (drawable));
|
g_return_if_fail (GDK_IS_DRAWABLE (drawable));
|
||||||
g_return_if_fail (src != NULL);
|
g_return_if_fail (src != NULL);
|
||||||
g_return_if_fail (GDK_IS_GC (gc));
|
g_return_if_fail (GDK_IS_GC (gc));
|
||||||
@ -340,9 +360,22 @@ gdk_draw_drawable (GdkDrawable *drawable,
|
|||||||
height = real_height;
|
height = real_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable (drawable, gc, src,
|
|
||||||
xsrc, ysrc, xdest, ydest,
|
composite =
|
||||||
|
GDK_DRAWABLE_GET_CLASS (src)->get_composite_drawable (src,
|
||||||
|
xsrc, ysrc,
|
||||||
|
width, height,
|
||||||
|
&composite_x_offset,
|
||||||
|
&composite_y_offset);
|
||||||
|
|
||||||
|
|
||||||
|
GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable (drawable, gc, composite,
|
||||||
|
xsrc - composite_x_offset,
|
||||||
|
ysrc - composite_y_offset,
|
||||||
|
xdest, ydest,
|
||||||
width, height);
|
width, height);
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (composite));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -430,7 +463,6 @@ gdk_draw_glyphs (GdkDrawable *drawable,
|
|||||||
gint y,
|
gint y,
|
||||||
PangoGlyphString *glyphs)
|
PangoGlyphString *glyphs)
|
||||||
{
|
{
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_DRAWABLE (drawable));
|
g_return_if_fail (GDK_IS_DRAWABLE (drawable));
|
||||||
g_return_if_fail (GDK_IS_GC (gc));
|
g_return_if_fail (GDK_IS_GC (gc));
|
||||||
|
|
||||||
@ -439,3 +471,54 @@ gdk_draw_glyphs (GdkDrawable *drawable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GdkImage*
|
||||||
|
gdk_drawable_get_image (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height)
|
||||||
|
{
|
||||||
|
GdkDrawable *composite;
|
||||||
|
gint composite_x_offset = 0;
|
||||||
|
gint composite_y_offset = 0;
|
||||||
|
GdkImage *retval;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
|
||||||
|
g_return_val_if_fail (x >= 0, NULL);
|
||||||
|
g_return_val_if_fail (y >= 0, NULL);
|
||||||
|
g_return_val_if_fail (width >= 0, NULL);
|
||||||
|
g_return_val_if_fail (height >= 0, NULL);
|
||||||
|
|
||||||
|
composite =
|
||||||
|
GDK_DRAWABLE_GET_CLASS (drawable)->get_composite_drawable (drawable,
|
||||||
|
x, y,
|
||||||
|
width, height,
|
||||||
|
&composite_x_offset,
|
||||||
|
&composite_y_offset);
|
||||||
|
|
||||||
|
retval = GDK_DRAWABLE_GET_CLASS (composite)->get_image (composite,
|
||||||
|
x - composite_x_offset,
|
||||||
|
y - composite_y_offset,
|
||||||
|
width, height);
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (composite));
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GdkDrawable*
|
||||||
|
gdk_drawable_real_get_composite_drawable (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height,
|
||||||
|
gint *composite_x_offset,
|
||||||
|
gint *composite_y_offset)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL);
|
||||||
|
|
||||||
|
*composite_x_offset = 0;
|
||||||
|
*composite_y_offset = 0;
|
||||||
|
|
||||||
|
return GDK_DRAWABLE (g_object_ref (G_OBJECT (drawable)));
|
||||||
|
}
|
||||||
|
@ -113,6 +113,21 @@ struct _GdkDrawableClass
|
|||||||
|
|
||||||
GdkColormap* (*get_colormap) (GdkDrawable *drawable);
|
GdkColormap* (*get_colormap) (GdkDrawable *drawable);
|
||||||
GdkVisual* (*get_visual) (GdkDrawable *drawable);
|
GdkVisual* (*get_visual) (GdkDrawable *drawable);
|
||||||
|
|
||||||
|
GdkImage* (*get_image) (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height);
|
||||||
|
|
||||||
|
GdkDrawable* (*get_composite_drawable) (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height,
|
||||||
|
gint *composite_x_offset,
|
||||||
|
gint *composite_y_offset);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GType gdk_drawable_get_type (void);
|
GType gdk_drawable_get_type (void);
|
||||||
@ -239,6 +254,12 @@ void gdk_draw_layout (GdkDrawable *drawable,
|
|||||||
gint y,
|
gint y,
|
||||||
PangoLayout *layout);
|
PangoLayout *layout);
|
||||||
|
|
||||||
|
GdkImage* gdk_drawable_get_image (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
@ -43,3 +43,19 @@ gdk_image_unref (GdkImage *image)
|
|||||||
|
|
||||||
g_object_unref (G_OBJECT (image));
|
g_object_unref (G_OBJECT (image));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GdkImage*
|
||||||
|
gdk_image_get (GdkWindow *window,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GDK_IS_DRAWABLE (window), NULL);
|
||||||
|
g_return_val_if_fail (x >= 0, NULL);
|
||||||
|
g_return_val_if_fail (y >= 0, NULL);
|
||||||
|
g_return_val_if_fail (width >= 0, NULL);
|
||||||
|
g_return_val_if_fail (height >= 0, NULL);
|
||||||
|
|
||||||
|
return gdk_drawable_get_image (window, x, y, width, height);
|
||||||
|
}
|
||||||
|
@ -107,6 +107,13 @@ static void gdk_pixmap_real_get_size (GdkDrawable *drawable,
|
|||||||
gint *width,
|
gint *width,
|
||||||
gint *height);
|
gint *height);
|
||||||
|
|
||||||
|
static GdkImage* gdk_pixmap_get_image (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height);
|
||||||
|
|
||||||
|
|
||||||
static GdkVisual* gdk_pixmap_real_get_visual (GdkDrawable *drawable);
|
static GdkVisual* gdk_pixmap_real_get_visual (GdkDrawable *drawable);
|
||||||
static gint gdk_pixmap_real_get_depth (GdkDrawable *drawable);
|
static gint gdk_pixmap_real_get_depth (GdkDrawable *drawable);
|
||||||
static void gdk_pixmap_real_set_colormap (GdkDrawable *drawable,
|
static void gdk_pixmap_real_set_colormap (GdkDrawable *drawable,
|
||||||
@ -181,6 +188,7 @@ gdk_pixmap_class_init (GdkPixmapObjectClass *klass)
|
|||||||
drawable_class->set_colormap = gdk_pixmap_real_set_colormap;
|
drawable_class->set_colormap = gdk_pixmap_real_set_colormap;
|
||||||
drawable_class->get_colormap = gdk_pixmap_real_get_colormap;
|
drawable_class->get_colormap = gdk_pixmap_real_get_colormap;
|
||||||
drawable_class->get_visual = gdk_pixmap_real_get_visual;
|
drawable_class->get_visual = gdk_pixmap_real_get_visual;
|
||||||
|
drawable_class->get_image = gdk_pixmap_get_image;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -410,6 +418,19 @@ gdk_pixmap_real_get_colormap (GdkDrawable *drawable)
|
|||||||
return gdk_drawable_get_colormap (((GdkPixmapObject*)drawable)->impl);
|
return gdk_drawable_get_colormap (((GdkPixmapObject*)drawable)->impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkImage*
|
||||||
|
gdk_pixmap_get_image (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GDK_IS_PIXMAP (drawable), NULL);
|
||||||
|
|
||||||
|
return gdk_drawable_get_image (((GdkPixmapObject*)drawable)->impl,
|
||||||
|
x, y, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
#define PACKED_COLOR(c) ((((c)->red & 0xff) << 8) | ((c)->green & 0xff) | ((c)->blue >> 8))
|
#define PACKED_COLOR(c) ((((c)->red & 0xff) << 8) | ((c)->green & 0xff) | ((c)->blue >> 8))
|
||||||
|
|
||||||
static GdkPixmap *
|
static GdkPixmap *
|
||||||
|
221
gdk/gdkwindow.c
221
gdk/gdkwindow.c
@ -28,6 +28,8 @@
|
|||||||
#include "gdkinternals.h"
|
#include "gdkinternals.h"
|
||||||
#include "gdk.h" /* For gdk_rectangle_union() */
|
#include "gdk.h" /* For gdk_rectangle_union() */
|
||||||
#include "gdkpixmap.h"
|
#include "gdkpixmap.h"
|
||||||
|
#include "gdkdrawable.h"
|
||||||
|
#include "gdkpixmap.h"
|
||||||
|
|
||||||
#ifndef USE_BACKING_STORE
|
#ifndef USE_BACKING_STORE
|
||||||
#ifndef GDK_WINDOWING_WIN32
|
#ifndef GDK_WINDOWING_WIN32
|
||||||
@ -120,6 +122,12 @@ static void gdk_window_draw_image (GdkDrawable *drawable,
|
|||||||
gint width,
|
gint width,
|
||||||
gint height);
|
gint height);
|
||||||
|
|
||||||
|
static GdkImage* gdk_window_get_image (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height);
|
||||||
|
|
||||||
|
|
||||||
static void gdk_window_real_get_size (GdkDrawable *drawable,
|
static void gdk_window_real_get_size (GdkDrawable *drawable,
|
||||||
gint *width,
|
gint *width,
|
||||||
@ -130,7 +138,15 @@ static gint gdk_window_real_get_depth (GdkDrawable *drawable);
|
|||||||
static void gdk_window_real_set_colormap (GdkDrawable *drawable,
|
static void gdk_window_real_set_colormap (GdkDrawable *drawable,
|
||||||
GdkColormap *cmap);
|
GdkColormap *cmap);
|
||||||
static GdkColormap* gdk_window_real_get_colormap (GdkDrawable *drawable);
|
static GdkColormap* gdk_window_real_get_colormap (GdkDrawable *drawable);
|
||||||
|
|
||||||
|
static GdkDrawable* gdk_window_get_composite_drawable (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height,
|
||||||
|
gint *composite_x_offset,
|
||||||
|
gint *composite_y_offset);
|
||||||
|
|
||||||
static void gdk_window_free_paint_stack (GdkWindow *window);
|
static void gdk_window_free_paint_stack (GdkWindow *window);
|
||||||
|
|
||||||
static void gdk_window_init (GdkWindowObject *window);
|
static void gdk_window_init (GdkWindowObject *window);
|
||||||
@ -204,6 +220,8 @@ gdk_window_class_init (GdkWindowObjectClass *klass)
|
|||||||
drawable_class->set_colormap = gdk_window_real_set_colormap;
|
drawable_class->set_colormap = gdk_window_real_set_colormap;
|
||||||
drawable_class->get_colormap = gdk_window_real_get_colormap;
|
drawable_class->get_colormap = gdk_window_real_get_colormap;
|
||||||
drawable_class->get_visual = gdk_window_real_get_visual;
|
drawable_class->get_visual = gdk_window_real_get_visual;
|
||||||
|
drawable_class->get_image = gdk_window_get_image;
|
||||||
|
drawable_class->get_composite_drawable = gdk_window_get_composite_drawable;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -650,12 +668,20 @@ gdk_window_paint_init_bg (GdkWindow *window,
|
|||||||
GdkRegion *init_region)
|
GdkRegion *init_region)
|
||||||
{
|
{
|
||||||
GdkGC *tmp_gc;
|
GdkGC *tmp_gc;
|
||||||
|
|
||||||
tmp_gc = gdk_window_get_bg_gc (window, paint);
|
tmp_gc = gdk_window_get_bg_gc (window, paint);
|
||||||
|
|
||||||
|
gdk_region_offset (init_region,
|
||||||
|
- paint->x_offset,
|
||||||
|
- paint->y_offset);
|
||||||
|
gdk_gc_set_clip_region (tmp_gc, init_region);
|
||||||
|
|
||||||
gdk_draw_rectangle (paint->pixmap, tmp_gc, TRUE, 0, 0, -1, -1);
|
gdk_draw_rectangle (paint->pixmap, tmp_gc, TRUE, 0, 0, -1, -1);
|
||||||
gdk_gc_unref (tmp_gc);
|
gdk_gc_unref (tmp_gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include "x11/gdkx.h"
|
||||||
void
|
void
|
||||||
gdk_window_begin_paint_region (GdkWindow *window,
|
gdk_window_begin_paint_region (GdkWindow *window,
|
||||||
GdkRegion *region)
|
GdkRegion *region)
|
||||||
@ -697,11 +723,13 @@ gdk_window_begin_paint_region (GdkWindow *window,
|
|||||||
|
|
||||||
if (new_rect.width > old_rect.width || new_rect.height > old_rect.height)
|
if (new_rect.width > old_rect.width || new_rect.height > old_rect.height)
|
||||||
{
|
{
|
||||||
paint->pixmap = gdk_pixmap_new (window, new_rect.width, new_rect.height, -1);
|
paint->pixmap = gdk_pixmap_new (window,
|
||||||
|
new_rect.width, new_rect.height, -1);
|
||||||
tmp_gc = gdk_gc_new (paint->pixmap);
|
tmp_gc = gdk_gc_new (paint->pixmap);
|
||||||
gdk_draw_drawable (paint->pixmap, tmp_gc, tmp_paint->pixmap,
|
gdk_draw_drawable (paint->pixmap, tmp_gc, tmp_paint->pixmap,
|
||||||
0, 0, old_rect.width, old_rect.height,
|
0, 0,
|
||||||
old_rect.x - new_rect.x, old_rect.y - new_rect.y);
|
old_rect.x - new_rect.x, old_rect.y - new_rect.y,
|
||||||
|
old_rect.width, old_rect.height);
|
||||||
gdk_gc_unref (tmp_gc);
|
gdk_gc_unref (tmp_gc);
|
||||||
gdk_drawable_unref (tmp_paint->pixmap);
|
gdk_drawable_unref (tmp_paint->pixmap);
|
||||||
|
|
||||||
@ -711,13 +739,13 @@ gdk_window_begin_paint_region (GdkWindow *window,
|
|||||||
tmp_list = private->paint_stack;
|
tmp_list = private->paint_stack;
|
||||||
while (tmp_list)
|
while (tmp_list)
|
||||||
{
|
{
|
||||||
tmp_paint = private->paint_stack->data;
|
tmp_paint = tmp_list->data;
|
||||||
gdk_region_subtract (init_region, tmp_paint->region);
|
gdk_region_subtract (init_region, tmp_paint->region);
|
||||||
|
|
||||||
tmp_paint->pixmap = paint->pixmap;
|
tmp_paint->pixmap = paint->pixmap;
|
||||||
tmp_paint->x_offset = paint->x_offset;
|
tmp_paint->x_offset = paint->x_offset;
|
||||||
tmp_paint->y_offset = paint->x_offset;
|
tmp_paint->y_offset = paint->y_offset;
|
||||||
|
|
||||||
tmp_list = tmp_list->next;
|
tmp_list = tmp_list->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -730,7 +758,7 @@ gdk_window_begin_paint_region (GdkWindow *window,
|
|||||||
tmp_list = private->paint_stack;
|
tmp_list = private->paint_stack;
|
||||||
while (tmp_list)
|
while (tmp_list)
|
||||||
{
|
{
|
||||||
tmp_paint = private->paint_stack->data;
|
tmp_paint = tmp_list->data;
|
||||||
gdk_region_subtract (init_region, tmp_paint->region);
|
gdk_region_subtract (init_region, tmp_paint->region);
|
||||||
|
|
||||||
tmp_list = tmp_list->next;
|
tmp_list = tmp_list->next;
|
||||||
@ -746,6 +774,7 @@ gdk_window_begin_paint_region (GdkWindow *window,
|
|||||||
|
|
||||||
if (!gdk_region_empty (init_region))
|
if (!gdk_region_empty (init_region))
|
||||||
gdk_window_paint_init_bg (window, paint, init_region);
|
gdk_window_paint_init_bg (window, paint, init_region);
|
||||||
|
|
||||||
gdk_region_destroy (init_region);
|
gdk_region_destroy (init_region);
|
||||||
|
|
||||||
private->paint_stack = g_slist_prepend (private->paint_stack, paint);
|
private->paint_stack = g_slist_prepend (private->paint_stack, paint);
|
||||||
@ -796,7 +825,7 @@ gdk_window_end_paint (GdkWindow *window)
|
|||||||
{
|
{
|
||||||
GdkWindowPaint *tmp_paint = tmp_list->data;
|
GdkWindowPaint *tmp_paint = tmp_list->data;
|
||||||
gdk_region_subtract (tmp_paint->region, paint->region);
|
gdk_region_subtract (tmp_paint->region, paint->region);
|
||||||
|
|
||||||
tmp_list = tmp_list->next;
|
tmp_list = tmp_list->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1048,6 +1077,138 @@ gdk_window_draw_text_wc (GdkDrawable *drawable,
|
|||||||
RESTORE_GC (gc);
|
RESTORE_GC (gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkDrawable*
|
||||||
|
gdk_window_get_composite_drawable (GdkDrawable *window,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height,
|
||||||
|
gint *composite_x_offset,
|
||||||
|
gint *composite_y_offset)
|
||||||
|
{
|
||||||
|
GdkWindowObject *private = (GdkWindowObject *)window;
|
||||||
|
GdkWindowPaint *paint;
|
||||||
|
GdkRegion *buffered_region;
|
||||||
|
GSList *tmp_list;
|
||||||
|
GdkPixmap *buffer;
|
||||||
|
GdkPixmap *tmp_pixmap;
|
||||||
|
GdkRectangle rect;
|
||||||
|
GdkRegion *rect_region;
|
||||||
|
GdkGC *tmp_gc;
|
||||||
|
gint windowing_x_offset, windowing_y_offset;
|
||||||
|
gint buffer_x_offset, buffer_y_offset;
|
||||||
|
|
||||||
|
if (GDK_WINDOW_DESTROYED (window) || private->paint_stack == NULL)
|
||||||
|
{
|
||||||
|
/* No backing store */
|
||||||
|
_gdk_windowing_window_get_offsets (window,
|
||||||
|
composite_x_offset,
|
||||||
|
composite_y_offset);
|
||||||
|
|
||||||
|
return GDK_DRAWABLE (g_object_ref (G_OBJECT (window)));
|
||||||
|
}
|
||||||
|
|
||||||
|
buffered_region = NULL;
|
||||||
|
buffer = NULL;
|
||||||
|
|
||||||
|
/* All GtkWindowPaint structs have the same pixmap and offsets, just
|
||||||
|
* get the first one. (should probably be cleaned up so that the
|
||||||
|
* pixmap is stored in the window)
|
||||||
|
*/
|
||||||
|
paint = private->paint_stack->data;
|
||||||
|
buffer = paint->pixmap;
|
||||||
|
buffer_x_offset = paint->x_offset;
|
||||||
|
buffer_y_offset = paint->y_offset;
|
||||||
|
|
||||||
|
tmp_list = private->paint_stack;
|
||||||
|
while (tmp_list != NULL)
|
||||||
|
{
|
||||||
|
paint = tmp_list->data;
|
||||||
|
|
||||||
|
if (buffered_region == NULL)
|
||||||
|
buffered_region = gdk_region_copy (paint->region);
|
||||||
|
else
|
||||||
|
gdk_region_union (buffered_region, paint->region);
|
||||||
|
|
||||||
|
tmp_list = g_slist_next (tmp_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* See if the buffered part is overlapping the part we want
|
||||||
|
* to get
|
||||||
|
*/
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = width;
|
||||||
|
rect.height = height;
|
||||||
|
|
||||||
|
rect_region = gdk_region_rectangle (&rect);
|
||||||
|
|
||||||
|
gdk_region_intersect (buffered_region, rect_region);
|
||||||
|
|
||||||
|
gdk_region_destroy (rect_region);
|
||||||
|
|
||||||
|
if (gdk_region_empty (buffered_region))
|
||||||
|
{
|
||||||
|
gdk_region_destroy (buffered_region);
|
||||||
|
|
||||||
|
_gdk_windowing_window_get_offsets (window,
|
||||||
|
composite_x_offset,
|
||||||
|
composite_y_offset);
|
||||||
|
|
||||||
|
return GDK_DRAWABLE (g_object_ref (G_OBJECT (window)));
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp_pixmap = gdk_pixmap_new (window,
|
||||||
|
width, height,
|
||||||
|
-1);
|
||||||
|
|
||||||
|
tmp_gc = gdk_gc_new (tmp_pixmap);
|
||||||
|
|
||||||
|
_gdk_windowing_window_get_offsets (window,
|
||||||
|
&windowing_x_offset,
|
||||||
|
&windowing_y_offset);
|
||||||
|
|
||||||
|
/* Copy the current window contents */
|
||||||
|
gdk_draw_drawable (tmp_pixmap,
|
||||||
|
tmp_gc,
|
||||||
|
private->impl,
|
||||||
|
x - windowing_x_offset,
|
||||||
|
y - windowing_y_offset,
|
||||||
|
0, 0,
|
||||||
|
width, height);
|
||||||
|
|
||||||
|
/* Make buffered_region relative to the tmp_pixmap */
|
||||||
|
gdk_region_offset (buffered_region,
|
||||||
|
- x,
|
||||||
|
- y);
|
||||||
|
|
||||||
|
/* Set the clip mask to avoid drawing over non-buffered areas of
|
||||||
|
* tmp_pixmap.
|
||||||
|
*/
|
||||||
|
|
||||||
|
gdk_gc_set_clip_region (tmp_gc, buffered_region);
|
||||||
|
gdk_region_destroy (buffered_region);
|
||||||
|
|
||||||
|
/* Draw backing pixmap onto the tmp_pixmap, offsetting
|
||||||
|
* appropriately.
|
||||||
|
*/
|
||||||
|
gdk_draw_drawable (tmp_pixmap,
|
||||||
|
tmp_gc,
|
||||||
|
buffer,
|
||||||
|
x - buffer_x_offset,
|
||||||
|
y - buffer_y_offset,
|
||||||
|
0, 0,
|
||||||
|
width, height);
|
||||||
|
|
||||||
|
/* Set these to location of tmp_pixmap within the window */
|
||||||
|
*composite_x_offset = x;
|
||||||
|
*composite_y_offset = y;
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (tmp_gc));
|
||||||
|
|
||||||
|
return tmp_pixmap;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_window_draw_drawable (GdkDrawable *drawable,
|
gdk_window_draw_drawable (GdkDrawable *drawable,
|
||||||
GdkGC *gc,
|
GdkGC *gc,
|
||||||
@ -1061,21 +1222,25 @@ gdk_window_draw_drawable (GdkDrawable *drawable,
|
|||||||
{
|
{
|
||||||
GdkWindowObject *private = (GdkWindowObject *)drawable;
|
GdkWindowObject *private = (GdkWindowObject *)drawable;
|
||||||
OFFSET_GC (gc);
|
OFFSET_GC (gc);
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (drawable))
|
if (GDK_WINDOW_DESTROYED (drawable))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* If we have a backing pixmap draw to that */
|
||||||
if (private->paint_stack)
|
if (private->paint_stack)
|
||||||
{
|
{
|
||||||
GdkWindowPaint *paint = private->paint_stack->data;
|
GdkWindowPaint *paint = private->paint_stack->data;
|
||||||
gdk_draw_drawable (paint->pixmap, gc, src, xsrc, ysrc,
|
gdk_draw_drawable (paint->pixmap, gc,
|
||||||
|
src, xsrc, ysrc,
|
||||||
xdest - x_offset, ydest - y_offset, width, height);
|
xdest - x_offset, ydest - y_offset, width, height);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gdk_draw_drawable (private->impl, gc, src, xsrc, ysrc,
|
gdk_draw_drawable (private->impl, gc,
|
||||||
|
src, xsrc, ysrc,
|
||||||
xdest - x_offset, ydest - y_offset,
|
xdest - x_offset, ydest - y_offset,
|
||||||
width, height);
|
width, height);
|
||||||
|
|
||||||
RESTORE_GC (gc);
|
RESTORE_GC (gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1403,6 +1568,32 @@ gdk_window_real_get_colormap (GdkDrawable *drawable)
|
|||||||
|
|
||||||
return gdk_drawable_get_colormap (((GdkWindowObject*)drawable)->impl);
|
return gdk_drawable_get_colormap (((GdkWindowObject*)drawable)->impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkImage*
|
||||||
|
gdk_window_get_image (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height)
|
||||||
|
{
|
||||||
|
gint x_offset, y_offset;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GDK_IS_WINDOW (drawable), NULL);
|
||||||
|
|
||||||
|
if (GDK_WINDOW_DESTROYED (drawable))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* If we're here, a composite image was not necessary, so
|
||||||
|
* we can ignore the paint stack.
|
||||||
|
*/
|
||||||
|
|
||||||
|
_gdk_windowing_window_get_offsets (drawable, &x_offset, &y_offset);
|
||||||
|
|
||||||
|
return gdk_drawable_get_image (((GdkWindowObject*)drawable)->impl,
|
||||||
|
x - x_offset,
|
||||||
|
y - y_offset,
|
||||||
|
width, height);
|
||||||
|
}
|
||||||
|
|
||||||
/* Code for dirty-region queueing
|
/* Code for dirty-region queueing
|
||||||
*/
|
*/
|
||||||
|
@ -121,6 +121,8 @@ static GdkColormap* gdk_x11_get_colormap (GdkDrawable *drawable);
|
|||||||
|
|
||||||
static gint gdk_x11_get_depth (GdkDrawable *drawable);
|
static gint gdk_x11_get_depth (GdkDrawable *drawable);
|
||||||
|
|
||||||
|
static GdkVisual* gdk_x11_get_visual (GdkDrawable *drawable);
|
||||||
|
|
||||||
static void gdk_drawable_impl_x11_class_init (GdkDrawableImplX11Class *klass);
|
static void gdk_drawable_impl_x11_class_init (GdkDrawableImplX11Class *klass);
|
||||||
|
|
||||||
static gpointer parent_class = NULL;
|
static gpointer parent_class = NULL;
|
||||||
@ -177,6 +179,9 @@ gdk_drawable_impl_x11_class_init (GdkDrawableImplX11Class *klass)
|
|||||||
drawable_class->get_colormap = gdk_x11_get_colormap;
|
drawable_class->get_colormap = gdk_x11_get_colormap;
|
||||||
|
|
||||||
drawable_class->get_depth = gdk_x11_get_depth;
|
drawable_class->get_depth = gdk_x11_get_depth;
|
||||||
|
drawable_class->get_visual = gdk_x11_get_visual;
|
||||||
|
|
||||||
|
drawable_class->get_image = _gdk_x11_get_image;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
@ -412,13 +417,19 @@ gdk_x11_draw_drawable (GdkDrawable *drawable,
|
|||||||
int src_depth = gdk_drawable_get_depth (src);
|
int src_depth = gdk_drawable_get_depth (src);
|
||||||
int dest_depth = gdk_drawable_get_depth (drawable);
|
int dest_depth = gdk_drawable_get_depth (drawable);
|
||||||
GdkDrawableImplX11 *impl;
|
GdkDrawableImplX11 *impl;
|
||||||
|
GdkDrawableImplX11 *src_impl;
|
||||||
|
|
||||||
impl = GDK_DRAWABLE_IMPL_X11 (drawable);
|
impl = GDK_DRAWABLE_IMPL_X11 (drawable);
|
||||||
|
|
||||||
|
if (GDK_IS_DRAWABLE_IMPL_X11 (src))
|
||||||
|
src_impl = GDK_DRAWABLE_IMPL_X11 (src);
|
||||||
|
else
|
||||||
|
src_impl = NULL;
|
||||||
|
|
||||||
if (src_depth == 1)
|
if (src_depth == 1)
|
||||||
{
|
{
|
||||||
XCopyArea (impl->xdisplay,
|
XCopyArea (impl->xdisplay,
|
||||||
GDK_DRAWABLE_XID (src),
|
src_impl ? src_impl->xid : GDK_DRAWABLE_XID (src),
|
||||||
impl->xid,
|
impl->xid,
|
||||||
GDK_GC_GET_XGC (gc),
|
GDK_GC_GET_XGC (gc),
|
||||||
xsrc, ysrc,
|
xsrc, ysrc,
|
||||||
@ -428,7 +439,7 @@ gdk_x11_draw_drawable (GdkDrawable *drawable,
|
|||||||
else if (dest_depth != 0 && src_depth == dest_depth)
|
else if (dest_depth != 0 && src_depth == dest_depth)
|
||||||
{
|
{
|
||||||
XCopyArea (impl->xdisplay,
|
XCopyArea (impl->xdisplay,
|
||||||
GDK_DRAWABLE_XID (src),
|
src_impl ? src_impl->xid : GDK_DRAWABLE_XID (src),
|
||||||
impl->xid,
|
impl->xid,
|
||||||
GDK_GC_GET_XGC (gc),
|
GDK_GC_GET_XGC (gc),
|
||||||
xsrc, ysrc,
|
xsrc, ysrc,
|
||||||
@ -436,7 +447,8 @@ gdk_x11_draw_drawable (GdkDrawable *drawable,
|
|||||||
xdest, ydest);
|
xdest, ydest);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
g_warning ("Attempt to copy between drawables of mismatched depths!\n");
|
g_warning ("Attempt to draw a drawable with depth %d to a drawable with depth %d",
|
||||||
|
src_depth, dest_depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -603,3 +615,8 @@ gdk_x11_get_depth (GdkDrawable *drawable)
|
|||||||
return gdk_drawable_get_depth (GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper);
|
return gdk_drawable_get_depth (GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkVisual*
|
||||||
|
gdk_x11_get_visual (GdkDrawable *drawable)
|
||||||
|
{
|
||||||
|
return gdk_drawable_get_visual (GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper);
|
||||||
|
}
|
||||||
|
@ -650,7 +650,7 @@ gdk_gc_set_clip_rectangle (GdkGC *gc,
|
|||||||
gc->clip_y_origin = 0;
|
gc->clip_y_origin = 0;
|
||||||
|
|
||||||
x11_gc->dirty_mask |= GDK_GC_DIRTY_CLIP;
|
x11_gc->dirty_mask |= GDK_GC_DIRTY_CLIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gdk_gc_set_clip_region (GdkGC *gc,
|
gdk_gc_set_clip_region (GdkGC *gc,
|
||||||
|
@ -371,31 +371,44 @@ gdk_image_new (GdkImageType type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
GdkImage*
|
GdkImage*
|
||||||
gdk_image_get (GdkWindow *window,
|
_gdk_x11_get_image (GdkDrawable *drawable,
|
||||||
gint x,
|
gint x,
|
||||||
gint y,
|
gint y,
|
||||||
gint width,
|
gint width,
|
||||||
gint height)
|
gint height)
|
||||||
{
|
{
|
||||||
GdkImage *image;
|
GdkImage *image;
|
||||||
GdkImagePrivateX11 *private;
|
GdkImagePrivateX11 *private;
|
||||||
|
GdkDrawableImplX11 *impl;
|
||||||
|
GdkVisual *visual;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GDK_IS_DRAWABLE_IMPL_X11 (drawable), NULL);
|
||||||
|
|
||||||
g_return_val_if_fail (GDK_IS_DRAWABLE (window), NULL);
|
visual = gdk_drawable_get_visual (drawable);
|
||||||
|
|
||||||
if (GDK_IS_WINDOW (window) && GDK_WINDOW_DESTROYED (window))
|
if (visual == NULL)
|
||||||
return NULL;
|
{
|
||||||
|
g_warning ("To get the image from a drawable, the drawable "
|
||||||
|
"must have a visual and colormap; calling "
|
||||||
|
"gtk_drawable_set_colormap() on a drawable "
|
||||||
|
"created without a colormap should solve this problem");
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl = GDK_DRAWABLE_IMPL_X11 (drawable);
|
||||||
|
|
||||||
image = g_object_new (gdk_image_get_type (), NULL);
|
image = g_object_new (gdk_image_get_type (), NULL);
|
||||||
private = PRIVATE_DATA (image);
|
private = PRIVATE_DATA (image);
|
||||||
|
|
||||||
private->xdisplay = gdk_display;
|
private->xdisplay = gdk_display;
|
||||||
private->ximage = XGetImage (private->xdisplay,
|
private->ximage = XGetImage (private->xdisplay,
|
||||||
GDK_DRAWABLE_XID (window),
|
impl->xid,
|
||||||
x, y, width, height,
|
x, y, width, height,
|
||||||
AllPlanes, ZPixmap);
|
AllPlanes, ZPixmap);
|
||||||
|
|
||||||
image->type = GDK_IMAGE_NORMAL;
|
image->type = GDK_IMAGE_NORMAL;
|
||||||
image->visual = gdk_window_get_visual (window);
|
image->visual = visual;
|
||||||
image->width = width;
|
image->width = width;
|
||||||
image->height = height;
|
image->height = height;
|
||||||
image->depth = private->ximage->depth;
|
image->depth = private->ximage->depth;
|
||||||
|
@ -149,6 +149,7 @@ gdk_pixmap_new (GdkWindow *window,
|
|||||||
GdkPixmap *pixmap;
|
GdkPixmap *pixmap;
|
||||||
GdkDrawableImplX11 *draw_impl;
|
GdkDrawableImplX11 *draw_impl;
|
||||||
GdkPixmapImplX11 *pix_impl;
|
GdkPixmapImplX11 *pix_impl;
|
||||||
|
GdkColormap *cmap;
|
||||||
|
|
||||||
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
|
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
|
||||||
g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
|
g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
|
||||||
@ -177,9 +178,16 @@ gdk_pixmap_new (GdkWindow *window,
|
|||||||
pix_impl->width = width;
|
pix_impl->width = width;
|
||||||
pix_impl->height = height;
|
pix_impl->height = height;
|
||||||
GDK_PIXMAP_OBJECT (pixmap)->depth = depth;
|
GDK_PIXMAP_OBJECT (pixmap)->depth = depth;
|
||||||
|
|
||||||
|
if (window)
|
||||||
|
{
|
||||||
|
cmap = gdk_drawable_get_colormap (window);
|
||||||
|
if (cmap)
|
||||||
|
gdk_drawable_set_colormap (pixmap, cmap);
|
||||||
|
}
|
||||||
|
|
||||||
gdk_xid_table_insert (&GDK_PIXMAP_XID (pixmap), pixmap);
|
gdk_xid_table_insert (&GDK_PIXMAP_XID (pixmap), pixmap);
|
||||||
|
|
||||||
return pixmap;
|
return pixmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +49,12 @@ GdkVisual * gdk_visual_lookup (Visual *xvisual);
|
|||||||
|
|
||||||
void gdk_window_add_colormap_windows (GdkWindow *window);
|
void gdk_window_add_colormap_windows (GdkWindow *window);
|
||||||
|
|
||||||
|
GdkImage* _gdk_x11_get_image (GdkDrawable *drawable,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
gint width,
|
||||||
|
gint height);
|
||||||
|
|
||||||
/* Please see gdkwindow.c for comments on how to use */
|
/* Please see gdkwindow.c for comments on how to use */
|
||||||
Window gdk_window_xid_at (Window base,
|
Window gdk_window_xid_at (Window base,
|
||||||
gint bx,
|
gint bx,
|
||||||
|
@ -267,7 +267,7 @@ gtk_tree_store_get_node (GtkTreeModel *tree_model,
|
|||||||
indices[i]);
|
indices[i]);
|
||||||
if (node == NULL)
|
if (node == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
};
|
}
|
||||||
return (GtkTreeNode) node;
|
return (GtkTreeNode) node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
318
gtk/testgtk.c
318
gtk/testgtk.c
@ -1670,6 +1670,323 @@ create_handle_box (void)
|
|||||||
gtk_widget_destroy (window);
|
gtk_widget_destroy (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test for getting an image from a drawable
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct GetImageData
|
||||||
|
{
|
||||||
|
GtkWidget *src;
|
||||||
|
GtkWidget *snap;
|
||||||
|
GtkWidget *sw;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
take_snapshot (GtkWidget *button,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
struct GetImageData *gid = data;
|
||||||
|
GdkRectangle visible;
|
||||||
|
int width_fraction;
|
||||||
|
int height_fraction;
|
||||||
|
GdkGC *gc;
|
||||||
|
GdkGC *black_gc;
|
||||||
|
GdkColor color = { 0, 30000, 0, 0 };
|
||||||
|
GdkRectangle target;
|
||||||
|
GdkImage *shot;
|
||||||
|
|
||||||
|
/* Do some begin_paint_rect on some random rects, draw some
|
||||||
|
* distinctive stuff into those rects, then take the snapshot.
|
||||||
|
* figure out whether any rects were overlapped and report to
|
||||||
|
* user.
|
||||||
|
*/
|
||||||
|
|
||||||
|
visible = gid->sw->allocation;
|
||||||
|
|
||||||
|
visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
|
||||||
|
visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
|
||||||
|
|
||||||
|
width_fraction = visible.width / 4;
|
||||||
|
height_fraction = visible.height / 4;
|
||||||
|
|
||||||
|
gc = gdk_gc_new (gid->src->window);
|
||||||
|
black_gc = gid->src->style->black_gc;
|
||||||
|
|
||||||
|
gdk_gc_set_rgb_fg_color (gc, &color);
|
||||||
|
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction;
|
||||||
|
target.y = visible.y + height_fraction * 3;
|
||||||
|
target.width = width_fraction;
|
||||||
|
target.height = height_fraction / 2;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction;
|
||||||
|
target.y = visible.y + height_fraction;
|
||||||
|
target.width = width_fraction;
|
||||||
|
target.height = height_fraction;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction * 3;
|
||||||
|
target.y = visible.y + height_fraction;
|
||||||
|
target.width = width_fraction / 2;
|
||||||
|
target.height = height_fraction;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction * 2;
|
||||||
|
target.y = visible.y + height_fraction * 2;
|
||||||
|
target.width = width_fraction / 4;
|
||||||
|
target.height = height_fraction / 4;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
target.x += target.width / 2;
|
||||||
|
target.y += target.width / 2;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
/* Screen shot area */
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction * 1.5;
|
||||||
|
target.y = visible.y + height_fraction * 1.5;
|
||||||
|
target.width = width_fraction * 2;
|
||||||
|
target.height = height_fraction * 2;
|
||||||
|
|
||||||
|
shot = gdk_drawable_get_image (gid->src->window,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gtk_image_set_from_image (GTK_IMAGE (gid->snap),
|
||||||
|
shot, NULL);
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (shot));
|
||||||
|
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gid->src->style->black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (gc));
|
||||||
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
image_source_expose (GtkWidget *da,
|
||||||
|
GdkEventExpose *event,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
int x = event->area.x;
|
||||||
|
GdkColor red = { 0, 65535, 0, 0 };
|
||||||
|
GdkColor green = { 0, 0, 65535, 0 };
|
||||||
|
GdkColor blue = { 0, 0, 0, 65535 };
|
||||||
|
GdkGC *gc;
|
||||||
|
|
||||||
|
gc = gdk_gc_new (event->window);
|
||||||
|
|
||||||
|
while (x < (event->area.x + event->area.width))
|
||||||
|
{
|
||||||
|
switch (x % 7)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
gdk_gc_set_rgb_fg_color (gc, &red);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
case 5:
|
||||||
|
gdk_gc_set_rgb_fg_color (gc, &green);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
case 7:
|
||||||
|
case 8:
|
||||||
|
gdk_gc_set_rgb_fg_color (gc, &blue);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gdk_draw_line (event->window,
|
||||||
|
gc,
|
||||||
|
x, event->area.y,
|
||||||
|
x, event->area.y + event->area.height);
|
||||||
|
|
||||||
|
++x;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (gc));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
create_get_image (void)
|
||||||
|
{
|
||||||
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
|
if (!window)
|
||||||
|
{
|
||||||
|
GtkWidget *sw;
|
||||||
|
GtkWidget *src;
|
||||||
|
GtkWidget *snap;
|
||||||
|
GtkWidget *vbox;
|
||||||
|
GtkWidget *hbox;
|
||||||
|
GtkWidget *button;
|
||||||
|
struct GetImageData *gid;
|
||||||
|
|
||||||
|
gid = g_new (struct GetImageData, 1);
|
||||||
|
|
||||||
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (window),
|
||||||
|
"destroy",
|
||||||
|
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
|
||||||
|
&window);
|
||||||
|
|
||||||
|
gtk_object_set_data_full (GTK_OBJECT (window),
|
||||||
|
"testgtk-get-image-data",
|
||||||
|
gid,
|
||||||
|
g_free);
|
||||||
|
|
||||||
|
vbox = gtk_vbox_new (FALSE, 0);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||||
|
|
||||||
|
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||||
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||||
|
GTK_POLICY_AUTOMATIC,
|
||||||
|
GTK_POLICY_AUTOMATIC);
|
||||||
|
|
||||||
|
gid->sw = sw;
|
||||||
|
|
||||||
|
gtk_widget_set_usize (sw, 400, 400);
|
||||||
|
|
||||||
|
src = gtk_drawing_area_new ();
|
||||||
|
gtk_widget_set_usize (src, 10000, 10000);
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (src),
|
||||||
|
"expose_event",
|
||||||
|
GTK_SIGNAL_FUNC (image_source_expose),
|
||||||
|
gid);
|
||||||
|
|
||||||
|
gid->src = src;
|
||||||
|
|
||||||
|
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
|
||||||
|
src);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (vbox),
|
||||||
|
sw, TRUE, TRUE, 0);
|
||||||
|
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new (FALSE, 3);
|
||||||
|
|
||||||
|
snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
|
||||||
|
|
||||||
|
gid->snap = snap;
|
||||||
|
|
||||||
|
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||||
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||||
|
GTK_POLICY_AUTOMATIC,
|
||||||
|
GTK_POLICY_AUTOMATIC);
|
||||||
|
gtk_widget_set_usize (sw, 300, 300);
|
||||||
|
|
||||||
|
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
|
||||||
|
|
||||||
|
gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
|
||||||
|
|
||||||
|
button = gtk_button_new_with_label ("Get image from drawable");
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (button),
|
||||||
|
"clicked",
|
||||||
|
GTK_SIGNAL_FUNC (take_snapshot),
|
||||||
|
gid);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||||
|
|
||||||
|
gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||||
|
|
||||||
|
gtk_widget_show_all (window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Label Demo
|
* Label Demo
|
||||||
*/
|
*/
|
||||||
@ -8738,6 +9055,7 @@ create_main_window (void)
|
|||||||
{ "font selection", create_font_selection },
|
{ "font selection", create_font_selection },
|
||||||
{ "gamma curve", create_gamma_curve },
|
{ "gamma curve", create_gamma_curve },
|
||||||
{ "handle box", create_handle_box },
|
{ "handle box", create_handle_box },
|
||||||
|
{ "image from drawable", create_get_image },
|
||||||
{ "image", create_image },
|
{ "image", create_image },
|
||||||
{ "item factory", create_item_factory },
|
{ "item factory", create_item_factory },
|
||||||
{ "labels", create_labels },
|
{ "labels", create_labels },
|
||||||
|
@ -954,14 +954,13 @@ do_search (gpointer callback_data,
|
|||||||
GtkWidget *search_text;
|
GtkWidget *search_text;
|
||||||
GtkTextBuffer *buffer;
|
GtkTextBuffer *buffer;
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
dialog = gtk_dialog_new_with_buttons ("Search",
|
dialog = gtk_dialog_new_with_buttons ("Search",
|
||||||
GTK_WINDOW (view->window),
|
GTK_WINDOW (view->window),
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_STOCK_BUTTON_CLOSE,
|
GTK_STOCK_BUTTON_CLOSE,
|
||||||
GTK_RESPONSE_NONE, NULL);
|
GTK_RESPONSE_NONE, NULL);
|
||||||
|
|
||||||
|
|
||||||
buffer = gtk_text_buffer_new (NULL);
|
buffer = gtk_text_buffer_new (NULL);
|
||||||
|
|
||||||
/* FIXME memory leak once buffer is a GObject */
|
/* FIXME memory leak once buffer is a GObject */
|
||||||
@ -983,7 +982,6 @@ do_search (gpointer callback_data,
|
|||||||
gtk_widget_grab_focus (search_text);
|
gtk_widget_grab_focus (search_text);
|
||||||
|
|
||||||
gtk_widget_show_all (dialog);
|
gtk_widget_show_all (dialog);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1300,6 +1298,7 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
GtkTextIter iter;
|
GtkTextIter iter;
|
||||||
GtkTextIter start, end;
|
GtkTextIter start, end;
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* remove tag from whole buffer */
|
/* remove tag from whole buffer */
|
||||||
gtk_text_buffer_get_bounds (buffer->buffer, &start, &end);
|
gtk_text_buffer_get_bounds (buffer->buffer, &start, &end);
|
||||||
@ -1310,7 +1309,7 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
gtk_text_buffer_get_mark (buffer->buffer,
|
gtk_text_buffer_get_mark (buffer->buffer,
|
||||||
"insert"));
|
"insert"));
|
||||||
|
|
||||||
|
i = 0;
|
||||||
if (*str != '\0')
|
if (*str != '\0')
|
||||||
{
|
{
|
||||||
GtkTextIter match_start, match_end;
|
GtkTextIter match_start, match_end;
|
||||||
@ -1318,6 +1317,7 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
while (gtk_text_iter_forward_search (&iter, str, TRUE, FALSE,
|
while (gtk_text_iter_forward_search (&iter, str, TRUE, FALSE,
|
||||||
&match_start, &match_end))
|
&match_start, &match_end))
|
||||||
{
|
{
|
||||||
|
++i;
|
||||||
gtk_text_buffer_apply_tag (buffer->buffer, buffer->found_text_tag,
|
gtk_text_buffer_apply_tag (buffer->buffer, buffer->found_text_tag,
|
||||||
&match_start, &match_end);
|
&match_start, &match_end);
|
||||||
|
|
||||||
@ -1325,7 +1325,6 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
dialog = gtk_message_dialog_new (GTK_WINDOW (view->window),
|
dialog = gtk_message_dialog_new (GTK_WINDOW (view->window),
|
||||||
GTK_MESSAGE_INFO,
|
GTK_MESSAGE_INFO,
|
||||||
GTK_BUTTONS_OK,
|
GTK_BUTTONS_OK,
|
||||||
@ -1339,7 +1338,6 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
GTK_OBJECT (dialog));
|
GTK_OBJECT (dialog));
|
||||||
|
|
||||||
gtk_widget_show (dialog);
|
gtk_widget_show (dialog);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
318
tests/testgtk.c
318
tests/testgtk.c
@ -1670,6 +1670,323 @@ create_handle_box (void)
|
|||||||
gtk_widget_destroy (window);
|
gtk_widget_destroy (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test for getting an image from a drawable
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct GetImageData
|
||||||
|
{
|
||||||
|
GtkWidget *src;
|
||||||
|
GtkWidget *snap;
|
||||||
|
GtkWidget *sw;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
take_snapshot (GtkWidget *button,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
struct GetImageData *gid = data;
|
||||||
|
GdkRectangle visible;
|
||||||
|
int width_fraction;
|
||||||
|
int height_fraction;
|
||||||
|
GdkGC *gc;
|
||||||
|
GdkGC *black_gc;
|
||||||
|
GdkColor color = { 0, 30000, 0, 0 };
|
||||||
|
GdkRectangle target;
|
||||||
|
GdkImage *shot;
|
||||||
|
|
||||||
|
/* Do some begin_paint_rect on some random rects, draw some
|
||||||
|
* distinctive stuff into those rects, then take the snapshot.
|
||||||
|
* figure out whether any rects were overlapped and report to
|
||||||
|
* user.
|
||||||
|
*/
|
||||||
|
|
||||||
|
visible = gid->sw->allocation;
|
||||||
|
|
||||||
|
visible.x = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
|
||||||
|
visible.y = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (gid->sw))->value;
|
||||||
|
|
||||||
|
width_fraction = visible.width / 4;
|
||||||
|
height_fraction = visible.height / 4;
|
||||||
|
|
||||||
|
gc = gdk_gc_new (gid->src->window);
|
||||||
|
black_gc = gid->src->style->black_gc;
|
||||||
|
|
||||||
|
gdk_gc_set_rgb_fg_color (gc, &color);
|
||||||
|
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction;
|
||||||
|
target.y = visible.y + height_fraction * 3;
|
||||||
|
target.width = width_fraction;
|
||||||
|
target.height = height_fraction / 2;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction;
|
||||||
|
target.y = visible.y + height_fraction;
|
||||||
|
target.width = width_fraction;
|
||||||
|
target.height = height_fraction;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction * 3;
|
||||||
|
target.y = visible.y + height_fraction;
|
||||||
|
target.width = width_fraction / 2;
|
||||||
|
target.height = height_fraction;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction * 2;
|
||||||
|
target.y = visible.y + height_fraction * 2;
|
||||||
|
target.width = width_fraction / 4;
|
||||||
|
target.height = height_fraction / 4;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
target.x += target.width / 2;
|
||||||
|
target.y += target.width / 2;
|
||||||
|
|
||||||
|
gdk_window_begin_paint_rect (gid->src->window,
|
||||||
|
&target);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gc,
|
||||||
|
TRUE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x + 10, target.y + 10,
|
||||||
|
target.width - 20, target.height - 20);
|
||||||
|
|
||||||
|
/* Screen shot area */
|
||||||
|
|
||||||
|
target.x = visible.x + width_fraction * 1.5;
|
||||||
|
target.y = visible.y + height_fraction * 1.5;
|
||||||
|
target.width = width_fraction * 2;
|
||||||
|
target.height = height_fraction * 2;
|
||||||
|
|
||||||
|
shot = gdk_drawable_get_image (gid->src->window,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
gtk_image_set_from_image (GTK_IMAGE (gid->snap),
|
||||||
|
shot, NULL);
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (shot));
|
||||||
|
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
gdk_window_end_paint (gid->src->window);
|
||||||
|
|
||||||
|
gdk_draw_rectangle (gid->src->window,
|
||||||
|
gid->src->style->black_gc,
|
||||||
|
FALSE,
|
||||||
|
target.x, target.y,
|
||||||
|
target.width, target.height);
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (gc));
|
||||||
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
image_source_expose (GtkWidget *da,
|
||||||
|
GdkEventExpose *event,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
int x = event->area.x;
|
||||||
|
GdkColor red = { 0, 65535, 0, 0 };
|
||||||
|
GdkColor green = { 0, 0, 65535, 0 };
|
||||||
|
GdkColor blue = { 0, 0, 0, 65535 };
|
||||||
|
GdkGC *gc;
|
||||||
|
|
||||||
|
gc = gdk_gc_new (event->window);
|
||||||
|
|
||||||
|
while (x < (event->area.x + event->area.width))
|
||||||
|
{
|
||||||
|
switch (x % 7)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
gdk_gc_set_rgb_fg_color (gc, &red);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
case 5:
|
||||||
|
gdk_gc_set_rgb_fg_color (gc, &green);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
case 7:
|
||||||
|
case 8:
|
||||||
|
gdk_gc_set_rgb_fg_color (gc, &blue);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gdk_draw_line (event->window,
|
||||||
|
gc,
|
||||||
|
x, event->area.y,
|
||||||
|
x, event->area.y + event->area.height);
|
||||||
|
|
||||||
|
++x;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref (G_OBJECT (gc));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
create_get_image (void)
|
||||||
|
{
|
||||||
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
|
if (!window)
|
||||||
|
{
|
||||||
|
GtkWidget *sw;
|
||||||
|
GtkWidget *src;
|
||||||
|
GtkWidget *snap;
|
||||||
|
GtkWidget *vbox;
|
||||||
|
GtkWidget *hbox;
|
||||||
|
GtkWidget *button;
|
||||||
|
struct GetImageData *gid;
|
||||||
|
|
||||||
|
gid = g_new (struct GetImageData, 1);
|
||||||
|
|
||||||
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (window),
|
||||||
|
"destroy",
|
||||||
|
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
|
||||||
|
&window);
|
||||||
|
|
||||||
|
gtk_object_set_data_full (GTK_OBJECT (window),
|
||||||
|
"testgtk-get-image-data",
|
||||||
|
gid,
|
||||||
|
g_free);
|
||||||
|
|
||||||
|
vbox = gtk_vbox_new (FALSE, 0);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||||
|
|
||||||
|
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||||
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||||
|
GTK_POLICY_AUTOMATIC,
|
||||||
|
GTK_POLICY_AUTOMATIC);
|
||||||
|
|
||||||
|
gid->sw = sw;
|
||||||
|
|
||||||
|
gtk_widget_set_usize (sw, 400, 400);
|
||||||
|
|
||||||
|
src = gtk_drawing_area_new ();
|
||||||
|
gtk_widget_set_usize (src, 10000, 10000);
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (src),
|
||||||
|
"expose_event",
|
||||||
|
GTK_SIGNAL_FUNC (image_source_expose),
|
||||||
|
gid);
|
||||||
|
|
||||||
|
gid->src = src;
|
||||||
|
|
||||||
|
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
|
||||||
|
src);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (vbox),
|
||||||
|
sw, TRUE, TRUE, 0);
|
||||||
|
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new (FALSE, 3);
|
||||||
|
|
||||||
|
snap = gtk_widget_new (GTK_TYPE_IMAGE, NULL);
|
||||||
|
|
||||||
|
gid->snap = snap;
|
||||||
|
|
||||||
|
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||||
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||||
|
GTK_POLICY_AUTOMATIC,
|
||||||
|
GTK_POLICY_AUTOMATIC);
|
||||||
|
gtk_widget_set_usize (sw, 300, 300);
|
||||||
|
|
||||||
|
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), snap);
|
||||||
|
|
||||||
|
gtk_box_pack_end (GTK_BOX (hbox), sw, FALSE, FALSE, 5);
|
||||||
|
|
||||||
|
button = gtk_button_new_with_label ("Get image from drawable");
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (button),
|
||||||
|
"clicked",
|
||||||
|
GTK_SIGNAL_FUNC (take_snapshot),
|
||||||
|
gid);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||||
|
|
||||||
|
gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||||
|
|
||||||
|
gtk_widget_show_all (window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Label Demo
|
* Label Demo
|
||||||
*/
|
*/
|
||||||
@ -8738,6 +9055,7 @@ create_main_window (void)
|
|||||||
{ "font selection", create_font_selection },
|
{ "font selection", create_font_selection },
|
||||||
{ "gamma curve", create_gamma_curve },
|
{ "gamma curve", create_gamma_curve },
|
||||||
{ "handle box", create_handle_box },
|
{ "handle box", create_handle_box },
|
||||||
|
{ "image from drawable", create_get_image },
|
||||||
{ "image", create_image },
|
{ "image", create_image },
|
||||||
{ "item factory", create_item_factory },
|
{ "item factory", create_item_factory },
|
||||||
{ "labels", create_labels },
|
{ "labels", create_labels },
|
||||||
|
@ -954,14 +954,13 @@ do_search (gpointer callback_data,
|
|||||||
GtkWidget *search_text;
|
GtkWidget *search_text;
|
||||||
GtkTextBuffer *buffer;
|
GtkTextBuffer *buffer;
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
dialog = gtk_dialog_new_with_buttons ("Search",
|
dialog = gtk_dialog_new_with_buttons ("Search",
|
||||||
GTK_WINDOW (view->window),
|
GTK_WINDOW (view->window),
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_STOCK_BUTTON_CLOSE,
|
GTK_STOCK_BUTTON_CLOSE,
|
||||||
GTK_RESPONSE_NONE, NULL);
|
GTK_RESPONSE_NONE, NULL);
|
||||||
|
|
||||||
|
|
||||||
buffer = gtk_text_buffer_new (NULL);
|
buffer = gtk_text_buffer_new (NULL);
|
||||||
|
|
||||||
/* FIXME memory leak once buffer is a GObject */
|
/* FIXME memory leak once buffer is a GObject */
|
||||||
@ -983,7 +982,6 @@ do_search (gpointer callback_data,
|
|||||||
gtk_widget_grab_focus (search_text);
|
gtk_widget_grab_focus (search_text);
|
||||||
|
|
||||||
gtk_widget_show_all (dialog);
|
gtk_widget_show_all (dialog);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1300,6 +1298,7 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
GtkTextIter iter;
|
GtkTextIter iter;
|
||||||
GtkTextIter start, end;
|
GtkTextIter start, end;
|
||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* remove tag from whole buffer */
|
/* remove tag from whole buffer */
|
||||||
gtk_text_buffer_get_bounds (buffer->buffer, &start, &end);
|
gtk_text_buffer_get_bounds (buffer->buffer, &start, &end);
|
||||||
@ -1310,7 +1309,7 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
gtk_text_buffer_get_mark (buffer->buffer,
|
gtk_text_buffer_get_mark (buffer->buffer,
|
||||||
"insert"));
|
"insert"));
|
||||||
|
|
||||||
|
i = 0;
|
||||||
if (*str != '\0')
|
if (*str != '\0')
|
||||||
{
|
{
|
||||||
GtkTextIter match_start, match_end;
|
GtkTextIter match_start, match_end;
|
||||||
@ -1318,6 +1317,7 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
while (gtk_text_iter_forward_search (&iter, str, TRUE, FALSE,
|
while (gtk_text_iter_forward_search (&iter, str, TRUE, FALSE,
|
||||||
&match_start, &match_end))
|
&match_start, &match_end))
|
||||||
{
|
{
|
||||||
|
++i;
|
||||||
gtk_text_buffer_apply_tag (buffer->buffer, buffer->found_text_tag,
|
gtk_text_buffer_apply_tag (buffer->buffer, buffer->found_text_tag,
|
||||||
&match_start, &match_end);
|
&match_start, &match_end);
|
||||||
|
|
||||||
@ -1325,7 +1325,6 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
dialog = gtk_message_dialog_new (GTK_WINDOW (view->window),
|
dialog = gtk_message_dialog_new (GTK_WINDOW (view->window),
|
||||||
GTK_MESSAGE_INFO,
|
GTK_MESSAGE_INFO,
|
||||||
GTK_BUTTONS_OK,
|
GTK_BUTTONS_OK,
|
||||||
@ -1339,7 +1338,6 @@ buffer_search_forward (Buffer *buffer, const char *str,
|
|||||||
GTK_OBJECT (dialog));
|
GTK_OBJECT (dialog));
|
||||||
|
|
||||||
gtk_widget_show (dialog);
|
gtk_widget_show (dialog);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user