Files
wxWidgets/src/common/cairo.cpp
Vadim Zeitlin ced3df7730 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
2007-09-10 10:49:55 +00:00

166 lines
4.6 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/common/cairo.cpp
// Purpose: Cairo library
// Author: Anthony Betaudeau
// Created: 2007-08-25
// RCS-ID: $Id: cairo.cpp 44625 2007-08-25 11:35:04Z VZ $
// Copyright: (c) Anthony Bretaudeau
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/cairo.h"
#if wxUSE_CAIRO
#ifndef WX_PRECOMP
#include "wx/module.h"
#include "wx/log.h"
#endif
wxCairoLibrary *wxCairoLibrary::ms_lib = NULL;
//----------------------------------------------------------------------------
// wxCairoLibrary
//----------------------------------------------------------------------------
wxCairoLibrary::wxCairoLibrary()
{
wxLogNull log;
m_libCairo.Load("libcairo.so.2");
m_ok = m_libCairo.IsLoaded();
if ( !m_ok )
return;
m_libPangoCairo.Load("libpangocairo-1.0.so.0");
m_ok = m_libPangoCairo.IsLoaded();
if ( !m_ok )
{
m_libCairo.Unload();
return;
}
m_ok = InitializeMethods();
}
wxCairoLibrary::~wxCairoLibrary()
{
}
/* static */ wxCairoLibrary* wxCairoLibrary::Get()
{
if ( !ms_lib )
{
ms_lib = new wxCairoLibrary();
if ( !ms_lib->IsOk() )
{
delete ms_lib;
ms_lib = NULL;
}
}
return ms_lib;
}
/* static */ void wxCairoLibrary::CleanUp()
{
if (ms_lib)
{
delete ms_lib;
ms_lib = NULL;
}
}
bool wxCairoLibrary::IsOk()
{
return m_ok;
}
bool wxCairoLibrary::InitializeMethods()
{
wxDL_METHOD_LOAD(m_libCairo, cairo_arc);
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_libPangoCairo, pango_cairo_update_layout);
wxDL_METHOD_LOAD(m_libPangoCairo, pango_cairo_show_layout);
return true;
}
//----------------------------------------------------------------------------
// wxCairoModule
//----------------------------------------------------------------------------
class wxCairoModule : public wxModule
{
public:
wxCairoModule() { }
virtual bool OnInit();
virtual void OnExit();
private:
DECLARE_DYNAMIC_CLASS(wxCairotModule)
};
bool wxCairoModule::OnInit()
{
return true;
}
void wxCairoModule::OnExit()
{
wxCairoLibrary::CleanUp();
}
IMPLEMENT_DYNAMIC_CLASS(wxCairoModule, wxModule)
#endif // wxUSE_CAIRO