Compare commits
1 Commits
2.90.7
...
applicatio
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5ae008606d |
@@ -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
|
||||
|
||||
210
NEWS
210
NEWS
@@ -1,213 +1,3 @@
|
||||
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
|
||||
==============================================
|
||||
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -108,6 +108,7 @@ copy ..\..\..\gdk\gdkevents.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk
&#
|
||||
copy ..\..\..\gdk\gdkfont.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkgc.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdki18n.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkimage.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkinput.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkkeys.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
copy ..\..\..\gdk\gdkkeysyms.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk

|
||||
|
||||
52
configure.ac
52
configure.ac
@@ -12,7 +12,7 @@ AC_PREREQ([2.62])
|
||||
|
||||
m4_define([gtk_major_version], [2])
|
||||
m4_define([gtk_minor_version], [90])
|
||||
m4_define([gtk_micro_version], [7])
|
||||
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,7 +31,7 @@ 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.25.15])
|
||||
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.9.10])
|
||||
@@ -243,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])])
|
||||
@@ -253,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
|
||||
@@ -280,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])
|
||||
|
||||
@@ -933,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)
|
||||
@@ -958,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.
|
||||
@@ -979,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
|
||||
|
||||
@@ -1239,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
|
||||
@@ -1534,7 +1556,7 @@ fi
|
||||
# GObject introspection
|
||||
##################################################
|
||||
|
||||
GOBJECT_INTROSPECTION_CHECK([0.9.5])
|
||||
GOBJECT_INTROSPECTION_CHECK([0.9.0])
|
||||
|
||||
##################################################
|
||||
# Checks for gtk-doc and docbook-tools
|
||||
@@ -1632,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
|
||||
@@ -1707,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
|
||||
@@ -1737,4 +1763,4 @@ perf/Makefile
|
||||
AC_OUTPUT
|
||||
|
||||
echo "configuration:
|
||||
target: $gdktarget"
|
||||
target: $gdktarget"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -109,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);
|
||||
@@ -124,13 +140,9 @@ about_cb (GtkAction *action,
|
||||
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,
|
||||
@@ -447,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",
|
||||
|
||||
@@ -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,
|
||||
@@ -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);
|
||||
|
||||
@@ -19,23 +19,17 @@ expose_event_callback (GtkWidget *widget,
|
||||
GdkEventExpose *event,
|
||||
gpointer data)
|
||||
{
|
||||
GdkWindow *window;
|
||||
|
||||
window = gtk_widget_get_window (widget);
|
||||
if (window)
|
||||
if (widget->window)
|
||||
{
|
||||
GtkStyle *style;
|
||||
cairo_t *cr;
|
||||
|
||||
style = gtk_widget_get_style (widget);
|
||||
|
||||
cr = gdk_cairo_create (window);
|
||||
|
||||
gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
|
||||
gdk_cairo_rectangle (cr, &event->area);
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_destroy (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;
|
||||
|
||||
@@ -17,53 +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_expose_event (GtkWidget *widget,
|
||||
GdkEventExpose *event,
|
||||
gpointer data)
|
||||
{
|
||||
cairo_t *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.
|
||||
*/
|
||||
|
||||
cr = gdk_cairo_create (gtk_widget_get_window (widget));
|
||||
|
||||
cairo_set_source_surface (cr, surface, 0, 0);
|
||||
gdk_cairo_rectangle (cr, &event->area);
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_destroy (cr);
|
||||
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;
|
||||
}
|
||||
@@ -75,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);
|
||||
}
|
||||
@@ -101,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)
|
||||
@@ -119,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.
|
||||
@@ -148,9 +145,9 @@ checkerboard_expose (GtkWidget *da,
|
||||
GdkEventExpose *event,
|
||||
gpointer data)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
gint i, j, xcount, ycount;
|
||||
cairo_t *cr;
|
||||
GdkGC *gc1, *gc2;
|
||||
GdkColor color;
|
||||
|
||||
#define CHECK_SIZE 10
|
||||
#define SPACING 2
|
||||
@@ -162,30 +159,47 @@ checkerboard_expose (GtkWidget *da,
|
||||
* works.
|
||||
*/
|
||||
|
||||
cr = gdk_cairo_create (gtk_widget_get_window (da));
|
||||
gdk_cairo_rectangle (cr, &event->area);
|
||||
cairo_clip (cr);
|
||||
/* 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);
|
||||
|
||||
gtk_widget_get_allocation (da, &allocation);
|
||||
xcount = 0;
|
||||
i = SPACING;
|
||||
while (i < allocation.width)
|
||||
while (i < da->allocation.width)
|
||||
{
|
||||
j = SPACING;
|
||||
ycount = xcount % 2; /* start with even/odd depending on row */
|
||||
while (j < allocation.height)
|
||||
while (j < da->allocation.height)
|
||||
{
|
||||
GdkGC *gc;
|
||||
|
||||
if (ycount % 2)
|
||||
cairo_set_source_rgb (cr, 0.45777, 0, 0.45777);
|
||||
gc = gc1;
|
||||
else
|
||||
cairo_set_source_rgb (cr, 1, 1, 1);
|
||||
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;
|
||||
@@ -195,7 +209,8 @@ checkerboard_expose (GtkWidget *da,
|
||||
++xcount;
|
||||
}
|
||||
|
||||
cairo_destroy (cr);
|
||||
g_object_unref (gc1);
|
||||
g_object_unref (gc2);
|
||||
|
||||
/* return TRUE because we've handled this event, so no
|
||||
* further processing is required.
|
||||
@@ -208,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 *
|
||||
@@ -277,7 +292,7 @@ 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, "expose-event",
|
||||
G_CALLBACK (scribble_expose_event), NULL);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
@@ -257,11 +253,10 @@ gtk_rotated_bin_realize (GtkWidget *widget)
|
||||
|
||||
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;
|
||||
@@ -269,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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
@@ -462,8 +454,7 @@ 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;
|
||||
}
|
||||
@@ -473,15 +464,13 @@ 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;
|
||||
|
||||
if (gtk_widget_is_drawable (widget))
|
||||
{
|
||||
window = gtk_widget_get_window (widget);
|
||||
if (event->window == window)
|
||||
if (event->window == widget->window)
|
||||
{
|
||||
GdkPixmap *pixmap;
|
||||
GtkAllocation child_area;
|
||||
@@ -490,9 +479,9 @@ gtk_rotated_bin_expose (GtkWidget *widget,
|
||||
if (bin->child && gtk_widget_get_visible (bin->child))
|
||||
{
|
||||
pixmap = gdk_offscreen_window_get_pixmap (bin->offscreen_window);
|
||||
gtk_widget_get_allocation (bin->child, &child_area);
|
||||
child_area = bin->child->allocation;
|
||||
|
||||
cr = gdk_cairo_create (window);
|
||||
cr = gdk_cairo_create (widget->window);
|
||||
|
||||
/* transform */
|
||||
s = sin (bin->angle);
|
||||
@@ -518,7 +507,7 @@ gtk_rotated_bin_expose (GtkWidget *widget,
|
||||
}
|
||||
else if (event->window == bin->offscreen_window)
|
||||
{
|
||||
gtk_paint_flat_box (gtk_widget_get_style (widget), event->window,
|
||||
gtk_paint_flat_box (widget->style, event->window,
|
||||
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
|
||||
&event->area, widget, "blah",
|
||||
0, 0, -1, -1);
|
||||
|
||||
@@ -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
|
||||
@@ -195,11 +191,10 @@ gtk_mirror_bin_realize (GtkWidget *widget)
|
||||
|
||||
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;
|
||||
@@ -207,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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
@@ -368,8 +360,7 @@ 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;
|
||||
}
|
||||
@@ -379,13 +370,11 @@ gtk_mirror_bin_expose (GtkWidget *widget,
|
||||
GdkEventExpose *event)
|
||||
{
|
||||
GtkMirrorBin *bin = GTK_MIRROR_BIN (widget);
|
||||
GdkWindow *window;
|
||||
gint width, height;
|
||||
|
||||
if (gtk_widget_is_drawable (widget))
|
||||
{
|
||||
window = gtk_widget_get_window (widget);
|
||||
if (event->window == window)
|
||||
if (event->window == widget->window)
|
||||
{
|
||||
GdkPixmap *pixmap;
|
||||
cairo_t *cr;
|
||||
@@ -397,7 +386,7 @@ gtk_mirror_bin_expose (GtkWidget *widget,
|
||||
pixmap = gdk_offscreen_window_get_pixmap (bin->offscreen_window);
|
||||
gdk_drawable_get_size (pixmap, &width, &height);
|
||||
|
||||
cr = gdk_cairo_create (window);
|
||||
cr = gdk_cairo_create (widget->window);
|
||||
|
||||
cairo_save (cr);
|
||||
|
||||
@@ -437,7 +426,7 @@ gtk_mirror_bin_expose (GtkWidget *widget,
|
||||
}
|
||||
else if (event->window == bin->offscreen_window)
|
||||
{
|
||||
gtk_paint_flat_box (gtk_widget_get_style (widget), event->window,
|
||||
gtk_paint_flat_box (widget->style, event->window,
|
||||
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
|
||||
&event->area, widget, "blah",
|
||||
0, 0, -1, -1);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -100,15 +100,20 @@ expose_cb (GtkWidget *widget,
|
||||
GdkEventExpose *event,
|
||||
gpointer data)
|
||||
{
|
||||
cairo_t *cr;
|
||||
guchar *pixels;
|
||||
int rowstride;
|
||||
|
||||
cr = gdk_cairo_create (event->window);
|
||||
rowstride = gdk_pixbuf_get_rowstride (frame);
|
||||
|
||||
gdk_cairo_set_source_pixbuf (cr, frame, 0, 0);
|
||||
gdk_cairo_rectangle (cr, &event->area);
|
||||
cairo_fill (cr);
|
||||
pixels = gdk_pixbuf_get_pixels (frame) + rowstride * event->area.y + event->area.x * 3;
|
||||
|
||||
cairo_destroy (cr);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -99,8 +99,6 @@ rotated_text_expose_event (GtkWidget *widget,
|
||||
#define N_WORDS 5
|
||||
#define FONT "Serif 18"
|
||||
|
||||
GtkAllocation allocation;
|
||||
|
||||
PangoContext *context;
|
||||
PangoLayout *layout;
|
||||
PangoFontDescription *desc;
|
||||
@@ -110,20 +108,16 @@ rotated_text_expose_event (GtkWidget *widget,
|
||||
|
||||
PangoAttrList *attrs;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
int width = widget->allocation.width;
|
||||
int height = widget->allocation.height;
|
||||
double device_radius;
|
||||
int i;
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
width = allocation.width;
|
||||
height = allocation.height;
|
||||
|
||||
/* 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. */
|
||||
cr = gdk_cairo_create (gtk_widget_get_window (widget));
|
||||
cr = gdk_cairo_create (widget->window);
|
||||
device_radius = MIN (width, height) / 2.;
|
||||
cairo_translate (cr,
|
||||
device_radius + (width - 2 * device_radius) / 2,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -84,18 +84,15 @@ static gboolean
|
||||
canvas_expose_event (GtkWidget *widget,
|
||||
GdkEventExpose *event)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
cairo_t *cr;
|
||||
GList *iter;
|
||||
|
||||
cr = gdk_cairo_create (gtk_widget_get_window (widget));
|
||||
cr = gdk_cairo_create (widget->window);
|
||||
gdk_cairo_region (cr, event->region);
|
||||
cairo_clip (cr);
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
cairo_set_source_rgb (cr, 1, 1, 1);
|
||||
cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
|
||||
cairo_rectangle (cr, 0, 0, widget->allocation.width, widget->allocation.height);
|
||||
cairo_fill (cr);
|
||||
|
||||
for (iter = canvas_items; iter; iter = iter->next)
|
||||
@@ -176,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;
|
||||
@@ -197,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);
|
||||
}
|
||||
|
||||
/********************************/
|
||||
@@ -379,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;
|
||||
|
||||
|
||||
@@ -89,14 +89,20 @@ load_pixbufs (void)
|
||||
static gint
|
||||
expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data)
|
||||
{
|
||||
cairo_t *cr;
|
||||
|
||||
cr = gdk_cairo_create (event->window);
|
||||
gdk_cairo_set_source_pixbuf (cr, frame, 0, 0);
|
||||
gdk_cairo_rectangle (cr, &event->area);
|
||||
cairo_fill (cr);
|
||||
guchar *pixels;
|
||||
int rowstride;
|
||||
|
||||
cairo_destroy (cr);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -111,6 +111,8 @@ 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_drawable (NULL, root, NULL,
|
||||
0, 0, 0, 0, 150, 160);
|
||||
|
||||
115
demos/testpixbuf-drawable.c
Normal file
115
demos/testpixbuf-drawable.c
Normal 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;
|
||||
}
|
||||
@@ -311,18 +311,32 @@ static int
|
||||
expose_cb (GtkWidget *drawing_area, GdkEventExpose *evt, gpointer data)
|
||||
{
|
||||
GdkPixbuf *pixbuf;
|
||||
cairo_t *cr;
|
||||
|
||||
pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (drawing_area),
|
||||
"pixbuf");
|
||||
|
||||
cr = gdk_cairo_create (evt->window);
|
||||
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
|
||||
gdk_cairo_rectangle (cr, &evt->area);
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_destroy (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;
|
||||
}
|
||||
|
||||
@@ -360,6 +374,8 @@ 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_drawable (NULL, root, NULL,
|
||||
0, 0, 0, 0, 150, 160);
|
||||
|
||||
@@ -34,31 +34,25 @@ overall_changed_cb (GtkAdjustment *adjustment, gpointer data)
|
||||
gboolean
|
||||
expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data)
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
GdkPixbuf *dest;
|
||||
cairo_t *cr;
|
||||
|
||||
gdk_window_set_back_pixmap (gtk_widget_get_window (widget),
|
||||
NULL, FALSE);
|
||||
|
||||
gdk_window_set_back_pixmap (widget->window, NULL, FALSE);
|
||||
|
||||
dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, event->area.width, event->area.height);
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
gdk_pixbuf_composite_color (pixbuf, dest,
|
||||
0, 0, event->area.width, event->area.height,
|
||||
-event->area.x, -event->area.y,
|
||||
(double) allocation.width / gdk_pixbuf_get_width (pixbuf),
|
||||
(double) allocation.height / gdk_pixbuf_get_height (pixbuf),
|
||||
(double) widget->allocation.width / gdk_pixbuf_get_width (pixbuf),
|
||||
(double) widget->allocation.height / gdk_pixbuf_get_height (pixbuf),
|
||||
interp_type, overall_alpha,
|
||||
event->area.x, event->area.y, 16, 0xaaaaaa, 0x555555);
|
||||
|
||||
cr = gdk_cairo_create (event->window);
|
||||
|
||||
gdk_cairo_set_source_pixbuf (cr, dest, 0, 0);
|
||||
gdk_cairo_rectangle (cr, &event->area);
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_destroy (cr);
|
||||
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;
|
||||
|
||||
640
demos/testpixbuf.c
Normal file
640
demos/testpixbuf.c
Normal 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;
|
||||
}
|
||||
@@ -29,6 +29,7 @@ IGNORE_HFILES= \
|
||||
gdkpoly-generic.h \
|
||||
keyname-table.h \
|
||||
win32 \
|
||||
directfb \
|
||||
x11 \
|
||||
quartz
|
||||
|
||||
|
||||
@@ -24,9 +24,12 @@
|
||||
<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" />
|
||||
|
||||
@@ -52,6 +52,7 @@ gdk_error_trap_pop
|
||||
GDK_WINDOWING_X11
|
||||
GDK_WINDOWING_WIN32
|
||||
GDK_WINDOWING_QUARTZ
|
||||
GDK_WINDOWING_DIRECTFB
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GDK_TYPE_GRAB_STATUS
|
||||
@@ -70,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
|
||||
@@ -120,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
|
||||
@@ -193,6 +201,8 @@ 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
|
||||
@@ -244,6 +254,12 @@ gdk_screen_get_type
|
||||
<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>
|
||||
@@ -261,6 +277,77 @@ GdkPixmapObject
|
||||
GdkPixmapObjectClass
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<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>
|
||||
@@ -268,7 +355,7 @@ 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_surface
|
||||
gdk_pixbuf_get_from_image
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -281,6 +368,7 @@ 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
|
||||
@@ -319,6 +407,32 @@ 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
|
||||
@@ -331,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>
|
||||
@@ -476,8 +653,9 @@ gdk_window_merge_child_input_shapes
|
||||
gdk_window_set_static_gravities
|
||||
gdk_window_set_title
|
||||
gdk_window_set_background
|
||||
gdk_window_get_background
|
||||
gdk_window_set_back_pixmap
|
||||
gdk_window_get_background_pattern
|
||||
gdk_window_get_back_pixmap
|
||||
GDK_PARENT_RELATIVE
|
||||
gdk_window_set_cursor
|
||||
gdk_window_get_cursor
|
||||
@@ -639,16 +817,40 @@ 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_set_source_color
|
||||
gdk_cairo_set_source_pixbuf
|
||||
@@ -945,7 +1147,6 @@ 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
|
||||
|
||||
@@ -1006,6 +1207,7 @@ 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
|
||||
@@ -1013,6 +1215,9 @@ 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
|
||||
@@ -1021,6 +1226,8 @@ 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
|
||||
@@ -1058,10 +1265,14 @@ 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
|
||||
@@ -1076,6 +1287,7 @@ 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
|
||||
|
||||
@@ -5,7 +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
|
||||
|
||||
@@ -116,6 +116,16 @@ The colormap structure contains the following public fields.
|
||||
@n_colors:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gdk_colormap_query_color ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@colormap:
|
||||
@pixel:
|
||||
@result:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gdk_colormap_get_visual ##### -->
|
||||
<para>
|
||||
</para>
|
||||
|
||||
@@ -199,15 +199,6 @@ The standard cursors available.
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gdk_cursor_get_cursor_type ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@cursor:
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gdk_cursor_ref ##### -->
|
||||
<para>
|
||||
|
||||
|
||||
@@ -127,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:
|
||||
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
427
docs/reference/gdk/tmpl/gcs.sgml
Normal file
427
docs/reference/gdk/tmpl/gcs.sgml
Normal 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:
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
228
docs/reference/gdk/tmpl/images.sgml
Normal file
228
docs/reference/gdk/tmpl/images.sgml
Normal 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.
|
||||
|
||||
|
||||
@@ -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><gdk/gdkkeysyms.h></filename>
|
||||
header file.
|
||||
header file. <filename><gdk/gdkkeysyms.h></filename> is not included in <filename><gdk/gdk.h></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><gdk/gdkkeysyms.h></filename> header file
|
||||
but without the leading "GDK_KEY_".
|
||||
but without the leading "GDK_".
|
||||
</para>
|
||||
|
||||
@keyval: a key value.
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -83,13 +83,14 @@ pixbufs, see the #GdkPixbuf API documentation.
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gdk_pixbuf_get_from_surface ##### -->
|
||||
<!-- ##### FUNCTION gdk_pixbuf_get_from_image ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@dest:
|
||||
@surface:
|
||||
@src:
|
||||
@cmap:
|
||||
@src_x:
|
||||
@src_y:
|
||||
@dest_x:
|
||||
|
||||
@@ -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
|
||||
|
||||
410
docs/reference/gdk/tmpl/rgb.sgml
Normal file
410
docs/reference/gdk/tmpl/rgb.sgml
Normal 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>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#define IMAGE_WIDTH 256
|
||||
#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 (&argc, &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 < IMAGE_HEIGHT; y++)
|
||||
{
|
||||
for (x = 0; x < 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 <= i < @width and 0 <= j < 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.
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -17,6 +17,14 @@ 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_visual_get_system() is the system's default
|
||||
visual. gdk_rgb_get_visual() return the visual most
|
||||
@@ -40,7 +48,7 @@ then %GDK_VISUAL_STATIC_GRAY.
|
||||
|
||||
<!-- ##### SECTION See_Also ##### -->
|
||||
<para>
|
||||
#GdkColormap
|
||||
#GdkImage, #GdkColormap, #GdkRGB
|
||||
</para>
|
||||
|
||||
<!-- ##### SECTION Stability_Level ##### -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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>
|
||||
|
||||
44
docs/reference/gtk/directfb.sgml
Normal file
44
docs/reference/gtk/directfb.sgml
Normal 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>
|
||||
@@ -119,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" />
|
||||
@@ -139,6 +140,7 @@ 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" />
|
||||
@@ -307,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" />
|
||||
@@ -369,6 +370,7 @@ 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" />
|
||||
@@ -426,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>
|
||||
|
||||
@@ -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
|
||||
@@ -424,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
|
||||
@@ -460,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
|
||||
@@ -594,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>
|
||||
@@ -899,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
|
||||
@@ -1155,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
|
||||
@@ -1611,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
|
||||
@@ -1674,6 +1672,7 @@ GtkIconViewPrivate
|
||||
GtkImage
|
||||
GtkImageType
|
||||
gtk_image_get_icon_set
|
||||
gtk_image_get_image
|
||||
gtk_image_get_pixbuf
|
||||
gtk_image_get_pixmap
|
||||
gtk_image_get_stock
|
||||
@@ -1683,6 +1682,7 @@ 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
|
||||
@@ -1691,6 +1691,7 @@ 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
|
||||
@@ -1832,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>
|
||||
@@ -2005,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>
|
||||
|
||||
@@ -2126,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>
|
||||
|
||||
@@ -2176,7 +2193,6 @@ GTK_MISC_CLASS
|
||||
GTK_IS_MISC_CLASS
|
||||
GTK_MISC_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkMiscPrivate
|
||||
gtk_misc_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -2184,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
|
||||
@@ -2221,8 +2238,6 @@ 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
|
||||
gtk_notebook_get_group
|
||||
@@ -2240,7 +2255,6 @@ GTK_NOTEBOOK_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
gtk_notebook_get_type
|
||||
GtkNotebookTab
|
||||
GtkNotebookPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -2329,7 +2343,6 @@ GTK_PLUG_CLASS
|
||||
GTK_IS_PLUG_CLASS
|
||||
GTK_PLUG_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkPlugPrivate
|
||||
gtk_plug_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -2341,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
|
||||
@@ -2359,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>
|
||||
|
||||
@@ -2405,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>
|
||||
|
||||
@@ -2429,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>
|
||||
|
||||
@@ -2633,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>
|
||||
@@ -2713,7 +2726,6 @@ 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
|
||||
@@ -2743,7 +2755,6 @@ GTK_SCALE_CLASS
|
||||
GTK_IS_SCALE_CLASS
|
||||
GTK_SCALE_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkScalePrivate
|
||||
gtk_scale_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -2903,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>
|
||||
|
||||
@@ -2965,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>
|
||||
|
||||
@@ -3012,7 +3021,6 @@ GTK_STATUSBAR_CLASS
|
||||
GTK_IS_STATUSBAR_CLASS
|
||||
GTK_STATUSBAR_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkStatusbarPrivate
|
||||
gtk_statusbar_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -3050,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
|
||||
@@ -3094,7 +3104,6 @@ GTK_TABLE_CLASS
|
||||
GTK_IS_TABLE_CLASS
|
||||
GTK_TABLE_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkTablePrivate
|
||||
GtkTableChild
|
||||
GtkTableRowCol
|
||||
gtk_table_get_type
|
||||
@@ -3113,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>
|
||||
|
||||
@@ -3208,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>
|
||||
@@ -3385,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>
|
||||
|
||||
@@ -3475,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
|
||||
@@ -4586,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>
|
||||
|
||||
@@ -4643,7 +4647,6 @@ GTK_VIEWPORT_CLASS
|
||||
GTK_IS_VIEWPORT_CLASS
|
||||
GTK_VIEWPORT_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkViewportPrivate
|
||||
gtk_viewport_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -4952,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>
|
||||
@@ -5184,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>
|
||||
@@ -5212,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
|
||||
@@ -6293,14 +6304,12 @@ gtk_orientable_get_type
|
||||
GtkSizeRequest
|
||||
GtkSizeRequestIface
|
||||
GtkSizeRequestMode
|
||||
GtkRequestedSize
|
||||
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
|
||||
gtk_distribute_natural_allocation
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_SIZE_REQUEST
|
||||
@@ -6324,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>
|
||||
@@ -6339,40 +6347,3 @@ GTK_APPLICATION_GET_CLASS
|
||||
gtk_application_get_type
|
||||
GtkApplicationPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkwrapbox</FILE>
|
||||
<TITLE>GtkWrapBox</TITLE>
|
||||
GtkWrapBox
|
||||
|
||||
gtk_wrap_box_new
|
||||
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_spreading
|
||||
gtk_Wrap_box_get_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>
|
||||
|
||||
@@ -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
|
||||
@@ -178,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
|
||||
|
||||
@@ -6,69 +6,14 @@
|
||||
<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.22, 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.22.
|
||||
</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-pixbuf/gdk-pixbuf.h</filename></term>
|
||||
<listitem>for GdkPixbuf</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/gdkkeysyms.h</filename></term>
|
||||
<listitem>if you need the GDK keysym definitions</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+="-DG_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES"
|
||||
</programlisting>
|
||||
@@ -78,17 +23,8 @@
|
||||
<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+="-DG_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
|
||||
</programlisting>
|
||||
@@ -96,362 +32,23 @@
|
||||
</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_<keyname> with GDK_KEY_<keyname></title>
|
||||
|
||||
<para>
|
||||
Key constants have gained a <literal>_KEY</literal>, prefix.
|
||||
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, >k_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 style’s 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.
|
||||
Pango’s 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.22 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>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>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
|
||||
@@ -481,7 +78,4 @@ cairo_destroy (cr);
|
||||
unhappiness and must be avoided.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
|
||||
6
docs/reference/gtk/tmpl/.gitignore
vendored
6
docs/reference/gtk/tmpl/.gitignore
vendored
@@ -7,8 +7,6 @@ gtkcalendar.sgml
|
||||
gtkcelleditable.sgml
|
||||
gtkhbox.sgml
|
||||
gtkiconview.sgml
|
||||
gtkimcontextsimple.sgml
|
||||
gtkimmulticontext.sgml
|
||||
gtkmessagedialog.sgml
|
||||
gtkobject.sgml
|
||||
gtkorientable.sgml
|
||||
@@ -22,8 +20,6 @@ gtkrecentchooser.sgml
|
||||
gtkrecentchooserdialog.sgml
|
||||
gtkrecentchoosermenu.sgml
|
||||
gtkrecentchooserwidget.sgml
|
||||
gtkrecentmanager.sgml
|
||||
gtkscale.sgml
|
||||
gtkscalebutton.sgml
|
||||
gtkseparator.sgml
|
||||
gtkseparatormenuitem.sgml
|
||||
@@ -32,9 +28,7 @@ gtkstatusbar.sgml
|
||||
gtkstyle.sgml
|
||||
gtktesting.sgml
|
||||
gtktextiter.sgml
|
||||
gtktexttagtable.sgml
|
||||
gtktoggleaction.sgml
|
||||
gtktoolitem.sgml
|
||||
gtktreednd.sgml
|
||||
gtktypeutils.sgml
|
||||
gtkwindow.sgml
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -115,11 +115,6 @@ a <child> type attribute.
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkExpander:label-fill ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkExpander:label-widget ##### -->
|
||||
<para>
|
||||
|
||||
@@ -276,21 +271,3 @@ a <child> type attribute.
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_expander_set_label_fill ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@expander:
|
||||
@label_fill:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_expander_get_label_fill ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@expander:
|
||||
@Returns:
|
||||
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
226
docs/reference/gtk/tmpl/gtkfilesel.sgml
Normal file
226
docs/reference/gtk/tmpl/gtkfilesel.sgml
Normal 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: %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:
|
||||
|
||||
|
||||
51
docs/reference/gtk/tmpl/gtkgc.sgml
Normal file
51
docs/reference/gtk/tmpl/gtkgc.sgml
Normal 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.
|
||||
|
||||
|
||||
55
docs/reference/gtk/tmpl/gtkimcontextsimple.sgml
Normal file
55
docs/reference/gtk/tmpl/gtkimcontextsimple.sgml
Normal 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>
|
||||
|
||||
|
||||
|
||||
64
docs/reference/gtk/tmpl/gtkimmulticontext.sgml
Normal file
64
docs/reference/gtk/tmpl/gtkimmulticontext.sgml
Normal 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:
|
||||
|
||||
|
||||
75
docs/reference/gtk/tmpl/gtkitem.sgml
Normal file
75
docs/reference/gtk/tmpl/gtkitem.sgml
Normal 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.
|
||||
|
||||
|
||||
@@ -278,6 +278,12 @@ Emitted when the user or a function changes the current page.
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### STRUCT GtkNotebookPage ##### -->
|
||||
<para>
|
||||
The #GtkNotebookPage is an opaque implementation detail of #GtkNotebook.
|
||||
</para>
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_notebook_new ##### -->
|
||||
<para>
|
||||
</para>
|
||||
@@ -613,24 +619,6 @@ Emitted when the user or a function changes the current page.
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_notebook_get_tab_hborder ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@notebook:
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_notebook_get_tab_vborder ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@notebook:
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_notebook_set_current_page ##### -->
|
||||
<para>
|
||||
|
||||
|
||||
482
docs/reference/gtk/tmpl/gtkrecentmanager.sgml
Normal file
482
docs/reference/gtk/tmpl/gtkrecentmanager.sgml
Normal 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, &error);
|
||||
if (error)
|
||||
{
|
||||
g_warning ("Could not find the file: %s", error->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:
|
||||
|
||||
|
||||
193
docs/reference/gtk/tmpl/gtkscale.sgml
Normal file
193
docs/reference/gtk/tmpl/gtkscale.sgml
Normal 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 <marks> element, which
|
||||
can contain multiple <mark> 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:
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
125
docs/reference/gtk/tmpl/gtktexttagtable.sgml
Normal file
125
docs/reference/gtk/tmpl/gtktexttagtable.sgml
Normal 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:
|
||||
|
||||
|
||||
51
docs/reference/gtk/tmpl/gtktypeutils.sgml
Normal file
51
docs/reference/gtk/tmpl/gtktypeutils.sgml
Normal file
@@ -0,0 +1,51 @@
|
||||
<!-- ##### SECTION Title ##### -->
|
||||
Types
|
||||
|
||||
<!-- ##### SECTION Short_Description ##### -->
|
||||
Handle run-time type creation
|
||||
|
||||
<!-- ##### SECTION Long_Description ##### -->
|
||||
<para>
|
||||
The GTK+ type system is extensible. Because of that, types have to be
|
||||
managed at runtime.
|
||||
</para>
|
||||
|
||||
<!-- ##### SECTION See_Also ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### SECTION Stability_Level ##### -->
|
||||
|
||||
|
||||
<!-- ##### SECTION Image ##### -->
|
||||
|
||||
|
||||
<!-- ##### USER_FUNCTION GtkFunction ##### -->
|
||||
<para>
|
||||
Defines a function pointer.
|
||||
</para>
|
||||
|
||||
@data: #gpointer
|
||||
@Returns: #gint
|
||||
|
||||
|
||||
<!-- ##### USER_FUNCTION GtkCallbackMarshal ##### -->
|
||||
<para>
|
||||
Defines a function pointer.
|
||||
</para>
|
||||
|
||||
@object: #GtkObject*
|
||||
@data: #gpointer
|
||||
@n_args: #guint
|
||||
@args: #GtkArg*
|
||||
|
||||
|
||||
<!-- ##### STRUCT GtkArg ##### -->
|
||||
<para>
|
||||
This is a structure that we use to pass in typed values (and names).
|
||||
</para>
|
||||
|
||||
@type:
|
||||
@name:
|
||||
|
||||
@@ -106,7 +106,8 @@ GtkWindow::default_width, GtkWindow::default_height:
|
||||
- default_height is -1 if unset, or >= 0 if
|
||||
a default height is set
|
||||
|
||||
GtkWindow::resizable:
|
||||
GtkWindow::allow_grow, GtkWindow::resizable:
|
||||
- equivalent properties; changing one notifies on the other
|
||||
- if FALSE, we set the min size to the max size in the geometry
|
||||
hints.
|
||||
- If the app programmer has called gtk_window_set_geometry_hints()
|
||||
|
||||
@@ -33,7 +33,7 @@ find_toplevel_window (Window xid)
|
||||
|
||||
do
|
||||
{
|
||||
if (XQueryTree (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xid, &root,
|
||||
if (XQueryTree (GDK_DISPLAY (), xid, &root,
|
||||
&parent, &children, &nchildren) == 0)
|
||||
{
|
||||
g_warning ("Couldn't find window manager window");
|
||||
@@ -82,7 +82,7 @@ remove_shaped_area (GdkPixbuf *pixbuf,
|
||||
gdk_pixbuf_get_height (pixbuf));
|
||||
|
||||
gdk_pixbuf_fill (retval, 0);
|
||||
rectangles = XShapeGetRectangles (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), window,
|
||||
rectangles = XShapeGetRectangles (GDK_DISPLAY (), window,
|
||||
ShapeBounding, &rectangle_count, &rectangle_order);
|
||||
|
||||
for (i = 0; i < rectangle_count; i++)
|
||||
@@ -130,7 +130,7 @@ take_window_shot (Window child,
|
||||
GdkPixbuf *tmp, *tmp2;
|
||||
GdkPixbuf *retval;
|
||||
|
||||
disp = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
disp = GDK_DISPLAY ();
|
||||
w = GDK_ROOT_WINDOW ();
|
||||
|
||||
if (include_decoration)
|
||||
@@ -193,7 +193,6 @@ int main (int argc, char **argv)
|
||||
|
||||
for (node = toplevels; node; node = g_list_next (node))
|
||||
{
|
||||
GtkAllocation allocation;
|
||||
GdkWindow *window;
|
||||
WidgetInfo *info;
|
||||
XID id;
|
||||
@@ -203,14 +202,13 @@ int main (int argc, char **argv)
|
||||
|
||||
gtk_widget_show (info->window);
|
||||
|
||||
window = gtk_widget_get_window (info->window);
|
||||
gtk_widget_get_allocation (info->window, &allocation);
|
||||
window = info->window->window;
|
||||
|
||||
gtk_widget_show_now (info->window);
|
||||
gtk_widget_queue_draw_area (info->window,
|
||||
allocation.x, allocation.y,
|
||||
allocation.width, allocation.height);
|
||||
gdk_window_process_updates (window, TRUE);
|
||||
info->window->allocation.x, info->window->allocation.y,
|
||||
info->window->allocation.width, info->window->allocation.height);
|
||||
gdk_window_process_updates (info->window->window, TRUE);
|
||||
|
||||
while (gtk_events_pending ())
|
||||
{
|
||||
|
||||
@@ -21,7 +21,7 @@ find_toplevel_window (Window xid)
|
||||
|
||||
do
|
||||
{
|
||||
if (XQueryTree (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xid, &root,
|
||||
if (XQueryTree (GDK_DISPLAY (), xid, &root,
|
||||
&parent, &children, &nchildren) == 0)
|
||||
{
|
||||
g_warning ("Couldn't find window manager window");
|
||||
@@ -42,7 +42,6 @@ adjust_size_callback (WidgetInfo *info)
|
||||
{
|
||||
Window toplevel;
|
||||
Window root;
|
||||
GdkWindow *window;
|
||||
gint tx;
|
||||
gint ty;
|
||||
guint twidth;
|
||||
@@ -52,9 +51,8 @@ adjust_size_callback (WidgetInfo *info)
|
||||
gint target_width = 0;
|
||||
gint target_height = 0;
|
||||
|
||||
window = gtk_widget_get_window (info->window);
|
||||
toplevel = find_toplevel_window (GDK_WINDOW_XID (window));
|
||||
XGetGeometry (GDK_WINDOW_XDISPLAY (window),
|
||||
toplevel = find_toplevel_window (GDK_WINDOW_XID (info->window->window));
|
||||
XGetGeometry (GDK_WINDOW_XDISPLAY (info->window->window),
|
||||
toplevel,
|
||||
&root, &tx, &ty, &twidth, &theight, &tborder_width, &tdepth);
|
||||
|
||||
@@ -270,7 +268,7 @@ create_accel_label (void)
|
||||
|
||||
info = new_widget_info ("accel-label", box, SMALL);
|
||||
|
||||
gtk_widget_add_accelerator (button, "activate", accel_group, GDK_KEY_Q, GDK_CONTROL_MASK,
|
||||
gtk_widget_add_accelerator (button, "activate", accel_group, GDK_Q, GDK_CONTROL_MASK,
|
||||
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
|
||||
|
||||
return info;
|
||||
@@ -800,7 +798,7 @@ create_message_dialog (void)
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_OK,
|
||||
NULL);
|
||||
gtk_window_set_icon_name (GTK_WINDOW (widget), "edit-copy");
|
||||
gtk_window_set_icon_name (GTK_WINDOW (widget), "gtk-copy");
|
||||
gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (widget),
|
||||
"<b>Message Dialog</b>\n\nWith secondary text");
|
||||
return new_widget_info ("messagedialog", widget, ASIS);
|
||||
@@ -825,11 +823,11 @@ create_about_dialog (void)
|
||||
"copyright", "(C) 1997-2009 The GTK+ Team",
|
||||
"website", "http://www.gtk.org",
|
||||
"comments", "Program to demonstrate GTK+ functions.",
|
||||
"logo-icon-name", "help-about",
|
||||
"logo-icon-name", "gtk-about",
|
||||
"title", "About GTK+ Code Demos",
|
||||
"authors", authors,
|
||||
NULL);
|
||||
gtk_window_set_icon_name (GTK_WINDOW (widget), "help-about");
|
||||
gtk_window_set_icon_name (GTK_WINDOW (widget), "gtk-about");
|
||||
return new_widget_info ("aboutdialog", widget, ASIS);
|
||||
}
|
||||
|
||||
@@ -997,13 +995,11 @@ static WidgetInfo *
|
||||
create_volume_button (void)
|
||||
{
|
||||
GtkWidget *button, *widget;
|
||||
GtkWidget *plus_button;
|
||||
|
||||
button = gtk_volume_button_new ();
|
||||
gtk_scale_button_set_value (GTK_SCALE_BUTTON (button), 33);
|
||||
/* Hack: get the private dock */
|
||||
plus_button = gtk_scale_button_get_plus_button (GTK_SCALE_BUTTON (button));
|
||||
widget = gtk_widget_get_parent (gtk_widget_get_parent (gtk_widget_get_parent (plus_button)));
|
||||
widget = gtk_scale_button_get_plus_button (GTK_SCALE_BUTTON (button))->parent->parent->parent;
|
||||
gtk_widget_show_all (widget);
|
||||
return new_widget_info ("volumebutton", widget, ASIS);
|
||||
}
|
||||
|
||||
@@ -1910,7 +1910,7 @@ given item, and perform the cast. Some common ones you will see are:</para>
|
||||
G_OBJECT (object)
|
||||
GTK_WIDGET (widget)
|
||||
GTK_OBJECT (object)
|
||||
G_CALLBACK (function)
|
||||
GTK_SIGNAL_FUNC (function)
|
||||
GTK_CONTAINER (container)
|
||||
GTK_WINDOW (window)
|
||||
GTK_BOX (box)
|
||||
@@ -5369,8 +5369,8 @@ widget.</para>
|
||||
the widget both looks and operates by using the function</para>
|
||||
|
||||
<programlisting role="C">
|
||||
void gtk_calendar_set_display_options( GtkCalendar *calendar,
|
||||
GtkCalendarDisplayOptions flags );
|
||||
void gtk_calendar_display_options( GtkCalendar *calendar,
|
||||
GtkCalendarDisplayOptions flags );
|
||||
</programlisting>
|
||||
|
||||
<para>The <literal>flags</literal> argument can be formed by combining either of the
|
||||
@@ -5405,6 +5405,14 @@ number for each week should be displayed down the left side of the
|
||||
calendar. (eg. Jan 1 = Week 1,Dec 31 = Week 52).</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><literal>GTK_CALENDAR_WEEK_START_MONDAY</literal></term>
|
||||
<listitem><para>this option states that the
|
||||
calander week will start on Monday instead of Sunday which is the
|
||||
default. This only affects the order in which days are displayed from
|
||||
left to right.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>The following functions are used to set the the currently displayed
|
||||
@@ -5670,7 +5678,7 @@ static void calendar_set_flags( CalendarData *calendar )
|
||||
options = options + (1 << i);
|
||||
}
|
||||
if (calendar->window)
|
||||
gtk_calendar_set_display_options (GTK_CALENDAR (calendar->window), options);
|
||||
gtk_calendar_display_options (GTK_CALENDAR (calendar->window), options);
|
||||
}
|
||||
|
||||
static void calendar_toggle_flag( GtkWidget *toggle,
|
||||
@@ -6145,7 +6153,7 @@ gint main( gint argc,
|
||||
gtk_widget_set_events (drawingarea, GDK_BUTTON_PRESS_MASK);
|
||||
|
||||
g_signal_connect (GTK_OBJECT (drawingarea), "event",
|
||||
G_CALLBACK (area_event), (gpointer) drawingarea);
|
||||
GTK_SIGNAL_FUNC (area_event), (gpointer) drawingarea);
|
||||
|
||||
/* Add drawingarea to window, then show them both */
|
||||
|
||||
@@ -7591,6 +7599,7 @@ int main (int argc, char *argv[])
|
||||
dialog = gtk_dialog_new ();
|
||||
gtk_window_set_title (GTK_WINDOW (dialog), "GTKToolbar Tutorial");
|
||||
gtk_widget_set_size_request (GTK_WIDGET (dialog), 600, 300);
|
||||
GTK_WINDOW (dialog)->allow_shrink = TRUE;
|
||||
|
||||
/* typically we quit if someone tries to close us */
|
||||
g_signal_connect (dialog, "delete-event",
|
||||
@@ -7642,7 +7651,7 @@ the toolbar widget.</para>
|
||||
"Closes this app", /* this button's tooltip */
|
||||
"Private", /* tooltip private info */
|
||||
iconw, /* icon widget */
|
||||
G_CALLBACK (delete_event), /* a signal */
|
||||
GTK_SIGNAL_FUNC (delete_event), /* a signal */
|
||||
NULL);
|
||||
gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); /* space after item */
|
||||
</programlisting>
|
||||
@@ -7666,7 +7675,7 @@ widget, so that we can work with it in the normal way.</para>
|
||||
"Only icons in toolbar", /* tooltip */
|
||||
"Private", /* tooltip private string */
|
||||
iconw, /* icon */
|
||||
G_CALLBACK (radio_event), /* signal */
|
||||
GTK_SIGNAL_FUNC (radio_event), /* signal */
|
||||
toolbar); /* data for signal */
|
||||
gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
|
||||
</programlisting>
|
||||
@@ -7692,7 +7701,7 @@ tutorial).</para>
|
||||
"Only texts in toolbar",
|
||||
"Private",
|
||||
iconw,
|
||||
G_CALLBACK (radio_event),
|
||||
GTK_SIGNAL_FUNC (radio_event),
|
||||
toolbar);
|
||||
gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
|
||||
|
||||
@@ -7705,7 +7714,7 @@ tutorial).</para>
|
||||
"Icons and text in toolbar",
|
||||
"Private",
|
||||
iconw,
|
||||
G_CALLBACK (radio_event),
|
||||
GTK_SIGNAL_FUNC (radio_event),
|
||||
toolbar);
|
||||
gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (both_button), TRUE);
|
||||
@@ -7726,7 +7735,7 @@ between them).</para>
|
||||
"Toolbar with or without tips",
|
||||
"Private",
|
||||
iconw,
|
||||
G_CALLBACK (toggle_event),
|
||||
GTK_SIGNAL_FUNC (toggle_event),
|
||||
toolbar);
|
||||
gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tooltips_button), TRUE);
|
||||
@@ -15065,10 +15074,10 @@ gtk_dial_set_adjustment (GtkDial *dial,
|
||||
g_object_ref (GTK_OBJECT (dial->adjustment));
|
||||
|
||||
g_signal_connect (GTK_OBJECT (adjustment), "changed",
|
||||
G_CALLBACK (gtk_dial_adjustment_changed),
|
||||
GTK_SIGNAL_FUNC (gtk_dial_adjustment_changed),
|
||||
(gpointer) dial);
|
||||
g_signal_connect (GTK_OBJECT (adjustment), "value_changed",
|
||||
G_CALLBACK (gtk_dial_adjustment_value_changed),
|
||||
GTK_SIGNAL_FUNC (gtk_dial_adjustment_value_changed),
|
||||
(gpointer) dial);
|
||||
|
||||
dial->old_value = adjustment->value;
|
||||
|
||||
@@ -160,7 +160,7 @@ static void calendar_set_flags( CalendarData *calendar )
|
||||
options = options + (1 << i);
|
||||
}
|
||||
if (calendar->window)
|
||||
gtk_calendar_set_display_options (GTK_CALENDAR (calendar->window), options);
|
||||
gtk_calendar_display_options (GTK_CALENDAR (calendar->window), options);
|
||||
}
|
||||
|
||||
static void calendar_toggle_flag( GtkWidget *toggle,
|
||||
|
||||
@@ -97,7 +97,7 @@ gint main( gint argc,
|
||||
/* Attach to the "delete" and "destroy" events so we can exit */
|
||||
|
||||
g_signal_connect (GTK_OBJECT (window), "delete_event",
|
||||
G_CALLBACK (destroy_window), (gpointer) window);
|
||||
GTK_SIGNAL_FUNC (destroy_window), (gpointer) window);
|
||||
|
||||
/* Create drawingarea, set size and catch button events */
|
||||
|
||||
@@ -113,7 +113,7 @@ gint main( gint argc,
|
||||
gtk_widget_set_events (drawingarea, GDK_BUTTON_PRESS_MASK);
|
||||
|
||||
g_signal_connect (GTK_OBJECT (drawingarea), "event",
|
||||
G_CALLBACK (area_event), (gpointer) drawingarea);
|
||||
GTK_SIGNAL_FUNC (area_event), (gpointer) drawingarea);
|
||||
|
||||
/* Add drawingarea to window, then show them both */
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ INTROSPECTION_COMPILER_ARGS = \
|
||||
--includedir=.
|
||||
|
||||
SUBDIRS = $(gdktarget) . tests
|
||||
DIST_SUBDIRS = win32 x11 quartz tests
|
||||
DIST_SUBDIRS = win32 x11 quartz directfb tests
|
||||
|
||||
CLEANFILES =
|
||||
|
||||
@@ -81,15 +81,17 @@ gdk_public_h_sources = \
|
||||
gdkdnd.h \
|
||||
gdkdrawable.h \
|
||||
gdkevents.h \
|
||||
gdkgc.h \
|
||||
gdkimage.h \
|
||||
gdkinput.h \
|
||||
gdkkeys.h \
|
||||
gdkkeysyms.h \
|
||||
gdkkeysyms-compat.h \
|
||||
gdkpango.h \
|
||||
gdkpixbuf.h \
|
||||
gdkpixmap.h \
|
||||
gdkprivate.h \
|
||||
gdkproperty.h \
|
||||
gdkrgb.h \
|
||||
gdkscreen.h \
|
||||
gdkselection.h \
|
||||
gdkspawn.h \
|
||||
@@ -121,7 +123,9 @@ gdk_c_sources = \
|
||||
gdkdnd.c \
|
||||
gdkdraw.c \
|
||||
gdkevents.c \
|
||||
gdkgc.c \
|
||||
gdkglobals.c \
|
||||
gdkimage.c \
|
||||
gdkkeys.c \
|
||||
gdkkeyuni.c \
|
||||
gdkoffscreenwindow.c \
|
||||
@@ -130,6 +134,7 @@ gdk_c_sources = \
|
||||
gdkpixbuf-render.c \
|
||||
gdkpixmap.c \
|
||||
gdkrectangle.c \
|
||||
gdkrgb.c \
|
||||
gdkscreen.c \
|
||||
gdkselection.c \
|
||||
gdkvisual.c \
|
||||
@@ -156,6 +161,10 @@ common_sources = \
|
||||
gdkmarshalers.c \
|
||||
gdkmarshalers.h
|
||||
|
||||
libgdk_directfb_3_0_la_SOURCES = $(common_sources)
|
||||
libgdk_directfb_3_0_la_LIBADD = directfb/libgdk-directfb.la $(GDK_DEP_LIBS)
|
||||
libgdk_directfb_3_0_la_LDFLAGS = $(LDADD)
|
||||
|
||||
libgdk_x11_3_0_la_SOURCES = $(common_sources)
|
||||
libgdk_x11_3_0_la_LIBADD = x11/libgdk-x11.la $(GDK_DEP_LIBS)
|
||||
libgdk_x11_3_0_la_LDFLAGS = $(LDADD)
|
||||
@@ -172,13 +181,13 @@ libgdk_win32_3_0_la_LDFLAGS = -Wl,win32/rc/gdk-win32-res.o -export-symbols $(src
|
||||
if HAVE_INTROSPECTION
|
||||
|
||||
introspection_files = \
|
||||
$(filter-out gdkkeysyms-compat.h, $(gdk_public_h_sources)) \
|
||||
$(gdk_public_h_sources) \
|
||||
$(gdk_c_sources) \
|
||||
gdkenumtypes.c \
|
||||
gdkenumtypes.h
|
||||
|
||||
Gdk-3.0.gir: $(gdktargetlib) Makefile
|
||||
Gdk_3_0_gir_SCANNERFLAGS = --warn-all
|
||||
Gdk_3_0_gir_SCANNERFLAGS = --strip-prefix=Gdk
|
||||
Gdk_3_0_gir_INCLUDES = Gio-2.0 GdkPixbuf-2.0 Pango-1.0 cairo-1.0
|
||||
Gdk_3_0_gir_LIBS = $(gdktargetlib)
|
||||
Gdk_3_0_gir_FILES = $(introspection_files)
|
||||
@@ -204,8 +213,10 @@ x11_introspection_files = \
|
||||
x11/gdkdrawable-x11.c \
|
||||
x11/gdkeventsource.c \
|
||||
x11/gdkeventtranslator.c \
|
||||
x11/gdkgc-x11.c \
|
||||
x11/gdkgeometry-x11.c \
|
||||
x11/gdkglobals-x11.c \
|
||||
x11/gdkimage-x11.c \
|
||||
x11/gdkim-x11.c \
|
||||
x11/gdkinput.c \
|
||||
x11/gdkkeys-x11.c \
|
||||
@@ -226,7 +237,7 @@ x11_introspection_files = \
|
||||
x11/gdkx.h
|
||||
|
||||
GdkX11-3.0.gir: $(gdktargetlib) Gdk-3.0.gir Makefile
|
||||
GdkX11_3_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=Gdk --symbol-prefix=gdk
|
||||
GdkX11_3_0_gir_SCANNERFLAGS = --strip-prefix=gdk_x11
|
||||
GdkX11_3_0_gir_INCLUDES = Gio-2.0 Gdk-3.0 GdkPixbuf-2.0 Pango-1.0 xlib-2.0
|
||||
GdkX11_3_0_gir_LIBS = $(gdktargetlib)
|
||||
GdkX11_3_0_gir_FILES = $(x11_introspection_files)
|
||||
@@ -283,7 +294,7 @@ endif
|
||||
|
||||
lib_LTLIBRARIES = $(gdktargetlib)
|
||||
|
||||
EXTRA_LTLIBRARIES = libgdk-x11-3.0.la libgdk-win32-3.0.la libgdk-quartz-3.0.la
|
||||
EXTRA_LTLIBRARIES = libgdk-x11-3.0.la libgdk-win32-3.0.la libgdk-quartz-3.0.la libgdk-directfb-3.0.la
|
||||
|
||||
MAINTAINERCLEANFILES = $(gdk_built_sources) stamp-gdkenumtypes.h
|
||||
EXTRA_DIST += $(gdk_built_sources)
|
||||
|
||||
28
gdk/directfb/AUTHORS
Normal file
28
gdk/directfb/AUTHORS
Normal file
@@ -0,0 +1,28 @@
|
||||
The GDK DirectFB backend was written by
|
||||
|
||||
Denis Oliver Kropp <dok@directfb.org>
|
||||
Sven Neumann <neo@directfb.org>
|
||||
|
||||
Large parts of the code are based on other GDK backends
|
||||
especially the linuxfb backend which was written mainly
|
||||
by Alex Larsson <alexl@redhat.com>.
|
||||
|
||||
|
||||
The upgrade to gtk 2.8.x was done by
|
||||
|
||||
Michael Emmel <mike.emmel@gmail.com>
|
||||
|
||||
|
||||
Extensive help and support and code was recieved from the Debian
|
||||
community especially the Debian installer team who bravely chose to
|
||||
use the gdk directfb port for the graphical debian installer. In
|
||||
particular
|
||||
|
||||
Attilio Fiandrotti <fiandro@tiscalinet.it>
|
||||
Davide Viti <zinosat@tiscali.it>
|
||||
|
||||
for there tireless work bringing the backend from a small project to
|
||||
stability.
|
||||
|
||||
And finally thanks to the Extremadura goverment for bringing the
|
||||
directfb developers and debian installer team together for a workshop.
|
||||
59
gdk/directfb/Makefile.am
Normal file
59
gdk/directfb/Makefile.am
Normal file
@@ -0,0 +1,59 @@
|
||||
## Makefile.am for gtk+/gdk/gdk-directfb
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
libgdkincludedir = $(includedir)/gtk-3.0/gdk
|
||||
|
||||
INCLUDES = \
|
||||
-DG_LOG_DOMAIN=\"Gdk-DirectFB\" \
|
||||
-DGDK_COMPILATION \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_builddir)/gdk \
|
||||
-DG_DISABLE_DEPRECATED \
|
||||
@GTK_DEBUG_FLAGS@ \
|
||||
@GDK_DEP_CFLAGS@
|
||||
|
||||
LDADDS = \
|
||||
@GDK_DEP_LIBS@
|
||||
|
||||
noinst_LTLIBRARIES = libgdk-directfb.la
|
||||
|
||||
libgdk_directfb_la_SOURCES = \
|
||||
gdkapplaunchcontext-directfb.c \
|
||||
gdkcolor-directfb.c \
|
||||
gdkcursor-directfb.c \
|
||||
gdkdnd-directfb.c \
|
||||
gdkdisplay-directfb.c \
|
||||
gdkdisplay-directfb.h \
|
||||
gdkdrawable-directfb.c \
|
||||
gdkevents-directfb.c \
|
||||
gdkgc-directfb.c \
|
||||
gdkgeometry-directfb.c \
|
||||
gdkglobals-directfb.c \
|
||||
gdkim-directfb.c \
|
||||
gdkimage-directfb.c \
|
||||
gdkinput-directfb.c \
|
||||
gdkinput-directfb.h \
|
||||
gdkkeys-directfb.c \
|
||||
gdkmain-directfb.c \
|
||||
gdkpixmap-directfb.c \
|
||||
gdkprivate-directfb.h \
|
||||
gdkproperty-directfb.c \
|
||||
gdkscreen-directfb.c \
|
||||
gdkselection-directfb.c \
|
||||
gdkspawn-directfb.c \
|
||||
gdktestutils-directfb.c \
|
||||
gdkvisual-directfb.c \
|
||||
gdkdirectfb.h \
|
||||
gdkwindow-directfb.c \
|
||||
gdkwindowid.c \
|
||||
x-cursors.xbm
|
||||
|
||||
libgdkinclude_HEADERS = \
|
||||
gdkdirectfb.h \
|
||||
gdkprivate-directfb.h
|
||||
|
||||
|
||||
EXTRA_DIST += AUTHORS README TODO
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
106
gdk/directfb/README
Normal file
106
gdk/directfb/README
Normal file
@@ -0,0 +1,106 @@
|
||||
README for GDK-DirectFB
|
||||
------------------------
|
||||
|
||||
This is the GDK backend that allows GTK to work on top of DirectFB.
|
||||
|
||||
Important:
|
||||
The current code does not pass through directfb passed on the gtk
|
||||
apps command line on to directfb you need to set the environment variable
|
||||
DFBARGS.
|
||||
Example:
|
||||
export DFBARGS=system=sdl
|
||||
|
||||
DirectFB is a hardware abstraction layer on top of the Linux
|
||||
frame buffer that provides drawing functions, a window stack and
|
||||
support for input devices. The code you find here is a backend for
|
||||
GDK, the drawing kit used by GTK+.
|
||||
|
||||
|
||||
As DirectFB provides drawing functions, a windowing stack and manages
|
||||
input devices, this is a lightweight GDK port. Some parts of GDK
|
||||
require higher level drawing functions that are supported by
|
||||
cairo on DirectFB.
|
||||
GDK also uses some feature like bitmaps that do not map well to
|
||||
modern graphics hardware and are for that reason not yet supported in
|
||||
this snapshot. See the file TODO for a list of missing features.
|
||||
|
||||
|
||||
If you want GTK+ to draw window decorations for you, edit the file
|
||||
gtk/gtkwindow-decorate.c and uncomment the line that says
|
||||
#define DECORATE_WINDOWS.
|
||||
|
||||
|
||||
GTK+ application compiled with this version of GTK+ understand some
|
||||
additional command-line options special to the DirectFB GDK backend:
|
||||
|
||||
--transparent-unfocused Makes unfocused windows translucent.
|
||||
|
||||
--argb-font Use ARGB surfaces for fonts, needed for some
|
||||
broken hardware.
|
||||
|
||||
--glyph-surface-cache Lets you tune the size of the glyph cache,
|
||||
the default is to cache glyphs from 8 faces.
|
||||
|
||||
--enable-color-keying This option turns on a hack that does the
|
||||
following:
|
||||
|
||||
(1) It overrides the color used to draw the window background to
|
||||
gdk_directfb_bg_color as defined in gdkprivate-directfb.h.
|
||||
Note that the alpha value only takes effect if the window has
|
||||
an alpha channel.
|
||||
(2) It also draws all rectangles that are drawn in
|
||||
gdk_directfb_bg_color_key in this color (gdk_directfb_bg_color).
|
||||
|
||||
This feature can be used to create windows with translucent background.
|
||||
|
||||
Additionally all DirectFB command-line options as described in the
|
||||
directfbrc man-page are supported.
|
||||
|
||||
|
||||
This version of GTK+ also introduces two new functions that are special
|
||||
to the DirectFB version. You need to include gdk/gdkdirectfb.h to be
|
||||
able to use them.
|
||||
|
||||
gdk_directfb_window_set_opacity (GdkWindow *window, guchar opacity));
|
||||
|
||||
This function sets the overall opacity for toplevel GDK windows.
|
||||
|
||||
gdk_directfb_visual_by_format (DFBSurfacePixelFormat pixel_format);
|
||||
|
||||
This function returns a GdkVisual for a DirectFB pixelformat and
|
||||
thus gives you control over the window surface. If for example
|
||||
you want to create a window with alpha channel you can use some
|
||||
code like the following:
|
||||
|
||||
visual = gdk_directfb_visual_by_format (DSPF_ARGB);
|
||||
cmap = gdk_colormap_new (visual, FALSE);
|
||||
gtk_widget_push_colormap (cmap);
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_pop_colormap ();
|
||||
g_object_unref (cmap);
|
||||
|
||||
Don't use these functions if you want to be able to compile your
|
||||
application against GTK+-X11 or other GTK+ versions.
|
||||
|
||||
|
||||
If you are developing a GTK+ application for GTK+-DirectFB make sure
|
||||
you use the gtk+-directfb-2.0.pc file when calling pkg-config to get
|
||||
the correct compiler and linker flags for GTK+-DirectFB:
|
||||
|
||||
pkg-config --cflags gtk+-directfb-2.0
|
||||
pkg-config --libs gtk+-directfb-2.0
|
||||
|
||||
|
||||
See the file TODO for a list of unimplemented features.
|
||||
|
||||
|
||||
Detailed and up-to-date instructions on how to build a complete
|
||||
set of GTK-DFB libraries is avalable in the WIKI of the DirectFB project
|
||||
at the address
|
||||
http://www.directfb.org/wiki/index.php/Projects:GTK_on_DirectFB
|
||||
|
||||
|
||||
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.
|
||||
57
gdk/directfb/TODO
Normal file
57
gdk/directfb/TODO
Normal file
@@ -0,0 +1,57 @@
|
||||
A list of missing things and known bugs in the DirectFB GDK backend:
|
||||
|
||||
- Implement more GDK drawing functions. The most important ones
|
||||
(including XOR) do work now. Other drawing functions are rarely
|
||||
used and would need support from DirectFB.
|
||||
- Implemenent extended input devices. Shouldn't be too hard.
|
||||
- Look into DND and selections. DND seems to work inside one
|
||||
application at least.
|
||||
- Consider using the recently added glyph cache in PangoFT2 to
|
||||
implement our glyph surface cache. Probably limit the number
|
||||
of cached glyphs or the size of the surface cache instead of
|
||||
keeping all glyphs from a number of fonts in the cache.
|
||||
|
||||
Some things that will probably never happen:
|
||||
|
||||
- Line styles, joining and related stuff. We could use code from the
|
||||
LinuxFB backend but it seems to be bloat for most applications.
|
||||
Implementing dashed lines would probably make sense and shouldn't
|
||||
be too hard.
|
||||
- Bitmaps (they are partly supported) and masks. This stuff should
|
||||
be entirely deprecated. Use real alpha channels instead!
|
||||
|
||||
|
||||
This is a simple list of unimplemented function stubs and there file
|
||||
to see the implementation check the x11 dir.
|
||||
Its not started yet.
|
||||
|
||||
gdkcolor-directfb.c
|
||||
gdkcursor-directfb.c
|
||||
gdkdisplay-directfb.c
|
||||
gdkdnd-directfb.c
|
||||
gdkdrawable-directfb.c
|
||||
gdkevents-directfb.c
|
||||
gdkgc-directfb.c
|
||||
gdkgeometry-directfb.c
|
||||
gdkglobals-directfb.c
|
||||
gdkimage-directfb.c
|
||||
gdkim-directfb.c
|
||||
gdkinput-directfb.c
|
||||
gdkkeys-directfb.c
|
||||
gdk_keymap_lookup_key
|
||||
gdk_keyval_convert_case
|
||||
gdkmain-directfb.c
|
||||
gdkpixmap-directfb.c
|
||||
gdkproperty-directfb.c
|
||||
gdkscreen-directfb.c
|
||||
gdkselection-directfb.c
|
||||
gdkspawn-directfb.c
|
||||
gdkvisual-directfb.c
|
||||
gdkwindow-directfb.c
|
||||
gdkwindowid.c
|
||||
glyphsurfacecache.c
|
||||
|
||||
|
||||
NOTES:
|
||||
event filter callbacks missing see the x11 impl
|
||||
|
||||
42
gdk/directfb/gdkapplaunchcontext-directfb.c
Normal file
42
gdk/directfb/gdkapplaunchcontext-directfb.c
Normal file
@@ -0,0 +1,42 @@
|
||||
/* gdkapplaunchcontext-directfb.c - Gtk+ implementation for GAppLaunchContext
|
||||
|
||||
Copyright (C) 2007 Red Hat, Inc.
|
||||
|
||||
The Gnome Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The Gnome 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the Gnome Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA.
|
||||
|
||||
Author: Matthias Clasen <mclasen@redhat.com>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkapplaunchcontext.h"
|
||||
|
||||
|
||||
char *
|
||||
_gdk_windowing_get_startup_notify_id (GAppLaunchContext *context,
|
||||
GAppInfo *info,
|
||||
GList *files)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_windowing_launch_failed (GAppLaunchContext *context,
|
||||
const char *startup_notify_id)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
511
gdk/directfb/gdkcolor-directfb.c
Normal file
511
gdk/directfb/gdkcolor-directfb.c
Normal file
@@ -0,0 +1,511 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "gdkcolor.h"
|
||||
#include "gdkinternals.h"
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
GdkColorInfo *info;
|
||||
IDirectFBPalette *palette;
|
||||
} GdkColormapPrivateDirectFB;
|
||||
|
||||
|
||||
static void gdk_colormap_finalize (GObject *object);
|
||||
|
||||
static gint gdk_colormap_alloc_pseudocolors (GdkColormap *colormap,
|
||||
GdkColor *colors,
|
||||
gint ncolors,
|
||||
gboolean writeable,
|
||||
gboolean best_match,
|
||||
gboolean *success);
|
||||
static void gdk_directfb_allocate_color_key (GdkColormap *colormap);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GdkColormap, gdk_colormap, G_TYPE_OBJECT)
|
||||
|
||||
static void
|
||||
gdk_colormap_init (GdkColormap *colormap)
|
||||
{
|
||||
colormap->size = 0;
|
||||
colormap->colors = NULL;
|
||||
colormap->windowing_data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_colormap_class_init (GdkColormapClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = gdk_colormap_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_colormap_finalize (GObject *object)
|
||||
{
|
||||
GdkColormap *colormap = GDK_COLORMAP (object);
|
||||
GdkColormapPrivateDirectFB *private = colormap->windowing_data;
|
||||
|
||||
g_free (colormap->colors);
|
||||
|
||||
if (private)
|
||||
{
|
||||
g_free (private->info);
|
||||
|
||||
if (private->palette)
|
||||
private->palette->Release (private->palette);
|
||||
|
||||
g_free (private);
|
||||
colormap->windowing_data = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (gdk_colormap_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
GdkColormap*
|
||||
gdk_colormap_new (GdkVisual *visual,
|
||||
gboolean private_cmap)
|
||||
{
|
||||
GdkColormap *colormap;
|
||||
gint i;
|
||||
|
||||
g_return_val_if_fail (visual != NULL, NULL);
|
||||
|
||||
colormap = g_object_new (gdk_colormap_get_type (), NULL);
|
||||
colormap->visual = visual;
|
||||
colormap->size = visual->colormap_size;
|
||||
|
||||
switch (visual->type)
|
||||
{
|
||||
case GDK_VISUAL_PSEUDO_COLOR:
|
||||
{
|
||||
IDirectFB *dfb = _gdk_display->directfb;
|
||||
IDirectFBPalette *palette;
|
||||
GdkColormapPrivateDirectFB *private;
|
||||
DFBPaletteDescription dsc;
|
||||
|
||||
dsc.flags = DPDESC_SIZE;
|
||||
dsc.size = colormap->size;
|
||||
if (!dfb->CreatePalette (dfb, &dsc, &palette))
|
||||
return NULL;
|
||||
|
||||
colormap->colors = g_new0 (GdkColor, colormap->size);
|
||||
|
||||
private = g_new0 (GdkColormapPrivateDirectFB, 1);
|
||||
private->info = g_new0 (GdkColorInfo, colormap->size);
|
||||
|
||||
if (visual == gdk_visual_get_system())
|
||||
{
|
||||
/* save the first (transparent) palette entry */
|
||||
private->info[0].ref_count++;
|
||||
}
|
||||
|
||||
private->palette = palette;
|
||||
|
||||
colormap->windowing_data = private;
|
||||
|
||||
gdk_directfb_allocate_color_key (colormap);
|
||||
}
|
||||
break;
|
||||
|
||||
case GDK_VISUAL_STATIC_COLOR:
|
||||
colormap->colors = g_new0 (GdkColor, colormap->size);
|
||||
for (i = 0; i < colormap->size; i++)
|
||||
{
|
||||
GdkColor *color = colormap->colors + i;
|
||||
|
||||
color->pixel = i;
|
||||
color->red = (i & 0xE0) << 8 | (i & 0xE0);
|
||||
color->green = (i & 0x1C) << 11 | (i & 0x1C) << 3;
|
||||
color->blue = (i & 0x03) << 14 | (i & 0x03) << 6;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return colormap;
|
||||
}
|
||||
|
||||
GdkScreen*
|
||||
gdk_colormap_get_screen (GdkColormap *cmap)
|
||||
{
|
||||
return _gdk_screen;
|
||||
}
|
||||
|
||||
GdkColormap*
|
||||
gdk_screen_get_system_colormap (GdkScreen *screen)
|
||||
{
|
||||
static GdkColormap *colormap = NULL;
|
||||
|
||||
if (!colormap)
|
||||
{
|
||||
GdkVisual *visual = gdk_visual_get_system();
|
||||
|
||||
/* special case PSEUDO_COLOR to use the system palette */
|
||||
if (visual->type == GDK_VISUAL_PSEUDO_COLOR)
|
||||
{
|
||||
GdkColormapPrivateDirectFB *private;
|
||||
IDirectFBSurface *surface;
|
||||
|
||||
colormap = g_object_new (gdk_colormap_get_type (), NULL);
|
||||
|
||||
colormap->visual = visual;
|
||||
colormap->size = visual->colormap_size;
|
||||
colormap->colors = g_new0 (GdkColor, colormap->size);
|
||||
|
||||
private = g_new0 (GdkColormapPrivateDirectFB, 1);
|
||||
private->info = g_new0 (GdkColorInfo, colormap->size);
|
||||
|
||||
surface=GDK_WINDOW_IMPL_DIRECTFB (
|
||||
GDK_WINDOW_OBJECT (_gdk_parent_root)->impl)->drawable.surface;
|
||||
surface->GetPalette (surface, &private->palette);
|
||||
|
||||
colormap->windowing_data = private;
|
||||
|
||||
/* save the first (transparent) palette entry */
|
||||
private->info[0].ref_count++;
|
||||
|
||||
gdk_directfb_allocate_color_key (colormap);
|
||||
}
|
||||
else
|
||||
{
|
||||
colormap = gdk_colormap_new (visual, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
return colormap;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_colormap_free_colors (GdkColormap *colormap,
|
||||
const GdkColor *colors,
|
||||
gint ncolors)
|
||||
{
|
||||
GdkColormapPrivateDirectFB *private;
|
||||
gint i;
|
||||
|
||||
g_return_if_fail (GDK_IS_COLORMAP (colormap));
|
||||
g_return_if_fail (colors != NULL);
|
||||
|
||||
private = colormap->windowing_data;
|
||||
if (!private)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ncolors; i++)
|
||||
{
|
||||
gint index = colors[i].pixel;
|
||||
|
||||
if (index < 0 || index >= colormap->size)
|
||||
continue;
|
||||
|
||||
if (private->info[index].ref_count)
|
||||
private->info[index].ref_count--;
|
||||
}
|
||||
}
|
||||
|
||||
gint
|
||||
gdk_colormap_alloc_colors (GdkColormap *colormap,
|
||||
GdkColor *colors,
|
||||
gint ncolors,
|
||||
gboolean writeable,
|
||||
gboolean best_match,
|
||||
gboolean *success)
|
||||
{
|
||||
GdkVisual *visual;
|
||||
gint i;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_COLORMAP (colormap), 0);
|
||||
g_return_val_if_fail (colors != NULL, 0);
|
||||
g_return_val_if_fail (success != NULL, 0);
|
||||
|
||||
switch (colormap->visual->type)
|
||||
{
|
||||
case GDK_VISUAL_TRUE_COLOR:
|
||||
visual = colormap->visual;
|
||||
|
||||
for (i = 0; i < ncolors; i++)
|
||||
{
|
||||
colors[i].pixel =
|
||||
(((colors[i].red
|
||||
>> (16 - visual->red_prec)) << visual->red_shift) +
|
||||
((colors[i].green
|
||||
>> (16 - visual->green_prec)) << visual->green_shift) +
|
||||
((colors[i].blue
|
||||
>> (16 - visual->blue_prec)) << visual->blue_shift));
|
||||
|
||||
success[i] = TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case GDK_VISUAL_PSEUDO_COLOR:
|
||||
return gdk_colormap_alloc_pseudocolors (colormap,
|
||||
colors, ncolors,
|
||||
writeable, best_match,
|
||||
success);
|
||||
break;
|
||||
|
||||
case GDK_VISUAL_STATIC_COLOR:
|
||||
for (i = 0; i < ncolors; i++)
|
||||
{
|
||||
colors[i].pixel = (((colors[i].red & 0xE000) >> 8) |
|
||||
((colors[i].green & 0xE000) >> 11) |
|
||||
((colors[i].blue & 0xC000) >> 14));
|
||||
success[i] = TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
for (i = 0; i < ncolors; i++)
|
||||
success[i] = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_colormap_query_color (GdkColormap *colormap,
|
||||
gulong pixel,
|
||||
GdkColor *result)
|
||||
{
|
||||
GdkVisual *visual;
|
||||
|
||||
g_return_if_fail (GDK_IS_COLORMAP (colormap));
|
||||
|
||||
visual = gdk_colormap_get_visual (colormap);
|
||||
|
||||
switch (visual->type)
|
||||
{
|
||||
case GDK_VISUAL_TRUE_COLOR:
|
||||
result->red = 65535. *
|
||||
(gdouble)((pixel & visual->red_mask) >> visual->red_shift) /
|
||||
((1 << visual->red_prec) - 1);
|
||||
|
||||
result->green = 65535. *
|
||||
(gdouble)((pixel & visual->green_mask) >> visual->green_shift) /
|
||||
((1 << visual->green_prec) - 1);
|
||||
|
||||
result->blue = 65535. *
|
||||
(gdouble)((pixel & visual->blue_mask) >> visual->blue_shift) /
|
||||
((1 << visual->blue_prec) - 1);
|
||||
break;
|
||||
|
||||
case GDK_VISUAL_STATIC_COLOR:
|
||||
case GDK_VISUAL_PSEUDO_COLOR:
|
||||
if (pixel >= 0 && pixel < colormap->size)
|
||||
{
|
||||
result->red = colormap->colors[pixel].red;
|
||||
result->green = colormap->colors[pixel].green;
|
||||
result->blue = colormap->colors[pixel].blue;
|
||||
}
|
||||
else
|
||||
g_warning ("gdk_colormap_query_color: pixel outside colormap");
|
||||
break;
|
||||
|
||||
case GDK_VISUAL_DIRECT_COLOR:
|
||||
case GDK_VISUAL_GRAYSCALE:
|
||||
case GDK_VISUAL_STATIC_GRAY:
|
||||
/* unsupported */
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
IDirectFBPalette *
|
||||
gdk_directfb_colormap_get_palette (GdkColormap *colormap)
|
||||
{
|
||||
GdkColormapPrivateDirectFB *private;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_COLORMAP (colormap), NULL);
|
||||
|
||||
private = colormap->windowing_data;
|
||||
|
||||
if (private && private->palette)
|
||||
return private->palette;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
gdk_colormap_alloc_pseudocolors (GdkColormap *colormap,
|
||||
GdkColor *colors,
|
||||
gint ncolors,
|
||||
gboolean writeable,
|
||||
gboolean best_match,
|
||||
gboolean *success)
|
||||
{
|
||||
GdkColormapPrivateDirectFB *private = colormap->windowing_data;
|
||||
IDirectFBPalette *palette;
|
||||
gint i, j;
|
||||
gint remaining = ncolors;
|
||||
|
||||
palette = private->palette;
|
||||
|
||||
for (i = 0; i < ncolors; i++)
|
||||
{
|
||||
guint index;
|
||||
DFBColor lookup = { 0xFF,
|
||||
colors[i].red >> 8,
|
||||
colors[i].green >> 8,
|
||||
colors[i].blue >> 8 };
|
||||
|
||||
success[i] = FALSE;
|
||||
|
||||
if (writeable)
|
||||
{
|
||||
/* look for an empty slot and allocate a new color */
|
||||
for (j = 0; j < colormap->size; j++)
|
||||
if (private->info[j].ref_count == 0)
|
||||
{
|
||||
index = j;
|
||||
|
||||
palette->SetEntries (palette, &lookup, 1, index);
|
||||
|
||||
private->info[index].flags = GDK_COLOR_WRITEABLE;
|
||||
|
||||
colors[i].pixel = index;
|
||||
colormap->colors[index] = colors[i];
|
||||
|
||||
goto allocated;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
palette->FindBestMatch (palette,
|
||||
lookup.r, lookup.g, lookup.b, lookup.a,
|
||||
&index);
|
||||
|
||||
if (index < 0 || index > colormap->size)
|
||||
continue;
|
||||
|
||||
/* check if we have an exact (non-writeable) match */
|
||||
if (private->info[index].ref_count &&
|
||||
!(private->info[index].flags & GDK_COLOR_WRITEABLE))
|
||||
{
|
||||
DFBColor entry;
|
||||
|
||||
palette->GetEntries (palette, &entry, 1, index);
|
||||
|
||||
if (entry.a == 0xFF &&
|
||||
entry.r == lookup.r && entry.g == lookup.g && entry.b == lookup.b)
|
||||
{
|
||||
colors[i].pixel = index;
|
||||
|
||||
goto allocated;
|
||||
}
|
||||
}
|
||||
|
||||
/* look for an empty slot and allocate a new color */
|
||||
for (j = 0; j < colormap->size; j++)
|
||||
if (private->info[j].ref_count == 0)
|
||||
{
|
||||
index = j;
|
||||
|
||||
palette->SetEntries (palette, &lookup, 1, index);
|
||||
private->info[index].flags = 0;
|
||||
|
||||
colors[i].pixel = index;
|
||||
colormap->colors[index] = colors[i];
|
||||
|
||||
goto allocated;
|
||||
}
|
||||
|
||||
/* if that failed, use the best match */
|
||||
if (best_match &&
|
||||
!(private->info[index].flags & GDK_COLOR_WRITEABLE))
|
||||
{
|
||||
#if 0
|
||||
g_print ("best match for (%d %d %d) ",
|
||||
colormap->colors[index].red,
|
||||
colormap->colors[index].green,
|
||||
colormap->colors[index].blue);
|
||||
#endif
|
||||
|
||||
colors[i].pixel = index;
|
||||
|
||||
goto allocated;
|
||||
}
|
||||
}
|
||||
|
||||
/* if we got here, all attempts failed */
|
||||
continue;
|
||||
|
||||
allocated:
|
||||
private->info[index].ref_count++;
|
||||
|
||||
#if 0
|
||||
g_print ("cmap %p: allocated (%d %d %d) %d [%d]\n", colormap,
|
||||
colors[i].red, colors[i].green, colors[i].blue, colors[i].pixel,
|
||||
private->info[index].ref_count);
|
||||
#endif
|
||||
|
||||
success[i] = TRUE;
|
||||
remaining--;
|
||||
}
|
||||
|
||||
return remaining;
|
||||
}
|
||||
|
||||
/* dirty hack for color_keying */
|
||||
static void
|
||||
gdk_directfb_allocate_color_key (GdkColormap *colormap)
|
||||
{
|
||||
GdkColormapPrivateDirectFB *private = colormap->windowing_data;
|
||||
IDirectFBPalette *palette = private->palette;
|
||||
|
||||
if (!gdk_directfb_enable_color_keying)
|
||||
return;
|
||||
|
||||
palette->SetEntries (palette, &gdk_directfb_bg_color, 1, 255);
|
||||
|
||||
colormap->colors[255].pixel = 255;
|
||||
colormap->colors[255].red = ((gdk_directfb_bg_color_key.r << 8)
|
||||
| gdk_directfb_bg_color_key.r);
|
||||
colormap->colors[255].green = ((gdk_directfb_bg_color_key.g << 8)
|
||||
| gdk_directfb_bg_color_key.g);
|
||||
colormap->colors[255].blue = ((gdk_directfb_bg_color_key.b << 8)
|
||||
| gdk_directfb_bg_color_key.b);
|
||||
|
||||
private->info[255].ref_count++;
|
||||
}
|
||||
546
gdk/directfb/gdkcursor-directfb.c
Normal file
546
gdk/directfb/gdkcursor-directfb.c
Normal file
@@ -0,0 +1,546 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
#include "gdkcursor.h"
|
||||
|
||||
#include "x-cursors.xbm"
|
||||
|
||||
#include <directfb_version.h>
|
||||
|
||||
|
||||
static struct {
|
||||
const guchar *bits;
|
||||
int width, height, hotx, hoty;
|
||||
GdkCursor *cursor;
|
||||
} stock_cursors[] = {
|
||||
{X_cursor_bits, X_cursor_width, X_cursor_height, X_cursor_x_hot, X_cursor_y_hot},
|
||||
{X_cursor_mask_bits, X_cursor_mask_width, X_cursor_mask_height, X_cursor_mask_x_hot, X_cursor_mask_y_hot},
|
||||
{arrow_bits, arrow_width, arrow_height, arrow_x_hot, arrow_y_hot},
|
||||
{arrow_mask_bits, arrow_mask_width, arrow_mask_height, arrow_mask_x_hot, arrow_mask_y_hot},
|
||||
{based_arrow_down_bits, based_arrow_down_width, based_arrow_down_height, based_arrow_down_x_hot, based_arrow_down_y_hot},
|
||||
{based_arrow_down_mask_bits, based_arrow_down_mask_width, based_arrow_down_mask_height, based_arrow_down_mask_x_hot, based_arrow_down_mask_y_hot},
|
||||
{based_arrow_up_bits, based_arrow_up_width, based_arrow_up_height, based_arrow_up_x_hot, based_arrow_up_y_hot},
|
||||
{based_arrow_up_mask_bits, based_arrow_up_mask_width, based_arrow_up_mask_height, based_arrow_up_mask_x_hot, based_arrow_up_mask_y_hot},
|
||||
{boat_bits, boat_width, boat_height, boat_x_hot, boat_y_hot},
|
||||
{boat_mask_bits, boat_mask_width, boat_mask_height, boat_mask_x_hot, boat_mask_y_hot},
|
||||
{bogosity_bits, bogosity_width, bogosity_height, bogosity_x_hot, bogosity_y_hot},
|
||||
{bogosity_mask_bits, bogosity_mask_width, bogosity_mask_height, bogosity_mask_x_hot, bogosity_mask_y_hot},
|
||||
{bottom_left_corner_bits, bottom_left_corner_width, bottom_left_corner_height, bottom_left_corner_x_hot, bottom_left_corner_y_hot},
|
||||
{bottom_left_corner_mask_bits, bottom_left_corner_mask_width, bottom_left_corner_mask_height, bottom_left_corner_mask_x_hot, bottom_left_corner_mask_y_hot},
|
||||
{bottom_right_corner_bits, bottom_right_corner_width, bottom_right_corner_height, bottom_right_corner_x_hot, bottom_right_corner_y_hot},
|
||||
{bottom_right_corner_mask_bits, bottom_right_corner_mask_width, bottom_right_corner_mask_height, bottom_right_corner_mask_x_hot, bottom_right_corner_mask_y_hot},
|
||||
{bottom_side_bits, bottom_side_width, bottom_side_height, bottom_side_x_hot, bottom_side_y_hot},
|
||||
{bottom_side_mask_bits, bottom_side_mask_width, bottom_side_mask_height, bottom_side_mask_x_hot, bottom_side_mask_y_hot},
|
||||
{bottom_tee_bits, bottom_tee_width, bottom_tee_height, bottom_tee_x_hot, bottom_tee_y_hot},
|
||||
{bottom_tee_mask_bits, bottom_tee_mask_width, bottom_tee_mask_height, bottom_tee_mask_x_hot, bottom_tee_mask_y_hot},
|
||||
{box_spiral_bits, box_spiral_width, box_spiral_height, box_spiral_x_hot, box_spiral_y_hot},
|
||||
{box_spiral_mask_bits, box_spiral_mask_width, box_spiral_mask_height, box_spiral_mask_x_hot, box_spiral_mask_y_hot},
|
||||
{center_ptr_bits, center_ptr_width, center_ptr_height, center_ptr_x_hot, center_ptr_y_hot},
|
||||
{center_ptr_mask_bits, center_ptr_mask_width, center_ptr_mask_height, center_ptr_mask_x_hot, center_ptr_mask_y_hot},
|
||||
{circle_bits, circle_width, circle_height, circle_x_hot, circle_y_hot},
|
||||
{circle_mask_bits, circle_mask_width, circle_mask_height, circle_mask_x_hot, circle_mask_y_hot},
|
||||
{clock_bits, clock_width, clock_height, clock_x_hot, clock_y_hot},
|
||||
{clock_mask_bits, clock_mask_width, clock_mask_height, clock_mask_x_hot, clock_mask_y_hot},
|
||||
{coffee_mug_bits, coffee_mug_width, coffee_mug_height, coffee_mug_x_hot, coffee_mug_y_hot},
|
||||
{coffee_mug_mask_bits, coffee_mug_mask_width, coffee_mug_mask_height, coffee_mug_mask_x_hot, coffee_mug_mask_y_hot},
|
||||
{cross_bits, cross_width, cross_height, cross_x_hot, cross_y_hot},
|
||||
{cross_mask_bits, cross_mask_width, cross_mask_height, cross_mask_x_hot, cross_mask_y_hot},
|
||||
{cross_reverse_bits, cross_reverse_width, cross_reverse_height, cross_reverse_x_hot, cross_reverse_y_hot},
|
||||
{cross_reverse_mask_bits, cross_reverse_mask_width, cross_reverse_mask_height, cross_reverse_mask_x_hot, cross_reverse_mask_y_hot},
|
||||
{crosshair_bits, crosshair_width, crosshair_height, crosshair_x_hot, crosshair_y_hot},
|
||||
{crosshair_mask_bits, crosshair_mask_width, crosshair_mask_height, crosshair_mask_x_hot, crosshair_mask_y_hot},
|
||||
{diamond_cross_bits, diamond_cross_width, diamond_cross_height, diamond_cross_x_hot, diamond_cross_y_hot},
|
||||
{diamond_cross_mask_bits, diamond_cross_mask_width, diamond_cross_mask_height, diamond_cross_mask_x_hot, diamond_cross_mask_y_hot},
|
||||
{dot_bits, dot_width, dot_height, dot_x_hot, dot_y_hot},
|
||||
{dot_mask_bits, dot_mask_width, dot_mask_height, dot_mask_x_hot, dot_mask_y_hot},
|
||||
{dotbox_bits, dotbox_width, dotbox_height, dotbox_x_hot, dotbox_y_hot},
|
||||
{dotbox_mask_bits, dotbox_mask_width, dotbox_mask_height, dotbox_mask_x_hot, dotbox_mask_y_hot},
|
||||
{double_arrow_bits, double_arrow_width, double_arrow_height, double_arrow_x_hot, double_arrow_y_hot},
|
||||
{double_arrow_mask_bits, double_arrow_mask_width, double_arrow_mask_height, double_arrow_mask_x_hot, double_arrow_mask_y_hot},
|
||||
{draft_large_bits, draft_large_width, draft_large_height, draft_large_x_hot, draft_large_y_hot},
|
||||
{draft_large_mask_bits, draft_large_mask_width, draft_large_mask_height, draft_large_mask_x_hot, draft_large_mask_y_hot},
|
||||
{draft_small_bits, draft_small_width, draft_small_height, draft_small_x_hot, draft_small_y_hot},
|
||||
{draft_small_mask_bits, draft_small_mask_width, draft_small_mask_height, draft_small_mask_x_hot, draft_small_mask_y_hot},
|
||||
{draped_box_bits, draped_box_width, draped_box_height, draped_box_x_hot, draped_box_y_hot},
|
||||
{draped_box_mask_bits, draped_box_mask_width, draped_box_mask_height, draped_box_mask_x_hot, draped_box_mask_y_hot},
|
||||
{exchange_bits, exchange_width, exchange_height, exchange_x_hot, exchange_y_hot},
|
||||
{exchange_mask_bits, exchange_mask_width, exchange_mask_height, exchange_mask_x_hot, exchange_mask_y_hot},
|
||||
{fleur_bits, fleur_width, fleur_height, fleur_x_hot, fleur_y_hot},
|
||||
{fleur_mask_bits, fleur_mask_width, fleur_mask_height, fleur_mask_x_hot, fleur_mask_y_hot},
|
||||
{gobbler_bits, gobbler_width, gobbler_height, gobbler_x_hot, gobbler_y_hot},
|
||||
{gobbler_mask_bits, gobbler_mask_width, gobbler_mask_height, gobbler_mask_x_hot, gobbler_mask_y_hot},
|
||||
{gumby_bits, gumby_width, gumby_height, gumby_x_hot, gumby_y_hot},
|
||||
{gumby_mask_bits, gumby_mask_width, gumby_mask_height, gumby_mask_x_hot, gumby_mask_y_hot},
|
||||
{hand1_bits, hand1_width, hand1_height, hand1_x_hot, hand1_y_hot},
|
||||
{hand1_mask_bits, hand1_mask_width, hand1_mask_height, hand1_mask_x_hot, hand1_mask_y_hot},
|
||||
{hand2_bits, hand2_width, hand2_height, hand2_x_hot, hand2_y_hot},
|
||||
{hand2_mask_bits, hand2_mask_width, hand2_mask_height, hand2_mask_x_hot, hand2_mask_y_hot},
|
||||
{heart_bits, heart_width, heart_height, heart_x_hot, heart_y_hot},
|
||||
{heart_mask_bits, heart_mask_width, heart_mask_height, heart_mask_x_hot, heart_mask_y_hot},
|
||||
{icon_bits, icon_width, icon_height, icon_x_hot, icon_y_hot},
|
||||
{icon_mask_bits, icon_mask_width, icon_mask_height, icon_mask_x_hot, icon_mask_y_hot},
|
||||
{iron_cross_bits, iron_cross_width, iron_cross_height, iron_cross_x_hot, iron_cross_y_hot},
|
||||
{iron_cross_mask_bits, iron_cross_mask_width, iron_cross_mask_height, iron_cross_mask_x_hot, iron_cross_mask_y_hot},
|
||||
{left_ptr_bits, left_ptr_width, left_ptr_height, left_ptr_x_hot, left_ptr_y_hot},
|
||||
{left_ptr_mask_bits, left_ptr_mask_width, left_ptr_mask_height, left_ptr_mask_x_hot, left_ptr_mask_y_hot},
|
||||
{left_side_bits, left_side_width, left_side_height, left_side_x_hot, left_side_y_hot},
|
||||
{left_side_mask_bits, left_side_mask_width, left_side_mask_height, left_side_mask_x_hot, left_side_mask_y_hot},
|
||||
{left_tee_bits, left_tee_width, left_tee_height, left_tee_x_hot, left_tee_y_hot},
|
||||
{left_tee_mask_bits, left_tee_mask_width, left_tee_mask_height, left_tee_mask_x_hot, left_tee_mask_y_hot},
|
||||
{leftbutton_bits, leftbutton_width, leftbutton_height, leftbutton_x_hot, leftbutton_y_hot},
|
||||
{leftbutton_mask_bits, leftbutton_mask_width, leftbutton_mask_height, leftbutton_mask_x_hot, leftbutton_mask_y_hot},
|
||||
{ll_angle_bits, ll_angle_width, ll_angle_height, ll_angle_x_hot, ll_angle_y_hot},
|
||||
{ll_angle_mask_bits, ll_angle_mask_width, ll_angle_mask_height, ll_angle_mask_x_hot, ll_angle_mask_y_hot},
|
||||
{lr_angle_bits, lr_angle_width, lr_angle_height, lr_angle_x_hot, lr_angle_y_hot},
|
||||
{lr_angle_mask_bits, lr_angle_mask_width, lr_angle_mask_height, lr_angle_mask_x_hot, lr_angle_mask_y_hot},
|
||||
{man_bits, man_width, man_height, man_x_hot, man_y_hot},
|
||||
{man_mask_bits, man_mask_width, man_mask_height, man_mask_x_hot, man_mask_y_hot},
|
||||
{middlebutton_bits, middlebutton_width, middlebutton_height, middlebutton_x_hot, middlebutton_y_hot},
|
||||
{middlebutton_mask_bits, middlebutton_mask_width, middlebutton_mask_height, middlebutton_mask_x_hot, middlebutton_mask_y_hot},
|
||||
{mouse_bits, mouse_width, mouse_height, mouse_x_hot, mouse_y_hot},
|
||||
{mouse_mask_bits, mouse_mask_width, mouse_mask_height, mouse_mask_x_hot, mouse_mask_y_hot},
|
||||
{pencil_bits, pencil_width, pencil_height, pencil_x_hot, pencil_y_hot},
|
||||
{pencil_mask_bits, pencil_mask_width, pencil_mask_height, pencil_mask_x_hot, pencil_mask_y_hot},
|
||||
{pirate_bits, pirate_width, pirate_height, pirate_x_hot, pirate_y_hot},
|
||||
{pirate_mask_bits, pirate_mask_width, pirate_mask_height, pirate_mask_x_hot, pirate_mask_y_hot},
|
||||
{plus_bits, plus_width, plus_height, plus_x_hot, plus_y_hot},
|
||||
{plus_mask_bits, plus_mask_width, plus_mask_height, plus_mask_x_hot, plus_mask_y_hot},
|
||||
{question_arrow_bits, question_arrow_width, question_arrow_height, question_arrow_x_hot, question_arrow_y_hot},
|
||||
{question_arrow_mask_bits, question_arrow_mask_width, question_arrow_mask_height, question_arrow_mask_x_hot, question_arrow_mask_y_hot},
|
||||
{right_ptr_bits, right_ptr_width, right_ptr_height, right_ptr_x_hot, right_ptr_y_hot},
|
||||
{right_ptr_mask_bits, right_ptr_mask_width, right_ptr_mask_height, right_ptr_mask_x_hot, right_ptr_mask_y_hot},
|
||||
{right_side_bits, right_side_width, right_side_height, right_side_x_hot, right_side_y_hot},
|
||||
{right_side_mask_bits, right_side_mask_width, right_side_mask_height, right_side_mask_x_hot, right_side_mask_y_hot},
|
||||
{right_tee_bits, right_tee_width, right_tee_height, right_tee_x_hot, right_tee_y_hot},
|
||||
{right_tee_mask_bits, right_tee_mask_width, right_tee_mask_height, right_tee_mask_x_hot, right_tee_mask_y_hot},
|
||||
{rightbutton_bits, rightbutton_width, rightbutton_height, rightbutton_x_hot, rightbutton_y_hot},
|
||||
{rightbutton_mask_bits, rightbutton_mask_width, rightbutton_mask_height, rightbutton_mask_x_hot, rightbutton_mask_y_hot},
|
||||
{rtl_logo_bits, rtl_logo_width, rtl_logo_height, rtl_logo_x_hot, rtl_logo_y_hot},
|
||||
{rtl_logo_mask_bits, rtl_logo_mask_width, rtl_logo_mask_height, rtl_logo_mask_x_hot, rtl_logo_mask_y_hot},
|
||||
{sailboat_bits, sailboat_width, sailboat_height, sailboat_x_hot, sailboat_y_hot},
|
||||
{sailboat_mask_bits, sailboat_mask_width, sailboat_mask_height, sailboat_mask_x_hot, sailboat_mask_y_hot},
|
||||
{sb_down_arrow_bits, sb_down_arrow_width, sb_down_arrow_height, sb_down_arrow_x_hot, sb_down_arrow_y_hot},
|
||||
{sb_down_arrow_mask_bits, sb_down_arrow_mask_width, sb_down_arrow_mask_height, sb_down_arrow_mask_x_hot, sb_down_arrow_mask_y_hot},
|
||||
{sb_h_double_arrow_bits, sb_h_double_arrow_width, sb_h_double_arrow_height, sb_h_double_arrow_x_hot, sb_h_double_arrow_y_hot},
|
||||
{sb_h_double_arrow_mask_bits, sb_h_double_arrow_mask_width, sb_h_double_arrow_mask_height, sb_h_double_arrow_mask_x_hot, sb_h_double_arrow_mask_y_hot},
|
||||
{sb_left_arrow_bits, sb_left_arrow_width, sb_left_arrow_height, sb_left_arrow_x_hot, sb_left_arrow_y_hot},
|
||||
{sb_left_arrow_mask_bits, sb_left_arrow_mask_width, sb_left_arrow_mask_height, sb_left_arrow_mask_x_hot, sb_left_arrow_mask_y_hot},
|
||||
{sb_right_arrow_bits, sb_right_arrow_width, sb_right_arrow_height, sb_right_arrow_x_hot, sb_right_arrow_y_hot},
|
||||
{sb_right_arrow_mask_bits, sb_right_arrow_mask_width, sb_right_arrow_mask_height, sb_right_arrow_mask_x_hot, sb_right_arrow_mask_y_hot},
|
||||
{sb_up_arrow_bits, sb_up_arrow_width, sb_up_arrow_height, sb_up_arrow_x_hot, sb_up_arrow_y_hot},
|
||||
{sb_up_arrow_mask_bits, sb_up_arrow_mask_width, sb_up_arrow_mask_height, sb_up_arrow_mask_x_hot, sb_up_arrow_mask_y_hot},
|
||||
{sb_v_double_arrow_bits, sb_v_double_arrow_width, sb_v_double_arrow_height, sb_v_double_arrow_x_hot, sb_v_double_arrow_y_hot},
|
||||
{sb_v_double_arrow_mask_bits, sb_v_double_arrow_mask_width, sb_v_double_arrow_mask_height, sb_v_double_arrow_mask_x_hot, sb_v_double_arrow_mask_y_hot},
|
||||
{shuttle_bits, shuttle_width, shuttle_height, shuttle_x_hot, shuttle_y_hot},
|
||||
{shuttle_mask_bits, shuttle_mask_width, shuttle_mask_height, shuttle_mask_x_hot, shuttle_mask_y_hot},
|
||||
{sizing_bits, sizing_width, sizing_height, sizing_x_hot, sizing_y_hot},
|
||||
{sizing_mask_bits, sizing_mask_width, sizing_mask_height, sizing_mask_x_hot, sizing_mask_y_hot},
|
||||
{spider_bits, spider_width, spider_height, spider_x_hot, spider_y_hot},
|
||||
{spider_mask_bits, spider_mask_width, spider_mask_height, spider_mask_x_hot, spider_mask_y_hot},
|
||||
{spraycan_bits, spraycan_width, spraycan_height, spraycan_x_hot, spraycan_y_hot},
|
||||
{spraycan_mask_bits, spraycan_mask_width, spraycan_mask_height, spraycan_mask_x_hot, spraycan_mask_y_hot},
|
||||
{star_bits, star_width, star_height, star_x_hot, star_y_hot},
|
||||
{star_mask_bits, star_mask_width, star_mask_height, star_mask_x_hot, star_mask_y_hot},
|
||||
{target_bits, target_width, target_height, target_x_hot, target_y_hot},
|
||||
{target_mask_bits, target_mask_width, target_mask_height, target_mask_x_hot, target_mask_y_hot},
|
||||
{tcross_bits, tcross_width, tcross_height, tcross_x_hot, tcross_y_hot},
|
||||
{tcross_mask_bits, tcross_mask_width, tcross_mask_height, tcross_mask_x_hot, tcross_mask_y_hot},
|
||||
{top_left_arrow_bits, top_left_arrow_width, top_left_arrow_height, top_left_arrow_x_hot, top_left_arrow_y_hot},
|
||||
{top_left_arrow_mask_bits, top_left_arrow_mask_width, top_left_arrow_mask_height, top_left_arrow_mask_x_hot, top_left_arrow_mask_y_hot},
|
||||
{top_left_corner_bits, top_left_corner_width, top_left_corner_height, top_left_corner_x_hot, top_left_corner_y_hot},
|
||||
{top_left_corner_mask_bits, top_left_corner_mask_width, top_left_corner_mask_height, top_left_corner_mask_x_hot, top_left_corner_mask_y_hot},
|
||||
{top_right_corner_bits, top_right_corner_width, top_right_corner_height, top_right_corner_x_hot, top_right_corner_y_hot},
|
||||
{top_right_corner_mask_bits, top_right_corner_mask_width, top_right_corner_mask_height, top_right_corner_mask_x_hot, top_right_corner_mask_y_hot},
|
||||
{top_side_bits, top_side_width, top_side_height, top_side_x_hot, top_side_y_hot},
|
||||
{top_side_mask_bits, top_side_mask_width, top_side_mask_height, top_side_mask_x_hot, top_side_mask_y_hot},
|
||||
{top_tee_bits, top_tee_width, top_tee_height, top_tee_x_hot, top_tee_y_hot},
|
||||
{top_tee_mask_bits, top_tee_mask_width, top_tee_mask_height, top_tee_mask_x_hot, top_tee_mask_y_hot},
|
||||
{trek_bits, trek_width, trek_height, trek_x_hot, trek_y_hot},
|
||||
{trek_mask_bits, trek_mask_width, trek_mask_height, trek_mask_x_hot, trek_mask_y_hot},
|
||||
{ul_angle_bits, ul_angle_width, ul_angle_height, ul_angle_x_hot, ul_angle_y_hot},
|
||||
{ul_angle_mask_bits, ul_angle_mask_width, ul_angle_mask_height, ul_angle_mask_x_hot, ul_angle_mask_y_hot},
|
||||
{umbrella_bits, umbrella_width, umbrella_height, umbrella_x_hot, umbrella_y_hot},
|
||||
{umbrella_mask_bits, umbrella_mask_width, umbrella_mask_height, umbrella_mask_x_hot, umbrella_mask_y_hot},
|
||||
{ur_angle_bits, ur_angle_width, ur_angle_height, ur_angle_x_hot, ur_angle_y_hot},
|
||||
{ur_angle_mask_bits, ur_angle_mask_width, ur_angle_mask_height, ur_angle_mask_x_hot, ur_angle_mask_y_hot},
|
||||
{watch_bits, watch_width, watch_height, watch_x_hot, watch_y_hot},
|
||||
{watch_mask_bits, watch_mask_width, watch_mask_height, watch_mask_x_hot, watch_mask_y_hot},
|
||||
{xterm_bits, xterm_width, xterm_height, xterm_x_hot, xterm_y_hot},
|
||||
{xterm_mask_bits, xterm_mask_width, xterm_mask_height, xterm_mask_x_hot, xterm_mask_y_hot}
|
||||
};
|
||||
|
||||
GdkCursor *
|
||||
gdk_cursor_new_for_display (GdkDisplay *display,GdkCursorType cursor_type)
|
||||
{
|
||||
GdkCursor *cursor;
|
||||
GdkDisplayDFB *dfb_display = GDK_DISPLAY_DFB(display);
|
||||
|
||||
if (cursor_type >= sizeof(stock_cursors)/sizeof(stock_cursors[0]))
|
||||
return NULL;
|
||||
|
||||
cursor = stock_cursors[cursor_type].cursor;
|
||||
if (!cursor)
|
||||
{
|
||||
GdkCursorDirectFB *private;
|
||||
DFBResult ret;
|
||||
IDirectFBSurface *temp;
|
||||
IDirectFBSurface *shape;
|
||||
|
||||
int width = stock_cursors[cursor_type+1].width;
|
||||
int height = stock_cursors[cursor_type+1].height;
|
||||
|
||||
temp =gdk_display_dfb_create_surface(dfb_display,DSPF_ARGB,width,height);
|
||||
|
||||
if (!temp)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 *dst;
|
||||
int pitch;
|
||||
|
||||
ret = temp->Lock (temp, DSLF_WRITE, (void**)&dst, &pitch);
|
||||
if (ret)
|
||||
{
|
||||
DirectFBError ("gdkcursor-directfb.c (gdk_cursor_new): "
|
||||
"temp->Lock", ret);
|
||||
|
||||
temp->Release (temp);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
gint x, y;
|
||||
gint mx, my;
|
||||
gint p = ((stock_cursors[cursor_type].width + 7) / 8) * 8;
|
||||
gint mp = ((stock_cursors[cursor_type+1].width + 7) / 8) * 8;
|
||||
|
||||
const guchar *src;
|
||||
const guchar *mask;
|
||||
|
||||
pitch >>= 2;
|
||||
|
||||
src = stock_cursors[cursor_type].bits;
|
||||
mask = stock_cursors[cursor_type+1].bits;
|
||||
|
||||
mx = stock_cursors[cursor_type+1].hotx - stock_cursors[cursor_type].hotx;
|
||||
my = stock_cursors[cursor_type+1].hoty - stock_cursors[cursor_type].hoty;
|
||||
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
gint bit = x-mx + (y-my) * p;
|
||||
gint mbit = x + y * mp;
|
||||
|
||||
u32 color = (x-mx < 0 || y-my < 0 ||
|
||||
x-mx >= stock_cursors[cursor_type].width ||
|
||||
y-my >= stock_cursors[cursor_type].height)
|
||||
? 0x00FFFFFF : (src[bit/8] & (1 << bit%8) ? 0 : 0x00FFFFFF);
|
||||
|
||||
u8 a = color ? 0xE0 : 0xFF;
|
||||
u32 alpha = mask[mbit/8] & (1 << mbit%8) ? (a << 24) : 0;
|
||||
|
||||
dst[x + y*pitch] = alpha | color;
|
||||
}
|
||||
}
|
||||
|
||||
temp->Unlock (temp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
width += 2;
|
||||
height += 2;
|
||||
|
||||
shape=gdk_display_dfb_create_surface(dfb_display,DSPF_ARGB,width,height);
|
||||
|
||||
if( !shape ) {
|
||||
temp->Release(temp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
shape->Clear (shape, 0x80, 0x80, 0x80, 0);
|
||||
|
||||
shape->SetBlittingFlags (shape, (DSBLIT_BLEND_COLORALPHA |
|
||||
DSBLIT_BLEND_ALPHACHANNEL));
|
||||
|
||||
shape->SetColor (shape, 0, 0, 0, 0x30);
|
||||
shape->Blit (shape, temp, NULL, 0, 0);
|
||||
shape->Blit (shape, temp, NULL, 0, 2);
|
||||
shape->Blit (shape, temp, NULL, 2, 0);
|
||||
shape->Blit (shape, temp, NULL, 2, 2);
|
||||
|
||||
shape->SetColor (shape, 0, 0, 0, 0xA0);
|
||||
shape->Blit (shape, temp, NULL, 1, 0);
|
||||
shape->Blit (shape, temp, NULL, 0, 1);
|
||||
shape->Blit (shape, temp, NULL, 2, 1);
|
||||
shape->Blit (shape, temp, NULL, 1, 2);
|
||||
|
||||
shape->SetColor (shape, 0, 0, 0, 0xE0);
|
||||
shape->Blit (shape, temp, NULL, 1, 1);
|
||||
|
||||
temp->Release (temp);
|
||||
|
||||
private = g_new0 (GdkCursorDirectFB, 1);
|
||||
cursor = (GdkCursor *) private;
|
||||
cursor->type = GDK_CURSOR_IS_PIXMAP;
|
||||
cursor->ref_count = 1;
|
||||
|
||||
private->shape = shape;
|
||||
private->hot_x = stock_cursors[cursor_type].hotx;
|
||||
private->hot_y = stock_cursors[cursor_type].hoty;
|
||||
|
||||
stock_cursors[cursor_type].cursor = cursor;
|
||||
}
|
||||
|
||||
return gdk_cursor_ref (cursor);
|
||||
}
|
||||
|
||||
GdkCursor *
|
||||
gdk_cursor_new_from_pixmap (GdkPixmap *source,
|
||||
GdkPixmap *mask,
|
||||
const GdkColor *fg,
|
||||
const GdkColor *bg,
|
||||
gint x,
|
||||
gint y)
|
||||
{
|
||||
GdkCursor *cursor;
|
||||
GdkCursorDirectFB *private;
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
GdkDrawableImplDirectFB *mask_impl;
|
||||
IDirectFBSurface *shape;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_PIXMAP (source), NULL);
|
||||
g_return_val_if_fail (GDK_IS_PIXMAP (mask), NULL);
|
||||
|
||||
impl = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_PIXMAP_OBJECT (source)->impl);
|
||||
mask_impl = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_PIXMAP_OBJECT (mask)->impl);
|
||||
|
||||
int width = impl->width;
|
||||
int height = impl->height;
|
||||
|
||||
shape=gdk_display_dfb_create_surface(_gdk_display,DSPF_ARGB,width,height);
|
||||
|
||||
if (!shape)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* The following code assumes that pixmap and mask are A8 surfaces
|
||||
* that correspond to X11 bitmaps. This is the traditional usage of
|
||||
* gdk_cursor_new_from_pixmap(). For GTK+-DirectFB it might make
|
||||
* sense to allow arbitrary ARGB cursors.
|
||||
*/
|
||||
|
||||
shape->Clear (shape, bg->red >> 8, bg->green >> 8, bg->blue >> 8, 0xFF);
|
||||
|
||||
shape->SetColor (shape, fg->red >> 8, fg->green >> 8, fg->blue >> 8, 0xFF);
|
||||
shape->SetBlittingFlags (shape,
|
||||
DSBLIT_BLEND_ALPHACHANNEL | DSBLIT_COLORIZE);
|
||||
shape->Blit (shape, impl->surface, NULL, 0, 0);
|
||||
|
||||
shape->SetPorterDuff (shape, DSPD_DST_IN);
|
||||
shape->Blit (shape, mask_impl->surface, NULL, 0, 0);
|
||||
|
||||
shape->SetBlittingFlags (shape, DSBLIT_NOFX);
|
||||
shape->SetPorterDuff (shape, DSPD_NONE);
|
||||
|
||||
private = g_new (GdkCursorDirectFB, 1);
|
||||
cursor = (GdkCursor *) private;
|
||||
cursor->type = GDK_CURSOR_IS_PIXMAP;
|
||||
cursor->ref_count = 1;
|
||||
|
||||
private->shape = shape;
|
||||
private->hot_x = x;
|
||||
private->hot_y = y;
|
||||
|
||||
return cursor;
|
||||
}
|
||||
|
||||
GdkCursor *
|
||||
gdk_cursor_new_from_pixbuf (GdkDisplay *display,
|
||||
GdkPixbuf *pixbuf,
|
||||
gint x,
|
||||
gint y)
|
||||
{
|
||||
GdkPixmap *pixmap, *mask;
|
||||
GdkCursor *cursor;
|
||||
gint width, height, depth = 8;
|
||||
GdkVisual* visual;
|
||||
|
||||
/* FIXME: this is not the right way to set colours */
|
||||
GdkColor fg = { 0, 65535, 65535, 65535 };
|
||||
GdkColor bg = { 0, 65535, 65535, 65535 };
|
||||
|
||||
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
||||
g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
|
||||
g_return_val_if_fail (0 <= x && x < gdk_pixbuf_get_width (pixbuf), NULL);
|
||||
g_return_val_if_fail (0 <= y && y < gdk_pixbuf_get_height (pixbuf), NULL);
|
||||
|
||||
width = gdk_pixbuf_get_width(pixbuf);
|
||||
height = gdk_pixbuf_get_height(pixbuf);
|
||||
|
||||
pixmap = gdk_pixmap_new ( NULL, width, height, depth);
|
||||
mask = gdk_pixmap_new ( NULL, width, height, 1);
|
||||
visual = gdk_rgb_get_visual ();
|
||||
depth = visual->depth;
|
||||
|
||||
gdk_pixbuf_render_pixmap_and_mask (pixbuf, &pixmap, &mask, 0);
|
||||
|
||||
g_return_val_if_fail (GDK_IS_PIXMAP (pixmap), NULL);
|
||||
g_return_val_if_fail (GDK_IS_PIXMAP (mask), NULL);
|
||||
|
||||
cursor = gdk_cursor_new_from_pixmap (pixmap, mask, &fg, &bg, x, y) ;
|
||||
|
||||
g_object_unref (pixmap);
|
||||
g_object_unref (mask);
|
||||
|
||||
/* a cursor of type GDK_CURSOR_IS_PIXMAP is returned */
|
||||
return cursor;
|
||||
|
||||
}
|
||||
|
||||
GdkCursor*
|
||||
gdk_cursor_new_from_name (GdkDisplay *display,
|
||||
const gchar *name)
|
||||
{
|
||||
GdkCursor *cursor;
|
||||
GdkPixbuf *pixbuf;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
||||
pixbuf = gdk_pixbuf_new_from_file(name, NULL);
|
||||
/* Prevents attempts to load stock X cursors from generating error messages */
|
||||
if (pixbuf == NULL)
|
||||
return NULL;
|
||||
g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
|
||||
cursor = gdk_cursor_new_from_pixbuf (display, pixbuf, 1, 1);
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
return cursor;
|
||||
}
|
||||
|
||||
|
||||
GdkPixbuf*
|
||||
gdk_cursor_get_image (GdkCursor *cursor)
|
||||
{
|
||||
g_return_val_if_fail (cursor != NULL, NULL);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
_gdk_cursor_destroy (GdkCursor *cursor)
|
||||
{
|
||||
GdkCursorDirectFB *private;
|
||||
|
||||
g_return_if_fail (cursor != NULL);
|
||||
g_return_if_fail (cursor->ref_count == 0);
|
||||
|
||||
private = (GdkCursorDirectFB *) cursor;
|
||||
|
||||
private->shape->Release (private->shape);
|
||||
|
||||
g_free (private);
|
||||
}
|
||||
|
||||
GdkDisplay *
|
||||
gdk_cursor_get_display (GdkCursor *cursor)
|
||||
{
|
||||
return gdk_display_get_default ();
|
||||
}
|
||||
|
||||
guint
|
||||
gdk_display_get_default_cursor_size (GdkDisplay *display)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_DISPLAY (display), 0);
|
||||
|
||||
return 16;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_get_maximal_cursor_size:
|
||||
* @display: a #GdkDisplay
|
||||
* @width: the return location for the maximal cursor width
|
||||
* @height: the return location for the maximal cursor height
|
||||
*
|
||||
* Gets the maximal size to use for cursors on @display.
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
void
|
||||
gdk_display_get_maximal_cursor_size (GdkDisplay *display,
|
||||
guint *width,
|
||||
guint *height)
|
||||
{
|
||||
g_return_if_fail (GDK_IS_DISPLAY (display));
|
||||
|
||||
/* Cursor sizes in DirectFB can be large (4095x4095), but we limit this to
|
||||
128x128 for max compatibility with the x11 backend. */
|
||||
*width = 128;
|
||||
*height = 128;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_supports_cursor_alpha:
|
||||
* @display: a #GdkDisplay
|
||||
*
|
||||
* Returns %TRUE if cursors can use an 8bit alpha channel
|
||||
* on @display. Otherwise, cursors are restricted to bilevel
|
||||
* alpha (i.e. a mask).
|
||||
*
|
||||
* Returns: whether cursors can have alpha channels.
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
gboolean
|
||||
gdk_display_supports_cursor_alpha (GdkDisplay *display)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_display_supports_cursor_color (GdkDisplay *display)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
82
gdk/directfb/gdkdirectfb.h
Normal file
82
gdk/directfb/gdkdirectfb.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#ifndef __GDK_DIRECTFB_H__
|
||||
#define __GDK_DIRECTFB_H__
|
||||
|
||||
/* This define disables some experimental code
|
||||
*/
|
||||
#define GDK_DIRECTFB_NO_EXPERIMENTS
|
||||
|
||||
#include <cairo.h>
|
||||
#include <directfb.h>
|
||||
#include "gdk/gdkprivate.h"
|
||||
|
||||
|
||||
extern GdkWindow * _gdk_parent_root;
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GDK_ROOT_WINDOW() _gdk_parent_root
|
||||
|
||||
#define GDK_WINDOW_DFB_ID(win) (GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (win)->impl)->dfb_id)
|
||||
|
||||
|
||||
/* used for the --transparent-unfocused hack */
|
||||
extern gboolean gdk_directfb_apply_focus_opacity;
|
||||
|
||||
/* used for the --enable-color-keying hack */
|
||||
extern gboolean gdk_directfb_enable_color_keying;
|
||||
extern DFBColor gdk_directfb_bg_color;
|
||||
extern DFBColor gdk_directfb_bg_color_key;
|
||||
|
||||
/* to disable antialiasing */
|
||||
extern gboolean gdk_directfb_monochrome_fonts;
|
||||
|
||||
|
||||
/* GTK+-DirectFB specific functions */
|
||||
|
||||
void gdk_directfb_window_set_opacity (GdkWindow *window,
|
||||
guchar opacity);
|
||||
|
||||
GdkVisual * gdk_directfb_visual_by_format (DFBSurfacePixelFormat pixel_format);
|
||||
|
||||
IDirectFBWindow *gdk_directfb_window_lookup(GdkWindow *window);
|
||||
IDirectFBSurface *gdk_directfb_surface_lookup(GdkWindow *window);
|
||||
|
||||
GdkWindow *gdk_directfb_create_child_window(GdkWindow *parent,
|
||||
IDirectFBSurface *subsurface);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_DIRECTFB_H__ */
|
||||
541
gdk/directfb/gdkdisplay-directfb.c
Normal file
541
gdk/directfb/gdkdisplay-directfb.c
Normal file
@@ -0,0 +1,541 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team. See the ChangeLog
|
||||
* files for a list of changes. These files are distributed with
|
||||
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glib.h>
|
||||
#include "gdk.h"
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
#include "gdkscreen.h"
|
||||
#include "gdkdisplaymanager.h"
|
||||
|
||||
|
||||
extern void _gdk_visual_init (void);
|
||||
extern void _gdk_events_init (void);
|
||||
extern void _gdk_input_init (void);
|
||||
extern void _gdk_dnd_init (void);
|
||||
extern void _gdk_windowing_window_init (void);
|
||||
extern void _gdk_windowing_image_init (void);
|
||||
extern void _gdk_directfb_keyboard_init (void);
|
||||
|
||||
static gboolean gdk_directfb_argb_font = FALSE;
|
||||
static gint gdk_directfb_glyph_surface_cache = 8;
|
||||
|
||||
|
||||
const GOptionEntry _gdk_windowing_args[] =
|
||||
{
|
||||
{ "disable-aa-fonts",0,0,G_OPTION_ARG_INT,&gdk_directfb_monochrome_fonts,NULL,NULL },
|
||||
{ "argb-font",0,0, G_OPTION_ARG_INT, &gdk_directfb_argb_font,NULL,NULL},
|
||||
{ "transparent-unfocused",0,0, G_OPTION_ARG_INT, &gdk_directfb_apply_focus_opacity,NULL,NULL },
|
||||
{ "glyph-surface-cache",0,0,G_OPTION_ARG_INT,&gdk_directfb_glyph_surface_cache,NULL,NULL },
|
||||
{ "enable-color-keying",0,0,G_OPTION_ARG_INT,&gdk_directfb_enable_color_keying,NULL,NULL },
|
||||
{ NULL}
|
||||
};
|
||||
|
||||
/* Main entry point for gdk in 2.6 args are parsed
|
||||
*/
|
||||
GdkDisplay * gdk_display_open (const gchar *display_name)
|
||||
{
|
||||
IDirectFB *directfb;
|
||||
IDirectFBDisplayLayer *layer;
|
||||
IDirectFBInputDevice *keyboard;
|
||||
DFBResult ret;
|
||||
|
||||
if (_gdk_display)
|
||||
{
|
||||
return GDK_DISPLAY_OBJECT(_gdk_display); /* single display only */
|
||||
}
|
||||
|
||||
ret = DirectFBInit (NULL, NULL);
|
||||
if (ret != DFB_OK)
|
||||
{
|
||||
DirectFBError ("gdk_display_open: DirectFBInit", ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret = DirectFBCreate (&directfb);
|
||||
if (ret != DFB_OK)
|
||||
{
|
||||
DirectFBError ("gdk_display_open: DirectFBCreate", ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
_gdk_display = g_object_new (GDK_TYPE_DISPLAY_DFB, NULL);
|
||||
_gdk_display->directfb = directfb;
|
||||
|
||||
ret = directfb->GetDisplayLayer (directfb, DLID_PRIMARY, &layer);
|
||||
if (ret != DFB_OK)
|
||||
{
|
||||
DirectFBError ("gdk_display_open: GetDisplayLayer", ret);
|
||||
directfb->Release (directfb);
|
||||
_gdk_display->directfb = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
ret = directfb->GetInputDevice (directfb, DIDID_KEYBOARD, &keyboard);
|
||||
if (ret != DFB_OK)
|
||||
{
|
||||
DirectFBError ("gdk_display_open: GetInputDevice", ret);
|
||||
directfb->Release (directfb);
|
||||
_gdk_display->directfb = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
_gdk_display->layer=layer;
|
||||
_gdk_display->keyboard=keyboard;
|
||||
|
||||
_gdk_directfb_keyboard_init ();
|
||||
|
||||
_gdk_screen = g_object_new (GDK_TYPE_SCREEN, NULL);
|
||||
|
||||
_gdk_visual_init ();
|
||||
_gdk_windowing_window_init ();
|
||||
|
||||
gdk_screen_set_default_colormap (_gdk_screen,
|
||||
gdk_screen_get_system_colormap (_gdk_screen)); _gdk_windowing_image_init ();
|
||||
|
||||
_gdk_events_init ();
|
||||
_gdk_input_init ();
|
||||
_gdk_dnd_init ();
|
||||
|
||||
layer->EnableCursor (layer, 1);
|
||||
|
||||
g_signal_emit_by_name (gdk_display_manager_get (),
|
||||
"display_opened", _gdk_display);
|
||||
|
||||
return GDK_DISPLAY_OBJECT(_gdk_display);
|
||||
}
|
||||
|
||||
GType
|
||||
gdk_display_dfb_get_type (void)
|
||||
{
|
||||
static GType object_type = 0;
|
||||
|
||||
if (!object_type)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GdkDisplayDFBClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) NULL,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GdkDisplayDFB),
|
||||
0, /* n_preallocs */
|
||||
(GInstanceInitFunc) NULL,
|
||||
};
|
||||
|
||||
object_type = g_type_register_static (GDK_TYPE_DISPLAY,
|
||||
"GdkDisplayDFB",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
return object_type;
|
||||
}
|
||||
|
||||
IDirectFBSurface * gdk_display_dfb_create_surface (GdkDisplayDFB *display,int format,int width, int height) {
|
||||
DFBResult ret;
|
||||
IDirectFBSurface *temp;
|
||||
DFBSurfaceDescription dsc;
|
||||
dsc.flags = DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
|
||||
dsc.width = width;
|
||||
dsc.height = height;
|
||||
dsc.pixelformat = format;
|
||||
ret = display->directfb->CreateSurface (display->directfb, &dsc, &temp);
|
||||
if (ret)
|
||||
{
|
||||
DirectFBError ("gdk_display_dfb_create_surface ", ret);
|
||||
return NULL;
|
||||
}
|
||||
return temp;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* Displays and Screens
|
||||
*/
|
||||
|
||||
void
|
||||
_gdk_windowing_set_default_display (GdkDisplay *display)
|
||||
{
|
||||
_gdk_display=GDK_DISPLAY_DFB(display);
|
||||
}
|
||||
|
||||
G_CONST_RETURN gchar *
|
||||
gdk_display_get_name (GdkDisplay *display)
|
||||
{
|
||||
return gdk_get_display_arg_name ();
|
||||
}
|
||||
|
||||
int
|
||||
gdk_display_get_n_screens (GdkDisplay *display)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
GdkScreen *
|
||||
gdk_display_get_screen (GdkDisplay *display,
|
||||
gint screen_num)
|
||||
{
|
||||
return _gdk_screen;
|
||||
}
|
||||
|
||||
GdkScreen *
|
||||
gdk_display_get_default_screen (GdkDisplay *display)
|
||||
{
|
||||
return _gdk_screen;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_display_supports_shapes (GdkDisplay *display)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_display_supports_input_shapes (GdkDisplay *display)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
GdkWindow *gdk_display_get_default_group (GdkDisplay *display)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
|
||||
return _gdk_parent_root;
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* Selection and Clipboard
|
||||
*/
|
||||
|
||||
gboolean
|
||||
gdk_display_supports_selection_notification (GdkDisplay *display)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean gdk_display_request_selection_notification (GdkDisplay *display,
|
||||
GdkAtom selection)
|
||||
|
||||
{
|
||||
|
||||
g_warning("gdk_display_request_selection_notification Unimplemented function \n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_display_supports_clipboard_persistence (GdkDisplay *display)
|
||||
{
|
||||
g_warning("gdk_display_supports_clipboard_persistence Unimplemented function \n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_display_store_clipboard (GdkDisplay *display,
|
||||
GdkWindow *clipboard_window,
|
||||
guint32 time_,
|
||||
const GdkAtom *targets,
|
||||
gint n_targets)
|
||||
{
|
||||
|
||||
g_warning("gdk_display_store_clipboard Unimplemented function \n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* Pointer
|
||||
*/
|
||||
|
||||
static gboolean _gdk_directfb_pointer_implicit_grab = FALSE;
|
||||
|
||||
GdkGrabStatus
|
||||
gdk_directfb_pointer_grab (GdkWindow *window,
|
||||
gint owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindow *confine_to,
|
||||
GdkCursor *cursor,
|
||||
guint32 time,
|
||||
gboolean implicit_grab)
|
||||
{
|
||||
GdkWindow *toplevel;
|
||||
GdkWindowImplDirectFB *impl;
|
||||
if (_gdk_directfb_pointer_grab_window)
|
||||
{
|
||||
if (implicit_grab && !_gdk_directfb_pointer_implicit_grab)
|
||||
return GDK_GRAB_ALREADY_GRABBED;
|
||||
|
||||
gdk_pointer_ungrab (time);
|
||||
}
|
||||
|
||||
toplevel = gdk_directfb_window_find_toplevel (window);
|
||||
impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (toplevel)->impl);
|
||||
|
||||
if (impl->window)
|
||||
{
|
||||
if (impl->window->GrabPointer (impl->window) == DFB_LOCKED)
|
||||
return GDK_GRAB_ALREADY_GRABBED;
|
||||
}
|
||||
|
||||
if (event_mask & GDK_BUTTON_MOTION_MASK)
|
||||
event_mask |= (GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON2_MOTION_MASK |
|
||||
GDK_BUTTON3_MOTION_MASK);
|
||||
|
||||
_gdk_directfb_pointer_implicit_grab = implicit_grab;
|
||||
_gdk_directfb_pointer_grab_window = g_object_ref (window);
|
||||
_gdk_directfb_pointer_grab_owner_events = owner_events;
|
||||
|
||||
_gdk_directfb_pointer_grab_confine = (confine_to ?
|
||||
g_object_ref (confine_to) : NULL);
|
||||
_gdk_directfb_pointer_grab_events = event_mask;
|
||||
_gdk_directfb_pointer_grab_cursor = (cursor ?
|
||||
gdk_cursor_ref (cursor) : NULL);
|
||||
|
||||
|
||||
gdk_directfb_window_send_crossing_events (NULL,
|
||||
window,
|
||||
GDK_CROSSING_GRAB);
|
||||
|
||||
return GDK_GRAB_SUCCESS;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_directfb_pointer_ungrab (guint32 time,
|
||||
gboolean implicit_grab)
|
||||
{
|
||||
GdkWindow *toplevel;
|
||||
GdkWindow *mousewin;
|
||||
GdkWindow *old_grab_window;
|
||||
GdkWindowImplDirectFB *impl;
|
||||
|
||||
if (implicit_grab && !_gdk_directfb_pointer_implicit_grab)
|
||||
return;
|
||||
|
||||
if (!_gdk_directfb_pointer_grab_window)
|
||||
return;
|
||||
|
||||
toplevel =
|
||||
gdk_directfb_window_find_toplevel (_gdk_directfb_pointer_grab_window);
|
||||
impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (toplevel)->impl);
|
||||
|
||||
if (impl->window)
|
||||
impl->window->UngrabPointer (impl->window);
|
||||
|
||||
if (_gdk_directfb_pointer_grab_confine)
|
||||
{
|
||||
g_object_unref (_gdk_directfb_pointer_grab_confine);
|
||||
_gdk_directfb_pointer_grab_confine = NULL;
|
||||
}
|
||||
|
||||
if (_gdk_directfb_pointer_grab_cursor)
|
||||
{
|
||||
gdk_cursor_unref (_gdk_directfb_pointer_grab_cursor);
|
||||
_gdk_directfb_pointer_grab_cursor = NULL;
|
||||
}
|
||||
|
||||
old_grab_window = _gdk_directfb_pointer_grab_window;
|
||||
|
||||
_gdk_directfb_pointer_grab_window = NULL;
|
||||
_gdk_directfb_pointer_implicit_grab = FALSE;
|
||||
|
||||
mousewin = gdk_window_at_pointer (NULL, NULL);
|
||||
gdk_directfb_window_send_crossing_events (old_grab_window,
|
||||
mousewin,
|
||||
GDK_CROSSING_UNGRAB);
|
||||
g_object_unref (old_grab_window);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_display_pointer_ungrab (GdkDisplay *display,
|
||||
guint32 time)
|
||||
{
|
||||
GdkPointerGrabInfo *grab = _gdk_display_get_last_pointer_grab (display);
|
||||
|
||||
if (grab)
|
||||
{
|
||||
grab->serial_end = 0;
|
||||
}
|
||||
|
||||
_gdk_display_pointer_grab_update (display, 0);
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* Keyboard
|
||||
*/
|
||||
|
||||
GdkGrabStatus
|
||||
gdk_directfb_keyboard_grab (GdkDisplay *display,
|
||||
GdkWindow *window,
|
||||
gint owner_events,
|
||||
guint32 time)
|
||||
{
|
||||
GdkWindow *toplevel;
|
||||
GdkWindowImplDirectFB *impl;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
||||
|
||||
if (_gdk_directfb_keyboard_grab_window)
|
||||
gdk_keyboard_ungrab (time);
|
||||
|
||||
toplevel = gdk_directfb_window_find_toplevel (window);
|
||||
impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (toplevel)->impl);
|
||||
|
||||
if (impl->window)
|
||||
{
|
||||
if (impl->window->GrabKeyboard (impl->window) == DFB_LOCKED)
|
||||
return GDK_GRAB_ALREADY_GRABBED;
|
||||
}
|
||||
|
||||
_gdk_directfb_keyboard_grab_window = g_object_ref (window);
|
||||
_gdk_directfb_keyboard_grab_owner_events = owner_events;
|
||||
return GDK_GRAB_SUCCESS;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_directfb_keyboard_ungrab (GdkDisplay *display,
|
||||
guint32 time)
|
||||
{
|
||||
GdkWindow *toplevel;
|
||||
GdkWindowImplDirectFB *impl;
|
||||
|
||||
if (!_gdk_directfb_keyboard_grab_window)
|
||||
return;
|
||||
|
||||
toplevel = gdk_directfb_window_find_toplevel (_gdk_directfb_keyboard_grab_window);
|
||||
impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (toplevel)->impl);
|
||||
|
||||
if (impl->window)
|
||||
impl->window->UngrabKeyboard (impl->window);
|
||||
|
||||
g_object_unref (_gdk_directfb_keyboard_grab_window);
|
||||
_gdk_directfb_keyboard_grab_window = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------
|
||||
* gdk_keyboard_grab
|
||||
*
|
||||
* Grabs the keyboard to a specific window
|
||||
*
|
||||
* Arguments:
|
||||
* "window" is the window which will receive the grab
|
||||
* "owner_events" specifies whether events will be reported as is,
|
||||
* or relative to "window"
|
||||
* "time" specifies the time
|
||||
*
|
||||
* Results:
|
||||
*
|
||||
* Side effects:
|
||||
* requires a corresponding call to gdk_keyboard_ungrab
|
||||
*
|
||||
*--------------------------------------------------------------
|
||||
*/
|
||||
|
||||
GdkGrabStatus
|
||||
gdk_display_keyboard_grab (GdkDisplay *display,
|
||||
GdkWindow *window,
|
||||
gint owner_events,
|
||||
guint32 time)
|
||||
{
|
||||
return gdk_directfb_keyboard_grab (display, window, owner_events, time);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_display_keyboard_ungrab (GdkDisplay *display,
|
||||
guint32 time)
|
||||
{
|
||||
return gdk_directfb_keyboard_ungrab (display, time);
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* Misc Stuff
|
||||
*/
|
||||
|
||||
void
|
||||
gdk_display_beep (GdkDisplay *display)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
gdk_display_sync (GdkDisplay *display)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
gdk_display_flush (GdkDisplay *display)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* Notifications
|
||||
*/
|
||||
|
||||
void
|
||||
gdk_notify_startup_complete (void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_notify_startup_complete_with_id:
|
||||
* @startup_id: a startup-notification identifier, for which notification
|
||||
* process should be completed
|
||||
*
|
||||
* Indicates to the GUI environment that the application has finished
|
||||
* loading, using a given identifier.
|
||||
*
|
||||
* GTK+ will call this function automatically for #GtkWindow with custom
|
||||
* startup-notification identifier unless
|
||||
* gtk_window_set_auto_startup_notification() is called to disable
|
||||
* that feature.
|
||||
*
|
||||
* Since: 2.12
|
||||
**/
|
||||
void
|
||||
gdk_notify_startup_complete_with_id (const gchar* startup_id)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* Compositing
|
||||
*/
|
||||
|
||||
gboolean
|
||||
gdk_display_supports_composite (GdkDisplay *display)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
59
gdk/directfb/gdkdisplay-directfb.h
Normal file
59
gdk/directfb/gdkdisplay-directfb.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library 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.
|
||||
*/
|
||||
|
||||
#ifndef GDK_DISPLAY_DFB_H
|
||||
#define GDK_DISPLAY_DFB_H
|
||||
|
||||
#include <directfb.h>
|
||||
#include <gdk/gdkdisplay.h>
|
||||
#include <gdk/gdkkeys.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _GdkDisplayDFB GdkDisplayDFB;
|
||||
typedef struct _GdkDisplayDFBClass GdkDisplayDFBClass;
|
||||
|
||||
|
||||
#define GDK_TYPE_DISPLAY_DFB (gdk_display_dfb_get_type())
|
||||
#define GDK_DISPLAY_DFB(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DISPLAY_DFB, GdkDisplayDFB))
|
||||
#define GDK_DISPLAY_DFB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DISPLAY_DFB, GdkDisplayDFBClass))
|
||||
#define GDK_IS_DISPLAY_DFB(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DISPLAY_DFB))
|
||||
#define GDK_IS_DISPLAY_DFB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_DISPLAY_DFB))
|
||||
#define GDK_DISPLAY_DFB_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_DISPLAY_DFB, GdkDisplayDFBClass))
|
||||
|
||||
struct _GdkDisplayDFB
|
||||
{
|
||||
GdkDisplay parent;
|
||||
IDirectFB *directfb;
|
||||
IDirectFBDisplayLayer *layer;
|
||||
IDirectFBEventBuffer *buffer;
|
||||
IDirectFBInputDevice *keyboard;
|
||||
GdkKeymap *keymap;
|
||||
};
|
||||
|
||||
struct _GdkDisplayDFBClass
|
||||
{
|
||||
GdkDisplayClass parent;
|
||||
};
|
||||
|
||||
GType gdk_display_dfb_get_type (void);
|
||||
|
||||
IDirectFBSurface * gdk_display_dfb_create_surface (GdkDisplayDFB *display,int format,int width, int height);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* GDK_DISPLAY_DFB_H */
|
||||
634
gdk/directfb/gdkdnd-directfb.c
Normal file
634
gdk/directfb/gdkdnd-directfb.c
Normal file
@@ -0,0 +1,634 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1999 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
#include "gdkdnd.h"
|
||||
#include "gdkproperty.h"
|
||||
|
||||
typedef struct _GdkDragContextPrivate GdkDragContextPrivate;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GDK_DRAG_STATUS_DRAG,
|
||||
GDK_DRAG_STATUS_MOTION_WAIT,
|
||||
GDK_DRAG_STATUS_ACTION_WAIT,
|
||||
GDK_DRAG_STATUS_DROP
|
||||
} GtkDragStatus;
|
||||
|
||||
/* Structure that holds information about a drag in progress.
|
||||
* this is used on both source and destination sides.
|
||||
*/
|
||||
struct _GdkDragContextPrivate
|
||||
{
|
||||
GdkAtom local_selection;
|
||||
|
||||
guint16 last_x; /* Coordinates from last event */
|
||||
guint16 last_y;
|
||||
guint drag_status : 4; /* current status of drag */
|
||||
};
|
||||
|
||||
/* Drag Contexts */
|
||||
|
||||
static GList *contexts = NULL;
|
||||
static GdkDragContext *current_dest_drag = NULL;
|
||||
|
||||
|
||||
#define GDK_DRAG_CONTEXT_PRIVATE_DATA(ctx) ((GdkDragContextPrivate *) GDK_DRAG_CONTEXT (ctx)->windowing_data)
|
||||
|
||||
static void gdk_drag_context_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GdkDragContext, gdk_drag_context, G_TYPE_OBJECT)
|
||||
|
||||
static void
|
||||
gdk_drag_context_init (GdkDragContext *dragcontext)
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
|
||||
private = G_TYPE_INSTANCE_GET_PRIVATE (dragcontext,
|
||||
GDK_TYPE_DRAG_CONTEXT,
|
||||
GdkDragContextPrivate);
|
||||
|
||||
dragcontext->windowing_data = private;
|
||||
|
||||
contexts = g_list_prepend (contexts, dragcontext);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_drag_context_class_init (GdkDragContextClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = gdk_drag_context_finalize;
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (GdkDragContextPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_drag_context_finalize (GObject *object)
|
||||
{
|
||||
GdkDragContext *context = GDK_DRAG_CONTEXT (object);
|
||||
|
||||
g_list_free (context->targets);
|
||||
|
||||
if (context->source_window)
|
||||
g_object_unref (context->source_window);
|
||||
|
||||
if (context->dest_window)
|
||||
g_object_unref (context->dest_window);
|
||||
|
||||
contexts = g_list_remove (contexts, context);
|
||||
|
||||
G_OBJECT_CLASS (gdk_drag_context_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
GdkDragContext *
|
||||
gdk_drag_context_new (void)
|
||||
{
|
||||
return g_object_new (gdk_drag_context_get_type (), NULL);
|
||||
}
|
||||
|
||||
static GdkDragContext *
|
||||
gdk_drag_context_find (gboolean is_source,
|
||||
GdkWindow *source,
|
||||
GdkWindow *dest)
|
||||
{
|
||||
GdkDragContext *context;
|
||||
GdkDragContextPrivate *private;
|
||||
GList *list;
|
||||
|
||||
for (list = contexts; list; list = list->next)
|
||||
{
|
||||
context = (GdkDragContext *) list->data;
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
|
||||
|
||||
if ((!context->is_source == !is_source) &&
|
||||
((source == NULL) ||
|
||||
(context->source_window && (context->source_window == source))) &&
|
||||
((dest == NULL) ||
|
||||
(context->dest_window && (context->dest_window == dest))))
|
||||
return context;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/************************** Public API ***********************/
|
||||
|
||||
void
|
||||
_gdk_dnd_init (void)
|
||||
{
|
||||
}
|
||||
|
||||
/* Source side */
|
||||
|
||||
static void
|
||||
local_send_leave (GdkDragContext *context,
|
||||
guint32 time)
|
||||
{
|
||||
GdkEvent event;
|
||||
|
||||
if ((current_dest_drag != NULL) &&
|
||||
(current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
|
||||
(current_dest_drag->source_window == context->source_window))
|
||||
{
|
||||
event.dnd.type = GDK_DRAG_LEAVE;
|
||||
event.dnd.window = context->dest_window;
|
||||
/* Pass ownership of context to the event */
|
||||
event.dnd.context = current_dest_drag;
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.time = time;
|
||||
|
||||
current_dest_drag = NULL;
|
||||
|
||||
gdk_event_put (&event);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
local_send_enter (GdkDragContext *context,
|
||||
guint32 time)
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
GdkDragContext *new_context;
|
||||
GdkEvent event;
|
||||
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
|
||||
|
||||
if (!private->local_selection)
|
||||
private->local_selection = gdk_atom_intern ("LocalDndSelection", FALSE);
|
||||
|
||||
if (current_dest_drag != NULL)
|
||||
{
|
||||
g_object_unref (current_dest_drag);
|
||||
current_dest_drag = NULL;
|
||||
}
|
||||
|
||||
new_context = gdk_drag_context_new ();
|
||||
new_context->protocol = GDK_DRAG_PROTO_LOCAL;
|
||||
new_context->is_source = FALSE;
|
||||
|
||||
new_context->source_window = g_object_ref (context->source_window);
|
||||
|
||||
new_context->dest_window = g_object_ref (context->dest_window);
|
||||
|
||||
new_context->targets = g_list_copy (context->targets);
|
||||
|
||||
gdk_window_set_events (new_context->source_window,
|
||||
gdk_window_get_events (new_context->source_window) |
|
||||
GDK_PROPERTY_CHANGE_MASK);
|
||||
new_context->actions = context->actions;
|
||||
|
||||
event.dnd.type = GDK_DRAG_ENTER;
|
||||
event.dnd.window = context->dest_window;
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = new_context;
|
||||
event.dnd.time = time;
|
||||
|
||||
current_dest_drag = new_context;
|
||||
|
||||
(GDK_DRAG_CONTEXT_PRIVATE_DATA (new_context))->local_selection =
|
||||
private->local_selection;
|
||||
|
||||
gdk_event_put (&event);
|
||||
}
|
||||
|
||||
static void
|
||||
local_send_motion (GdkDragContext *context,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
GdkDragAction action,
|
||||
guint32 time)
|
||||
{
|
||||
GdkEvent event;
|
||||
|
||||
if ((current_dest_drag != NULL) &&
|
||||
(current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
|
||||
(current_dest_drag->source_window == context->source_window))
|
||||
{
|
||||
event.dnd.type = GDK_DRAG_MOTION;
|
||||
event.dnd.window = current_dest_drag->dest_window;
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = current_dest_drag;
|
||||
event.dnd.time = time;
|
||||
event.dnd.x_root = x_root;
|
||||
event.dnd.y_root = y_root;
|
||||
|
||||
current_dest_drag->suggested_action = action;
|
||||
current_dest_drag->actions = action;
|
||||
|
||||
(GDK_DRAG_CONTEXT_PRIVATE_DATA (current_dest_drag))->last_x = x_root;
|
||||
(GDK_DRAG_CONTEXT_PRIVATE_DATA (current_dest_drag))->last_y = y_root;
|
||||
|
||||
GDK_DRAG_CONTEXT_PRIVATE_DATA (context)->drag_status = GDK_DRAG_STATUS_MOTION_WAIT;
|
||||
|
||||
gdk_event_put (&event);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
local_send_drop (GdkDragContext *context,
|
||||
guint32 time)
|
||||
{
|
||||
GdkEvent event;
|
||||
|
||||
if ((current_dest_drag != NULL) &&
|
||||
(current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
|
||||
(current_dest_drag->source_window == context->source_window))
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE_DATA (current_dest_drag);
|
||||
|
||||
event.dnd.type = GDK_DROP_START;
|
||||
event.dnd.window = current_dest_drag->dest_window;
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = current_dest_drag;
|
||||
event.dnd.time = time;
|
||||
event.dnd.x_root = private->last_x;
|
||||
event.dnd.y_root = private->last_y;
|
||||
|
||||
gdk_event_put (&event);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_drag_do_leave (GdkDragContext *context,
|
||||
guint32 time)
|
||||
{
|
||||
if (context->dest_window)
|
||||
{
|
||||
switch (context->protocol)
|
||||
{
|
||||
case GDK_DRAG_PROTO_LOCAL:
|
||||
local_send_leave (context, time);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
g_object_unref (context->dest_window);
|
||||
context->dest_window = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
GdkDragContext *
|
||||
gdk_drag_begin (GdkWindow *window,
|
||||
GList *targets)
|
||||
{
|
||||
GList *list;
|
||||
GdkDragContext *new_context;
|
||||
|
||||
g_return_val_if_fail (window != NULL, NULL);
|
||||
|
||||
g_object_ref (window);
|
||||
|
||||
new_context = gdk_drag_context_new ();
|
||||
new_context->is_source = TRUE;
|
||||
new_context->source_window = window;
|
||||
new_context->targets = NULL;
|
||||
new_context->actions = 0;
|
||||
|
||||
for (list = targets; list; list = list->next)
|
||||
new_context->targets = g_list_append (new_context->targets, list->data);
|
||||
|
||||
return new_context;
|
||||
}
|
||||
|
||||
guint32
|
||||
gdk_drag_get_protocol_for_display(GdkDisplay *display, guint32 xid,
|
||||
GdkDragProtocol *protocol)
|
||||
{
|
||||
GdkWindow *window;
|
||||
|
||||
window = gdk_window_lookup ((GdkNativeWindow) xid);
|
||||
|
||||
if (window &&
|
||||
g_object_get_data (G_OBJECT (window), "gdk-dnd-registered") != NULL)
|
||||
{
|
||||
*protocol = GDK_DRAG_PROTO_LOCAL;
|
||||
return xid;
|
||||
}
|
||||
|
||||
*protocol = GDK_DRAG_PROTO_NONE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_drag_find_window_for_screen (GdkDragContext *context,
|
||||
GdkWindow *drag_window,
|
||||
GdkScreen *screen,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
GdkWindow **dest_window,
|
||||
GdkDragProtocol *protocol)
|
||||
{
|
||||
GdkWindow *dest;
|
||||
|
||||
g_return_if_fail (context != NULL);
|
||||
|
||||
dest = gdk_window_get_pointer (NULL, &x_root, &y_root, NULL);
|
||||
|
||||
if (context->dest_window != dest)
|
||||
{
|
||||
guint32 recipient;
|
||||
|
||||
/* Check if new destination accepts drags, and which protocol */
|
||||
if ((recipient = gdk_drag_get_protocol (GDK_WINDOW_DFB_ID (dest),
|
||||
protocol)))
|
||||
{
|
||||
*dest_window = gdk_window_lookup ((GdkNativeWindow) recipient);
|
||||
if (dest_window)
|
||||
g_object_ref (*dest_window);
|
||||
}
|
||||
else
|
||||
*dest_window = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
*dest_window = context->dest_window;
|
||||
if (*dest_window)
|
||||
g_object_ref (*dest_window);
|
||||
|
||||
*protocol = context->protocol;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_drag_motion (GdkDragContext *context,
|
||||
GdkWindow *dest_window,
|
||||
GdkDragProtocol protocol,
|
||||
gint x_root,
|
||||
gint y_root,
|
||||
GdkDragAction suggested_action,
|
||||
GdkDragAction possible_actions,
|
||||
guint32 time)
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
|
||||
g_return_val_if_fail (context != NULL, FALSE);
|
||||
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
|
||||
|
||||
if (context->dest_window != dest_window)
|
||||
{
|
||||
GdkEvent event;
|
||||
|
||||
/* Send a leave to the last destination */
|
||||
gdk_drag_do_leave (context, time);
|
||||
private->drag_status = GDK_DRAG_STATUS_DRAG;
|
||||
|
||||
/* Check if new destination accepts drags, and which protocol */
|
||||
if (dest_window)
|
||||
{
|
||||
context->dest_window = g_object_ref (dest_window);
|
||||
context->protocol = protocol;
|
||||
|
||||
switch (protocol)
|
||||
{
|
||||
case GDK_DRAG_PROTO_LOCAL:
|
||||
local_send_enter (context, time);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
context->suggested_action = suggested_action;
|
||||
}
|
||||
else
|
||||
{
|
||||
context->dest_window = NULL;
|
||||
context->action = 0;
|
||||
}
|
||||
|
||||
/* Push a status event, to let the client know that
|
||||
* the drag changed
|
||||
*/
|
||||
|
||||
event.dnd.type = GDK_DRAG_STATUS;
|
||||
event.dnd.window = context->source_window;
|
||||
/* We use this to signal a synthetic status. Perhaps
|
||||
* we should use an extra field...
|
||||
*/
|
||||
event.dnd.send_event = TRUE;
|
||||
event.dnd.context = context;
|
||||
event.dnd.time = time;
|
||||
|
||||
gdk_event_put (&event);
|
||||
}
|
||||
else
|
||||
{
|
||||
context->suggested_action = suggested_action;
|
||||
}
|
||||
|
||||
/* Send a drag-motion event */
|
||||
|
||||
private->last_x = x_root;
|
||||
private->last_y = y_root;
|
||||
|
||||
if (context->dest_window)
|
||||
{
|
||||
if (private->drag_status == GDK_DRAG_STATUS_DRAG)
|
||||
{
|
||||
switch (context->protocol)
|
||||
{
|
||||
case GDK_DRAG_PROTO_LOCAL:
|
||||
local_send_motion (context,
|
||||
x_root, y_root, suggested_action, time);
|
||||
break;
|
||||
|
||||
case GDK_DRAG_PROTO_NONE:
|
||||
g_warning ("GDK_DRAG_PROTO_NONE is not valid in gdk_drag_motion()");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_drag_drop (GdkDragContext *context,
|
||||
guint32 time)
|
||||
{
|
||||
g_return_if_fail (context != NULL);
|
||||
|
||||
if (context->dest_window)
|
||||
{
|
||||
switch (context->protocol)
|
||||
{
|
||||
case GDK_DRAG_PROTO_LOCAL:
|
||||
local_send_drop (context, time);
|
||||
break;
|
||||
case GDK_DRAG_PROTO_NONE:
|
||||
g_warning ("GDK_DRAG_PROTO_NONE is not valid in gdk_drag_drop()");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gdk_drag_abort (GdkDragContext *context,
|
||||
guint32 time)
|
||||
{
|
||||
g_return_if_fail (context != NULL);
|
||||
|
||||
gdk_drag_do_leave (context, time);
|
||||
}
|
||||
|
||||
/* Destination side */
|
||||
|
||||
void
|
||||
gdk_drag_status (GdkDragContext *context,
|
||||
GdkDragAction action,
|
||||
guint32 time)
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
GdkDragContext *src_context;
|
||||
GdkEvent event;
|
||||
|
||||
g_return_if_fail (context != NULL);
|
||||
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
|
||||
|
||||
src_context = gdk_drag_context_find (TRUE,
|
||||
context->source_window,
|
||||
context->dest_window);
|
||||
|
||||
if (src_context)
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE_DATA (src_context);
|
||||
|
||||
if (private->drag_status == GDK_DRAG_STATUS_MOTION_WAIT)
|
||||
private->drag_status = GDK_DRAG_STATUS_DRAG;
|
||||
|
||||
event.dnd.type = GDK_DRAG_STATUS;
|
||||
event.dnd.window = src_context->source_window;
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = src_context;
|
||||
event.dnd.time = time;
|
||||
|
||||
src_context->action = action;
|
||||
|
||||
gdk_event_put (&event);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gdk_drop_reply (GdkDragContext *context,
|
||||
gboolean ok,
|
||||
guint32 time)
|
||||
{
|
||||
g_return_if_fail (context != NULL);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_drop_finish (GdkDragContext *context,
|
||||
gboolean success,
|
||||
guint32 time)
|
||||
{
|
||||
GdkDragContextPrivate *private;
|
||||
GdkDragContext *src_context;
|
||||
GdkEvent event;
|
||||
|
||||
g_return_if_fail (context != NULL);
|
||||
|
||||
private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
|
||||
|
||||
src_context = gdk_drag_context_find (TRUE,
|
||||
context->source_window,
|
||||
context->dest_window);
|
||||
if (src_context)
|
||||
{
|
||||
g_object_ref (src_context);
|
||||
|
||||
event.dnd.type = GDK_DROP_FINISHED;
|
||||
event.dnd.window = src_context->source_window;
|
||||
event.dnd.send_event = FALSE;
|
||||
event.dnd.context = src_context;
|
||||
|
||||
gdk_event_put (&event);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_drag_drop_succeeded (GdkDragContext *context)
|
||||
{
|
||||
g_warning("gdk_drag_drop_succeeded unimplemented \n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_window_register_dnd (GdkWindow *window)
|
||||
{
|
||||
g_return_if_fail (window != NULL);
|
||||
|
||||
if (g_object_get_data (G_OBJECT (window), "gdk-dnd-registered") != NULL)
|
||||
return;
|
||||
|
||||
g_object_set_data (G_OBJECT (window),
|
||||
"gdk-dnd-registered",
|
||||
GINT_TO_POINTER (TRUE));
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
* gdk_drag_get_selection:
|
||||
* Returns the selection atom for the current source window
|
||||
* arguments:
|
||||
*
|
||||
* results:
|
||||
*************************************************************/
|
||||
|
||||
GdkAtom
|
||||
gdk_drag_get_selection (GdkDragContext *context)
|
||||
{
|
||||
g_return_val_if_fail (context != NULL, GDK_NONE);
|
||||
|
||||
if (context->protocol == GDK_DRAG_PROTO_LOCAL)
|
||||
return (GDK_DRAG_CONTEXT_PRIVATE_DATA (context))->local_selection;
|
||||
else
|
||||
return GDK_NONE;
|
||||
}
|
||||
1633
gdk/directfb/gdkdrawable-directfb.c
Normal file
1633
gdk/directfb/gdkdrawable-directfb.c
Normal file
File diff suppressed because it is too large
Load Diff
963
gdk/directfb/gdkevents-directfb.c
Normal file
963
gdk/directfb/gdkevents-directfb.c
Normal file
@@ -0,0 +1,963 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
#include "gdkinternals.h"
|
||||
|
||||
#include "gdkkeysyms.h"
|
||||
|
||||
#include "gdkinput-directfb.h"
|
||||
#include <string.h>
|
||||
|
||||
#ifndef __GDK_X_H__
|
||||
#define __GDK_X_H__
|
||||
gboolean gdk_net_wm_supports (GdkAtom property);
|
||||
#endif
|
||||
|
||||
#define EventBuffer _gdk_display->buffer
|
||||
#define DirectFB _gdk_display->directfb
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Functions for maintaining the event queue *
|
||||
*********************************************/
|
||||
|
||||
static GdkEvent * gdk_event_translate (DFBWindowEvent *dfbevent,
|
||||
GdkWindow *window);
|
||||
|
||||
/*
|
||||
* Private variable declarations
|
||||
*/
|
||||
static GList *client_filters; /* Filters for client messages */
|
||||
|
||||
|
||||
static void
|
||||
fixup_event (GdkEvent *event)
|
||||
{
|
||||
if (event->any.window)
|
||||
g_object_ref (event->any.window);
|
||||
if (((event->any.type == GDK_ENTER_NOTIFY) ||
|
||||
(event->any.type == GDK_LEAVE_NOTIFY)) &&
|
||||
(event->crossing.subwindow != NULL))
|
||||
g_object_ref (event->crossing.subwindow);
|
||||
event->any.send_event = FALSE;
|
||||
}
|
||||
|
||||
static GdkFilterReturn
|
||||
apply_filters (GdkWindow *window,
|
||||
DFBWindowEvent *dfbevent,
|
||||
GList *filters)
|
||||
{
|
||||
GdkFilterReturn result = GDK_FILTER_CONTINUE;
|
||||
GdkEvent *event;
|
||||
GList *node;
|
||||
GList *tmp_list;
|
||||
|
||||
event = gdk_event_new (GDK_NOTHING);
|
||||
if (window != NULL)
|
||||
event->any.window = g_object_ref (window);
|
||||
((GdkEventPrivate *)event)->flags |= GDK_EVENT_PENDING;
|
||||
|
||||
/* I think GdkFilterFunc semantics require the passed-in event
|
||||
* to already be in the queue. The filter func can generate
|
||||
* more events and append them after it if it likes.
|
||||
*/
|
||||
node = _gdk_event_queue_append ((GdkDisplay*)_gdk_display, event);
|
||||
|
||||
tmp_list = filters;
|
||||
while (tmp_list)
|
||||
{
|
||||
GdkEventFilter *filter = (GdkEventFilter *) tmp_list->data;
|
||||
|
||||
tmp_list = tmp_list->next;
|
||||
result = filter->function (dfbevent, event, filter->data);
|
||||
if (result != GDK_FILTER_CONTINUE)
|
||||
break;
|
||||
}
|
||||
|
||||
if (result == GDK_FILTER_CONTINUE || result == GDK_FILTER_REMOVE)
|
||||
{
|
||||
_gdk_event_queue_remove_link ((GdkDisplay*)_gdk_display, node);
|
||||
g_list_free_1 (node);
|
||||
gdk_event_free (event);
|
||||
}
|
||||
else /* GDK_FILTER_TRANSLATE */
|
||||
{
|
||||
((GdkEventPrivate *)event)->flags &= ~GDK_EVENT_PENDING;
|
||||
fixup_event (event);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
dfb_events_process_window_event (DFBWindowEvent *event)
|
||||
{
|
||||
GdkWindow *window;
|
||||
|
||||
/*
|
||||
* Apply global filters
|
||||
*
|
||||
* If result is GDK_FILTER_CONTINUE, we continue as if nothing
|
||||
* happened. If it is GDK_FILTER_REMOVE or GDK_FILTER_TRANSLATE,
|
||||
* we return TRUE and won't dispatch the event.
|
||||
*/
|
||||
if (_gdk_default_filters)
|
||||
{
|
||||
switch (apply_filters (NULL, event, _gdk_default_filters))
|
||||
{
|
||||
case GDK_FILTER_REMOVE:
|
||||
case GDK_FILTER_TRANSLATE:
|
||||
return;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
window = gdk_directfb_window_id_table_lookup (event->window_id);
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
gdk_event_translate (event, window);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_event_send_client_message_by_window (GdkEvent *event,
|
||||
GdkWindow *window)
|
||||
{
|
||||
DFBUserEvent evt;
|
||||
|
||||
g_return_val_if_fail(event != NULL, FALSE);
|
||||
g_return_val_if_fail(GDK_IS_WINDOW(window), FALSE);
|
||||
|
||||
evt.clazz = DFEC_USER;
|
||||
evt.type = GPOINTER_TO_UINT (GDK_ATOM_TO_POINTER (event->client.message_type));
|
||||
evt.data = (void *) event->client.data.l[0];
|
||||
|
||||
_gdk_display->buffer->PostEvent(_gdk_display->buffer, DFB_EVENT (&evt));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
dfb_events_dispatch (void)
|
||||
{
|
||||
GdkDisplay *display = gdk_display_get_default ();
|
||||
GdkEvent *event;
|
||||
|
||||
GDK_THREADS_ENTER ();
|
||||
|
||||
while ((event = _gdk_event_unqueue (display)) != NULL)
|
||||
{
|
||||
if (_gdk_event_func)
|
||||
(*_gdk_event_func) (event, _gdk_event_data);
|
||||
|
||||
gdk_event_free (event);
|
||||
}
|
||||
|
||||
GDK_THREADS_LEAVE ();
|
||||
}
|
||||
|
||||
static gboolean
|
||||
dfb_events_io_func (GIOChannel *channel,
|
||||
GIOCondition condition,
|
||||
gpointer data)
|
||||
{
|
||||
gsize i;
|
||||
gsize read;
|
||||
GIOStatus result;
|
||||
DFBEvent buf[23];
|
||||
DFBEvent *event;
|
||||
|
||||
result = g_io_channel_read_chars (channel,
|
||||
(gchar *) buf, sizeof (buf), &read, NULL);
|
||||
|
||||
if (result == G_IO_STATUS_ERROR)
|
||||
{
|
||||
g_warning ("%s: GIOError occured", G_STRFUNC);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
read /= sizeof (DFBEvent);
|
||||
|
||||
for (i = 0, event = buf; i < read; i++, event++)
|
||||
{
|
||||
switch (event->clazz)
|
||||
{
|
||||
case DFEC_WINDOW:
|
||||
/* TODO workaround to prevent two DWET_ENTER in a row from being delivered */
|
||||
if (event->window.type == DWET_ENTER ) {
|
||||
if ( i>0 && buf[i-1].window.type != DWET_ENTER )
|
||||
dfb_events_process_window_event (&event->window);
|
||||
}
|
||||
else
|
||||
dfb_events_process_window_event (&event->window);
|
||||
break;
|
||||
|
||||
case DFEC_USER:
|
||||
{
|
||||
GList *list;
|
||||
|
||||
GDK_NOTE (EVENTS, g_print (" client_message"));
|
||||
|
||||
for (list = client_filters; list; list = list->next)
|
||||
{
|
||||
GdkClientFilter *filter = list->data;
|
||||
DFBUserEvent *user_event = (DFBUserEvent *) event;
|
||||
GdkAtom type;
|
||||
|
||||
type = GDK_POINTER_TO_ATOM (GUINT_TO_POINTER (user_event->type));
|
||||
|
||||
if (filter->type == type)
|
||||
{
|
||||
if (filter->function (user_event,
|
||||
NULL,
|
||||
filter->data) != GDK_FILTER_CONTINUE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
EventBuffer->Reset (EventBuffer);
|
||||
|
||||
dfb_events_dispatch ();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_events_init (void)
|
||||
{
|
||||
GIOChannel *channel;
|
||||
GSource *source;
|
||||
DFBResult ret;
|
||||
gint fd;
|
||||
|
||||
ret = DirectFB->CreateEventBuffer (DirectFB, &EventBuffer);
|
||||
if (ret)
|
||||
{
|
||||
DirectFBError ("_gdk_events_init: "
|
||||
"IDirectFB::CreateEventBuffer() failed", ret);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = EventBuffer->CreateFileDescriptor (EventBuffer, &fd);
|
||||
if (ret)
|
||||
{
|
||||
DirectFBError ("_gdk_events_init: "
|
||||
"IDirectFBEventBuffer::CreateFileDescriptor() failed",
|
||||
ret);
|
||||
return;
|
||||
}
|
||||
|
||||
channel = g_io_channel_unix_new (fd);
|
||||
|
||||
g_io_channel_set_encoding (channel, NULL, NULL);
|
||||
g_io_channel_set_buffered (channel, FALSE);
|
||||
|
||||
source = g_io_create_watch (channel, G_IO_IN);
|
||||
|
||||
g_source_set_priority (source, G_PRIORITY_DEFAULT);
|
||||
g_source_set_can_recurse (source, TRUE);
|
||||
g_source_set_callback (source, (GSourceFunc) dfb_events_io_func, NULL, NULL);
|
||||
|
||||
g_source_attach (source, NULL);
|
||||
g_source_unref (source);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_events_pending (void)
|
||||
{
|
||||
GdkDisplay *display = gdk_display_get_default ();
|
||||
|
||||
return _gdk_event_queue_find_first (display) ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_events_queue (GdkDisplay *display)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
gdk_flush (void)
|
||||
{
|
||||
gdk_display_flush ( GDK_DISPLAY_OBJECT(_gdk_display));
|
||||
}
|
||||
|
||||
/* Sends a ClientMessage to all toplevel client windows */
|
||||
gboolean
|
||||
gdk_event_send_client_message_for_display (GdkDisplay *display,
|
||||
GdkEvent *event,
|
||||
guint32 xid)
|
||||
{
|
||||
GdkWindow *win = NULL;
|
||||
gboolean ret = TRUE;
|
||||
|
||||
g_return_val_if_fail(event != NULL, FALSE);
|
||||
|
||||
win = gdk_window_lookup_for_display (display, (GdkNativeWindow) xid);
|
||||
|
||||
g_return_val_if_fail(win != NULL, FALSE);
|
||||
|
||||
if ((GDK_WINDOW_OBJECT(win)->window_type != GDK_WINDOW_CHILD) &&
|
||||
(g_object_get_data (G_OBJECT (win), "gdk-window-child-handler")))
|
||||
{
|
||||
/* Managed window, check children */
|
||||
GList *ltmp = NULL;
|
||||
for (ltmp = GDK_WINDOW_OBJECT(win)->children; ltmp; ltmp = ltmp->next)
|
||||
{
|
||||
ret &= gdk_event_send_client_message_by_window (event,
|
||||
GDK_WINDOW(ltmp->data));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ret &= gdk_event_send_client_message_by_window (event, win);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****/
|
||||
|
||||
guint32
|
||||
gdk_directfb_get_time (void)
|
||||
{
|
||||
GTimeVal tv;
|
||||
|
||||
g_get_current_time (&tv);
|
||||
|
||||
return (guint32) tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_directfb_event_windows_add (GdkWindow *window)
|
||||
{
|
||||
GdkWindowImplDirectFB *impl;
|
||||
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (window)->impl);
|
||||
|
||||
if (!impl->window)
|
||||
return;
|
||||
|
||||
if (EventBuffer)
|
||||
impl->window->AttachEventBuffer (impl->window, EventBuffer);
|
||||
else
|
||||
impl->window->CreateEventBuffer (impl->window, &EventBuffer);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_directfb_event_windows_remove (GdkWindow *window)
|
||||
{
|
||||
GdkWindowImplDirectFB *impl;
|
||||
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (window)->impl);
|
||||
|
||||
if (!impl->window)
|
||||
return;
|
||||
|
||||
if (EventBuffer)
|
||||
impl->window->DetachEventBuffer (impl->window, EventBuffer);
|
||||
/* FIXME: should we warn if (! EventBuffer) ? */
|
||||
}
|
||||
|
||||
GdkWindow *
|
||||
gdk_directfb_child_at (GdkWindow *window,
|
||||
gint *winx,
|
||||
gint *winy)
|
||||
{
|
||||
GdkWindowObject *private;
|
||||
GList *list;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
||||
|
||||
private = GDK_WINDOW_OBJECT (window);
|
||||
for (list = private->children; list; list = list->next)
|
||||
{
|
||||
GdkWindowObject *win = list->data;
|
||||
|
||||
if (GDK_WINDOW_IS_MAPPED (win) &&
|
||||
*winx >= win->x &&
|
||||
*winx < win->x + GDK_DRAWABLE_IMPL_DIRECTFB (win->impl)->width &&
|
||||
*winy >= win->y &&
|
||||
*winy < win->y + GDK_DRAWABLE_IMPL_DIRECTFB (win->impl)->height)
|
||||
{
|
||||
*winx -= win->x;
|
||||
*winy -= win->y;
|
||||
|
||||
return gdk_directfb_child_at (GDK_WINDOW (win), winx, winy );
|
||||
}
|
||||
}
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
static GdkEvent *
|
||||
gdk_event_translate (DFBWindowEvent *dfbevent,
|
||||
GdkWindow *window)
|
||||
{
|
||||
GdkWindowObject *private;
|
||||
GdkDisplay *display;
|
||||
GdkEvent *event = NULL;
|
||||
|
||||
g_return_val_if_fail (dfbevent != NULL, NULL);
|
||||
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
||||
|
||||
private = GDK_WINDOW_OBJECT (window);
|
||||
|
||||
g_object_ref (G_OBJECT (window));
|
||||
|
||||
/*
|
||||
* Apply per-window filters
|
||||
*
|
||||
* If result is GDK_FILTER_CONTINUE, we continue as if nothing
|
||||
* happened. If it is GDK_FILTER_REMOVE or GDK_FILTER_TRANSLATE,
|
||||
* we return TRUE and won't dispatch the event.
|
||||
*/
|
||||
if (private->filters)
|
||||
{
|
||||
switch (apply_filters (window, dfbevent, private->filters))
|
||||
{
|
||||
case GDK_FILTER_REMOVE:
|
||||
case GDK_FILTER_TRANSLATE:
|
||||
g_object_unref (G_OBJECT (window));
|
||||
return NULL;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
display = gdk_drawable_get_display (GDK_DRAWABLE (window));
|
||||
|
||||
switch (dfbevent->type)
|
||||
{
|
||||
case DWET_BUTTONDOWN:
|
||||
case DWET_BUTTONUP:
|
||||
{
|
||||
static gboolean click_grab = FALSE;
|
||||
GdkWindow *child;
|
||||
gint wx, wy;
|
||||
guint mask;
|
||||
guint button;
|
||||
|
||||
_gdk_directfb_mouse_x = wx = dfbevent->cx;
|
||||
_gdk_directfb_mouse_y = wy = dfbevent->cy;
|
||||
|
||||
switch (dfbevent->button)
|
||||
{
|
||||
case DIBI_LEFT:
|
||||
button = 1;
|
||||
mask = GDK_BUTTON1_MASK;
|
||||
break;
|
||||
case DIBI_MIDDLE:
|
||||
button = 2;
|
||||
mask = GDK_BUTTON2_MASK;
|
||||
break;
|
||||
case DIBI_RIGHT:
|
||||
button = 3;
|
||||
mask = GDK_BUTTON3_MASK;
|
||||
break;
|
||||
default:
|
||||
button = dfbevent->button + 1;
|
||||
mask = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
child = gdk_directfb_child_at (_gdk_parent_root, &wx, &wy);
|
||||
|
||||
if (_gdk_directfb_pointer_grab_window &&
|
||||
(_gdk_directfb_pointer_grab_events & (dfbevent->type ==
|
||||
DWET_BUTTONDOWN ?
|
||||
GDK_BUTTON_PRESS_MASK :
|
||||
GDK_BUTTON_RELEASE_MASK)) &&
|
||||
(_gdk_directfb_pointer_grab_owner_events == FALSE ||
|
||||
child == _gdk_parent_root) )
|
||||
{
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
|
||||
child = _gdk_directfb_pointer_grab_window;
|
||||
impl = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (child)->impl);
|
||||
|
||||
dfbevent->x = dfbevent->cx - impl->abs_x;
|
||||
dfbevent->y = dfbevent->cy - impl->abs_y;
|
||||
}
|
||||
else if (!_gdk_directfb_pointer_grab_window ||
|
||||
(_gdk_directfb_pointer_grab_owner_events == TRUE))
|
||||
{
|
||||
dfbevent->x = wx;
|
||||
dfbevent->y = wy;
|
||||
}
|
||||
else
|
||||
{
|
||||
child = NULL;
|
||||
}
|
||||
|
||||
if (dfbevent->type == DWET_BUTTONDOWN)
|
||||
_gdk_directfb_modifiers |= mask;
|
||||
else
|
||||
_gdk_directfb_modifiers &= ~mask;
|
||||
|
||||
if (child)
|
||||
{
|
||||
event =
|
||||
gdk_directfb_event_make (child,
|
||||
dfbevent->type == DWET_BUTTONDOWN ?
|
||||
GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
|
||||
|
||||
event->button.x_root = _gdk_directfb_mouse_x;
|
||||
event->button.y_root = _gdk_directfb_mouse_y;
|
||||
|
||||
event->button.x = dfbevent->x;
|
||||
event->button.y = dfbevent->y;
|
||||
|
||||
event->button.state = _gdk_directfb_modifiers;
|
||||
event->button.button = button;
|
||||
event->button.device = display->core_pointer;
|
||||
|
||||
GDK_NOTE (EVENTS,
|
||||
g_message ("button: %d at %d,%d %s with state 0x%08x",
|
||||
event->button.button,
|
||||
(int)event->button.x, (int)event->button.y,
|
||||
dfbevent->type == DWET_BUTTONDOWN ?
|
||||
"pressed" : "released",
|
||||
_gdk_directfb_modifiers));
|
||||
|
||||
if (dfbevent->type == DWET_BUTTONDOWN)
|
||||
_gdk_event_button_generate (display, event);
|
||||
}
|
||||
|
||||
/* Handle implicit button grabs: */
|
||||
if (dfbevent->type == DWET_BUTTONDOWN && !click_grab && child)
|
||||
{
|
||||
if (gdk_directfb_pointer_grab (child, FALSE,
|
||||
gdk_window_get_events (child),
|
||||
NULL, NULL,
|
||||
GDK_CURRENT_TIME,
|
||||
TRUE) == GDK_GRAB_SUCCESS)
|
||||
click_grab = TRUE;
|
||||
}
|
||||
else if (dfbevent->type == DWET_BUTTONUP &&
|
||||
!(_gdk_directfb_modifiers & (GDK_BUTTON1_MASK |
|
||||
GDK_BUTTON2_MASK |
|
||||
GDK_BUTTON3_MASK)) && click_grab)
|
||||
{
|
||||
gdk_directfb_pointer_ungrab (GDK_CURRENT_TIME, TRUE);
|
||||
click_grab = FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_MOTION:
|
||||
{
|
||||
GdkWindow *event_win=NULL;
|
||||
GdkWindow *child;
|
||||
|
||||
_gdk_directfb_mouse_x = dfbevent->cx;
|
||||
_gdk_directfb_mouse_y = dfbevent->cy;
|
||||
|
||||
//child = gdk_directfb_child_at (window, &dfbevent->x, &dfbevent->y);
|
||||
/* Go all the way to root to catch popup menus */
|
||||
int wx=_gdk_directfb_mouse_x;
|
||||
int wy=_gdk_directfb_mouse_y;
|
||||
child = gdk_directfb_child_at (_gdk_parent_root, &wx, &wy);
|
||||
|
||||
/* first let's see if any cossing event has to be send */
|
||||
gdk_directfb_window_send_crossing_events (NULL, child, GDK_CROSSING_NORMAL);
|
||||
|
||||
/* then dispatch the motion event to the window the cursor it's inside */
|
||||
event_win = gdk_directfb_pointer_event_window (child, GDK_MOTION_NOTIFY);
|
||||
|
||||
|
||||
if (event_win)
|
||||
{
|
||||
|
||||
if (event_win == _gdk_directfb_pointer_grab_window) {
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
|
||||
child = _gdk_directfb_pointer_grab_window;
|
||||
impl = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (child)->impl);
|
||||
|
||||
dfbevent->x = _gdk_directfb_mouse_x - impl->abs_x;
|
||||
dfbevent->y = _gdk_directfb_mouse_y - impl->abs_y;
|
||||
}
|
||||
|
||||
event = gdk_directfb_event_make (child, GDK_MOTION_NOTIFY);
|
||||
|
||||
event->motion.x_root = _gdk_directfb_mouse_x;
|
||||
event->motion.y_root = _gdk_directfb_mouse_y;
|
||||
|
||||
//event->motion.x = dfbevent->x;
|
||||
//event->motion.y = dfbevent->y;
|
||||
event->motion.x = wx;
|
||||
event->motion.y = wy;
|
||||
|
||||
event->motion.state = _gdk_directfb_modifiers;
|
||||
event->motion.is_hint = FALSE;
|
||||
event->motion.device = display->core_pointer;
|
||||
|
||||
if (GDK_WINDOW_OBJECT (event_win)->event_mask &
|
||||
GDK_POINTER_MOTION_HINT_MASK)
|
||||
{
|
||||
while (EventBuffer->PeekEvent (EventBuffer,
|
||||
DFB_EVENT (dfbevent)) == DFB_OK
|
||||
&& dfbevent->type == DWET_MOTION)
|
||||
{
|
||||
EventBuffer->GetEvent (EventBuffer, DFB_EVENT (dfbevent));
|
||||
event->motion.is_hint = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* make sure crossing events go to the event window found */
|
||||
/* GdkWindow *ev_win = ( event_win == NULL ) ? gdk_window_at_pointer (NULL,NULL) :event_win;
|
||||
gdk_directfb_window_send_crossing_events (NULL,ev_win,GDK_CROSSING_NORMAL);
|
||||
*/
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_GOTFOCUS:
|
||||
gdk_directfb_change_focus (window);
|
||||
|
||||
break;
|
||||
|
||||
case DWET_LOSTFOCUS:
|
||||
gdk_directfb_change_focus (_gdk_parent_root);
|
||||
|
||||
break;
|
||||
|
||||
case DWET_POSITION:
|
||||
{
|
||||
GdkWindow *event_win;
|
||||
|
||||
private->x = dfbevent->x;
|
||||
private->y = dfbevent->y;
|
||||
|
||||
event_win = gdk_directfb_other_event_window (window, GDK_CONFIGURE);
|
||||
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_directfb_event_make (event_win, GDK_CONFIGURE);
|
||||
event->configure.x = dfbevent->x;
|
||||
event->configure.y = dfbevent->y;
|
||||
event->configure.width =
|
||||
GDK_DRAWABLE_IMPL_DIRECTFB (private->impl)->width;
|
||||
event->configure.height =
|
||||
GDK_DRAWABLE_IMPL_DIRECTFB (private->impl)->height;
|
||||
}
|
||||
|
||||
_gdk_directfb_calc_abs (window);
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_POSITION_SIZE:
|
||||
private->x = dfbevent->x;
|
||||
private->y = dfbevent->y;
|
||||
/* fallthru */
|
||||
|
||||
case DWET_SIZE:
|
||||
{
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
GdkWindow *event_win;
|
||||
GList *list;
|
||||
|
||||
impl = GDK_DRAWABLE_IMPL_DIRECTFB (private->impl);
|
||||
|
||||
event_win = gdk_directfb_other_event_window (window, GDK_CONFIGURE);
|
||||
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_directfb_event_make (event_win, GDK_CONFIGURE);
|
||||
event->configure.x = private->x;
|
||||
event->configure.y = private->y;
|
||||
event->configure.width = dfbevent->w;
|
||||
event->configure.height = dfbevent->h;
|
||||
}
|
||||
|
||||
impl->width = dfbevent->w;
|
||||
impl->height = dfbevent->h;
|
||||
|
||||
for (list = private->children; list; list = list->next)
|
||||
{
|
||||
GdkWindowObject *win;
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
|
||||
win = GDK_WINDOW_OBJECT (list->data);
|
||||
impl = GDK_DRAWABLE_IMPL_DIRECTFB (win->impl);
|
||||
|
||||
_gdk_directfb_move_resize_child (GDK_WINDOW (win),
|
||||
win->x, win->y,
|
||||
impl->width, impl->height);
|
||||
}
|
||||
|
||||
_gdk_directfb_calc_abs (window);
|
||||
|
||||
gdk_window_clear (window);
|
||||
gdk_window_invalidate_rect (window, NULL, TRUE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_KEYDOWN:
|
||||
case DWET_KEYUP:
|
||||
{
|
||||
|
||||
GdkEventType type = (dfbevent->type == DWET_KEYUP ?
|
||||
GDK_KEY_RELEASE : GDK_KEY_PRESS);
|
||||
GdkWindow *event_win =
|
||||
gdk_directfb_keyboard_event_window (gdk_directfb_window_find_focus (),
|
||||
type);
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_directfb_event_make (event_win, type);
|
||||
gdk_directfb_translate_key_event (dfbevent, &event->key);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_LEAVE:
|
||||
_gdk_directfb_mouse_x = dfbevent->cx;
|
||||
_gdk_directfb_mouse_y = dfbevent->cy;
|
||||
|
||||
gdk_directfb_window_send_crossing_events (NULL, _gdk_parent_root,
|
||||
GDK_CROSSING_NORMAL);
|
||||
|
||||
if (gdk_directfb_apply_focus_opacity)
|
||||
{
|
||||
if (GDK_WINDOW_IS_MAPPED (window))
|
||||
GDK_WINDOW_IMPL_DIRECTFB (private->impl)->window->SetOpacity
|
||||
(GDK_WINDOW_IMPL_DIRECTFB (private->impl)->window,
|
||||
(GDK_WINDOW_IMPL_DIRECTFB (private->impl)->opacity >> 1) +
|
||||
(GDK_WINDOW_IMPL_DIRECTFB (private->impl)->opacity >> 2));
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_ENTER:
|
||||
{
|
||||
GdkWindow *child;
|
||||
|
||||
_gdk_directfb_mouse_x = dfbevent->cx;
|
||||
_gdk_directfb_mouse_y = dfbevent->cy;
|
||||
|
||||
child = gdk_directfb_child_at (window, &dfbevent->x, &dfbevent->y);
|
||||
|
||||
/* this makes sure pointer is set correctly when it previously left
|
||||
* a window being not standard shaped
|
||||
*/
|
||||
gdk_window_set_cursor (window, NULL);
|
||||
gdk_directfb_window_send_crossing_events (NULL, child,
|
||||
GDK_CROSSING_NORMAL);
|
||||
|
||||
if (gdk_directfb_apply_focus_opacity)
|
||||
{
|
||||
GDK_WINDOW_IMPL_DIRECTFB (private->impl)->window->SetOpacity
|
||||
(GDK_WINDOW_IMPL_DIRECTFB (private->impl)->window,
|
||||
GDK_WINDOW_IMPL_DIRECTFB (private->impl)->opacity);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_CLOSE:
|
||||
{
|
||||
|
||||
GdkWindow *event_win;
|
||||
|
||||
event_win = gdk_directfb_other_event_window (window, GDK_DELETE);
|
||||
|
||||
if (event_win)
|
||||
event = gdk_directfb_event_make (event_win, GDK_DELETE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_DESTROYED:
|
||||
{
|
||||
GdkWindow *event_win;
|
||||
|
||||
event_win = gdk_directfb_other_event_window (window, GDK_DESTROY);
|
||||
|
||||
if (event_win)
|
||||
event = gdk_directfb_event_make (event_win, GDK_DESTROY);
|
||||
|
||||
gdk_window_destroy_notify (window);
|
||||
}
|
||||
break;
|
||||
|
||||
case DWET_WHEEL:
|
||||
{
|
||||
GdkWindow *event_win;
|
||||
|
||||
_gdk_directfb_mouse_x = dfbevent->cx;
|
||||
_gdk_directfb_mouse_y = dfbevent->cy;
|
||||
|
||||
if (_gdk_directfb_pointer_grab_window)
|
||||
{
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
|
||||
event_win = _gdk_directfb_pointer_grab_window;
|
||||
impl =
|
||||
GDK_DRAWABLE_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (event_win)->impl);
|
||||
|
||||
dfbevent->x = dfbevent->cx - impl->abs_x;
|
||||
dfbevent->y = dfbevent->cy - impl->abs_y;
|
||||
}
|
||||
else
|
||||
{
|
||||
event_win = gdk_directfb_child_at (window,
|
||||
&dfbevent->x, &dfbevent->y);
|
||||
}
|
||||
|
||||
if (event_win)
|
||||
{
|
||||
event = gdk_directfb_event_make (event_win, GDK_SCROLL);
|
||||
|
||||
event->scroll.direction = (dfbevent->step < 0 ?
|
||||
GDK_SCROLL_DOWN : GDK_SCROLL_UP);
|
||||
|
||||
event->scroll.x_root = _gdk_directfb_mouse_x;
|
||||
event->scroll.y_root = _gdk_directfb_mouse_y;
|
||||
event->scroll.x = dfbevent->x;
|
||||
event->scroll.y = dfbevent->y;
|
||||
event->scroll.state = _gdk_directfb_modifiers;
|
||||
event->scroll.device = display->core_pointer;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
g_message ("unhandled DirectFB windowing event 0x%08x", dfbevent->type);
|
||||
}
|
||||
|
||||
g_object_unref (G_OBJECT (window));
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_screen_get_setting (GdkScreen *screen,
|
||||
const gchar *name,
|
||||
GValue *value)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_display_add_client_message_filter (GdkDisplay *display,
|
||||
GdkAtom message_type,
|
||||
GdkFilterFunc func,
|
||||
gpointer data)
|
||||
{
|
||||
/* XXX: display should be used */
|
||||
GdkClientFilter *filter = g_new (GdkClientFilter, 1);
|
||||
|
||||
filter->type = message_type;
|
||||
filter->function = func;
|
||||
filter->data = data;
|
||||
client_filters = g_list_append (client_filters, filter);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gdk_add_client_message_filter (GdkAtom message_type,
|
||||
GdkFilterFunc func,
|
||||
gpointer data)
|
||||
{
|
||||
gdk_display_add_client_message_filter (gdk_display_get_default (),
|
||||
message_type, func, data);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_screen_broadcast_client_message (GdkScreen *screen,
|
||||
GdkEvent *sev)
|
||||
{
|
||||
GdkWindow *root_window;
|
||||
GdkWindowObject *private;
|
||||
GList *top_level = NULL;
|
||||
|
||||
g_return_if_fail (GDK_IS_SCREEN (screen));
|
||||
g_return_if_fail(sev != NULL);
|
||||
|
||||
root_window = gdk_screen_get_root_window (screen);
|
||||
|
||||
g_return_if_fail(GDK_IS_WINDOW(root_window));
|
||||
|
||||
private = GDK_WINDOW_OBJECT (root_window);
|
||||
|
||||
for (top_level = private->children; top_level; top_level = top_level->next)
|
||||
{
|
||||
gdk_event_send_client_message_for_display (gdk_drawable_get_display(GDK_DRAWABLE(root_window)),
|
||||
sev,
|
||||
(guint32)(GDK_WINDOW_DFB_ID(GDK_WINDOW(top_level->data))));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gdk_net_wm_supports:
|
||||
* @property: a property atom.
|
||||
*
|
||||
* This function is specific to the X11 backend of GDK, and indicates
|
||||
* whether the window manager for the default screen supports a certain
|
||||
* hint from the Extended Window Manager Hints Specification. See
|
||||
* gdk_x11_screen_supports_net_wm_hint() for complete details.
|
||||
*
|
||||
* Return value: %TRUE if the window manager supports @property
|
||||
**/
|
||||
|
||||
|
||||
gboolean
|
||||
gdk_net_wm_supports (GdkAtom property)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_windowing_event_data_copy (const GdkEvent *src,
|
||||
GdkEvent *dst)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_windowing_event_data_free (GdkEvent *event)
|
||||
{
|
||||
}
|
||||
386
gdk/directfb/gdkgc-directfb.c
Normal file
386
gdk/directfb/gdkgc-directfb.c
Normal file
@@ -0,0 +1,386 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#undef GDK_DISABLE_DEPRECATED
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
#include "gdkgc.h"
|
||||
#include "gdkpixmap.h"
|
||||
|
||||
static void gdk_directfb_gc_get_values (GdkGC *gc,
|
||||
GdkGCValues *values);
|
||||
static void gdk_directfb_gc_set_values (GdkGC *gc,
|
||||
GdkGCValues *values,
|
||||
GdkGCValuesMask values_mask);
|
||||
static void gdk_directfb_gc_set_dashes (GdkGC *gc,
|
||||
gint dash_offset,
|
||||
gint8 dash_list[],
|
||||
gint n);
|
||||
|
||||
|
||||
static void gdk_gc_directfb_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GdkGCDirectFB, _gdk_gc_directfb, GDK_TYPE_GC)
|
||||
|
||||
static void
|
||||
_gdk_gc_directfb_init (GdkGCDirectFB *directfb_gc)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
_gdk_gc_directfb_class_init (GdkGCDirectFBClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GdkGCClass *gc_class = GDK_GC_CLASS (klass);
|
||||
|
||||
object_class->finalize = gdk_gc_directfb_finalize;
|
||||
|
||||
gc_class->get_values = gdk_directfb_gc_get_values;
|
||||
gc_class->set_values = gdk_directfb_gc_set_values;
|
||||
gc_class->set_dashes = gdk_directfb_gc_set_dashes;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_gc_directfb_finalize (GObject *object)
|
||||
{
|
||||
GdkGCDirectFB *directfb_gc = GDK_GC_DIRECTFB (object);
|
||||
|
||||
if (directfb_gc->clip_region.numRects)
|
||||
temp_region_deinit (&directfb_gc->clip_region);
|
||||
if (directfb_gc->values.clip_mask)
|
||||
g_object_unref (directfb_gc->values.clip_mask);
|
||||
if (directfb_gc->values.stipple)
|
||||
g_object_unref (directfb_gc->values.stipple);
|
||||
if (directfb_gc->values.tile)
|
||||
g_object_unref (directfb_gc->values.tile);
|
||||
|
||||
G_OBJECT_CLASS (_gdk_gc_directfb_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
||||
GdkGC *
|
||||
_gdk_directfb_gc_new (GdkDrawable *drawable,
|
||||
GdkGCValues *values,
|
||||
GdkGCValuesMask values_mask)
|
||||
{
|
||||
GdkGC *gc;
|
||||
GdkGCDirectFB *private;
|
||||
|
||||
/* NOTICE that the drawable here has to be the impl drawable, not the
|
||||
publicly visible drawable. */
|
||||
g_return_val_if_fail (GDK_IS_DRAWABLE_IMPL_DIRECTFB (drawable), NULL);
|
||||
|
||||
gc = GDK_GC (g_object_new (_gdk_gc_directfb_get_type (), NULL));
|
||||
|
||||
_gdk_gc_init (gc, drawable, values, values_mask);
|
||||
|
||||
private = GDK_GC_DIRECTFB (gc);
|
||||
#if 0
|
||||
private->values.background.pixel = 0;
|
||||
private->values.background.red =
|
||||
private->values.background.green =
|
||||
private->values.background.blue = 0;
|
||||
|
||||
private->values.foreground.pixel = 0;
|
||||
private->values.foreground.red =
|
||||
private->values.foreground.green =
|
||||
private->values.foreground.blue = 0;
|
||||
#endif
|
||||
|
||||
private->values.cap_style = GDK_CAP_BUTT;
|
||||
|
||||
gdk_directfb_gc_set_values (gc, values, values_mask);
|
||||
|
||||
return gc;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_directfb_gc_get_values (GdkGC *gc,
|
||||
GdkGCValues *values)
|
||||
{
|
||||
*values = GDK_GC_DIRECTFB (gc)->values;
|
||||
}
|
||||
|
||||
#if 0
|
||||
void
|
||||
_gdk_windowing_gc_get_foreground (GdkGC *gc,
|
||||
GdkColor *color)
|
||||
{
|
||||
GdkGCDirectFB *private;
|
||||
private = GDK_GC_DIRECTFB (gc);
|
||||
*color =private->values.foreground;
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
gdk_directfb_gc_set_values (GdkGC *gc,
|
||||
GdkGCValues *values,
|
||||
GdkGCValuesMask values_mask)
|
||||
{
|
||||
GdkGCDirectFB *private = GDK_GC_DIRECTFB (gc);
|
||||
|
||||
if (values_mask & GDK_GC_FOREGROUND)
|
||||
{
|
||||
private->values.foreground = values->foreground;
|
||||
private->values_mask |= GDK_GC_FOREGROUND;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_BACKGROUND)
|
||||
{
|
||||
private->values.background = values->background;
|
||||
private->values_mask |= GDK_GC_BACKGROUND;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_FUNCTION)
|
||||
{
|
||||
private->values.function = values->function;
|
||||
private->values_mask |= GDK_GC_FUNCTION;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_FILL)
|
||||
{
|
||||
private->values.fill = values->fill;
|
||||
private->values_mask |= GDK_GC_FILL;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_TILE)
|
||||
{
|
||||
GdkPixmap *oldpm = private->values.tile;
|
||||
|
||||
if (values->tile)
|
||||
g_assert (GDK_PIXMAP_OBJECT (values->tile)->depth > 1);
|
||||
|
||||
private->values.tile = values->tile ? g_object_ref (values->tile) : NULL;
|
||||
private->values_mask |= GDK_GC_TILE;
|
||||
|
||||
if (oldpm)
|
||||
g_object_unref (oldpm);
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_STIPPLE)
|
||||
{
|
||||
GdkPixmap *oldpm = private->values.stipple;
|
||||
|
||||
if (values->stipple)
|
||||
g_assert (GDK_PIXMAP_OBJECT (values->stipple)->depth == 1);
|
||||
|
||||
private->values.stipple = (values->stipple ?
|
||||
g_object_ref (values->stipple) : NULL);
|
||||
private->values_mask |= GDK_GC_STIPPLE;
|
||||
|
||||
if (oldpm)
|
||||
g_object_unref (oldpm);
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_CLIP_MASK)
|
||||
{
|
||||
GdkPixmap *oldpm = private->values.clip_mask;
|
||||
|
||||
private->values.clip_mask = (values->clip_mask ?
|
||||
g_object_ref (values->clip_mask) : NULL);
|
||||
private->values_mask |= GDK_GC_CLIP_MASK;
|
||||
|
||||
if (oldpm)
|
||||
g_object_unref (oldpm);
|
||||
|
||||
temp_region_reset (&private->clip_region);
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_SUBWINDOW)
|
||||
{
|
||||
private->values.subwindow_mode = values->subwindow_mode;
|
||||
private->values_mask |= GDK_GC_SUBWINDOW;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_TS_X_ORIGIN)
|
||||
{
|
||||
private->values.ts_x_origin = values->ts_x_origin;
|
||||
private->values_mask |= GDK_GC_TS_X_ORIGIN;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_TS_Y_ORIGIN)
|
||||
{
|
||||
private->values.ts_y_origin = values->ts_y_origin;
|
||||
private->values_mask |= GDK_GC_TS_Y_ORIGIN;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_CLIP_X_ORIGIN)
|
||||
{
|
||||
private->values.clip_x_origin = GDK_GC (gc)->clip_x_origin = values->clip_x_origin;
|
||||
private->values_mask |= GDK_GC_CLIP_X_ORIGIN;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_CLIP_Y_ORIGIN)
|
||||
{
|
||||
private->values.clip_y_origin = GDK_GC (gc)->clip_y_origin = values->clip_y_origin;
|
||||
private->values_mask |= GDK_GC_CLIP_Y_ORIGIN;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_EXPOSURES)
|
||||
{
|
||||
private->values.graphics_exposures = values->graphics_exposures;
|
||||
private->values_mask |= GDK_GC_EXPOSURES;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_LINE_WIDTH)
|
||||
{
|
||||
private->values.line_width = values->line_width;
|
||||
private->values_mask |= GDK_GC_LINE_WIDTH;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_LINE_STYLE)
|
||||
{
|
||||
private->values.line_style = values->line_style;
|
||||
private->values_mask |= GDK_GC_LINE_STYLE;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_CAP_STYLE)
|
||||
{
|
||||
private->values.cap_style = values->cap_style;
|
||||
private->values_mask |= GDK_GC_CAP_STYLE;
|
||||
}
|
||||
|
||||
if (values_mask & GDK_GC_JOIN_STYLE)
|
||||
{
|
||||
private->values.join_style = values->join_style;
|
||||
private->values_mask |= GDK_GC_JOIN_STYLE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_directfb_gc_set_dashes (GdkGC *gc,
|
||||
gint dash_offset,
|
||||
gint8 dash_list[],
|
||||
gint n)
|
||||
{
|
||||
g_warning ("gdk_directfb_gc_set_dashes not implemented");
|
||||
}
|
||||
|
||||
static void
|
||||
gc_unset_clip_mask (GdkGC *gc)
|
||||
{
|
||||
GdkGCDirectFB *data = GDK_GC_DIRECTFB (gc);
|
||||
|
||||
if (data->values.clip_mask)
|
||||
{
|
||||
g_object_unref (data->values.clip_mask);
|
||||
data->values.clip_mask = NULL;
|
||||
data->values_mask &= ~ GDK_GC_CLIP_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_gdk_windowing_gc_set_clip_region (GdkGC *gc,
|
||||
const cairo_region_t *region,
|
||||
gboolean reset_origin)
|
||||
{
|
||||
GdkGCDirectFB *data;
|
||||
|
||||
g_return_if_fail (gc != NULL);
|
||||
|
||||
data = GDK_GC_DIRECTFB (gc);
|
||||
|
||||
if (region == &data->clip_region)
|
||||
return;
|
||||
|
||||
if (region)
|
||||
temp_region_init_copy (&data->clip_region, region);
|
||||
else
|
||||
temp_region_reset (&data->clip_region);
|
||||
|
||||
if (reset_origin)
|
||||
{
|
||||
gc->clip_x_origin = 0;
|
||||
gc->clip_y_origin = 0;
|
||||
data->values.clip_x_origin = 0;
|
||||
data->values.clip_y_origin = 0;
|
||||
}
|
||||
|
||||
gc_unset_clip_mask (gc);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_windowing_gc_copy (GdkGC *dst_gc,
|
||||
GdkGC *src_gc)
|
||||
{
|
||||
GdkGCDirectFB *dst_private;
|
||||
|
||||
g_return_if_fail (dst_gc != NULL);
|
||||
g_return_if_fail (src_gc != NULL);
|
||||
|
||||
dst_private = GDK_GC_DIRECTFB (dst_gc);
|
||||
|
||||
temp_region_reset(&dst_private->clip_region);
|
||||
|
||||
if (dst_private->values_mask & GDK_GC_TILE)
|
||||
g_object_unref (dst_private->values.tile);
|
||||
if (dst_private->values_mask & GDK_GC_STIPPLE)
|
||||
g_object_unref (dst_private->values.stipple);
|
||||
if (dst_private->values_mask & GDK_GC_CLIP_MASK)
|
||||
g_object_unref (dst_private->values.clip_mask);
|
||||
|
||||
*dst_gc = *src_gc;
|
||||
if (dst_private->values_mask & GDK_GC_TILE)
|
||||
g_object_ref (dst_private->values.tile);
|
||||
if (dst_private->values_mask & GDK_GC_STIPPLE)
|
||||
g_object_ref (dst_private->values.stipple);
|
||||
if (dst_private->values_mask & GDK_GC_CLIP_MASK)
|
||||
g_object_ref (dst_private->values.clip_mask);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gc_get_screen:
|
||||
* @gc: a #GdkGC.
|
||||
*
|
||||
* Gets the #GdkScreen for which @gc was created
|
||||
*
|
||||
* Returns: the #GdkScreen for @gc.
|
||||
*
|
||||
* Since: 2.2
|
||||
*/
|
||||
GdkScreen *
|
||||
gdk_gc_get_screen (GdkGC *gc)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_GC_DIRECTFB (gc), NULL);
|
||||
|
||||
return _gdk_screen;
|
||||
}
|
||||
254
gdk/directfb/gdkgeometry-directfb.c
Normal file
254
gdk/directfb/gdkgeometry-directfb.c
Normal file
@@ -0,0 +1,254 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h" /* For gdk_rectangle_intersect */
|
||||
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
#include "gdkinternals.h"
|
||||
|
||||
|
||||
void
|
||||
_gdk_directfb_window_get_offsets (GdkWindow *window,
|
||||
gint *x_offset,
|
||||
gint *y_offset)
|
||||
{
|
||||
if (x_offset)
|
||||
*x_offset = 0;
|
||||
if (y_offset)
|
||||
*y_offset = 0;
|
||||
}
|
||||
|
||||
gboolean
|
||||
_gdk_windowing_window_queue_antiexpose (GdkWindow *window,
|
||||
cairo_region_t *area)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_window_scroll:
|
||||
* @window: a #GdkWindow
|
||||
* @dx: Amount to scroll in the X direction
|
||||
* @dy: Amount to scroll in the Y direction
|
||||
*
|
||||
* Scroll the contents of its window, both pixels and children, by
|
||||
* the given amount. Portions of the window that the scroll operation
|
||||
* brings in from offscreen areas are invalidated.
|
||||
**/
|
||||
void
|
||||
_gdk_directfb_window_scroll (GdkWindow *window,
|
||||
gint dx,
|
||||
gint dy)
|
||||
{
|
||||
GdkWindowObject *private;
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
cairo_region_t *invalidate_region = NULL;
|
||||
GList *list;
|
||||
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
return;
|
||||
|
||||
private = GDK_WINDOW_OBJECT (window);
|
||||
impl = GDK_DRAWABLE_IMPL_DIRECTFB (private->impl);
|
||||
|
||||
if (dx == 0 && dy == 0)
|
||||
return;
|
||||
|
||||
/* Move the current invalid region */
|
||||
if (private->update_area)
|
||||
cairo_region_translate (private->update_area, dx, dy);
|
||||
|
||||
if (GDK_WINDOW_IS_MAPPED (window))
|
||||
{
|
||||
GdkRectangle clip_rect = { 0, 0, impl->width, impl->height };
|
||||
GdkRectangle rect = { dx, dy, impl->width, impl->height };
|
||||
|
||||
invalidate_region = cairo_region_create_rectangle (&clip_rect);
|
||||
|
||||
if (gdk_rectangle_intersect (&rect, &clip_rect, &rect) &&
|
||||
(!private->update_area ||
|
||||
!cairo_region_contains_rectangle (private->update_area, &rect)))
|
||||
{
|
||||
cairo_region_t *region;
|
||||
|
||||
region = cairo_region_create_rectangle (&rect);
|
||||
cairo_region_subtract (invalidate_region, region);
|
||||
cairo_region_destroy (region);
|
||||
|
||||
if (impl->surface)
|
||||
{
|
||||
DFBRegion update = { rect.x, rect.y,
|
||||
rect.x + rect.width - 1,
|
||||
rect.y + rect.height - 1 };
|
||||
|
||||
impl->surface->SetClip (impl->surface, &update);
|
||||
impl->surface->Blit (impl->surface, impl->surface, NULL, dx, dy);
|
||||
impl->surface->SetClip (impl->surface, NULL);
|
||||
impl->surface->Flip(impl->surface,&update,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (list = private->children; list; list = list->next)
|
||||
{
|
||||
GdkWindowObject *obj = GDK_WINDOW_OBJECT (list->data);
|
||||
GdkDrawableImplDirectFB *obj_impl = GDK_DRAWABLE_IMPL_DIRECTFB (obj->impl);
|
||||
|
||||
_gdk_directfb_move_resize_child (list->data,
|
||||
obj->x + dx,
|
||||
obj->y + dy,
|
||||
obj_impl->width,
|
||||
obj_impl->height);
|
||||
}
|
||||
|
||||
_gdk_directfb_calc_abs (window);
|
||||
|
||||
if (invalidate_region)
|
||||
{
|
||||
gdk_window_invalidate_region (window, invalidate_region, TRUE);
|
||||
cairo_region_destroy (invalidate_region);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_window_move_region:
|
||||
* @window: a #GdkWindow
|
||||
* @region: The #cairo_region_t to move
|
||||
* @dx: Amount to move in the X direction
|
||||
* @dy: Amount to move in the Y direction
|
||||
*
|
||||
* Move the part of @window indicated by @region by @dy pixels in the Y
|
||||
* direction and @dx pixels in the X direction. The portions of @region
|
||||
* that not covered by the new position of @region are invalidated.
|
||||
*
|
||||
* Child windows are not moved.
|
||||
*
|
||||
* Since: 2.8
|
||||
**/
|
||||
void
|
||||
_gdk_directfb_window_move_region (GdkWindow *window,
|
||||
const cairo_region_t *region,
|
||||
gint dx,
|
||||
gint dy)
|
||||
{
|
||||
GdkWindowObject *private;
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
cairo_region_t *window_clip;
|
||||
cairo_region_t *src_region;
|
||||
cairo_region_t *brought_in;
|
||||
cairo_region_t *dest_region;
|
||||
cairo_region_t *moving_invalid_region;
|
||||
GdkRectangle dest_extents;
|
||||
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
g_return_if_fail (region != NULL);
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
return;
|
||||
|
||||
private = GDK_WINDOW_OBJECT (window);
|
||||
impl = GDK_DRAWABLE_IMPL_DIRECTFB (private->impl);
|
||||
|
||||
if (dx == 0 && dy == 0)
|
||||
return;
|
||||
|
||||
GdkRectangle clip_rect = { 0, 0, impl->width, impl->height };
|
||||
window_clip = cairo_region_create_rectangle (&clip_rect);
|
||||
|
||||
/* compute source regions */
|
||||
src_region = cairo_region_copy (region);
|
||||
brought_in = cairo_region_copy (region);
|
||||
cairo_region_intersect (src_region, window_clip);
|
||||
|
||||
cairo_region_subtract (brought_in, src_region);
|
||||
cairo_region_translate (brought_in, dx, dy);
|
||||
|
||||
/* compute destination regions */
|
||||
dest_region = cairo_region_copy (src_region);
|
||||
cairo_region_translate (dest_region, dx, dy);
|
||||
cairo_region_intersect (dest_region, window_clip);
|
||||
cairo_region_get_extents (dest_region, &dest_extents);
|
||||
|
||||
cairo_region_destroy (window_clip);
|
||||
|
||||
/* calculating moving part of current invalid area */
|
||||
moving_invalid_region = NULL;
|
||||
if (private->update_area)
|
||||
{
|
||||
moving_invalid_region = cairo_region_copy (private->update_area);
|
||||
cairo_region_intersect (moving_invalid_region, src_region);
|
||||
cairo_region_translate (moving_invalid_region, dx, dy);
|
||||
}
|
||||
|
||||
/* invalidate all of the src region */
|
||||
gdk_window_invalidate_region (window, src_region, FALSE);
|
||||
|
||||
/* un-invalidate destination region */
|
||||
if (private->update_area)
|
||||
cairo_region_subtract (private->update_area, dest_region);
|
||||
|
||||
/* invalidate moving parts of existing update area */
|
||||
if (moving_invalid_region)
|
||||
{
|
||||
gdk_window_invalidate_region (window, moving_invalid_region, FALSE);
|
||||
cairo_region_destroy (moving_invalid_region);
|
||||
}
|
||||
|
||||
/* invalidate area brought in from off-screen */
|
||||
gdk_window_invalidate_region (window, brought_in, FALSE);
|
||||
cairo_region_destroy (brought_in);
|
||||
|
||||
/* Actually do the moving */
|
||||
if (impl->surface)
|
||||
{
|
||||
DFBRectangle source = { dest_extents.x - dx,
|
||||
dest_extents.y - dy,
|
||||
dest_extents.width,
|
||||
dest_extents.height};
|
||||
DFBRegion destination = { dest_extents.x,
|
||||
dest_extents.y,
|
||||
dest_extents.x+dest_extents.width-1,
|
||||
dest_extents.y+dest_extents.height-1};
|
||||
|
||||
impl->surface->SetClip (impl->surface, &destination);
|
||||
impl->surface->Blit (impl->surface, impl->surface,&source,dx,dy);
|
||||
impl->surface->SetClip (impl->surface, NULL);
|
||||
impl->surface->Flip(impl->surface,&destination,0);
|
||||
}
|
||||
cairo_region_destroy (src_region);
|
||||
cairo_region_destroy (dest_region);
|
||||
}
|
||||
58
gdk/directfb/gdkglobals-directfb.c
Normal file
58
gdk/directfb/gdkglobals-directfb.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
|
||||
GdkDisplayDFB *_gdk_display = NULL;
|
||||
GdkScreen * _gdk_screen = NULL;
|
||||
|
||||
gboolean gdk_directfb_apply_focus_opacity = FALSE;
|
||||
gboolean gdk_directfb_enable_color_keying = FALSE;
|
||||
DFBColor gdk_directfb_bg_color = { 0, 0, 0, 0 };
|
||||
DFBColor gdk_directfb_bg_color_key = { 0, 0, 0, 0 };
|
||||
gboolean gdk_directfb_monochrome_fonts = FALSE;
|
||||
|
||||
GdkWindow * _gdk_directfb_pointer_grab_window = NULL;
|
||||
GdkWindow * _gdk_directfb_keyboard_grab_window = NULL;
|
||||
GdkWindow * _gdk_directfb_pointer_grab_confine = NULL;
|
||||
gboolean _gdk_directfb_pointer_grab_owner_events = FALSE;
|
||||
gboolean _gdk_directfb_keyboard_grab_owner_events = FALSE;
|
||||
GdkEventMask _gdk_directfb_pointer_grab_events = 0;
|
||||
GdkEventMask _gdk_directfb_keyboard_grab_events = 0;
|
||||
GdkCursor * _gdk_directfb_pointer_grab_cursor = NULL;
|
||||
|
||||
GdkAtom _gdk_selection_property = 0;
|
||||
60
gdk/directfb/gdkim-directfb.c
Normal file
60
gdk/directfb/gdkim-directfb.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <locale.h>
|
||||
|
||||
#include "gdkdirectfb.h"
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------
|
||||
* gdk_set_locale
|
||||
*
|
||||
* Arguments:
|
||||
*
|
||||
* Results:
|
||||
*
|
||||
* Side effects:
|
||||
*
|
||||
*--------------------------------------------------------------
|
||||
*/
|
||||
|
||||
gchar*
|
||||
gdk_set_locale (void)
|
||||
{
|
||||
if (!setlocale (LC_ALL,""))
|
||||
g_warning ("locale not supported by C library");
|
||||
|
||||
return setlocale (LC_ALL, NULL);
|
||||
}
|
||||
405
gdk/directfb/gdkimage-directfb.c
Normal file
405
gdk/directfb/gdkimage-directfb.c
Normal file
@@ -0,0 +1,405 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
|
||||
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
#include "gdkinternals.h"
|
||||
|
||||
#include "gdkimage.h"
|
||||
|
||||
|
||||
static GList *image_list = NULL;
|
||||
static gpointer parent_class = NULL;
|
||||
|
||||
static void gdk_directfb_image_destroy (GdkImage *image);
|
||||
static void gdk_image_init (GdkImage *image);
|
||||
static void gdk_image_class_init (GdkImageClass *klass);
|
||||
static void gdk_image_finalize (GObject *object);
|
||||
|
||||
GType
|
||||
gdk_image_get_type (void)
|
||||
{
|
||||
static GType object_type = 0;
|
||||
|
||||
if (!object_type)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GdkImageClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) gdk_image_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GdkImage),
|
||||
0, /* n_preallocs */
|
||||
(GInstanceInitFunc) gdk_image_init,
|
||||
};
|
||||
|
||||
object_type = g_type_register_static (G_TYPE_OBJECT,
|
||||
"GdkImage",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
return object_type;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_image_init (GdkImage *image)
|
||||
{
|
||||
image->windowing_data = g_new0 (GdkImageDirectFB, 1);
|
||||
image->mem = NULL;
|
||||
|
||||
image_list = g_list_prepend (image_list, image);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_image_class_init (GdkImageClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
object_class->finalize = gdk_image_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_image_finalize (GObject *object)
|
||||
{
|
||||
GdkImage *image;
|
||||
|
||||
image = GDK_IMAGE (object);
|
||||
|
||||
image_list = g_list_remove (image_list, image);
|
||||
|
||||
if (image->depth == 1)
|
||||
g_free (image->mem);
|
||||
|
||||
gdk_directfb_image_destroy (image);
|
||||
|
||||
if (G_OBJECT_CLASS (parent_class)->finalize)
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
||||
/* this function is called from the atexit handler! */
|
||||
void
|
||||
_gdk_image_exit (void)
|
||||
{
|
||||
GObject *image;
|
||||
|
||||
while (image_list)
|
||||
{
|
||||
image = image_list->data;
|
||||
|
||||
gdk_image_finalize (image);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_windowing_image_init (void)
|
||||
{
|
||||
}
|
||||
|
||||
GdkImage*
|
||||
_gdk_image_new_for_depth (GdkScreen *screen,
|
||||
GdkImageType type,
|
||||
GdkVisual *visual,
|
||||
gint width,
|
||||
gint height,
|
||||
gint depth)
|
||||
{
|
||||
GdkImage *image;
|
||||
GdkImageDirectFB *private;
|
||||
DFBResult ret;
|
||||
gint pitch;
|
||||
DFBSurfacePixelFormat format;
|
||||
IDirectFBSurface *surface;
|
||||
|
||||
if (type == GDK_IMAGE_FASTEST || type == GDK_IMAGE_NORMAL)
|
||||
type = GDK_IMAGE_SHARED;
|
||||
|
||||
if (visual)
|
||||
depth = visual->depth;
|
||||
|
||||
switch (depth)
|
||||
{
|
||||
case 8:
|
||||
format = DSPF_LUT8;
|
||||
break;
|
||||
case 15:
|
||||
format = DSPF_ARGB1555;
|
||||
break;
|
||||
case 16:
|
||||
format = DSPF_RGB16;
|
||||
break;
|
||||
case 24:
|
||||
format = DSPF_RGB32;
|
||||
break;
|
||||
case 32:
|
||||
format = DSPF_ARGB;
|
||||
break;
|
||||
default:
|
||||
g_message ("unimplemented %s for depth %d", G_STRFUNC, depth);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
surface = gdk_display_dfb_create_surface(_gdk_display,format,width,height);
|
||||
if (!surface)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
surface->GetPixelFormat( surface, &format );
|
||||
|
||||
image = g_object_new (gdk_image_get_type (), NULL);
|
||||
private = image->windowing_data;
|
||||
|
||||
private->surface = surface;
|
||||
|
||||
ret = surface->Lock( surface, DSLF_WRITE, &image->mem, &pitch );
|
||||
if (ret)
|
||||
{
|
||||
DirectFBError( "IDirectFBSurface::Lock() for writing failed!\n", ret );
|
||||
g_object_unref( image );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
image->type = type;
|
||||
image->visual = visual;
|
||||
#if G_BYTE_ORDER == G_BIG_ENDIAN
|
||||
image->byte_order = GDK_MSB_FIRST;
|
||||
#else
|
||||
image->byte_order = GDK_LSB_FIRST;
|
||||
#endif
|
||||
image->width = width;
|
||||
image->height = height;
|
||||
image->depth = depth;
|
||||
image->bpp = DFB_BYTES_PER_PIXEL (format);
|
||||
image->bpl = pitch;
|
||||
image->bits_per_pixel = DFB_BITS_PER_PIXEL (format);
|
||||
|
||||
image_list = g_list_prepend (image_list, image);
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
|
||||
GdkImage*
|
||||
_gdk_directfb_copy_to_image (GdkDrawable *drawable,
|
||||
GdkImage *image,
|
||||
gint src_x,
|
||||
gint src_y,
|
||||
gint dest_x,
|
||||
gint dest_y,
|
||||
gint width,
|
||||
gint height)
|
||||
{
|
||||
GdkDrawableImplDirectFB *impl;
|
||||
GdkImageDirectFB *private;
|
||||
int pitch;
|
||||
DFBRectangle rect = { src_x, src_y, width, height };
|
||||
IDirectFBDisplayLayer *layer = _gdk_display->layer;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_DRAWABLE_IMPL_DIRECTFB (drawable), NULL);
|
||||
g_return_val_if_fail (image != NULL || (dest_x == 0 && dest_y == 0), NULL);
|
||||
|
||||
impl = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
|
||||
|
||||
if (impl->wrapper == _gdk_parent_root)
|
||||
{
|
||||
DFBResult ret;
|
||||
|
||||
ret = layer->SetCooperativeLevel (layer, DLSCL_ADMINISTRATIVE);
|
||||
if (ret)
|
||||
{
|
||||
DirectFBError ("_gdk_directfb_copy_to_image - SetCooperativeLevel",
|
||||
ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret = layer->GetSurface (layer, &impl->surface);
|
||||
if (ret)
|
||||
{
|
||||
layer->SetCooperativeLevel (layer, DLSCL_SHARED);
|
||||
DirectFBError ("_gdk_directfb_copy_to_image - GetSurface", ret);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (! impl->surface)
|
||||
return NULL;
|
||||
|
||||
if (!image)
|
||||
image = gdk_image_new (GDK_IMAGE_NORMAL,
|
||||
gdk_drawable_get_visual (drawable), width, height);
|
||||
|
||||
private = image->windowing_data;
|
||||
|
||||
private->surface->Unlock( private->surface );
|
||||
|
||||
private->surface->Blit( private->surface,
|
||||
impl->surface, &rect, dest_x, dest_y );
|
||||
|
||||
private->surface->Lock( private->surface, DSLF_READ | DSLF_WRITE, &image->mem, &pitch );
|
||||
image->bpl = pitch;
|
||||
|
||||
if (impl->wrapper == _gdk_parent_root)
|
||||
{
|
||||
impl->surface->Release (impl->surface);
|
||||
impl->surface = NULL;
|
||||
layer->SetCooperativeLevel (layer, DLSCL_SHARED);
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
guint32
|
||||
gdk_image_get_pixel (GdkImage *image,
|
||||
gint x,
|
||||
gint y)
|
||||
{
|
||||
guint32 pixel = 0;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_IMAGE (image), 0);
|
||||
|
||||
if (!(x >= 0 && x < image->width && y >= 0 && y < image->height))
|
||||
return 0;
|
||||
|
||||
if (image->depth == 1)
|
||||
pixel = (((guchar *) image->mem)[y * image->bpl + (x >> 3)] & (1 << (7 - (x & 0x7)))) != 0;
|
||||
else
|
||||
{
|
||||
guchar *pixelp = (guchar *) image->mem + y * image->bpl + x * image->bpp;
|
||||
|
||||
switch (image->bpp)
|
||||
{
|
||||
case 1:
|
||||
pixel = *pixelp;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
pixel = pixelp[0] | (pixelp[1] << 8);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return pixel;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_image_put_pixel (GdkImage *image,
|
||||
gint x,
|
||||
gint y,
|
||||
guint32 pixel)
|
||||
{
|
||||
g_return_if_fail (image != NULL);
|
||||
|
||||
if (!(x >= 0 && x < image->width && y >= 0 && y < image->height))
|
||||
return;
|
||||
|
||||
if (image->depth == 1)
|
||||
if (pixel & 1)
|
||||
((guchar *) image->mem)[y * image->bpl + (x >> 3)] |= (1 << (7 - (x & 0x7)));
|
||||
else
|
||||
((guchar *) image->mem)[y * image->bpl + (x >> 3)] &= ~(1 << (7 - (x & 0x7)));
|
||||
else
|
||||
{
|
||||
guchar *pixelp = (guchar *) image->mem + y * image->bpl + x * image->bpp;
|
||||
|
||||
switch (image->bpp)
|
||||
{
|
||||
case 4:
|
||||
pixelp[3] = 0xFF;
|
||||
case 3:
|
||||
pixelp[2] = ((pixel >> 16) & 0xFF);
|
||||
case 2:
|
||||
pixelp[1] = ((pixel >> 8) & 0xFF);
|
||||
case 1:
|
||||
pixelp[0] = (pixel & 0xFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_directfb_image_destroy (GdkImage *image)
|
||||
{
|
||||
GdkImageDirectFB *private;
|
||||
|
||||
g_return_if_fail (GDK_IS_IMAGE (image));
|
||||
|
||||
private = image->windowing_data;
|
||||
|
||||
if (!private)
|
||||
return;
|
||||
|
||||
GDK_NOTE (MISC, g_print ("gdk_directfb_image_destroy: %#lx\n",
|
||||
(gulong) private->surface));
|
||||
|
||||
private->surface->Unlock( private->surface );
|
||||
private->surface->Release( private->surface );
|
||||
|
||||
g_free (private);
|
||||
image->windowing_data = NULL;
|
||||
}
|
||||
|
||||
gint
|
||||
_gdk_windowing_get_bits_for_depth (GdkDisplay *display,
|
||||
gint depth)
|
||||
{
|
||||
switch (depth)
|
||||
{
|
||||
case 1:
|
||||
case 8:
|
||||
return 8;
|
||||
case 15:
|
||||
case 16:
|
||||
return 16;
|
||||
case 24:
|
||||
case 32:
|
||||
return 32;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
327
gdk/directfb/gdkinput-directfb.c
Normal file
327
gdk/directfb/gdkinput-directfb.c
Normal file
@@ -0,0 +1,327 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
* Copyright (C) 1999 Tor Lillqvist
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
#include "gdkinput-directfb.h"
|
||||
|
||||
#include "gdkinput.h"
|
||||
#include "gdkkeysyms.h"
|
||||
|
||||
|
||||
static GdkDeviceAxis gdk_input_core_axes[] =
|
||||
{
|
||||
{ GDK_AXIS_X, 0, 0 },
|
||||
{ GDK_AXIS_Y, 0, 0 }
|
||||
};
|
||||
|
||||
|
||||
GdkDevice * _gdk_core_pointer = NULL;
|
||||
GList * _gdk_input_devices = NULL;
|
||||
gboolean _gdk_input_ignore_core = FALSE;
|
||||
|
||||
int _gdk_directfb_mouse_x = 0;
|
||||
int _gdk_directfb_mouse_y = 0;
|
||||
|
||||
|
||||
void
|
||||
_gdk_init_input_core (void)
|
||||
{
|
||||
GdkDisplay *display = GDK_DISPLAY_OBJECT(_gdk_display);
|
||||
_gdk_core_pointer = g_object_new (GDK_TYPE_DEVICE, NULL);
|
||||
|
||||
_gdk_core_pointer->name = "Core Pointer";
|
||||
_gdk_core_pointer->source = GDK_SOURCE_MOUSE;
|
||||
_gdk_core_pointer->mode = GDK_MODE_SCREEN;
|
||||
_gdk_core_pointer->has_cursor = TRUE;
|
||||
_gdk_core_pointer->num_axes = 2;
|
||||
_gdk_core_pointer->axes = gdk_input_core_axes;
|
||||
_gdk_core_pointer->num_keys = 0;
|
||||
_gdk_core_pointer->keys = NULL;
|
||||
display->core_pointer = _gdk_core_pointer;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_device_finalize (GObject *object)
|
||||
{
|
||||
g_error ("A GdkDevice object was finalized. This should not happen");
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_device_class_init (GObjectClass *class)
|
||||
{
|
||||
class->finalize = gdk_device_finalize;
|
||||
}
|
||||
|
||||
GType
|
||||
gdk_device_get_type (void)
|
||||
{
|
||||
static GType object_type = 0;
|
||||
|
||||
if (!object_type)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GdkDeviceClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) gdk_device_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GdkDevice),
|
||||
0, /* n_preallocs */
|
||||
(GInstanceInitFunc) NULL,
|
||||
};
|
||||
|
||||
object_type = g_type_register_static (G_TYPE_OBJECT,
|
||||
"GdkDevice",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
return object_type;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_gdk_input_init (void)
|
||||
{
|
||||
_gdk_init_input_core ();
|
||||
_gdk_input_devices = g_list_append (NULL, _gdk_core_pointer);
|
||||
_gdk_input_ignore_core = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_input_exit (void)
|
||||
{
|
||||
GList *tmp_list;
|
||||
GdkDevice *gdkdev;
|
||||
|
||||
for (tmp_list = _gdk_input_devices; tmp_list; tmp_list = tmp_list->next)
|
||||
{
|
||||
gdkdev = (GdkDevice *)(tmp_list->data);
|
||||
if (!GDK_IS_CORE (gdkdev))
|
||||
{
|
||||
gdk_device_set_mode ((GdkDevice *)gdkdev, GDK_MODE_DISABLED);
|
||||
|
||||
g_free (gdkdev->name);
|
||||
g_free (gdkdev->axes);
|
||||
g_free (gdkdev->keys);
|
||||
g_free (gdkdev);
|
||||
}
|
||||
}
|
||||
|
||||
g_list_free (_gdk_input_devices);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_get_axis:
|
||||
* @device: a #GdkDevice
|
||||
* @axes: pointer to an array of axes
|
||||
* @use: the use to look for
|
||||
* @value: location to store the found value.
|
||||
*
|
||||
* Interprets an array of double as axis values for a given device,
|
||||
* and locates the value in the array for a given axis use.
|
||||
*
|
||||
* Return value: %TRUE if the given axis use was found, otherwise %FALSE
|
||||
**/
|
||||
gboolean
|
||||
gdk_device_get_axis (GdkDevice *device,
|
||||
gdouble *axes,
|
||||
GdkAxisUse use,
|
||||
gdouble *value)
|
||||
{
|
||||
gint i;
|
||||
g_return_val_if_fail (device != NULL, FALSE);
|
||||
|
||||
if (axes == NULL)
|
||||
return FALSE;
|
||||
|
||||
for (i = 0; i < device->num_axes; i++)
|
||||
if (device->axes[i].use == use)
|
||||
{
|
||||
if (value)
|
||||
*value = axes[i];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_device_set_key (GdkDevice *device,
|
||||
guint index,
|
||||
guint keyval,
|
||||
GdkModifierType modifiers)
|
||||
{
|
||||
g_return_if_fail (device != NULL);
|
||||
g_return_if_fail (index < device->num_keys);
|
||||
|
||||
device->keys[index].keyval = keyval;
|
||||
device->keys[index].modifiers = modifiers;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_device_set_axis_use (GdkDevice *device,
|
||||
guint index,
|
||||
GdkAxisUse use)
|
||||
{
|
||||
g_return_if_fail (device != NULL);
|
||||
g_return_if_fail (index < device->num_axes);
|
||||
|
||||
device->axes[index].use = use;
|
||||
|
||||
switch (use)
|
||||
{
|
||||
case GDK_AXIS_X:
|
||||
case GDK_AXIS_Y:
|
||||
device->axes[index].min = 0.0;
|
||||
device->axes[index].max = 0.0;
|
||||
break;
|
||||
case GDK_AXIS_XTILT:
|
||||
case GDK_AXIS_YTILT:
|
||||
device->axes[index].min = -1.0;
|
||||
device->axes[index].max = 1.0;
|
||||
break;
|
||||
default:
|
||||
device->axes[index].min = 0.0;
|
||||
device->axes[index].max = 1.0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_device_set_mode (GdkDevice *device,
|
||||
GdkInputMode mode)
|
||||
{
|
||||
g_message ("unimplemented %s", G_STRFUNC);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_device_get_history (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
guint32 start,
|
||||
guint32 stop,
|
||||
GdkTimeCoord ***events,
|
||||
gint *n_events)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
|
||||
g_return_val_if_fail (events != NULL, FALSE);
|
||||
g_return_val_if_fail (n_events != NULL, FALSE);
|
||||
|
||||
*n_events = 0;
|
||||
*events = NULL;
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
return FALSE;
|
||||
|
||||
if (GDK_IS_CORE (device))
|
||||
return FALSE;
|
||||
else
|
||||
return FALSE;
|
||||
//TODODO_gdk_device_get_history (device, window, start, stop, events, n_events);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_device_free_history (GdkTimeCoord **events,
|
||||
gint n_events)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < n_events; i++)
|
||||
g_free (events[i]);
|
||||
|
||||
g_free (events);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_device_get_state (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
gdouble *axes,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
g_return_if_fail (device != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
if (mask)
|
||||
*mask = _gdk_directfb_modifiers;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_directfb_mouse_get_info (gint *x,
|
||||
gint *y,
|
||||
GdkModifierType *mask)
|
||||
{
|
||||
if (x)
|
||||
*x = _gdk_directfb_mouse_x;
|
||||
|
||||
if (y)
|
||||
*y = _gdk_directfb_mouse_y;
|
||||
|
||||
if (mask)
|
||||
*mask = _gdk_directfb_modifiers;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_input_set_extension_events (GdkWindow *window,
|
||||
gint mask,
|
||||
GdkExtensionMode mode)
|
||||
{
|
||||
g_message ("unimplemented %s", G_STRFUNC);
|
||||
}
|
||||
|
||||
GList *
|
||||
gdk_devices_list (void)
|
||||
{
|
||||
return _gdk_input_devices;
|
||||
}
|
||||
|
||||
|
||||
GList *
|
||||
gdk_display_list_devices (GdkDisplay *dpy)
|
||||
{
|
||||
return _gdk_input_devices;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_device_set_source (GdkDevice *device,
|
||||
GdkInputSource source)
|
||||
{
|
||||
g_return_if_fail (device != NULL);
|
||||
device->source = source;
|
||||
}
|
||||
143
gdk/directfb/gdkinput-directfb.h
Normal file
143
gdk/directfb/gdkinput-directfb.h
Normal file
@@ -0,0 +1,143 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#ifndef __GDK_INPUT_DIRECTFB_H__
|
||||
#define __GDK_INPUT_DIRECTFB_H__
|
||||
|
||||
extern GdkModifierType _gdk_directfb_modifiers;
|
||||
extern int _gdk_directfb_mouse_x, _gdk_directfb_mouse_y;
|
||||
|
||||
typedef struct _GdkAxisInfo GdkAxisInfo;
|
||||
|
||||
/* information about a device axis */
|
||||
struct _GdkAxisInfo
|
||||
{
|
||||
/* reported x resolution */
|
||||
gint xresolution;
|
||||
|
||||
/* reported x minimum/maximum values */
|
||||
gint xmin_value, xmax_value;
|
||||
|
||||
/* calibrated resolution (for aspect ration) - only relative values
|
||||
between axes used */
|
||||
gint resolution;
|
||||
|
||||
/* calibrated minimum/maximum values */
|
||||
gint min_value, max_value;
|
||||
};
|
||||
|
||||
#define GDK_INPUT_NUM_EVENTC 6
|
||||
|
||||
struct _GdkDeviceClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
struct _GdkInputWindow
|
||||
{
|
||||
/* gdk window */
|
||||
GdkWindow *window;
|
||||
|
||||
/* Extension mode (GDK_EXTENSION_EVENTS_ALL/CURSOR) */
|
||||
GdkExtensionMode mode;
|
||||
|
||||
/* position relative to root window */
|
||||
gint root_x;
|
||||
gint root_y;
|
||||
|
||||
/* rectangles relative to window of windows obscuring this one */
|
||||
GdkRectangle *obscuring;
|
||||
gint num_obscuring;
|
||||
|
||||
/* Is there a pointer grab for this window ? */
|
||||
gint grabbed;
|
||||
};
|
||||
|
||||
/* Global data */
|
||||
|
||||
#define GDK_IS_CORE(d) (((GdkDevice *)(d)) == _gdk_core_pointer)
|
||||
|
||||
extern GList *_gdk_input_devices;
|
||||
extern GList *_gdk_input_windows;
|
||||
|
||||
extern gint _gdk_input_ignore_core;
|
||||
|
||||
/* Function declarations */
|
||||
|
||||
/* The following functions are provided by each implementation
|
||||
*/
|
||||
gint _gdk_input_window_none_event(GdkEvent *event,
|
||||
gchar *msg);
|
||||
void _gdk_input_configure_event (GdkEventConfigure *event,
|
||||
GdkWindow *window);
|
||||
void _gdk_input_enter_event (GdkEventCrossing *event,
|
||||
GdkWindow *window);
|
||||
gint _gdk_input_other_event (GdkEvent *event,
|
||||
gchar *msg,
|
||||
GdkWindow *window);
|
||||
|
||||
/* These should be in gdkinternals.h */
|
||||
|
||||
GdkInputWindow * gdk_input_window_find (GdkWindow *window);
|
||||
|
||||
void gdk_input_window_destroy (GdkWindow *window);
|
||||
|
||||
gint _gdk_input_enable_window (GdkWindow *window,
|
||||
GdkDevice *gdkdev);
|
||||
gint _gdk_input_disable_window (GdkWindow *window,
|
||||
GdkDevice *gdkdev);
|
||||
gint _gdk_input_grab_pointer (GdkWindow *window,
|
||||
gint owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindow *confine_to,
|
||||
guint32 time);
|
||||
void _gdk_input_ungrab_pointer (guint32 time);
|
||||
gboolean _gdk_device_get_history (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
guint32 start,
|
||||
guint32 stop,
|
||||
GdkTimeCoord ***events,
|
||||
gint *n_events);
|
||||
|
||||
gint gdk_input_common_init (gint include_core);
|
||||
gint gdk_input_common_other_event (GdkEvent *event,
|
||||
gchar *msg,
|
||||
GdkInputWindow *input_window,
|
||||
GdkWindow *window);
|
||||
|
||||
void _gdk_directfb_keyboard_init (void);
|
||||
void _gdk_directfb_keyboard_exit (void);
|
||||
|
||||
void gdk_directfb_translate_key_event (DFBWindowEvent *dfb_event,
|
||||
GdkEventKey *event);
|
||||
|
||||
#endif /* __GDK_INPUT_DIRECTFB_H__ */
|
||||
2032
gdk/directfb/gdkkeys-directfb.c
Normal file
2032
gdk/directfb/gdkkeys-directfb.c
Normal file
File diff suppressed because it is too large
Load Diff
417
gdk/directfb/gdkmain-directfb.c
Normal file
417
gdk/directfb/gdkmain-directfb.c
Normal file
@@ -0,0 +1,417 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
* Copyright (C) 1998-1999 Tor Lillqvist
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
/*
|
||||
Main entry point for 2.6 seems to be open_display so
|
||||
most stuff in main is moved over to gdkdisplay-directfb.c
|
||||
I'll move stub functions here that make no sense for directfb
|
||||
and true globals
|
||||
Michael Emmel
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "gdk.h"
|
||||
|
||||
#include "gdkdisplay.h"
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
#include "gdkinternals.h"
|
||||
|
||||
#include "gdkinput-directfb.h"
|
||||
|
||||
#include "gdkintl.h"
|
||||
|
||||
|
||||
void
|
||||
_gdk_windowing_init (void)
|
||||
{
|
||||
/* Not that usable called before parse_args
|
||||
*/
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_windowing_display_set_sm_client_id (GdkDisplay *display,const gchar *sm_client_id)
|
||||
{
|
||||
g_message ("gdk_set_sm_client_id() is unimplemented.");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_gdk_windowing_exit (void)
|
||||
{
|
||||
|
||||
if (_gdk_display->buffer)
|
||||
_gdk_display->buffer->Release (_gdk_display->buffer);
|
||||
|
||||
_gdk_directfb_keyboard_exit ();
|
||||
|
||||
if (_gdk_display->keyboard)
|
||||
_gdk_display->keyboard->Release (_gdk_display->keyboard);
|
||||
|
||||
_gdk_display->layer->Release (_gdk_display->layer);
|
||||
|
||||
_gdk_display->directfb->Release (_gdk_display->directfb);
|
||||
|
||||
g_free (_gdk_display);
|
||||
_gdk_display = NULL;
|
||||
}
|
||||
|
||||
gchar *
|
||||
gdk_get_display (void)
|
||||
{
|
||||
return g_strdup (gdk_display_get_name (gdk_display_get_default ()));
|
||||
}
|
||||
|
||||
|
||||
/* utils */
|
||||
static const guint type_masks[] =
|
||||
{
|
||||
GDK_STRUCTURE_MASK, /* GDK_DELETE = 0, */
|
||||
GDK_STRUCTURE_MASK, /* GDK_DESTROY = 1, */
|
||||
GDK_EXPOSURE_MASK, /* GDK_EXPOSE = 2, */
|
||||
GDK_POINTER_MOTION_MASK, /* GDK_MOTION_NOTIFY = 3, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_BUTTON_PRESS = 4, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_2BUTTON_PRESS = 5, */
|
||||
GDK_BUTTON_PRESS_MASK, /* GDK_3BUTTON_PRESS = 6, */
|
||||
GDK_BUTTON_RELEASE_MASK, /* GDK_BUTTON_RELEASE = 7, */
|
||||
GDK_KEY_PRESS_MASK, /* GDK_KEY_PRESS = 8, */
|
||||
GDK_KEY_RELEASE_MASK, /* GDK_KEY_RELEASE = 9, */
|
||||
GDK_ENTER_NOTIFY_MASK, /* GDK_ENTER_NOTIFY = 10, */
|
||||
GDK_LEAVE_NOTIFY_MASK, /* GDK_LEAVE_NOTIFY = 11, */
|
||||
GDK_FOCUS_CHANGE_MASK, /* GDK_FOCUS_CHANGE = 12, */
|
||||
GDK_STRUCTURE_MASK, /* GDK_CONFIGURE = 13, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK,/* GDK_MAP = 14, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK,/* GDK_UNMAP = 15, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_PROPERTY_NOTIFY = 16, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_CLEAR = 17, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_REQUEST = 18, */
|
||||
GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_NOTIFY = 19, */
|
||||
GDK_PROXIMITY_IN_MASK, /* GDK_PROXIMITY_IN = 20, */
|
||||
GDK_PROXIMITY_OUT_MASK, /* GDK_PROXIMITY_OUT = 21, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_ENTER = 22, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_LEAVE = 23, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_MOTION = 24, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DRAG_STATUS = 25, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DROP_START = 26, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_DROP_FINISHED = 27, */
|
||||
GDK_ALL_EVENTS_MASK, /* GDK_CLIENT_EVENT = 28, */
|
||||
GDK_VISIBILITY_NOTIFY_MASK,/* GDK_VISIBILITY_NOTIFY = 29, */
|
||||
GDK_EXPOSURE_MASK, /* GDK_NO_EXPOSE = 30, */
|
||||
GDK_SCROLL_MASK /* GDK_SCROLL = 31 */
|
||||
};
|
||||
|
||||
GdkWindow *
|
||||
gdk_directfb_other_event_window (GdkWindow *window,
|
||||
GdkEventType type)
|
||||
{
|
||||
guint32 evmask;
|
||||
GdkWindow *w;
|
||||
|
||||
w = window;
|
||||
while (w != _gdk_parent_root)
|
||||
{
|
||||
/* Huge hack, so that we don't propagate events to GtkWindow->frame */
|
||||
if ((w != window) &&
|
||||
(GDK_WINDOW_OBJECT (w)->window_type != GDK_WINDOW_CHILD) &&
|
||||
(g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
|
||||
break;
|
||||
|
||||
evmask = GDK_WINDOW_OBJECT (w)->event_mask;
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
return w;
|
||||
|
||||
w = gdk_window_get_parent (w);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GdkWindow *
|
||||
gdk_directfb_pointer_event_window (GdkWindow *window,
|
||||
GdkEventType type)
|
||||
{
|
||||
guint evmask;
|
||||
GdkModifierType mask;
|
||||
GdkWindow *w;
|
||||
|
||||
gdk_directfb_mouse_get_info (NULL, NULL, &mask);
|
||||
|
||||
if (_gdk_directfb_pointer_grab_window && !_gdk_directfb_pointer_grab_owner_events )
|
||||
{
|
||||
evmask = _gdk_directfb_pointer_grab_events;
|
||||
|
||||
if (evmask & (GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON2_MOTION_MASK |
|
||||
GDK_BUTTON3_MOTION_MASK))
|
||||
{
|
||||
if (((mask & GDK_BUTTON1_MASK) &&
|
||||
(evmask & GDK_BUTTON1_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON2_MASK) &&
|
||||
(evmask & GDK_BUTTON2_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON3_MASK) &&
|
||||
(evmask & GDK_BUTTON3_MOTION_MASK)))
|
||||
evmask |= GDK_POINTER_MOTION_MASK;
|
||||
}
|
||||
|
||||
if (evmask & type_masks[type]) {
|
||||
|
||||
if( _gdk_directfb_pointer_grab_owner_events ) {
|
||||
return _gdk_directfb_pointer_grab_window;
|
||||
}else {
|
||||
GdkWindowObject *obj= GDK_WINDOW_OBJECT(window);
|
||||
while (obj != NULL &&
|
||||
obj != GDK_WINDOW_OBJECT(_gdk_directfb_pointer_grab_window)) {
|
||||
obj = (GdkWindowObject *)obj->parent;
|
||||
}
|
||||
if( obj ==GDK_WINDOW_OBJECT(_gdk_directfb_pointer_grab_window) ) {
|
||||
return window;
|
||||
}else {
|
||||
//was not child of the grab window so return the grab window
|
||||
return _gdk_directfb_pointer_grab_window;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
w = window;
|
||||
while (w != _gdk_parent_root)
|
||||
{
|
||||
/* Huge hack, so that we don't propagate events to GtkWindow->frame */
|
||||
if ((w != window) &&
|
||||
(GDK_WINDOW_OBJECT (w)->window_type != GDK_WINDOW_CHILD) &&
|
||||
(g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
|
||||
break;
|
||||
|
||||
evmask = GDK_WINDOW_OBJECT (w)->event_mask;
|
||||
|
||||
if (evmask & (GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON2_MOTION_MASK |
|
||||
GDK_BUTTON3_MOTION_MASK))
|
||||
{
|
||||
if (((mask & GDK_BUTTON1_MASK) &&
|
||||
(evmask & GDK_BUTTON1_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON2_MASK) &&
|
||||
(evmask & GDK_BUTTON2_MOTION_MASK)) ||
|
||||
((mask & GDK_BUTTON3_MASK) &&
|
||||
(evmask & GDK_BUTTON3_MOTION_MASK)))
|
||||
evmask |= GDK_POINTER_MOTION_MASK;
|
||||
}
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
return w;
|
||||
|
||||
w = gdk_window_get_parent (w);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GdkWindow *
|
||||
gdk_directfb_keyboard_event_window (GdkWindow *window,
|
||||
GdkEventType type)
|
||||
{
|
||||
guint32 evmask;
|
||||
GdkWindow *w;
|
||||
|
||||
if (_gdk_directfb_keyboard_grab_window &&
|
||||
!_gdk_directfb_keyboard_grab_owner_events)
|
||||
{
|
||||
return _gdk_directfb_keyboard_grab_window;
|
||||
}
|
||||
|
||||
w = window;
|
||||
while (w != _gdk_parent_root)
|
||||
{
|
||||
/* Huge hack, so that we don't propagate events to GtkWindow->frame */
|
||||
if ((w != window) &&
|
||||
(GDK_WINDOW_OBJECT (w)->window_type != GDK_WINDOW_CHILD) &&
|
||||
(g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
|
||||
break;
|
||||
|
||||
evmask = GDK_WINDOW_OBJECT (w)->event_mask;
|
||||
|
||||
if (evmask & type_masks[type])
|
||||
return w;
|
||||
|
||||
w = gdk_window_get_parent (w);
|
||||
}
|
||||
return w;
|
||||
}
|
||||
|
||||
|
||||
GdkEvent *
|
||||
gdk_directfb_event_make (GdkWindow *window,
|
||||
GdkEventType type)
|
||||
{
|
||||
GdkEvent *event = gdk_event_new (GDK_NOTHING);
|
||||
guint32 the_time = gdk_directfb_get_time ();
|
||||
event->any.type = type;
|
||||
event->any.window = g_object_ref (window);
|
||||
event->any.send_event = FALSE;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case GDK_MOTION_NOTIFY:
|
||||
event->motion.time = the_time;
|
||||
event->motion.axes = NULL;
|
||||
break;
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
case GDK_3BUTTON_PRESS:
|
||||
case GDK_BUTTON_RELEASE:
|
||||
event->button.time = the_time;
|
||||
event->button.axes = NULL;
|
||||
break;
|
||||
case GDK_KEY_PRESS:
|
||||
case GDK_KEY_RELEASE:
|
||||
event->key.time = the_time;
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
event->crossing.time = the_time;
|
||||
break;
|
||||
case GDK_PROPERTY_NOTIFY:
|
||||
event->property.time = the_time;
|
||||
break;
|
||||
case GDK_SELECTION_CLEAR:
|
||||
case GDK_SELECTION_REQUEST:
|
||||
case GDK_SELECTION_NOTIFY:
|
||||
event->selection.time = the_time;
|
||||
break;
|
||||
case GDK_PROXIMITY_IN:
|
||||
case GDK_PROXIMITY_OUT:
|
||||
event->proximity.time = the_time;
|
||||
break;
|
||||
case GDK_DRAG_ENTER:
|
||||
case GDK_DRAG_LEAVE:
|
||||
case GDK_DRAG_MOTION:
|
||||
case GDK_DRAG_STATUS:
|
||||
case GDK_DROP_START:
|
||||
case GDK_DROP_FINISHED:
|
||||
event->dnd.time = the_time;
|
||||
break;
|
||||
case GDK_SCROLL:
|
||||
event->scroll.time = the_time;
|
||||
break;
|
||||
case GDK_FOCUS_CHANGE:
|
||||
case GDK_CONFIGURE:
|
||||
case GDK_MAP:
|
||||
case GDK_UNMAP:
|
||||
case GDK_CLIENT_EVENT:
|
||||
case GDK_VISIBILITY_NOTIFY:
|
||||
case GDK_NO_EXPOSE:
|
||||
case GDK_DELETE:
|
||||
case GDK_DESTROY:
|
||||
case GDK_EXPOSE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
_gdk_event_queue_append (gdk_display_get_default (), event);
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_error_trap_push (void)
|
||||
{
|
||||
}
|
||||
|
||||
gint
|
||||
gdk_error_trap_pop (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
GdkGrabStatus
|
||||
gdk_keyboard_grab (GdkWindow *window,
|
||||
gint owner_events,
|
||||
guint32 time)
|
||||
{
|
||||
return gdk_directfb_keyboard_grab (gdk_display_get_default(),
|
||||
window,
|
||||
owner_events,
|
||||
time);
|
||||
}
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------
|
||||
* gdk_pointer_grab
|
||||
*
|
||||
* Grabs the pointer to a specific window
|
||||
*
|
||||
* Arguments:
|
||||
* "window" is the window which will receive the grab
|
||||
* "owner_events" specifies whether events will be reported as is,
|
||||
* or relative to "window"
|
||||
* "event_mask" masks only interesting events
|
||||
* "confine_to" limits the cursor movement to the specified window
|
||||
* "cursor" changes the cursor for the duration of the grab
|
||||
* "time" specifies the time
|
||||
*
|
||||
* Results:
|
||||
*
|
||||
* Side effects:
|
||||
* requires a corresponding call to gdk_pointer_ungrab
|
||||
*
|
||||
*--------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
GdkGrabStatus
|
||||
_gdk_windowing_pointer_grab (GdkWindow *window,
|
||||
GdkWindow *native,
|
||||
gboolean owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindow *confine_to,
|
||||
GdkCursor *cursor,
|
||||
guint32 time)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
|
||||
g_return_val_if_fail (confine_to == NULL || GDK_IS_WINDOW (confine_to), 0);
|
||||
|
||||
_gdk_display_add_pointer_grab (&_gdk_display->parent,
|
||||
window,
|
||||
native,
|
||||
owner_events,
|
||||
event_mask,
|
||||
0,
|
||||
time,
|
||||
FALSE);
|
||||
|
||||
return GDK_GRAB_SUCCESS;
|
||||
}
|
||||
337
gdk/directfb/gdkpixmap-directfb.c
Normal file
337
gdk/directfb/gdkpixmap-directfb.c
Normal file
@@ -0,0 +1,337 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
* Copyright (C) 1998-1999 Tor Lillqvist
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdk.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "gdkdirectfb.h"
|
||||
#include "gdkprivate-directfb.h"
|
||||
|
||||
#include "gdkinternals.h"
|
||||
|
||||
#include "gdkpixmap.h"
|
||||
|
||||
|
||||
static void gdk_pixmap_impl_directfb_init (GdkPixmapImplDirectFB *pixmap);
|
||||
static void gdk_pixmap_impl_directfb_class_init (GdkPixmapImplDirectFBClass *klass);
|
||||
static void gdk_pixmap_impl_directfb_finalize (GObject *object);
|
||||
|
||||
|
||||
static gpointer parent_class = NULL;
|
||||
|
||||
|
||||
GType
|
||||
gdk_pixmap_impl_directfb_get_type (void)
|
||||
{
|
||||
static GType object_type = 0;
|
||||
|
||||
if (!object_type)
|
||||
{
|
||||
const GTypeInfo object_info =
|
||||
{
|
||||
sizeof (GdkPixmapImplDirectFBClass),
|
||||
(GBaseInitFunc) NULL,
|
||||
(GBaseFinalizeFunc) NULL,
|
||||
(GClassInitFunc) gdk_pixmap_impl_directfb_class_init,
|
||||
NULL, /* class_finalize */
|
||||
NULL, /* class_data */
|
||||
sizeof (GdkPixmapImplDirectFB),
|
||||
0, /* n_preallocs */
|
||||
(GInstanceInitFunc) gdk_pixmap_impl_directfb_init,
|
||||
};
|
||||
|
||||
object_type = g_type_register_static (GDK_TYPE_DRAWABLE_IMPL_DIRECTFB,
|
||||
"GdkPixmapImplDirectFB",
|
||||
&object_info, 0);
|
||||
}
|
||||
|
||||
return object_type;
|
||||
}
|
||||
|
||||
GType
|
||||
_gdk_pixmap_impl_get_type (void)
|
||||
{
|
||||
return gdk_pixmap_impl_directfb_get_type ();
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_pixmap_impl_directfb_init (GdkPixmapImplDirectFB *impl)
|
||||
{
|
||||
GdkDrawableImplDirectFB *draw_impl = GDK_DRAWABLE_IMPL_DIRECTFB (impl);
|
||||
draw_impl->width = 1;
|
||||
draw_impl->height = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_pixmap_impl_directfb_class_init (GdkPixmapImplDirectFBClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
parent_class = g_type_class_peek_parent (klass);
|
||||
|
||||
object_class->finalize = gdk_pixmap_impl_directfb_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_pixmap_impl_directfb_finalize (GObject *object)
|
||||
{
|
||||
if (G_OBJECT_CLASS (parent_class)->finalize)
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
GdkPixmap*
|
||||
_gdk_pixmap_new (GdkDrawable *drawable,
|
||||
gint width,
|
||||
gint height,
|
||||
gint depth)
|
||||
{
|
||||
DFBSurfacePixelFormat format;
|
||||
IDirectFBSurface *surface;
|
||||
GdkPixmap *pixmap;
|
||||
GdkDrawableImplDirectFB *draw_impl;
|
||||
|
||||
g_return_val_if_fail (drawable == NULL || GDK_IS_DRAWABLE (drawable), NULL);
|
||||
g_return_val_if_fail (drawable != NULL || depth != -1, NULL);
|
||||
g_return_val_if_fail (width > 0 && height > 0, NULL);
|
||||
|
||||
if (!drawable)
|
||||
drawable = _gdk_parent_root;
|
||||
|
||||
if (GDK_IS_WINDOW (drawable) && GDK_WINDOW_DESTROYED (drawable))
|
||||
return NULL;
|
||||
|
||||
GDK_NOTE (MISC, g_print ("gdk_pixmap_new: %dx%dx%d\n",
|
||||
width, height, depth));
|
||||
|
||||
if (depth == -1)
|
||||
{
|
||||
draw_impl =
|
||||
GDK_DRAWABLE_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (drawable)->impl);
|
||||
|
||||
g_return_val_if_fail (draw_impl != NULL, NULL);
|
||||
|
||||
draw_impl->surface->GetPixelFormat (draw_impl->surface, &format);
|
||||
depth = DFB_BITS_PER_PIXEL (format);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (depth)
|
||||
{
|
||||
case 1:
|
||||
format = DSPF_A8;
|
||||
break;
|
||||
case 8:
|
||||
format = DSPF_LUT8;
|
||||
break;
|
||||
case 15:
|
||||
format = DSPF_ARGB1555;
|
||||
break;
|
||||
case 16:
|
||||
format = DSPF_RGB16;
|
||||
break;
|
||||
case 24:
|
||||
format = DSPF_RGB24;
|
||||
break;
|
||||
case 32:
|
||||
format = DSPF_RGB32;
|
||||
break;
|
||||
default:
|
||||
g_message ("unimplemented %s for depth %d", G_STRFUNC, depth);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if( !(surface =
|
||||
gdk_display_dfb_create_surface(_gdk_display,format,width,height) )) {
|
||||
g_assert( surface != NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pixmap = g_object_new (gdk_pixmap_get_type (), NULL);
|
||||
draw_impl = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_PIXMAP_OBJECT (pixmap)->impl);
|
||||
draw_impl->surface = surface;
|
||||
surface->Clear (surface, 0x0, 0x0, 0x0, 0x0);
|
||||
surface->GetSize (surface, &draw_impl->width, &draw_impl->height);
|
||||
surface->GetPixelFormat (surface, &draw_impl->format);
|
||||
|
||||
draw_impl->abs_x = draw_impl->abs_y = 0;
|
||||
|
||||
GDK_PIXMAP_OBJECT (pixmap)->depth = depth;
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
GdkPixmap *
|
||||
_gdk_bitmap_create_from_data (GdkDrawable *drawable,
|
||||
const gchar *data,
|
||||
gint width,
|
||||
gint height)
|
||||
{
|
||||
GdkPixmap *pixmap;
|
||||
|
||||
g_return_val_if_fail (drawable == NULL || GDK_IS_DRAWABLE (drawable), NULL);
|
||||
g_return_val_if_fail (data != NULL, NULL);
|
||||
g_return_val_if_fail (width > 0 && height > 0, NULL);
|
||||
|
||||
GDK_NOTE (MISC, g_print ("gdk_bitmap_create_from_data: %dx%d\n",
|
||||
width, height));
|
||||
|
||||
pixmap = gdk_pixmap_new (drawable, width, height, 1);
|
||||
|
||||
#define GET_PIXEL(data,pixel) \
|
||||
((data[(pixel / 8)] & (0x1 << ((pixel) % 8))) >> ((pixel) % 8))
|
||||
|
||||
if (pixmap)
|
||||
{
|
||||
guchar *dst;
|
||||
gint pitch;
|
||||
|
||||
IDirectFBSurface *surface;
|
||||
|
||||
surface = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_PIXMAP_OBJECT (pixmap)->impl)->surface;
|
||||
|
||||
if (surface->Lock( surface, DSLF_WRITE, (void**)(&dst), &pitch ) == DFB_OK)
|
||||
{
|
||||
gint i, j;
|
||||
|
||||
for (i = 0; i < height; i++)
|
||||
{
|
||||
for (j = 0; j < width; j++)
|
||||
{
|
||||
dst[j] = GET_PIXEL (data, j) * 255;
|
||||
}
|
||||
|
||||
data += (width + 7) / 8;
|
||||
dst += pitch;
|
||||
}
|
||||
|
||||
surface->Unlock( surface );
|
||||
}
|
||||
}
|
||||
|
||||
#undef GET_PIXEL
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
GdkPixmap*
|
||||
_gdk_pixmap_create_from_data (GdkDrawable *drawable,
|
||||
const gchar *data,
|
||||
gint width,
|
||||
gint height,
|
||||
gint depth,
|
||||
const GdkColor *fg,
|
||||
const GdkColor *bg)
|
||||
{
|
||||
GdkPixmap *pixmap;
|
||||
|
||||
g_return_val_if_fail (drawable == NULL || GDK_IS_DRAWABLE (drawable), NULL);
|
||||
g_return_val_if_fail (data != NULL, NULL);
|
||||
g_return_val_if_fail (drawable != NULL || depth > 0, NULL);
|
||||
g_return_val_if_fail (width > 0 && height > 0, NULL);
|
||||
|
||||
GDK_NOTE (MISC, g_print ("gdk_pixmap_create_from_data: %dx%dx%d\n",
|
||||
width, height, depth));
|
||||
|
||||
pixmap = gdk_pixmap_new (drawable, width, height, depth);
|
||||
|
||||
if (pixmap)
|
||||
{
|
||||
IDirectFBSurface *surface;
|
||||
gchar *dst;
|
||||
gint pitch;
|
||||
gint src_pitch;
|
||||
|
||||
depth = gdk_drawable_get_depth (pixmap);
|
||||
src_pitch = width * ((depth + 7) / 8);
|
||||
|
||||
surface = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_PIXMAP_OBJECT (pixmap)->impl)->surface;
|
||||
|
||||
if (surface->Lock( surface,
|
||||
DSLF_WRITE, (void**)(&dst), &pitch ) == DFB_OK)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < height; i++)
|
||||
{
|
||||
memcpy (dst, data, src_pitch);
|
||||
dst += pitch;
|
||||
data += src_pitch;
|
||||
}
|
||||
|
||||
surface->Unlock( surface );
|
||||
}
|
||||
}
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
GdkPixmap*
|
||||
gdk_pixmap_foreign_new (GdkNativeWindow anid)
|
||||
{
|
||||
g_warning(" gdk_pixmap_foreign_new unsuporrted \n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GdkPixmap*
|
||||
gdk_pixmap_foreign_new_for_display (GdkDisplay *display, GdkNativeWindow anid)
|
||||
{
|
||||
return gdk_pixmap_foreign_new(anid);
|
||||
}
|
||||
|
||||
GdkPixmap*
|
||||
gdk_pixmap_foreign_new_for_screen (GdkScreen *screen,
|
||||
GdkNativeWindow anid,
|
||||
gint width,
|
||||
gint height,
|
||||
gint depth)
|
||||
{
|
||||
/*Use the root drawable for now since only one screen */
|
||||
return gdk_pixmap_new(NULL,width,height,depth);
|
||||
}
|
||||
|
||||
|
||||
GdkPixmap*
|
||||
gdk_pixmap_lookup (GdkNativeWindow anid)
|
||||
{
|
||||
g_warning(" gdk_pixmap_lookup unsuporrted \n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GdkPixmap* gdk_pixmap_lookup_for_display (GdkDisplay *display,GdkNativeWindow anid)
|
||||
{
|
||||
return gdk_pixmap_lookup (anid);
|
||||
}
|
||||
421
gdk/directfb/gdkprivate-directfb.h
Normal file
421
gdk/directfb/gdkprivate-directfb.h
Normal file
@@ -0,0 +1,421 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
||||
* file for a list of people on the GTK+ Team.
|
||||
*/
|
||||
|
||||
/*
|
||||
* GTK+ DirectFB backend
|
||||
* Copyright (C) 2001-2002 convergence integrated media GmbH
|
||||
* Copyright (C) 2002-2004 convergence GmbH
|
||||
* Written by Denis Oliver Kropp <dok@convergence.de> and
|
||||
* Sven Neumann <sven@convergence.de>
|
||||
*/
|
||||
|
||||
#ifndef __GDK_PRIVATE_DIRECTFB_H__
|
||||
#define __GDK_PRIVATE_DIRECTFB_H__
|
||||
|
||||
//#include <gdk/gdk.h>
|
||||
#include <gdk/gdkprivate.h>
|
||||
#include "gdkinternals.h"
|
||||
#include "gdkcursor.h"
|
||||
#include "gdkdisplay-directfb.h"
|
||||
#include <cairo.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <directfb_util.h>
|
||||
|
||||
|
||||
#define GDK_TYPE_DRAWABLE_IMPL_DIRECTFB (gdk_drawable_impl_directfb_get_type ())
|
||||
#define GDK_DRAWABLE_IMPL_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DRAWABLE_IMPL_DIRECTFB, GdkDrawableImplDirectFB))
|
||||
#define GDK_IS_DRAWABLE_IMPL_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DRAWABLE_IMPL_DIRECTFB))
|
||||
|
||||
#define GDK_TYPE_WINDOW_IMPL_DIRECTFB (gdk_window_impl_directfb_get_type ())
|
||||
#define GDK_WINDOW_IMPL_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW_IMPL_DIRECTFB, GdkWindowImplDirectFB))
|
||||
#define GDK_IS_WINDOW_IMPL_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_IMPL_DIRECTFB))
|
||||
|
||||
#define GDK_TYPE_PIXMAP_IMPL_DIRECTFB (gdk_pixmap_impl_directfb_get_type ())
|
||||
#define GDK_PIXMAP_IMPL_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_PIXMAP_IMPL_DIRECTFB, GdkPixmapImplDirectFB))
|
||||
#define GDK_IS_PIXMAP_IMPL_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_PIXMAP_IMPL_DIRECTFB))
|
||||
|
||||
|
||||
typedef struct _GdkDrawableImplDirectFB GdkDrawableImplDirectFB;
|
||||
typedef struct _GdkWindowImplDirectFB GdkWindowImplDirectFB;
|
||||
typedef struct _GdkPixmapImplDirectFB GdkPixmapImplDirectFB;
|
||||
|
||||
|
||||
struct _GdkDrawableImplDirectFB
|
||||
{
|
||||
GdkDrawable parent_object;
|
||||
|
||||
GdkDrawable *wrapper;
|
||||
|
||||
gboolean buffered;
|
||||
|
||||
cairo_region_t paint_region;
|
||||
gint paint_depth;
|
||||
gint width;
|
||||
gint height;
|
||||
gint abs_x;
|
||||
gint abs_y;
|
||||
|
||||
cairo_region_t clip_region;
|
||||
|
||||
GdkColormap *colormap;
|
||||
|
||||
IDirectFBSurface *surface;
|
||||
DFBSurfacePixelFormat format;
|
||||
cairo_surface_t * cairo_surface;
|
||||
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GdkDrawableClass parent_class;
|
||||
} GdkDrawableImplDirectFBClass;
|
||||
|
||||
GType gdk_drawable_impl_directfb_get_type (void);
|
||||
|
||||
GdkEvent * gdk_directfb_event_make (GdkWindow *window,
|
||||
GdkEventType type);
|
||||
|
||||
|
||||
/*
|
||||
* Pixmap
|
||||
*/
|
||||
|
||||
struct _GdkPixmapImplDirectFB
|
||||
{
|
||||
GdkDrawableImplDirectFB parent_instance;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GdkDrawableImplDirectFBClass parent_class;
|
||||
} GdkPixmapImplDirectFBClass;
|
||||
|
||||
GType gdk_pixmap_impl_directfb_get_type (void);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Window
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
gulong length;
|
||||
GdkAtom type;
|
||||
gint format;
|
||||
guchar data[1];
|
||||
} GdkWindowProperty;
|
||||
|
||||
|
||||
struct _GdkWindowImplDirectFB
|
||||
{
|
||||
GdkDrawableImplDirectFB drawable;
|
||||
GdkWindow *gdkWindow;
|
||||
|
||||
IDirectFBWindow *window;
|
||||
|
||||
DFBWindowID dfb_id;
|
||||
|
||||
GdkCursor *cursor;
|
||||
GHashTable *properties;
|
||||
|
||||
guint8 opacity;
|
||||
|
||||
GdkWindowTypeHint type_hint;
|
||||
|
||||
DFBUpdates flips;
|
||||
DFBRegion flip_regions[4];
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GdkDrawableImplDirectFBClass parent_class;
|
||||
} GdkWindowImplDirectFBClass;
|
||||
|
||||
GType gdk_window_impl_directfb_get_type (void);
|
||||
|
||||
void gdk_directfb_window_send_crossing_events (GdkWindow *src,
|
||||
GdkWindow *dest,
|
||||
GdkCrossingMode mode);
|
||||
|
||||
void _gdk_directfb_calc_abs (GdkWindow *window);
|
||||
|
||||
GdkWindow * gdk_directfb_window_find_toplevel (GdkWindow *window);
|
||||
|
||||
|
||||
void gdk_directfb_window_id_table_insert (DFBWindowID dfb_id,
|
||||
GdkWindow *window);
|
||||
void gdk_directfb_window_id_table_remove (DFBWindowID dfb_id);
|
||||
GdkWindow * gdk_directfb_window_id_table_lookup (DFBWindowID dfb_id);
|
||||
|
||||
void _gdk_directfb_window_get_offsets (GdkWindow *window,
|
||||
gint *x_offset,
|
||||
gint *y_offset);
|
||||
void _gdk_directfb_window_scroll (GdkWindow *window,
|
||||
gint dx,
|
||||
gint dy);
|
||||
void _gdk_directfb_window_move_region (GdkWindow *window,
|
||||
const cairo_region_t *region,
|
||||
gint dx,
|
||||
gint dy);
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GdkCursor cursor;
|
||||
|
||||
gint hot_x;
|
||||
gint hot_y;
|
||||
IDirectFBSurface *shape;
|
||||
} GdkCursorDirectFB;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GdkVisual visual;
|
||||
DFBSurfacePixelFormat format;
|
||||
} GdkVisualDirectFB;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IDirectFBSurface *surface;
|
||||
} GdkImageDirectFB;
|
||||
|
||||
|
||||
#define GDK_TYPE_GC_DIRECTFB (_gdk_gc_directfb_get_type ())
|
||||
#define GDK_GC_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GC_DIRECTFB, GdkGCDirectFB))
|
||||
#define GDK_IS_GC_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GC_DIRECTFB))
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GdkGC parent_instance;
|
||||
|
||||
cairo_region_t clip_region;
|
||||
|
||||
GdkGCValuesMask values_mask;
|
||||
GdkGCValues values;
|
||||
} GdkGCDirectFB;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GdkGCClass parent_class;
|
||||
} GdkGCDirectFBClass;
|
||||
|
||||
GType _gdk_gc_directfb_get_type (void);
|
||||
|
||||
GdkGC * _gdk_directfb_gc_new (GdkDrawable *drawable,
|
||||
GdkGCValues *values,
|
||||
GdkGCValuesMask values_mask);
|
||||
|
||||
GdkImage* _gdk_directfb_copy_to_image (GdkDrawable *drawable,
|
||||
GdkImage *image,
|
||||
gint src_x,
|
||||
gint src_y,
|
||||
gint dest_x,
|
||||
gint dest_y,
|
||||
gint width,
|
||||
gint height);
|
||||
|
||||
void gdk_directfb_event_windows_add (GdkWindow *window);
|
||||
void gdk_directfb_event_windows_remove (GdkWindow *window);
|
||||
|
||||
GdkGrabStatus gdk_directfb_keyboard_grab (GdkDisplay *display,
|
||||
GdkWindow *window,
|
||||
gint owner_events,
|
||||
guint32 time);
|
||||
|
||||
void gdk_directfb_keyboard_ungrab(GdkDisplay *display,
|
||||
guint32 time);
|
||||
|
||||
GdkGrabStatus gdk_directfb_pointer_grab (GdkWindow *window,
|
||||
gint owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkWindow *confine_to,
|
||||
GdkCursor *cursor,
|
||||
guint32 time,
|
||||
gboolean implicit_grab);
|
||||
void gdk_directfb_pointer_ungrab (guint32 time,
|
||||
gboolean implicit_grab);
|
||||
|
||||
guint32 gdk_directfb_get_time (void);
|
||||
|
||||
GdkWindow * gdk_directfb_pointer_event_window (GdkWindow *window,
|
||||
GdkEventType type);
|
||||
GdkWindow * gdk_directfb_keyboard_event_window (GdkWindow *window,
|
||||
GdkEventType type);
|
||||
GdkWindow * gdk_directfb_other_event_window (GdkWindow *window,
|
||||
GdkEventType type);
|
||||
void _gdk_selection_window_destroyed (GdkWindow *window);
|
||||
|
||||
void _gdk_directfb_move_resize_child (GdkWindow *window,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height);
|
||||
|
||||
GdkWindow * gdk_directfb_child_at (GdkWindow *window,
|
||||
gint *x,
|
||||
gint *y);
|
||||
|
||||
GdkWindow * gdk_directfb_window_find_focus (void);
|
||||
|
||||
void gdk_directfb_change_focus (GdkWindow *new_focus_window);
|
||||
|
||||
void gdk_directfb_mouse_get_info (gint *x,
|
||||
gint *y,
|
||||
GdkModifierType *mask);
|
||||
|
||||
/**********************/
|
||||
/* Global variables */
|
||||
/**********************/
|
||||
|
||||
extern GdkDisplayDFB *_gdk_display;
|
||||
|
||||
/* Pointer grab info */
|
||||
extern GdkWindow * _gdk_directfb_pointer_grab_window;
|
||||
extern gboolean _gdk_directfb_pointer_grab_owner_events;
|
||||
extern GdkWindow * _gdk_directfb_pointer_grab_confine;
|
||||
extern GdkEventMask _gdk_directfb_pointer_grab_events;
|
||||
extern GdkCursor * _gdk_directfb_pointer_grab_cursor;
|
||||
|
||||
/* Keyboard grab info */
|
||||
extern GdkWindow * _gdk_directfb_keyboard_grab_window;
|
||||
extern GdkEventMask _gdk_directfb_keyboard_grab_events;
|
||||
extern gboolean _gdk_directfb_keyboard_grab_owner_events;
|
||||
|
||||
extern GdkScreen * _gdk_screen;
|
||||
|
||||
extern GdkAtom _gdk_selection_property;
|
||||
|
||||
|
||||
IDirectFBPalette * gdk_directfb_colormap_get_palette (GdkColormap *colormap);
|
||||
|
||||
|
||||
/* these are Linux-FB specific functions used for window decorations */
|
||||
|
||||
typedef gboolean (* GdkWindowChildChanged) (GdkWindow *window,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height,
|
||||
gpointer user_data);
|
||||
typedef void (* GdkWindowChildGetPos) (GdkWindow *window,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gpointer user_data);
|
||||
|
||||
void gdk_fb_window_set_child_handler (GdkWindow *window,
|
||||
GdkWindowChildChanged changed,
|
||||
GdkWindowChildGetPos get_pos,
|
||||
gpointer user_data);
|
||||
|
||||
void gdk_directfb_clip_region (GdkDrawable *drawable,
|
||||
GdkGC *gc,
|
||||
GdkRectangle *draw_rect,
|
||||
cairo_region_t *ret_clip);
|
||||
|
||||
|
||||
/* Utilities for avoiding mallocs */
|
||||
|
||||
static inline void
|
||||
temp_region_init_copy( cairo_region_t *region,
|
||||
const cairo_region_t *source)
|
||||
{
|
||||
if (region != source) /* don't want to copy to itself */
|
||||
{
|
||||
if (region->size < source->numRects)
|
||||
{
|
||||
if (region->rects && region->rects != ®ion->extents)
|
||||
g_free( region->rects );
|
||||
|
||||
region->rects = g_new (cairo_region_tBox, source->numRects);
|
||||
region->size = source->numRects;
|
||||
}
|
||||
|
||||
region->numRects = source->numRects;
|
||||
region->extents = source->extents;
|
||||
|
||||
memcpy( region->rects, source->rects, source->numRects * sizeof (cairo_region_tBox) );
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
temp_region_init_rectangle( cairo_region_t *region,
|
||||
const GdkRectangle *rect )
|
||||
{
|
||||
region->numRects = 1;
|
||||
region->rects = ®ion->extents;
|
||||
region->extents.x1 = rect->x;
|
||||
region->extents.y1 = rect->y;
|
||||
region->extents.x2 = rect->x + rect->width;
|
||||
region->extents.y2 = rect->y + rect->height;
|
||||
region->size = 1;
|
||||
}
|
||||
|
||||
static inline void
|
||||
temp_region_init_rectangle_vals( cairo_region_t *region,
|
||||
int x,
|
||||
int y,
|
||||
int w,
|
||||
int h )
|
||||
{
|
||||
region->numRects = 1;
|
||||
region->rects = ®ion->extents;
|
||||
region->extents.x1 = x;
|
||||
region->extents.y1 = y;
|
||||
region->extents.x2 = x + w;
|
||||
region->extents.y2 = y + h;
|
||||
region->size = 1;
|
||||
}
|
||||
|
||||
static inline void
|
||||
temp_region_reset( cairo_region_t *region )
|
||||
{
|
||||
if (region->size > 32 && region->rects && region->rects != ®ion->extents) {
|
||||
g_free( region->rects );
|
||||
|
||||
region->size = 1;
|
||||
region->rects = ®ion->extents;
|
||||
}
|
||||
|
||||
region->numRects = 0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
temp_region_deinit( cairo_region_t *region )
|
||||
{
|
||||
if (region->rects && region->rects != ®ion->extents) {
|
||||
g_free( region->rects );
|
||||
region->rects = NULL;
|
||||
}
|
||||
|
||||
region->numRects = 0;
|
||||
}
|
||||
|
||||
|
||||
#define GDKDFB_RECTANGLE_VALS_FROM_BOX(s) (s)->x1, (s)->y1, (s)->x2-(s)->x1, (s)->y2-(s)->y1
|
||||
|
||||
|
||||
#endif /* __GDK_PRIVATE_DIRECTFB_H__ */
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user