Files
wxWidgets/src/common/cairo.cpp
2007-09-07 13:17:55 +00:00

170 lines
5.1 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::s_lib = NULL;
//----------------------------------------------------------------------------
// wxCairoLibrary
//----------------------------------------------------------------------------
wxCairoLibrary::wxCairoLibrary()
{
m_cairo_lib = NULL;
m_pango_cairo_lib = NULL;
wxLogNull log;
m_cairo_lib = new wxDynamicLibrary( wxT("libcairo.so.2") );
m_ok = m_cairo_lib->IsLoaded();
if (!m_ok) return;
m_pango_cairo_lib = new wxDynamicLibrary( wxT("libpangocairo-1.0.so.0") );
m_ok = m_pango_cairo_lib->IsLoaded();
if (!m_ok) return;
InitializeMethods();
}
wxCairoLibrary::~wxCairoLibrary()
{
if (m_cairo_lib)
delete m_cairo_lib;
}
/* static */ wxCairoLibrary* wxCairoLibrary::Get()
{
if (s_lib)
return s_lib;
s_lib = new wxCairoLibrary();
if (s_lib->IsOk())
return s_lib;
delete s_lib;
s_lib = NULL;
return NULL;
}
/* static */ void wxCairoLibrary::CleanUp()
{
if (s_lib)
{
delete s_lib;
s_lib = NULL;
}
}
bool wxCairoLibrary::IsOk()
{
return m_ok;
}
void wxCairoLibrary::InitializeMethods()
{
m_ok = false;
bool success;
wxDL_METHOD_LOAD( m_cairo_lib, cairo_arc, success )
wxDL_METHOD_LOAD( m_cairo_lib, cairo_arc_negative, success )
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 )
wxDL_METHOD_LOAD( m_pango_cairo_lib, pango_cairo_show_layout, success )
m_ok = true;
}
//----------------------------------------------------------------------------
// wxCairoModule
//----------------------------------------------------------------------------
class wxCairoModule: public wxModule
{
public:
wxCairoModule() { }
bool OnInit();
void OnExit();
private:
DECLARE_DYNAMIC_CLASS(wxCairoPrintModule)
};
bool wxCairoModule::OnInit()
{
return true;
}
void wxCairoModule::OnExit()
{
wxCairoLibrary::CleanUp();
}
IMPLEMENT_DYNAMIC_CLASS(wxCairoModule, wxModule)
#endif
// wxUSE_CAIRO