Use Cairo for wxGraphicsContext in wxX11.

Check for Cairo in configure for wxX11 too.

Fix compilation of wxCairoContext for non-{GTK,MSW} platforms.

Also make wxUSE_CAIRO a "normal" option, i.e. add it to all wx/setup.h files
instead of defining it as 1 unconditionally for wxGTK and 0 for everything
else.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66094 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-11-10 13:52:45 +00:00
parent ac98aec510
commit 711a481223
13 changed files with 156 additions and 27 deletions

41
configure vendored
View File

@@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# From configure.in Id: configure.in 65489 2010-09-09 20:59:10Z VZ . # From configure.in Id.
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for wxWidgets 2.9.2. # Generated by GNU Autoconf 2.61 for wxWidgets 2.9.2.
# #
@@ -16958,7 +16958,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
else else
ac_cv_prog_gcc_traditional=no ac_cv_prog_gcc_traditional=no
fi fi
rm -f -r conftest* rm -f conftest*
if test $ac_cv_prog_gcc_traditional = no; then if test $ac_cv_prog_gcc_traditional = no; then
@@ -16975,7 +16975,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
$EGREP "$ac_pattern" >/dev/null 2>&1; then $EGREP "$ac_pattern" >/dev/null 2>&1; then
ac_cv_prog_gcc_traditional=yes ac_cv_prog_gcc_traditional=yes
fi fi
rm -f -r conftest* rm -f conftest*
fi fi
fi fi
@@ -19598,7 +19598,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
else else
ac_cv_header_stdc=no ac_cv_header_stdc=no
fi fi
rm -f -r conftest* rm -f conftest*
fi fi
@@ -19619,7 +19619,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
else else
ac_cv_header_stdc=no ac_cv_header_stdc=no
fi fi
rm -f -r conftest* rm -f conftest*
fi fi
@@ -24420,11 +24420,13 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */ /* end confdefs.h. */
#include <stdio.h> #include <sys/types.h> /* for off_t */
#include <stdio.h>
int int
main () main ()
{ {
return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); int (*fp) (FILE *, off_t, int) = fseeko;
return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
; ;
return 0; return 0;
} }
@@ -24464,11 +24466,13 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */ /* end confdefs.h. */
#define _LARGEFILE_SOURCE 1 #define _LARGEFILE_SOURCE 1
#include <stdio.h> #include <sys/types.h> /* for off_t */
#include <stdio.h>
int int
main () main ()
{ {
return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); int (*fp) (FILE *, off_t, int) = fseeko;
return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
; ;
return 0; return 0;
} }
@@ -24515,7 +24519,7 @@ cat >>confdefs.h <<_ACEOF
_ACEOF _ACEOF
;; ;;
esac esac
rm -f -r conftest* rm -f conftest*
# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
# in glibc 2.1.3, but that breaks too many other things. # in glibc 2.1.3, but that breaks too many other things.
@@ -31225,7 +31229,7 @@ _ACEOF
eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
done done
# Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
for ac_extension in a so sl dylib la dll; do for ac_extension in a so sl; do
if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
test -f "$ac_im_libdir/libX11.$ac_extension"; then test -f "$ac_im_libdir/libX11.$ac_extension"; then
ac_im_usrlibdir=$ac_im_libdir; break ac_im_usrlibdir=$ac_im_libdir; break
@@ -31378,7 +31382,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
do do
# Don't even attempt the hair of trying to link an X program! # Don't even attempt the hair of trying to link an X program!
for ac_extension in a so sl dylib la dll; do for ac_extension in a so sl; do
if test -r "$ac_dir/libX11.$ac_extension"; then if test -r "$ac_dir/libX11.$ac_extension"; then
ac_x_libraries=$ac_dir ac_x_libraries=$ac_dir
break 2 break 2
@@ -48143,7 +48147,7 @@ echo "${ECHO_T}$wx_cv_lib_gdiplus" >&6; }
if test "$wx_cv_lib_gdiplus" = "yes"; then if test "$wx_cv_lib_gdiplus" = "yes"; then
wx_has_graphics=1 wx_has_graphics=1
fi fi
elif test "$wxUSE_GTK" = 1; then elif test "$wxUSE_GTK" = 1 -o "$wxUSE_X11" = 1; then
pkg_failed=no pkg_failed=no
{ echo "$as_me:$LINENO: checking for CAIRO" >&5 { echo "$as_me:$LINENO: checking for CAIRO" >&5
@@ -48217,6 +48221,17 @@ else
echo "${ECHO_T}yes" >&6; } echo "${ECHO_T}yes" >&6; }
wx_has_graphics=1 wx_has_graphics=1
fi fi
if test "$wx_has_graphics" = 1; then
cat >>confdefs.h <<\_ACEOF
#define wxUSE_CAIRO 1
_ACEOF
if test "$wxUSE_GTK" != 1; then
CPPFLAGS="$CAIRO_CFLAGS $CPPFLAGS"
GUI_TK_LIBRARY="$GUI_TK_LIBRARY $CAIRO_LIBS"
fi
fi
else else
wx_has_graphics=1 wx_has_graphics=1
fi fi

