Compare commits

..

1 Commits

Author SHA1 Message Date
Ryan Lortie
5ae008606d GtkApplication rewrite 2010-08-11 01:23:23 -04:00
1273 changed files with 358652 additions and 353318 deletions

View File

@@ -5,11 +5,9 @@ GTK+ requires the following packages:
- The GLib, Pango, GdkPixbuf, ATK and cairo libraries, available at
the same location as GTK+. GTK+ @GTK_VERSION@ requires at least
GLib @GLIB_REQUIRED_VERSION@, Pango @PANGO_REQUIRED_VERSION@,
GdkPixbuf @GDK_PIXBUF_REQUIRED_VERSION@, ATK @ATK_REQUIRED_VERSION@
and cairo @CAIRO_REQUIRED_VERSION@.
GLib 2.23.6, Pango 1.20, GdkPixbuf 2.21.0 ATK 1.29.2 and cairo 1.6.0.
- gobject-introspection 0.9.3 or newer.
- gobject-introspection 0.6.7 or newer.
Simple install procedure
========================

View File

@@ -7,7 +7,6 @@ SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros build
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
EXTRA_DIST += \
autogen.sh \
HACKING \
makecopyright \
NEWS.pre-1-0 \
@@ -71,6 +70,8 @@ EXTRA_DIST += \
examples/packbox/packbox.c \
examples/paned/Makefile \
examples/paned/paned.c \
examples/pixmap/Makefile \
examples/pixmap/pixmap.c \
examples/progressbar/Makefile \
examples/progressbar/progressbar.c \
examples/radiobuttons/Makefile \

View File

@@ -30,17 +30,13 @@ XVFB_START = \
# call as: $(XVFB_START) && someprogram
# test: run all tests in cwd and subdirs
test: test-cwd test-recurse
# test-cwd: run tests in cwd
test-cwd: ${TEST_PROGS}
test: ${TEST_PROGS}
@$(SKIP_GDKTARGET) || test -z "${TEST_PROGS}" || { \
$(XVFB_START) && { set -e; $(TESTS_ENVIRONMENT) ${GTESTER} --verbose ${TEST_PROGS}; }; \
$(XVFB_START) && { set -e; ${GTESTER} --verbose ${TEST_PROGS}; }; \
}
# test-recurse: run tests in subdirs
test-recurse:
@ for subdir in $(SUBDIRS) ; do \
test "$$subdir" = "." -o "$$subdir" = "po" -o "$$subdir" = "po-properties" || \
( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) test ) || exit $? ; \
( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
done
# test-report: run tests in subdirs and generate report
# perf-report: run tests in subdirs with -m perf and generate report
@@ -81,6 +77,6 @@ test-report perf-report full-report: ${TEST_PROGS}
rm -rf "$$GTESTER_LOGDIR"/ ; \
${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
}
.PHONY: test test-cwd test-recurse test-report perf-report full-report
# run make test-cwd as part of make check
check-local: test-cwd
.PHONY: test test-report perf-report full-report
# run make test as part of make check
check-local: test

295
NEWS
View File

@@ -1,298 +1,3 @@
Overview of Changes from GTK+ 2.90.7 to 2.91.0
==============================================
* The rendering cleanup work has landed. This is a large change that
affects many APIs.
- All gtkstyle functions have been changed to take a cairo_t argument
instead of a window + area.
- GdkPixmap is gone. APIs that took pixmaps are being replaced by ones
that take pixbufs or cairo surfaces, or regions (where pixmaps were
used as masks). In background handling, pixmaps have been replaced
by cairo patterns, see gdk_window_set_background_pattern().
- GdkColormap is gone. It is replaced by visuals, see
gtk_widget_set_visual().
- The ::expose-event signal on GtkWidget has been replaced by a
::draw signal.
- gtk_widget_get_snapshot() has been removed. Instead, gtk_widget_draw()
can render a widget onto an cairo_t.
* The GtkSizeRequest interface has been merged into GtkWidget, and
GtkCellSizeRequest has been merged into GtkCellRenderer. The wrapper
functions have been renamed to include 'preferred', e.g
gtk_size_request_get_width() is now gtk_widget_get_preferred_width()
and gtk_cell_size_request_get_width_for_height() is now
gtk_cell_renderer_get_preferred_width_for_height().
* GtkObject has been removed. The ::destroy signal has been moved
to GtkWidget. At the same time, GtkWidgetFlags have been removed,
they already had getters and setters anyway.
* GtkWidget has gained generic alignment and padding properties:
halign, valign, margin-left, margin-right, margin-top, margin-bottom
These can be used instead of container-specific child properties or
GtkMisc and GtkAlignment widgets.
* Container widgets can now let GTK+ handle border-width for them, using
gtk_container_class_handle_border_width()
* The GtkEditableClass struct has been renamed to GtkEditableInterface
* Mouse wheel scrolling has been removed from GtkNotebook
* The default policy for scrolled windows has been changed to 'automatic'
* Global url hooks have been removed from GtkAboutDialog and GtkLinkButton
* The global window creation hook has been removed from GtkNotebook
* The error handling in GDK has been modernized and avoids synchronizing
X requests as much as possible
* Fixed Bugs:
323904 GtkEditable header is slightly incorrect
339745 Return value of gtk_link_button_set_uri_hook not usable
468672 GTK_POLICY_AUTOMATIC should be the default policy...
486839 Filechooser 'Places' items should not move up and down...
601731 Drag and Drop from Workspace to Activities Overview
617316 Move documentation to inline comments: GtkEditable
621590 Add length to gtk_tree_path_get_indices
623664 Missing accessors for gtk_menu_get_position_func{,_data}
628829 Chain get_width_for_height default impl to vfunc...
629177 Do not use deprecated gtk_widget_get_child_requisition()
629277 Hanging because do_syntheszie_crossing_event is called...
629387 Use gint16 for GtkBorder
629598 Do not use deprecated gtk_widget_size_request()
629608 Revamp and modernize X error traps
629733 There is a misprint in the description of the gtk_check_...
629748 Fails to build without XComposite
629785 Do not use deprecated gtk_cell_renderer_get_size()
630033 Improve tests for X error traps, fix two bugs
630226 Removing tab scrolling from GtkNotebook
630520 Don't try to unref event->dnd.context unconditionally...
630521 Remove some remaining API warts from tab dnd api
630532 invalid drop point in drag-data-received callback
Updated translations:
Catalan
Czech
Danish
Dutch
German
Gujarati
Japanese
Simplified Chinese
Overview of Changes from GTK+ 2.90.6 to 2.90.7
==============================================
* Various deprecated APIs have been removed:
- the GtkWidget::draw-border style property
- the GtkEntry::state-hint style property
- the GtkTreeView::row-ending-details style property
- the GtkRange::trough-side-details style property
- the GtkRange::stepper-position-details style property
- the GtkRange::activate-slider style property
- the GTK_CALENDAR_WEEK_START_MONDAY option
- the GtkFrame::shadow and GtkHandleBox::shadow properties
- the GtkTextView::page-horizontally signal
- the GDK_WINDOW_DIALOG window type
- the GTK_SELECTION_EXTENDED selection mode
- the GtkProgressBarOrientation, GtkAnchorType and GtkVisibility
enumerations
- GtkDialog separators, including the GtkDialog::has-separator
property, including setter/getter, the GTK_DIALOG_NO_SEPARATOR
flag and the GtkMessageDialog::use-separator style property
- gtk_status_icon_set/get_blinking
- gdk_window_et_deskrelative_origin
- The GtkItem class has been removed. Its functionality has
been merged into is sole subclass, GtkMenuItem
* The GtkIconView::orientation property has been renamed
to 'item-orientation'
* GtkProgressBar and GtkCellRendererProgress implement GtkOrientable
now, and their 'orientation' property have been split into
a 'orientation' property of type GtkOrientation and a boolean
'inverted' property
* GDK no longer exports variables: gdk_threads_lock, gdk_threads_unlock,
gdk_threads_mutex and gdk_display are no longer available
* GTK no longer exports variables: gtk_major_version, gtk_minor_version,
gtk_micro_version, gtk_binary_age, gtk_interface_age have been
converted to functions. gtk_debug_flags has a getter and a setter.
Misc. variables that had been exported by the semi-private text
API have been removed.
* All GDK keysym names have been changed from GDK_keysym to GDK_KEY_keysym;
the previous names are still available in gdkkeysyms-compat.h.
* GtkWrapBox is a new container, which distributes its children
over multiple rows/columns
* GTK+ now uses standard icon names when looking up stock icons
* More widgets and cell renderers have been converted to support
width-for-height: GtkCellRendererText, GtkAccelLabel, GtkCellView,
GtkComboBox, GtkMenu, GtkMenuItem
* Button boxes are now semi-homogeneous.
* The directfb backend has been removed
* Bugs fixed:
77669 GtkWrapBox for gtk itself, not gimp?
84188 "Dialogue" button widths should not be homogenous
414712 gtk_container_set_focus_child leaks widget
527499 FileFilter combo becames too wide
528257 File selector and stock string problems
605186 Use G_DEFINE_INTERFACE macro
614006 File chooser crashes when creating a new folder...
616401 Noneffective gdk_keymap_map_virtual_modifiers in early use
626710 GailScaleButton calculates wrong value for minimum increment
627028 Marked state of calendar day is not accessible
627139 gtkfilechooserentry shows completion progress tooltip on first show
627445 Removal of GtkWidget::draw-border breaks gtk_widget_queue_draw()
627580 GtkFontSelection: don't notify the non-existent "font" property
627643 gtkaboutdialog gettext problem
627828 Drag and drop between treeviews in different window groups broken...
627843 set_active_iter doc: remove restriction on path length
627867 tests/testsocket is broken
627912 misprint in the desc. of "hover-expand" and "hover-selection"...
628160 introspection: Update to new scanner API
628308 docs referencing non existing icons
628656 _gdk_windowing_get_startup_notify_id memory leak
628807 Add more "reserved for expansion" fields to GtkWidgetClass
628808 Warn if a widget requests minimum size > natural size
628884 Use a bitfield for Widget::private_flags, ::state, ::saved_state
628935 add gtk_radio_button_join_group method for bindings
629110 gtk_spinner_accessible_get_type always returns null
* Translation updates
Arabic
Armenian
Brazilian Portuguese
British English
Bulgarian
Danish
Estonian
French
Galician
Hebrew
Hungarian
Indonesian
Kazakh
Norwegian bokmål
Norwegian Nynorsk
Portuguese
Serbian
Slovenian
Spanish
Telugu
Traditional Chinese
Overview of Changes from GTK+ 2.90.5 to 2.90.6
==============================================
* All drawing done by GTK+ itself has been ported from
GDK drawing APIs to cairo
* GtkExpander and GtkFrame now implement GtkSizeRequest
* GtkExpander gained a ::label-fill property to make the label
fill the entire horizontal space
* Allow windows to be dragged by clicking on empty
areas in menubars and toolbars
* GtkAboutDialog can now refer to licenses using a ::license-type
enumeration instead of embedding the license text
* Deprecations and cleanups:
- Remove GtkNotebookPage
- Remove public struct members in many classes
- Remove the GtkRecentManager::limit property
- Remove all GDK drawing functions, ie gdk_draw_*. Use cairo instead
- Remove all GdkGC functions. Use cairo instead
- Remove all of GdkImage. Use cairo instead
- Remove all of GdkRGB. Use cairo instead
- Remove gdk_{bit,pix}map_create_from_data
- GDK no longer depends on the render X extension
* New accessors:
- gdk_cursor_get_cursor_type
- gdk_device_get_n_axes
- gdk_display_is_closed
- gtk_notebook_get_tab_[hv]border
* New cairo-related APIs:
- gdk_window_create_similar_surface
- gdk_window_get_background_pattern
* Bugs fixed:
90935 GtkIMContextClass inheritance ...
97414 gtkaccellabel: s/seperator/separator/
336225 Support for common licenses in about dialog
554926 gtk_init_with_args: not setting translation domain...
557263 Notebooks return 1 selection even if they have no pages
579583 GtkStatusIcon's scroll-event documentation missing "Since: ..."
580291 Gail does not work with custom treemodels
596125 Property string fixes
604391 Gtk-CRITICAL when switching between tab
605190 Should delete the description of xim related options...
609264 gtk_(tree/list)_store_set documentation unclear about ownership
611313 Window dragging from menubars/toolbars
612919 crash in System Monitor: I was moving up-down wit...
614049 Allow packing options for GtkExpander label widgets
614443 Doxygen 'forgets' #define documentation under certain conditions
615474 gtk_widget_set_has_window() documentation is not correct
618327 GtkNotebookPage should be deprecated
621571 Fix damage events on offscreen windows
622658 GTK_STOCK_FILE Stock Label
623603 meld built with pygtk-2.16.0 giving warnings
623865 gtkdnd: pointer grab may never finish (ungrab before grab)
624087 Missing accessor for GdkCursor.type
624224 Missing accessor for GdkDisplay.closed
624270 crash in gtk_entry_completion_default_completion_func
624333 Deprecate GtkRecentManager:limit
624362 access an invalid ActionGroup
624367 GtkButtonBox is broken
624397 Move GtkBoxChild from public .h to gtkbox.c
624432 GtkRadioMenuItem is broken
624540 GtkRadionAction loop in its activate handler
624687 switch-page bug when activated from menu
624707 warnings when showing gnome-terminal menus on gtk master
624779 GtkCalendar padding/margin/spacing/border/whatever is hard-coded
625104 Don't try and use the child of a GtkSeparatorMenuItem
625235 Tooltips cause warnings
625300 Buttons order in dialogs broken in gtk+3
625416 gtk_file_chooser_default_map should not reload directory
625650 Add annotations to gtk_tree_model_iter_next() and...
625655 win32 compile failure due to G_SEAL
625715 comment string in GtkAboutDialog is not centered
625953 GailAdjustment does not implement get_minimum_increment...
626052 Activating a file in GtkFileChooserDialog activates action...
626276 gtk_tree_selection_set_select_function() should allow...
626514 License dialog doesn't take into account long copyrights
* Translation updates:
Asturian
Galician
German
Hebrew
Indonesian
Norwegian bokmål
Punjabi
Romanian
Simplified Chinese
Slovenian
Spanish
Swedish
Traditional Chinese
Overview of Changes from GTK+ 2.90.4 to 2.90.5
==============================================

View File

@@ -110,11 +110,10 @@ rm -rf autom4te.cache
# regenerated from their corresponding *.in files by ./configure anyway.
touch README INSTALL
gtkdocize || exit $?
$ACLOCAL -I m4 $ACLOCAL_FLAGS || exit $?
libtoolize --force || exit $?
gtkdocize || exit $?
autoheader || exit $?

View File

@@ -134,6 +134,7 @@
<File RelativePath="..\..\..\gdk\win32\gdkgeometry-win32.c" />
<File RelativePath="..\..\..\gdk\win32\gdkglobals-win32.c" />
<File RelativePath="..\..\..\gdk\win32\gdkim-win32.c" />
<File RelativePath="..\..\..\gdk\win32\gdkimage-win32.c" />
<File RelativePath="..\..\..\gdk\win32\gdkinput-win32.c" />
<File RelativePath="..\..\..\gdk\win32\gdkinput.c" />
<File RelativePath="..\..\..\gdk\win32\gdkkeys-win32.c" />

View File

@@ -108,6 +108,7 @@ copy ..\..\..\gdk\gdkevents.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#
copy ..\..\..\gdk\gdkfont.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;
copy ..\..\..\gdk\gdkgc.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;
copy ..\..\..\gdk\gdki18n.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;
copy ..\..\..\gdk\gdkimage.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;
copy ..\..\..\gdk\gdkinput.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;
copy ..\..\..\gdk\gdkkeys.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;
copy ..\..\..\gdk\gdkkeysyms.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;

View File

@@ -11,8 +11,8 @@ AC_PREREQ([2.62])
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
m4_define([gtk_major_version], [2])
m4_define([gtk_minor_version], [91])
m4_define([gtk_micro_version], [1])
m4_define([gtk_minor_version], [90])
m4_define([gtk_micro_version], [6])
m4_define([gtk_interface_age], [0])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
@@ -31,21 +31,11 @@ m4_define([gtk_api_version], [3.0])
m4_define([gtk_binary_version], [3.0.0])
# required versions of other packages
m4_define([glib_required_version], [2.27.0])
m4_define([glib_required_version], [2.25.12])
m4_define([pango_required_version], [1.20])
m4_define([atk_required_version], [1.29.2])
m4_define([cairo_required_version], [1.10.0])
m4_define([cairo_required_version], [1.9.10])
m4_define([gdk_pixbuf_required_version], [2.21.0])
GLIB_REQUIRED_VERSION=glib_required_version
PANGO_REQUIRED_VERSION=pango_required_version
ATK_REQUIRED_VERSION=atk_required_version
CAIRO_REQUIRED_VERSION=cairo_required_version
GDK_PIXBUF_REQUIRED_VERSION=gdk_pixbuf_required_version
AC_SUBST(GLIB_REQUIRED_VERSION)
AC_SUBST(PANGO_REQUIRED_VERSION)
AC_SUBST(ATK_REQUIRED_VERSION)
AC_SUBST(CAIRO_REQUIRED_VERSION)
AC_SUBST(GDK_PIXBUF_REQUIRED_VERSION)
AC_INIT([gtk+], [gtk_version],
@@ -237,6 +227,10 @@ AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
[turn on debugging @<:@default=debug_default@:>@]),,
enable_debug=debug_default)
AC_ARG_ENABLE(shm,
[AC_HELP_STRING([--enable-shm],
[support shared memory if available [default=yes]])],,
[enable_shm="yes"])
AC_ARG_ENABLE(xkb,
[AC_HELP_STRING([--enable-xkb],
[support XKB [default=maybe]])],,
@@ -249,6 +243,10 @@ AC_ARG_ENABLE(rebuilds,
[AC_HELP_STRING([--disable-rebuilds],
[disable all source autogeneration rules])],,
[enable_rebuilds=yes])
AC_ARG_ENABLE(visibility,
[AC_HELP_STRING([--disable-visibility],
[do not use ELF visibility attributes])],,
[enable_visibility=yes])
AC_ARG_WITH(xinput,
[AC_HELP_STRING([--with-xinput=@<:@no/yes@:>@], [support XInput])])
@@ -259,13 +257,13 @@ else
gdktarget=x11
fi
AC_ARG_WITH(gdktarget, [ --with-gdktarget=[[x11/win32/quartz]] select non-default GDK target],
AC_ARG_WITH(gdktarget, [ --with-gdktarget=[[x11/win32/quartz/directfb]] select non-default GDK target],
gdktarget=$with_gdktarget)
AC_SUBST(gdktarget)
case $gdktarget in
x11|win32|quartz) ;;
*) AC_MSG_ERROR([Invalid target for GDK: use x11, quartz or win32.]);;
x11|win32|quartz|directfb) ;;
*) AC_MSG_ERROR([Invalid target for GDK: use x11, quartz, directfb or win32.]);;
esac
gdktargetlib=libgdk-$gdktarget-$GTK_API_VERSION.la
@@ -286,6 +284,11 @@ else
fi
if test "x$enable_visibility" = "xno"; then
GTK_DEBUG_FLAGS="$GTK_DEBUG_FLAGS -DDISABLE_VISIBILITY"
fi
AC_DEFINE_UNQUOTED(GTK_COMPILED_WITH_DEBUGGING, "${enable_debug}",
[Define if debugging is enabled])
@@ -362,7 +365,6 @@ PKG_CHECK_MODULES(BASE_DEPENDENCIES,
atk >= atk_required_version dnl
pango >= pango_required_version dnl
cairo >= cairo_required_version dnl
cairo-gobject >= cairo_required_version dnl
gdk-pixbuf-2.0 >= gdk_pixbuf_required_version])
## In addition to checking that cairo is present, we also need to
@@ -484,6 +486,18 @@ if test "$gtk_ok" = "yes"; then
[Define if _NL_PAPER_WIDTH is available])
fi
# sigsetjmp is a macro on some platforms, so AC_CHECK_FUNCS is not reliable
AC_MSG_CHECKING(for sigsetjmp)
AC_TRY_LINK([#include <setjmp.h>], [
sigjmp_buf env;
sigsetjmp(env, 0);
], gtk_ok=yes, gtk_ok=no)
AC_MSG_RESULT($gtk_ok)
if test "$gtk_ok" = "yes"; then
AC_DEFINE(HAVE_SIGSETJMP, 1,
[Define to 1 if sigsetjmp is available])
fi
# i18n stuff
ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`"
AM_GLIB_GNU_GETTEXT
@@ -928,11 +942,11 @@ if test "x$gdktarget" = "xx11"; then
#
# Check for basic X packages; we use pkg-config if available
#
if $PKG_CONFIG --exists x11 xext; then
if $PKG_CONFIG --exists x11 xext xrender; then
have_base_x_pc=true
X_PACKAGES="$X_PACKAGES x11 xext"
x_libs="`$PKG_CONFIG --libs x11 xext`"
X_CFLAGS="`$PKG_CONFIG --cflags x11 xext`"
X_PACKAGES="$X_PACKAGES x11 xext xrender"
x_libs="`$PKG_CONFIG --libs x11 xext xrender`"
X_CFLAGS="`$PKG_CONFIG --cflags x11 xext xrender`"
# Strip out any .la files that pkg-config might give us (this happens
# with -uninstalled.pc files)
@@ -953,9 +967,9 @@ if test "x$gdktarget" = "xx11"; then
fi
x_cflags="$X_CFLAGS"
x_libs_for_checks="$X_LIBS -lXext -lX11 $X_EXTRA_LIBS"
x_libs_for_checks="$X_LIBS -lXext -lXrender -lX11 $X_EXTRA_LIBS"
GTK_DEP_LIBS_FOR_X="$X_LIBS -lX11 $X_EXTRA_LIBS"
GTK_DEP_LIBS_FOR_X="$X_LIBS -lXrender -lX11 $X_EXTRA_LIBS"
fi
# Extra libraries found during checks (-lXinerama, etc), not from pkg-config.
@@ -974,6 +988,8 @@ if test "x$gdktarget" = "xx11"; then
AC_MSG_ERROR([*** libX11 not found. Check 'config.log' for more details.]))
AC_CHECK_FUNC(XextFindDisplay, :,
AC_MSG_ERROR([*** libXext not found. Check 'config.log' for more details.]))
AC_CHECK_FUNC(XRenderQueryExtension, :,
AC_MSG_ERROR([*** libXrender not found. Check 'config.log' for more details.]))
# Check for xReply
@@ -1036,6 +1052,54 @@ if test "x$gdktarget" = "xx11"; then
CFLAGS="$gtk_save_CFLAGS"
# Xshm checks
if test "x$enable_shm" = "xyes"; then
# Check for the XShm extension, normally in Xext
AC_CHECK_FUNC(XShmAttach,
:,
# On AIX, it is in XextSam instead
[AC_CHECK_LIB(XextSam, XShmAttach,
[GTK_ADD_LIB(x_extra_libs,XextSam)])])
fi
if test "x$enable_shm" = "xyes"; then
# Check for shared memory
AC_CHECK_HEADER(sys/ipc.h,
AC_DEFINE(HAVE_IPC_H, 1,
[Define to 1 if ipc.h is available]),
no_sys_ipc=yes)
AC_CHECK_HEADER(sys/shm.h,
AC_DEFINE(HAVE_SHM_H, 1,
[Define to 1 if shm.h is available]),
no_sys_shm=yes)
# Check for the X shared memory extension header file
have_xshm=no
AC_MSG_CHECKING(X11/extensions/XShm.h)
if test "x$no_xext_lib" = "xyes"; then
:
else
gtk_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $x_cflags"
AC_TRY_COMPILE([
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/XShm.h>
], [XShmSegmentInfo *x_shm_info;], have_xshm=yes)
CFLAGS="$gtk_save_CFLAGS"
fi
AC_MSG_RESULT($have_xshm)
if test $have_xshm = yes ; then
AC_DEFINE(HAVE_XSHM_H, 1,
[Define to 1 if xshm.h is available])
fi
fi
if test "x$enable_xinerama" = "xyes"; then
# Check for Xinerama extension (Solaris impl or Xfree impl)
gtk_save_cppflags="$CPPFLAGS"
@@ -1186,6 +1250,17 @@ else
AM_CONDITIONAL(USE_QUARTZ, false)
fi
if test "x$gdktarget" = "xdirectfb"; then
DIRECTFB_REQUIRED_VERSION=1.0.0
AC_MSG_CHECKING(for DirectFB)
PKG_CHECK_MODULES(DIRECTFB, [directfb >= $DIRECTFB_REQUIRED_VERSION])
AM_CONDITIONAL(USE_DIRECTFB, true)
else
AM_CONDITIONAL(USE_DIRECTFB, false)
fi
# Check for Pango flags
if test "x$gdktarget" = "xwin32"; then
@@ -1277,7 +1352,7 @@ else
LIBS="$gtk_save_LIBS"
fi
GTK_PACKAGES="atk cairo cairo-gobject gdk-pixbuf-2.0 gio-2.0"
GTK_PACKAGES="atk cairo gdk-pixbuf-2.0 gio-2.0"
if test "x$gdktarget" = "xx11"; then
GTK_PACKAGES="$GTK_PACKAGES pangoft2"
fi
@@ -1481,7 +1556,7 @@ fi
# GObject introspection
##################################################
GOBJECT_INTROSPECTION_CHECK([0.9.3])
GOBJECT_INTROSPECTION_CHECK([0.9.0])
##################################################
# Checks for gtk-doc and docbook-tools
@@ -1579,6 +1654,9 @@ elif test "x$gdktarget" = "xwin32" ; then
elif test "x$gdktarget" = "xquartz" ; then
gdk_windowing='
#define GDK_WINDOWING_QUARTZ'
elif test "x$gdktarget" = "xdirectfb" ; then
gdk_windowing='
#define GDK_WINDOWING_DIRECTFB'
fi
if test x$gdk_wchar_h = xyes; then
@@ -1654,6 +1732,7 @@ gdk/win32/Makefile
gdk/win32/rc/Makefile
gdk/win32/rc/gdk.rc
gdk/quartz/Makefile
gdk/directfb/Makefile
gdk/tests/Makefile
gtk/Makefile
gtk/makefile.msc
@@ -1684,4 +1763,4 @@ perf/Makefile
AC_OUTPUT
echo "configuration:
target: $gdktarget"
target: $gdktarget"

View File

@@ -22,24 +22,42 @@ LDADDS = \
$(MATH_LIB)
noinst_PROGRAMS = \
testpixbuf-drawable \
testanimation \
testpixbuf-color \
testpixbuf-save \
testpixbuf-scale \
pixbuf-demo
# Need to build test-inline-pixbufs.h for testpixbuf
noinst_PROGRAMS += testpixbuf
BUILT_SOURCES = test-inline-pixbufs.h
test-inline-pixbufs.h: apple-red.png gnome-foot.png
$(GDK_PIXBUF_CSOURCE) --raw --build-list \
apple_red $(srcdir)/apple-red.png \
gnome_foot $(srcdir)/gnome-foot.png \
> test-inline-pixbufs.h \
|| (rm -f test-inline-pixbufs.h && false)
testpixbuf_DEPENDENCIES = $(DEPS)
testpixbuf_drawable_DEPENDENCIES = $(DEPS)
testpixbuf_save_DEPENDENCIES = $(DEPS)
testpixbuf_color_DEPENDENCIES = $(DEPS)
testpixbuf_scale_DEPENDENCIES = $(DEPS)
testanimation_DEPENDENCIES = $(DEPS)
pixbuf_demo_DEPENDENCIES = $(DEPS)
testpixbuf_LDADD = $(LDADDS)
testpixbuf_drawable_LDADD = $(LDADDS)
testpixbuf_save_LDADD = $(LDADDS)
testpixbuf_color_LDADD = $(LDADDS)
testpixbuf_scale_LDADD = $(LDADDS)
testanimation_LDADD = $(LDADDS)
pixbuf_demo_LDADD = $(LDADDS)
testpixbuf_SOURCES = testpixbuf.c pixbuf-init.c
testpixbuf_drawable_SOURCES = testpixbuf-drawable.c pixbuf-init.c
testpixbuf_save_SOURCES = testpixbuf-save.c
testpixbuf_color_SOURCES = testpixbuf-color.c
testpixbuf_scale_SOURCES = testpixbuf-scale.c pixbuf-init.c
@@ -57,4 +75,6 @@ EXTRA_DIST += \
gnome-gsame.png \
gnu-keys.png
DISTCLEANFILES = test-inline-pixbufs.h
-include $(top_srcdir)/git.mk

View File

@@ -67,6 +67,25 @@ activate_radio_action (GtkAction *action, GtkRadioAction *current)
}
}
static void
activate_email (GtkAboutDialog *about,
const gchar *link,
gpointer data)
{
gchar *text;
text = g_strdup_printf ("send mail to %s", link);
g_print ("%s\n", text);
g_free (text);
}
static void
activate_url (GtkAboutDialog *about,
const gchar *link,
gpointer data)
{
g_print ("show url %s\n", link);
}
static void
about_cb (GtkAction *action,
GtkWidget *window)
@@ -90,6 +109,22 @@ about_cb (GtkAction *action,
NULL
};
const gchar *license =
"This library is free software; you can redistribute it and/or\n"
"modify it under the terms of the GNU Library General Public License as\n"
"published by the Free Software Foundation; either version 2 of the\n"
"License, or (at your option) any later version.\n"
"\n"
"This library is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
"Library General Public License for more details.\n"
"\n"
"You should have received a copy of the GNU Library General Public\n"
"License along with the Gnome Library; see the file COPYING.LIB. If not,\n"
"write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
"Boston, MA 02111-1307, USA.\n";
pixbuf = NULL;
transparent = NULL;
filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
@@ -101,15 +136,13 @@ about_cb (GtkAction *action,
g_object_unref (pixbuf);
}
gtk_about_dialog_set_email_hook (activate_email, NULL, NULL);
gtk_about_dialog_set_url_hook (activate_url, NULL, NULL);
gtk_show_about_dialog (GTK_WINDOW (window),
"program-name", "GTK+ Code Demos",
"version", g_strdup_printf ("%s,\nRunning against GTK+ %d.%d.%d",
PACKAGE_VERSION,
gtk_get_major_version (),
gtk_get_minor_version (),
gtk_get_micro_version ()),
"version", PACKAGE_VERSION,
"copyright", "(C) 1997-2009 The GTK+ Team",
"license-type", GTK_LICENSE_LGPL_2_1,
"license", license,
"website", "http://www.gtk.org",
"comments", "Program to demonstrate GTK+ functions.",
"authors", authors,
@@ -426,7 +459,7 @@ do_appwindow (GtkWidget *do_widget)
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Application Window");
gtk_window_set_icon_name (GTK_WINDOW (window), "document-open");
gtk_window_set_icon_name (GTK_WINDOW (window), "gtk-open");
/* NULL window variable when window is closed */
g_signal_connect (window, "destroy",

View File

@@ -128,7 +128,7 @@ query_for_toplevel (GdkScreen *screen,
gtk_widget_show_all (popup);
cursor = gdk_cursor_new_for_display (display, GDK_CROSSHAIR);
if (gdk_pointer_grab (gtk_widget_get_window (popup), FALSE,
if (gdk_pointer_grab (popup->window, FALSE,
GDK_BUTTON_RELEASE_MASK,
NULL,
cursor,
@@ -585,7 +585,7 @@ destroy_info (ChangeDisplayInfo *info)
}
static void
destroy_cb (GObject *object,
destroy_cb (GtkObject *object,
ChangeDisplayInfo **info)
{
destroy_info (*info);
@@ -610,7 +610,7 @@ do_changedisplay (GtkWidget *do_widget)
info->window = gtk_dialog_new_with_buttons ("Change Screen or display",
GTK_WINDOW (do_widget),
0,
GTK_DIALOG_NO_SEPARATOR,
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
"Change", GTK_RESPONSE_OK,
NULL);

View File

@@ -15,16 +15,22 @@ static GtkWidget *frame;
/* Expose callback for the drawing area
*/
static gboolean
draw_callback (GtkWidget *widget,
cairo_t *cr,
gpointer data)
expose_event_callback (GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
GtkStyle *style;
if (widget->window)
{
GtkStyle *style;
style = gtk_widget_get_style (widget);
style = gtk_widget_get_style (widget);
gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
cairo_paint (cr);
gdk_draw_rectangle (widget->window,
style->bg_gc[GTK_STATE_NORMAL],
TRUE,
event->area.x, event->area.y,
event->area.width, event->area.height);
}
return TRUE;
}
@@ -100,8 +106,8 @@ do_colorsel (GtkWidget *do_widget)
da = gtk_drawing_area_new ();
g_signal_connect (da, "draw",
G_CALLBACK (draw_callback), NULL);
g_signal_connect (da, "expose_event",
G_CALLBACK (expose_event_callback), NULL);
/* set a minimum size */
gtk_widget_set_size_request (da, 200, 200);

View File

@@ -271,7 +271,7 @@ struct _MaskEntryClass
};
static void mask_entry_editable_init (GtkEditableInterface *iface);
static void mask_entry_editable_init (GtkEditableClass *iface);
G_DEFINE_TYPE_WITH_CODE (MaskEntry, mask_entry, GTK_TYPE_ENTRY,
G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
@@ -316,7 +316,7 @@ mask_entry_class_init (MaskEntryClass *klass)
static void
mask_entry_editable_init (GtkEditableInterface *iface)
mask_entry_editable_init (GtkEditableClass *iface)
{
iface->changed = mask_entry_changed;
}

View File

@@ -17,46 +17,52 @@
static GtkWidget *window = NULL;
/* Pixmap for scribble area, to store current scribbles */
static cairo_surface_t *surface = NULL;
static GdkPixmap *pixmap = NULL;
/* Create a new surface of the appropriate size to store our scribbles */
/* Create a new pixmap of the appropriate size to store our scribbles */
static gboolean
scribble_configure_event (GtkWidget *widget,
GdkEventConfigure *event,
gpointer data)
{
GtkAllocation allocation;
cairo_t *cr;
if (pixmap)
g_object_unref (pixmap);
if (surface)
cairo_surface_destroy (surface);
pixmap = gdk_pixmap_new (widget->window,
widget->allocation.width,
widget->allocation.height,
-1);
gtk_widget_get_allocation (widget, &allocation);
surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
CAIRO_CONTENT_COLOR,
allocation.width,
allocation.height);
/* Initialize the surface to white */
cr = cairo_create (surface);
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_paint (cr);
cairo_destroy (cr);
/* Initialize the pixmap to white */
gdk_draw_rectangle (pixmap,
widget->style->white_gc,
TRUE,
0, 0,
widget->allocation.width,
widget->allocation.height);
/* We've handled the configure event, no need for further processing. */
return TRUE;
}
/* Redraw the screen from the surface */
/* Redraw the screen from the pixmap */
static gboolean
scribble_draw (GtkWidget *widget,
cairo_t *cr,
gpointer data)
scribble_expose_event (GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
cairo_set_source_surface (cr, surface, 0, 0);
cairo_paint (cr);
/* We use the "foreground GC" for the widget since it already exists,
* but honestly any GC would work. The only thing to worry about
* is whether the GC has an inappropriate clip region set.
*/
gdk_draw_drawable (widget->window,
widget->style->fg_gc[gtk_widget_get_state (widget)],
pixmap,
/* Only copy the area that was exposed. */
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height);
return FALSE;
}
@@ -68,23 +74,21 @@ draw_brush (GtkWidget *widget,
gdouble y)
{
GdkRectangle update_rect;
cairo_t *cr;
update_rect.x = x - 3;
update_rect.y = y - 3;
update_rect.width = 6;
update_rect.height = 6;
/* Paint to the surface, where we store our state */
cr = cairo_create (surface);
gdk_cairo_rectangle (cr, &update_rect);
cairo_fill (cr);
cairo_destroy (cr);
/* Paint to the pixmap, where we store our state */
gdk_draw_rectangle (pixmap,
widget->style->black_gc,
TRUE,
update_rect.x, update_rect.y,
update_rect.width, update_rect.height);
/* Now invalidate the affected region of the drawing area. */
gdk_window_invalidate_rect (gtk_widget_get_window (widget),
gdk_window_invalidate_rect (widget->window,
&update_rect,
FALSE);
}
@@ -94,7 +98,7 @@ scribble_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer data)
{
if (surface == NULL)
if (pixmap == NULL)
return FALSE; /* paranoia check, in case we haven't gotten a configure event */
if (event->button == 1)
@@ -112,7 +116,7 @@ scribble_motion_notify_event (GtkWidget *widget,
int x, y;
GdkModifierType state;
if (surface == NULL)
if (pixmap == NULL)
return FALSE; /* paranoia check, in case we haven't gotten a configure event */
/* This call is very important; it requests the next motion event.
@@ -137,41 +141,65 @@ scribble_motion_notify_event (GtkWidget *widget,
static gboolean
checkerboard_draw (GtkWidget *da,
cairo_t *cr,
gpointer data)
checkerboard_expose (GtkWidget *da,
GdkEventExpose *event,
gpointer data)
{
gint i, j, xcount, ycount, width, height;
gint i, j, xcount, ycount;
GdkGC *gc1, *gc2;
GdkColor color;
#define CHECK_SIZE 10
#define SPACING 2
/* At the start of a draw handler, a clip region has been set on
* the Cairo context, and the contents have been cleared to the
/* At the start of an expose handler, a clip region of event->area
* is set on the window, and event->area has been cleared to the
* widget's background color. The docs for
* gdk_window_begin_paint_region() give more details on how this
* works.
*/
/* It would be a bit more efficient to keep these
* GC's around instead of recreating on each expose, but
* this is the lazy/slow way.
*/
gc1 = gdk_gc_new (da->window);
color.red = 30000;
color.green = 0;
color.blue = 30000;
gdk_gc_set_rgb_fg_color (gc1, &color);
gc2 = gdk_gc_new (da->window);
color.red = 65535;
color.green = 65535;
color.blue = 65535;
gdk_gc_set_rgb_fg_color (gc2, &color);
xcount = 0;
width = gtk_widget_get_allocated_width (da);
height = gtk_widget_get_allocated_height (da);
i = SPACING;
while (i < width)
while (i < da->allocation.width)
{
j = SPACING;
ycount = xcount % 2; /* start with even/odd depending on row */
while (j < height)
while (j < da->allocation.height)
{
if (ycount % 2)
cairo_set_source_rgb (cr, 0.45777, 0, 0.45777);
else
cairo_set_source_rgb (cr, 1, 1, 1);
GdkGC *gc;
/* If we're outside the clip, this will do nothing.
if (ycount % 2)
gc = gc1;
else
gc = gc2;
/* If we're outside event->area, this will do nothing.
* It might be mildly more efficient if we handled
* the clipping ourselves, but again we're feeling lazy.
*/
cairo_rectangle (cr, i, j, CHECK_SIZE, CHECK_SIZE);
cairo_fill (cr);
gdk_draw_rectangle (da->window,
gc,
TRUE,
i, j,
CHECK_SIZE,
CHECK_SIZE);
j += CHECK_SIZE + SPACING;
++ycount;
@@ -181,6 +209,9 @@ checkerboard_draw (GtkWidget *da,
++xcount;
}
g_object_unref (gc1);
g_object_unref (gc2);
/* return TRUE because we've handled this event, so no
* further processing is required.
*/
@@ -192,9 +223,9 @@ close_window (void)
{
window = NULL;
if (surface)
g_object_unref (surface);
surface = NULL;
if (pixmap)
g_object_unref (pixmap);
pixmap = NULL;
}
GtkWidget *
@@ -239,8 +270,8 @@ do_drawingarea (GtkWidget *do_widget)
gtk_container_add (GTK_CONTAINER (frame), da);
g_signal_connect (da, "draw",
G_CALLBACK (checkerboard_draw), NULL);
g_signal_connect (da, "expose-event",
G_CALLBACK (checkerboard_expose), NULL);
/*
* Create the scribble area
@@ -261,10 +292,10 @@ do_drawingarea (GtkWidget *do_widget)
gtk_container_add (GTK_CONTAINER (frame), da);
/* Signals used to handle backing surface */
/* Signals used to handle backing pixmap */
g_signal_connect (da, "draw",
G_CALLBACK (scribble_draw), NULL);
g_signal_connect (da, "expose-event",
G_CALLBACK (scribble_expose_event), NULL);
g_signal_connect (da,"configure-event",
G_CALLBACK (scribble_configure_event), NULL);

View File

@@ -113,8 +113,8 @@ key_press_event (GtkWidget *text_view,
switch (event->keyval)
{
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
case GDK_Return:
case GDK_KP_Enter:
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
gtk_text_buffer_get_iter_at_mark (buffer, &iter,
gtk_text_buffer_get_insert (buffer));
@@ -225,8 +225,7 @@ motion_notify_event (GtkWidget *text_view,
set_cursor_if_appropriate (GTK_TEXT_VIEW (text_view), x, y);
gdk_window_get_pointer (gtk_widget_get_window (text_view),
NULL, NULL, NULL);
gdk_window_get_pointer (text_view->window, NULL, NULL, NULL);
return FALSE;
}
@@ -238,10 +237,9 @@ visibility_notify_event (GtkWidget *text_view,
GdkEventVisibility *event)
{
gint wx, wy, bx, by;
gdk_window_get_pointer (gtk_widget_get_window (text_view),
&wx, &wy, NULL);
gdk_window_get_pointer (text_view->window, &wx, &wy, NULL);
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
GTK_TEXT_WINDOW_WIDGET,
wx, wy, &bx, &by);

View File

@@ -120,8 +120,8 @@ do_iconview_edit (GtkWidget *do_widget)
gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view),
GTK_SELECTION_SINGLE);
gtk_icon_view_set_item_orientation (GTK_ICON_VIEW (icon_view),
GTK_ORIENTATION_HORIZONTAL);
gtk_icon_view_set_orientation (GTK_ICON_VIEW (icon_view),
GTK_ORIENTATION_HORIZONTAL);
gtk_icon_view_set_columns (GTK_ICON_VIEW (icon_view), 2);
gtk_icon_view_set_reorderable (GTK_ICON_VIEW (icon_view), TRUE);

View File

@@ -261,7 +261,7 @@ start_progressive_loading (GtkWidget *image)
}
static void
cleanup_callback (GObject *object,
cleanup_callback (GtkObject *object,
gpointer data)
{
if (load_timeout)

View File

@@ -223,6 +223,7 @@ static gchar *types[] =
"FALSE",
"TRUE",
"FILE ",
"GtkObject ",
"GtkColorSelection ",
"GtkWidget ",
"GtkButton ",
@@ -278,7 +279,7 @@ static gchar *types[] =
"GtkTreeStore ",
"GtkEntry ",
"GtkEditable ",
"GtkEditableInterface ",
"GtkEditableClass ",
"GdkPixmap ",
"GdkEventConfigure ",
"GdkEventMotion ",

View File

@@ -45,8 +45,8 @@ static void gtk_rotated_bin_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_rotated_bin_damage (GtkWidget *widget,
GdkEventExpose *event);
static gboolean gtk_rotated_bin_draw (GtkWidget *widget,
cairo_t *cr);
static gboolean gtk_rotated_bin_expose (GtkWidget *widget,
GdkEventExpose *offscreen);
static void gtk_rotated_bin_add (GtkContainer *container,
GtkWidget *child);
@@ -74,7 +74,7 @@ to_child (GtkRotatedBin *bin,
s = sin (bin->angle);
c = cos (bin->angle);
gtk_widget_get_allocation (bin->child, &child_area);
child_area = bin->child->allocation;
w = c * child_area.width + s * child_area.height;
h = s * child_area.width + c * child_area.height;
@@ -114,7 +114,7 @@ to_parent (GtkRotatedBin *bin,
s = sin (bin->angle);
c = cos (bin->angle);
gtk_widget_get_allocation (bin->child, &child_area);
child_area = bin->child->allocation;
w = c * child_area.width + s * child_area.height;
h = s * child_area.width + c * child_area.height;
@@ -150,7 +150,7 @@ gtk_rotated_bin_class_init (GtkRotatedBinClass *klass)
widget_class->unrealize = gtk_rotated_bin_unrealize;
widget_class->size_request = gtk_rotated_bin_size_request;
widget_class->size_allocate = gtk_rotated_bin_size_allocate;
widget_class->draw = gtk_rotated_bin_draw;
widget_class->expose_event = gtk_rotated_bin_expose;
g_signal_override_class_closure (g_signal_lookup ("damage-event", GTK_TYPE_WIDGET),
GTK_TYPE_ROTATED_BIN,
@@ -188,7 +188,7 @@ pick_offscreen_child (GdkWindow *offscreen_window,
{
to_child (bin, widget_x, widget_y, &x, &y);
gtk_widget_get_allocation (bin->child, &child_area);
child_area = bin->child->allocation;
if (x >= 0 && x < child_area.width &&
y >= 0 && y < child_area.height)
@@ -224,9 +224,6 @@ static void
gtk_rotated_bin_realize (GtkWidget *widget)
{
GtkRotatedBin *bin = GTK_ROTATED_BIN (widget);
GtkAllocation allocation;
GtkStyle *style;
GdkWindow *window;
GdkWindowAttr attributes;
gint attributes_mask;
guint border_width;
@@ -234,13 +231,12 @@ gtk_rotated_bin_realize (GtkWidget *widget)
gtk_widget_set_realized (widget, TRUE);
gtk_widget_get_allocation (widget, &allocation);
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
attributes.x = allocation.x + border_width;
attributes.y = allocation.y + border_width;
attributes.width = allocation.width - 2 * border_width;
attributes.height = allocation.height - 2 * border_width;
attributes.x = widget->allocation.x + border_width;
attributes.y = widget->allocation.y + border_width;
attributes.width = widget->allocation.width - 2 * border_width;
attributes.height = widget->allocation.height - 2 * border_width;
attributes.window_type = GDK_WINDOW_CHILD;
attributes.event_mask = gtk_widget_get_events (widget)
| GDK_EXPOSURE_MASK
@@ -252,15 +248,15 @@ gtk_rotated_bin_realize (GtkWidget *widget)
| GDK_LEAVE_NOTIFY_MASK;
attributes.visual = gtk_widget_get_visual (widget);
attributes.colormap = gtk_widget_get_colormap (widget);
attributes.wclass = GDK_INPUT_OUTPUT;
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes, attributes_mask);
gtk_widget_set_window (widget, window);
gdk_window_set_user_data (window, widget);
g_signal_connect (window, "pick-embedded-child",
widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes, attributes_mask);
gdk_window_set_user_data (widget->window, widget);
g_signal_connect (widget->window, "pick-embedded-child",
G_CALLBACK (pick_offscreen_child), bin);
attributes.window_type = GDK_WINDOW_OFFSCREEN;
@@ -268,27 +264,24 @@ gtk_rotated_bin_realize (GtkWidget *widget)
child_requisition.width = child_requisition.height = 0;
if (bin->child && gtk_widget_get_visible (bin->child))
{
GtkAllocation child_allocation;
gtk_widget_get_allocation (bin->child, &child_allocation);
attributes.width = child_allocation.width;
attributes.height = child_allocation.height;
attributes.width = bin->child->allocation.width;
attributes.height = bin->child->allocation.height;
}
bin->offscreen_window = gdk_window_new (gtk_widget_get_root_window (widget),
&attributes, attributes_mask);
gdk_window_set_user_data (bin->offscreen_window, widget);
if (bin->child)
gtk_widget_set_parent_window (bin->child, bin->offscreen_window);
gdk_offscreen_window_set_embedder (bin->offscreen_window, window);
gdk_offscreen_window_set_embedder (bin->offscreen_window, widget->window);
g_signal_connect (bin->offscreen_window, "to-embedder",
G_CALLBACK (offscreen_window_to_parent), bin);
g_signal_connect (bin->offscreen_window, "from-embedder",
G_CALLBACK (offscreen_window_from_parent), bin);
gtk_widget_style_attach (widget);
style = gtk_widget_get_style (widget);
gtk_style_set_background (style, window, GTK_STATE_NORMAL);
gtk_style_set_background (style, bin->offscreen_window, GTK_STATE_NORMAL);
widget->style = gtk_style_attach (widget->style, widget->window);
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
gtk_style_set_background (widget->style, bin->offscreen_window, GTK_STATE_NORMAL);
gdk_window_show (bin->offscreen_window);
}
@@ -391,8 +384,7 @@ gtk_rotated_bin_size_request (GtkWidget *widget,
child_requisition.height = 0;
if (bin->child && gtk_widget_get_visible (bin->child))
gtk_widget_get_preferred_size ( (bin->child),
&child_requisition, NULL);
gtk_widget_size_request (bin->child, &child_requisition);
s = sin (bin->angle);
c = cos (bin->angle);
@@ -413,7 +405,7 @@ gtk_rotated_bin_size_allocate (GtkWidget *widget,
gint w, h;
gdouble s, c;
gtk_widget_set_allocation (widget, allocation);
widget->allocation = *allocation;
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
@@ -421,7 +413,7 @@ gtk_rotated_bin_size_allocate (GtkWidget *widget,
h = allocation->height - border_width * 2;
if (gtk_widget_get_realized (widget))
gdk_window_move_resize (gtk_widget_get_window (widget),
gdk_window_move_resize (widget->window,
allocation->x + border_width,
allocation->y + border_width,
w, h);
@@ -434,8 +426,7 @@ gtk_rotated_bin_size_allocate (GtkWidget *widget,
s = sin (bin->angle);
c = cos (bin->angle);
gtk_widget_get_preferred_size (bin->child,
&child_requisition, NULL);
gtk_widget_get_child_requisition (bin->child, &child_requisition);
child_allocation.x = 0;
child_allocation.y = 0;
child_allocation.height = child_requisition.height;
@@ -463,67 +454,69 @@ static gboolean
gtk_rotated_bin_damage (GtkWidget *widget,
GdkEventExpose *event)
{
gdk_window_invalidate_rect (gtk_widget_get_window (widget),
NULL, FALSE);
gdk_window_invalidate_rect (widget->window, NULL, FALSE);
return TRUE;
}
static gboolean
gtk_rotated_bin_draw (GtkWidget *widget,
cairo_t *cr)
gtk_rotated_bin_expose (GtkWidget *widget,
GdkEventExpose *event)
{
GtkRotatedBin *bin = GTK_ROTATED_BIN (widget);
GdkWindow *window;
gint width, height;
gdouble s, c;
gdouble w, h;
window = gtk_widget_get_window (widget);
if (gtk_cairo_should_draw_window (cr, window))
if (gtk_widget_is_drawable (widget))
{
cairo_surface_t *surface;
GtkAllocation child_area;
if (bin->child && gtk_widget_get_visible (bin->child))
if (event->window == widget->window)
{
surface = gdk_offscreen_window_get_surface (bin->offscreen_window);
gtk_widget_get_allocation (bin->child, &child_area);
GdkPixmap *pixmap;
GtkAllocation child_area;
cairo_t *cr;
/* transform */
s = sin (bin->angle);
c = cos (bin->angle);
w = c * child_area.width + s * child_area.height;
h = s * child_area.width + c * child_area.height;
if (bin->child && gtk_widget_get_visible (bin->child))
{
pixmap = gdk_offscreen_window_get_pixmap (bin->offscreen_window);
child_area = bin->child->allocation;
cairo_translate (cr, (w - child_area.width) / 2, (h - child_area.height) / 2);
cairo_translate (cr, child_area.width / 2, child_area.height / 2);
cairo_rotate (cr, bin->angle);
cairo_translate (cr, -child_area.width / 2, -child_area.height / 2);
cr = gdk_cairo_create (widget->window);
/* clip */
cairo_rectangle (cr,
0, 0,
gdk_window_get_width (bin->offscreen_window),
gdk_window_get_height (bin->offscreen_window));
cairo_clip (cr);
/* paint */
cairo_set_source_surface (cr, surface, 0, 0);
cairo_paint (cr);
/* transform */
s = sin (bin->angle);
c = cos (bin->angle);
w = c * child_area.width + s * child_area.height;
h = s * child_area.width + c * child_area.height;
cairo_translate (cr, (w - child_area.width) / 2, (h - child_area.height) / 2);
cairo_translate (cr, child_area.width / 2, child_area.height / 2);
cairo_rotate (cr, bin->angle);
cairo_translate (cr, -child_area.width / 2, -child_area.height / 2);
/* clip */
gdk_drawable_get_size (pixmap, &width, &height);
cairo_rectangle (cr, 0, 0, width, height);
cairo_clip (cr);
/* paint */
gdk_cairo_set_source_pixmap (cr, pixmap, 0, 0);
cairo_paint (cr);
cairo_destroy (cr);
}
}
}
if (gtk_cairo_should_draw_window (cr, bin->offscreen_window))
{
gtk_paint_flat_box (gtk_widget_get_style (widget), cr,
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
widget, "blah",
0, 0,
gdk_window_get_width (bin->offscreen_window),
gdk_window_get_height (bin->offscreen_window));
else if (event->window == bin->offscreen_window)
{
gtk_paint_flat_box (widget->style, event->window,
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
&event->area, widget, "blah",
0, 0, -1, -1);
if (bin->child)
gtk_container_propagate_draw (GTK_CONTAINER (widget),
bin->child,
cr);
if (bin->child)
gtk_container_propagate_expose (GTK_CONTAINER (widget),
bin->child,
event);
}
}
return FALSE;

View File

@@ -41,8 +41,8 @@ static void gtk_mirror_bin_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_mirror_bin_damage (GtkWidget *widget,
GdkEventExpose *event);
static gboolean gtk_mirror_bin_draw (GtkWidget *widget,
cairo_t *cr);
static gboolean gtk_mirror_bin_expose (GtkWidget *widget,
GdkEventExpose *offscreen);
static void gtk_mirror_bin_add (GtkContainer *container,
GtkWidget *child);
@@ -88,7 +88,7 @@ gtk_mirror_bin_class_init (GtkMirrorBinClass *klass)
widget_class->unrealize = gtk_mirror_bin_unrealize;
widget_class->size_request = gtk_mirror_bin_size_request;
widget_class->size_allocate = gtk_mirror_bin_size_allocate;
widget_class->draw = gtk_mirror_bin_draw;
widget_class->expose_event = gtk_mirror_bin_expose;
g_signal_override_class_closure (g_signal_lookup ("damage-event", GTK_TYPE_WIDGET),
GTK_TYPE_MIRROR_BIN,
@@ -126,7 +126,7 @@ pick_offscreen_child (GdkWindow *offscreen_window,
{
to_child (bin, widget_x, widget_y, &x, &y);
gtk_widget_get_allocation (bin->child, &child_area);
child_area = bin->child->allocation;
if (x >= 0 && x < child_area.width &&
y >= 0 && y < child_area.height)
@@ -162,9 +162,6 @@ static void
gtk_mirror_bin_realize (GtkWidget *widget)
{
GtkMirrorBin *bin = GTK_MIRROR_BIN (widget);
GtkAllocation allocation;
GtkStyle *style;
GdkWindow *window;
GdkWindowAttr attributes;
gint attributes_mask;
guint border_width;
@@ -172,13 +169,12 @@ gtk_mirror_bin_realize (GtkWidget *widget)
gtk_widget_set_realized (widget, TRUE);
gtk_widget_get_allocation (widget, &allocation);
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
attributes.x = allocation.x + border_width;
attributes.y = allocation.y + border_width;
attributes.width = allocation.width - 2 * border_width;
attributes.height = allocation.height - 2 * border_width;
attributes.x = widget->allocation.x + border_width;
attributes.y = widget->allocation.y + border_width;
attributes.width = widget->allocation.width - 2 * border_width;
attributes.height = widget->allocation.height - 2 * border_width;
attributes.window_type = GDK_WINDOW_CHILD;
attributes.event_mask = gtk_widget_get_events (widget)
| GDK_EXPOSURE_MASK
@@ -190,15 +186,15 @@ gtk_mirror_bin_realize (GtkWidget *widget)
| GDK_LEAVE_NOTIFY_MASK;
attributes.visual = gtk_widget_get_visual (widget);
attributes.colormap = gtk_widget_get_colormap (widget);
attributes.wclass = GDK_INPUT_OUTPUT;
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes, attributes_mask);
gtk_widget_set_window (widget, window);
gdk_window_set_user_data (window, widget);
g_signal_connect (window, "pick-embedded-child",
widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes, attributes_mask);
gdk_window_set_user_data (widget->window, widget);
g_signal_connect (widget->window, "pick-embedded-child",
G_CALLBACK (pick_offscreen_child), bin);
attributes.window_type = GDK_WINDOW_OFFSCREEN;
@@ -206,27 +202,24 @@ gtk_mirror_bin_realize (GtkWidget *widget)
child_requisition.width = child_requisition.height = 0;
if (bin->child && gtk_widget_get_visible (bin->child))
{
GtkAllocation child_allocation;
gtk_widget_get_allocation (bin->child, &child_allocation);
attributes.width = child_allocation.width;
attributes.height = child_allocation.height;
attributes.width = bin->child->allocation.width;
attributes.height = bin->child->allocation.height;
}
bin->offscreen_window = gdk_window_new (gtk_widget_get_root_window (widget),
&attributes, attributes_mask);
gdk_window_set_user_data (bin->offscreen_window, widget);
if (bin->child)
gtk_widget_set_parent_window (bin->child, bin->offscreen_window);
gdk_offscreen_window_set_embedder (bin->offscreen_window, window);
gdk_offscreen_window_set_embedder (bin->offscreen_window, widget->window);
g_signal_connect (bin->offscreen_window, "to-embedder",
G_CALLBACK (offscreen_window_to_parent), bin);
g_signal_connect (bin->offscreen_window, "from-embedder",
G_CALLBACK (offscreen_window_from_parent), bin);
gtk_widget_style_attach (widget);
style = gtk_widget_get_style (widget);
gtk_style_set_background (style, window, GTK_STATE_NORMAL);
gtk_style_set_background (style, bin->offscreen_window, GTK_STATE_NORMAL);
widget->style = gtk_style_attach (widget->style, widget->window);
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
gtk_style_set_background (widget->style, bin->offscreen_window, GTK_STATE_NORMAL);
gdk_window_show (bin->offscreen_window);
}
@@ -315,8 +308,7 @@ gtk_mirror_bin_size_request (GtkWidget *widget,
child_requisition.height = 0;
if (bin->child && gtk_widget_get_visible (bin->child))
gtk_widget_get_preferred_size ( (bin->child),
&child_requisition, NULL);
gtk_widget_size_request (bin->child, &child_requisition);
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
requisition->width = border_width * 2 + child_requisition.width + 10;
@@ -331,7 +323,7 @@ gtk_mirror_bin_size_allocate (GtkWidget *widget,
gint w, h;
guint border_width;
gtk_widget_set_allocation (widget, allocation);
widget->allocation = *allocation;
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
@@ -339,7 +331,7 @@ gtk_mirror_bin_size_allocate (GtkWidget *widget,
h = allocation->height - border_width * 2;
if (gtk_widget_get_realized (widget))
gdk_window_move_resize (gtk_widget_get_window (widget),
gdk_window_move_resize (widget->window,
allocation->x + border_width,
allocation->y + border_width,
w, h);
@@ -349,8 +341,7 @@ gtk_mirror_bin_size_allocate (GtkWidget *widget,
GtkRequisition child_requisition;
GtkAllocation child_allocation;
gtk_widget_get_preferred_size (bin->child,
&child_requisition, NULL);
gtk_widget_get_child_requisition (bin->child, &child_requisition);
child_allocation.x = 0;
child_allocation.y = 0;
child_allocation.height = child_requisition.height;
@@ -369,70 +360,82 @@ static gboolean
gtk_mirror_bin_damage (GtkWidget *widget,
GdkEventExpose *event)
{
gdk_window_invalidate_rect (gtk_widget_get_window (widget),
NULL, FALSE);
gdk_window_invalidate_rect (widget->window, NULL, FALSE);
return TRUE;
}
static gboolean
gtk_mirror_bin_draw (GtkWidget *widget,
cairo_t *cr)
gtk_mirror_bin_expose (GtkWidget *widget,
GdkEventExpose *event)
{
GtkMirrorBin *bin = GTK_MIRROR_BIN (widget);
GdkWindow *window;
gint width, height;
window = gtk_widget_get_window (widget);
if (gtk_cairo_should_draw_window (cr, window))
if (gtk_widget_is_drawable (widget))
{
cairo_surface_t *surface;
cairo_matrix_t matrix;
cairo_pattern_t *mask;
int height;
if (bin->child && gtk_widget_get_visible (bin->child))
if (event->window == widget->window)
{
surface = gdk_offscreen_window_get_surface (bin->offscreen_window);
height = gdk_window_get_height (bin->offscreen_window);
GdkPixmap *pixmap;
cairo_t *cr;
cairo_matrix_t matrix;
cairo_pattern_t *mask;
/* paint the offscreen child */
cairo_set_source_surface (cr, surface, 0, 0);
cairo_paint (cr);
if (bin->child && gtk_widget_get_visible (bin->child))
{
pixmap = gdk_offscreen_window_get_pixmap (bin->offscreen_window);
gdk_drawable_get_size (pixmap, &width, &height);
cairo_matrix_init (&matrix, 1.0, 0.0, 0.3, 1.0, 0.0, 0.0);
cairo_matrix_scale (&matrix, 1.0, -1.0);
cairo_matrix_translate (&matrix, -10, - 3 * height - 10);
cairo_transform (cr, &matrix);
cr = gdk_cairo_create (widget->window);
cairo_set_source_surface (cr, surface, 0, height);
cairo_save (cr);
/* create linear gradient as mask-pattern to fade out the source */
mask = cairo_pattern_create_linear (0.0, height, 0.0, 2*height);
cairo_pattern_add_color_stop_rgba (mask, 0.0, 0.0, 0.0, 0.0, 0.0);
cairo_pattern_add_color_stop_rgba (mask, 0.25, 0.0, 0.0, 0.0, 0.01);
cairo_pattern_add_color_stop_rgba (mask, 0.5, 0.0, 0.0, 0.0, 0.25);
cairo_pattern_add_color_stop_rgba (mask, 0.75, 0.0, 0.0, 0.0, 0.5);
cairo_pattern_add_color_stop_rgba (mask, 1.0, 0.0, 0.0, 0.0, 1.0);
cairo_rectangle (cr, 0, 0, width, height);
cairo_clip (cr);
/* paint the reflection */
cairo_mask (cr, mask);
/* paint the offscreen child */
gdk_cairo_set_source_pixmap (cr, pixmap, 0, 0);
cairo_paint (cr);
cairo_pattern_destroy (mask);
cairo_restore (cr);
cairo_matrix_init (&matrix, 1.0, 0.0, 0.3, 1.0, 0.0, 0.0);
cairo_matrix_scale (&matrix, 1.0, -1.0);
cairo_matrix_translate (&matrix, -10, - 3 * height - 10);
cairo_transform (cr, &matrix);
cairo_rectangle (cr, 0, height, width, height);
cairo_clip (cr);
gdk_cairo_set_source_pixmap (cr, pixmap, 0, height);
/* create linear gradient as mask-pattern to fade out the source */
mask = cairo_pattern_create_linear (0.0, height, 0.0, 2*height);
cairo_pattern_add_color_stop_rgba (mask, 0.0, 0.0, 0.0, 0.0, 0.0);
cairo_pattern_add_color_stop_rgba (mask, 0.25, 0.0, 0.0, 0.0, 0.01);
cairo_pattern_add_color_stop_rgba (mask, 0.5, 0.0, 0.0, 0.0, 0.25);
cairo_pattern_add_color_stop_rgba (mask, 0.75, 0.0, 0.0, 0.0, 0.5);
cairo_pattern_add_color_stop_rgba (mask, 1.0, 0.0, 0.0, 0.0, 1.0);
/* paint the reflection */
cairo_mask (cr, mask);
cairo_pattern_destroy (mask);
cairo_destroy (cr);
}
}
}
else if (gtk_cairo_should_draw_window (cr, bin->offscreen_window))
{
gtk_paint_flat_box (gtk_widget_get_style (widget), cr,
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
widget, "blah",
0, 0,
gdk_window_get_width (bin->offscreen_window),
gdk_window_get_height (bin->offscreen_window));
else if (event->window == bin->offscreen_window)
{
gtk_paint_flat_box (widget->style, event->window,
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
&event->area, widget, "blah",
0, 0, -1, -1);
if (bin->child)
gtk_container_propagate_draw (GTK_CONTAINER (widget),
bin->child,
cr);
if (bin->child)
gtk_container_propagate_expose (GTK_CONTAINER (widget),
bin->child,
event);
}
}
return FALSE;

View File

@@ -17,23 +17,17 @@ void
toggle_resize (GtkWidget *widget,
GtkWidget *child)
{
GtkWidget *parent;
GtkPaned *paned;
gboolean is_child1;
GtkPaned *paned = GTK_PANED (child->parent);
gboolean is_child1 = (child == gtk_paned_get_child1 (paned));
gboolean resize, shrink;
parent = gtk_widget_get_parent (child);
paned = GTK_PANED (parent);
is_child1 = (child == gtk_paned_get_child1 (paned));
gtk_container_child_get (GTK_CONTAINER (paned), child,
"resize", &resize,
"shrink", &shrink,
NULL);
g_object_ref (child);
gtk_container_remove (GTK_CONTAINER (parent), child);
gtk_container_remove (GTK_CONTAINER (child->parent), child);
if (is_child1)
gtk_paned_pack1 (paned, child, !resize, shrink);
else
@@ -45,23 +39,17 @@ void
toggle_shrink (GtkWidget *widget,
GtkWidget *child)
{
GtkWidget *parent;
GtkPaned *paned;
gboolean is_child1;
GtkPaned *paned = GTK_PANED (child->parent);
gboolean is_child1 = (child == gtk_paned_get_child1 (paned));
gboolean resize, shrink;
parent = gtk_widget_get_parent (child);
paned = GTK_PANED (parent);
is_child1 = (child == gtk_paned_get_child1 (paned));
gtk_container_child_get (GTK_CONTAINER (paned), child,
"resize", &resize,
"shrink", &shrink,
NULL);
g_object_ref (child);
gtk_container_remove (GTK_CONTAINER (parent), child);
gtk_container_remove (GTK_CONTAINER (child->parent), child);
if (is_child1)
gtk_paned_pack1 (paned, child, resize, !shrink);
else

View File

@@ -96,12 +96,24 @@ load_pixbufs (GError **error)
/* Expose callback for the drawing area */
static gint
draw_cb (GtkWidget *widget,
cairo_t *cr,
gpointer data)
expose_cb (GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
gdk_cairo_set_source_pixbuf (cr, frame, 0, 0);
cairo_paint (cr);
guchar *pixels;
int rowstride;
rowstride = gdk_pixbuf_get_rowstride (frame);
pixels = gdk_pixbuf_get_pixels (frame) + rowstride * event->area.y + event->area.x * 3;
gdk_draw_rgb_image_dithalign (widget->window,
widget->style->black_gc,
event->area.x, event->area.y,
event->area.width, event->area.height,
GDK_RGB_DITHER_NORMAL,
pixels, rowstride,
event->area.x, event->area.y);
return TRUE;
}
@@ -186,7 +198,7 @@ timeout (gpointer data)
static guint timeout_id;
static void
cleanup_callback (GObject *object,
cleanup_callback (GtkObject *object,
gpointer data)
{
g_source_remove (timeout_id);
@@ -239,8 +251,8 @@ do_pixbufs (GtkWidget *do_widget)
da = gtk_drawing_area_new ();
g_signal_connect (da, "draw",
G_CALLBACK (draw_cb), NULL);
g_signal_connect (da, "expose-event",
G_CALLBACK (expose_cb), NULL);
gtk_container_add (GTK_CONTAINER (window), da);

View File

@@ -91,9 +91,9 @@ create_fancy_attr_list_for_layout (PangoLayout *layout)
}
static gboolean
rotated_text_draw (GtkWidget *widget,
cairo_t *cr,
gpointer data)
rotated_text_expose_event (GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
#define RADIUS 150
#define N_WORDS 5
@@ -103,20 +103,21 @@ rotated_text_draw (GtkWidget *widget,
PangoLayout *layout;
PangoFontDescription *desc;
cairo_t *cr;
cairo_pattern_t *pattern;
PangoAttrList *attrs;
int width = widget->allocation.width;
int height = widget->allocation.height;
double device_radius;
int width, height;
int i;
/* Create a cairo context and set up a transformation matrix so that the user
* space coordinates for the centered square where we draw are [-RADIUS, RADIUS],
* [-RADIUS, RADIUS].
* We first center, then change the scale. */
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
cr = gdk_cairo_create (widget->window);
device_radius = MIN (width, height) / 2.;
cairo_translate (cr,
device_radius + (width - 2 * device_radius) / 2,
@@ -166,6 +167,7 @@ rotated_text_draw (GtkWidget *widget,
g_object_unref (layout);
g_object_unref (context);
cairo_pattern_destroy (pattern);
cairo_destroy (cr);
return FALSE;
}
@@ -201,8 +203,8 @@ do_rotated_text (GtkWidget *do_widget)
/* This overrides the background color from the theme */
gtk_widget_modify_bg (drawing_area, GTK_STATE_NORMAL, &white);
g_signal_connect (drawing_area, "draw",
G_CALLBACK (rotated_text_draw), NULL);
g_signal_connect (drawing_area, "expose-event",
G_CALLBACK (rotated_text_expose_event), NULL);
/* And a label */

View File

@@ -58,10 +58,18 @@ stock_item_info_copy (StockItemInfo *src)
return info;
}
static
G_DEFINE_BOXED_TYPE (StockItemInfo, stock_item_info,
stock_item_info_copy,
stock_item_info_free)
static GType
stock_item_info_get_type (void)
{
static GType our_type = 0;
if (our_type == 0)
our_type = g_boxed_type_register_static ("StockItemInfo",
(GBoxedCopyFunc) stock_item_info_copy,
(GBoxedFreeFunc) stock_item_info_free);
return our_type;
}
typedef struct _StockItemDisplay StockItemDisplay;
struct _StockItemDisplay

View File

@@ -14,9 +14,17 @@
static void easter_egg_callback (GtkWidget *button, gpointer data);
#define gray50_width 2
#define gray50_height 2
static char gray50_bits[] = {
0x02, 0x01
};
static void
create_tags (GtkTextBuffer *buffer)
{
GdkBitmap *stipple;
/* Create a bunch of tags. Note that it's also possible to
* create tags with gtk_text_tag_new() then add them to the
* tag table for the buffer, gtk_text_buffer_create_tag() is
@@ -66,6 +74,18 @@ create_tags (GtkTextBuffer *buffer)
gtk_text_buffer_create_tag (buffer, "red_background",
"background", "red", NULL);
stipple = gdk_bitmap_create_from_data (NULL,
gray50_bits, gray50_width,
gray50_height);
gtk_text_buffer_create_tag (buffer, "background_stipple",
"background_stipple", stipple, NULL);
gtk_text_buffer_create_tag (buffer, "foreground_stipple",
"foreground_stipple", stipple, NULL);
g_object_unref (stipple);
gtk_text_buffer_create_tag (buffer, "big_gap_before_line",
"pixels_above_lines", 30, NULL);
@@ -207,9 +227,17 @@ insert_text (GtkTextBuffer *buffer)
"red_background", NULL);
gtk_text_buffer_insert (buffer, &iter, " or even ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
"a blue foreground on red background", -1,
"a stippled red background", -1,
"red_background",
"background_stipple",
NULL);
gtk_text_buffer_insert (buffer, &iter, " or ", -1);
gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
"a stippled blue foreground on solid red background", -1,
"blue_foreground",
"red_background",
"foreground_stipple",
NULL);
gtk_text_buffer_insert (buffer, &iter, " (select that to read it) can be used.\n\n", -1);

View File

@@ -81,13 +81,19 @@ canvas_item_draw (const CanvasItem *item,
}
static gboolean
canvas_draw (GtkWidget *widget,
cairo_t *cr)
canvas_expose_event (GtkWidget *widget,
GdkEventExpose *event)
{
cairo_t *cr;
GList *iter;
cr = gdk_cairo_create (widget->window);
gdk_cairo_region (cr, event->region);
cairo_clip (cr);
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_paint (cr);
cairo_rectangle (cr, 0, 0, widget->allocation.width, widget->allocation.height);
cairo_fill (cr);
for (iter = canvas_items; iter; iter = iter->next)
canvas_item_draw (iter->data, cr, FALSE);
@@ -95,6 +101,8 @@ canvas_draw (GtkWidget *widget,
if (drop_item)
canvas_item_draw (drop_item, cr, TRUE);
cairo_destroy (cr);
return TRUE;
}
@@ -165,7 +173,6 @@ palette_drag_data_received (GtkWidget *widget,
guint time,
gpointer data)
{
GtkAllocation allocation;
GtkToolItemGroup *drop_group = NULL;
GtkWidget *drag_palette = gtk_drag_get_source_widget (context);
GtkWidget *drag_item = NULL;
@@ -186,13 +193,10 @@ palette_drag_data_received (GtkWidget *widget,
GTK_TOOL_ITEM_GROUP (drag_item),
drop_group);
else if (GTK_IS_TOOL_ITEM (drag_item) && drop_group)
{
gtk_widget_get_allocation (GTK_WIDGET (drop_group), &allocation);
palette_drop_item (GTK_TOOL_ITEM (drag_item),
drop_group,
x - allocation.x,
y - allocation.y);
}
palette_drop_item (GTK_TOOL_ITEM (drag_item),
drop_group,
x - GTK_WIDGET (drop_group)->allocation.x,
y - GTK_WIDGET (drop_group)->allocation.y);
}
/********************************/
@@ -368,13 +372,11 @@ on_combo_orientation_changed (GtkComboBox *combo_box,
gpointer user_data)
{
GtkToolPalette *palette = GTK_TOOL_PALETTE (user_data);
GtkScrolledWindow *sw;
GtkScrolledWindow *sw = GTK_SCROLLED_WINDOW (GTK_WIDGET (palette)->parent);
GtkTreeModel *model = gtk_combo_box_get_model (combo_box);
GtkTreeIter iter;
gint val = 0;
sw = GTK_SCROLLED_WINDOW (gtk_widget_get_parent (GTK_WIDGET (palette)));
if (!gtk_combo_box_get_active_iter (combo_box, &iter))
return;
@@ -561,7 +563,7 @@ do_toolpalette (GtkWidget *do_widget)
gtk_widget_set_app_paintable (contents, TRUE);
g_object_connect (contents,
"signal::draw", canvas_draw, NULL,
"signal::expose-event", canvas_expose_event, NULL,
"signal::drag-data-received", passive_canvas_drag_data_received, NULL,
NULL);
@@ -589,7 +591,7 @@ do_toolpalette (GtkWidget *do_widget)
gtk_widget_set_app_paintable (contents, TRUE);
g_object_connect (contents,
"signal::draw", canvas_draw, NULL,
"signal::expose-event", canvas_expose_event, NULL,
"signal::drag-motion", interactive_canvas_drag_motion, NULL,
"signal::drag-data-received", interactive_canvas_drag_data_received, NULL,
"signal::drag-leave", interactive_canvas_drag_leave, NULL,

View File

@@ -86,11 +86,23 @@ load_pixbufs (void)
}
/* Expose callback for the drawing area */
static gboolean
draw_cb (GtkWidget *widget, cairo_t *cr, gpointer data)
static gint
expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
gdk_cairo_set_source_pixbuf (cr, frame, 0, 0);
cairo_paint (cr);
guchar *pixels;
int rowstride;
rowstride = gdk_pixbuf_get_rowstride (frame);
pixels = gdk_pixbuf_get_pixels (frame) + rowstride * event->area.y + event->area.x * 3;
gdk_draw_rgb_image_dithalign (widget->window,
widget->style->black_gc,
event->area.x, event->area.y,
event->area.width, event->area.height,
GDK_RGB_DITHER_NORMAL,
pixels, rowstride,
event->area.x, event->area.y);
return TRUE;
}
@@ -173,7 +185,7 @@ static guint timeout_id;
/* Destroy handler for the window */
static void
destroy_cb (GObject *object, gpointer data)
destroy_cb (GtkObject *object, gpointer data)
{
g_source_remove (timeout_id);
timeout_id = 0;
@@ -208,8 +220,8 @@ main (int argc, char **argv)
da = gtk_drawing_area_new ();
g_signal_connect (da, "draw",
G_CALLBACK (draw_cb), NULL);
g_signal_connect (da, "expose_event",
G_CALLBACK (expose_cb), NULL);
gtk_container_add (GTK_CONTAINER (window), da);

View File

@@ -369,16 +369,16 @@ main (int argc, char **argv)
gtk_label_new ("Source"));
tag = gtk_text_buffer_create_tag (info_buffer, "title");
g_object_set (tag,
"font", "Sans 18",
NULL);
gtk_object_set (GTK_OBJECT (tag),
"font", "Sans 18",
NULL);
tag = gtk_text_buffer_create_tag (info_buffer, "source");
g_object_set (tag,
"font", "Courier 10",
"pixels_above_lines", 0,
"pixels_below_lines", 0,
NULL);
gtk_object_set (GTK_OBJECT (tag),
"font", "Courier 10",
"pixels_above_lines", 0,
"pixels_below_lines", 0,
NULL);
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
gtk_widget_show_all (window);

View File

@@ -111,9 +111,11 @@ main (int argc, char **argv)
gtk_init (&argc, &argv);
gtk_widget_set_default_colormap (gdk_rgb_get_colormap ());
root = gdk_get_default_root_window ();
pixbuf = gdk_pixbuf_get_from_window (root,
0, 0, 150, 160);
pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
0, 0, 0, 0, 150, 160);
/* PASS */
g_debug ("try to save PNG with a profile");

115
demos/testpixbuf-drawable.c Normal file
View File

@@ -0,0 +1,115 @@
#include "config.h"
#include <gtk/gtk.h>
int
close_app (GtkWidget *widget, gpointer data)
{
gtk_main_quit ();
return TRUE;
}
int
expose_cb (GtkWidget *drawing_area, GdkEventExpose *evt, gpointer data)
{
GdkPixbuf *pixbuf;
pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (drawing_area), "pixbuf");
if (gdk_pixbuf_get_has_alpha (pixbuf))
{
gdk_draw_rgb_32_image (drawing_area->window,
drawing_area->style->black_gc,
evt->area.x, evt->area.y,
evt->area.width,
evt->area.height,
GDK_RGB_DITHER_MAX,
gdk_pixbuf_get_pixels (pixbuf) +
(evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +
(evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
gdk_pixbuf_get_rowstride (pixbuf));
}
else
{
gdk_draw_rgb_image (drawing_area->window,
drawing_area->style->black_gc,
evt->area.x, evt->area.y,
evt->area.width,
evt->area.height,
GDK_RGB_DITHER_NORMAL,
gdk_pixbuf_get_pixels (pixbuf) +
(evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +
(evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
gdk_pixbuf_get_rowstride (pixbuf));
}
return FALSE;
}
int
configure_cb (GtkWidget *drawing_area, GdkEventConfigure *evt, gpointer data)
{
GdkPixbuf *pixbuf;
pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (drawing_area), "pixbuf");
g_print ("X:%d Y:%d\n", evt->width, evt->height);
if (evt->width != gdk_pixbuf_get_width (pixbuf) || evt->height != gdk_pixbuf_get_height (pixbuf))
{
GdkWindow *root;
GdkPixbuf *new_pixbuf;
root = gdk_get_default_root_window ();
new_pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
0, 0, 0, 0, evt->width, evt->height);
g_object_set_data (G_OBJECT (drawing_area), "pixbuf", new_pixbuf);
g_object_unref (pixbuf);
}
return FALSE;
}
extern void pixbuf_init (void);
int
main (int argc, char **argv)
{
GdkWindow *root;
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *drawing_area;
GdkPixbuf *pixbuf;
pixbuf_init ();
gtk_init (&argc, &argv);
gdk_rgb_set_verbose (TRUE);
gtk_widget_set_default_colormap (gdk_rgb_get_colormap ());
root = gdk_get_default_root_window ();
pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
0, 0, 0, 0, 150, 160);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "delete_event",
G_CALLBACK (close_app), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (close_app), NULL);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
drawing_area = gtk_drawing_area_new ();
gtk_widget_set_size_request (GTK_WIDGET (drawing_area),
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf));
g_signal_connect (drawing_area, "expose_event",
G_CALLBACK (expose_cb), NULL);
g_signal_connect (drawing_area, "configure_event",
G_CALLBACK (configure_cb), NULL);
g_object_set_data (G_OBJECT (drawing_area), "pixbuf", pixbuf);
gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}

View File

@@ -307,17 +307,36 @@ close_app (GtkWidget *widget, gpointer data)
return TRUE;
}
static gboolean
draw_cb (GtkWidget *drawing_area, cairo_t *cr, gpointer data)
static int
expose_cb (GtkWidget *drawing_area, GdkEventExpose *evt, gpointer data)
{
GdkPixbuf *pixbuf;
pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (drawing_area),
"pixbuf");
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_paint (cr);
if (gdk_pixbuf_get_has_alpha (pixbuf)) {
gdk_draw_rgb_32_image (drawing_area->window,
drawing_area->style->black_gc,
evt->area.x, evt->area.y,
evt->area.width,
evt->area.height,
GDK_RGB_DITHER_MAX,
gdk_pixbuf_get_pixels (pixbuf) +
(evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +
(evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
gdk_pixbuf_get_rowstride (pixbuf));
} else {
gdk_draw_rgb_image (drawing_area->window,
drawing_area->style->black_gc,
evt->area.x, evt->area.y,
evt->area.width,
evt->area.height,
GDK_RGB_DITHER_NORMAL,
gdk_pixbuf_get_pixels (pixbuf) +
(evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +
(evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
gdk_pixbuf_get_rowstride (pixbuf));
}
return FALSE;
}
@@ -335,8 +354,8 @@ configure_cb (GtkWidget *drawing_area, GdkEventConfigure *evt, gpointer data)
GdkPixbuf *new_pixbuf;
root = gdk_get_default_root_window ();
new_pixbuf = gdk_pixbuf_get_from_window (root,
0, 0, evt->width, evt->height);
new_pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
0, 0, 0, 0, evt->width, evt->height);
g_object_set_data_full (G_OBJECT (drawing_area), "pixbuf", new_pixbuf,
(GDestroyNotify) g_object_unref);
}
@@ -355,9 +374,11 @@ main (int argc, char **argv)
gtk_init (&argc, &argv);
gtk_widget_set_default_colormap (gdk_rgb_get_colormap ());
root = gdk_get_default_root_window ();
pixbuf = gdk_pixbuf_get_from_window (root,
0, 0, 150, 160);
pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,
0, 0, 0, 0, 150, 160);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "delete_event",
@@ -372,8 +393,8 @@ main (int argc, char **argv)
gtk_widget_set_size_request (GTK_WIDGET (drawing_area),
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf));
g_signal_connect (drawing_area, "draw",
G_CALLBACK (draw_cb), NULL);
g_signal_connect (drawing_area, "expose_event",
G_CALLBACK (expose_cb), NULL);
g_signal_connect (drawing_area, "configure_event",
G_CALLBACK (configure_cb), NULL);

View File

@@ -32,27 +32,27 @@ overall_changed_cb (GtkAdjustment *adjustment, gpointer data)
}
gboolean
draw_cb (GtkWidget *widget, cairo_t *cr, gpointer data)
expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
GdkPixbuf *dest;
int width, height;
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
gdk_window_set_back_pixmap (widget->window, NULL, FALSE);
dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, event->area.width, event->area.height);
gdk_pixbuf_composite_color (pixbuf, dest,
0, 0, width, height,
0, 0,
(double) width / gdk_pixbuf_get_width (pixbuf),
(double) height / gdk_pixbuf_get_height (pixbuf),
0, 0, event->area.width, event->area.height,
-event->area.x, -event->area.y,
(double) widget->allocation.width / gdk_pixbuf_get_width (pixbuf),
(double) widget->allocation.height / gdk_pixbuf_get_height (pixbuf),
interp_type, overall_alpha,
0, 0, 16, 0xaaaaaa, 0x555555);
gdk_cairo_set_source_pixbuf (cr, dest, 0, 0);
cairo_paint (cr);
event->area.x, event->area.y, 16, 0xaaaaaa, 0x555555);
gdk_draw_pixbuf (widget->window, widget->style->fg_gc[GTK_STATE_NORMAL], dest,
0, 0, event->area.x, event->area.y,
event->area.width, event->area.height,
GDK_RGB_DITHER_NORMAL, event->area.x, event->area.y);
g_object_unref (dest);
return TRUE;
@@ -123,7 +123,7 @@ main(int argc, char **argv)
label = gtk_label_new ("Overall Alpha:");
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
adjustment = gtk_adjustment_new (overall_alpha, 0, 255, 1, 10, 0);
adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (overall_alpha, 0, 255, 1, 10, 0));
g_signal_connect (adjustment, "value_changed",
G_CALLBACK (overall_changed_cb), NULL);
@@ -135,14 +135,13 @@ main(int argc, char **argv)
gtk_widget_show_all (vbox);
/* Compute the size without the drawing area, so we know how big to make the default size */
gtk_widget_get_preferred_size ( (vbox),
&scratch_requisition, NULL);
gtk_widget_size_request (vbox, &scratch_requisition);
darea = gtk_drawing_area_new ();
gtk_box_pack_start (GTK_BOX (vbox), darea, TRUE, TRUE, 0);
g_signal_connect (darea, "draw",
G_CALLBACK (draw_cb), NULL);
g_signal_connect (darea, "expose_event",
G_CALLBACK (expose_cb), NULL);
gtk_window_set_default_size (GTK_WINDOW (window),
gdk_pixbuf_get_width (pixbuf),

640
demos/testpixbuf.c Normal file
View File

@@ -0,0 +1,640 @@
/* testpixbuf -- test program for gdk-pixbuf code
* Copyright (C) 1999 Mark Crichton, Larry Ewing
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include "test-inline-pixbufs.h"
typedef struct {
FILE *imagefile;
GdkPixbufLoader *loader;
GtkWidget **rgbwin;
guchar *buf;
guint timeout;
guint readlen;
} ProgressFileStatus;
#define DEFAULT_WIDTH 24
#define DEFAULT_HEIGHT 24
static const unsigned char default_image[] = {
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xae, 0xb3, 0xb3, 0xc6, 0xc9, 0xcd, 0xd7, 0xd4, 0xdf,
0xec, 0xde, 0xf3, 0xe7, 0xcb, 0xe9, 0xd9, 0xb5, 0xd3, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xb1, 0xb7, 0xa5,
0xb0, 0xb8, 0xad, 0xb3, 0xb9, 0xb6, 0xc1, 0xc6, 0xc8, 0xd5, 0xd3, 0xdc,
0xec, 0xde, 0xf3, 0xe5, 0xca, 0xe6, 0xe0, 0xbb, 0xd7, 0xe1, 0xad, 0xc2,
0xe3, 0xac, 0xa3, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xca, 0xc1, 0xa4, 0xc5, 0xc7, 0xac,
0xb7, 0xbe, 0xaf, 0xad, 0xb4, 0xaf, 0xbd, 0xc2, 0xc3, 0xd1, 0xd0, 0xd8,
0xec, 0xde, 0xf3, 0xe5, 0xc7, 0xe4, 0xe0, 0xb6, 0xd1, 0xe7, 0xa9, 0xb4,
0xed, 0xcd, 0xb6, 0xd6, 0xcf, 0xae, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0x00, 0x00, 0x00, 0xdf, 0xa7, 0x9f, 0xdd, 0xbf, 0xaa, 0xcf, 0xc5, 0xa9,
0xc1, 0xc4, 0xac, 0xb2, 0xba, 0xaf, 0xb6, 0xbb, 0xbb, 0xcd, 0xce, 0xd4,
0xec, 0xde, 0xf3, 0xe4, 0xc4, 0xe1, 0xe0, 0xaf, 0xc7, 0xea, 0xbc, 0xae,
0xe1, 0xd6, 0xb6, 0xc7, 0xcc, 0xae, 0xa2, 0xab, 0x9a, 0x00, 0x00, 0x00,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0x00, 0x00, 0x00, 0xe3, 0xab, 0xc0, 0xe6, 0xa3, 0xa7, 0xdf, 0xba, 0xa8,
0xcf, 0xc5, 0xa9, 0xbd, 0xc2, 0xae, 0xad, 0xb4, 0xaf, 0xc6, 0xc9, 0xcd,
0xec, 0xde, 0xf3, 0xe2, 0xbf, 0xdc, 0xe7, 0xa9, 0xb4, 0xe7, 0xd6, 0xb8,
0xc7, 0xcc, 0xae, 0xac, 0xb6, 0xa6, 0x9d, 0xa8, 0x9f, 0x00, 0x00, 0x00,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0xd9, 0xaf, 0xcf, 0xe1, 0xb4, 0xd2, 0xe2, 0xb0, 0xcb, 0xe4, 0xa9, 0xbb,
0xe2, 0xb2, 0xa6, 0xcf, 0xc5, 0xa9, 0x6a, 0x6a, 0x6a, 0x0d, 0x0d, 0x0d,
0x0d, 0x0d, 0x0d, 0x6a, 0x6a, 0x6a, 0xed, 0xcd, 0xb6, 0xc7, 0xcc, 0xae,
0xa6, 0xb1, 0xa3, 0x98, 0xa2, 0x9c, 0x8f, 0x97, 0x96, 0x7e, 0x84, 0x85,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0xe8, 0xc6, 0xe7, 0xe5, 0xc2, 0xe3, 0xe3, 0xbd, 0xdd, 0xe1, 0xb6, 0xd5,
0xe2, 0xb0, 0xcb, 0x6a, 0x6a, 0x6a, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x6a, 0x6a, 0x6a, 0x9d, 0xa8, 0x9f,
0x8f, 0x97, 0x96, 0x8b, 0x90, 0x92, 0x97, 0x9e, 0xa2, 0xa0, 0xa7, 0xae,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0xe7, 0xd3, 0xed, 0xe8, 0xd1, 0xed, 0xe8, 0xce, 0xec, 0xe9, 0xcc, 0xeb,
0xe8, 0xc6, 0xe7, 0x0d, 0x0d, 0x0d, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x0d, 0x0d, 0x0d, 0x97, 0x9e, 0xa2,
0xa7, 0xae, 0xb7, 0xb2, 0xb6, 0xc5, 0xba, 0xbc, 0xce, 0xbf, 0xbe, 0xd3,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0xe9, 0xdf, 0xf0, 0xe9, 0xdf, 0xf0, 0xe9, 0xdf, 0xf0, 0xe9, 0xdf, 0xf0,
0xe9, 0xdf, 0xf0, 0x0d, 0x0d, 0x0d, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x0d, 0x0d, 0x0d, 0xe1, 0xd2, 0xf7,
0xe1, 0xd2, 0xf7, 0xe1, 0xd2, 0xf7, 0xe1, 0xd2, 0xf7, 0xe1, 0xd2, 0xf7,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0xca, 0xc7, 0xd2, 0xc5, 0xc4, 0xcd, 0xbf, 0xbf, 0xc7, 0xb8, 0xb9, 0xc0,
0xae, 0xaf, 0xb6, 0x6a, 0x6a, 0x6a, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x6a, 0x6a, 0x6a, 0xd5, 0xa8, 0xe1,
0xd8, 0xb2, 0xe9, 0xd9, 0xb8, 0xed, 0xdb, 0xbd, 0xf0, 0xdc, 0xbf, 0xf1,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0xa4, 0xa6, 0xac, 0xa8, 0xaa, 0xaf, 0xa0, 0xa6, 0xa8, 0x98, 0x9e, 0x9c,
0xa1, 0xa8, 0x9e, 0xb1, 0xb6, 0xa1, 0x6a, 0x6a, 0x6a, 0x0d, 0x0d, 0x0d,
0x0d, 0x0d, 0x0d, 0x6a, 0x6a, 0x6a, 0xc0, 0x8c, 0xad, 0xcc, 0x90, 0xb5,
0xd3, 0x94, 0xca, 0xd6, 0xa2, 0xdb, 0xd5, 0xa8, 0xe1, 0xcf, 0xa7, 0xdf,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0x00, 0x00, 0x00, 0x98, 0x9f, 0x9b, 0xa1, 0xa8, 0x9e, 0xac, 0xb3, 0xa0,
0xb9, 0xb9, 0xa4, 0xd0, 0xb8, 0xa8, 0xc5, 0xb5, 0xb8, 0xb6, 0xbb, 0xad,
0xe3, 0xd7, 0xb5, 0xdd, 0xb4, 0xa9, 0xcb, 0x89, 0xac, 0xc0, 0x8c, 0xad,
0xc8, 0x91, 0xb5, 0xd1, 0x8d, 0xb7, 0xd3, 0x94, 0xca, 0x00, 0x00, 0x00,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0x00, 0x00, 0x00, 0xa1, 0xa7, 0x98, 0xb1, 0xb6, 0xa1, 0xbd, 0xb9, 0xa5,
0xd0, 0xb8, 0xa8, 0xca, 0xb5, 0xb7, 0xb8, 0xb1, 0xb1, 0xc2, 0xc8, 0xb2,
0xe3, 0xd7, 0xb5, 0xe1, 0xbf, 0xaf, 0xdb, 0x92, 0x9a, 0xbe, 0x82, 0xa6,
0xc0, 0x8c, 0xad, 0xc8, 0x91, 0xb4, 0xc7, 0x8b, 0xb0, 0x00, 0x00, 0x00,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xbc, 0xb6, 0xa1, 0xd0, 0xb8, 0xa8,
0xcd, 0xb6, 0xb7, 0xc0, 0xb4, 0xb5, 0xb1, 0xb1, 0xaa, 0xca, 0xd1, 0xb4,
0xe3, 0xd7, 0xb5, 0xe2, 0xc1, 0xb0, 0xdb, 0xa8, 0xa3, 0xd2, 0x8a, 0xa9,
0xb7, 0x7e, 0xa2, 0xbd, 0x89, 0xa9, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xc9, 0xaf, 0xaf,
0xc5, 0xb5, 0xb8, 0xb8, 0xb1, 0xb1, 0xb6, 0xbb, 0xad, 0xd0, 0xd6, 0xb5,
0xe3, 0xd7, 0xb5, 0xe2, 0xbf, 0xaf, 0xdd, 0xb4, 0xa9, 0xdb, 0x92, 0x9a,
0xc6, 0x84, 0xa7, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xac, 0xaa, 0xa6, 0xbd, 0xc3, 0xb0, 0xd2, 0xd7, 0xb5,
0xe3, 0xd7, 0xb5, 0xe2, 0xbf, 0xae, 0xdb, 0xb6, 0xa8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff
};
static const char * book_open_xpm[] = {
"16 16 4 1",
" c None s None",
". c black",
"X c #808080",
"o c white",
" ",
" .. ",
" .Xo. ... ",
" .Xoo. ..oo. ",
" .Xooo.Xooo... ",
" .Xooo.oooo.X. ",
" .Xooo.Xooo.X. ",
" .Xooo.oooo.X. ",
" .Xooo.Xooo.X. ",
" .Xooo.oooo.X. ",
" .Xoo.Xoo..X. ",
" .Xo.o..ooX. ",
" .X..XXXXX. ",
" ..X....... ",
" .. ",
" "};
static const char * book_closed_xpm[] = {
"16 16 6 1",
" c None s None",
". c black",
"X c red",
"o c yellow",
"O c #808080",
"# c white",
" ",
" .. ",
" ..XX. ",
" ..XXXXX. ",
" ..XXXXXXXX. ",
".ooXXXXXXXXX. ",
"..ooXXXXXXXXX. ",
".X.ooXXXXXXXXX. ",
".XX.ooXXXXXX.. ",
" .XX.ooXXX..#O ",
" .XX.oo..##OO. ",
" .XX..##OO.. ",
" .X.#OO.. ",
" ..O.. ",
" .. ",
" "};
static const char * mini_page_xpm[] = {
"16 16 4 1",
" c None s None",
". c black",
"X c white",
"o c #808080",
" ",
" ....... ",
" .XXXXX.. ",
" .XoooX.X. ",
" .XXXXX.... ",
" .XooooXoo.o ",
" .XXXXXXXX.o ",
" .XooooooX.o ",
" .XXXXXXXX.o ",
" .XooooooX.o ",
" .XXXXXXXX.o ",
" .XooooooX.o ",
" .XXXXXXXX.o ",
" ..........o ",
" oooooooooo ",
" "};
static const char * gtk_mini_xpm[] = {
"15 20 17 1",
" c None",
". c #14121F",
"+ c #278828",
"@ c #9B3334",
"# c #284C72",
"$ c #24692A",
"% c #69282E",
"& c #37C539",
"* c #1D2F4D",
"= c #6D7076",
"- c #7D8482",
"; c #E24A49",
"> c #515357",
", c #9B9C9B",
"' c #2FA232",
") c #3CE23D",
"! c #3B6CCB",
" ",
" ***> ",
" >.*!!!* ",
" ***....#*= ",
" *!*.!!!**!!# ",
" .!!#*!#*!!!!# ",
" @%#!.##.*!!$& ",
" @;%*!*.#!#')) ",
" @;;@%!!*$&)'' ",
" @%.%@%$'&)$+' ",
" @;...@$'*'*)+ ",
" @;%..@$+*.')$ ",
" @;%%;;$+..$)# ",
" @;%%;@$$$'.$# ",
" %;@@;;$$+))&* ",
" %;;;@+$&)&* ",
" %;;@'))+> ",
" %;@'&# ",
" >%$$ ",
" >= "};
const gchar ** xpms[] = {
book_open_xpm,
book_closed_xpm,
mini_page_xpm,
gtk_mini_xpm,
NULL
};
static void
quit_func (GtkWidget *widget, gpointer dummy)
{
gtk_main_quit ();
}
static void
expose_func (GtkWidget *drawing_area, GdkEventExpose *event, gpointer data)
{
GdkPixbuf *pixbuf;
pixbuf = (GdkPixbuf *)g_object_get_data (G_OBJECT (drawing_area), "pixbuf");
if (gdk_pixbuf_get_has_alpha (pixbuf)) {
GdkPixbuf *dest;
gdk_window_set_back_pixmap (drawing_area->window, NULL, FALSE);
dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, event->area.width, event->area.height);
gdk_pixbuf_composite_color (pixbuf, dest,
0, 0, event->area.width, event->area.height,
-event->area.x, -event->area.y,
(double) drawing_area->allocation.width / gdk_pixbuf_get_width (pixbuf),
(double) drawing_area->allocation.height / gdk_pixbuf_get_height (pixbuf),
GDK_INTERP_BILINEAR, 255,
event->area.x, event->area.y, 16, 0xaaaaaa, 0x555555);
gdk_draw_pixbuf (drawing_area->window, drawing_area->style->fg_gc[GTK_STATE_NORMAL], dest,
0, 0, event->area.x, event->area.y,
event->area.width, event->area.height,
GDK_RGB_DITHER_NORMAL, event->area.x, event->area.y);
g_object_unref (dest);
} else {
gdk_draw_rgb_image (drawing_area->window,
drawing_area->style->white_gc,
event->area.x, event->area.y,
event->area.width,
event->area.height,
GDK_RGB_DITHER_NORMAL,
gdk_pixbuf_get_pixels (pixbuf)
+ (event->area.y * gdk_pixbuf_get_rowstride (pixbuf))
+ (event->area.x * gdk_pixbuf_get_n_channels (pixbuf)),
gdk_pixbuf_get_rowstride (pixbuf));
}
}
static void
config_func (GtkWidget *drawing_area, GdkEventConfigure *event, gpointer data)
{
#if 0
GdkPixbuf *pixbuf;
pixbuf = (GdkPixbuf *)g_object_get_data (G_OBJECT (drawing_area), "pixbuf");
if (((event->width) != gdk_pixbuf_get_width (pixbuf)) ||
((event->height) != gdk_pixbuf_get_height (pixbuf)))
gdk_pixbuf_scale (pixbuf, event->width, event->height);
#endif
}
static GtkWidget*
new_testrgb_window (GdkPixbuf *pixbuf, gchar *title)
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *temp_box;
GtkWidget *button;
GtkWidget *drawing_area;
gint w, h;
g_return_val_if_fail (pixbuf != NULL, NULL);
w = gdk_pixbuf_get_width (pixbuf);
h = gdk_pixbuf_get_height (pixbuf);
window = g_object_new (gtk_window_get_type (),
"GtkObject::user_data", NULL,
"GtkWindow::type", GTK_WINDOW_TOPLEVEL,
"GtkWindow::title", title ? title : "testrgb",
"GtkWindow::allow_shrink", TRUE,
NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (quit_func), NULL);
vbox = gtk_vbox_new (FALSE, 0);
if (title)
gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new (title),
TRUE, TRUE, 0);
drawing_area = gtk_drawing_area_new ();
temp_box = gtk_hbox_new (FALSE, 0);
gtk_widget_set_size_request (GTK_WIDGET (drawing_area), w, h);
gtk_box_pack_start (GTK_BOX (temp_box), drawing_area, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), temp_box, FALSE, FALSE, 0);
g_signal_connect (drawing_area, "expose_event",
G_CALLBACK (expose_func), NULL);
g_signal_connect (drawing_area, "configure_event",
G_CALLBACK (config_func), NULL);
g_object_set_data (G_OBJECT (drawing_area), "pixbuf", pixbuf);
gtk_widget_show (drawing_area);
button = gtk_button_new_with_label ("Quit");
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gtk_widget_destroy), window);
gtk_widget_show (button);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show_all (vbox);
gtk_widget_show (window);
return drawing_area;
}
static gint
update_timeout (gpointer data)
{
ProgressFileStatus *status = data;
gboolean done;
GError *error;
done = FALSE;
error = NULL;
if (!feof (status->imagefile)) {
gint nbytes;
nbytes = fread (status->buf, 1, status->readlen,
status->imagefile);
if (!gdk_pixbuf_loader_write (GDK_PIXBUF_LOADER (status->loader), status->buf, nbytes, &error)) {
g_warning ("Error writing to loader: %s",
error->message);
g_error_free (error);
done = TRUE;
}
}
else
done = TRUE;
if (done) {
/* ignoring errors, we should not do that. */
gdk_pixbuf_loader_close (GDK_PIXBUF_LOADER (status->loader), NULL);
gtk_widget_queue_draw (*status->rgbwin);
g_object_unref (status->loader);
fclose (status->imagefile);
g_free (status->buf);
}
return !done;
}
static void
progressive_prepared_callback (GdkPixbufLoader* loader, gpointer data)
{
GtkWidget** retloc = data;
GdkPixbuf* pixbuf;
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
g_assert (pixbuf != NULL);
g_object_ref (pixbuf); /* for the RGB window */
*retloc = new_testrgb_window (pixbuf, "Progressive");
return;
}
static void
progressive_updated_callback (GdkPixbufLoader* loader, guint x, guint y, guint width, guint height, gpointer data)
{
GtkWidget** window_loc = data;
if (*window_loc != NULL)
gtk_widget_queue_draw_area (*window_loc,
x, y, width, height);
return;
}
static int readlen = 4096;
extern void pixbuf_init (void);
void size_func (GdkPixbufLoader *loader, gint width, gint height, gpointer data)
{
gdk_pixbuf_loader_set_size (loader, width*2, height*2);
}
int
main (int argc, char **argv)
{
int i;
int found_valid = FALSE;
GdkPixbuf *pixbuf;
GdkPixbufLoader *pixbuf_loader;
pixbuf_init ();
gtk_init (&argc, &argv);
/* gdk_rgb_set_verbose (TRUE);*/
gtk_widget_set_default_colormap (gdk_rgb_get_colormap ());
{
char *tbf_readlen = getenv ("TBF_READLEN");
if (tbf_readlen) readlen = atoi (tbf_readlen);
}
{
char *tbf_bps = getenv ("TBF_KBPS");
guint bps;
if (tbf_bps) {
bps = atoi (tbf_bps);
g_print ("Simulating %d kBytes/sec\n", bps);
readlen = (bps*1024)/10;
}
}
i = 1;
if (argc == 1) {
const gchar*** xpmp;
GError *error = NULL;
pixbuf = gdk_pixbuf_new_from_data (default_image, GDK_COLORSPACE_RGB, FALSE, 8,
DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_WIDTH * 3,
NULL, NULL);
new_testrgb_window (pixbuf, NULL);
xpmp = xpms;
while (*xpmp) {
pixbuf = gdk_pixbuf_new_from_xpm_data (*xpmp);
new_testrgb_window (pixbuf, NULL);
++xpmp;
}
/* Test loading from inline data. */
pixbuf = gdk_pixbuf_new_from_inline (-1, apple_red, FALSE, &error);
if (!pixbuf)
{
fprintf (stderr, "failed to construct \"red apple\" pixbuf: %s\n",
error->message);
g_error_free (error);
}
else
new_testrgb_window (pixbuf, "Red apple from inlined RLE data");
pixbuf = gdk_pixbuf_new_from_inline (sizeof (gnome_foot), gnome_foot, TRUE, NULL);
new_testrgb_window (pixbuf, "GNOME Foot from inlined RLE data");
found_valid = TRUE;
} else {
for (i = 1; i < argc; i++) {
GError *error;
error = NULL;
pixbuf = gdk_pixbuf_new_from_file (argv[i], &error);
if (pixbuf == NULL) {
g_warning ("Error loading image: %s",
error->message);
g_error_free (error);
}
#if 0
pixbuf = gdk_pixbuf_rotate (pixbuf, 10.0);
#endif
if (pixbuf) {
new_testrgb_window (pixbuf, "File");
found_valid = TRUE;
}
}
#if 1
{
GtkWidget* rgb_window = NULL;
ProgressFileStatus status;
pixbuf_loader = gdk_pixbuf_loader_new ();
status.loader = pixbuf_loader;
status.rgbwin = &rgb_window;
status.buf = g_malloc (readlen);
#if 0
g_signal_connect (pixbuf_loader, "size_prepared",
G_CALLBACK (size_func), NULL);
#endif
g_signal_connect (pixbuf_loader, "area_prepared",
G_CALLBACK (progressive_prepared_callback),
&rgb_window);
g_signal_connect (pixbuf_loader, "area_updated",
G_CALLBACK (progressive_updated_callback),
&rgb_window);
status.imagefile = fopen (argv[1], "r");
g_assert (status.imagefile != NULL);
status.readlen = readlen;
status.timeout = gdk_threads_add_timeout (100, update_timeout, &status);
}
#endif
}
if (found_valid)
gtk_main ();
return 0;
}

View File

@@ -1,635 +0,0 @@
GTK+ Coding Style
-------------------------------------------------------------------------------
This document is intended to be a short description of the preferred
coding style to be used for the GTK+ source code. It was strongly
inspired by Clutter's CODING_STYLE.
Coding style is a matter of consistency, readability and maintainance;
coding style is also completely arbitrary and a matter of taste. This
document will use examples at the very least to provide authoritative
and consistent answers to common questions regarding the coding style,
and will also try to identify the allowed exceptions.
The examples will show the preferred coding style; the negative examples
will be clearly identified. Please, don't submit code to GTK+ that
looks like any of these.
Part of the rationales for these coding style rules are available either
in the kernel CodingStyle document or in Cairo's CODING_STYLE one.
When in doubt, check the surrounding code and try to imitate it.
+ Line width
The maximum line width for source files is 80 characters, whenever possible.
Longer lines are usually an indication that you either need a function
or a pre-processor macro.
+ Indentation
Each new level is indented 2 or more spaces than the previous level:
if (condition)
single_statement ();
This can only be achieved using space characters. It may not be achieved
using tab characters alone, or using a combination of spaces and tabs.
Do not change the editor's configuration to change the meaning of a
tab character (see below); code using tabs to indent will not be accepted
into GTK+.
Even if two spaces for each indentation level allows deeper nesting than
8 spaces, GTK+ favours self-documenting function names that can take
quite some space. For this reason you should avoid deeply nested code.
+ Tab characters
The tab character must always be expanded to spaces. If a literal
tab must be used inside the source, the tab must always be interpreted
according to its traditional meaning:
Advance to the next column which is a multiple of 8.
[ these two lines should be aligned ]
+ Braces
Curly braces should not be used for single statement blocks:
if (condition)
single_statement ();
else
another_single_statement (arg1);
In case of multiple statements, curly braces should be put on another
indentation level:
if (condition)
{
statement_1 ();
statement_2 ();
statement_3 ();
}
The "no block for single statements" rule has only four exceptions:
① if the single statement covers multiple lines, e.g. for functions with
many arguments, and it is followed by else or else if:
/* valid */
if (condition)
{
a_single_statement_with_many_arguments (some_lengthy_argument,
another_lengthy_argument,
and_another_one,
plus_one);
}
else
another_single_statement (arg1, arg2);
② if the condition is composed of many lines:
/* valid */
if (condition1 ||
(condition2 && condition3) ||
condition4 ||
(condition5 && (condition6 || condition7)))
{
a_single_statement ();
}
③ Nested if's, in which case the block should be placed on the
outermost if:
/* valid */
if (condition)
{
if (another_condition)
single_statement ();
else
another_single_statement ();
}
/* invalid */
if (condition)
if (another_condition)
single_statement ();
else if (yet_another_condition)
another_single_statement ();
④ If either side of an if-else statement has braces, both sides
should, to match up indentation:
/* valid */
if (condition)
{
foo ();
bar ();
}
else
{
baz ();
}
/* invalid */
if (condition)
{
foo ();
bar ();
}
else
baz ();
In general, new blocks should be placed on a new indentation level,
like:
int retval = 0;
statement_1 ();
statement_2 ();
{
int var1 = 42;
gboolean res = FALSE;
res = statement_3 (var1);
retval = res ? -1 : 1;
}
While curly braces for function definitions should rest on a new line
they should not add an indentation level:
/* valid */
static void
my_function (int argument)
{
do_my_things ();
}
/* invalid */
static void
my_function (int argument) {
do_my_things ();
}
/* invalid */
static void
my_function (int argument)
{
do_my_things ();
}
Curly braces must not be placed on the same line as a condition:
/* invalid */
if (condition) {
statement_1 ();
statement_2 ();
}
+ Conditions
Do not check boolean values for equality:
/* invalid */
if (condition == TRUE)
do_foo ();
/* valid */
if (another_condition)
do_bar ();
Even if C handles NULL equality like a boolean, be explicit:
/* valid */
if (some_pointer == NULL)
do_blah ();
/* invalid */
if (some_other_pointer)
do_blurp ();
In case of conditions split over multiple lines, the logical operators should
always go at the end of the line:
/* invalid */
if (condition1
|| condition2
|| condition3)
{
do_foo ();
}
/* valid */
if (condition1 &&
condition2 &&
(condition3 || (condition4 && condition5)))
{
do_blah ();
}
+ Functions
Functions should be declared by placing the returned value on a separate
line from the function name:
void
my_function (void)
{
}
The arguments list must be broken into a new line for each argument,
with the argument names right aligned, taking into account pointers:
void
my_function (some_type_t type,
another_type_t *a_pointer,
final_type_t another_type)
{
}
The alignment also holds when invoking a function without breaking the
80 characters limit:
align_function_arguments (first_argument,
second_argument,
third_argument);
To respect the 80 characters limit do not break the function name from
the arguments:
/* invalid */
a_very_long_function_name_with_long_parameters
(argument_the_first, argument_the_second);
/* valid */
first_a = argument_the_first;
second_a = argument_the_second;
a_very_long_function_name_with_long_parameters (first_a, second_a);
+ Whitespace
Always put a space before a parenthesis but never after:
/* valid */
if (condition)
do_my_things ();
/* valid */
switch (condition)
{
}
/* invalid */
if(condition)
do_my_things();
/* invalid */
if ( condition )
do_my_things ( );
A switch() should open a block on a new indentation level, and each case
should start on the same indentation level as the curly braces, with the
case block on a new indentation level:
/* valid */
switch (condition)
{
case FOO:
do_foo ();
break;
case BAR:
do_bar ();
break;
}
/* invalid */
switch (condition) {
case FOO: do_foo (); break;
case BAR: do_bar (); break;
}
/* invalid */
switch (condition)
{
case FOO: do_foo ();
break;
case BAR: do_bar ();
break;
}
/* invalid */
switch (condition)
{
case FOO:
do_foo ();
break;
case BAR:
do_bar ();
break;
}
It is preferable, though not mandatory, to separate the various cases with
a newline:
switch (condition)
{
case FOO:
do_foo ();
break;
case BAR:
do_bar ();
break;
default:
do_default ();
}
The 'break' statement for the default: case is not mandatory.
If a case block needs to declare new variables, the same rules as the
inner blocks (see above) apply; the break statement should be placed
outside of the inner block:
switch (condition)
{
case FOO:
{
int foo;
foo = do_foo ();
}
break;
...
}
When declaring a structure type use newlines to separate logical sections
of the structure:
struct _GtkWrapBoxPrivate
{
GtkOrientation orientation;
GtkWrapAllocationMode mode;
GtkWrapBoxSpreading horizontal_spreading;
GtkWrapBoxSpreading vertical_spreading;
guint16 vertical_spacing;
guint16 horizontal_spacing;
guint16 minimum_line_children;
guint16 natural_line_children;
GList *children;
};
Do not eliminate whitespace and newlines just because something would
fit on 80 characters:
/* invalid */
if (condition) foo (); else bar ();
Do eliminate trailing whitespace on any line, preferably as a separate
patch or commit. Never use empty lines at the beginning or at the end of
a file.
Do enable the default git pre-commit hook that detect trailing
whitespace for you and help you to avoid corrupting GTK+'s tree with
it. Do that as follows:
chmod a+x .git/hooks/pre-commit
You might also find the git-stripspace utility helpful which acts as a
filter to remove trailing whitespace as well as initial, final, and
duplicate blank lines.
+ Headers
Headers are special, for GTK+, in that they don't have to obey the
80 characters limit. The only major rule for headers is that the function
definitions should be vertically aligned in three columns:
return value function_name (type argument,
type argument,
type argument);
The maximum width of each column is given by the longest element in the
column:
void gtk_type_set_property (GtkType *type,
const gchar *value,
GError **error);
G_CONST_RETURN gchar *gtk_type_get_property (GtkType *type);
It is also possible to align the columns to the next tab:
void gtk_type_set_prop (GtkType *type,
gfloat value);
gfloat gtk_type_get_prop (GtkType *type);
gint gtk_type_update_foobar (GtkType *type);
Public headers should never be included directly:
#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif
All headers should have inclusion guards (for internal usage)
and C++ guards:
#ifndef __GTK_FOO_H__
#define __GTK_FOO_H__
#include <gtk/gtk-bar.h>
G_BEGIN_DECLS
...
G_END_DECLS
#endif /* __GTK_FOO_H__ */
+ Includes
GTK+ source files should never include the global gtk.h header, but
instead include the individual headers that are needed. Every file must
include config.h first, then its own header, then other GTK+ headers
that it needs, then system and third-party headers that it needs.
/* valid */
#include "config.h"
#include "gtkfoo.h"
#include "gtkwidget.h"
#include "gtkbutton.h"
...
#include <string.h>
+ GObject
GObject classes definition and implementation require some additional
coding style notices.
Typedef declarations should be placed at the beginning of the file:
typedef struct _GtkFoo GtkFoo;
typedef struct _GtkFooClass GtkFooClass;
typedef struct _GtkFooPrivate GtkFooPrivate;
This includes enumeration types:
typedef enum
{
GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT,
GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH
} GtkSizeRequestMode;
And callback types:
typedef void (* GtkCallback) (GtkWidget *widget,
gpointer user_data);
Instance structures should only contain the parent type and a pointer to a
private data structure, and they should be annotated as "private":
struct _GtkFoo
{
/*< private >*/
GtkWidget parent_instance;
GtkFooPrivate *priv;
};
All the properties should be stored inside the private data structure, which
is defined inside the source file - or, if needed, inside a private header
file; the private header filename must end with "private.h" and must not be
installed.
The private data structure should only be accessed internally using the
pointer inside the instance structure, and never using the
G_TYPE_INSTANCE_GET_PRIVATE() macro or the g_type_instance_get_private()
function.
Always use the G_DEFINE_TYPE(), G_DEFINE_TYPE_WITH_CODE() macros, or
their abstract variants G_DEFINE_ABSTRACT_TYPE() and
G_DEFINE_ABSTRACT_TYPE_WITH_CODE(), and the similar macros for defining
interfaces.
Interface types should always have the dummy typedef for cast purposes:
typedef struct _GtkFoo GtkFoo;
The interface structure should have "Interface" postfixed to the dummy typedef:
typedef struct _GtkFooInterface GtkFooInterface;
Interfaces must have the following macros:
- Macro: - Expands to:
• GTK_TYPE_<iface_name> <iface_name>_get_type
• GTK_<iface_name> G_TYPE_CHECK_INSTANCE_CAST
• GTK_IS_<iface_name> G_TYPE_CHECK_INSTANCE_TYPE
• GTK_<iface_name>_GET_IFACE G_TYPE_INSTANCE_GET_INTERFACE
+ Memory allocation
When dynamically allocating data on the heap either use g_new() or,
if allocating multiple small data structures, g_slice_new().
Public structure types should always be returned after being zero-ed,
either explicitly for each member, or by using g_new0() or g_slice_new0().
+ Macros
Try to avoid private macros unless strictly necessary. Remember to #undef
them at the end of a block or a series of functions needing them.
Inline functions are usually preferable to private macros.
Public macros should not be used unless they evaluate to a constant.
+ Public API
Avoid exporting variables as public API, since this is cumbersome on some
platforms. It is always preferable to add getters and setters instead.
All public functions must be listed in the gtk.symbols file.
+ Private API
Non-exported functions that are needed in more than one source file
should be named "_gtk_...", and declared in a private header file.
Underscore-prefixed functions are never exported.
Non-exported functions that are only needed in one source file
should be declared static.
+ Documentation
All public APIs must have gtk-doc comments. For functions, these should
be placed in the source file, directly above the function.
/* valid */
/**
* gtk_get_flow:
* @widget: a #GtkWidget
*
* Gets the flow of a widget.
*
* Note that flows may be laminar or turbulent...
*
* Returns: (transfer none): the flow of @widget
*/
GtkFlow *
gtk_get_flow (GtkWidget *widget)
{
...
}
Doc comments for macros, function types, class structs, etc should be
placed next to the definitions, typically in headers.
Section introductions should be placed in the source file they describe,
after the license header:
/* valid */
/**
* SECTION:gtksizerequest
* @Short_Description: Height-for-width geometry management
* @Title: GtkSizeRequest
*
* The GtkSizeRequest interface is GTK+'s height-for-width (and
* width-for-height) geometry management system.
* ...
*/
To properly document a new function, macro, function type or struct,
it needs to be listed in the gtk3-sections.txt file.
To properly document a new class, it needs to be given its own section
in gtk3-sections.txt, needs to be included in gtk-docs.sgml, and the
get_type function needs to listed in gtk3.types.
+ Old code
New code that is being added to GTK+ should adhere to the style
explained above. Existing GTK+ code does largely follow these
conventions, but there are some differences, e.g. occurrences
of tabs, etc.
It is ok to update the style of a code block or function when you
are touching it anyway, but sweeping whitespace changes obscure the
git history and should be avoided.

View File

@@ -4,22 +4,20 @@ include $(top_srcdir)/Makefile.decl
SUBDIRS = tutorial faq reference tools
EXTRA_DIST += \
CODING-STYLE \
defsformat.txt \
developers.txt \
dnd_internals.txt \
focus_tracking.txt \
generation.txt \
gtkdocs_fix \
make-todo \
refcounting.txt \
RELEASE-HOWTO \
sizing-test.txt \
styles.txt \
text_widget_internals.txt \
text_widget.txt \
tree-column-sizing.png \
text_widget_internals.txt \
tree-column-sizing.txt \
widget_geometry.txt \
widget_system.txt
widget_system.txt \
generation.txt \
gtkdocs_fix \
RELEASE-HOWTO
-include $(top_srcdir)/git.mk

338
docs/defsformat.txt Normal file
View File

@@ -0,0 +1,338 @@
The overall syntax is:
(type-of-thing-being-defined name-used-to-refer-to-this-thing
(attribute-name attribute-value-depending-on-the-attribute)
(attribute-name attribute-value-depending-on-the-attribute)
(attribute-name attribute-value-depending-on-the-attribute))
Some definitions can have a c-declaration field that gives the C code
we parsed to arrive at the definition. The c-declaration is a quoted
string because it can contain parentheses and such.
Defined types and their attributes:
===
(module module-name
(submodule-of module-name)) ;; submodule is optional
Ex: (module Gtk)
Ex: (module Rgb
(submodule-of Gdk))
modules are later referred to with a list of module names, like
(Gdk Rgb) or (Gtk)
Object and boxed type definitions automatically create a submodule.
For example, GtkCList creates the module (module CList (submodule-of
(Gtk))) which is referred to as module (Gtk CList).
===
(type
(alias some-unique-identifier)
(in-module module-name) ;; optional, gchar* is not in a module
(gtk-type-id gtk-type-system-id) ;; optional, absent if this is not
;; in the type system
(is-parametric boolean) ;; optional default to #f
(in-c-name name-of-symbol-in-C)
(out-c-name name-of-symbol-in-C)
(inout-c-name name-of-symbol-in-C))
Ex: (type
(alias string)
(gtk-type-id GTK_TYPE_STRING)
(in-c-name "const gchar*")
(out-c-name "gchar**") ;; actually I'm not sure how strings work out/inout
(inout-c-name "gchar*"))
(type
(alias list)
(gtk-type-id GTK_TYPE_POINTER)
(is-parametric #t)
(in-c-name "GList*")
(out-c-name "GList**")
(inout-c-name "GList**"))
;; This one would be implied by the (object) def for GtkWidget I
;; think - (type) is only required for types that are not implied
;; by other definitions, such as int/boolean/etc.
(type
(alias GtkWidget)
(in-module (Gtk))
(gtk-type-id GTK_TYPE_WIDGET)
(in-c-name "GtkWidget*")
(inout-c-name "GtkWidget*")
(out-c-name "GtkWidget**"))
"Type" bindings are automatically assumed for objects, boxed types,
etc. as defined below.
The alias field is used to refer to the type later on.
Whenever a type alias can be used, it is also possible to use the
keyword "native", which implies that the type in question is too
C-specific to represent. Then a c-declaration will typically be
available for use.
C types containing [] or () are function pointers or arrays. For
arrays that don't specify a size, we just treat them as pointers. For
function pointers, we need special (type) syntax/attributes of some
kind, but since there basically aren't any of these right now in the
libs we care about we can just ignore them. For arrays that specify a
size ditto, you would handle them by adding an (array-size) attribute
or something or using the "native" keyword and skipping the (type)
stuff.
===
(object object-name
(in-module module-name-list)
(parent object-name optional-module-name-if-different)
(abstract boolean-is-abstract-class) ;; omit for default of #f
(c-name name-of-the-object-in-C)
(field (type-and-name type-alias-of-struct-field name-of-struct-field)
(access read-or-write-or-readwrite)))
Ex: (object Widget
(in-module (Gtk))
(parent Object) ;; could say (parent Object (Gtk))
(abstract #t)
(c-name GtkWidget)
(field (type-and-name GdkWindow* window) (access read)))
An "object" declaration automatically implies the type definition:
(type
(alias concat-module-elements-and-object-name)
(in-c-name pointer-to-c-name)
(out-c-name pointer-to-pointer-to-c-name)
(inout-c-name pointer-to-c-name))
Ex:
(type (alias GtkWidget)
(in-c-name GtkWidget*)
(out-c-name GtkWidget**)
(inout-c-name GtkWidget*))
It also implies a module that is the name broken into parts:
(module CTree
(submodule-of Gtk))
===
(function function-name
(in-module module-name-list) ;; "static methods" go in their
;; object's module
(is-constructor-of object-type-alias) ;; optional, marks a constructor
(c-name function-name)
(return-type return-value-type) ;; defaults to void
(caller-owns-return boolean-value) ;; defaults to #f
(can-return-null boolean-value) ;; defaults to #t
(parameter in-or-out-or-inout
(type-and-name parameter-type-alias parameter-name)
(type-parameter name-of-contained-type) ;; optional, requires parametric type
(c-declaration "c-type-and-name")) ;; c-declaration only required
;; if the type alias is "native"
(varargs #t) ;; has varargs at the end
)
Ex:
(function init
(in-module (Gdk Rgb)
(c-name gdk_rgb_init)))
Ex:
(function new
(in-module (Gdk Rgb Cmap))
(is-constructor-of GdkRgbCmap)
(c-name gdk_rgb_cmap_new)
(return-type GdkRgbCmap)
(caller-owns-return #t) ;; perhaps this could be implied by is-constructor-of
(parameter in (type-and-name array-of-guint32 colors))
(parameter in (type-and-name gint n_colors)))
Ex:
(function config_set_set_handler
(in-module (Gnome))
(c-name gnome_config_set_set_handler)
(parameter in (type-and-name native func)
(c-declaration "void (*func)(void*)"))
(parameter in (type-and-name gpointer data)))
===
(method method-name
(of-object object-name module-name)
;; retval/arg attributes as for (function), but with first parameter
;; omitted for non-constructors
)
Ex:
(method set_text
(of-object Label (Gtk))
(parameter (type-and-name const-gchar* str)))
===
(object-argument arg-name
(of-object object-we-are-an-argument-of optional-objects-module)
(type-id argument-type) ;; GTK_TYPE_OBJECT etc.
;; flags all default to #f
(readable bool-value)
(writeable bool-value)
(construct-only bool-value))
Ex:
(object-argument label
(of-object Label (Gtk))
(type GTK_TYPE_STRING)
(readable #t)
(writeable #t))
===
(signal signal-name
(run-action bool-value)
(run-first bool-value)
(run-last bool-value)
(of-object object-we-are-a-signal-of optional-objects-module)
;; return value and parameters as for a function, omitting the object
;; and user data parameters
;; what other properties matter for a signal?
)
Ex:
(signal select_row
(of-object CList (Gtk))
(run-first #t)
;; return type defaults to void
(parameter in (type-and-name gint row))
(parameter in (type-and-name gint column))
(parameter in (type-and-name GdkEvent* event)))
===
(enum enum-name
(in-module modname)
(c-name name-in-c)
(value (nick value-name-noprefixes-hyphen-lowercase) (c-name value-c-name)))
Ex:
(enum DirectionType
(in-module Gtk)
(c-name GtkDirectionType)
(value (nick tab-forward) (c-name GTK_DIR_TAB_FORWARD))
(value (nick tab-backward) (c-name GTK_DIR_TAB_BACKWARD))
(value (nick up) (c-name GTK_DIR_UP))
(value (nick down) (c-name GTK_DIR_DOWN))
(value (nick left) (c-name GTK_DIR_LEFT))
(value (nick right) (c-name GTK_DIR_RIGHT)))
(enum Pos
(in-module (Gtk CTree))
(c-name GtkCTreePos)
(value (nick before) (c-name GTK_CTREE_POS_BEFORE))
(value (nick as-child) (c-name GTK_CTREE_POS_AS_CHILD))
(value (nick after) (c-name GTK_CTREE_POS_AFTER)))
===
(flags) is just like enum, but some bindings may wrap enums and flags differently.
===
(boxed boxed-name
(in-module modname)
(c-name c-name)
(ref-func func-to-increase-refcount)
(copy-func func-to-copy)
(release-func func-to-destroy-or-decrement-refcount)
(field (type-and-name type-alias-of-struct-field name-of-struct-field) (access access-rule)))
It is never OK to use memcpy() to copy a boxed type, or use
malloc()/free() to alloc/free one.
Ex:
(boxed Pixmap
(in-module (Gdk))
(c-name GdkPixmap)
(ref-func pixmap_ref)
(release-func pixmap_unref))
An "object" declaration automatically implies the type definition:
(type
(alias concat-module-elements-and-boxed-name)
(in-c-name pointer-to-c-name)
(out-c-name pointer-to-pointer-to-c-name)
(inout-c-name pointer-to-c-name))
Ex:
(type (alias GdkPixmap)
(in-c-name GdkPixmap*)
(out-c-name GdkPixmap**)
(inout-c-name GdkPixmap*))
===
(struct struct-name
(in-module modname)
(c-name c-name)
(field (type-and-name type-alias-of-struct-field name-of-struct-field) (access access-rule)))
Unlike a boxed type, a struct type can be copied with memcpy() and
allocated on the stack or with g_malloc().
Ex:
(struct Rectangle
(in-module (Gdk))
(c-name GdkRectangle)
(field (type-and-name gint16 x) (access readwrite))
(field (type-and-name gint16 y) (access readwrite))
(field (type-and-name guint16 width) (access readwrite))
(field (type-and-name guint16 height) (access readwrite)))
Implies GdkRectangle type alias:
(type (alias GdkRectangle)
(in-c-name GdkRectangle*)
(out-c-name GdkRectangle*) ;; note - not the same as boxed types
(inout-c-name GdkRectangle*))
===
(user-function name
(in-module module)
(c-name c-typedef-name)
;; return-type and parameters as for (function)
)
Ex:
(user-function PrintFunc
(in-module (Gtk))
(parameter in (type-and-name gpointer func_data))
(parameter in (type-and-name gchar* str)))
===
(typedef new-name
(in-module module)
(c-name c-full-name)
(orig-type alias-of-orig-type))
Ex:
(typedef Type
(in-module (Gtk))
(c-name GtkType)
(orig-type guint))

236
docs/gtk-config.txt Normal file
View File

@@ -0,0 +1,236 @@
CONFIGURING PACKAGES TO WORK WITH GTK
-------------------------------------
Compiling a program successfully against the GTK, GDK, and GLIB
libraries can require a large number of command line options
to your compiler and linker that are hard to guess correctly.
The additional libraries required may, for example, depend on the
manner which GTK was configured
Several tools are included in this package to make process
easier.
First, there is the shell script 'gtk-config' (installed in
$exec_prefix/bin):
Invoking gtk-config
-------------------
gtk-config takes the following flags:
--version
Prints out the version of GTK installed
--cflags
Prints '-I' flags pointing to the installed header files.
--libs
Prints out the linker flags necessary to link a program against GTK
--prefix[=PREFIX]
If PREFIX is specified, overrides the configured value of $prefix.
(And of exec-prefix, unless --exec-prefix is also specified)
Otherwise, prints out the configured value of $prefix
--exec-prefix[=PREFIX]
If PREFIX is specified, overrides the configured value of $exec_prefix.
Otherwise, prints out the configured value of $exec_prefix
You may also add to the command line a list of additional
libraries that gtk-config should supply the CFLAGS and LIBS
for. The only currently supported library is 'gthread'.
As an example of this latter usage, you can get the
appropriate cflags for a threaded program with:
gtk-config --cflags gthread
Example of using gtk-config
---------------------------
Typically, gtk-config will be used within a configure script,
as described below. It, however, can also be used directly
from the command line to compile a simple program. For example:
cc -o simple `gtk-config --cflags` simple.c `gtk-config --libs`
This command line might expand to (for example):
cc -o simple -I/usr/local/lib/glib/include -I/usr/local/include \
-I/usr/X11R6/include simple.c -L/usr/local/lib -L/usr/X11R6/lib \
-lgtk -lgdk -lglib -lXi -lXext -lX11 -lm
Not only is the form using gtk-config easier to type, it will
work on any system, no matter how GTK was configured.
AM_PATH_GTK
-----------
For packages configured using GNU automake, GTK also provides
a macro to automate the process of running GTK.
AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
This macro:
* Determines the location of GTK using gtk-config, which is either
found in the user's path, or from the environment variable
GTK_CONFIG
* Tests the installed libraries to make sure that there version
is later than MINIMUM-VERSION. (A default version will be used
if not specified)
* If the required version was found, sets the GTK_CFLAGS variable to
the output of `gtk-config --cflags` and the GTK_LIBS variable to
the output of `gtk-config --libs`, and calls AC_SUBST() for these
variables so they can be used in generated makefiles, and then
executes ACTION-IF-FOUND.
* If the required version was not found, sets GTK_CFLAGS and GTK_LIBS
to empty strings, and executes ACTION-IF-NOT-FOUND.
This macro is in file 'gtk.m4' which is installed in $datadir/aclocal.
Note that if automake was installed with a different --prefix than
GTK, you will either have to manually move gtk.m4 to automake's
$datadir/aclocal, or give aclocal the -I option when running it.
Configuring a package that uses AM_PATH_GTK
-------------------------------------------
Simply make sure that gtk-config is in your path, and run
the configure script.
Notes:
* The directory where the GTK libraries are installed needs
to be found by your system's dynamic linker.
This is generally done by
editing /etc/ld.so.conf and running ldconfig
Or by:
setting the environment variable LD_LIBRARY_PATH,
or, as a last resort,
Giving a -R or -rpath flag (depending on your linker) when
running configure, for instance:
LDFLAGS=-R/usr/home/owen/lib ./configure
* You can also specify a gtk-config not in your path by
setting the GTK_CONFIG environment variable to the
name of the executable
* If you move the GTK package from its installed location,
you will need either need to modify gtk-config script
manually to point to the new location or rebuild GTK.
Advanced note:
* configure flags
--with-gtk-prefix=PREFIX
--with-gtk-exec-prefix=PREFIX
are provided to override the prefix and exec-prefix that were stored
in the gtk-config shell script by GTK's configure. You are generally
better off configuring GTK with the right path to begin with.
Example of a package using AM_PATH_GTK
--------------------------------------
The following shows how to build a simple package using automake
and the AM_PATH_GTK macro. The program used here is the testinput.c
You should first read the introductory portions of the automake
Manual, if you are not already familiar with it.
Two files are needed, 'configure.ac', which is used to build the
configure script:
==configure.ac===
dnl Process this file with autoconf to produce a configure script.
AC_INIT(testinput.c)
AM_INIT_AUTOMAKE(testinput.c, 1.0.0)
AC_PROG_CC
AM_PROG_CC_STDC
AC_PROG_INSTALL
AM_PATH_GTK(0.99.5,
[LIBS="$LIBS $GTK_LIBS"
CFLAGS="$CFLAGS $GTK_CFLAGS"],
AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?))
AC_OUTPUT(Makefile)
=================
The only command in this which is not standard for automake
is the AM_PATH_GTK() macro.
That command does the following:
If a GTK version greater than 0.99.5 is found, adds $GTK_LIBS to
$LIBS and $GTK_CFLAGS to $CFLAGS. Otherwise, dies with the error
message "Cannot find GTK: Is gtk-config in path?"
And the 'Makefile.am', which will be used to build the Makefile.
== Makefile.am ==
bin_PROGRAMS = testinput
testinput_SOURCES = testinput.c
=================
This Makefile.am, says that we are building a single executable,
from a single sourcefile 'testinput.c'. Since every program
we are building uses GTK we simply added the GTK options
to $LIBS and $CFLAGS, but in other circumstances, we might
want to specify them on a per-program basis: for instance by
adding the lines:
testinput_LDADD = $(GTK_LIBS)
INCLUDES = $(GTK_CFLAGS)
to the Makefile.am.
To try this example out, create a new directory, add the two
files above two it, and copy the testinput.c file from
the gtk/ subdirectory to the new directory. Edit the line:
#include "gtk.h"
in testgtk.c, to read:
#include <gtk/gtk.h>
Now execute the following commands:
automake --add-missing
aclocal
autoconf
You now have a package that can be built in the normal fashion
./configure
make
make install
Notes:
* If you are converting a package that used a pre-1.0 version of
GTK, you should remove the autoconf tests for X. The results
of these tests are included in gtk-config and will be added
to GTK_LIBS and GTK_CFLAGS by the AM_PATH_GTK macro.
Owen Taylor
14 Mar 1997

View File

@@ -29,6 +29,7 @@ IGNORE_HFILES= \
gdkpoly-generic.h \
keyname-table.h \
win32 \
directfb \
x11 \
quartz

View File

@@ -24,8 +24,14 @@
<xi:include href="xml/gdkscreen.xml" />
<xi:include href="xml/regions.xml" />
<xi:include href="xml/gcs.xml" />
<xi:include href="xml/drawing.xml" />
<xi:include href="xml/pixmaps.xml" />
<xi:include href="xml/rgb.xml" />
<xi:include href="xml/images.xml" />
<xi:include href="xml/pixbufs.xml" />
<xi:include href="xml/colors.xml" />
<xi:include href="xml/visuals.xml" />

View File

@@ -47,12 +47,12 @@ gdk_beep
<SUBSECTION>
gdk_error_trap_push
gdk_error_trap_pop
gdk_error_trap_pop_ignored
<SUBSECTION>
GDK_WINDOWING_X11
GDK_WINDOWING_WIN32
GDK_WINDOWING_QUARTZ
GDK_WINDOWING_DIRECTFB
<SUBSECTION Standard>
GDK_TYPE_GRAB_STATUS
@@ -71,17 +71,25 @@ gdk_drag_protocol_get_type
gdk_event_mask_get_type
gdk_event_type_get_type
gdk_extension_mode_get_type
gdk_fill_get_type
gdk_fill_rule_get_type
gdk_filter_return_get_type
gdk_function_get_type
gdk_gc_values_mask_get_type
gdk_grab_ownership_get_type
gdk_grab_status_get_type
gdk_gravity_get_type
gdk_image_type_get_type
gdk_input_mode_get_type
gdk_input_source_get_type
gdk_join_style_get_type
gdk_line_style_get_type
gdk_modifier_type_get_type
gdk_notify_type_get_type
gdk_overlap_type_get_type
gdk_property_state_get_type
gdk_prop_mode_get_type
gdk_rgb_dither_get_type
gdk_scroll_direction_get_type
gdk_setting_action_get_type
gdk_status_get_type
@@ -121,7 +129,6 @@ gdk_display_beep
gdk_display_sync
gdk_display_flush
gdk_display_close
gdk_display_is_closed
gdk_display_list_devices
gdk_display_get_event
gdk_display_peek_event
@@ -190,7 +197,13 @@ gdk_display_manager_get_type
<TITLE>GdkScreen</TITLE>
GdkScreen
gdk_screen_get_default
gdk_screen_get_default_colormap
gdk_screen_set_default_colormap
gdk_screen_get_system_colormap
gdk_screen_get_system_visual
gdk_screen_get_rgb_colormap
gdk_screen_get_rgb_visual
gdk_screen_get_rgba_colormap
gdk_screen_get_rgba_visual
gdk_screen_is_composited
gdk_screen_get_root_window
@@ -237,16 +250,127 @@ gdk_screen_get_type
</SECTION>
<SECTION>
<TITLE>Pixbufs</TITLE>
<FILE>pixbufs</FILE>
gdk_pixbuf_get_from_window
gdk_pixbuf_get_from_surface
<TITLE>Bitmaps and Pixmaps</TITLE>
<FILE>pixmaps</FILE>
GdkPixmap
gdk_pixmap_new
gdk_bitmap_create_from_data
gdk_pixmap_create_from_data
gdk_pixmap_create_from_xpm
gdk_pixmap_colormap_create_from_xpm
gdk_pixmap_create_from_xpm_d
gdk_pixmap_colormap_create_from_xpm_d
GdkBitmap
<SUBSECTION Standard>
GDK_PIXMAP
GDK_PIXMAP_GET_CLASS
GDK_PIXMAP_OBJECT
GDK_TYPE_PIXMAP
GDK_IS_PIXMAP
GDK_PIXMAP_CLASS
GDK_IS_PIXMAP_CLASS
<SUBSECTION Private>
gdk_pixmap_get_type
GdkPixmapObject
GdkPixmapObjectClass
</SECTION>
<SECTION>
<TITLE>Colors</TITLE>
<TITLE>Images</TITLE>
<FILE>images</FILE>
GdkImage
gdk_image_new
GdkImageType
gdk_image_get_colormap
gdk_image_set_colormap
gdk_image_get_bits_per_pixel
gdk_image_get_bytes_per_pixel
gdk_image_get_bytes_per_line
gdk_image_get_byte_order
gdk_image_get_depth
gdk_image_get_height
gdk_image_get_image_type
gdk_image_get_visual
gdk_image_get_width
gdk_image_get_pixels
<SUBSECTION>
gdk_image_put_pixel
gdk_image_get_pixel
<SUBSECTION Standard>
GDK_IMAGE
GDK_TYPE_IMAGE
GDK_IS_IMAGE
GDK_IMAGE_CLASS
GDK_IMAGE_GET_CLASS
GDK_IS_IMAGE_CLASS
GDK_TYPE_IMAGE_TYPE
<SUBSECTION Private>
GdkImageClass
gdk_image_get_type
</SECTION>
<SECTION>
<TITLE>GdkRGB</TITLE>
<FILE>rgb</FILE>
<SUBSECTION>
gdk_draw_rgb_image
gdk_draw_rgb_image_dithalign
gdk_draw_indexed_image
gdk_draw_gray_image
gdk_draw_rgb_32_image
gdk_draw_rgb_32_image_dithalign
GdkRgbDither
<SUBSECTION>
gdk_rgb_cmap_new
gdk_rgb_cmap_free
GdkRgbCmap
<SUBSECTION>
gdk_rgb_find_color
<SUBSECTION>
gdk_rgb_set_install
gdk_rgb_set_min_colors
gdk_rgb_get_visual
gdk_rgb_get_colormap
gdk_rgb_ditherable
gdk_rgb_colormap_ditherable
gdk_rgb_set_verbose
<SUBSECTION Standard>
GDK_TYPE_RGB_DITHER
</SECTION>
<SECTION>
<TITLE>Pixbufs</TITLE>
<FILE>pixbufs</FILE>
gdk_pixbuf_render_threshold_alpha
gdk_pixbuf_render_pixmap_and_mask
gdk_pixbuf_render_pixmap_and_mask_for_colormap
gdk_pixbuf_get_from_drawable
gdk_pixbuf_get_from_image
</SECTION>
<SECTION>
<TITLE>Colormaps and Colors</TITLE>
<FILE>colors</FILE>
GdkColor
GdkColormap
gdk_colormap_new
gdk_colormap_get_system
gdk_colormap_alloc_colors
gdk_colormap_alloc_color
gdk_colormap_free_colors
gdk_colormap_query_color
gdk_colormap_get_visual
gdk_colormap_get_screen
gdk_color_copy
gdk_color_free
gdk_color_parse
@@ -255,17 +379,60 @@ gdk_color_hash
gdk_color_to_string
<SUBSECTION Standard>
GDK_COLORMAP
GDK_COLORMAP_GET_CLASS
GDK_TYPE_COLORMAP
GDK_IS_COLORMAP
GDK_COLORMAP_CLASS
GDK_IS_COLORMAP_CLASS
GDK_TYPE_COLOR
<SUBSECTION Private>
GdkColormapClass
gdk_colormap_get_type
gdk_color_get_type
</SECTION>
<SECTION>
<TITLE>Drawing Primitives</TITLE>
<FILE>drawing</FILE>
GdkDrawable
gdk_drawable_get_display
gdk_drawable_get_screen
gdk_drawable_get_visual
gdk_drawable_set_colormap
gdk_drawable_get_colormap
gdk_drawable_get_depth
gdk_drawable_get_size
gdk_drawable_get_clip_region
gdk_drawable_get_visible_region
<SUBSECTION>
gdk_draw_point
gdk_draw_points
gdk_draw_line
gdk_draw_lines
gdk_draw_pixbuf
gdk_draw_segments
GdkSegment
gdk_draw_rectangle
gdk_draw_arc
gdk_draw_polygon
gdk_draw_trapezoids
GdkTrapezoid
gdk_draw_glyphs
gdk_draw_glyphs_transformed
gdk_draw_layout_line
gdk_draw_layout_line_with_colors
gdk_draw_layout
gdk_draw_layout_with_colors
<SUBSECTION>
gdk_draw_drawable
gdk_draw_image
gdk_drawable_get_image
gdk_drawable_copy_to_image
<SUBSECTION Standard>
GDK_DRAWABLE
GDK_DRAWABLE_GET_CLASS
@@ -278,6 +445,69 @@ GDK_IS_DRAWABLE_CLASS
GdkDrawableClass
</SECTION>
<SECTION>
<TITLE>Graphics Contexts</TITLE>
<FILE>gcs</FILE>
GdkGC
GdkGCValues
GdkGCValuesMask
GdkFunction
gdk_gc_new
gdk_gc_new_with_values
gdk_gc_get_screen
gdk_gc_set_values
gdk_gc_get_values
gdk_gc_set_foreground
gdk_gc_set_background
gdk_gc_set_rgb_fg_color
gdk_gc_set_rgb_bg_color
gdk_gc_set_function
gdk_gc_set_fill
GdkFill
gdk_gc_set_tile
gdk_gc_set_stipple
gdk_gc_set_ts_origin
gdk_gc_set_clip_origin
gdk_gc_set_clip_mask
gdk_gc_set_clip_rectangle
gdk_gc_set_clip_region
gdk_gc_set_subwindow
GdkSubwindowMode
gdk_gc_set_exposures
gdk_gc_set_line_attributes
GdkLineStyle
GdkCapStyle
GdkJoinStyle
gdk_gc_set_dashes
gdk_gc_copy
gdk_gc_set_colormap
gdk_gc_get_colormap
gdk_gc_offset
<SUBSECTION Standard>
GDK_GC
GDK_TYPE_GC
GDK_IS_GC
GDK_GC_CLASS
GDK_GC_GET_CLASS
GDK_IS_GC_CLASS
GDK_TYPE_CAP_STYLE
GDK_TYPE_FILL
GDK_TYPE_FILL_RULE
GDK_TYPE_FUNCTION
GDK_TYPE_GC_VALUES_MASK
GDK_TYPE_JOIN_STYLE
GDK_TYPE_LINE_STYLE
GDK_TYPE_SUBWINDOW_MODE
<SUBSECTION Private>
GdkGCClass
gdk_gc_get_type
</SECTION>
<SECTION>
<TITLE>Visuals</TITLE>
<FILE>visuals</FILE>
@@ -335,9 +565,6 @@ GdkWindowAttributesType
gdk_window_new
gdk_window_destroy
gdk_window_get_window_type
gdk_window_get_display
gdk_window_get_screen
gdk_window_get_visual
gdk_window_at_pointer
gdk_window_show
gdk_window_show_unraised
@@ -371,6 +598,9 @@ gdk_window_flush
gdk_window_has_native
gdk_window_ensure_native
gdk_window_reparent
gdk_window_clear
gdk_window_clear_area
gdk_window_clear_area_e
gdk_window_raise
gdk_window_lower
gdk_window_restack
@@ -389,7 +619,6 @@ gdk_window_end_paint
<SUBSECTION>
gdk_window_invalidate_rect
gdk_window_invalidate_region
GdkWindowChildFunc
gdk_window_invalidate_maybe_recurse
gdk_window_get_update_area
gdk_window_freeze_updates
@@ -397,6 +626,7 @@ gdk_window_thaw_updates
gdk_window_process_all_updates
gdk_window_process_updates
gdk_window_set_debug_updates
gdk_window_get_internal_paint_info
gdk_window_enable_synchronized_configure
gdk_window_configure_finished
@@ -412,25 +642,26 @@ gdk_window_remove_filter
GdkFilterFunc
GdkFilterReturn
GdkXEvent
gdk_window_shape_combine_mask
gdk_window_shape_combine_region
gdk_window_set_child_shapes
gdk_window_merge_child_shapes
gdk_window_input_shape_combine_mask
gdk_window_input_shape_combine_region
gdk_window_set_child_input_shapes
gdk_window_merge_child_input_shapes
gdk_window_set_static_gravities
gdk_window_set_title
gdk_window_set_background
gdk_window_set_background_pattern
gdk_window_get_background_pattern
gdk_window_get_background
gdk_window_set_back_pixmap
gdk_window_get_back_pixmap
GDK_PARENT_RELATIVE
gdk_window_set_cursor
gdk_window_get_cursor
gdk_window_get_user_data
gdk_window_get_geometry
gdk_window_set_geometry_hints
gdk_window_get_width
gdk_window_get_height
gdk_window_set_icon_list
gdk_window_set_modal_hint
gdk_window_get_modal_hint
@@ -443,6 +674,7 @@ gdk_window_get_position
gdk_window_get_root_origin
gdk_window_get_frame_extents
gdk_window_get_origin
gdk_window_get_deskrelative_origin
gdk_window_get_root_coords
gdk_window_get_pointer
gdk_window_get_device_position
@@ -453,6 +685,7 @@ gdk_window_get_children
gdk_window_peek_children
gdk_window_get_events
gdk_window_set_events
gdk_window_set_icon
gdk_window_set_icon_name
gdk_window_set_transient_for
gdk_window_set_role
@@ -479,10 +712,12 @@ GdkPointerHooks
gdk_set_pointer_hooks
<SUBSECTION>
gdk_offscreen_window_get_surface
gdk_offscreen_window_get_pixmap
gdk_offscreen_window_set_embedder
gdk_offscreen_window_get_embedder
gdk_window_geometry_changed
gdk_window_redirect_to_drawable
gdk_window_remove_redirection
gdk_window_coords_from_parent
gdk_window_coords_to_parent
gdk_window_get_effective_parent
@@ -582,25 +817,47 @@ GDK_TYPE_PROP_MODE
<SECTION>
<TITLE>Pango Interaction</TITLE>
<FILE>pango_interaction</FILE>
gdk_pango_layout_get_clip_region
gdk_pango_layout_line_get_clip_region
GdkPangoRenderer
GdkPangoRendererClass
gdk_pango_renderer_new
gdk_pango_renderer_get_default
gdk_pango_renderer_set_drawable
gdk_pango_renderer_set_gc
gdk_pango_renderer_set_stipple
gdk_pango_renderer_set_override_color
gdk_pango_context_get
gdk_pango_context_get_for_screen
GdkPangoAttrEmbossed
GdkPangoAttrEmbossColor
GdkPangoAttrStipple
gdk_pango_attr_emboss_color_new
gdk_pango_attr_embossed_new
gdk_pango_attr_stipple_new
gdk_pango_layout_get_clip_region
gdk_pango_layout_line_get_clip_region
<SUBSECTION Standard>
GDK_TYPE_PANGO_RENDERER
GDK_PANGO_RENDERER
GDK_IS_PANGO_RENDERER
GDK_PANGO_RENDERER_CLASS
GDK_IS_PANGO_RENDERER_CLASS
GDK_PANGO_RENDERER_GET_CLASS
<SUBSECTION Private>
gdk_pango_renderer_get_type
GdkPangoRendererPrivate
</SECTION>
<SECTION>
<TITLE>Cairo Interaction</TITLE>
<FILE>cairo_interaction</FILE>
gdk_window_create_similar_surface
gdk_cairo_create
gdk_cairo_get_clip_rectangle
gdk_cairo_set_source_color
gdk_cairo_set_source_pixbuf
gdk_cairo_set_source_window
gdk_cairo_set_source_pixmap
gdk_cairo_rectangle
gdk_cairo_region
gdk_cairo_reset_clip
gdk_cairo_region_create_from_surface
</SECTION>
<SECTION>
@@ -625,6 +882,7 @@ GDK_THREADS_LEAVE
gdk_threads_init
gdk_threads_enter
gdk_threads_leave
gdk_threads_mutex
gdk_threads_set_lock_functions
gdk_threads_add_idle
gdk_threads_add_idle_full
@@ -883,12 +1141,12 @@ gdk_owner_change_get_type
GdkCursor
GdkCursorType
gdk_cursor_new
gdk_cursor_new_from_pixmap
gdk_cursor_new_from_pixbuf
gdk_cursor_new_from_name
gdk_cursor_new_for_display
gdk_cursor_get_display
gdk_cursor_get_image
gdk_cursor_get_cursor_type
gdk_cursor_ref
gdk_cursor_unref
@@ -949,24 +1207,40 @@ gdk_drag_context_get_type
<TITLE>X Window System Interaction</TITLE>
<FILE>x_interaction</FILE>
GDK_ROOT_WINDOW
GDK_DISPLAY
GDK_WINDOW_XDISPLAY
GDK_WINDOW_XID
GDK_PIXMAP_XDISPLAY
GDK_PIXMAP_XID
GDK_DISPLAY_XDISPLAY
GDK_DRAWABLE_XDISPLAY
GDK_DRAWABLE_XID
GDK_IMAGE_XDISPLAY
GDK_IMAGE_XIMAGE
GDK_GC_XDISPLAY
GDK_COLORMAP_XDISPLAY
GDK_COLORMAP_XCOLORMAP
GDK_SCREEN_XDISPLAY
GDK_SCREEN_XNUMBER
GDK_SCREEN_XSCREEN
GDK_VISUAL_XVISUAL
GDK_CURSOR_XCURSOR
GDK_CURSOR_XDISPLAY
GDK_GC_XGC
GDK_GC_GET_XGC
GDK_WINDOW_XWINDOW
gdkx_visual_get
gdk_pixmap_foreign_new
gdk_pixmap_foreign_new_for_display
gdk_pixmap_foreign_new_for_screen
gdk_window_foreign_new
gdk_window_foreign_new_for_display
gdk_xid_table_lookup
gdk_xid_table_lookup_for_display
gdk_window_lookup
gdk_window_lookup_for_display
gdk_pixmap_lookup
gdk_pixmap_lookup_for_display
gdk_x11_lookup_xdisplay
gdk_x11_get_server_time
gdk_net_wm_supports
@@ -977,6 +1251,9 @@ gdk_x11_screen_lookup_visual
gdk_x11_window_set_user_time
gdk_x11_window_move_to_current_desktop
gdk_x11_display_get_user_time
gdk_x11_colormap_foreign_new
gdk_x11_colormap_get_xcolormap
gdk_x11_colormap_get_xdisplay
gdk_x11_cursor_get_xcursor
gdk_x11_cursor_get_xdisplay
gdk_x11_display_broadcast_startup_message
@@ -984,17 +1261,18 @@ gdk_x11_display_get_startup_notification_id
gdk_x11_display_get_xdisplay
gdk_x11_display_grab
gdk_x11_display_ungrab
gdk_x11_display_error_trap_push
gdk_x11_display_error_trap_pop
gdk_x11_display_error_trap_pop_ignored
gdk_x11_display_set_cursor_theme
gdk_x11_register_standard_event_type
gdk_x11_drawable_get_xdisplay
gdk_x11_drawable_get_xid
gdk_x11_gc_get_xdisplay
gdk_x11_gc_get_xgc
gdk_x11_get_default_root_xwindow
gdk_x11_get_default_screen
gdk_x11_get_default_xdisplay
gdk_x11_grab_server
gdk_x11_image_get_xdisplay
gdk_x11_image_get_ximage
gdk_x11_screen_get_screen_number
gdk_x11_screen_get_xscreen
gdk_x11_ungrab_server
@@ -1009,8 +1287,10 @@ gdk_x11_get_xatom_name
gdk_x11_get_xatom_name_for_display
<SUBSECTION Private>
gdk_display
GDK_HAVE_WCHAR_H
GDK_HAVE_WCTYPE_H
gdk_x11_pixmap_get_drawable_impl
gdk_x11_window_get_drawable_impl
</SECTION>

View File

@@ -5,6 +5,9 @@ gdk_display_manager_get_type
gdk_screen_get_type
gdk_drawable_get_type
gdk_window_object_get_type
gdk_pango_renderer_get_type
gdk_pixmap_get_type
gdk_gc_get_type
gdk_keymap_get_type
gdk_device_get_type
gdk_device_manager_get_type

View File

@@ -1,6 +1,2 @@
cairo_interaction.sgml
colors.sgml
dnd.sgml
pixbufs.sgml
regions.sgml
windows.sgml

View File

@@ -0,0 +1,99 @@
<!-- ##### SECTION Title ##### -->
Cairo Interaction
<!-- ##### SECTION Short_Description ##### -->
Functions to support using Cairo
<!-- ##### SECTION Long_Description ##### -->
<para>
<link href="http://cairographics.org">Cairo</link> is a graphics
library that supports vector graphics and image compositing that
can be used with GDK. Since 2.8, GTK+ does most of its drawing
using Cairo.
</para>
<para>
GDK does not wrap the Cairo API, instead it allows to create Cairo
contexts which can be used to draw on GDK drawables. Additional
functions allow to convert GDK's rectangles and regions into
Cairo paths and to use pixbufs as sources for drawing operations.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### FUNCTION gdk_cairo_create ##### -->
<para>
</para>
@drawable:
@Returns:
<!-- ##### FUNCTION gdk_cairo_set_source_color ##### -->
<para>
</para>
@cr:
@color:
<!-- ##### FUNCTION gdk_cairo_set_source_pixbuf ##### -->
<para>
</para>
@cr:
@pixbuf:
@pixbuf_x:
@pixbuf_y:
<!-- ##### FUNCTION gdk_cairo_set_source_pixmap ##### -->
<para>
</para>
@cr:
@pixmap:
@pixmap_x:
@pixmap_y:
<!-- ##### FUNCTION gdk_cairo_rectangle ##### -->
<para>
</para>
@cr:
@rectangle:
<!-- ##### FUNCTION gdk_cairo_region ##### -->
<para>
</para>
@cr:
@region:
<!-- ##### FUNCTION gdk_cairo_reset_clip ##### -->
<para>
</para>
@cr:
@drawable:

View File

@@ -0,0 +1,195 @@
<!-- ##### SECTION Title ##### -->
Colormaps and Colors
<!-- ##### SECTION Short_Description ##### -->
Manipulation of colors and colormaps
<!-- ##### SECTION Long_Description ##### -->
<para>
These functions are used to modify colormaps.
A colormap is an object that contains the mapping
between the color values stored in memory and
the RGB values that are used to display color
values. In general, colormaps only contain
significant information for pseudo-color visuals,
but even for other visual types, a colormap object
is required in some circumstances.
</para>
<para>
There are a couple of special colormaps that can
be retrieved. The system colormap (retrieved
with gdk_colormap_get_system()) is the default
colormap of the system. If you are using GdkRGB,
there is another colormap that is important - the
colormap in which GdkRGB works, retrieved with
gdk_rgb_get_colormap(). However, when using GdkRGB,
it is not generally necessary to allocate colors
directly.
</para>
<para>
In previous revisions of this interface, a number
of functions that take a #GdkColormap parameter
were replaced with functions whose names began
with "gdk_colormap_".
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GdkColor ##### -->
<para>
The #GdkColor structure is used to describe an
allocated or unallocated color.
</para>
@pixel: For allocated colors, the value used to
draw this color on the screen.
@red: The red component of the color. This is
a value between 0 and 65535, with 65535 indicating
full intensitiy.
@green: The green component of the color.
@blue: The blue component of the color.
<!-- ##### STRUCT GdkColormap ##### -->
<para>
The colormap structure contains the following public fields.
</para>
<!-- ##### FUNCTION gdk_colormap_new ##### -->
<para>
</para>
@visual:
@allocate:
@Returns:
<!-- ##### FUNCTION gdk_colormap_get_system ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gdk_colormap_alloc_colors ##### -->
<para>
</para>
@colormap:
@colors:
@n_colors:
@writeable:
@best_match:
@success:
@Returns:
<!-- ##### FUNCTION gdk_colormap_alloc_color ##### -->
<para>
</para>
@colormap:
@color:
@writeable:
@best_match:
@Returns:
<!-- ##### FUNCTION gdk_colormap_free_colors ##### -->
<para>
</para>
@colormap:
@colors:
@n_colors:
<!-- ##### FUNCTION gdk_colormap_query_color ##### -->
<para>
</para>
@colormap:
@pixel:
@result:
<!-- ##### FUNCTION gdk_colormap_get_visual ##### -->
<para>
</para>
@colormap:
@Returns:
<!-- ##### FUNCTION gdk_colormap_get_screen ##### -->
<para>
</para>
@cmap:
@Returns:
<!-- ##### FUNCTION gdk_color_copy ##### -->
<para>
</para>
@color:
@Returns:
<!-- ##### FUNCTION gdk_color_free ##### -->
<para>
</para>
@color:
<!-- ##### FUNCTION gdk_color_parse ##### -->
<para>
</para>
@spec:
@color:
@Returns:
<!-- ##### FUNCTION gdk_color_equal ##### -->
<para>
</para>
@colora:
@colorb:
@Returns:
<!-- ##### FUNCTION gdk_color_hash ##### -->
<para>
</para>
@colora:
@Returns:
<!-- ##### FUNCTION gdk_color_to_string ##### -->
<para>
</para>
@color:
@Returns:

View File

@@ -125,7 +125,7 @@ The standard cursors available.
@GDK_LAST_CURSOR: last cursor type
@GDK_BLANK_CURSOR: Blank cursor. Since 2.16
@GDK_CURSOR_IS_PIXMAP: type of cursors constructed with
gdk_cursor_new_from_pixbuf()
gdk_cursor_new_from_pixmap() or gdk_cursor_new_from_pixbuf()
<!-- ##### FUNCTION gdk_cursor_new ##### -->
<para>
@@ -136,6 +136,19 @@ The standard cursors available.
@Returns:
<!-- ##### FUNCTION gdk_cursor_new_from_pixmap ##### -->
<para>
</para>
@source:
@mask:
@fg:
@bg:
@x:
@y:
@Returns:
<!-- ##### FUNCTION gdk_cursor_new_from_pixbuf ##### -->
<para>
@@ -186,15 +199,6 @@ The standard cursors available.
@Returns:
<!-- ##### FUNCTION gdk_cursor_get_cursor_type ##### -->
<para>
</para>
@cursor:
@Returns:
<!-- ##### FUNCTION gdk_cursor_ref ##### -->
<para>

View File

@@ -45,6 +45,15 @@ or a #GdkWindow.
</para>
<!-- ##### FUNCTION gdk_drawable_get_display ##### -->
<para>
</para>
@drawable:
@Returns:
<!-- ##### FUNCTION gdk_drawable_get_screen ##### -->
<para>
@@ -72,6 +81,15 @@ or a #GdkWindow.
@colormap:
<!-- ##### FUNCTION gdk_drawable_get_colormap ##### -->
<para>
</para>
@drawable:
@Returns:
<!-- ##### FUNCTION gdk_drawable_get_depth ##### -->
<para>
@@ -109,3 +127,293 @@ or a #GdkWindow.
@Returns:
<!-- ##### FUNCTION gdk_draw_point ##### -->
<para>
</para>
@drawable:
@gc:
@x:
@y:
<!-- ##### FUNCTION gdk_draw_points ##### -->
<para>
</para>
@drawable:
@gc:
@points:
@n_points:
<!-- ##### FUNCTION gdk_draw_line ##### -->
<para>
</para>
@drawable:
@gc:
@x1_:
@y1_:
@x2_:
@y2_:
<!-- ##### FUNCTION gdk_draw_lines ##### -->
<para>
</para>
@drawable:
@gc:
@points:
lines.
@n_points:
<!-- ##### FUNCTION gdk_draw_pixbuf ##### -->
<para>
</para>
@drawable:
@gc:
@pixbuf:
@src_x:
@src_y:
@dest_x:
@dest_y:
@width:
@height:
@dither:
@x_dither:
@y_dither:
<!-- ##### FUNCTION gdk_draw_segments ##### -->
<para>
</para>
@drawable:
@gc:
@segs:
@n_segs:
<!-- ##### STRUCT GdkSegment ##### -->
<para>
Specifies the start and end point of a line for use by the gdk_draw_segments()
function.
</para>
@x1: the x coordinate of the start point.
@y1: the y coordinate of the start point.
@x2: the x coordinate of the end point.
@y2: the y coordinate of the end point.
<!-- ##### FUNCTION gdk_draw_rectangle ##### -->
<para>
</para>
<note>
<para>
</para>
</note>
@drawable:
@gc:
@filled:
@x:
@y:
@width:
@height:
<!-- ##### FUNCTION gdk_draw_arc ##### -->
<para>
</para>
@drawable:
@gc:
@filled:
@x:
@y:
@width:
@height:
@angle1:
@angle2:
<!-- ##### FUNCTION gdk_draw_polygon ##### -->
<para>
</para>
@drawable:
@gc:
@filled:
@points:
@n_points:
<!-- ##### FUNCTION gdk_draw_trapezoids ##### -->
<para>
</para>
@drawable:
@gc:
@trapezoids:
@n_trapezoids:
<!-- ##### STRUCT GdkTrapezoid ##### -->
<para>
Specifies a trapezpoid for use by the gdk_draw_trapezoids().
The trapezoids used here have parallel, horizontal top and
bottom edges.
</para>
@y1: the y coordinate of the start point.
@x11: the x coordinate of the top left corner
@x21: the x coordinate of the top right corner
@y2: the y coordinate of the end point.
@x12: the x coordinate of the bottom left corner
@x22: the x coordinate of the bottom right corner
<!-- ##### FUNCTION gdk_draw_glyphs ##### -->
<para>
</para>
@drawable:
@gc:
@font:
@x:
@y:
@glyphs:
<!-- ##### FUNCTION gdk_draw_glyphs_transformed ##### -->
<para>
</para>
@drawable:
@gc:
@matrix:
@font:
@x:
@y:
@glyphs:
<!-- ##### FUNCTION gdk_draw_layout_line ##### -->
<para>
</para>
@drawable:
@gc:
@x:
@y:
@line:
<!-- ##### FUNCTION gdk_draw_layout_line_with_colors ##### -->
<para>
</para>
@drawable:
@gc:
@x:
@y:
@line:
@foreground:
@background:
<!-- ##### FUNCTION gdk_draw_layout ##### -->
<para>
</para>
@drawable:
@gc:
@x:
@y:
@layout:
<!-- ##### FUNCTION gdk_draw_layout_with_colors ##### -->
<para>
</para>
@drawable:
@gc:
@x:
@y:
@layout:
@foreground:
@background:
<!-- ##### FUNCTION gdk_draw_drawable ##### -->
<para>
</para>
@drawable:
@gc:
@src:
@xsrc:
@ysrc:
@xdest:
@ydest:
@width:
@height:
<!-- ##### FUNCTION gdk_draw_image ##### -->
<para>
</para>
@drawable:
@gc:
@image:
@xsrc:
@ysrc:
@xdest:
@ydest:
@width:
@height:
<!-- ##### FUNCTION gdk_drawable_get_image ##### -->
<para>
</para>
@drawable:
@x:
@y:
@width:
@height:
@Returns:
<!-- ##### FUNCTION gdk_drawable_copy_to_image ##### -->
<para>
</para>
@drawable:
@image:
@src_x:
@src_y:
@dest_x:
@dest_y:
@width:
@height:
@Returns:

View File

@@ -382,7 +382,8 @@ union, 16-bit data uses the s array, and 32-bit data uses the l array.
<!-- ##### STRUCT GdkEventNoExpose ##### -->
<para>
Generated when the area of a #GdkDrawable being copied was completely available.
Generated when the area of a #GdkDrawable being copied, with gdk_draw_drawable()
, was completely available.
</para>
<para>
FIXME: add more here.

View File

@@ -0,0 +1,427 @@
<!-- ##### SECTION Title ##### -->
Graphics Contexts
<!-- ##### SECTION Short_Description ##### -->
Objects to encapsulate drawing properties
<!-- ##### SECTION Long_Description ##### -->
<para>
All drawing operations in GDK take a
<firstterm>graphics context</firstterm> (GC) argument.
A graphics context encapsulates information about
the way things are drawn, such as the foreground
color or line width. By using graphics contexts,
the number of arguments to each drawing call is
greatly reduced, and communication overhead is
minimized, since identical arguments do not need
to be passed repeatedly.
</para>
<para>
Most values of a graphics context can be set at
creation time by using gdk_gc_new_with_values(),
or can be set one-by-one using functions such
as gdk_gc_set_foreground(). A few of the values
in the GC, such as the dash pattern, can only
be set by the latter method.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GdkGC ##### -->
<para>
The #GdkGC structure represents a graphics context.
It is an opaque structure with no user-visible
elements.
</para>
<!-- ##### STRUCT GdkGCValues ##### -->
<para>
The #GdkGCValues structure holds a set of values used
to create or modify a graphics context.
</para>
@foreground: the foreground color. Note that gdk_gc_get_values()
only sets the pixel value.
@background: the background color. Note that gdk_gc_get_values()
only sets the pixel value.
@font: the default font.
@function: the bitwise operation used when drawing.
@fill: the fill style.
@tile: the tile pixmap.
@stipple: the stipple bitmap.
@clip_mask: the clip mask bitmap.
@subwindow_mode: the subwindow mode.
@ts_x_origin: the x origin of the tile or stipple.
@ts_y_origin: the y origin of the tile or stipple.
@clip_x_origin: the x origin of the clip mask.
@clip_y_origin: the y origin of the clip mask.
@graphics_exposures: whether graphics exposures are enabled.
@line_width: the line width.
@line_style: the way dashed lines are drawn.
@cap_style: the way the ends of lines are drawn.
@join_style: the way joins between lines are drawn.
<!-- ##### ENUM GdkGCValuesMask ##### -->
<para>
A set of bit flags used to indicate which fields
#GdkGCValues structure are set.
</para>
@GDK_GC_FOREGROUND: the @foreground is set.
@GDK_GC_BACKGROUND: the @background is set.
@GDK_GC_FUNCTION: the @function is set.
@GDK_GC_FILL: the @fill is set.
@GDK_GC_TILE: the @tile is set.
@GDK_GC_STIPPLE: the @stipple is set.
@GDK_GC_CLIP_MASK: the @clip_mask is set.
@GDK_GC_SUBWINDOW: the @subwindow_mode is set.
@GDK_GC_TS_X_ORIGIN: the @ts_x_origin is set.
@GDK_GC_TS_Y_ORIGIN: the @ts_y_origin is set.
@GDK_GC_CLIP_X_ORIGIN: the @clip_x_origin is set.
@GDK_GC_CLIP_Y_ORIGIN: the @clip_y_origin is set.
@GDK_GC_EXPOSURES: the @graphics_exposures is set.
@GDK_GC_LINE_WIDTH: the @line_width is set.
@GDK_GC_LINE_STYLE: the @line_style is set.
@GDK_GC_CAP_STYLE: the @cap_style is set.
@GDK_GC_JOIN_STYLE: the @join_style is set.
<!-- ##### ENUM GdkFunction ##### -->
<para>
Determines how the bit values for the source pixels are combined with
the bit values for destination pixels to produce the final result. The
sixteen values here correspond to the 16 different possible 2x2 truth
tables. Only a couple of these values are usually useful; for colored
images, only %GDK_COPY, %GDK_XOR and %GDK_INVERT are generally
useful. For bitmaps, %GDK_AND and %GDK_OR are also useful.
</para>
@GDK_COPY: <literal>dst = src</literal>
@GDK_INVERT: <literal>dst = NOT dst</literal>
@GDK_XOR: <literal>dst = src XOR dst</literal>
@GDK_CLEAR: <literal>dst = 0</literal>
@GDK_AND: <literal>dst = dst AND src</literal>
@GDK_AND_REVERSE: <literal>dst = src AND (NOT dst)</literal>
@GDK_AND_INVERT: <literal>dst = (NOT src) AND dst</literal>
@GDK_NOOP: <literal>dst = dst</literal>
@GDK_OR: <literal>dst = src OR dst</literal>
@GDK_EQUIV: <literal>dst = (NOT src) XOR dst</literal>
@GDK_OR_REVERSE: <literal>dst = src OR (NOT dst)</literal>
@GDK_COPY_INVERT: <literal>dst = NOT src</literal>
@GDK_OR_INVERT: <literal>dst = (NOT src) OR dst</literal>
@GDK_NAND: <literal>dst = (NOT src) OR (NOT dst)</literal>
@GDK_NOR: <literal>dst = (NOT src) AND (NOT dst)</literal>
@GDK_SET: <literal>dst = 1</literal>
<!-- ##### FUNCTION gdk_gc_new ##### -->
<para>
</para>
@drawable:
@Returns:
<!-- ##### FUNCTION gdk_gc_new_with_values ##### -->
<para>
</para>
@drawable:
@values:
@values_mask:
@Returns:
<!-- ##### FUNCTION gdk_gc_get_screen ##### -->
<para>
</para>
@gc:
@Returns:
<!-- ##### FUNCTION gdk_gc_set_values ##### -->
<para>
</para>
@gc:
@values:
@values_mask:
<!-- ##### FUNCTION gdk_gc_get_values ##### -->
<para>
</para>
@gc:
@values:
<!-- ##### FUNCTION gdk_gc_set_foreground ##### -->
<para>
</para>
@gc:
@color:
<!-- ##### FUNCTION gdk_gc_set_background ##### -->
<para>
</para>
@gc:
@color:
<!-- ##### FUNCTION gdk_gc_set_rgb_fg_color ##### -->
<para>
</para>
@gc:
@color:
<!-- ##### FUNCTION gdk_gc_set_rgb_bg_color ##### -->
<para>
</para>
@gc:
@color:
<!-- ##### FUNCTION gdk_gc_set_function ##### -->
<para>
</para>
@gc:
@function:
<!-- ##### FUNCTION gdk_gc_set_fill ##### -->
<para>
</para>
@gc:
@fill:
<!-- ##### ENUM GdkFill ##### -->
<para>
Determines how primitives are drawn.
</para>
@GDK_SOLID: draw with the foreground color.
@GDK_TILED: draw with a tiled pixmap.
@GDK_STIPPLED: draw using the stipple bitmap. Pixels corresponding
to bits in the stipple bitmap that are set will be drawn in the
foreground color; pixels corresponding to bits that are
not set will be left untouched.
@GDK_OPAQUE_STIPPLED: draw using the stipple bitmap. Pixels corresponding
to bits in the stipple bitmap that are set will be drawn in the
foreground color; pixels corresponding to bits that are
not set will be drawn with the background color.
<!-- ##### FUNCTION gdk_gc_set_tile ##### -->
<para>
</para>
@gc:
@tile:
<!-- ##### FUNCTION gdk_gc_set_stipple ##### -->
<para>
</para>
@gc:
@stipple:
<!-- ##### FUNCTION gdk_gc_set_ts_origin ##### -->
<para>
</para>
@gc:
@x:
@y:
<!-- ##### FUNCTION gdk_gc_set_clip_origin ##### -->
<para>
</para>
@gc:
@x:
@y:
<!-- ##### FUNCTION gdk_gc_set_clip_mask ##### -->
<para>
</para>
@gc:
@mask:
<!-- ##### FUNCTION gdk_gc_set_clip_rectangle ##### -->
<para>
</para>
@gc:
@rectangle:
<!-- ##### FUNCTION gdk_gc_set_clip_region ##### -->
<para>
</para>
@gc:
@region:
<!-- ##### FUNCTION gdk_gc_set_subwindow ##### -->
<para>
</para>
@gc:
@mode:
<!-- ##### ENUM GdkSubwindowMode ##### -->
<para>
Determines how drawing onto a window will affect child
windows of that window.
</para>
@GDK_CLIP_BY_CHILDREN: only draw onto the window itself.
@GDK_INCLUDE_INFERIORS: draw onto the window and child windows.
<!-- ##### FUNCTION gdk_gc_set_exposures ##### -->
<para>
</para>
@gc:
@exposures:
<!-- ##### FUNCTION gdk_gc_set_line_attributes ##### -->
<para>
</para>
@gc:
@line_width:
@line_style:
@cap_style:
@join_style:
<!-- ##### ENUM GdkLineStyle ##### -->
<para>
Determines how lines are drawn.
</para>
@GDK_LINE_SOLID: lines are drawn solid.
@GDK_LINE_ON_OFF_DASH: even segments are drawn; odd segments are not drawn.
@GDK_LINE_DOUBLE_DASH: even segments are normally. Odd segments are drawn
in the background color if the fill style is %GDK_SOLID, or in the background
color masked by the stipple if the fill style is %GDK_STIPPLED.
<!-- ##### ENUM GdkCapStyle ##### -->
<para>
Determines how the end of lines are drawn.
</para>
@GDK_CAP_NOT_LAST: the same as %GDK_CAP_BUTT for lines of non-zero width.
for zero width lines, the final point on the line will not be drawn.
@GDK_CAP_BUTT: the ends of the lines are drawn squared off and extending
to the coordinates of the end point.
@GDK_CAP_ROUND: the ends of the lines are drawn as semicircles with the
diameter equal to the line width and centered at the end point.
@GDK_CAP_PROJECTING: the ends of the lines are drawn squared off and extending
half the width of the line beyond the end point.
<!-- ##### ENUM GdkJoinStyle ##### -->
<para>
Determines how the joins between segments of a polygon are drawn.
</para>
@GDK_JOIN_MITER: the sides of each line are extended to meet at an angle.
@GDK_JOIN_ROUND: the sides of the two lines are joined by a circular arc.
@GDK_JOIN_BEVEL: the sides of the two lines are joined by a straight line which
makes an equal angle with each line.
<!-- ##### FUNCTION gdk_gc_set_dashes ##### -->
<para>
</para>
@gc:
@dash_offset:
@dash_list:
@n:
<!-- ##### FUNCTION gdk_gc_copy ##### -->
<para>
</para>
@dst_gc:
@src_gc:
<!-- ##### FUNCTION gdk_gc_set_colormap ##### -->
<para>
</para>
@gc:
@colormap:
<!-- ##### FUNCTION gdk_gc_get_colormap ##### -->
<para>
</para>
@gc:
@Returns:
<!-- ##### FUNCTION gdk_gc_offset ##### -->
<para>
</para>
@gc:
@x_offset:
@y_offset:

View File

@@ -190,15 +190,6 @@ of an X display. All its fields are private and should not be accessed directly.
@display:
<!-- ##### FUNCTION gdk_display_is_closed ##### -->
<para>
</para>
@display:
@Returns:
<!-- ##### FUNCTION gdk_display_list_devices ##### -->
<para>

View File

@@ -113,6 +113,24 @@ when GDK gets multihead support.
@Returns:
<!-- ##### FUNCTION gdk_screen_get_rgb_colormap ##### -->
<para>
</para>
@screen:
@Returns:
<!-- ##### FUNCTION gdk_screen_get_rgb_visual ##### -->
<para>
</para>
@screen:
@Returns:
<!-- ##### FUNCTION gdk_screen_get_rgba_colormap ##### -->
<para>

View File

@@ -326,6 +326,42 @@ available.
@void:
<!-- ##### FUNCTION gdk_error_trap_push ##### -->
<para>
This function allows X errors to be trapped instead of the normal behavior
of exiting the application. It should only be used if it is not possible to
avoid the X error in any other way.
</para>
<example>
<title>Trapping an X error</title>
<programlisting>
gdk_error_trap_push (<!-- -->);
/* ... Call the X function which may cause an error here ... */
/* Flush the X queue to catch errors now. */
gdk_flush (<!-- -->);
if (gdk_error_trap_pop (<!-- -->))
{
/* ... Handle the error here ... */
}
</programlisting>
</example>
@void:
<!-- ##### FUNCTION gdk_error_trap_pop ##### -->
<para>
Removes the X error trap installed with gdk_error_trap_push().
</para>
@void:
@Returns: the X error code, or 0 if no error occurred.
<!-- ##### MACRO GDK_WINDOWING_X11 ##### -->
<para>
This macro is defined if GDK is configured to use the X11 backend.

View File

@@ -0,0 +1,228 @@
<!-- ##### SECTION Title ##### -->
Images
<!-- ##### SECTION Short_Description ##### -->
A client-side area for bit-mapped graphics
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GdkImage type represents an area for drawing graphics.
It has now been superceded to a large extent by the much more flexible
<link linkend="gdk-GdkRGB">GdkRGB</link> functions.
</para>
<para>
To create an empty #GdkImage use gdk_image_new().
To create an image from part of a #GdkWindow use gdk_drawable_get_image().
</para>
<para>
The image can be manipulated with gdk_image_get_pixel() and
gdk_image_put_pixel(), or alternatively by changing the actual pixel data.
Though manipulating the pixel data requires complicated code to cope with
the different formats that may be used.
</para>
<para>
To draw a #GdkImage in a #GdkWindow or #GdkPixmap use gdk_draw_image().
</para>
<para>
To destroy a #GdkImage use g_object_unref().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
<variablelist>
<varlistentry>
<term><link linkend="gdk-Bitmaps-and-Pixmaps">Bitmaps and Pixmaps</link></term>
<listitem><para>
Graphics which are stored on the X Windows server.
Since these are stored on the server they can be drawn very quickly, and all
of the <link linkend="gdk-Drawing-Primitives">Drawing Primitives</link> can be
used to draw on them. Their main disadvantage is that manipulating individual
pixels can be very slow.
</para></listitem>
</varlistentry>
<varlistentry>
<term><link linkend="gdk-GdkRGB">GdkRGB</link></term>
<listitem><para>
Built on top of #GdkImage, this provides much more functionality,
including the dithering of colors to produce better output on low-color
displays.
</para></listitem>
</varlistentry>
</variablelist>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GdkImage ##### -->
<para>
The #GdkImage struct contains information on the image and the pixel data.
</para>
@parent_instance: the parent instance
<!-- ##### FUNCTION gdk_image_new ##### -->
<para>
Creates a new #GdkImage.
</para>
@type: the type of the #GdkImage, one of %GDK_IMAGE_NORMAL, %GDK_IMAGE_SHARED
and %GDK_IMAGE_FASTEST. %GDK_IMAGE_FASTEST is probably the best choice, since
it will try creating a %GDK_IMAGE_SHARED image first and if that fails it will
then use %GDK_IMAGE_NORMAL.
@visual: the #GdkVisual to use for the image.
@width: the width of the image in pixels.
@height: the height of the image in pixels.
@Returns: a new #GdkImage, or %NULL if the image could not be created.
<!-- ##### ENUM GdkImageType ##### -->
<para>
Specifies the type of a #GdkImage.
</para>
@GDK_IMAGE_NORMAL: The original X image type, which is quite slow since the
image has to be transferred from the client to the server to display it.
@GDK_IMAGE_SHARED: A faster image type, which uses shared memory to transfer
the image data between client and server. However this will only be available
if client and server are on the same machine and the shared memory extension
is supported by the server.
@GDK_IMAGE_FASTEST: Specifies that %GDK_IMAGE_SHARED should be tried first,
and if that fails then %GDK_IMAGE_NORMAL will be used.
<!-- ##### FUNCTION gdk_image_get_colormap ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_set_colormap ##### -->
<para>
</para>
@image:
@colormap:
<!-- ##### FUNCTION gdk_image_get_bits_per_pixel ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_bytes_per_pixel ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_bytes_per_line ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_byte_order ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_depth ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_height ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_image_type ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_visual ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_width ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_get_pixels ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_image_put_pixel ##### -->
<para>
Sets a pixel in a #GdkImage to a given pixel value.
</para>
@image: a #GdkImage.
@x: the x coordinate of the pixel to set.
@y: the y coordinate of the pixel to set.
@pixel: the pixel value to set.
<!-- ##### FUNCTION gdk_image_get_pixel ##### -->
<para>
Gets a pixel value at a specified position in a #GdkImage.
</para>
@image: a #GdkImage.
@x: the x coordinate of the pixel to get.
@y: the y coordinate of the pixel to get.
@Returns: the pixel value at the given position.

View File

@@ -11,12 +11,13 @@ They appear in the <structfield>keyval</structfield> field of the
#GdkEventKey structure, which is passed to signal handlers for the
"key-press-event" and "key-release-event" signals.
The complete list of key values can be found in the <filename>&lt;gdk/gdkkeysyms.h&gt;</filename>
header file.
header file. <filename>&lt;gdk/gdkkeysyms.h&gt;</filename> is not included in <filename>&lt;gdk/gdk.h&gt;</filename>,
it must be included independently, because the file is quite large.
</para>
<para>
Key values are regularly updated from the upstream X.org X11 implementation,
so new values are added regularly. They will be prefixed with GDK_KEY_ rather
than XF86XK_ or XK_ (for older symbols).
so new values are added regularly. They will be prefixed with GDK_ rather than
XF86XK_ or XK_ (for older symbols).
</para>
<para>
Key values can be converted into a string representation using
@@ -29,7 +30,7 @@ gdk_keyval_is_lower(). Key values can be converted to upper or lower case
using gdk_keyval_to_upper() and gdk_keyval_to_lower().
</para>
<para>
When it makes sense, key values can be converted to and from
When it makes sense, key values can be converted to and from
Unicode characters with gdk_keyval_to_unicode() and gdk_unicode_to_keyval().
</para>
@@ -237,15 +238,6 @@ Returns: %PANGO_DIRECTION_LTR or %PANGO_DIRECTION_RTL.
@Returns:
<!-- ##### FUNCTION gdk_keymap_get_num_lock_state ##### -->
<para>
</para>
@keymap:
@Returns:
<!-- ##### FUNCTION gdk_keymap_add_virtual_modifiers ##### -->
<para>
@@ -269,7 +261,7 @@ Returns: %PANGO_DIRECTION_LTR or %PANGO_DIRECTION_RTL.
<para>
Converts a key value into a symbolic name.
The names are the same as those in the <filename>&lt;gdk/gdkkeysyms.h&gt;</filename> header file
but without the leading "GDK_KEY_".
but without the leading "GDK_".
</para>
@keyval: a key value.

View File

@@ -25,10 +25,11 @@ linkend="PANGO-SCALE-CAPS">PANGO_SCALE</link> or the PANGO_PIXELS() macro.)
</para>
<para>
Rendering a Pango layout is done most simply with gdk_draw_layout();
you can also draw pieces of the layout with gdk_draw_layout().
#GdkPangoRenderer is a subclass of #PangoRenderer that is used internally
to implement these functions. Using it directly or subclassing it can be
useful in some cases. See the #GdkPangoRenderer documentation for details.
you can also draw pieces of the layout with gdk_draw_layout() or
gdk_draw_glyphs(). #GdkPangoRenderer is a subclass of #PangoRenderer
that is used internally to implement these functions. Using it
directly or subclassing it can be useful in some cases. See the
#GdkPangoRenderer documentation for details.
</para>
<example id="rotated-example">
<title>Using #GdkPangoRenderer to draw transformed text</title>
@@ -134,6 +135,150 @@ g_object_unref (gc);
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GdkPangoRenderer ##### -->
<para>
</para>
<!-- ##### ARG GdkPangoRenderer:screen ##### -->
<para>
</para>
<!-- ##### STRUCT GdkPangoRendererClass ##### -->
<para>
</para>
<!-- ##### FUNCTION gdk_pango_renderer_new ##### -->
<para>
</para>
@screen:
@Returns:
<!-- ##### FUNCTION gdk_pango_renderer_get_default ##### -->
<para>
</para>
@screen:
@Returns:
<!-- ##### FUNCTION gdk_pango_renderer_set_drawable ##### -->
<para>
</para>
@gdk_renderer:
@drawable:
<!-- ##### FUNCTION gdk_pango_renderer_set_gc ##### -->
<para>
</para>
@gdk_renderer:
@gc:
<!-- ##### FUNCTION gdk_pango_renderer_set_stipple ##### -->
<para>
</para>
@gdk_renderer:
@part:
@stipple:
<!-- ##### FUNCTION gdk_pango_renderer_set_override_color ##### -->
<para>
</para>
@gdk_renderer:
@part:
@color:
<!-- ##### FUNCTION gdk_pango_context_get ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gdk_pango_context_get_for_screen ##### -->
<para>
</para>
@screen:
@Returns:
<!-- ##### STRUCT GdkPangoAttrEmbossed ##### -->
<para>
A Pango text attribute containing a embossed bitmap to be used when
rendering the text.
</para>
@attr: the #PangoAttribute.
@embossed: the embossed bitmap.
<!-- ##### STRUCT GdkPangoAttrEmbossColor ##### -->
<para>
A Pango text attribute specifying the color to emboss text with.
</para>
@attr: the #PangoAttribute
@color: the color
<!-- ##### STRUCT GdkPangoAttrStipple ##### -->
<para>
A Pango text attribute containing a stipple bitmap to be used when
rendering the text.
</para>
@attr: the #PangoAttribute.
@stipple: the stipple bitmap.
<!-- ##### FUNCTION gdk_pango_attr_emboss_color_new ##### -->
<para>
</para>
@color:
@Returns:
<!-- ##### FUNCTION gdk_pango_attr_embossed_new ##### -->
<para>
</para>
@embossed:
@Returns:
<!-- ##### FUNCTION gdk_pango_attr_stipple_new ##### -->
<para>
</para>
@stipple:
@Returns:
<!-- ##### FUNCTION gdk_pango_layout_get_clip_region ##### -->
<para>

View File

@@ -0,0 +1,102 @@
<!-- ##### SECTION Title ##### -->
Pixbufs
<!-- ##### SECTION Short_Description ##### -->
Functions for rendering pixbufs on drawables
<!-- ##### SECTION Long_Description ##### -->
<para>
These functions allow to render pixbufs on drawables. Pixbufs are
client-side images. For details on how to create and manipulate
pixbufs, see the #GdkPixbuf API documentation.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### FUNCTION gdk_pixbuf_render_threshold_alpha ##### -->
<para>
</para>
@pixbuf:
@bitmap:
@src_x:
@src_y:
@dest_x:
@dest_y:
@width:
@height:
@alpha_threshold:
<para>
</para>
<!-- ##### FUNCTION gdk_pixbuf_render_pixmap_and_mask ##### -->
<para>
</para>
@pixbuf:
@pixmap_return:
@mask_return:
@alpha_threshold:
<!-- ##### FUNCTION gdk_pixbuf_render_pixmap_and_mask_for_colormap ##### -->
<para>
</para>
@pixbuf:
@colormap:
@pixmap_return:
@mask_return:
@alpha_threshold:
<!-- ##### FUNCTION gdk_pixbuf_get_from_drawable ##### -->
<para>
</para>
@dest:
@src:
@cmap:
@src_x:
@src_y:
@dest_x:
@dest_y:
@width:
@height:
@Returns:
<!-- ##### FUNCTION gdk_pixbuf_get_from_image ##### -->
<para>
</para>
@dest:
@src:
@cmap:
@src_x:
@src_y:
@dest_x:
@dest_y:
@width:
@height:
@Returns:

View File

@@ -8,7 +8,7 @@ Offscreen drawables
<para>
Pixmaps are offscreen drawables. They can be drawn upon with the
standard drawing primitives, then copied to another drawable (such as
a #GdkWindow). The depth of a pixmap
a #GdkWindow) with gdk_draw_drawable(). The depth of a pixmap
is the number of bits per pixels. Bitmaps are simply pixmaps
with a depth of 1. (That is, they are monochrome bitmaps - each
pixel can be either on or off).
@@ -49,6 +49,78 @@ for the new pixmap. Can be %NULL if @depth is specified,
@Returns: the #GdkPixmap
<!-- ##### FUNCTION gdk_bitmap_create_from_data ##### -->
<para>
Creates a new bitmap from data in XBM format.
</para>
@drawable: a #GdkDrawable, used to determine default values
for the new pixmap. Can be %NULL, in which case the root
window is used.
@data: a pointer to the XBM data.
@width: the width of the new pixmap in pixels.
@height: the height of the new pixmap in pixels.
@Returns: the #GdkBitmap
<!-- ##### FUNCTION gdk_pixmap_create_from_data ##### -->
<para>
Create a two-color pixmap from data in XBM data.
</para>
@drawable: a #GdkDrawable, used to determine default values
for the new pixmap. Can be %NULL, if the depth is given.
@data: a pointer to the data.
@width: the width of the new pixmap in pixels.
@height: the height of the new pixmap in pixels.
@depth: the depth (number of bits per pixel) of the new pixmap.
@fg: the foreground color.
@bg: the background color.
@Returns: the #GdkPixmap
<!-- ##### FUNCTION gdk_pixmap_create_from_xpm ##### -->
@drawable:
@mask:
@transparent_color:
@filename:
@Returns:
<!-- ##### FUNCTION gdk_pixmap_colormap_create_from_xpm ##### -->
@drawable:
@colormap:
@mask:
@transparent_color:
@filename:
@Returns:
<!-- ##### FUNCTION gdk_pixmap_create_from_xpm_d ##### -->
@drawable:
@mask:
@transparent_color:
@data:
@Returns:
<!-- ##### FUNCTION gdk_pixmap_colormap_create_from_xpm_d ##### -->
@drawable:
@colormap:
@mask:
@transparent_color:
@data:
@Returns:
<!-- ##### TYPEDEF GdkBitmap ##### -->
<para>
An opaque structure representing an offscreen drawable of depth

View File

@@ -0,0 +1,72 @@
<!-- ##### SECTION Title ##### -->
Points and Rectangles
<!-- ##### SECTION Short_Description ##### -->
Simple graphical data types
<!-- ##### SECTION Long_Description ##### -->
<para>
GDK provides the #GdkPoint and #GdkRectangle data types for representing pixels
and sets of pixels on the screen. Together with Cairo's #cairo_region_t data
type, they make up the central types for representing graphical data.
</para>
<para>
#GdkPoint is a simple structure containing an x and y coordinate of a point.
</para>
<para>
#GdkRectangle is a structure holding the position and size of a rectangle.
The intersection of two rectangles can be computed with
gdk_rectangle_intersect(). To find the union of two rectangles use
gdk_rectangle_union().
</para>
<para>
#cairo_region_t is usually used for managing clipping of graphical operations.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GdkPoint ##### -->
<para>
Defines the x and y coordinates of a point.
</para>
@x: the x coordinate of the point.
@y: the y coordinate of the point.
<!-- ##### TYPEDEF GdkRectangle ##### -->
<para>
Defines the position and size of a rectangle. It is identical to
#cairo_rectangle_int_t.
</para>
<!-- ##### FUNCTION gdk_rectangle_intersect ##### -->
<para>
</para>
@src1:
@src2:
@dest:
@Returns:
<!-- ##### FUNCTION gdk_rectangle_union ##### -->
<para>
</para>
@src1:
@src2:
@dest:

View File

@@ -0,0 +1,410 @@
<!-- ##### SECTION Title ##### -->
GdkRGB
<!-- ##### SECTION Short_Description ##### -->
Renders RGB, grayscale, or indexed image data to a GdkDrawable
<!-- ##### SECTION Long_Description ##### -->
<para>
GdkRGB is a low-level module which renders RGB, grayscale, and indexed
colormap images to a #GdkDrawable. It does this as efficiently as
possible, handling issues such as colormaps, visuals, dithering,
temporary buffers, and so on. Most code should use the higher-level
#GdkPixbuf features in place of this module; for example,
gdk_draw_pixbuf() uses GdkRGB in its implementation.
</para>
<para>
GdkRGB allocates a color cube to use when rendering images. You can
set the threshold for installing colormaps with
gdk_rgb_set_min_colors(). The default is 5x5x5 (125). If a colorcube
of this size or larger can be allocated in the default colormap, then
that's done. Otherwise, GdkRGB creates its own private colormap.
Setting it to 0 means that it always tries to use the default
colormap, and setting it to 216 means that it always creates a private
one if it cannot allocate the 6x6x6 colormap in the default. If you
always want a private colormap (to avoid consuming too many colormap
entries for other apps, say), you can use
<literal>gdk_rgb_set_install(TRUE)</literal>.
Setting the value greater than 216 exercises a bug in older versions
of GdkRGB. Note, however, that setting it to 0 doesn't let you get
away with ignoring the colormap and visual - a colormap is always
created in grayscale and direct color modes, and the visual is changed
in cases where a "better" visual than the default is available.
</para>
<para>
If GDK is built with the Sun mediaLib library, the GdkRGB functions are
accelerated using mediaLib, which provides hardware acceleration on Intel,
AMD, and Sparc chipsets. If desired, mediaLib support can be turned off
by setting the GDK_DISABLE_MEDIALIB environment variable.
</para>
<example>
<title>A simple example program using GdkRGB</title>
<programlisting>
&num;include &lt;gtk/gtk.h&gt;
&num;define IMAGE_WIDTH 256
&num;define IMAGE_HEIGHT 256
guchar rgbbuf[IMAGE_WIDTH * IMAGE_HEIGHT * 3];
gboolean on_darea_expose (GtkWidget *widget,
GdkEventExpose *event,
gpointer user_data);
int
main (int argc, char *argv[])
{
GtkWidget *window, *darea;
gint x, y;
guchar *pos;
gtk_init (&amp;argc, &amp;argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
darea = gtk_drawing_area_new (<!-- -->);
gtk_widget_set_size_request (darea, IMAGE_WIDTH, IMAGE_HEIGHT);
gtk_container_add (GTK_CONTAINER (window), darea);
gtk_signal_connect (GTK_OBJECT (darea), "expose-event",
GTK_SIGNAL_FUNC (on_darea_expose), NULL);
gtk_widget_show_all (window);
/* Set up the RGB buffer. */
pos = rgbbuf;
for (y = 0; y &lt; IMAGE_HEIGHT; y++)
{
for (x = 0; x &lt; IMAGE_WIDTH; x++)
{
*pos++ = x - x % 32; /* Red. */
*pos++ = (x / 32) * 4 + y - y % 32; /* Green. */
*pos++ = y - y % 32; /* Blue. */
}
}
gtk_main (<!-- -->);
return 0;
}
gboolean
on_darea_expose (GtkWidget *widget,
GdkEventExpose *event,
gpointer user_data)
{
gdk_draw_rgb_image (widget->window, widget->style->fg_gc[GTK_STATE_NORMAL],
0, 0, IMAGE_WIDTH, IMAGE_HEIGHT,
GDK_RGB_DITHER_MAX, rgbbuf, IMAGE_WIDTH * 3);
return TRUE;
}
</programlisting>
</example>
<!-- ##### SECTION See_Also ##### -->
<para>
<variablelist>
<varlistentry>
<term>#GdkColor</term>
<listitem><para>The underlying GDK mechanism for allocating
colors.</para></listitem>
</varlistentry>
<varlistentry>
<term>#GdkPixbuf and gdk_draw_pixbuf()</term>
<listitem><para>Higher-level image handling.</para></listitem>
</varlistentry>
</variablelist>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### FUNCTION gdk_draw_rgb_image ##### -->
<para>
Draws an RGB image in the drawable. This is the core GdkRGB
function, and likely the only one you will need to use.
</para>
<para>
The @rowstride parameter allows for lines to be aligned more flexibly.
For example, lines may be allocated to begin on 32-bit boundaries,
even if the width of the rectangle is odd. Rowstride is also useful
when drawing a subrectangle of a larger image in memory. Finally, to
replicate the same line a number of times, the trick of setting
@rowstride to 0 is allowed.
</para>
<para>
In general, for 0 &lt;= i &lt; @width and 0 &lt;= j &lt; height,
the pixel (x + i, y + j) is colored with red value @rgb_buf[@j *
@rowstride + @i * 3], green value @rgb_buf[@j * @rowstride + @i * 3 +
1], and blue value @rgb_buf[@j * @rowstride + @i * 3 + 2].
</para>
@drawable: The #GdkDrawable to draw in (usually a #GdkWindow).
@gc: The graphics context (all GDK drawing operations require one; its
contents are ignored).
@x: The x coordinate of the top-left corner in the drawable.
@y: The y coordinate of the top-left corner in the drawable.
@width: The width of the rectangle to be drawn.
@height: The height of the rectangle to be drawn.
@dith: A #GdkRgbDither value, selecting the desired dither mode.
@rgb_buf: The pixel data, represented as packed 24-bit data.
@rowstride: The number of bytes from the start of one row in @rgb_buf to the
start of the next.
<!-- ##### FUNCTION gdk_draw_rgb_image_dithalign ##### -->
<para>
Draws an RGB image in the drawable, with an adjustment for dither alignment.
</para>
<para>
This function is useful when drawing dithered images into a window
that may be scrolled. Pixel (x, y) will be drawn dithered as if its
actual location is (x + @xdith, y + @ydith). Thus, if you draw an
image into a window using zero dither alignment, then scroll up one
pixel, subsequent draws to the window should have @ydith = 1.
</para>
<para>
Setting the dither alignment correctly allows updating of small parts
of the screen while avoiding visible "seams" between the different
dither textures.
</para>
@drawable: The #GdkDrawable to draw in (usually a #GdkWindow).
@gc: The graphics context.
@x: The x coordinate of the top-left corner in the drawable.
@y: The y coordinate of the top-left corner in the drawable.
@width: The width of the rectangle to be drawn.
@height: The height of the rectangle to be drawn.
@dith: A #GdkRgbDither value, selecting the desired dither mode.
@rgb_buf: The pixel data, represented as packed 24-bit data.
@rowstride: The number of bytes from the start of one row in @rgb_buf to the
start of the next.
@xdith: An x offset for dither alignment.
@ydith: A y offset for dither alignment.
<!-- ##### FUNCTION gdk_draw_indexed_image ##### -->
<para>
Draws an indexed image in the drawable, using a #GdkRgbCmap to assign
actual colors to the color indices.
</para>
@drawable: The #GdkDrawable to draw in (usually a #GdkWindow).
@gc: The graphics context.
@x: The x coordinate of the top-left corner in the drawable.
@y: The y coordinate of the top-left corner in the drawable.
@width: The width of the rectangle to be drawn.
@height: The height of the rectangle to be drawn.
@dith: A #GdkRgbDither value, selecting the desired dither mode.
@buf: The pixel data, represented as 8-bit color indices.
@rowstride: The number of bytes from the start of one row in @buf to the
start of the next.
@cmap: The #GdkRgbCmap used to assign colors to the color indices.
<!-- ##### FUNCTION gdk_draw_gray_image ##### -->
<para>
Draws a grayscale image in the drawable.
</para>
@drawable: The #GdkDrawable to draw in (usually a #GdkWindow).
@gc: The graphics context.
@x: The x coordinate of the top-left corner in the drawable.
@y: The y coordinate of the top-left corner in the drawable.
@width: The width of the rectangle to be drawn.
@height: The height of the rectangle to be drawn.
@dith: A #GdkRgbDither value, selecting the desired dither mode.
@buf: The pixel data, represented as 8-bit gray values.
@rowstride: The number of bytes from the start of one row in @buf to the
start of the next.
<!-- ##### FUNCTION gdk_draw_rgb_32_image ##### -->
<para>
Draws a padded RGB image in the drawable. The image is stored as one
pixel per 32-bit word. It is laid out as a red byte, a green byte, a
blue byte, and a padding byte.
</para>
<para>
It's unlikely that this function will give significant performance
gains in practice. In my experience, the performance gain from having
pixels aligned to 32-bit boundaries is cancelled out by the increased
memory bandwidth.
</para>
@drawable: The #GdkDrawable to draw in (usually a #GdkWindow).
@gc: The graphics context.
@x: The x coordinate of the top-left corner in the drawable.
@y: The y coordinate of the top-left corner in the drawable.
@width: The width of the rectangle to be drawn.
@height: The height of the rectangle to be drawn.
@dith: A #GdkRgbDither value, selecting the desired dither mode.
@buf: The pixel data, represented as padded 32-bit data.
@rowstride: The number of bytes from the start of one row in @buf to the
start of the next.
<!-- ##### FUNCTION gdk_draw_rgb_32_image_dithalign ##### -->
<para>
</para>
@drawable:
@gc:
@x:
@y:
@width:
@height:
@dith:
@buf:
@rowstride:
@xdith:
@ydith:
<!-- ##### ENUM GdkRgbDither ##### -->
<para>
Selects whether or not GdkRGB applies dithering
to the image on display.
</para>
<para>
Since GdkRGB currently only handles images with 8 bits per component,
dithering on 24 bit per pixel displays is a moot point.
</para>
@GDK_RGB_DITHER_NONE: Never use dithering.
@GDK_RGB_DITHER_NORMAL: Use dithering in 8 bits per pixel (and below)
only.
@GDK_RGB_DITHER_MAX: Use dithering in 16 bits per pixel and below.
<!-- ##### FUNCTION gdk_rgb_cmap_new ##### -->
<para>
Creates a new #GdkRgbCmap structure. The cmap maps color indexes to
RGB colors. If @n_colors is less than 256, then images containing
color values greater than or equal to @n_colors will produce undefined
results, including possibly segfaults.
</para>
@colors: The colors, represented as 0xRRGGBB integer values.
@n_colors: The number of colors in the cmap.
@Returns: The newly created #GdkRgbCmap
<!-- ##### FUNCTION gdk_rgb_cmap_free ##### -->
<para>
Frees the memory associated with a #GdkRgbCmap created by gdk_rgb_cmap_new().
</para>
@cmap: The #GdkRgbCmap to free.
<!-- ##### STRUCT GdkRgbCmap ##### -->
<para>
A private data structure which maps color indices to actual RGB
colors. This is used only for gdk_draw_indexed_image().
</para>
@colors: The colors, represented as 0xRRGGBB integer values.
@n_colors: The number of colors in the cmap.
<!-- ##### FUNCTION gdk_rgb_find_color ##### -->
<para>
</para>
@colormap:
@color:
<!-- ##### FUNCTION gdk_rgb_set_install ##### -->
<para>
If @install is %TRUE, directs GdkRGB to always install a new "private"
colormap rather than trying to find a best fit with the colors already
allocated. Ordinarily, GdkRGB will install a colormap only if a
sufficient cube cannot be allocated.
</para>
<para>
A private colormap has more colors, leading to better quality display,
but also leads to the dreaded "colormap flashing" effect.
</para>
@install: %TRUE to set install mode.
<!-- ##### FUNCTION gdk_rgb_set_min_colors ##### -->
<para>
Sets the minimum number of colors for the color cube. Generally,
GdkRGB tries to allocate the largest color cube it can. If it can't
allocate a color cube at least as large as @min_colors, it installs a
private colormap.
</para>
@min_colors: The minimum number of colors accepted.
<!-- ##### FUNCTION gdk_rgb_get_visual ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gdk_rgb_get_colormap ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gdk_rgb_ditherable ##### -->
<para>
Determines whether the preferred visual is ditherable. This function may be
useful for presenting a user interface choice to the user about which
dither mode is desired; if the display is not ditherable, it may make
sense to gray out or hide the corresponding UI widget.
</para>
@void:
@Returns: %TRUE if the preferred visual is ditherable.
<!-- ##### FUNCTION gdk_rgb_colormap_ditherable ##### -->
<para>
Determines whether the visual associated with @cmap is ditherable. This
function may be useful for presenting a user interface choice to the user
about which dither mode is desired; if the display is not ditherable, it may
make sense to gray out or hide the corresponding UI widget.
</para>
@cmap: a #GdkColormap
@Returns: %TRUE if the visual associated with @cmap is ditherable.
<!-- ##### FUNCTION gdk_rgb_set_verbose ##### -->
<para>
Sets the "verbose" flag. This is generally only useful for debugging.
</para>
@verbose: %TRUE if verbose messages are desired.

View File

@@ -300,6 +300,13 @@ Leaves a critical region begun with gdk_threads_enter().
@void:
<!-- ##### VARIABLE gdk_threads_mutex ##### -->
<para>
The #GMutex used to implement the critical region for
gdk_threads_enter()/gdk_threads_leave().
</para>
<!-- ##### FUNCTION gdk_threads_set_lock_functions ##### -->
<para>

View File

@@ -17,9 +17,21 @@ of an RGB pixel may be in the top 8 bits of the pixel, or may be in the lower
4 bits.
</para>
<para>
Usually you can avoid thinking about visuals in GTK+. Visuals are useful to
interpret the contents of a #GdkImage, but you should avoid #GdkImage precisely
because its contents depend on the display hardware; use #GdkPixbuf instead, for
all but the most low-level purposes. Also, anytime you provide a #GdkColormap,
the visual is implied as part of the colormap (gdk_colormap_get_visual()), so
you won't have to provide a visual in addition.
</para>
<para>
There are several standard visuals. The visual returned
by gdk_screen_get_system_visual() is the system's default
visual.
by gdk_visual_get_system() is the system's default
visual. gdk_rgb_get_visual() return the visual most
suited to displaying full-color image data. If you
use the calls in #GdkRGB, you should create your windows
using this visual (and the colormap returned by
gdk_rgb_get_colormap()).
</para>
<para>
A number of functions are provided for determining
@@ -36,7 +48,7 @@ then %GDK_VISUAL_STATIC_GRAY.
<!-- ##### SECTION See_Also ##### -->
<para>
#GdkColormap
#GdkImage, #GdkColormap, #GdkRGB
</para>
<!-- ##### SECTION Stability_Level ##### -->

View File

@@ -97,6 +97,33 @@ Returns the X resource (window or pixmap) belonging to a #GdkDrawable.
@Returns: the ID of @win's X resource.
<!-- ##### MACRO GDK_IMAGE_XDISPLAY ##### -->
<para>
Returns the display of a #GdkImage.
</para>
@image: a #GdkImage.
@Returns: an Xlib <type>Display*</type>.
<!-- ##### MACRO GDK_IMAGE_XIMAGE ##### -->
<para>
Returns the X image belonging to a #GdkImage.
</para>
@image: a #GdkImage.
@Returns: an <type>XImage*</type>.
<!-- ##### MACRO GDK_GC_XDISPLAY ##### -->
<para>
Returns the display of a #GdkGC.
</para>
@gc: a #GdkGC.
@Returns: an Xlib <type>Display*</type>.
<!-- ##### MACRO GDK_COLORMAP_XDISPLAY ##### -->
<para>
Returns the display of a #GdkColormap.
@@ -170,6 +197,24 @@ Returns the display of a #GdkCursor.
@Returns: an Xlib <type>Display*</type>.
<!-- ##### MACRO GDK_GC_XGC ##### -->
<para>
Returns the X GC of a #GdkGC.
</para>
@gc: a #GdkGC.
@Returns: an Xlib <type>GC</type>.
<!-- ##### MACRO GDK_GC_GET_XGC ##### -->
<para>
Returns the X GC of a #GdkGC.
</para>
@gc: a #GdkGC.
@Returns: an Xlib <type>GC</type>.
<!-- ##### MACRO GDK_WINDOW_XWINDOW ##### -->
<para>
Another name for GDK_DRAWABLE_XID().
@@ -512,6 +557,24 @@ Another name for GDK_DRAWABLE_XID().
@Returns:
<!-- ##### FUNCTION gdk_x11_gc_get_xdisplay ##### -->
<para>
</para>
@gc:
@Returns:
<!-- ##### FUNCTION gdk_x11_gc_get_xgc ##### -->
<para>
</para>
@gc:
@Returns:
<!-- ##### FUNCTION gdk_x11_get_default_root_xwindow ##### -->
<para>
@@ -547,6 +610,24 @@ Another name for GDK_DRAWABLE_XID().
@void:
<!-- ##### FUNCTION gdk_x11_image_get_xdisplay ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_x11_image_get_ximage ##### -->
<para>
</para>
@image:
@Returns:
<!-- ##### FUNCTION gdk_x11_screen_get_screen_number ##### -->
<para>

View File

@@ -117,6 +117,7 @@ content_files = \
running.sgml \
building.sgml \
compiling.sgml \
directfb.sgml \
drawing-model.xml \
glossary.xml \
migrating-2to3.xml \
@@ -145,125 +146,125 @@ expand_content_files = \
# Images to copy into HTML directory
HTML_IMAGES = \
$(top_srcdir)/gtk/stock-icons/24/help-about.png \
$(top_srcdir)/gtk/stock-icons/24/list-add.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-about.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-add.png \
$(top_srcdir)/gtk/stock-icons/20/gtk-apply.png \
$(top_srcdir)/gtk/stock-icons/24/format-text-bold.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-bold.png \
$(top_srcdir)/gtk/stock-icons/20/gtk-cancel.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-caps-lock-warning.png \
$(top_srcdir)/gtk/stock-icons/24/media-optical.png \
$(top_srcdir)/gtk/stock-icons/24/edit-clear.png \
$(top_srcdir)/gtk/stock-icons/24/window-close.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-cdrom.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-clear.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-close.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-connect.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-convert.png \
$(top_srcdir)/gtk/stock-icons/24/edit-copy.png \
$(top_srcdir)/gtk/stock-icons/24/edit-cut.png \
$(top_srcdir)/gtk/stock-icons/24/edit-delete.png \
$(top_srcdir)/gtk/stock-icons/48/dialog-password.png \
$(top_srcdir)/gtk/stock-icons/48/dialog-error.png \
$(top_srcdir)/gtk/stock-icons/48/dialog-information.png \
$(top_srcdir)/gtk/stock-icons/48/dialog-question.png \
$(top_srcdir)/gtk/stock-icons/48/dialog-warning.png \
$(top_srcdir)/gtk/stock-icons/24/folder.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-copy.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-cut.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-delete.png \
$(top_srcdir)/gtk/stock-icons/48/gtk-dialog-authentication.png \
$(top_srcdir)/gtk/stock-icons/48/gtk-dialog-error.png \
$(top_srcdir)/gtk/stock-icons/48/gtk-dialog-info.png \
$(top_srcdir)/gtk/stock-icons/48/gtk-dialog-question.png \
$(top_srcdir)/gtk/stock-icons/48/gtk-dialog-warning.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-directory.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-disconnect.png \
$(top_srcdir)/gtk/stock-icons/32/gtk-dnd.png \
$(top_srcdir)/gtk/stock-icons/32/gtk-dnd-multiple.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-edit.png \
$(top_srcdir)/gtk/stock-icons/24/system-run.png \
$(top_srcdir)/gtk/stock-icons/24/document-x-generic.png \
$(top_srcdir)/gtk/stock-icons/24/edit-find.png \
$(top_srcdir)/gtk/stock-icons/24/edit-find-replace.png \
$(top_srcdir)/gtk/stock-icons/24/go-bottom.png \
$(top_srcdir)/gtk/stock-icons/24/go-first-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/go-first-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/go-last-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/go-last-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/go-top.png \
$(top_srcdir)/gtk/stock-icons/24/go-previous-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/go-previous-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/go-down.png \
$(top_srcdir)/gtk/stock-icons/24/go-next-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/go-next-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/go-up.png \
$(top_srcdir)/gtk/stock-icons/24/drive-harddisk.png \
$(top_srcdir)/gtk/stock-icons/24/network-idle.png \
$(top_srcdir)/gtk/stock-icons/24/help-contents.png \
$(top_srcdir)/gtk/stock-icons/24/go-home.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-execute.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-file.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-find.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-find-and-replace.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-goto-bottom.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-goto-first-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-goto-first-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-goto-last-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-goto-last-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-goto-top.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-go-back-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-go-back-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-go-down.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-go-forward-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-go-forward-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-go-up.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-harddisk.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-network.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-help.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-home.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-index.png \
$(top_srcdir)/gtk/stock-icons/24/format-indent-more-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/format-indent-more-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/format-indent-less-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/format-indent-less-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/format-text-italic.png \
$(top_srcdir)/gtk/stock-icons/24/go-jump-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/go-jump-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/format-justify-center.png \
$(top_srcdir)/gtk/stock-icons/24/format-justify-fill.png \
$(top_srcdir)/gtk/stock-icons/24/format-justify-left.png \
$(top_srcdir)/gtk/stock-icons/24/format-justify-right.png \
$(top_srcdir)/gtk/stock-icons/24/image-missing.png \
$(top_srcdir)/gtk/stock-icons/24/document-new.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-indent-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-indent-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-unindent-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-unindent-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-italic.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-jump-to-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-jump-to-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-justify-center.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-justify-fill.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-justify-left.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-justify-right.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-missing-image.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-new.png \
$(top_srcdir)/gtk/stock-icons/20/gtk-no.png \
$(top_srcdir)/gtk/stock-icons/20/gtk-ok.png \
$(top_srcdir)/gtk/stock-icons/24/document-open.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-open.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-orientation-landscape.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-orientation-portrait.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-orientation-reverse-landscape.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-orientation-reverse-portrait.png \
$(top_srcdir)/gtk/stock-icons/24/edit-paste.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-paste.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-preferences.png \
$(top_srcdir)/gtk/stock-icons/24/document-print.png \
$(top_srcdir)/gtk/stock-icons/24/printer-error.png \
$(top_srcdir)/gtk/stock-icons/24/printer-paused.png \
$(top_srcdir)/gtk/stock-icons/24/document-print-preview.png \
$(top_srcdir)/gtk/stock-icons/24/printer-info.png \
$(top_srcdir)/gtk/stock-icons/24/printer-warning.png \
$(top_srcdir)/gtk/stock-icons/24/document-properties.png \
$(top_srcdir)/gtk/stock-icons/24/application-exit.png \
$(top_srcdir)/gtk/stock-icons/24/edit-redo-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/edit-redo-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/view-refresh.png \
$(top_srcdir)/gtk/stock-icons/24/list-remove.png \
$(top_srcdir)/gtk/stock-icons/24/document-revert-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/document-revert-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/media-floppy.png \
$(top_srcdir)/gtk/stock-icons/24/document-save.png \
$(top_srcdir)/gtk/stock-icons/24/document-save-as.png \
$(top_srcdir)/gtk/stock-icons/24/edit-select-all.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-print.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-print-error.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-print-paused.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-print-preview.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-print-report.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-print-warning.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-properties.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-quit.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-redo-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-redo-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-refresh.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-remove.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-revert-to-saved-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-revert-to-saved-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-floppy.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-save.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-save-as.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-select-all.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-select-color.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-color-picker.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-font.png \
$(top_srcdir)/gtk/stock-icons/24/view-sort-ascending.png \
$(top_srcdir)/gtk/stock-icons/24/view-sort-descending.png \
$(top_srcdir)/gtk/stock-icons/24/tools-check-spelling.png \
$(top_srcdir)/gtk/stock-icons/24/process-stop.png \
$(top_srcdir)/gtk/stock-icons/24/format-text-strikethrough.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-sort-ascending.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-sort-descending.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-spell-check.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-stop.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-strikethrough.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-undelete-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-undelete-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/format-text-underline.png \
$(top_srcdir)/gtk/stock-icons/24/edit-undo-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/edit-undo-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-underline.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-undo-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-undo-rtl.png \
$(top_srcdir)/gtk/stock-icons/20/gtk-yes.png \
$(top_srcdir)/gtk/stock-icons/24/zoom-original.png \
$(top_srcdir)/gtk/stock-icons/24/zoom-fit-best.png \
$(top_srcdir)/gtk/stock-icons/24/zoom-in.png \
$(top_srcdir)/gtk/stock-icons/24/zoom-out.png \
$(top_srcdir)/gtk/stock-icons/24/media-seek-forward-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/media-seek-forward-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/media-skip-forward-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/media-skip-forward-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/media-playback-pause.png \
$(top_srcdir)/gtk/stock-icons/24/media-playback-start-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/media-playback-start-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/media-seek-backward-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/media-seek-backward-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/media-record.png \
$(top_srcdir)/gtk/stock-icons/24/media-skip-backward-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/media-skip-backward-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/media-playback-stop.png \
$(top_srcdir)/gtk/stock-icons/24/view-fullscreen.png \
$(top_srcdir)/gtk/stock-icons/24/view-restore.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-page-setup.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-zoom-100.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-zoom-fit.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-zoom-in.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-zoom-out.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-forward-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-forward-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-next-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-next-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-pause.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-play-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-play-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-previous-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-previous-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-record.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-rewind-ltr.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-rewind-rtl.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-media-stop.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-fullscreen.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-leave-fullscreen.png \
$(top_srcdir)/gtk/stock-icons/24/gtk-info.png \
$(srcdir)/images/aboutdialog.png \
$(srcdir)/images/accel-label.png \
$(srcdir)/images/assistant.png \

View File

@@ -330,13 +330,21 @@ How to compile GTK+ itself
<arg>--enable-debug=[no|minimum|yes]</arg>
</group>
<group>
<arg>--disable-Bsymbolic</arg>
<arg>--enable-Bsymbolic</arg>
<arg>--disable-visibility</arg>
<arg>--enable-visibility</arg>
</group>
<group>
<arg>--disable-shm</arg>
<arg>--enable-shm</arg>
</group>
<group>
<arg>--disable-xim</arg>
<arg>--enable-xim</arg>
</group>
<group>
<arg>--disable-xim-inst</arg>
<arg>--enable-xim-inst</arg>
</group>
<group>
<arg>--disable-xkb</arg>
<arg>--enable-xkb</arg>
@@ -361,7 +369,7 @@ How to compile GTK+ itself
<arg>--with-xinput=[no|yes]</arg>
</group>
<group>
<arg>--with-gdktarget=[x11|win32|quartz]</arg>
<arg>--with-gdktarget=[x11|win32|quartz|directfb]</arg>
</group>
<group>
<arg>--disable-introspection</arg>
@@ -398,7 +406,7 @@ How to compile GTK+ itself
<formalpara>
<title><systemitem>--enable-debug</systemitem></title>
<para>
Turns on various amounts of debugging support. Setting this to 'no'
disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and
@@ -415,11 +423,15 @@ How to compile GTK+ itself
</formalpara>
<formalpara>
<title><systemitem>--disable-Bsymbolic</systemitem> and
<systemitem>--enable-Bsymbolic</systemitem></title>
<title><systemitem>--disable-visibility</systemitem> and
<systemitem>--enable-visibility</systemitem></title>
<para>
The option <systemitem>--disable-Bsymbolic</systemitem>
turns off the use of the -Bsymbolic-functions linker flag.
The option <systemitem>--disable-visibility</systemitem>
turns off the use of ELF visibility attributes for linking
optimizations. This makes sense while changing GTK+ itself,
since the way in which GTK+ uses visibility attributes
forces a full rebuild of all source files for any header
modification.
</para>
</formalpara>
@@ -459,6 +471,30 @@ How to compile GTK+ itself
</para>
</formalpara>
<formalpara>
<title><systemitem>--disable-xim</systemitem> and
<systemitem>--enable-xim</systemitem></title>
<para>
These options can be used to control whether GTK+ will
be compiled with support for XIM. (The X Input Method
extension, used for Japanese input.) The default is yes.
</para>
</formalpara>
<formalpara>
<title><systemitem>--disable-xim-inst</systemitem> and
<systemitem>--enable-xim-inst</systemitem></title>
<para>
These options determine whether GTK+ will use the
XIM instantiate callback.
The default is 'yes', unless the host system is Solaris,
where <function>XRegisterIMInstantiateCallback()</function>
seems to cause a segfault.
</para>
</formalpara>
<formalpara>
<title><systemitem>--disable-xkb</systemitem> and
<systemitem>--enable-xkb</systemitem></title>
@@ -547,7 +583,8 @@ How to compile GTK+ itself
Toggles between the supported backends for GDK.
The default is x11, unless the platform is Windows, in which
case the default is win32. Other supported backends are
the quartz backend for OS X.
the quartz backend for OS X, and the DirectFB backend
for the Linux framebuffer.
</para>
</formalpara>
<formalpara>

View File

@@ -0,0 +1,44 @@
<?xml version="1.0"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
]>
<refentry id="gtk-directfb">
<refmeta>
<refentrytitle>Using GTK+ on DirectFB</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>GTK Library</refmiscinfo>
</refmeta>
<refnamediv>
<refname>Using GTK+ on DirectFB</refname>
<refpurpose>
DirectFB-specific aspects of using GTK+
</refpurpose>
</refnamediv>
<refsect1>
<title>Using GTK+ on DirectFB</title>
<para>
The DirectFB port of GTK+ is an implementation of GDK (and therefore GTK+)
on top of the <ulink url="http://www.directfb.org">DirectFB</ulink>
libraries.
</para>
<para>
Like the obsolete linux-fb port of GTK+, it runs on the Linux framebuffer,
but the DirectFB libraries provide additional features like hardware graphics
acceleration, input device handling and abstraction and an integrated windowing
system.
</para>
<refsect2><title>Build requirements</title>
<para>
Beyond the usual GTK+ build requirements, the DirectFB backend (obviously)
needs the DirectFB libraries (at least 0.9.21) and cairo compiled with
DirectFB support.
</para>
</refsect2>
</refsect1>
</refentry>

View File

@@ -4,6 +4,7 @@
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
<!ENTITY version SYSTEM "version.xml">
]>
<!--ENTITY index-Objects-Grouped SYSTEM "objects_grouped.sgml"-->
<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
<title>GTK+ Reference Manual</title>
@@ -118,6 +119,7 @@ that is, GUI components such as #GtkButton or #GtkTextView.
<xi:include href="x11.sgml" />
<xi:include href="windows.sgml" />
<xi:include href="osx.sgml" />
<xi:include href="directfb.sgml" />
<xi:include href="resources.sgml" />
<xi:include href="xml/question_index.sgml" />
<xi:include href="drawing-model.xml" />
@@ -138,9 +140,11 @@ that is, GUI components such as #GtkButton or #GtkTextView.
<xi:include href="xml/gtksettings.xml" />
<xi:include href="xml/gtkbindings.xml" />
<xi:include href="xml/gtkenums.xml" />
<xi:include href="xml/gtkgc.xml" />
<xi:include href="xml/gtkstyle.xml" />
<xi:include href="xml/gtkselection.xml" />
<xi:include href="xml/gtkfeatures.xml" />
<xi:include href="xml/gtktypeutils.xml" />
<xi:include href="xml/gtktesting.xml" />
<xi:include href="xml/filesystem.xml" />
</part>
@@ -280,7 +284,7 @@ that is, GUI components such as #GtkButton or #GtkTextView.
</chapter>
<chapter id="SelectorWidgets">
<title>Selectors (Color/File/Font)</title>
<title>Selectors (File/Font/Color/Input Devices)</title>
<xi:include href="xml/gtkcolorbutton.xml" />
<xi:include href="xml/gtkcolorseldlg.xml" />
<xi:include href="xml/gtkcolorsel.xml" />
@@ -305,7 +309,6 @@ that is, GUI components such as #GtkButton or #GtkTextView.
<xi:include href="xml/gtkbbox.xml" />
<xi:include href="xml/gtkhbbox.xml" />
<xi:include href="xml/gtkvbbox.xml" />
<xi:include href="xml/gtkwrapbox.xml" />
<xi:include href="xml/gtkfixed.xml" />
<xi:include href="xml/gtkpaned.xml" />
<xi:include href="xml/gtkhpaned.xml" />
@@ -367,8 +370,10 @@ that is, GUI components such as #GtkButton or #GtkTextView.
<title>Abstract Base Classes</title>
<xi:include href="xml/gtkbin.xml" />
<xi:include href="xml/gtkcontainer.xml" />
<xi:include href="xml/gtkitem.xml" />
<xi:include href="xml/gtkmenushell.xml" />
<xi:include href="xml/gtkmisc.xml" />
<xi:include href="xml/gtkobject.xml" />
<xi:include href="xml/gtkrange.xml" />
<xi:include href="xml/gtkwidget.xml" />
<xi:include href="xml/gtkimcontext.xml" />
@@ -423,7 +428,7 @@ that is, GUI components such as #GtkButton or #GtkTextView.
</partintro>
<xi:include href="xml/migrating-checklist.sgml" />
<xi:include href="xml/migrating-2to3.xml" />
<xi:include href="migrating-2to3.xml" />
</part>
<part>

View File

@@ -5,7 +5,6 @@
<FILE>gtkaboutdialog</FILE>
<TITLE>GtkAboutDialog</TITLE>
GtkAboutDialog
GtkLicense
gtk_about_dialog_new
gtk_about_dialog_get_program_name
gtk_about_dialog_set_program_name
@@ -19,8 +18,6 @@ gtk_about_dialog_get_license
gtk_about_dialog_set_license
gtk_about_dialog_get_wrap_license
gtk_about_dialog_set_wrap_license
gtk_about_dialog_get_license_type
gtk_about_dialog_set_license_type
gtk_about_dialog_get_website
gtk_about_dialog_set_website
gtk_about_dialog_get_website_label
@@ -37,6 +34,9 @@ gtk_about_dialog_get_logo
gtk_about_dialog_set_logo
gtk_about_dialog_get_logo_icon_name
gtk_about_dialog_set_logo_icon_name
GtkAboutDialogActivateLinkFunc
gtk_about_dialog_set_email_hook
gtk_about_dialog_set_url_hook
gtk_show_about_dialog
<SUBSECTION Standard>
GTK_ABOUT_DIALOG
@@ -421,6 +421,7 @@ gtk_aspect_frame_get_type
<FILE>gtkbbox</FILE>
<TITLE>GtkButtonBox</TITLE>
GtkButtonBox
GTK_BUTTONBOX_DEFAULT
gtk_button_box_new
gtk_button_box_get_layout
gtk_button_box_get_child_secondary
@@ -457,6 +458,7 @@ gtk_bin_get_type
<FILE>gtkbox</FILE>
<TITLE>GtkBox</TITLE>
GtkBox
GtkBoxChild
gtk_box_new
gtk_box_pack_start
gtk_box_pack_end
@@ -591,7 +593,6 @@ gtk_calendar_select_month
gtk_calendar_select_day
gtk_calendar_mark_day
gtk_calendar_unmark_day
gtk_calendar_get_day_is_marked
gtk_calendar_clear_marks
<SUBSECTION>
@@ -865,15 +866,13 @@ gtk_container_child_set_valist
gtk_container_forall
gtk_container_get_border_width
gtk_container_set_border_width
gtk_container_propagate_draw
gtk_container_propagate_expose
gtk_container_get_focus_chain
gtk_container_set_focus_chain
gtk_container_unset_focus_chain
gtk_container_class_find_child_property
gtk_container_class_install_child_property
gtk_container_class_list_child_properties
gtk_container_class_handle_border_width
<SUBSECTION Standard>
GTK_CONTAINER
GTK_IS_CONTAINER
@@ -898,7 +897,9 @@ gtk_dialog_response
gtk_dialog_add_button
gtk_dialog_add_buttons
gtk_dialog_add_action_widget
gtk_dialog_get_has_separator
gtk_dialog_set_default_response
gtk_dialog_set_has_separator
gtk_dialog_set_response_sensitive
gtk_dialog_get_response_for_widget
gtk_dialog_get_widget_for_response
@@ -1154,8 +1155,6 @@ gtk_expander_set_use_markup
gtk_expander_get_use_markup
gtk_expander_set_label_widget
gtk_expander_get_label_widget
gtk_expander_set_label_fill
gtk_expander_get_label_fill
<SUBSECTION Standard>
GTK_TYPE_EXPANDER
GTK_EXPANDER_CLASS
@@ -1610,8 +1609,8 @@ gtk_icon_view_get_cursor
gtk_icon_view_selected_foreach
gtk_icon_view_set_selection_mode
gtk_icon_view_get_selection_mode
gtk_icon_view_set_item_orientation
gtk_icon_view_get_item_orientation
gtk_icon_view_set_orientation
gtk_icon_view_get_orientation
gtk_icon_view_set_columns
gtk_icon_view_get_columns
gtk_icon_view_set_item_width
@@ -1673,7 +1672,9 @@ GtkIconViewPrivate
GtkImage
GtkImageType
gtk_image_get_icon_set
gtk_image_get_image
gtk_image_get_pixbuf
gtk_image_get_pixmap
gtk_image_get_stock
gtk_image_get_animation
gtk_image_get_icon_name
@@ -1681,14 +1682,18 @@ gtk_image_get_gicon
gtk_image_get_storage_type
gtk_image_new_from_file
gtk_image_new_from_icon_set
gtk_image_new_from_image
gtk_image_new_from_pixbuf
gtk_image_new_from_pixmap
gtk_image_new_from_stock
gtk_image_new_from_animation
gtk_image_new_from_icon_name
gtk_image_new_from_gicon
gtk_image_set_from_file
gtk_image_set_from_icon_set
gtk_image_set_from_image
gtk_image_set_from_pixbuf
gtk_image_set_from_pixmap
gtk_image_set_from_stock
gtk_image_set_from_animation
gtk_image_set_from_icon_name
@@ -1828,6 +1833,24 @@ GTK_INVISIBLE_GET_CLASS
gtk_invisible_get_type
</SECTION>
<SECTION>
<FILE>gtkitem</FILE>
<TITLE>GtkItem</TITLE>
GtkItem
gtk_item_select
gtk_item_deselect
gtk_item_toggle
<SUBSECTION Standard>
GTK_ITEM
GTK_IS_ITEM
GTK_TYPE_ITEM
GTK_ITEM_CLASS
GTK_IS_ITEM_CLASS
GTK_ITEM_GET_CLASS
<SUBSECTION Private>
gtk_item_get_type
</SECTION>
<SECTION>
<FILE>gtklabel</FILE>
<TITLE>GtkLabel</TITLE>
@@ -1921,6 +1944,8 @@ gtk_link_button_new
gtk_link_button_new_with_label
gtk_link_button_get_uri
gtk_link_button_set_uri
GtkLinkButtonUriFunc
gtk_link_button_set_uri_hook
gtk_link_button_get_visited
gtk_link_button_set_visited
@@ -1999,7 +2024,6 @@ GTK_MENU_BAR_CLASS
GTK_IS_MENU_BAR_CLASS
GTK_MENU_BAR_GET_CLASS
<SUBSECTION Private>
GtkMenuBarPrivate
gtk_menu_bar_get_type
</SECTION>
@@ -2120,7 +2144,6 @@ GTK_MESSAGE_DIALOG_CLASS
GTK_IS_MESSAGE_DIALOG_CLASS
GTK_MESSAGE_DIALOG_GET_CLASS
<SUBSECTION Private>
GtkMessageDialogPrivate
gtk_message_dialog_get_type
</SECTION>
@@ -2170,7 +2193,6 @@ GTK_MISC_CLASS
GTK_IS_MISC_CLASS
GTK_MISC_GET_CLASS
<SUBSECTION Private>
GtkMiscPrivate
gtk_misc_get_type
</SECTION>
@@ -2178,6 +2200,7 @@ gtk_misc_get_type
<FILE>gtknotebook</FILE>
<TITLE>GtkNotebook</TITLE>
GtkNotebook
GtkNotebookPage
gtk_notebook_new
gtk_notebook_append_page
gtk_notebook_append_page_menu
@@ -2215,13 +2238,13 @@ gtk_notebook_get_tab_label_text
gtk_notebook_get_tab_pos
gtk_notebook_get_tab_reorderable
gtk_notebook_get_tab_detachable
gtk_notebook_get_tab_hborder
gtk_notebook_get_tab_vborder
gtk_notebook_set_current_page
gtk_notebook_set_group_name
gtk_notebook_get_group_name
gtk_notebook_set_group
gtk_notebook_get_group
gtk_notebook_set_action_widget
gtk_notebook_get_action_widget
GtkNotebookWindowCreationFunc
gtk_notebook_set_window_creation_hook
<SUBSECTION Standard>
GTK_NOTEBOOK
GTK_IS_NOTEBOOK
@@ -2232,7 +2255,28 @@ GTK_NOTEBOOK_GET_CLASS
<SUBSECTION Private>
gtk_notebook_get_type
GtkNotebookTab
GtkNotebookPrivate
</SECTION>
<SECTION>
<FILE>gtkobject</FILE>
<TITLE>GtkObject</TITLE>
GtkObject
GtkObjectFlags
GTK_OBJECT_FLAGS
gtk_object_destroy
<SUBSECTION Standard>
GTK_OBJECT
GTK_IS_OBJECT
GTK_TYPE_OBJECT
GTK_OBJECT_CLASS
GTK_IS_OBJECT_CLASS
GTK_OBJECT_GET_CLASS
<SUBSECTION Private>
gtk_object_get_type
GTK_ARG_READWRITE
GTK_OBJECT_SET_FLAGS
GTK_OBJECT_UNSET_FLAGS
</SECTION>
<SECTION>
@@ -2240,7 +2284,7 @@ GtkNotebookPrivate
<TITLE>GtkOffscreenWindow</TITLE>
GtkOffscreenWindow
gtk_offscreen_window_new
gtk_offscreen_window_get_surface
gtk_offscreen_window_get_pixmap
gtk_offscreen_window_get_pixbuf
<SUBSECTION Standard>
GTK_OFFSCREEN_WINDOW
@@ -2299,7 +2343,6 @@ GTK_PLUG_CLASS
GTK_IS_PLUG_CLASS
GTK_PLUG_GET_CLASS
<SUBSECTION Private>
GtkPlugPrivate
gtk_plug_get_type
</SECTION>
@@ -2311,8 +2354,9 @@ gtk_progress_bar_new
gtk_progress_bar_pulse
gtk_progress_bar_set_fraction
gtk_progress_bar_get_fraction
gtk_progress_bar_set_inverted
gtk_progress_bar_get_inverted
GtkProgressBarOrientation
gtk_progress_bar_set_orientation
gtk_progress_bar_get_orientation
gtk_progress_bar_set_show_text
gtk_progress_bar_get_show_text
gtk_progress_bar_set_text
@@ -2329,7 +2373,6 @@ GTK_PROGRESS_BAR_CLASS
GTK_IS_PROGRESS_BAR_CLASS
GTK_PROGRESS_BAR_GET_CLASS
<SUBSECTION Private>
GtkProgressBarPrivate
gtk_progress_bar_get_type
</SECTION>
@@ -2367,7 +2410,6 @@ gtk_radio_button_new_with_mnemonic
gtk_radio_button_new_with_mnemonic_from_widget
gtk_radio_button_set_group
gtk_radio_button_get_group
gtk_radio_button_join_group
<SUBSECTION Standard>
GTK_RADIO_BUTTON
GTK_IS_RADIO_BUTTON
@@ -2376,7 +2418,6 @@ GTK_RADIO_BUTTON_CLASS
GTK_IS_RADIO_BUTTON_CLASS
GTK_RADIO_BUTTON_GET_CLASS
<SUBSECTION Private>
GtkRadioButtonPrivate
gtk_radio_button_get_type
</SECTION>
@@ -2400,7 +2441,6 @@ GTK_RADIO_MENU_ITEM_CLASS
GTK_IS_RADIO_MENU_ITEM_CLASS
GTK_RADIO_MENU_ITEM_GET_CLASS
<SUBSECTION Private>
GtkRadioMenuItemPrivate
gtk_radio_menu_item_get_type
</SECTION>
@@ -2604,6 +2644,8 @@ gtk_recent_manager_remove_item
gtk_recent_manager_lookup_item
gtk_recent_manager_has_item
gtk_recent_manager_move_item
gtk_recent_manager_get_limit
gtk_recent_manager_set_limit
gtk_recent_manager_get_items
gtk_recent_manager_purge_items
<SUBSECTION>
@@ -2684,8 +2726,9 @@ GTK_RULER_CLASS
GTK_IS_RULER_CLASS
GTK_RULER_GET_CLASS
<SUBSECTION Private>
GtkRulerPrivate
gtk_ruler_get_type
gtk_ruler_draw_ticks
gtk_ruler_draw_pos
</SECTION>
<SECTION>
@@ -2712,7 +2755,6 @@ GTK_SCALE_CLASS
GTK_IS_SCALE_CLASS
GTK_SCALE_GET_CLASS
<SUBSECTION Private>
GtkScalePrivate
gtk_scale_get_type
</SECTION>
@@ -2872,7 +2914,6 @@ GTK_SIZE_GROUP_CLASS
GTK_IS_SIZE_GROUP_CLASS
GTK_SIZE_GROUP_GET_CLASS
<SUBSECTION Private>
GtkSizeGroupPrivate
gtk_size_group_get_type
</SECTION>
@@ -2934,7 +2975,6 @@ GTK_SPIN_BUTTON_CLASS
GTK_IS_SPIN_BUTTON_CLASS
GTK_SPIN_BUTTON_GET_CLASS
<SUBSECTION Private>
GtkSpinButtonPrivate
gtk_spin_button_get_type
</SECTION>
@@ -2981,7 +3021,6 @@ GTK_STATUSBAR_CLASS
GTK_IS_STATUSBAR_CLASS
GTK_STATUSBAR_GET_CLASS
<SUBSECTION Private>
GtkStatusbarPrivate
gtk_statusbar_get_type
</SECTION>
@@ -3019,6 +3058,8 @@ gtk_status_icon_get_title
gtk_status_icon_set_name
gtk_status_icon_set_visible
gtk_status_icon_get_visible
gtk_status_icon_set_blinking
gtk_status_icon_get_blinking
gtk_status_icon_is_embedded
gtk_status_icon_position_menu
gtk_status_icon_get_geometry
@@ -3063,7 +3104,6 @@ GTK_TABLE_CLASS
GTK_IS_TABLE_CLASS
GTK_TABLE_GET_CLASS
<SUBSECTION Private>
GtkTablePrivate
GtkTableChild
GtkTableRowCol
gtk_table_get_type
@@ -3082,7 +3122,6 @@ GTK_TEAROFF_MENU_ITEM_CLASS
GTK_IS_TEAROFF_MENU_ITEM_CLASS
GTK_TEAROFF_MENU_ITEM_GET_CLASS
<SUBSECTION Private>
GtkTearoffMenuItemPrivate
gtk_tearoff_menu_item_get_type
</SECTION>
@@ -3177,7 +3216,6 @@ GTK_TEXT_BUFFER_CLASS
GTK_IS_TEXT_BUFFER_CLASS
GTK_TEXT_BUFFER_GET_CLASS
<SUBSECTION Private>
GtkTextBufferPrivate
gtk_text_buffer_get_type
GtkTextLogAttrCache
</SECTION>
@@ -3354,7 +3392,6 @@ GTK_TEXT_TAG_TABLE_CLASS
GTK_IS_TEXT_TAG_TABLE_CLASS
GTK_TEXT_TAG_TABLE_GET_CLASS
<SUBSECTION Private>
GtkTextTagTablePrivate
gtk_text_tag_table_get_type
</SECTION>
@@ -3444,7 +3481,6 @@ GTK_TEXT_CHILD_ANCHOR_CLASS
GTK_IS_TEXT_CHILD_ANCHOR_CLASS
GTK_TEXT_CHILD_ANCHOR_GET_CLASS
<SUBSECTION Private>
GtkTextViewPrivate
gtk_text_view_get_type
gtk_text_child_anchor_get_type
GtkTextBTree
@@ -4352,16 +4388,6 @@ gtk_cell_renderer_set_alignment
gtk_cell_renderer_get_padding
gtk_cell_renderer_set_padding
<SUBSECTION Width-for-height>
gtk_cell_renderer_get_preferred_height
gtk_cell_renderer_get_preferred_height_for_width
gtk_cell_renderer_get_preferred_size
gtk_cell_renderer_get_preferred_width
gtk_cell_renderer_get_preferred_width_for_height
gtk_cell_renderer_get_request_mode
gtk_cell_view_get_desired_height_for_width_of_row
gtk_cell_view_get_desired_width_of_row
<SUBSECTION Standard>
GTK_CELL_RENDERER
GTK_IS_CELL_RENDERER
@@ -4565,7 +4591,6 @@ GTK_LIST_STORE_CLASS
GTK_IS_LIST_STORE_CLASS
GTK_LIST_STORE_GET_CLASS
<SUBSECTION Private>
GtkListStorePrivate
gtk_list_store_get_type
</SECTION>
@@ -4622,7 +4647,6 @@ GTK_VIEWPORT_CLASS
GTK_IS_VIEWPORT_CLASS
GTK_VIEWPORT_GET_CLASS
<SUBSECTION Private>
GtkViewportPrivate
gtk_viewport_get_type
</SECTION>
@@ -4729,15 +4753,19 @@ gtk_vseparator_get_type
<TITLE>GtkWidget</TITLE>
GtkWidget
GtkWidgetClass
GtkWidgetFlags
GTK_WIDGET_FLAGS
GTK_WIDGET_SET_FLAGS
GTK_WIDGET_UNSET_FLAGS
GtkCallback
GtkRequisition
GtkAllocation
GtkSelectionData
GtkWidgetAuxInfo
GtkWidgetShapeInfo
GtkWidgetHelpType
gtk_widget_new
gtk_widget_destroy
gtk_widget_in_destruction
gtk_widget_destroyed
gtk_widget_unparent
gtk_widget_show
@@ -4749,7 +4777,6 @@ gtk_widget_map
gtk_widget_unmap
gtk_widget_realize
gtk_widget_unrealize
gtk_widget_draw
gtk_widget_queue_draw
gtk_widget_queue_resize
gtk_widget_queue_resize_no_redraw
@@ -4785,8 +4812,9 @@ gtk_widget_get_device_events
gtk_widget_add_device_events
gtk_widget_get_toplevel
gtk_widget_get_ancestor
gtk_widget_get_colormap
gtk_widget_set_colormap
gtk_widget_get_visual
gtk_widget_set_visual
gtk_widget_get_pointer
gtk_widget_is_ancestor
gtk_widget_translate_coordinates
@@ -4795,14 +4823,19 @@ gtk_widget_set_style
gtk_widget_ensure_style
gtk_widget_get_style
gtk_widget_reset_rc_styles
gtk_widget_push_colormap
gtk_widget_pop_colormap
gtk_widget_set_default_colormap
gtk_widget_get_default_style
gtk_widget_get_default_colormap
gtk_widget_get_default_visual
gtk_widget_set_direction
GtkTextDirection
gtk_widget_get_direction
gtk_widget_set_default_direction
gtk_widget_get_default_direction
gtk_widget_shape_combine_region
gtk_widget_input_shape_combine_region
gtk_widget_shape_combine_mask
gtk_widget_input_shape_combine_mask
gtk_widget_path
gtk_widget_class_path
gtk_widget_get_composite_name
@@ -4873,11 +4906,8 @@ gtk_widget_set_tooltip_window
gtk_widget_get_has_tooltip
gtk_widget_set_has_tooltip
gtk_widget_trigger_tooltip_query
gtk_widget_get_snapshot
gtk_widget_get_window
gtk_cairo_should_draw_window
gtk_cairo_transform_to_window
gtk_widget_get_allocated_width
gtk_widget_get_allocated_height
gtk_widget_get_allocation
gtk_widget_set_allocation
gtk_widget_get_app_paintable
@@ -4916,21 +4946,6 @@ gtk_requisition_new
gtk_requisition_copy
gtk_requisition_free
<SUBSECTION>
GtkAlign
gtk_widget_get_halign
gtk_widget_set_halign
gtk_widget_get_valign
gtk_widget_set_valign
gtk_widget_get_margin_left
gtk_widget_set_margin_left
gtk_widget_get_margin_right
gtk_widget_set_margin_right
gtk_widget_get_margin_top
gtk_widget_set_margin_top
gtk_widget_get_margin_bottom
gtk_widget_set_margin_bottom
<SUBSECTION Standard>
GTK_WIDGET
GTK_IS_WIDGET
@@ -4940,7 +4955,6 @@ GTK_IS_WIDGET_CLASS
GTK_WIDGET_GET_CLASS
GTK_TYPE_REQUISITION
<SUBSECTION Private>
GtkWidgetPrivate
gtk_widget_get_type
gtk_requisition_get_type
</SECTION>
@@ -5060,7 +5074,6 @@ GTK_IS_WINDOW_CLASS
GTK_WINDOW_GET_CLASS
<SUBSECTION Private>
GtkWindowPrivate
gtk_window_get_type
GtkWindowGeometryInfo
gtk_window_remove_embedded_xid
@@ -5124,12 +5137,9 @@ gtk_device_grab_add
gtk_device_grab_remove
<SUBSECTION>
GtkFunction
gtk_init_add
gtk_quit_add_destroy
gtk_quit_add
GtkCallbackMarshal
GtkArg
gtk_quit_add_full
gtk_quit_remove
gtk_quit_remove_by_data
@@ -5160,11 +5170,11 @@ GTKMAIN_C_VAR
<SECTION>
<FILE>gtkfeatures</FILE>
<TITLE>Feature Test Macros</TITLE>
gtk_get_major_version
gtk_get_minor_version
gtk_get_micro_version
gtk_get_binary_age
gtk_get_interface_age
gtk_major_version
gtk_minor_version
gtk_micro_version
gtk_binary_age
gtk_interface_age
gtk_check_version
<SUBSECTION>
@@ -5176,6 +5186,14 @@ GTK_INTERFACE_AGE
GTK_CHECK_VERSION
</SECTION>
<SECTION>
<FILE>gtkgc</FILE>
<TITLE>Graphics Contexts</TITLE>
gtk_gc_get
gtk_gc_release
</SECTION>
<SECTION>
<FILE>gtkstyle</FILE>
<TITLE>GtkStyle</TITLE>
@@ -5204,6 +5222,7 @@ gtk_paint_focus
gtk_paint_handle
gtk_paint_hline
gtk_paint_option
gtk_paint_polygon
gtk_paint_shadow
gtk_paint_shadow_gap
gtk_paint_slider
@@ -5415,13 +5434,14 @@ gtk_drag_unhighlight
<SUBSECTION Source Side>
gtk_drag_begin
gtk_drag_set_icon_widget
gtk_drag_set_icon_pixmap
gtk_drag_set_icon_pixbuf
gtk_drag_set_icon_stock
gtk_drag_set_icon_surface
gtk_drag_set_icon_name
gtk_drag_set_icon_default
gtk_drag_check_threshold
gtk_drag_source_set
gtk_drag_source_set_icon
gtk_drag_source_set_icon_pixbuf
gtk_drag_source_set_icon_stock
gtk_drag_source_set_icon_name
@@ -5433,6 +5453,17 @@ gtk_drag_source_add_image_targets
gtk_drag_source_add_uri_targets
</SECTION>
<SECTION>
<FILE>gtktypeutils</FILE>
<TITLE>Types</TITLE>
GtkFunction
GtkCallbackMarshal
GtkArg
<SUBSECTION Private>
GTK_TYPE_IDENTIFIER
gtk_identifier_get_type
</SECTION>
<SECTION>
<FILE>gtkbindings</FILE>
<TITLE>Bindings</TITLE>
@@ -5457,6 +5488,7 @@ gtk_binding_set_add_path
<FILE>gtkenums</FILE>
<TITLE>Standard Enumerations</TITLE>
GtkAccelFlags
GtkAnchorType
GtkArrowPlacement
GtkArrowType
GtkAttachOptions
@@ -5487,6 +5519,7 @@ GtkSubmenuDirection
GtkSubmenuPlacement
GtkToolbarStyle
GtkUpdateType
GtkVisibility
GtkWindowPosition
GtkWindowType
GtkSortType
@@ -6268,15 +6301,15 @@ gtk_orientable_get_type
<SECTION>
<FILE>gtksizerequest</FILE>
<TITLE>GtkSizeRequest</TITLE>
GtkSizeRequest
GtkSizeRequestIface
GtkSizeRequestMode
GtkRequestedSize
gtk_widget_get_preferred_height
gtk_widget_get_preferred_width
gtk_widget_get_preferred_height_for_width
gtk_widget_get_preferred_width_for_height
gtk_widget_get_request_mode
gtk_widget_get_preferred_size
gtk_distribute_natural_allocation
gtk_size_request_get_height
gtk_size_request_get_width
gtk_size_request_get_height_for_width
gtk_size_request_get_width_for_height
gtk_size_request_get_request_mode
gtk_size_request_get_size
<SUBSECTION Standard>
GTK_SIZE_REQUEST
@@ -6286,7 +6319,7 @@ GTK_IS_SIZE_REQUEST
GTK_TYPE_SIZE_REQUEST
<SUBSECTION Private>
gtk_widget_get_type
gtk_size_request_get_type
</SECTION>
<SECTION>
@@ -6300,7 +6333,6 @@ gtk_application_quit
gtk_application_set_action_group
gtk_application_get_window
gtk_application_add_window
gtk_application_get_windows
gtk_application_create_window
<SUBSECTION Standard>
@@ -6315,42 +6347,3 @@ GTK_APPLICATION_GET_CLASS
gtk_application_get_type
GtkApplicationPrivate
</SECTION>
<SECTION>
<FILE>gtkwrapbox</FILE>
<TITLE>GtkWrapBox</TITLE>
GtkWrapBox
gtk_wrap_box_new
GtkWrapBoxPacking
gtk_wrap_box_insert_child
gtk_wrap_box_reorder_child
GtkWrapAllocationMode
gtk_wrap_box_set_allocation_mode
gtk_wrap_box_get_allocation_mode
GtkWrapBoxSpreading
gtk_wrap_box_set_vertical_spreading
gtk_wrap_box_get_vertical_spreading
gtk_wrap_box_set_horizontal_spreading
gtk_wrap_box_get_horizontal_spreading
gtk_wrap_box_set_vertical_spacing
gtk_wrap_box_get_vertical_spacing
gtk_wrap_box_set_horizontal_spacing
gtk_wrap_box_get_horizontal_spacing
gtk_wrap_box_set_minimum_line_children
gtk_wrap_box_get_minimum_line_children
gtk_wrap_box_set_natural_line_children
gtk_wrap_box_get_natural_line_children
<SUBSECTION Standard>
GtkWrapBoxClass
GTK_TYPE_WRAP_BOX
GTK_WRAP_BOX
GTK_WRAP_BOX_CLASS
GTK_IS_WRAP_BOX
GTK_IS_WRAP_BOX_CLASS
GTK_WRAP_BOX_GET_CLASS
<SUBSECTION Private>
gtk_wrap_box_get_type
GtkWrapBoxPrivate
</SECTION>

View File

@@ -80,6 +80,7 @@ gtk_im_context_simple_get_type
gtk_im_multicontext_get_type
gtk_info_bar_get_type
gtk_invisible_get_type
gtk_item_get_type
gtk_label_get_type
gtk_layout_get_type
gtk_link_button_get_type
@@ -93,6 +94,7 @@ gtk_message_dialog_get_type
gtk_misc_get_type
gtk_mount_operation_get_type
gtk_notebook_get_type
gtk_object_get_type
gtk_offscreen_window_get_type
gtk_orientable_get_type
gtk_page_setup_get_type
@@ -130,6 +132,7 @@ gtk_separator_menu_item_get_type
gtk_separator_tool_item_get_type
gtk_settings_get_type
gtk_size_group_get_type
gtk_size_request_get_type
gtk_socket_get_type
gtk_spin_button_get_type
gtk_spinner_get_type
@@ -176,4 +179,3 @@ gtk_vseparator_get_type
gtk_widget_get_type
gtk_window_get_type
gtk_window_group_get_type
gtk_wrap_box_get_type

View File

@@ -6,67 +6,16 @@
<title>Migrating from GTK+ 2.x to GTK+ 3</title>
<para>
GTK+ 3 is a major new version of GTK+ that breaks both API and ABI
compared to GTK+ 2.x, which has remained API- and ABI-stable for a
long time. Thankfully, most of the changes are not hard to adapt to
and there are a number of steps that you can take to prepare your
GTK+ 2.x application for the switch to GTK+ 3. After that, there's
a small number of adjustments that you may have to do when you actually
switch your application to build against GTK+ 3.
There are a number of steps that you can take to prepare your GTK+ 2.x
application for the switch to GTK+ 3.
</para>
<section>
<title>Preparation in GTK+ 2.x</title>
<para>
The steps outlined in the following sections assume that your
application is working with GTK+ 2.24, which is the final stable
release of GTK+ 2.x. It includes all the necessary APIs and tools
to help you port your application to GTK+ 3. If you are still using
an older version of GTK+ 2.x, you should first get your application
to build and work with 2.24.
</para>
<section>
<title>Do not include individual headers</title>
<title>Only single includes</title>
<para>
With GTK+ 2.x it was common to include just the header files for
a few widgets that your application was using, which could lead
to problems with missing definitions, etc. GTK+ 3 tightens the
rules about which header files you are allowed to include directly.
The allowed header files are are
<variablelist>
<varlistentry>
<term><filename>gtk/gtk.h</filename></term>
<listitem>for GTK</listitem>
</varlistentry>
<varlistentry>
<term><filename>gtk/gtkunixprint.h</filename></term>
<listitem>for low-level, UNIX-specific printing functions</listitem>
</varlistentry>
<varlistentry>
<term><filename>gdk/gdk.h</filename></term>
<listitem>for GDK</listitem>
</varlistentry>
<varlistentry>
<term><filename>gdk/gdkx.h</filename></term>
<listitem>for GDK functions that are X11-specific</listitem>
</varlistentry>
<varlistentry>
<term><filename>gdk/gdkwin32.h</filename></term>
<listitem>for GDK functions that are Windows-specific</listitem>
</varlistentry>
</variablelist>
(these relative paths are assuming that you are using the include
paths that are specified in the gtk+-2.0.pc file, as returned by
<literal>pkg-config --cflags gtk+-2.0.pc</literal>.)
</para>
<para>
To check that your application only includes the allowed headers,
you can use defines to disable inclusion of individual headers,
as follows:
Make sure your program only include the toplevel headers:
<programlisting>
make CFLAGS+="-DGTK_DISABLE_SINGLE_INCLUDES"
make CFLAGS+="-DG_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES"
</programlisting>
</para>
</section>
@@ -74,620 +23,32 @@
<section>
<title>Do not use deprecated symbols</title>
<para>
Over the years, a number of functions, and in some cases, entire
widgets have been deprecated. These deprecations are clearly spelled
out in the API reference, with hints about the recommended replacements.
The API reference also includes an
<link linkend="api-index-deprecated">index</link> of all deprecated
symbols.
</para>
<para>
To verify that your program does not use any deprecated symbols,
you can use defines to remove deprecated symbols from the header files,
as follows:
Make sure your program doesn't use any functions that have been
deprecated in GTK+ 2.x:
<programlisting>
make CFLAGS+="-DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
make CFLAGS+="-DG_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
</programlisting>
</para>
</section>
<section>
<title>Use accessor functions instead of direct access</title>
<title>Use accessor functions instead direct access</title>
<para>
GTK+ 3 removes many implementation details and struct members from
its public headers.
</para>
<para>
To ensure that your application does not have problems with this, you
define the preprocessor symbol <literal>GSEAL_ENABLE</literal>. This
will make the compiler catch all uses of direct access to struct fields
so that you can go through them one by one and replace them with a call
to an accessor function instead.
its public headers. To ensure that your application does not have problems
with this, you define the preprocessor symbol GSEAL_ENABLE. This will
make the compiler catch all uses of direct access to struct fields so that
you can go through them one by one and replace them with a call to an
accessor function instead.
<programlisting>
make CFLAGS+="-DGSEAL_ENABLE"
</programlisting>
Starting with 2.90.4, GTK+'s .pc files turn on GSEAL_ENABLE by default.
</para>
</section>
<section>
<title>Replace GDK_&lt;keyname&gt; with GDK_KEY_&lt;keyname&gt;</title>
<para>
Key constants have gained a <literal>_KEY_</literal> infix.
For example, <literal>GDK_a</literal> is now
<literal>GDK_KEY_a</literal>. In GTK+ 2, the old names continue
to be available. In GTK+ 3 however, the old names will require
an explicit include of the <literal>gdkkeysyms-compat.h</literal> header.
</para>
</section>
<section>
<title>Use cairo for drawing</title>
<para>
In GTK+ 3, the GDK drawing API (which closely mimics the X
drawing API, which is itself modeled after PostScript) has been
removed. All drawing in GTK+ 3 is done via cairo.
</para>
<para>
The #GdkGC and #GdkImage objects, as well as all the functions using
them, are gone. This includes the <literal>gdk_draw</literal> family
of functions like gdk_draw_rectangle() and gdk_draw_drawable(). As
#GdkGC is roughly equivalent to #cairo_t and #GdkImage was used for
drawing images to GdkDrawables, which cairo supports automatically,
a transition is usually straightforward.
</para>
<para>
The following examples show a few common drawing idioms used by
applications that have been ported to use cairo and how the code
was replaced.
</para>
<example>
<title>Drawing a GdkPixbuf onto a GdkDrawable</title>
<para>
Drawing a pixbuf onto a drawable used to be done like this:
<programlisting><![CDATA[
gdk_draw_pixbuf (window,
gtk_widget_get_style (widget)->black_gc,
pixbuf,
0, 0
x, y,
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf),
GDK_RGB_DITHER_NORMAL,
0, 0);
]]></programlisting>
Doing the same thing with cairo:
<programlisting><![CDATA[
cairo_t *cr = gdk_cairo_create (window);
gdk_cairo_set_source_pixbuf (cr, pixbuf, x, y);
cairo_paint (cr);
cairo_destroy (cr);
]]></programlisting>
Note that very similar code can be used for drawing pixmaps
by using gdk_cairo_set_source_pixmap() instead of
gdk_cairo_set_source_pixbuf().
</para>
</example>
<example>
<title>Drawing a tiled GdkPixmap to a GdkDrawable</title>
<para>
Tiled pixmaps are often used for drawing backgrounds.
Old code looked something like this:
<programlisting><![CDATA[
GdkGCValues gc_values;
GdkGC *gc;
/* setup */
gc = gtk_widget_get_style (widget)->black_gc;
gdk_gc_set_tile (gc, pixmap);
gdk_gc_set_fill (gc, GDK_TILED);
gdk_gc_set_ts_origin (gc, x_origin, y_origin);
/* use */
gdk_draw_rectangle (drawable, gc, TRUE, 0, 0, width, height);
/* restore */
gdk_gc_set_tile (gc, NULL);
gdk_gc_set_fill (gc, GDK_SOLID);
gdk_gc_set_ts_origin (gc, 0, 0);
]]></programlisting>
The equivalent cairo code looks like this:
<programlisting><![CDATA[
cairo_t *cr;
cr = gdk_cairo_create (drawable);
gdk_cairo_set_source_pixmap (cr, pixmap, x_origin, y_origin);
cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
cairo_rectangle (cr, 0, 0, width, height);
cairo_fill (cr);
cairo_destroy (cr);
]]></programlisting>
Again, you can exchange pixbufs and pixmaps by using
gdk_cairo_set_source_pixbuf() instead of
gdk_cairo_set_source_pixmap().
</para>
</example>
<example>
<title>Drawing a PangoLayout to a clipped area</title>
<para>
Drawing layouts clipped is often used to avoid overdraw or to
allow drawing selections. Code would have looked like this:
<programlisting><![CDATA[
GdkGC *gc;
/* setup */
gc = gtk_widget_get_style (widget)->text_gc[state];
gdk_gc_set_clip_rectangle (gc, &area);
/* use */
gdk_draw_layout (drawable, gc, x, y, layout);
/* restore */
gdk_gc_set_clip_rectangle (gc, NULL);
]]></programlisting>
With cairo, the same effect can be achieved using:
<programlisting><![CDATA[
cairo_t *cr;
cr = gdk_cairo_create (drawable);
/* clip */
gdk_cairo_rectangle (cr, &area);
cairo_clip (cr);
/* set the correct source color */
gdk_cairo_set_source_color (cr, &gtk_widget_get_style (widget)->text[state]);
/* draw the text */
cairo_move_to (cr, x, y);
pango_cairo_show_layout (cr, layout);
cairo_destroy (cr);
]]></programlisting>
Clipping using cairo_clip() is of course not restricted to text
rendering and can be used everywhere where GC clips were used.
And using gdk_cairo_set_source_color() with style colors should
be used in all the places where a styles GC was used to achieve
a particular color.
</para>
</example>
<section>
<title>What should you be aware of ?</title>
<formalpara><title>No more stippling</title>
<para>
Stippling is the usage of a bi-level mask, called a #GdkBitmap.
It was often used to achieve a checkerboard effect. You can use
cairo_mask() to achieve this effect. To get a checkerbox mask,
you can use code like this:
<programlisting><![CDATA[
static cairo_pattern_t *
gtk_color_button_get_checkered (void)
{
/* need to respect pixman's stride being a multiple of 4 */
static unsigned char data[8] = { 0xFF, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x00, 0x00 };
cairo_surface_t *surface;
cairo_pattern_t *pattern;
surface = cairo_image_surface_create_for_data (data,
CAIRO_FORMAT_A8,
2, 2,
4);
pattern = cairo_pattern_create_for_surface (surface);
cairo_surface_destroy (surface);
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
cairo_pattern_set_filter (pattern, CAIRO_FILTER_NEAREST);
return pattern;
}
]]></programlisting>
Note that stippling looks very outdated in UIs, and is rarely
used in modern applications. All properties that made use of
stippling have been removed from GTK+ 3. Most prominently,
stippling is absent from text rendering, in particular #GtkTextTag.
</para>
</formalpara>
<formalpara><title>Using the the target drawable also as source or mask</title>
<para>
The gdk_draw_drawable() function allowed using the same drawable
as source and target. This was often used to achieve a scrolling
effect. Cairo does not allow this yet. You can however use
cairo_push_group() to get a different intermediate target that
you can copy to. So you can replace this code:
<programlisting><![CDATA[
gdk_draw_drawable (pixmap,
gc,
pixmap,
area.x + dx, area.y + dy,
area.x, area.y,
area.width, area.height);
]]></programlisting>
By using this code:
<programlisting><![CDATA[
cairo_t *cr = gdk_cairo_create (pixmap);
/* clipping restricts the intermediate surface's size, so it's a good idea
* to use it. */
gdk_cairo_rectangle (cr, &area);
cairo_clip (cr);
/* Now push a group to change the target */
cairo_push_group (cr);
gdk_cairo_set_source_pixmap (cr, pixmap, dx, dy);
cairo_paint (cr);
/* Now copy the intermediate target back */
cairo_pop_group_to_source (cr);
cairo_paint (cr);
cairo_destroy (cr);
]]></programlisting>
The cairo developers plan to add self-copies in the future to allow
exactly this effect, so you might want to keep up on cairo
development to be able to change your code.
</para>
</formalpara>
<formalpara><title>Using pango_cairo_show_layout(<!-- -->) instead of gdk_draw_layout_with_colors(<!-- -->)</title>
<para>
GDK provided a way to ignore the color attributes of text and use
a hardcoded text color with the gdk_draw_layout_with_colors()
function. This is often used to draw text shadows or selections.
Pangos cairo support does not yet provide this functionality. If
you use Pango layouts that change colors, the easiest way to achieve
a similar effect is using pango_cairo_layout_path() and cairo_fill()
instead of gdk_draw_layout_with_colors(). Note that this results in
a slightly uglier-looking text, as subpixel anti-aliasing is not
supported.
</para>
</formalpara>
</section>
</section>
</section>
<section>
<title>Changes that need to be done at the time of the switch</title>
<para>
This section outlines porting tasks that you need to tackle when
you get to the point that you actually build your application against
GTK+ 3. Making it possible to prepare for these in GTK+ 2.24 would
have been either impossible or impractical.
</para>
<section>
<title>Replace GdkRegion by cairo_region_t</title>
<para>
Starting with version 1.10, cairo provides a region API that is
equivalent to the GDK region API (which was itself copied from
the X server). Therefore, the region API has been removed in GTK+ 3.
</para>
<para>
Porting your application to the cairo region API should be a straight
find-and-replace task. Please refer to the following table:
<table>
<tgroup cols="2">
<thead>
<row><entry>GDK</entry><entry>cairo</entry></row>
</thead>
<tbody>
<row><entry>#GdkRegion</entry><entry>#cairo_region_t</entry></row>
<row><entry>#GdkRectangle</entry><entry>#cairo_rectangle_int_t</entry></row>
<row><entry>gdk_rectangle_intersect()</entry><entry>this function is still there</entry></row>
<row><entry>gdk_rectangle_union()</entry><entry>this function is still there</entry></row>
<row><entry>gdk_region_new()</entry><entry>cairo_region_create()</entry></row>
<row><entry>gdk_region_copy()</entry><entry>cairo_region_copy()</entry></row>
<row><entry>gdk_region_destroy()</entry><entry>cairo_region_destroy()</entry></row>
<row><entry>gdk_region_rectangle()</entry><entry>cairo_region_create_rectangle()</entry></row>
<row><entry>gdk_region_get_clipbox()</entry><entry>cairo_region_get_extents()</entry></row>
<row><entry>gdk_region_get_rectangles()</entry><entry>cairo_region_num_rectangles() and
cairo_region_get_rectangle()</entry></row>
<row><entry>gdk_region_empty()</entry><entry>cairo_region_is_empty()</entry></row>
<row><entry>gdk_region_equal()</entry><entry>cairo_region_equal()</entry></row>
<row><entry>gdk_region_point_in()</entry><entry>cairo_region_contains_point()</entry></row>
<row><entry>gdk_region_rect_in()</entry><entry>cairo_region_contains_rectangle()</entry></row>
<row><entry>gdk_region_offset()</entry><entry>cairo_region_translate()</entry></row>
<row><entry>gdk_region_union_with_rect()</entry><entry>cairo_region_union_rectangle()</entry></row>
<row><entry>gdk_region_intersect()</entry><entry>cairo_region_intersect()</entry></row>
<row><entry>gdk_region_union()</entry><entry>cairo_region_union()</entry></row>
<row><entry>gdk_region_subtract()</entry><entry>cairo_region_subtract()</entry></row>
<row><entry>gdk_region_xor()</entry><entry>cairo_region_xor()</entry></row>
<row><entry>gdk_region_shrink()</entry><entry>no replacement</entry></row>
<row><entry>gdk_region_polygon()</entry><entry>no replacement, use cairo paths instead</entry></row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section>
<title>Replace GdkPixmap by cairo surfaces</title>
<para>
The #GdkPixmap object and related functions have been removed.
In the cairo-centric world of GTK+ 3, cairo surfaces take over
the role of pixmaps.
</para>
<example>
<title>Creating custom cursors</title>
<para>
One place where pixmaps were commonly used is to create custom
cursors:
<programlisting>
GdkCursor *cursor;
GdkPixmap *pixmap;
cairo_t *cr;
GdkColor fg = { 0, 0, 0, 0 };
pixmap = gdk_pixmap_new (NULL, 1, 1, 1);
cr = gdk_cairo_create (pixmap);
cairo_rectangle (cr, 0, 0, 1, 1);
cairo_fill (cr);
cairo_destroy (cr);
cursor = gdk_cursor_new_from_pixmap (pixmap, pixmap, &amp;fg, &amp;fg, 0, 0);
g_object_unref (pixmap);
</programlisting>
The same can be achieved without pixmaps, by drawing onto
an image surface:
<programlisting>
GdkCursor *cursor;
cairo_surface_t *s;
cairo_t *cr;
GdkPixbuf *pixbuf;
s = cairo_image_surface_create (CAIRO_FORMAT_A1, 3, 3);
cr = cairo_create (s);
cairo_arc (cr, 1.5, 1.5, 1.5, 0, 2 * M_PI);
cairo_fill (cr);
cairo_destroy (cr);
pixbuf = gdk_pixbuf_get_from_surface (NULL, s,
0, 0, 0, 0,
3, 3);
cairo_surface_destroy (s);
cursor = gdk_cursor_new_from_pixbuf (display, pixbuf, 0, 0);
g_object_unref (pixbuf);
</programlisting>
</para>
</example>
</section>
<section>
<title>Replace colormaps by visuals</title>
<para>
For drawing with cairo, it is not necessary to allocate colors, and
a #GdkVisual provides enough information for cairo to handle colors
in 'native' surfaces. Therefore, #GdkColormap and related functions
have been removed in GTK+ 3, and visuals are used instead. The
colormap-handling functions of #GtkWidget (gtk_widget_set_colormap(),
etc) have been removed and gtk_window_set_visual() has been added.
</para>
<example><title>Setting up a translucent window</title>
<para>You might have a screen-changed handler like the following
to set up a translucent window with an alpha-channel:
</para>
<programlisting>
static void
on_alpha_screen_changed (GtkWidget *widget,
GdkScreen *old_screen,
GtkWidget *label)
{
GdkScreen *screen = gtk_widget_get_screen (widget);
GdkColormap *colormap = gdk_screen_get_rgba_colormap (screen);
if (colormap == NULL)
colormap = gdk_screen_get_default_colormap (screen);
gtk_widget_set_colormap (widget, colormap);
}
</programlisting>
<para>
With visuals instead of colormaps, this will look as follows:
</para>
<programlisting>
static void
on_alpha_screen_changed (GtkWindow *window,
GdkScreen *old_screen,
GtkWidget *label)
{
GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (window));
GdkVisual *visual = gdk_screen_get_rgba_visual (screen);
if (visual == NULL)
visual = gdk_screen_get_system_visual (screen);
gtk_window_set_visual (window, visual);
}
</programlisting>
</example>
</section>
<section>
<title>The GtkWidget::draw signal</title>
<para>
The GtkWidget #GtkWidget::expose-event signal has been replaced by
a new #GtkWidget::draw signal, which takes a #cairo_t instead of
an expose event. The cairo context is being set up so that the origin
at (0, 0) coincides with the upper left corner of the widget, and
is properly clipped.
</para>
<note><para>In other words, the cairo context of the draw signal is set
up in 'widget coordinates', which is different from traditional expose
event handlers, which always assume 'window coordinates'.
</para></note>
<para>
The widget is expected to draw itself with its allocated size, which
is available via the new gtk_widget_get_allocated_width() and
gtk_widget_get_allocated_height() functions. It is not necessary to
check for GTK_WIDGET_IS_DRAWABLE(), since GTK+ already does this check
before emitting the ::draw signal.
</para>
<para>
There are some special considerations for widgets with multiple windows.
Expose events are window-specific, and widgets with multiple windows
could expect to get an expose event for each window that needs to be
redrawn. Therefore, multi-window expose event handlers typically look
like this:
<informalexample><programlisting>
if (event->window == widget->window1)
{
/* ... draw window1 ... */
}
else if (event->window == widget->window2)
{
/* ... draw window2 ... */
}
...
</programlisting></informalexample>
In contrast, the ::draw signal handler may have to draw multiple
windows in one call. GTK+ has a convenience function
gtk_cairo_should_draw_window() that can be used to find out if
a window needs to be drawn. With that, the example above would look
like this (note that the 'else' is gone):
<informalexample><programlisting>
if (gtk_cairo_should_draw_window (cr, widget->window1)
{
/* ... draw window1 ... */
}
if (gtk_cairo_should_draw_window (cr, widget->window2)
{
/* ... draw window2 ... */
}
...
</programlisting></informalexample>
Another convenience function that can help when implementing
::draw for multi-window widgets is gtk_cairo_transform_to_window(),
which transforms a cairo context from widget-relative coordinates
to window-relative coordinates.
</para>
<para>
All GtkStyle drawing functions (gtk_paint_box(), etc) have been changed
to take a #cairo_t instead of a window and a clip area. ::draw
implementations will usually just use the cairo context that has been
passed in for this.
</para>
<example><title>A simple ::draw function</title>
<programlisting>
gboolean
gtk_arrow_draw (GtkWidget *widget,
cairo_t *cr)
{
gint x, y;
gint width, height;
gint extent;
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
extent = MIN (width - 2 * PAD, height - 2 * PAD);
x = PAD;
y = PAD;
gtk_paint_arrow (gtk_widget_get_style (widget),
cr,
gtk_widget_get_state (widget),
GTK_SHADOW_OUT,
widget,
"arrow",
widget->priv->arrow_type,
TRUE,
x, y, extent, extent);
}
</programlisting>
</example>
</section>
<section>
<title>GtkProgressBar orientation</title>
<para>
In GTK+ 2.x, #GtkProgressBar and #GtkCellRendererProgress were using the
GtkProgressBarOrientation enumeration to specify their orientation and
direction. In GTK+ 3, both the widget and the cell renderer implement
#GtkOrientable, and have an additional 'inverted' property to determine
their direction. Therefore, a call to gtk_progress_bar_set_orientation()
needs to be replaced by a pair of calls to
gtk_orientable_set_orientation() and gtk_progress_bar_set_inverted().
The following values correspond:
<table>
<tgroup cols="3">
<colspec colname="1"/>
<colspec colname="2"/>
<colspec colname="3"/>
<thead>
<row><entry>GTK+ 2.x</entry><entry namest="2" nameend="3">GTK+ 3</entry></row>
<row><entry>GtkProgressBarOrientation</entry><entry>GtkOrientation</entry><entry>inverted</entry></row>
</thead>
<tbody>
<row><entry>GTK_PROGRESS_LEFT_TO_RIGHT</entry><entry>GTK_ORIENTATION_HORIZONTAL</entry><entry>FALSE</entry></row>
<row><entry>GTK_PROGRESS_RIGHT_TO_LEFT</entry><entry>GTK_ORIENTATION_HORIZONTAL</entry><entry>TRUE</entry></row>
<row><entry>GTK_PROGRESS_TOP_TO_BOTTOM</entry><entry>GTK_ORIENTATION_VERTICAL</entry><entry>FALSE</entry></row>
<row><entry>GTK_PROGRESS_BOTTOM_TO_TOP</entry><entry>GTK_ORIENTATION_VERTICAL</entry><entry>TRUE</entry></row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section>
<title>GtkScrolledWindow policy</title>
<para>
The default values for the #GtkScrolledWindow:hscrollbar-policy and
#GtkScrolledWindow:vscrollbar-policy properties have been changed from
'never' to 'automatic'. If your application was relying on the default
value, you will have explicitly set it explicitly.
</para>
</section>
<section>
<title>GtkObject is gone</title>
<para>
GtkObject has been removed in GTK+ 3. Its remaining functionality,
the ::destroy signal, has been moved to GtkWidget. If you have non-widget
classes that are directly derived from GtkObject, you have to make
them derive from #GInitiallyUnowned (or, if you don't need the floating
functionality, #GObject). If you have widgets that override the
destroy class handler, you have to adust your class_init function,
since destroy is now a member of GtkWidgetClass:
<informalexample><programlisting>
GtkObjectClass *object_class = GTK_OBJECT_CLASS (class);
object_class->destroy = my_destroy;
</programlisting></informalexample>
becomes
<informalexample><programlisting>
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
widget_class->destroy = my_destroy;
</programlisting></informalexample>
In the unlikely case that you have a non-widget class that is derived
from GtkObject and makes use of the destroy functionality, you have
to implement ::destroy yourself.
</para>
</section>
<section>
<title>Prevent mixed linkage</title>
<para>
Linking against GTK+ 2.x and GTK+ 3 in the same process is problematic
and can lead to hard-to-diagnose crashes. The gtk_init() function in
both GTK+ 2.22 and in GTK+ 3 tries to detect this situation and abort
with a diagnostic message, but this check is not 100% reliable (e.g. if
the problematic linking happens only in loadable modules).
</para>
<para>
Direct linking of your application against both versions of GTK+ is
easy to avoid; the problem gets harder when your application is using
libraries that are themselves linked against some version of GTK+.
In that case, you have to verify that you are using a version of the
library that is linked against GTK+ 3.
</para>
<para>
If you are using packages provided by a distributor, it is likely that
parallel installable versions of the library exist for GTK+ 2.x and
GTK+ 3, e.g for vte, check for vte3; for webkitgtk look for webkitgtk3,
and so on.
</para>
</section>
<section>
<title>Install GTK+ modules in the right place</title>
<title>GTK+ Modules</title>
<para>
Some software packages install loadable GTK+ modules such as theme engines,
gdk-pixbuf loaders or input methods. Since GTK+ 3 is parallel-installable
@@ -717,7 +78,4 @@ gtk_arrow_draw (GtkWidget *widget,
unhappiness and must be avoided.
</para>
</section>
</section>
</chapter>

View File

@@ -95,10 +95,10 @@ from functions?
<answer>
<para>
See the documentation for #GObject and #GInitiallyUnowned. For #GObject note
specifically g_object_ref() and g_object_unref(). #GInitiallyUnowned is a
subclass of #GObject so the same points apply, except that it has a "floating"
state (explained in its documentation).
See the documentation for #GObject and #GtkObject. For #GObject note
specifically g_object_ref() and g_object_unref(). #GtkObject is a subclass
of #GObject so the same points apply, except that it has a "floating" state
(explained in its documentation).
</para>
<para>
@@ -115,7 +115,7 @@ url="http://bugzilla.gnome.org">http://bugzilla.gnome.org</ulink>.)
<qandaentry>
<question>
<para>
Why does my program leak memory, if I destroy a widget immediately
Why does my program leak memory, if I destroy a widget immediately
after creating it ?
</para>
</question>
@@ -127,26 +127,27 @@ If <structname>GtkFoo</structname> isn't a toplevel window, then
foo = gtk_foo_new (<!-- -->);
gtk_widget_destroy (foo);
</programlisting></informalexample>
is a memory leak, because no one assumed the initial floating
reference. If you are using a widget and you aren't immediately
packing it into a container, then you probably want standard
is a memory leak, because no one assumed the initial floating
reference. If you are using a widget and you aren't immediately
packing it into a container, then you probably want standard
reference counting, not floating reference counting.
</para>
<para>
To to get this, you must acquire a reference to the widget and drop the
floating reference (<quote>ref and sink</quote> in GTK+ parlance) after
To to get this, you must acquire a reference to the widget and drop the
floating reference (<quote>ref and sink</quote> in GTK+ parlance) after
creating it:
<informalexample><programlisting>
foo = gtk_foo_new (<!-- -->);
g_object_ref_sink (foo);
g_object_ref (foo);
gtk_object_sink (GTK_OBJECT (foo));
</programlisting></informalexample>
When you want to get rid of the widget, you must call gtk_widget_destroy()
to break any external connections to the widget before dropping your
to break any external connections to the widget before dropping your
reference:
<informalexample><programlisting>
gtk_widget_destroy (foo);
g_object_unref (foo);
gtk_widget_destroy (foo);
g_object_unref (foo);
</programlisting></informalexample>
When you immediately add a widget to a container, it takes care of
assuming the initial floating reference and you don't have to worry

View File

@@ -1,27 +1,16 @@
gtkaccelmap.sgml
gtkactiongroup.sgml
gtkaboutdialog.sgml
gtkbbox.sgml
gtkbox.sgml
gtkbuilder.sgml
gtkbutton.sgml
gtkcalendar.sgml
gtkcelleditable.sgml
gtkcombobox.sgml
gtkcomboboxentry.sgml
gtkeditable.sgml
gtkentrybuffer.sgml
gtkhbox.sgml
gtkiconview.sgml
gtkimcontextsimple.sgml
gtkimmulticontext.sgml
gtklinkbutton.sgml
gtkmessagedialog.sgml
gtknotebook.sgml
gtkobject.sgml
gtkorientable.sgml
gtkpagesetupunixdialog.sgml
gtkpapersize.sgml
gtkprinter.sgml
gtkradioaction.sgml
gtkradiobutton.sgml
@@ -31,8 +20,6 @@ gtkrecentchooser.sgml
gtkrecentchooserdialog.sgml
gtkrecentchoosermenu.sgml
gtkrecentchooserwidget.sgml
gtkrecentmanager.sgml
gtkscale.sgml
gtkscalebutton.sgml
gtkseparator.sgml
gtkseparatormenuitem.sgml
@@ -41,11 +28,7 @@ gtkstatusbar.sgml
gtkstyle.sgml
gtktesting.sgml
gtktextiter.sgml
gtktexttagtable.sgml
gtktoggleaction.sgml
gtktoolbar.sgml
gtktoolitem.sgml
gtktooltip.sgml
gtktreednd.sgml
gtktypeutils.sgml
gtkwindow.sgml

View File

@@ -0,0 +1,173 @@
<!-- ##### SECTION Title ##### -->
Accelerator Maps
<!-- ##### SECTION Short_Description ##### -->
Loadable keyboard accelerator specifications
<!-- ##### SECTION Long_Description ##### -->
<para>
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkAccelMap ##### -->
<para>
</para>
<!-- ##### SIGNAL GtkAccelMap::changed ##### -->
<para>
</para>
@accelmap: the object which received the signal.
@arg1:
@arg2:
@arg3:
<!-- ##### USER_FUNCTION GtkAccelMapForeach ##### -->
<para>
</para>
@data:
@accel_path:
@accel_key:
@accel_mods:
@changed:
<!-- ##### FUNCTION gtk_accel_map_add_entry ##### -->
<para>
</para>
@accel_path:
@accel_key:
@accel_mods:
<!-- ##### FUNCTION gtk_accel_map_lookup_entry ##### -->
<para>
</para>
@accel_path:
@key:
@Returns:
<!-- ##### FUNCTION gtk_accel_map_change_entry ##### -->
<para>
</para>
@accel_path:
@accel_key:
@accel_mods:
@replace:
@Returns:
<!-- ##### FUNCTION gtk_accel_map_load ##### -->
<para>
</para>
@file_name:
<!-- ##### FUNCTION gtk_accel_map_save ##### -->
<para>
</para>
@file_name:
<!-- ##### FUNCTION gtk_accel_map_foreach ##### -->
<para>
</para>
@data:
@foreach_func:
<!-- ##### FUNCTION gtk_accel_map_load_fd ##### -->
<para>
</para>
@fd:
<!-- ##### FUNCTION gtk_accel_map_save_fd ##### -->
<para>
</para>
@fd:
<!-- ##### FUNCTION gtk_accel_map_load_scanner ##### -->
<para>
</para>
@scanner:
<!-- ##### FUNCTION gtk_accel_map_add_filter ##### -->
<para>
</para>
@filter_pattern:
<!-- ##### FUNCTION gtk_accel_map_foreach_unfiltered ##### -->
<para>
</para>
@data:
@foreach_func:
<!-- ##### FUNCTION gtk_accel_map_get ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_accel_map_lock_path ##### -->
<para>
</para>
@accel_path:
<!-- ##### FUNCTION gtk_accel_map_unlock_path ##### -->
<para>
</para>
@accel_path:

View File

@@ -2,7 +2,7 @@
GtkAdjustment
<!-- ##### SECTION Short_Description ##### -->
A representation of an adjustable bounded value
A GtkObject representing an adjustable bounded value
<!-- ##### SECTION Long_Description ##### -->
<para>

View File

@@ -0,0 +1,461 @@
<!-- ##### SECTION Title ##### -->
GtkComboBox
<!-- ##### SECTION Short_Description ##### -->
A widget used to choose from a list of items
<!-- ##### SECTION Long_Description ##### -->
<para>
A #GtkComboBox is a widget that allows the user to choose from a
list of valid choices. The #GtkComboBox displays the selected
choice. When activated, the #GtkComboBox displays a popup
which allows the user to make a new choice. The style in which
the selected value is displayed, and the style of the popup is
determined by the current theme. It may be similar to a #GtkOptionMenu,
or similar to a Windows-style combo box.
</para>
<para>
Unlike its predecessors #GtkCombo and #GtkOptionMenu, the #GtkComboBox
uses the model-view pattern; the list of valid choices is specified in the
form of a tree model, and the display of the choices can be adapted to
the data in the model by using cell renderers, as you would in a tree view.
This is possible since #GtkComboBox implements the #GtkCellLayout interface.
The tree model holding the valid choices is not restricted to a flat list,
it can be a real tree, and the popup will reflect the tree structure.
</para>
<para>
In addition to the model-view API, #GtkComboBox offers a simple API which
is suitable for text-only combo boxes, and hides the complexity of managing
the data in a model. It consists of the functions gtk_combo_box_new_text(),
gtk_combo_box_append_text(), gtk_combo_box_insert_text(),
gtk_combo_box_prepend_text(), gtk_combo_box_remove_text() and
gtk_combo_box_get_active_text().
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
#GtkComboBoxEntry, #GtkTreeModel, #GtkCellRenderer
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkComboBox ##### -->
<para>
</para>
<!-- ##### SIGNAL GtkComboBox::changed ##### -->
<para>
</para>
@combobox: the object which received the signal.
<!-- ##### SIGNAL GtkComboBox::move-active ##### -->
<para>
</para>
@combobox: the object which received the signal.
@arg1:
<!-- ##### SIGNAL GtkComboBox::popdown ##### -->
<para>
</para>
@combobox: the object which received the signal.
@Returns:
<!-- ##### SIGNAL GtkComboBox::popup ##### -->
<para>
</para>
@combobox: the object which received the signal.
<!-- ##### ARG GtkComboBox:active ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:add-tearoffs ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:button-sensitivity ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:column-span-column ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:focus-on-click ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:has-frame ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:model ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:popup-shown ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:row-span-column ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:tearoff-title ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:wrap-width ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:appears-as-list ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:arrow-size ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBox:shadow-type ##### -->
<para>
</para>
<!-- ##### FUNCTION gtk_combo_box_new ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_new_with_model ##### -->
<para>
</para>
@model:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_get_wrap_width ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_wrap_width ##### -->
<para>
</para>
@combo_box:
@width:
<!-- ##### FUNCTION gtk_combo_box_get_row_span_column ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_row_span_column ##### -->
<para>
</para>
@combo_box:
@row_span:
<!-- ##### FUNCTION gtk_combo_box_get_column_span_column ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_column_span_column ##### -->
<para>
</para>
@combo_box:
@column_span:
<!-- ##### FUNCTION gtk_combo_box_get_active ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_active ##### -->
<para>
</para>
@combo_box:
@index_:
<!-- ##### FUNCTION gtk_combo_box_get_active_iter ##### -->
<para>
</para>
@combo_box:
@iter:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_active_iter ##### -->
<para>
</para>
@combo_box:
@iter:
<!-- ##### FUNCTION gtk_combo_box_get_model ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_model ##### -->
<para>
</para>
@combo_box:
@model:
<!-- ##### FUNCTION gtk_combo_box_new_text ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_append_text ##### -->
<para>
</para>
@combo_box:
@text:
<!-- ##### FUNCTION gtk_combo_box_insert_text ##### -->
<para>
</para>
@combo_box:
@position:
@text:
<!-- ##### FUNCTION gtk_combo_box_prepend_text ##### -->
<para>
</para>
@combo_box:
@text:
<!-- ##### FUNCTION gtk_combo_box_remove_text ##### -->
<para>
</para>
@combo_box:
@position:
<!-- ##### FUNCTION gtk_combo_box_get_active_text ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_popup_for_device ##### -->
<para>
</para>
@combo_box:
@device:
<!-- ##### FUNCTION gtk_combo_box_popup ##### -->
<para>
</para>
@combo_box:
<!-- ##### FUNCTION gtk_combo_box_popdown ##### -->
<para>
</para>
@combo_box:
<!-- ##### FUNCTION gtk_combo_box_get_popup_accessible ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_get_row_separator_func ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_row_separator_func ##### -->
<para>
</para>
@combo_box:
@func:
@data:
@destroy:
<!-- ##### FUNCTION gtk_combo_box_set_add_tearoffs ##### -->
<para>
</para>
@combo_box:
@add_tearoffs:
<!-- ##### FUNCTION gtk_combo_box_get_add_tearoffs ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_title ##### -->
<para>
</para>
@combo_box:
@title:
<!-- ##### FUNCTION gtk_combo_box_get_title ##### -->
<para>
</para>
@combo_box:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_focus_on_click ##### -->
<para>
</para>
@combo:
@focus_on_click:
<!-- ##### FUNCTION gtk_combo_box_get_focus_on_click ##### -->
<para>
</para>
@combo:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_set_button_sensitivity ##### -->
<para>
</para>
@combo_box:
@sensitivity:
<!-- ##### FUNCTION gtk_combo_box_get_button_sensitivity ##### -->
<para>
</para>
@combo_box:
@Returns:

View File

@@ -0,0 +1,123 @@
<!-- ##### SECTION Title ##### -->
GtkComboBoxEntry
<!-- ##### SECTION Short_Description ##### -->
A text entry field with a dropdown list
<!-- ##### SECTION Long_Description ##### -->
<para>
A #GtkComboBoxEntry is a widget that allows the user to choose from a
list of valid choices or enter a different value. It is very similar
to a #GtkComboBox, but it displays the selected value in an entry to
allow modifying it.
</para>
<para>
In contrast to a #GtkComboBox, the underlying model of a #GtkComboBoxEntry
must always have a text column (see gtk_combo_box_entry_set_text_column()),
and the entry will show the content of the text column in the selected row.
To get the text from the entry, use gtk_combo_box_get_active_text().
</para>
<para>
The changed signal will be emitted while typing into a GtkComboBoxEntry,
as well as when selecting an item from the GtkComboBoxEntry's list. Use
gtk_combo_box_get_active() or gtk_combo_box_get_active_iter() to discover
whether an item was actually selected from the list.
</para>
<para>
Connect to the activate signal of the GtkEntry (use gtk_bin_get_child())
to detect when the user actually finishes entering text.
</para>
<para>
The convenience API to construct simple text-only #GtkComboBox<!-- -->es
can also be used with #GtkComboBoxEntry<!-- -->s which have been constructed
with gtk_combo_box_entry_new_text().
</para>
<para>
If you have special needs that go beyond a simple entry (e.g. input validation),
it is possible to replace the child entry by a different widget using
gtk_container_remove() and gtk_container_add().
</para>
<refsect2 id="GtkComboBoxEntry-BUILDER-UI">
<title>GtkComboBoxEntry as GtkBuildable</title>
<para>
Beyond the &lt;attributes&gt; support that is shared by all
<link linkend="GtkCellLayout-BUILDER-UI">GtkCellLayout</link> implementation,
GtkComboBoxEntry makes the entry available in UI definitions as an internal
child with name "entry".
</para>
</refsect2>
<!-- ##### SECTION See_Also ##### -->
<para>
#GtkComboBox
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkComboBoxEntry ##### -->
<para>
</para>
<!-- ##### ARG GtkComboBoxEntry:text-column ##### -->
<para>
</para>
<!-- ##### FUNCTION gtk_combo_box_entry_new ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_entry_new_with_model ##### -->
<para>
</para>
@model:
@text_column:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_entry_new_text ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_combo_box_entry_set_text_column ##### -->
<para>
</para>
@entry_box:
@text_column:
<!-- ##### FUNCTION gtk_combo_box_entry_get_text_column ##### -->
<para>
</para>
@entry_box:
@Returns:

View File

@@ -58,7 +58,7 @@ of their children.
<para>
The size requisition phase of the widget layout process operates top-down.
It starts at a top-level widget, typically a #GtkWindow. The top-level widget
asks its child for its size requisition by calling gtk_widget_get_preferred_size().
asks its child for its size requisition by calling gtk_widget_size_request().
To determine its requisition, the child asks its own children for their
requisitions and so on. Finally, the top-level widget will get a requisition
back from its child.

View File

@@ -221,11 +221,12 @@ drops.
<!-- ##### FUNCTION gtk_drag_get_source_widget ##### -->
<para>
Determines the source widget for a drag.
</para>
@context:
@Returns:
@context: a (destination side) drag context.
@Returns: if the drag is occurring within a single application,
a pointer to the source widget. Otherwise, %NULL.
<!-- ##### FUNCTION gtk_drag_highlight ##### -->

View File

@@ -55,14 +55,11 @@ that drawing is implicitly clipped to the exposed area.
gboolean
expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
cairo_t *cr;
cr = gdk_cairo_create (event->window);
cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
cairo_paint (cr);
cairo_destroy (cr);
gdk_draw_arc (widget->window,
widget->style->fg_gc[gtk_widget_get_state (widget)],
TRUE,
0, 0, widget->allocation.width, widget->allocation.height,
0, 64 * 360);
return TRUE;
}

View File

@@ -0,0 +1,214 @@
<!-- ##### SECTION Title ##### -->
GtkEditable
<!-- ##### SECTION Short_Description ##### -->
Interface for text-editing widgets
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GtkEditable interface is an interface which should be implemented by
text editing widgets, such as #GtkEntry and #GtkText. It contains functions
for generically manipulating an editable widget, a large number of action
signals used for key bindings, and several signals that an application can
connect to to modify the behavior of a widget.
</para>
<para>
As an example of the latter usage, by connecting
the following handler to "insert_text", an application
can convert all entry into a widget into uppercase.
<example>
<title>Forcing entry to uppercase.</title>
<programlisting>
#include &lt;ctype.h&gt;
void
insert_text_handler (GtkEditable *editable,
const gchar *text,
gint length,
gint *position,
gpointer data)
{
int i;
gchar *result = g_utf8_strup (text, length);
g_signal_handlers_block_by_func (editable,
(gpointer) insert_text_handler, data);
gtk_editable_insert_text (editable, result, length, position);
g_signal_handlers_unblock_by_func (editable,
(gpointer) insert_text_handler, data);
g_signal_stop_emission_by_name (editable, "insert_text");
g_free (result);
}
</programlisting>
</example>
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkEditable ##### -->
<para>
The #GtkEditable structure is an opaque structure whose members
cannot be directly accessed.
</para>
<!-- ##### SIGNAL GtkEditable::changed ##### -->
<para>
</para>
@editable: the object which received the signal.
<!-- ##### SIGNAL GtkEditable::delete-text ##### -->
<para>
</para>
@editable:
@start_pos:
@end_pos:
<!-- ##### SIGNAL GtkEditable::insert-text ##### -->
<para>
</para>
@editable:
@new_text:
@new_text_length:
@position:
<!-- ##### FUNCTION gtk_editable_select_region ##### -->
<para>
</para>
@editable:
@start_pos:
@end_pos:
<!-- ##### FUNCTION gtk_editable_get_selection_bounds ##### -->
<para>
</para>
@editable:
@start_pos:
@end_pos:
@Returns:
<!-- ##### FUNCTION gtk_editable_insert_text ##### -->
<para>
</para>
@editable:
@new_text:
@new_text_length:
@position:
<!-- ##### FUNCTION gtk_editable_delete_text ##### -->
<para>
</para>
@editable:
@start_pos:
@end_pos:
<!-- ##### FUNCTION gtk_editable_get_chars ##### -->
<para>
</para>
@editable:
@start_pos:
@end_pos:
@Returns:
<!-- ##### FUNCTION gtk_editable_cut_clipboard ##### -->
<para>
</para>
@editable:
<!-- ##### FUNCTION gtk_editable_copy_clipboard ##### -->
<para>
</para>
@editable:
<!-- ##### FUNCTION gtk_editable_paste_clipboard ##### -->
<para>
</para>
@editable:
<!-- ##### FUNCTION gtk_editable_delete_selection ##### -->
<para>
</para>
@editable:
<!-- ##### FUNCTION gtk_editable_set_position ##### -->
<para>
</para>
@editable:
@position:
<!-- ##### FUNCTION gtk_editable_get_position ##### -->
<para>
</para>
@editable:
@Returns:
<!-- ##### FUNCTION gtk_editable_set_editable ##### -->
<para>
</para>
@editable:
@is_editable:
<!-- ##### FUNCTION gtk_editable_get_editable ##### -->
<para>
</para>
@editable:
@Returns:

View File

@@ -0,0 +1,171 @@
<!-- ##### SECTION Title ##### -->
GtkEntryBuffer
<!-- ##### SECTION Short_Description ##### -->
<!-- ##### SECTION Long_Description ##### -->
<para>
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkEntryBuffer ##### -->
<para>
</para>
<!-- ##### SIGNAL GtkEntryBuffer::deleted-text ##### -->
<para>
</para>
@entrybuffer: the object which received the signal.
@arg1:
@arg2:
<!-- ##### SIGNAL GtkEntryBuffer::inserted-text ##### -->
<para>
</para>
@entrybuffer: the object which received the signal.
@arg1:
@arg2:
@arg3:
<!-- ##### ARG GtkEntryBuffer:length ##### -->
<para>
</para>
<!-- ##### ARG GtkEntryBuffer:max-length ##### -->
<para>
</para>
<!-- ##### ARG GtkEntryBuffer:text ##### -->
<para>
</para>
<!-- ##### FUNCTION gtk_entry_buffer_new ##### -->
<para>
</para>
@initial_chars:
@n_initial_chars:
@Returns:
<!-- ##### FUNCTION gtk_entry_buffer_get_text ##### -->
<para>
</para>
@buffer:
@Returns:
<!-- ##### FUNCTION gtk_entry_buffer_set_text ##### -->
<para>
</para>
@buffer:
@chars:
@n_chars:
<!-- ##### FUNCTION gtk_entry_buffer_get_bytes ##### -->
<para>
</para>
@buffer:
@Returns:
<!-- ##### FUNCTION gtk_entry_buffer_get_length ##### -->
<para>
</para>
@buffer:
@Returns:
<!-- ##### FUNCTION gtk_entry_buffer_get_max_length ##### -->
<para>
</para>
@buffer:
@Returns:
<!-- ##### FUNCTION gtk_entry_buffer_set_max_length ##### -->
<para>
</para>
@buffer:
@max_length:
<!-- ##### FUNCTION gtk_entry_buffer_insert_text ##### -->
<para>
</para>
@buffer:
@position:
@chars:
@n_chars:
@Returns:
<!-- ##### FUNCTION gtk_entry_buffer_delete_text ##### -->
<para>
</para>
@buffer:
@position:
@n_chars:
@Returns:
<!-- ##### FUNCTION gtk_entry_buffer_emit_deleted_text ##### -->
<para>
</para>
@buffer:
@position:
@n_chars:
<!-- ##### FUNCTION gtk_entry_buffer_emit_inserted_text ##### -->
<para>
</para>
@buffer:
@position:
@chars:
@n_chars:

View File

@@ -115,11 +115,6 @@ a &lt;child&gt; type attribute.
</para>
<!-- ##### ARG GtkExpander:label-fill ##### -->
<para>
</para>
<!-- ##### ARG GtkExpander:label-widget ##### -->
<para>
@@ -276,21 +271,3 @@ a &lt;child&gt; type attribute.
@Returns:
<!-- ##### FUNCTION gtk_expander_set_label_fill ##### -->
<para>
</para>
@expander:
@label_fill:
<!-- ##### FUNCTION gtk_expander_get_label_fill ##### -->
<para>
</para>
@expander:
@Returns:

View File

@@ -22,6 +22,64 @@ typically use the features described here.
<!-- ##### SECTION Image ##### -->
<!-- ##### VARIABLE gtk_major_version ##### -->
<para>
The major version number of the GTK+ library. (e.g. in GTK+ version
1.2.5 this is 1.)
</para>
<para>
This variable is in the library, so represents the
GTK+ library you have linked against. Contrast with the
#GTK_MAJOR_VERSION macro, which represents the major version of the
GTK+ headers you have included.
</para>
<!-- ##### VARIABLE gtk_minor_version ##### -->
<para>
The minor version number of the GTK+ library.
(e.g. in GTK+ version 1.2.5 this is 2.)
</para>
<para>
This variable is in the library, so represents the
GTK+ library you have linked against. Contrast with the
#GTK_MINOR_VERSION macro, which represents the minor version of the
GTK+ headers you have included.
</para>
<!-- ##### VARIABLE gtk_micro_version ##### -->
<para>
The micro version number of the GTK+ library.
(e.g. in GTK+ version 1.2.5 this is 5.)
</para>
<para>
This variable is in the library, so represents the GTK+ library you
have linked against. Contrast with the #GTK_MICRO_VERSION macro, which
represents the micro version of the GTK+ headers you have included.
</para>
<!-- ##### VARIABLE gtk_binary_age ##### -->
<para>
This is the binary age passed to <application>libtool</application>. If
<application>libtool</application> means nothing to you, don't worry
about it. ;-)
</para>
<!-- ##### VARIABLE gtk_interface_age ##### -->
<para>
This is the interface age passed to <application>libtool</application>. If
<application>libtool</application> means nothing to you, don't worry
about it. ;-)
</para>
<!-- ##### FUNCTION gtk_check_version ##### -->
<para>
</para>

View File

@@ -37,7 +37,7 @@ The #GtkFileChooserButton supports the #GtkFileChooserAction<!--
<para>
The #GtkFileChooserButton will ellipsize the label,
and thus will thus request little horizontal space. To give the button
more space, you should call gtk_widget_get_preferred_size(),
more space, you should call gtk_widget_size_request(),
gtk_file_chooser_button_set_width_chars(), or pack the button in
such a way that other interface elements give space to the widget.
</para>

View File

@@ -0,0 +1,226 @@
<!-- ##### SECTION Title ##### -->
GtkFileSelection
<!-- ##### SECTION Short_Description ##### -->
Prompt the user for a file or directory name
<!-- ##### SECTION Long_Description ##### -->
<para>
#GtkFileSelection has been superseded by the newer #GtkFileChooser family
of widgets.
</para>
<para>
#GtkFileSelection should be used to retrieve file or directory names from
the user. It will create a new dialog window containing a directory list,
and a file list corresponding to the current working directory. The filesystem
can be navigated using the directory list or the drop-down history menu.
Alternatively, the TAB key can be used to navigate using filename
completion - common in text based editors such as emacs and jed.
</para>
<para>
File selection dialogs are created with a call to gtk_file_selection_new().
</para>
<para>
The default filename can be set using gtk_file_selection_set_filename() and the selected filename retrieved using gtk_file_selection_get_filename().
</para>
<para>
Use gtk_file_selection_complete() to display files and directories
that match a given pattern. This can be used for example, to show only
*.txt files, or only files beginning with gtk*.
</para>
<para>
Simple file operations; create directory, delete file, and rename file, are available from buttons at the top of the dialog. These can be hidden using gtk_file_selection_hide_fileop_buttons() and shown again using gtk_file_selection_show_fileop_buttons().
</para>
<para>
<example>
<title>Getting a filename from the user.</title>
<programlisting>
/* The file selection widget and the string to store the chosen filename */
void store_filename (GtkWidget *widget, gpointer user_data) {
GtkWidget *file_selector = GTK_WIDGET (user_data);
const gchar *selected_filename;
selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (file_selector));
g_print ("Selected filename: &percnt;s\n", selected_filename);
}
void create_file_selection (void) {
GtkWidget *file_selector;
/* Create the selector */
file_selector = gtk_file_selection_new ("Please select a file for editing.");
g_signal_connect (GTK_FILE_SELECTION (file_selector)->ok_button,
"clicked",
G_CALLBACK (store_filename),
file_selector);
/* Ensure that the dialog box is destroyed when the user clicks a button. */
g_signal_connect_swapped (GTK_FILE_SELECTION (file_selector)->ok_button,
"clicked",
G_CALLBACK (gtk_widget_destroy),
file_selector);
g_signal_connect_swapped (GTK_FILE_SELECTION (file_selector)->cancel_button,
"clicked",
G_CALLBACK (gtk_widget_destroy),
file_selector);
/* Display that dialog */
gtk_widget_show (file_selector);
}
</programlisting>
</example>
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
<variablelist>
<varlistentry>
<term>#GtkDialog</term>
<listitem><para>Add your own widgets into the #GtkFileSelection.</para></listitem>
</varlistentry>
</variablelist>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### STRUCT GtkFileSelection ##### -->
<para>
The #GtkFileSelection struct contains the following #GtkWidget fields:
</para>
@dir_list:
@file_list:
@selection_entry:
@selection_text:
@main_vbox:
@ok_button:
@cancel_button: the two main buttons that signals should be connected
to in order to perform an action when the user hits either OK or
Cancel.
@help_button:
@history_pulldown: the #GtkOptionMenu used to create the drop-down
directory history.
@history_menu:
@history_list:
@fileop_dialog: the dialog box used to display the #GtkFileSelection.
It can be customized by adding/removing widgets from it using the
standard #GtkDialog functions.
@fileop_entry:
@fileop_file:
@cmpl_state:
@fileop_c_dir:
@fileop_del_file:
@fileop_ren_file: the buttons that appear at the top of the file
selection dialog. These "operation buttons" can be hidden and
redisplayed with gtk_file_selection_hide_fileop_buttons() and
gtk_file_selection_show_fileop_buttons() respectively.
@button_area:
@action_area:
<!-- ##### ARG GtkFileSelection:filename ##### -->
<para>
</para>
<!-- ##### ARG GtkFileSelection:select-multiple ##### -->
<para>
</para>
<!-- ##### ARG GtkFileSelection:show-fileops ##### -->
<para>
</para>
<!-- ##### FUNCTION gtk_file_selection_new ##### -->
<para>
Creates a new file selection dialog box. By default it will contain a #GtkTreeView of the application's current working directory, and a file listing. Operation buttons that allow the user to create a directory, delete files and rename files, are also present.
</para>
@title: a message that will be placed in the file requestor's titlebar.
@Returns: the new file selection.
@Deprecated: Use gtk_file_chooser_dialog_new() instead
<!-- ##### FUNCTION gtk_file_selection_set_filename ##### -->
<para>
</para>
@filesel:
@filename:
<!-- ##### FUNCTION gtk_file_selection_get_filename ##### -->
<para>
</para>
@filesel:
@Returns:
<!-- ##### FUNCTION gtk_file_selection_complete ##### -->
<para>
Will attempt to match @pattern to a valid filenames or subdirectories in the current directory. If a match can be made, the matched filename will appear in the text entry field of the file selection dialog.
If a partial match can be made, the "Files" list will contain those
file names which have been partially matched, and the "Folders"
list those directories which have been partially matched.
</para>
@filesel: a #GtkFileSelection.
@pattern: a string of characters which may or may not match any filenames in the current directory.
<!-- ##### FUNCTION gtk_file_selection_show_fileop_buttons ##### -->
<para>
Shows the file operation buttons, if they have previously been hidden. The rest of the widgets in the dialog will be resized accordingly.
</para>
@filesel: a #GtkFileSelection.
<!-- ##### FUNCTION gtk_file_selection_hide_fileop_buttons ##### -->
<para>
Hides the file operation buttons that normally appear at the top of the dialog. Useful if you wish to create a custom file selector, based on #GtkFileSelection.
</para>
@filesel: a #GtkFileSelection.
<!-- ##### FUNCTION gtk_file_selection_get_selections ##### -->
<para>
</para>
@filesel:
@Returns:
<!-- ##### FUNCTION gtk_file_selection_set_select_multiple ##### -->
<para>
</para>
@filesel:
@select_multiple:
<!-- ##### FUNCTION gtk_file_selection_get_select_multiple ##### -->
<para>
</para>
@filesel:
@Returns:

View File

@@ -0,0 +1,51 @@
<!-- ##### SECTION Title ##### -->
Graphics Contexts
<!-- ##### SECTION Short_Description ##### -->
A shared pool of GdkGC objects
<!-- ##### SECTION Long_Description ##### -->
<para>
These functions provide access to a shared pool of #GdkGC objects.
When a new #GdkGC is needed, gtk_gc_get() is called with the required depth,
colormap and #GdkGCValues. If a #GdkGC with the required properties already
exists then that is returned. If not, a new #GdkGC is created.
When the #GdkGC is no longer needed, gtk_gc_release() should be called.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### FUNCTION gtk_gc_get ##### -->
<para>
Gets a #GdkGC with the given depth, colormap and #GdkGCValues.
If a #GdkGC with the given properties already exists then it is returned,
otherwise a new #GdkGC is created.
The returned #GdkGC should be released with gtk_gc_release() when it is no
longer needed.
</para>
@depth: the depth of the #GdkGC to create.
@colormap: the #GdkColormap (FIXME: I don't know why this is needed).
@values: a #GdkGCValues struct containing settings for the #GdkGC.
@values_mask: a set of flags indicating which of the fields in @values has
been set.
@Returns: a #GdkGC.
<!-- ##### FUNCTION gtk_gc_release ##### -->
<para>
Releases a #GdkGC allocated using gtk_gc_get().
</para>
@gc: a #GdkGC.

View File

@@ -0,0 +1,55 @@
<!-- ##### SECTION Title ##### -->
GtkIMContextSimple
<!-- ##### SECTION Short_Description ##### -->
An input method context supporting table-based input methods
<!-- ##### SECTION Long_Description ##### -->
<para>
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkIMContextSimple ##### -->
<para>
</para>
<!-- ##### FUNCTION gtk_im_context_simple_new ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_im_context_simple_add_table ##### -->
<para>
</para>
@context_simple:
@data:
@max_seq_len:
@n_seqs:
<!-- ##### MACRO GTK_MAX_COMPOSE_LEN ##### -->
<para>
The maximum length of sequences in compose tables.
</para>

View File

@@ -0,0 +1,64 @@
<!-- ##### SECTION Title ##### -->
GtkIMMulticontext
<!-- ##### SECTION Short_Description ##### -->
An input method context supporting multiple, loadable input methods
<!-- ##### SECTION Long_Description ##### -->
<para>
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkIMMulticontext ##### -->
<para>
</para>
<!-- ##### FUNCTION gtk_im_multicontext_new ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_im_multicontext_append_menuitems ##### -->
<para>
</para>
@context:
@menushell:
<!-- ##### FUNCTION gtk_im_multicontext_get_context_id ##### -->
<para>
</para>
@context:
@Returns:
<!-- ##### FUNCTION gtk_im_multicontext_set_context_id ##### -->
<para>
</para>
@context:
@context_id:

View File

@@ -0,0 +1,75 @@
<!-- ##### SECTION Title ##### -->
GtkItem
<!-- ##### SECTION Short_Description ##### -->
Abstract base class for GtkMenuItem, GtkListItem and GtkTreeItem
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GtkItem widget is an abstract base class for #GtkMenuItem, #GtkListItem
and #GtkTreeItem.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkItem ##### -->
<para>
The #GtkItem-struct struct contains private data only, and
should be accessed using the functions below.
</para>
<!-- ##### SIGNAL GtkItem::deselect ##### -->
<para>
Emitted when the item is deselected.
</para>
@item: the object which received the signal.
<!-- ##### SIGNAL GtkItem::select ##### -->
<para>
Emitted when the item is selected.
</para>
@item: the object which received the signal.
<!-- ##### SIGNAL GtkItem::toggle ##### -->
<para>
Emitted when the item is toggled.
</para>
@item: the object which received the signal.
<!-- ##### FUNCTION gtk_item_select ##### -->
<para>
Emits the "select" signal on the given item.
</para>
@item: a #GtkItem.
<!-- ##### FUNCTION gtk_item_deselect ##### -->
<para>
Emits the "deselect" signal on the given item.
</para>
@item: a #GtkItem.
<!-- ##### FUNCTION gtk_item_toggle ##### -->
<para>
Emits the "toggle" signal on the given item.
</para>
@item: a #GtkItem.

View File

@@ -0,0 +1,139 @@
<!-- ##### SECTION Title ##### -->
GtkLinkButton
<!-- ##### SECTION Short_Description ##### -->
Create buttons bound to a URL
<!-- ##### SECTION Long_Description ##### -->
<para>
A #GtkLinkButton is a #GtkButton with a hyperlink, similar to the one
used by web browsers, which triggers an action when clicked. It is useful
to show quick links to resources.
</para>
<para>
A link button is created by calling either gtk_link_button_new() or
gtk_link_button_new_with_label(). If using the former, the URI you pass
to the constructor is used as a label for the widget.
</para>
<para>
The URI bound to a #GtkLinkButton can be set specifically using
gtk_link_button_set_uri(), and retrieved using gtk_link_button_get_uri().
</para>
<para>
#GtkLinkButton offers a global hook, which is called when the used clicks
on it: see gtk_link_button_set_uri_hook().
</para>
<para>
#GtkLinkButton was added in GTK+ 2.10.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
#GtkButton
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkLinkButton ##### -->
<para>
The #GtkLinkButton struct contains private data only, and should be
manipulated using the functions below.
</para>
<!-- ##### ARG GtkLinkButton:uri ##### -->
<para>
</para>
<!-- ##### ARG GtkLinkButton:visited ##### -->
<para>
</para>
<!-- ##### FUNCTION gtk_link_button_new ##### -->
<para>
</para>
@uri:
@Returns:
<!-- ##### FUNCTION gtk_link_button_new_with_label ##### -->
<para>
</para>
@uri:
@label:
@Returns:
<!-- ##### FUNCTION gtk_link_button_get_uri ##### -->
<para>
</para>
@link_button:
@Returns:
<!-- ##### FUNCTION gtk_link_button_set_uri ##### -->
<para>
</para>
@link_button:
@uri:
<!-- ##### USER_FUNCTION GtkLinkButtonUriFunc ##### -->
<para>
The type of a function which is called when the #GtkLinkButton is
clicked.
</para>
@button: the #GtkLinkButton which was clicked
@link_: the URI to which the clicked #GtkLinkButton points
@user_data: user data that was passed when the function was registered
with gtk_link_button_set_uri_hook()
<!-- ##### FUNCTION gtk_link_button_set_uri_hook ##### -->
<para>
</para>
@func:
@data:
@destroy:
@Returns:
<!-- ##### FUNCTION gtk_link_button_get_visited ##### -->
<para>
</para>
@link_button:
@Returns:
<!-- ##### FUNCTION gtk_link_button_set_visited ##### -->
<para>
</para>
@link_button:
@visited:

View File

@@ -392,11 +392,11 @@ widget and this function does nothing.
<!-- ##### FUNCTION gtk_grab_get_current ##### -->
<para>
Queries the current grab of the default window group.
</para>
@void:
@Returns:
@void:
@Returns: The widget which currently has the grab or %NULL if no grab is active.
<!-- ##### FUNCTION gtk_grab_remove ##### -->

View File

@@ -19,11 +19,6 @@ positioned within its allocated area. Note that if the widget is added to
a container in such a way that it expands automatically to fill its
allocated area, the alignment settings will not alter the widgets position.
</para>
<para>
Note that the desired effect can in most cases be achieved by using the
#GtkWidget:halign, #GtkWidget:valign and #GtkWidget:margin properties
on the child widget.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>

View File

@@ -0,0 +1,697 @@
<!-- ##### SECTION Title ##### -->
GtkNotebook
<!-- ##### SECTION Short_Description ##### -->
A tabbed notebook container
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GtkNotebook widget is a #GtkContainer whose children are pages that
can be switched between using tab labels along one edge.
</para>
<para>
There are many configuration options for #GtkNotebook. Among other
things, you can choose on which edge the tabs appear
(see gtk_notebook_set_tab_pos()), whether, if there are too many
tabs to fit the notebook should be made bigger or scrolling
arrows added (see gtk_notebook_set_scrollable), and whether there
will be a popup menu allowing the users to switch pages.
(see gtk_notebook_popup_enable(), gtk_notebook_popup_disable())
</para>
<refsect2 id="GtkNotebook-BUILDER-UI">
<title>GtkNotebook as GtkBuildable</title>
<para>
The GtkNoteboopk implementation of the GtkBuildable interface
supports placing children into tabs by specifying "tab" as the
"type" attribute of a &lt;child&gt; element. Note that the content
of the tab must be created before the tab can be filled.
A tab child can be specified without specifying a &lt;child&gt;
type attribute.
</para>
<para>
To add a child widget in the notebooks action area, specify
"action-start" or "action-end" as the "type" attribute of the &lt;child&gt;
element.
</para>
<example>
<title>A UI definition fragment with GtkNotebook</title>
<programlisting><![CDATA[
<object class="GtkNotebook">
<child>
<object class="GtkLabel" id="notebook-content">
<property name="label">Content</property>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="notebook-tab">
<property name="label">Tab</property>
</object>
</child>
</object>
]]></programlisting>
</example>
</refsect2>
<!-- ##### SECTION See_Also ##### -->
<para>
<variablelist>
<varlistentry>
<term>#GtkContainer</term>
<listitem><para>For functions that apply to every #GtkContainer</para></listitem>
</varlistentry>
</variablelist>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkNotebook ##### -->
<para>
</para>
<!-- ##### SIGNAL GtkNotebook::change-current-page ##### -->
<para>
</para>
@notebook: the object which received the signal.
@arg1:
@Returns:
<!-- ##### SIGNAL GtkNotebook::create-window ##### -->
<para>
</para>
@notebook: the object which received the signal.
@widget:
@arg1:
@arg2:
@Returns:
<!-- ##### SIGNAL GtkNotebook::focus-tab ##### -->
<para>
</para>
@notebook: the object which received the signal.
@arg1:
@Returns:
<!-- ##### SIGNAL GtkNotebook::move-focus-out ##### -->
<para>
</para>
@notebook: the object which received the signal.
@arg1:
<!-- ##### SIGNAL GtkNotebook::page-added ##### -->
<para>
</para>
@notebook: the object which received the signal.
@widget:
@arg1:
<!-- ##### SIGNAL GtkNotebook::page-removed ##### -->
<para>
</para>
@notebook: the object which received the signal.
@widget:
@arg1:
<!-- ##### SIGNAL GtkNotebook::page-reordered ##### -->
<para>
</para>
@notebook: the object which received the signal.
@widget:
@arg1:
<!-- ##### SIGNAL GtkNotebook::reorder-tab ##### -->
<para>
</para>
@notebook: the object which received the signal.
@arg1:
@Param3:
@Returns:
<!-- ##### SIGNAL GtkNotebook::select-page ##### -->
<para>
</para>
@notebook: the object which received the signal.
@arg1:
@Returns:
<!-- ##### SIGNAL GtkNotebook::switch-page ##### -->
<para>
Emitted when the user or a function changes the current page.
</para>
@notebook: the object which received the signal.
@page: the new current page
@page_num: the index of the page
<!-- ##### ARG GtkNotebook:enable-popup ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:group ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:page ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:scrollable ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:show-border ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:show-tabs ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:tab-pos ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:detachable ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:menu-label ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:position ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:reorderable ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:tab-expand ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:tab-fill ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:tab-label ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:tab-pack ##### -->
<para>
Deprecated: 2.20: The tab packing functionality of children should not
be used anymore and support will be removed in the future.
</para>
<!-- ##### ARG GtkNotebook:arrow-spacing ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:has-backward-stepper ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:has-forward-stepper ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:has-secondary-backward-stepper ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:has-secondary-forward-stepper ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:tab-curvature ##### -->
<para>
</para>
<!-- ##### ARG GtkNotebook:tab-overlap ##### -->
<para>
</para>
<!-- ##### STRUCT GtkNotebookPage ##### -->
<para>
The #GtkNotebookPage is an opaque implementation detail of #GtkNotebook.
</para>
<!-- ##### FUNCTION gtk_notebook_new ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_notebook_append_page ##### -->
<para>
</para>
@notebook:
@child:
@tab_label:
@Returns:
<!-- ##### FUNCTION gtk_notebook_append_page_menu ##### -->
<para>
</para>
@notebook:
@child:
@tab_label:
@menu_label:
@Returns:
<!-- ##### FUNCTION gtk_notebook_prepend_page ##### -->
<para>
</para>
@notebook:
@child: the
@tab_label:
@Returns:
<!-- ##### FUNCTION gtk_notebook_prepend_page_menu ##### -->
<para>
</para>
@notebook:
@child:
@tab_label:
@menu_label:
@Returns:
<!-- ##### FUNCTION gtk_notebook_insert_page ##### -->
<para>
</para>
@notebook:
@child:
@tab_label:
@position:
@Returns:
<!-- ##### FUNCTION gtk_notebook_insert_page_menu ##### -->
<para>
</para>
@notebook:
@child:
@tab_label:
@menu_label:
@position:
@Returns:
<!-- ##### FUNCTION gtk_notebook_remove_page ##### -->
<para>
</para>
@notebook:
@page_num:
<!-- ##### FUNCTION gtk_notebook_page_num ##### -->
<para>
</para>
@notebook:
@child:
@Returns:
<!-- ##### FUNCTION gtk_notebook_next_page ##### -->
<para>
</para>
@notebook:
<!-- ##### FUNCTION gtk_notebook_prev_page ##### -->
<para>
</para>
@notebook:
<!-- ##### FUNCTION gtk_notebook_reorder_child ##### -->
<para>
</para>
@notebook:
@child:
@position:
<!-- ##### FUNCTION gtk_notebook_set_tab_pos ##### -->
<para>
</para>
@notebook: the notebook widget
@pos: the position
<!-- ##### FUNCTION gtk_notebook_set_show_tabs ##### -->
<para>
</para>
@notebook:
@show_tabs:
<!-- ##### FUNCTION gtk_notebook_set_show_border ##### -->
<para>
</para>
@notebook:
@show_border:
<!-- ##### FUNCTION gtk_notebook_set_scrollable ##### -->
<para>
</para>
@notebook:
@scrollable:
<!-- ##### FUNCTION gtk_notebook_popup_enable ##### -->
<para>
</para>
@notebook:
<!-- ##### FUNCTION gtk_notebook_popup_disable ##### -->
<para>
</para>
@notebook:
<!-- ##### FUNCTION gtk_notebook_get_current_page ##### -->
<para>
</para>
@notebook: the notebook widget
@Returns: the page number
<!-- ##### FUNCTION gtk_notebook_get_menu_label ##### -->
<para>
</para>
@notebook:
@child:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_nth_page ##### -->
<para>
</para>
@notebook:
@page_num:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_n_pages ##### -->
<para>
</para>
@notebook:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_tab_label ##### -->
<para>
</para>
@notebook:
@child:
@Returns:
<!-- ##### FUNCTION gtk_notebook_set_menu_label ##### -->
<para>
</para>
@notebook:
@child:
@menu_label:
<!-- ##### FUNCTION gtk_notebook_set_menu_label_text ##### -->
<para>
</para>
@notebook:
@child:
@menu_text:
<!-- ##### FUNCTION gtk_notebook_set_tab_label ##### -->
<para>
</para>
@notebook:
@child:
@tab_label:
<!-- ##### FUNCTION gtk_notebook_set_tab_label_text ##### -->
<para>
</para>
@notebook:
@child:
@tab_text:
<!-- ##### FUNCTION gtk_notebook_set_tab_reorderable ##### -->
<para>
</para>
@notebook:
@child:
@reorderable:
<!-- ##### FUNCTION gtk_notebook_set_tab_detachable ##### -->
<para>
</para>
@notebook:
@child:
@detachable:
<!-- ##### FUNCTION gtk_notebook_get_menu_label_text ##### -->
<para>
</para>
@notebook:
@child:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_scrollable ##### -->
<para>
</para>
@notebook:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_show_border ##### -->
<para>
</para>
@notebook:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_show_tabs ##### -->
<para>
</para>
@notebook:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_tab_label_text ##### -->
<para>
</para>
@notebook:
@child:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_tab_pos ##### -->
<para>
</para>
@notebook:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_tab_reorderable ##### -->
<para>
</para>
@notebook:
@child:
@Returns:
<!-- ##### FUNCTION gtk_notebook_get_tab_detachable ##### -->
<para>
</para>
@notebook:
@child:
@Returns:
<!-- ##### FUNCTION gtk_notebook_set_current_page ##### -->
<para>
</para>
@notebook:
@page_num:
<!-- ##### FUNCTION gtk_notebook_set_group ##### -->
<para>
</para>
@notebook:
@group:
<!-- ##### FUNCTION gtk_notebook_get_group ##### -->
<para>
</para>
@notebook:
@Returns:
<!-- ##### FUNCTION gtk_notebook_set_action_widget ##### -->
<para>
</para>
@notebook:
@widget:
@pack_type:
<!-- ##### FUNCTION gtk_notebook_get_action_widget ##### -->
<para>
</para>
@notebook:
@pack_type:
@Returns:
<!-- ##### USER_FUNCTION GtkNotebookWindowCreationFunc ##### -->
<para>
A function used by GtkNotebook when a detachable tab is dropped
in the root window, it's used to create a window containing a notebook
where the tab will be attached. This function will also be responsible
of moving/resizing the window and adding the necessary properties to
the notebook (i.e.: group-id).
If the function returns %NULL, the drag will be cancelled.
</para>
@source: The source #GtkNotebook of the drag operation
@page: the child #GtkWidget affected
@x: the X coordinate where the drop happens
@y: the Y coordinate where the drop happens
@data: user data
@Returns: The created #GtkNotebook where the tab will be attached, or NULL to cancel the drag
<!-- ##### FUNCTION gtk_notebook_set_window_creation_hook ##### -->
<para>
</para>
@func:
@data:
@destroy:

View File

@@ -0,0 +1,308 @@
<!-- ##### SECTION Title ##### -->
GtkPaperSize
<!-- ##### SECTION Short_Description ##### -->
Support for named paper sizes
<!-- ##### SECTION Long_Description ##### -->
<para>
GtkPaperSize handles paper sizes. It uses the standard called
"PWG 5101.1-2002 PWG: Standard for Media Standardized Names"
<!-- FIXME link here -->
to name the paper sizes (and to get the data for the page sizes).
In addition to standard paper sizes, GtkPaperSize allows to
construct custom paper sizes with arbitrary dimensions.
</para>
<para>
The #GtkPaperSize object stores not only the dimensions (width
and height) of a paper size and its name, it also provides
default <link linkend="print-margins">print margins</link>.
</para>
<para>
Printing support has been added in GTK+ 2.10.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
#GtkPageSetup
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkPaperSize ##### -->
<para>
</para>
<!-- ##### ENUM GtkUnit ##### -->
<para>
</para>
@GTK_UNIT_PIXEL:
@GTK_UNIT_POINTS:
@GTK_UNIT_INCH:
@GTK_UNIT_MM:
<!-- ##### MACRO GTK_PAPER_NAME_A3 ##### -->
<para>
Name for the A4 paper size.
</para>
<!-- ##### MACRO GTK_PAPER_NAME_A4 ##### -->
<para>
Name for the A4 paper size.
</para>
<!-- ##### MACRO GTK_PAPER_NAME_A5 ##### -->
<para>
Name for the A5 paper size.
</para>
<!-- ##### MACRO GTK_PAPER_NAME_B5 ##### -->
<para>
Name for the B5 paper size.
</para>
<!-- ##### MACRO GTK_PAPER_NAME_LETTER ##### -->
<para>
Name for the Letter paper size.
</para>
<!-- ##### MACRO GTK_PAPER_NAME_EXECUTIVE ##### -->
<para>
Name for the Executive paper size.
</para>
<!-- ##### MACRO GTK_PAPER_NAME_LEGAL ##### -->
<para>
Name for the Legal paper size.
</para>
<!-- ##### FUNCTION gtk_paper_size_new ##### -->
<para>
</para>
@name:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_new_from_ppd ##### -->
<para>
</para>
@ppd_name:
@ppd_display_name:
@width:
@height:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_new_custom ##### -->
<para>
</para>
@name:
@display_name:
@width:
@height:
@unit:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_copy ##### -->
<para>
</para>
@other:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_free ##### -->
<para>
</para>
@size:
<!-- ##### FUNCTION gtk_paper_size_is_equal ##### -->
<para>
</para>
@size1:
@size2:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_paper_sizes ##### -->
<para>
</para>
@include_custom:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_name ##### -->
<para>
</para>
@size:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_display_name ##### -->
<para>
</para>
@size:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_ppd_name ##### -->
<para>
</para>
@size:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_width ##### -->
<para>
</para>
@size:
@unit:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_height ##### -->
<para>
</para>
@size:
@unit:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_is_custom ##### -->
<para>
</para>
@size:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_set_size ##### -->
<para>
</para>
@size:
@width:
@height:
@unit:
<!-- ##### FUNCTION gtk_paper_size_get_default_top_margin ##### -->
<para>
</para>
@size:
@unit:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_default_bottom_margin ##### -->
<para>
</para>
@size:
@unit:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_default_left_margin ##### -->
<para>
</para>
@size:
@unit:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_default_right_margin ##### -->
<para>
</para>
@size:
@unit:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_get_default ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_new_from_key_file ##### -->
<para>
</para>
@key_file:
@group_name:
@error:
@Returns:
<!-- ##### FUNCTION gtk_paper_size_to_key_file ##### -->
<para>
</para>
@size:
@key_file:
@group_name:

View File

@@ -140,10 +140,11 @@ Sets the group of a radio menu item, or changes it.
<!-- ##### FUNCTION gtk_radio_menu_item_get_group ##### -->
<para>
Returns the group to which the radio menu item belongs, as a #GList of
#GtkRadioMenuItem. The list belongs to GTK+ and should not be freed.
</para>
@radio_menu_item:
@Returns:
@radio_menu_item: a #GtkRadioMenuItem.
@Returns: the group of @radio_menu_item.

View File

@@ -0,0 +1,482 @@
<!-- ##### SECTION Title ##### -->
GtkRecentManager
<!-- ##### SECTION Short_Description ##### -->
Managing Recently Used Files
<!-- ##### SECTION Long_Description ##### -->
<para>
#GtkRecentManager provides a facility for adding, removing and
looking up recently used files. Each recently used file is
identified by its URI, and has meta-data associated to it, like
the names and command lines of the applications that have
registered it, the number of time each application has registered
the same file, the mime type of the file and whether the file
should be displayed only by the applications that have
registered it.
</para>
<para>
The #GtkRecentManager acts like a database of all the recently
used files. You can create new #GtkRecentManager objects, but
it is more efficient to use the standard recent manager for
the #GdkScreen so that informations about the recently used
files is shared with other people using them. In case the
default screen is being used, adding a new recently used
file is as simple as:
</para>
<informalexample>
<programlisting>
GtkRecentManager *manager;
manager = gtk_recent_manager_get_default ();
gtk_recent_manager_add_item (manager, file_uri);
</programlisting>
</informalexample>
While looking up a recently used file is as simple as:
<informalexample>
<programlisting>
GtkRecentManager *manager;
GtkRecentInfo *info;
GError *error = NULL;
manager = gtk_recent_manager_get_default ();
info = gtk_recent_manager_lookup_item (manager, file_uri, &amp;error);
if (error)
{
g_warning ("Could not find the file: &percnt;s", error-&gt;message);
g_error_free (error);
}
else
{
/* Use the info object */
gtk_recent_info_unref (info);
}
</programlisting>
</informalexample>
<para>
Recently used files are supported since GTK+ 2.10.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkRecentManager ##### -->
<para>
Acts as a database of information about the list of recently
used files. Normally, you retrieve the recent manager for a
particular screen using gtk_recent_manager_get_for_screen()
and it will contain information about current recent manager
for that screen.</para>
<!-- ##### SIGNAL GtkRecentManager::changed ##### -->
<para>
</para>
@recentmanager: the object which received the signal.
<!-- ##### ARG GtkRecentManager:filename ##### -->
<para>
</para>
<!-- ##### ARG GtkRecentManager:limit ##### -->
<para>
</para>
<!-- ##### ARG GtkRecentManager:size ##### -->
<para>
</para>
<!-- ##### STRUCT GtkRecentInfo ##### -->
<para>
Contains informations found when looking up an entry of the
recently used files list.
</para>
<!-- ##### STRUCT GtkRecentData ##### -->
<para>
</para>
@display_name:
@description:
@mime_type:
@app_name:
@app_exec:
@groups:
@is_private:
<!-- ##### MACRO GTK_RECENT_MANAGER_ERROR ##### -->
<para>
The #GQuark used for #GtkRecentManagerError errors.
</para>
<!-- ##### ENUM GtkRecentManagerError ##### -->
<para>
</para>
@GTK_RECENT_MANAGER_ERROR_NOT_FOUND:
@GTK_RECENT_MANAGER_ERROR_INVALID_URI:
@GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING:
@GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED:
@GTK_RECENT_MANAGER_ERROR_READ:
@GTK_RECENT_MANAGER_ERROR_WRITE:
@GTK_RECENT_MANAGER_ERROR_UNKNOWN:
<!-- ##### FUNCTION gtk_recent_manager_new ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_get_default ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_add_item ##### -->
<para>
</para>
@manager:
@uri:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_add_full ##### -->
<para>
</para>
@manager:
@uri:
@recent_data:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_remove_item ##### -->
<para>
</para>
@manager:
@uri:
@error:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_lookup_item ##### -->
<para>
</para>
@manager:
@uri:
@error:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_has_item ##### -->
<para>
</para>
@manager:
@uri:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_move_item ##### -->
<para>
</para>
@manager:
@uri:
@new_uri:
@error:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_get_limit ##### -->
<para>
</para>
@manager:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_set_limit ##### -->
<para>
</para>
@manager:
@limit:
<!-- ##### FUNCTION gtk_recent_manager_get_items ##### -->
<para>
</para>
@manager:
@Returns:
<!-- ##### FUNCTION gtk_recent_manager_purge_items ##### -->
<para>
</para>
@manager:
@error:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_ref ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_unref ##### -->
<para>
</para>
@info:
<!-- ##### FUNCTION gtk_recent_info_get_uri ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_display_name ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_description ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_mime_type ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_added ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_modified ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_visited ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_private_hint ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_application_info ##### -->
<para>
</para>
@info:
@app_name:
@app_exec:
@count:
@time_:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_applications ##### -->
<para>
</para>
@info:
@length:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_last_application ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_groups ##### -->
<para>
</para>
@info:
@length:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_has_group ##### -->
<para>
</para>
@info:
@group_name:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_has_application ##### -->
<para>
</para>
@info:
@app_name:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_icon ##### -->
<para>
</para>
@info:
@size:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_short_name ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_uri_display ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_get_age ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_is_local ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_exists ##### -->
<para>
</para>
@info:
@Returns:
<!-- ##### FUNCTION gtk_recent_info_match ##### -->
<para>
</para>
@info_a:
@info_b:
@Returns:

View File

@@ -0,0 +1,193 @@
<!-- ##### SECTION Title ##### -->
GtkScale
<!-- ##### SECTION Short_Description ##### -->
Base class for GtkHScale and GtkVScale
<!-- ##### SECTION Long_Description ##### -->
<para>
A #GtkScale is a slider control used to select a numeric value.
To use it, you'll probably want to investigate the methods on
its base class, #GtkRange, in addition to the methods for #GtkScale itself.
To set the value of a scale, you would normally use gtk_range_set_value().
To detect changes to the value, you would normally use the "value_changed"
signal.
</para>
<refsect2 id="GtkScale-BUILDER-UI"><title>GtkScale as GtkBuildable</title>
<para>
GtkScale supports a custom &lt;marks&gt; element, which
can contain multiple &lt;mark&gt; elements. The "value" and "position"
attributes have the same meaning as gtk_scale_add_mark() parameters of the
same name. If the element is not empty, its content is taken as the markup
to show at the mark. It can be translated with the usual "translatable and
"context" attributes.
</para>
</refsect2>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkScale ##### -->
<para>
The fields of the #GtkScale-struct struct should only be accessed via
the accessor functions.
</para>
<!-- ##### SIGNAL GtkScale::format-value ##### -->
<para>
</para>
@scale:
@value:
@Returns:
<!-- ##### ARG GtkScale:digits ##### -->
<para>
</para>
<!-- ##### ARG GtkScale:draw-value ##### -->
<para>
</para>
<!-- ##### ARG GtkScale:value-pos ##### -->
<para>
</para>
<!-- ##### ARG GtkScale:slider-length ##### -->
<para>
</para>
<!-- ##### ARG GtkScale:value-spacing ##### -->
<para>
</para>
<!-- ##### FUNCTION gtk_scale_new ##### -->
<para>
</para>
@orientation:
@adjustment:
@Returns:
<!-- ##### FUNCTION gtk_scale_new_with_range ##### -->
<para>
</para>
@orientation:
@min:
@max:
@step:
@Returns:
<!-- ##### FUNCTION gtk_scale_set_digits ##### -->
<para>
</para>
@scale:
@digits:
<!-- ##### FUNCTION gtk_scale_set_draw_value ##### -->
<para>
</para>
@scale:
@draw_value:
<!-- ##### FUNCTION gtk_scale_set_value_pos ##### -->
<para>
</para>
@scale:
@pos:
<!-- ##### FUNCTION gtk_scale_get_digits ##### -->
<para>
</para>
@scale:
@Returns:
<!-- ##### FUNCTION gtk_scale_get_draw_value ##### -->
<para>
</para>
@scale:
@Returns:
<!-- ##### FUNCTION gtk_scale_get_value_pos ##### -->
<para>
</para>
@scale:
@Returns:
<!-- ##### FUNCTION gtk_scale_get_layout ##### -->
<para>
</para>
@scale:
@Returns:
<!-- ##### FUNCTION gtk_scale_get_layout_offsets ##### -->
<para>
</para>
@scale:
@x:
@y:
<!-- ##### FUNCTION gtk_scale_add_mark ##### -->
<para>
</para>
@scale:
@value:
@position:
@markup:
<!-- ##### FUNCTION gtk_scale_clear_marks ##### -->
<para>
</para>
@scale:

View File

@@ -44,21 +44,6 @@ vertical size from the vertical requisition of all widgets that can be
reached from the widget by a chain of size groups of type
%GTK_SIZE_GROUP_VERTICAL or %GTK_SIZE_GROUP_BOTH.
</para>
<para>
Note that only non-contextual sizes of every widget are ever consulted
by size groups (since size groups have no knowledge of what size a widget
will be allocated in one dimension, it cannot derive how much height
a widget will receive for a given width). When grouping widgets that
trade height for width in mode %GTK_SIZE_GROUP_VERTICAL or %GTK_SIZE_GROUP_BOTH:
the height for the minimum width will be the requested height for all
widgets in the group. The same is of course true when horizontally grouping
width for height widgets.
</para>
<para>
Widgets that trade height-for-width should set a reasonably large minimum width
by way of GtkLabel:width-chars for instance. Widgets with static sizes as well
as widgets that grow (such as ellipsizing text) need no such considerations.
</para>
<refsect2 id="GtkSizeGroup-BUILDER-UI">
<title>GtkSizeGroup as GtkBuildable</title>
<para>

View File

@@ -34,8 +34,8 @@ void create_integer_spin_button (void) {
GtkWidget *window, *spinner;
GtkAdjustment *spinner_adj;
spinner_adj = gtk_adjustment_new (50.0, 0.0, 100.0, 1.0, 5.0, 5.0);
spinner_adj = (GtkAdjustment *) gtk_adjustment_new (50.0, 0.0, 100.0, 1.0, 5.0, 5.0);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width (GTK_CONTAINER (window), 5);
@@ -69,8 +69,8 @@ void create_floating_spin_button (void) {
GtkWidget *window, *spinner;
GtkAdjustment *spinner_adj;
spinner_adj = gtk_adjustment_new (2.500, 0.0, 5.0, 0.001, 0.1, 0.1);
spinner_adj = (GtkAdjustment *) gtk_adjustment_new (2.500, 0.0, 5.0, 0.001, 0.1, 0.1);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width (GTK_CONTAINER (window), 5);

View File

@@ -84,6 +84,16 @@ It is working (with minor issues) since 2.8.
</para>
<!-- ##### ARG GtkTextTag:background-stipple ##### -->
<para>
</para>
<!-- ##### ARG GtkTextTag:background-stipple-set ##### -->
<para>
</para>
<!-- ##### ARG GtkTextTag:direction ##### -->
<para>
@@ -134,6 +144,16 @@ It is working (with minor issues) since 2.8.
</para>
<!-- ##### ARG GtkTextTag:foreground-stipple ##### -->
<para>
</para>
<!-- ##### ARG GtkTextTag:foreground-stipple-set ##### -->
<para>
</para>
<!-- ##### ARG GtkTextTag:indent ##### -->
<para>
@@ -398,6 +418,7 @@ modified directly.
@invisible:
@bg_full_height:
@editable:
@realized:
<!-- ##### FUNCTION gtk_text_tag_new ##### -->
<para>
@@ -445,6 +466,8 @@ modified directly.
@bg_color:
@fg_color:
@bg_stipple:
@fg_stipple:
@rise:
@underline:
@strikethrough:

View File

@@ -0,0 +1,125 @@
<!-- ##### SECTION Title ##### -->
GtkTextTagTable
<!-- ##### SECTION Short_Description ##### -->
Collection of tags that can be used together
<!-- ##### 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>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkTextTagTable ##### -->
<para>
</para>
<!-- ##### SIGNAL GtkTextTagTable::tag-added ##### -->
<para>
</para>
@texttagtable: the object which received the signal.
@arg1:
<!-- ##### SIGNAL GtkTextTagTable::tag-changed ##### -->
<para>
</para>
@texttagtable: the object which received the signal.
@arg1:
@arg2:
<!-- ##### SIGNAL GtkTextTagTable::tag-removed ##### -->
<para>
</para>
@texttagtable: the object which received the signal.
@arg1:
<!-- ##### USER_FUNCTION GtkTextTagTableForeach ##### -->
<para>
</para>
@tag:
@data:
<!-- ##### FUNCTION gtk_text_tag_table_new ##### -->
<para>
</para>
@void:
@Returns:
<!-- ##### FUNCTION gtk_text_tag_table_add ##### -->
<para>
</para>
@table:
@tag:
<!-- ##### FUNCTION gtk_text_tag_table_remove ##### -->
<para>
</para>
@table:
@tag:
<!-- ##### FUNCTION gtk_text_tag_table_lookup ##### -->
<para>
</para>
@table:
@name:
@Returns:
<!-- ##### FUNCTION gtk_text_tag_table_foreach ##### -->
<para>
</para>
@table:
@func:
@data:
<!-- ##### FUNCTION gtk_text_tag_table_get_size ##### -->
<para>
</para>
@table:
@Returns:

View File

@@ -0,0 +1,305 @@
<!-- ##### SECTION Title ##### -->
GtkToolbar
<!-- ##### SECTION Short_Description ##### -->
Create bars of buttons and other widgets
<!-- ##### SECTION Long_Description ##### -->
<para>
A toolbar is created with a call to gtk_toolbar_new().
</para>
<para>
A toolbar can contain instances of a subclass of #GtkToolItem. To add
a #GtkToolItem to the a toolbar, use gtk_toolbar_insert(). To remove
an item from the toolbar use gtk_container_remove(). To add a button
to the toolbar, add an instance of #GtkToolButton.
</para>
<para>
Toolbar items can be visually grouped by adding instances of
#GtkSeparatorToolItem to the toolbar. If a #GtkSeparatorToolItem has
the "expand" property set to #TRUE and the "draw" property set to
#FALSE the effect is to force all following items to the end of the
toolbar.
</para>
<para>
Creating a context menu for the toolbar can be done by connecting to
the #GtkToolbar::popup-context-menu signal.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
<variablelist>
<varlistentry>
<term>#GtkToolItem</term>
<listitem><para>Base class of widgets that can be added to a toolbar.</para></listitem>
</varlistentry>
</variablelist>
</para>
<!-- ##### SECTION Stability_Level ##### -->
<!-- ##### SECTION Image ##### -->
<!-- ##### STRUCT GtkToolbar ##### -->
<para>
The #GtkToolbar struct only contains private data and should only be
accessed through the function described below.
</para>
<!-- ##### SIGNAL GtkToolbar::focus-home-or-end ##### -->
<para>
</para>
@toolbar: the object which received the signal.
@arg1:
@Returns:
<!-- ##### SIGNAL GtkToolbar::orientation-changed ##### -->
<para>
</para>
@toolbar: the object which received the signal.
@orientation: the new #GtkOrientation of the toolbar.
<!-- ##### SIGNAL GtkToolbar::popup-context-menu ##### -->
<para>
</para>
@toolbar: the object which received the signal.
@Returns:
@Returns:
@Returns:
@Returns:
<!-- ##### SIGNAL GtkToolbar::style-changed ##### -->
<para>
</para>
@toolbar:
@style:
<!-- ##### ARG GtkToolbar:icon-size ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:icon-size-set ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:show-arrow ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:toolbar-style ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:expand ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:homogeneous ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:button-relief ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:internal-padding ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:max-child-expand ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:shadow-type ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:space-size ##### -->
<para>
</para>
<!-- ##### ARG GtkToolbar:space-style ##### -->
<para>
</para>
<!-- ##### ENUM GtkToolbarSpaceStyle ##### -->
<para>
</para>
@GTK_TOOLBAR_SPACE_EMPTY:
@GTK_TOOLBAR_SPACE_LINE:
<!-- ##### FUNCTION gtk_toolbar_new ##### -->
<para>
</para>
@void:
@Returns: the newly-created toolbar.
<!-- ##### FUNCTION gtk_toolbar_insert ##### -->
<para>
</para>
@toolbar:
@item:
@pos:
<!-- ##### FUNCTION gtk_toolbar_get_item_index ##### -->
<para>
</para>
@toolbar:
@item:
@Returns:
<!-- ##### FUNCTION gtk_toolbar_get_n_items ##### -->
<para>
</para>
@toolbar:
@Returns:
<!-- ##### FUNCTION gtk_toolbar_get_nth_item ##### -->
<para>
</para>
@toolbar:
@n:
@Returns:
<!-- ##### FUNCTION gtk_toolbar_get_drop_index ##### -->
<para>
</para>
@toolbar:
@x:
@y:
@Returns:
<!-- ##### FUNCTION gtk_toolbar_set_drop_highlight_item ##### -->
<para>
</para>
@toolbar:
@tool_item:
@index_:
<!-- ##### FUNCTION gtk_toolbar_set_show_arrow ##### -->
<para>
</para>
@toolbar:
@show_arrow:
<!-- ##### FUNCTION gtk_toolbar_unset_icon_size ##### -->
<para>
</para>
@toolbar:
<!-- ##### FUNCTION gtk_toolbar_get_show_arrow ##### -->
<para>
</para>
@toolbar:
@Returns:
<!-- ##### FUNCTION gtk_toolbar_get_style ##### -->
<para>
</para>
@toolbar:
@Returns:
<!-- ##### FUNCTION gtk_toolbar_get_icon_size ##### -->
<para>
</para>
@toolbar:
@Returns:
<!-- ##### FUNCTION gtk_toolbar_get_relief_style ##### -->
<para>
</para>
@toolbar:
@Returns:
<!-- ##### FUNCTION gtk_toolbar_set_style ##### -->
<para>
</para>
@toolbar:
@style:
<!-- ##### FUNCTION gtk_toolbar_set_icon_size ##### -->
<para>
</para>
@toolbar:
@icon_size:
<!-- ##### FUNCTION gtk_toolbar_unset_style ##### -->
<para>
</para>
@toolbar:

Some files were not shown because too many files have changed in this diff Show More