wxDL_XXX macros and dynamic loading cleanup:

1. Clearly document the wxDL_XXX macros; including their implicit usage
   of m_ok member variable
2. Made sure they're used in the same way in all places they are used
   (sometimes they were passed an object, sometimes a pointer, breaking
   compilation: see patch 1791288)
3. Don't allocate wxDynamicLibrary objects on heap unnecessarily (which
   removes the need to delete -- or leak, as it was -- them afterwards)
4. Some naming convention fixes



git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48625 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-09-10 10:49:55 +00:00
parent d2175f3ecc
commit ced3df7730
7 changed files with 550 additions and 550 deletions

View File

@@ -25,21 +25,31 @@
class wxCairoLibrary class wxCairoLibrary
{ {
public: public:
static wxCairoLibrary* Get(); // return the pointer to the global instance of this class or NULL if we
// failed to load/initialize it
static wxCairoLibrary *Get();
// for internal use only
static void CleanUp(); static void CleanUp();
private: private:
// the single wxCairoLibrary instance or NULL
static wxCairoLibrary *ms_lib;
wxCairoLibrary(); wxCairoLibrary();
~wxCairoLibrary(); ~wxCairoLibrary();
bool IsOk(); bool IsOk();
void InitializeMethods(); bool InitializeMethods();
bool m_ok; wxDynamicLibrary m_libCairo;
wxDynamicLibrary *m_cairo_lib; wxDynamicLibrary m_libPangoCairo;
wxDynamicLibrary *m_pango_cairo_lib;
static wxCairoLibrary *s_lib; // true if we successfully loaded the libraries and can use them
//
// note that this field must have this name as it's used by wxDL_XXX macros
bool m_ok;
public: public:
wxDL_VOIDMETHOD_DEFINE( cairo_arc, wxDL_VOIDMETHOD_DEFINE( cairo_arc,
@@ -88,32 +98,32 @@ public:
(cairo_pattern_t *pattern, cairo_filter_t filter), (pattern, filter) ) (cairo_pattern_t *pattern, cairo_filter_t filter), (pattern, filter) )
wxDL_VOIDMETHOD_DEFINE( cairo_rectangle, wxDL_VOIDMETHOD_DEFINE( cairo_rectangle,
(cairo_t *cr, double x, double y, double width, double height), (cr, x, y, width, height) ) (cairo_t *cr, double x, double y, double width, double height), (cr, x, y, width, height) )
wxDL_METHOD_DEFINE( void, cairo_reset_clip, wxDL_VOIDMETHOD_DEFINE( cairo_reset_clip,
(cairo_t *cr), (cr), /**/) (cairo_t *cr), (cr) )
wxDL_METHOD_DEFINE( void, cairo_restore, wxDL_VOIDMETHOD_DEFINE( cairo_restore,
(cairo_t *cr), (cr), /**/) (cairo_t *cr), (cr) )
wxDL_METHOD_DEFINE( void, cairo_rotate, wxDL_VOIDMETHOD_DEFINE( cairo_rotate,
(cairo_t *cr, double angle), (cr, angle), /**/) (cairo_t *cr, double angle), (cr, angle) )
wxDL_METHOD_DEFINE( void, cairo_save, wxDL_VOIDMETHOD_DEFINE( cairo_save,
(cairo_t *cr), (cr), /**/) (cairo_t *cr), (cr) )
wxDL_METHOD_DEFINE( void, cairo_scale, wxDL_VOIDMETHOD_DEFINE( cairo_scale,
(cairo_t *cr, double sx, double sy), (cr, sx, sy), /**/) (cairo_t *cr, double sx, double sy), (cr, sx, sy) )
wxDL_METHOD_DEFINE( void, cairo_set_dash, wxDL_VOIDMETHOD_DEFINE( cairo_set_dash,
(cairo_t *cr, const double *dashes, int num_dashes, double offset), (cr, dashes, num_dashes, offset), /**/) (cairo_t *cr, const double *dashes, int num_dashes, double offset), (cr, dashes, num_dashes, offset) )
wxDL_METHOD_DEFINE( void, cairo_set_fill_rule, wxDL_VOIDMETHOD_DEFINE( cairo_set_fill_rule,
(cairo_t *cr, cairo_fill_rule_t fill_rule), (cr, fill_rule), /**/) (cairo_t *cr, cairo_fill_rule_t fill_rule), (cr, fill_rule) )
wxDL_METHOD_DEFINE( void, cairo_set_line_cap, wxDL_VOIDMETHOD_DEFINE( cairo_set_line_cap,
(cairo_t *cr, cairo_line_cap_t line_cap), (cr, line_cap), /**/) (cairo_t *cr, cairo_line_cap_t line_cap), (cr, line_cap) )
wxDL_METHOD_DEFINE( void, cairo_set_line_join, wxDL_VOIDMETHOD_DEFINE( cairo_set_line_join,
(cairo_t *cr, cairo_line_join_t line_join), (cr, line_join), /**/) (cairo_t *cr, cairo_line_join_t line_join), (cr, line_join) )
wxDL_METHOD_DEFINE( void, cairo_set_line_width, wxDL_VOIDMETHOD_DEFINE( cairo_set_line_width,
(cairo_t *cr, double width), (cr, width), /**/) (cairo_t *cr, double width), (cr, width) )
wxDL_METHOD_DEFINE( void, cairo_set_operator, wxDL_VOIDMETHOD_DEFINE( cairo_set_operator,
(cairo_t *cr, cairo_operator_t op), (cr, op), /**/) (cairo_t *cr, cairo_operator_t op), (cr, op) )
wxDL_METHOD_DEFINE( void, cairo_set_source, wxDL_VOIDMETHOD_DEFINE( cairo_set_source,
(cairo_t *cr, cairo_pattern_t *source), (cr, source), /**/) (cairo_t *cr, cairo_pattern_t *source), (cr, source) )
wxDL_METHOD_DEFINE( void, cairo_set_source_rgba, wxDL_VOIDMETHOD_DEFINE( cairo_set_source_rgba,
(cairo_t *cr, double red, double green, double blue, double alpha), (cr, red, green, blue, alpha), /**/) (cairo_t *cr, double red, double green, double blue, double alpha), (cr, red, green, blue, alpha) )
wxDL_VOIDMETHOD_DEFINE( cairo_stroke, wxDL_VOIDMETHOD_DEFINE( cairo_stroke,
(cairo_t *cr), (cr) ) (cairo_t *cr), (cr) )
wxDL_VOIDMETHOD_DEFINE( cairo_stroke_preserve, wxDL_VOIDMETHOD_DEFINE( cairo_stroke_preserve,
@@ -133,8 +143,6 @@ public:
DECLARE_NO_COPY_CLASS(wxCairoLibrary) DECLARE_NO_COPY_CLASS(wxCairoLibrary)
}; };
#endif #endif // wxUSE_CAIRO
// wxUSE_CAIRO
#endif #endif // _WX_CAIRO_H_BASE_
// _WX_CAIRO_H_BASE_

View File

@@ -106,25 +106,40 @@ enum wxPluginCategory
type pfn ## name = (type)(dynlib).GetSymbol(_T(#name)) type pfn ## name = (type)(dynlib).GetSymbol(_T(#name))
// the following macros can be used to redirect a whole // the following macros can be used to redirect a whole library to a class and
// library to a class and check at run-time if the the // check at run-time if the library is present and contains all required
// library is present and contains all required methods. // methods
//
// notice that they are supposed to be used inside a class which has "m_ok"
// member variable indicating if the library had been successfully loaded
#define wxDL_METHOD_DEFINE( rettype, name, args, shortargs, defret ) \ // helper macros constructing the name of the variable storing the function
typedef rettype (* name ## Type) args ; \ // pointer and the name of its type from the function name
name ## Type pfn_ ## name; \ #define wxDL_METHOD_NAME(name) m_pfn ## name
#define wxDL_METHOD_TYPE(name) name ## _t
// parameters are:
// - rettype: return type of the function, e.g. "int"
// - name: name of the function, e.g. "foo"
// - args: function signature in parentheses, e.g. "(int x, int y)"
// - argnames: the names of the parameters in parentheses, e.g. "(x, y)"
// - defret: the value to return if the library wasn't successfully loaded
#define wxDL_METHOD_DEFINE( rettype, name, args, argnames, defret ) \
typedef rettype (* wxDL_METHOD_TYPE(name)) args ; \
wxDL_METHOD_TYPE(name) wxDL_METHOD_NAME(name); \
rettype name args \ rettype name args \
{ if (m_ok) return pfn_ ## name shortargs ; return defret; } { return m_ok ? wxDL_METHOD_NAME(name) argnames : defret; }
#define wxDL_VOIDMETHOD_DEFINE( name, args, shortargs ) \ #define wxDL_VOIDMETHOD_DEFINE( name, args, argnames ) \
typedef void (* name ## Type) args ; \ typedef void (* wxDL_METHOD_TYPE(name)) args ; \
name ## Type pfn_ ## name; \ wxDL_METHOD_TYPE(name) wxDL_METHOD_NAME(name); \
void name args \ void name args \
{ if (m_ok) pfn_ ## name shortargs ; } { if ( m_ok ) wxDL_METHOD_NAME(name) argnames ; }
#define wxDL_METHOD_LOAD( lib, name, success ) \ #define wxDL_METHOD_LOAD(lib, name) \
pfn_ ## name = (name ## Type) lib->GetSymbol( wxT(#name), &success ); \ wxDL_METHOD_NAME(name) = \
if (!success) return; (wxDL_METHOD_TYPE(name)) lib.GetSymbol(#name, &m_ok); \
if ( !m_ok ) return false
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxDynamicLibraryDetails: contains details about a loaded wxDynamicLibrary // wxDynamicLibraryDetails: contains details about a loaded wxDynamicLibrary

View File

@@ -26,7 +26,7 @@
#endif #endif
wxCairoLibrary *wxCairoLibrary::s_lib = NULL; wxCairoLibrary *wxCairoLibrary::ms_lib = NULL;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// wxCairoLibrary // wxCairoLibrary
@@ -34,49 +34,49 @@ wxCairoLibrary *wxCairoLibrary::s_lib = NULL;
wxCairoLibrary::wxCairoLibrary() wxCairoLibrary::wxCairoLibrary()
{ {
m_cairo_lib = NULL;
m_pango_cairo_lib = NULL;
wxLogNull log; wxLogNull log;
m_cairo_lib = new wxDynamicLibrary( wxT("libcairo.so.2") ); m_libCairo.Load("libcairo.so.2");
m_ok = m_cairo_lib->IsLoaded(); m_ok = m_libCairo.IsLoaded();
if (!m_ok) return; if ( !m_ok )
return;
m_pango_cairo_lib = new wxDynamicLibrary( wxT("libpangocairo-1.0.so.0") ); m_libPangoCairo.Load("libpangocairo-1.0.so.0");
m_ok = m_pango_cairo_lib->IsLoaded(); m_ok = m_libPangoCairo.IsLoaded();
if (!m_ok) return; if ( !m_ok )
{
m_libCairo.Unload();
return;
}
InitializeMethods(); m_ok = InitializeMethods();
} }
wxCairoLibrary::~wxCairoLibrary() wxCairoLibrary::~wxCairoLibrary()
{ {
if (m_cairo_lib)
delete m_cairo_lib;
} }
/* static */ wxCairoLibrary* wxCairoLibrary::Get() /* static */ wxCairoLibrary* wxCairoLibrary::Get()
{ {
if (s_lib) if ( !ms_lib )
return s_lib; {
ms_lib = new wxCairoLibrary();
s_lib = new wxCairoLibrary(); if ( !ms_lib->IsOk() )
if (s_lib->IsOk()) {
return s_lib; delete ms_lib;
ms_lib = NULL;
delete s_lib; }
s_lib = NULL; }
return NULL; return ms_lib;
} }
/* static */ void wxCairoLibrary::CleanUp() /* static */ void wxCairoLibrary::CleanUp()
{ {
if (s_lib) if (ms_lib)
{ {
delete s_lib; delete ms_lib;
s_lib = NULL; ms_lib = NULL;
} }
} }
@@ -85,72 +85,69 @@ bool wxCairoLibrary::IsOk()
return m_ok; return m_ok;
} }
void wxCairoLibrary::InitializeMethods() bool wxCairoLibrary::InitializeMethods()
{ {
m_ok = false; wxDL_METHOD_LOAD(m_libCairo, cairo_arc);
bool success; wxDL_METHOD_LOAD(m_libCairo, cairo_arc_negative);
wxDL_METHOD_LOAD(m_libCairo, cairo_clip);
wxDL_METHOD_LOAD(m_libCairo, cairo_close_path);
wxDL_METHOD_LOAD(m_libCairo, cairo_create);
wxDL_METHOD_LOAD(m_libCairo, cairo_curve_to);
wxDL_METHOD_LOAD(m_libCairo, cairo_destroy);
wxDL_METHOD_LOAD(m_libCairo, cairo_fill);
wxDL_METHOD_LOAD(m_libCairo, cairo_fill_preserve);
wxDL_METHOD_LOAD(m_libCairo, cairo_get_target);
wxDL_METHOD_LOAD(m_libCairo, cairo_image_surface_create_for_data);
wxDL_METHOD_LOAD(m_libCairo, cairo_line_to);
wxDL_METHOD_LOAD(m_libCairo, cairo_move_to);
wxDL_METHOD_LOAD(m_libCairo, cairo_new_path);
wxDL_METHOD_LOAD(m_libCairo, cairo_paint);
wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_add_color_stop_rgba);
wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_create_for_surface);
wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_create_linear);
wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_create_radial);
wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_destroy);
wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_set_extend);
wxDL_METHOD_LOAD(m_libCairo, cairo_pattern_set_filter);
wxDL_METHOD_LOAD(m_libCairo, cairo_rectangle);
wxDL_METHOD_LOAD(m_libCairo, cairo_reset_clip);
wxDL_METHOD_LOAD(m_libCairo, cairo_restore);
wxDL_METHOD_LOAD(m_libCairo, cairo_rotate);
wxDL_METHOD_LOAD(m_libCairo, cairo_save);
wxDL_METHOD_LOAD(m_libCairo, cairo_scale);
wxDL_METHOD_LOAD(m_libCairo, cairo_set_dash);
wxDL_METHOD_LOAD(m_libCairo, cairo_set_fill_rule);
wxDL_METHOD_LOAD(m_libCairo, cairo_set_line_cap);
wxDL_METHOD_LOAD(m_libCairo, cairo_set_line_join);
wxDL_METHOD_LOAD(m_libCairo, cairo_set_line_width);
wxDL_METHOD_LOAD(m_libCairo, cairo_set_operator);
wxDL_METHOD_LOAD(m_libCairo, cairo_set_source);
wxDL_METHOD_LOAD(m_libCairo, cairo_set_source_rgba);
wxDL_METHOD_LOAD(m_libCairo, cairo_stroke);
wxDL_METHOD_LOAD(m_libCairo, cairo_stroke_preserve);
wxDL_METHOD_LOAD(m_libCairo, cairo_surface_create_similar);
wxDL_METHOD_LOAD(m_libCairo, cairo_surface_destroy);
wxDL_METHOD_LOAD(m_libCairo, cairo_translate);
wxDL_METHOD_LOAD( m_cairo_lib, cairo_arc, success ) wxDL_METHOD_LOAD(m_libPangoCairo, pango_cairo_update_layout);
wxDL_METHOD_LOAD( m_cairo_lib, cairo_arc_negative, success ) wxDL_METHOD_LOAD(m_libPangoCairo, pango_cairo_show_layout);
wxDL_METHOD_LOAD( m_cairo_lib, cairo_clip, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_close_path, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_create, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_curve_to, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_destroy, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_fill, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_fill_preserve, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_get_target, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_image_surface_create_for_data, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_line_to, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_move_to, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_new_path, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_paint, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_add_color_stop_rgba, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_create_for_surface, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_create_linear, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_create_radial, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_destroy, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_set_extend, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_set_filter, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_rectangle, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_reset_clip, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_restore, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_rotate, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_save, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_scale, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_dash, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_fill_rule, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_line_cap, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_line_join, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_line_width, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_operator, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_source, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_source_rgba, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_stroke, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_stroke_preserve, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_surface_create_similar, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_surface_destroy, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_translate, success )
wxDL_METHOD_LOAD( m_pango_cairo_lib, pango_cairo_update_layout, success ) return true;
wxDL_METHOD_LOAD( m_pango_cairo_lib, pango_cairo_show_layout, success )
m_ok = true;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// wxCairoModule // wxCairoModule
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
class wxCairoModule: public wxModule class wxCairoModule : public wxModule
{ {
public: public:
wxCairoModule() { } wxCairoModule() { }
bool OnInit(); virtual bool OnInit();
void OnExit(); virtual void OnExit();
private: private:
DECLARE_DYNAMIC_CLASS(wxCairoPrintModule) DECLARE_DYNAMIC_CLASS(wxCairotModule)
}; };
bool wxCairoModule::OnInit() bool wxCairoModule::OnInit()
@@ -165,5 +162,4 @@ void wxCairoModule::OnExit()
IMPLEMENT_DYNAMIC_CLASS(wxCairoModule, wxModule) IMPLEMENT_DYNAMIC_CLASS(wxCairoModule, wxModule)
#endif #endif // wxUSE_CAIRO
// wxUSE_CAIRO

File diff suppressed because it is too large Load Diff

View File

@@ -42,12 +42,16 @@ public:
wxGnomeVFSLibrary(); wxGnomeVFSLibrary();
~wxGnomeVFSLibrary(); ~wxGnomeVFSLibrary();
bool IsOk();
void InitializeMethods();
private: private:
bool m_ok; bool IsOk();
wxDynamicLibrary *m_gnome_vfs_lib; bool InitializeMethods();
wxDynamicLibrary m_libGnomeVFS;
// only true if we successfully loaded the library above
//
// don't rename this field, it's used by wxDL_XXX macros internally
bool m_ok;
public: public:
wxDL_METHOD_DEFINE( gboolean, gnome_vfs_init, wxDL_METHOD_DEFINE( gboolean, gnome_vfs_init,
@@ -61,21 +65,14 @@ public:
wxGnomeVFSLibrary::wxGnomeVFSLibrary() wxGnomeVFSLibrary::wxGnomeVFSLibrary()
{ {
m_gnome_vfs_lib = NULL;
wxLogNull log; wxLogNull log;
m_gnome_vfs_lib = new wxDynamicLibrary( wxT("libgnomevfs-2.so.0") ); m_libGnomeVFS.Load("libgnomevfs-2.so.0");
m_ok = m_gnome_vfs_lib->IsLoaded(); m_ok = m_libGnomeVFS.IsLoaded() && InitializeMethods();
if (!m_ok) return;
InitializeMethods();
} }
wxGnomeVFSLibrary::~wxGnomeVFSLibrary() wxGnomeVFSLibrary::~wxGnomeVFSLibrary()
{ {
if (m_gnome_vfs_lib)
delete m_gnome_vfs_lib;
} }
bool wxGnomeVFSLibrary::IsOk() bool wxGnomeVFSLibrary::IsOk()
@@ -83,15 +80,12 @@ bool wxGnomeVFSLibrary::IsOk()
return m_ok; return m_ok;
} }
void wxGnomeVFSLibrary::InitializeMethods() bool wxGnomeVFSLibrary::InitializeMethods()
{ {
m_ok = false; wxDL_METHOD_LOAD( m_libGnomeVFS, gnome_vfs_init )
bool success; wxDL_METHOD_LOAD( m_libGnomeVFS, gnome_vfs_shutdown )
wxDL_METHOD_LOAD( m_gnome_vfs_lib, gnome_vfs_init, success ) return true;
wxDL_METHOD_LOAD( m_gnome_vfs_lib, gnome_vfs_shutdown, success )
m_ok = true;
} }
static wxGnomeVFSLibrary* gs_lgvfs = NULL; static wxGnomeVFSLibrary* gs_lgvfs = NULL;
@@ -166,6 +160,4 @@ void wxGnomeVFSModule::OnExit()
IMPLEMENT_DYNAMIC_CLASS(wxGnomeVFSModule, wxModule) IMPLEMENT_DYNAMIC_CLASS(wxGnomeVFSModule, wxModule)
#endif #endif // wxUSE_LIBGNOMEVFS && wxUSE_MIMETYPE
// wxUSE_LIBGNOMEVFS
// wxUSE_MIMETYPE

View File

@@ -1775,76 +1775,71 @@ public:
bool wxQuickTimeLibrary::Initialize() bool wxQuickTimeLibrary::Initialize()
{ {
m_ok = false;
// Turn off the wxDynamicLibrary logging as we're prepared to handle the // Turn off the wxDynamicLibrary logging as we're prepared to handle the
// errors // errors
wxLogNull nolog; wxLogNull nolog;
if (!m_dll.Load(wxT("qtmlClient.dll"))) m_ok = m_dll.Load(wxT("qtmlClient.dll"));
{ if ( !m_ok )
return false; return false;
}
wxDL_METHOD_LOAD( m_dll, StartMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, StartMovie );
wxDL_METHOD_LOAD( m_dll, StopMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, StopMovie );
wxDL_METHOD_LOAD( m_dll, IsMovieDone, m_ok ); wxDL_METHOD_LOAD( m_dll, IsMovieDone );
wxDL_METHOD_LOAD( m_dll, GoToBeginningOfMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, GoToBeginningOfMovie );
wxDL_METHOD_LOAD( m_dll, GetMoviesError, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMoviesError );
wxDL_METHOD_LOAD( m_dll, EnterMovies, m_ok ); wxDL_METHOD_LOAD( m_dll, EnterMovies );
wxDL_METHOD_LOAD( m_dll, ExitMovies, m_ok ); wxDL_METHOD_LOAD( m_dll, ExitMovies );
wxDL_METHOD_LOAD( m_dll, InitializeQTML, m_ok ); wxDL_METHOD_LOAD( m_dll, InitializeQTML );
wxDL_METHOD_LOAD( m_dll, TerminateQTML, m_ok ); wxDL_METHOD_LOAD( m_dll, TerminateQTML );
wxDL_METHOD_LOAD( m_dll, NativePathNameToFSSpec, m_ok ); wxDL_METHOD_LOAD( m_dll, NativePathNameToFSSpec );
wxDL_METHOD_LOAD( m_dll, OpenMovieFile, m_ok ); wxDL_METHOD_LOAD( m_dll, OpenMovieFile );
wxDL_METHOD_LOAD( m_dll, CloseMovieFile, m_ok ); wxDL_METHOD_LOAD( m_dll, CloseMovieFile );
wxDL_METHOD_LOAD( m_dll, NewMovieFromFile, m_ok ); wxDL_METHOD_LOAD( m_dll, NewMovieFromFile );
wxDL_METHOD_LOAD( m_dll, GetMovieRate, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieRate );
wxDL_METHOD_LOAD( m_dll, SetMovieRate, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieRate );
wxDL_METHOD_LOAD( m_dll, MoviesTask, m_ok ); wxDL_METHOD_LOAD( m_dll, MoviesTask );
wxDL_METHOD_LOAD( m_dll, BlockMove, m_ok ); wxDL_METHOD_LOAD( m_dll, BlockMove );
wxDL_METHOD_LOAD( m_dll, NewHandleClear, m_ok ); wxDL_METHOD_LOAD( m_dll, NewHandleClear );
wxDL_METHOD_LOAD( m_dll, NewMovieFromDataRef, m_ok ); wxDL_METHOD_LOAD( m_dll, NewMovieFromDataRef );
wxDL_METHOD_LOAD( m_dll, DisposeHandle, m_ok ); wxDL_METHOD_LOAD( m_dll, DisposeHandle );
wxDL_METHOD_LOAD( m_dll, GetMovieNaturalBoundsRect, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieNaturalBoundsRect );
wxDL_METHOD_LOAD( m_dll, GetMovieIndTrackType, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieIndTrackType );
wxDL_METHOD_LOAD( m_dll, CreatePortAssociation, m_ok ); wxDL_METHOD_LOAD( m_dll, CreatePortAssociation );
wxDL_METHOD_LOAD( m_dll, DestroyPortAssociation, m_ok ); wxDL_METHOD_LOAD( m_dll, DestroyPortAssociation );
wxDL_METHOD_LOAD( m_dll, GetNativeWindowPort, m_ok ); wxDL_METHOD_LOAD( m_dll, GetNativeWindowPort );
wxDL_METHOD_LOAD( m_dll, SetMovieGWorld, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieGWorld );
wxDL_METHOD_LOAD( m_dll, DisposeMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, DisposeMovie );
wxDL_METHOD_LOAD( m_dll, SetMovieBox, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieBox );
wxDL_METHOD_LOAD( m_dll, SetMovieTimeScale, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieTimeScale );
wxDL_METHOD_LOAD( m_dll, GetMovieDuration, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieDuration );
wxDL_METHOD_LOAD( m_dll, GetMovieTimeBase, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieTimeBase );
wxDL_METHOD_LOAD( m_dll, GetMovieTimeScale, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieTimeScale );
wxDL_METHOD_LOAD( m_dll, GetMovieTime, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieTime );
wxDL_METHOD_LOAD( m_dll, SetMovieTime, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieTime );
wxDL_METHOD_LOAD( m_dll, GetMovieVolume, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieVolume );
wxDL_METHOD_LOAD( m_dll, SetMovieVolume, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieVolume );
wxDL_METHOD_LOAD( m_dll, SetMovieTimeValue, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieTimeValue );
wxDL_METHOD_LOAD( m_dll, NewMovieController, m_ok ); wxDL_METHOD_LOAD( m_dll, NewMovieController );
wxDL_METHOD_LOAD( m_dll, DisposeMovieController, m_ok ); wxDL_METHOD_LOAD( m_dll, DisposeMovieController );
wxDL_METHOD_LOAD( m_dll, MCSetVisible, m_ok ); wxDL_METHOD_LOAD( m_dll, MCSetVisible );
wxDL_METHOD_LOAD( m_dll, PrePrerollMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, PrePrerollMovie );
wxDL_METHOD_LOAD( m_dll, PrerollMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, PrerollMovie );
wxDL_METHOD_LOAD( m_dll, GetMoviePreferredRate, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMoviePreferredRate );
wxDL_METHOD_LOAD( m_dll, GetMovieLoadState, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieLoadState );
wxDL_METHOD_LOAD( m_dll, MCDoAction, m_ok ); wxDL_METHOD_LOAD( m_dll, MCDoAction );
wxDL_METHOD_LOAD( m_dll, MCSetControllerBoundsRect, m_ok ); wxDL_METHOD_LOAD( m_dll, MCSetControllerBoundsRect );
wxDL_METHOD_LOAD( m_dll, NativeEventToMacEvent, m_ok ); wxDL_METHOD_LOAD( m_dll, NativeEventToMacEvent );
wxDL_METHOD_LOAD( m_dll, MCIsPlayerEvent, m_ok ); wxDL_METHOD_LOAD( m_dll, MCIsPlayerEvent );
wxDL_METHOD_LOAD( m_dll, MCSetMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, MCSetMovie );
wxDL_METHOD_LOAD( m_dll, MCSetActionFilterWithRefCon, m_ok ); wxDL_METHOD_LOAD( m_dll, MCSetActionFilterWithRefCon );
wxDL_METHOD_LOAD( m_dll, MCGetControllerInfo, m_ok ); wxDL_METHOD_LOAD( m_dll, MCGetControllerInfo );
wxDL_METHOD_LOAD( m_dll, BeginUpdate, m_ok ); wxDL_METHOD_LOAD( m_dll, BeginUpdate );
wxDL_METHOD_LOAD( m_dll, UpdateMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, UpdateMovie );
wxDL_METHOD_LOAD( m_dll, EndUpdate, m_ok ); wxDL_METHOD_LOAD( m_dll, EndUpdate );
wxDL_METHOD_LOAD( m_dll, GetMoviesStickyError, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMoviesStickyError );
m_ok = true; return m_ok;
return true;
} }
class WXDLLIMPEXP_MEDIA wxQTMediaBackend : public wxMediaBackendCommonBase class WXDLLIMPEXP_MEDIA wxQTMediaBackend : public wxMediaBackendCommonBase

View File

@@ -281,76 +281,71 @@ public:
bool wxQuickTimeLibrary::Initialize() bool wxQuickTimeLibrary::Initialize()
{ {
m_ok = false;
// Turn off the wxDynamicLibrary logging as we're prepared to handle the // Turn off the wxDynamicLibrary logging as we're prepared to handle the
// errors // errors
wxLogNull nolog; wxLogNull nolog;
if (!m_dll.Load(wxT("qtmlClient.dll"))) m_ok = m_dll.Load(wxT("qtmlClient.dll"));
{ if ( !m_ok )
return false; return false;
}
wxDL_METHOD_LOAD( m_dll, StartMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, StartMovie );
wxDL_METHOD_LOAD( m_dll, StopMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, StopMovie );
wxDL_METHOD_LOAD( m_dll, IsMovieDone, m_ok ); wxDL_METHOD_LOAD( m_dll, IsMovieDone );
wxDL_METHOD_LOAD( m_dll, GoToBeginningOfMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, GoToBeginningOfMovie );
wxDL_METHOD_LOAD( m_dll, GetMoviesError, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMoviesError );
wxDL_METHOD_LOAD( m_dll, EnterMovies, m_ok ); wxDL_METHOD_LOAD( m_dll, EnterMovies );
wxDL_METHOD_LOAD( m_dll, ExitMovies, m_ok ); wxDL_METHOD_LOAD( m_dll, ExitMovies );
wxDL_METHOD_LOAD( m_dll, InitializeQTML, m_ok ); wxDL_METHOD_LOAD( m_dll, InitializeQTML );
wxDL_METHOD_LOAD( m_dll, TerminateQTML, m_ok ); wxDL_METHOD_LOAD( m_dll, TerminateQTML );
wxDL_METHOD_LOAD( m_dll, NativePathNameToFSSpec, m_ok ); wxDL_METHOD_LOAD( m_dll, NativePathNameToFSSpec );
wxDL_METHOD_LOAD( m_dll, OpenMovieFile, m_ok ); wxDL_METHOD_LOAD( m_dll, OpenMovieFile );
wxDL_METHOD_LOAD( m_dll, CloseMovieFile, m_ok ); wxDL_METHOD_LOAD( m_dll, CloseMovieFile );
wxDL_METHOD_LOAD( m_dll, NewMovieFromFile, m_ok ); wxDL_METHOD_LOAD( m_dll, NewMovieFromFile );
wxDL_METHOD_LOAD( m_dll, GetMovieRate, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieRate );
wxDL_METHOD_LOAD( m_dll, SetMovieRate, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieRate );
wxDL_METHOD_LOAD( m_dll, MoviesTask, m_ok ); wxDL_METHOD_LOAD( m_dll, MoviesTask );
wxDL_METHOD_LOAD( m_dll, BlockMove, m_ok ); wxDL_METHOD_LOAD( m_dll, BlockMove );
wxDL_METHOD_LOAD( m_dll, NewHandleClear, m_ok ); wxDL_METHOD_LOAD( m_dll, NewHandleClear );
wxDL_METHOD_LOAD( m_dll, NewMovieFromDataRef, m_ok ); wxDL_METHOD_LOAD( m_dll, NewMovieFromDataRef );
wxDL_METHOD_LOAD( m_dll, DisposeHandle, m_ok ); wxDL_METHOD_LOAD( m_dll, DisposeHandle );
wxDL_METHOD_LOAD( m_dll, GetMovieNaturalBoundsRect, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieNaturalBoundsRect );
wxDL_METHOD_LOAD( m_dll, GetMovieIndTrackType, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieIndTrackType );
wxDL_METHOD_LOAD( m_dll, CreatePortAssociation, m_ok ); wxDL_METHOD_LOAD( m_dll, CreatePortAssociation );
wxDL_METHOD_LOAD( m_dll, DestroyPortAssociation, m_ok ); wxDL_METHOD_LOAD( m_dll, DestroyPortAssociation );
wxDL_METHOD_LOAD( m_dll, GetNativeWindowPort, m_ok ); wxDL_METHOD_LOAD( m_dll, GetNativeWindowPort );
wxDL_METHOD_LOAD( m_dll, SetMovieGWorld, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieGWorld );
wxDL_METHOD_LOAD( m_dll, DisposeMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, DisposeMovie );
wxDL_METHOD_LOAD( m_dll, SetMovieBox, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieBox );
wxDL_METHOD_LOAD( m_dll, SetMovieTimeScale, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieTimeScale );
wxDL_METHOD_LOAD( m_dll, GetMovieDuration, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieDuration );
wxDL_METHOD_LOAD( m_dll, GetMovieTimeBase, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieTimeBase );
wxDL_METHOD_LOAD( m_dll, GetMovieTimeScale, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieTimeScale );
wxDL_METHOD_LOAD( m_dll, GetMovieTime, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieTime );
wxDL_METHOD_LOAD( m_dll, SetMovieTime, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieTime );
wxDL_METHOD_LOAD( m_dll, GetMovieVolume, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieVolume );
wxDL_METHOD_LOAD( m_dll, SetMovieVolume, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieVolume );
wxDL_METHOD_LOAD( m_dll, SetMovieTimeValue, m_ok ); wxDL_METHOD_LOAD( m_dll, SetMovieTimeValue );
wxDL_METHOD_LOAD( m_dll, NewMovieController, m_ok ); wxDL_METHOD_LOAD( m_dll, NewMovieController );
wxDL_METHOD_LOAD( m_dll, DisposeMovieController, m_ok ); wxDL_METHOD_LOAD( m_dll, DisposeMovieController );
wxDL_METHOD_LOAD( m_dll, MCSetVisible, m_ok ); wxDL_METHOD_LOAD( m_dll, MCSetVisible );
wxDL_METHOD_LOAD( m_dll, PrePrerollMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, PrePrerollMovie );
wxDL_METHOD_LOAD( m_dll, PrerollMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, PrerollMovie );
wxDL_METHOD_LOAD( m_dll, GetMoviePreferredRate, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMoviePreferredRate );
wxDL_METHOD_LOAD( m_dll, GetMovieLoadState, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMovieLoadState );
wxDL_METHOD_LOAD( m_dll, MCDoAction, m_ok ); wxDL_METHOD_LOAD( m_dll, MCDoAction );
wxDL_METHOD_LOAD( m_dll, MCSetControllerBoundsRect, m_ok ); wxDL_METHOD_LOAD( m_dll, MCSetControllerBoundsRect );
wxDL_METHOD_LOAD( m_dll, NativeEventToMacEvent, m_ok ); wxDL_METHOD_LOAD( m_dll, NativeEventToMacEvent );
wxDL_METHOD_LOAD( m_dll, MCIsPlayerEvent, m_ok ); wxDL_METHOD_LOAD( m_dll, MCIsPlayerEvent );
wxDL_METHOD_LOAD( m_dll, MCSetMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, MCSetMovie );
wxDL_METHOD_LOAD( m_dll, MCSetActionFilterWithRefCon, m_ok ); wxDL_METHOD_LOAD( m_dll, MCSetActionFilterWithRefCon );
wxDL_METHOD_LOAD( m_dll, MCGetControllerInfo, m_ok ); wxDL_METHOD_LOAD( m_dll, MCGetControllerInfo );
wxDL_METHOD_LOAD( m_dll, BeginUpdate, m_ok ); wxDL_METHOD_LOAD( m_dll, BeginUpdate );
wxDL_METHOD_LOAD( m_dll, UpdateMovie, m_ok ); wxDL_METHOD_LOAD( m_dll, UpdateMovie );
wxDL_METHOD_LOAD( m_dll, EndUpdate, m_ok ); wxDL_METHOD_LOAD( m_dll, EndUpdate );
wxDL_METHOD_LOAD( m_dll, GetMoviesStickyError, m_ok ); wxDL_METHOD_LOAD( m_dll, GetMoviesStickyError );
m_ok = true; return m_ok;
return true;
} }
class WXDLLIMPEXP_MEDIA wxQTMediaBackend : public wxMediaBackendCommonBase class WXDLLIMPEXP_MEDIA wxQTMediaBackend : public wxMediaBackendCommonBase