View File

@@ -7498,11 +7498,21 @@ if test "$wxUSE_GRAPHICS_CONTEXT" = "yes"; then
if test "$wx_cv_lib_gdiplus" = "yes"; then if test "$wx_cv_lib_gdiplus" = "yes"; then
wx_has_graphics=1 wx_has_graphics=1
fi fi
elif test "$wxUSE_GTK" = 1; then elif test "$wxUSE_GTK" = 1 -o "$wxUSE_X11" = 1; then
PKG_CHECK_MODULES(CAIRO, cairo, PKG_CHECK_MODULES(CAIRO, cairo,
[wx_has_graphics=1], [wx_has_graphics=1],
[AC_MSG_WARN([Cairo library not found])] [AC_MSG_WARN([Cairo library not found])]
) )
if test "$wx_has_graphics" = 1; then
AC_DEFINE(wxUSE_CAIRO)
dnl We don't need to do this for wxGTK as we already get Cairo
dnl flags as part of GTK+ ones.
if test "$wxUSE_GTK" != 1; then
CPPFLAGS="$CAIRO_CFLAGS $CPPFLAGS"
GUI_TK_LIBRARY="$GUI_TK_LIBRARY $CAIRO_LIBS"
fi
fi
else else
dnl assume it's ok, add more checks here if needed dnl assume it's ok, add more checks here if needed
wx_has_graphics=1 wx_has_graphics=1

View File

@@ -439,17 +439,13 @@
# endif # endif
#endif /* !defined(wxUSE_BUTTON) */ #endif /* !defined(wxUSE_BUTTON) */
/*
This one is special, it's only used under wxGTK currently so don't require
pre-defining it.
*/
#ifndef wxUSE_CAIRO #ifndef wxUSE_CAIRO
# ifdef __WXGTK210__ # ifdef wxABORT_ON_CONFIG_ERROR
# define wxUSE_CAIRO 1 # error "wxUSE_BUTTON must be defined, please read comment near the top of this file."
# else # else
# define wxUSE_CAIRO 0 # define wxUSE_CAIRO 0
# endif # endif
#endif #endif /* !defined(wxUSE_CAIRO) */
#ifndef wxUSE_CALENDARCTRL #ifndef wxUSE_CALENDARCTRL
# ifdef wxABORT_ON_CONFIG_ERROR # ifdef wxABORT_ON_CONFIG_ERROR

View File

@@ -689,6 +689,19 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
// Enable wxGraphicsContext implementation using Cairo library.
//
// This is not needed under Windows and detected automatically by configure
// under other systems, however you may set this to 1 manually if you installed
// Cairo under Windows yourself and prefer to use it instead the native GDI+
// implementation.
//
// Default is 0
//
// Recommended setting: 0
#define wxUSE_CAIRO 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Individual GUI controls // Individual GUI controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -689,6 +689,19 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
// Enable wxGraphicsContext implementation using Cairo library.
//
// This is not needed under Windows and detected automatically by configure
// under other systems, however you may set this to 1 manually if you installed
// Cairo under Windows yourself and prefer to use it instead the native GDI+
// implementation.
//
// Default is 0
//
// Recommended setting: 0
#define wxUSE_CAIRO 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Individual GUI controls // Individual GUI controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -689,6 +689,19 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
// Enable wxGraphicsContext implementation using Cairo library.
//
// This is not needed under Windows and detected automatically by configure
// under other systems, however you may set this to 1 manually if you installed
// Cairo under Windows yourself and prefer to use it instead the native GDI+
// implementation.
//
// Default is 0
//
// Recommended setting: 0
#define wxUSE_CAIRO 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Individual GUI controls // Individual GUI controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -689,6 +689,19 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
// Enable wxGraphicsContext implementation using Cairo library.
//
// This is not needed under Windows and detected automatically by configure
// under other systems, however you may set this to 1 manually if you installed
// Cairo under Windows yourself and prefer to use it instead the native GDI+
// implementation.
//
// Default is 0
//
// Recommended setting: 0
#define wxUSE_CAIRO 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Individual GUI controls // Individual GUI controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -690,6 +690,19 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
// Enable wxGraphicsContext implementation using Cairo library.
//
// This is not needed under Windows and detected automatically by configure
// under other systems, however you may set this to 1 manually if you installed
// Cairo under Windows yourself and prefer to use it instead the native GDI+
// implementation.
//
// Default is 0
//
// Recommended setting: 0
#define wxUSE_CAIRO 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Individual GUI controls // Individual GUI controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -689,6 +689,19 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
// Enable wxGraphicsContext implementation using Cairo library.
//
// This is not needed under Windows and detected automatically by configure
// under other systems, however you may set this to 1 manually if you installed
// Cairo under Windows yourself and prefer to use it instead the native GDI+
// implementation.
//
// Default is 0
//
// Recommended setting: 0
#define wxUSE_CAIRO 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Individual GUI controls // Individual GUI controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -685,6 +685,19 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
// Enable wxGraphicsContext implementation using Cairo library.
//
// This is not needed under Windows and detected automatically by configure
// under other systems, however you may set this to 1 manually if you installed
// Cairo under Windows yourself and prefer to use it instead the native GDI+
// implementation.
//
// Default is 0
//
// Recommended setting: 0
#define wxUSE_CAIRO 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Individual GUI controls // Individual GUI controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -688,6 +688,19 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
// Enable wxGraphicsContext implementation using Cairo library.
//
// This is not needed under Windows and detected automatically by configure
// under other systems, however you may set this to 1 manually if you installed
// Cairo under Windows yourself and prefer to use it instead the native GDI+
// implementation.
//
// Default is 0
//
// Recommended setting: 0
#define wxUSE_CAIRO 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Individual GUI controls // Individual GUI controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -343,6 +343,9 @@
# define wxUSE_GRAPHICS_CONTEXT 0 # define wxUSE_GRAPHICS_CONTEXT 0
#endif #endif
#define wxUSE_CAIRO 0
#define wxUSE_CONTROLS 0 #define wxUSE_CONTROLS 0

View File

@@ -785,7 +785,7 @@ void wxCairoFontData::Apply( wxGraphicsContext* context )
cairo_set_font_face(ctext, m_font); cairo_set_font_face(ctext, m_font);
cairo_set_font_size(ctext, m_size ); cairo_set_font_size(ctext, m_size );
#else #else
cairo_select_font_face(ctext, m_fontName, m_slant, m_weights ); cairo_select_font_face(ctext, m_fontName, m_slant, m_weight );
cairo_set_font_size(ctext, m_size ); cairo_set_font_size(ctext, m_size );
#endif #endif
} }
@@ -1071,6 +1071,7 @@ wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitm
{ {
wxCHECK_RET( bmp.IsOk(), wxT("Invalid bitmap in wxCairoContext::DrawBitmap")); wxCHECK_RET( bmp.IsOk(), wxT("Invalid bitmap in wxCairoContext::DrawBitmap"));
#ifdef wxHAS_RAW_BITMAP
int bw = m_width = bmp.GetWidth(); int bw = m_width = bmp.GetWidth();
int bh = m_height = bmp.GetHeight(); int bh = m_height = bmp.GetHeight();
wxBitmap bmpSource = bmp; // we need a non-const instance wxBitmap bmpSource = bmp; // we need a non-const instance
@@ -1138,6 +1139,7 @@ wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitm
} }
} }
m_pattern = cairo_pattern_create_for_surface(m_surface); m_pattern = cairo_pattern_create_for_surface(m_surface);
#endif // wxHAS_RAW_BITMAP
} }
wxCairoBitmapData::~wxCairoBitmapData() wxCairoBitmapData::~wxCairoBitmapData()
@@ -1830,8 +1832,7 @@ wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeContext( void * cont
{ {
#ifdef __WXMSW__ #ifdef __WXMSW__
return new wxCairoContext(this,(HDC)context); return new wxCairoContext(this,(HDC)context);
#endif #else
#ifdef __WXGTK__
return new wxCairoContext(this,(cairo_t*)context); return new wxCairoContext(this,(cairo_t*)context);
#endif #endif
} }