Changeset 228 for trunk/cairo/cairo

Show
Ignore:
Timestamp:
11/03/07 22:54:06 (5 years ago)
Author:
DRK
Message:

* Updated the bindings to support cairo 1.2 and cairo 1.4. Support for these can be enabled with the cairo_1_2 and cairo_1_4 version identifiers.
* Added pdf, ps and svg support.
* Updated the build script appropriately.
* Note that cairooo is not likely to receive any further updates in its current form. It is being forked and rewritten for Tango's graphics package, although a port back to Phobos isn't out of the question.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cairo/cairo/cairo.d

    r179 r228  
    5454     
    5555    libCairo = loadSharedLib(libName); 
     56 
     57    /* Try to find out what version of cairo we've got.  If it's too old, 
     58     * throw an exception explaining this. 
     59     */ 
     60    auto versionnum = (cast(pf_cairo_version) 
     61            getProc(libCairo,"cairo_version"))(); 
     62 
     63    version( cairo_1_4 ) 
     64        auto expected_version = CAIRO_VERSION_ENCODE(1,4,0); 
     65 
     66    else version( cairo_1_2 ) 
     67        auto expected_version = CAIRO_VERSION_ENCODE(1,2,0); 
     68     
     69    else 
     70        auto expected_version = CAIRO_VERSION_ENCODE(1,0,0); 
     71     
     72    if( versionnum < expected_version ) 
     73        throw new CairoVersionException(versionnum, expected_version); 
     74 
     75    // Now we can actually load the functions. 
    5676    cairo_loadprocs(libCairo); 
    5777} 
     
    90110} 
    91111 
     112version( Tango ) 
     113{ 
     114    import tango.text.convert.Integer : toUtf8; 
     115    alias toUtf8 intToString; 
     116} 
     117else 
     118{ 
     119    import std.string : toString; 
     120    alias toString intToString; 
     121} 
     122 
     123private char[] verToString(int ver) 
     124{ 
     125    return intToString(ver/100_00) 
     126        ~ "." ~ intToString((ver/100)%100) 
     127        ~ "." ~ intToString(ver%100); 
     128} 
     129 
     130private class CairoVersionException : Exception 
     131{ 
     132    this(int got, int expected) 
     133    { 
     134        this("expected cairo version "~verToString(expected) 
     135                ~", got version "~verToString(got)~"."); 
     136    } 
     137 
     138    this(char[] msg) 
     139    { 
     140        super(msg); 
     141    } 
     142} 
     143 
    92144static ~this() 
    93145{ 
  • trunk/cairo/cairo/cairofuncs.d

    r119 r228  
    11/** 
    2  * This module contains all the "standard" cairo function calls, 
    3  * as well as functions relating to PNG functionality. 
     2 * This module contains all the "standard" cairo function calls. 
    43 * 
    54 * This file is automatically generated; do not directly modify. 
     
    4241module cairo.cairofuncs; 
    4342 
     43version( cairo_1_4 ) { version = cairo_1_2; } 
     44 
    4445private 
    4546{ 
    4647    import cairo.cairotypes; 
    4748    import cairo.loader; 
     49} 
     50 
     51/** 
     52 * This function encodes the given cairo version into an integer. The numbers 
     53 * returned by cairo_version() are encoded using this function. Two encoded 
     54 * version numbers can be compared as integers. The encoding ensures that 
     55 * later versions compare greater than earlier versions. 
     56 */ 
     57int CAIRO_VERSION_ENCODE(int major, int minor, int micro) 
     58{ 
     59    return major*10_000 + minor*100 + micro; 
    4860} 
    4961 
     
    213225    cairo_scale = cast(pf_cairo_scale)getProc(lib, "cairo_scale"); 
    214226    cairo_matrix_init_translate = cast(pf_cairo_matrix_init_translate)getProc(lib, "cairo_matrix_init_translate"); 
     227    version( cairo_1_2 ) 
     228    { 
     229        cairo_scaled_font_get_ctm = cast(pf_cairo_scaled_font_get_ctm)getProc(lib, "cairo_scaled_font_get_ctm"); 
     230        cairo_image_surface_get_format = cast(pf_cairo_image_surface_get_format)getProc(lib, "cairo_image_surface_get_format"); 
     231        cairo_surface_get_content = cast(pf_cairo_surface_get_content)getProc(lib, "cairo_surface_get_content"); 
     232        cairo_set_scaled_font = cast(pf_cairo_set_scaled_font)getProc(lib, "cairo_set_scaled_font"); 
     233        cairo_surface_get_device_offset = cast(pf_cairo_surface_get_device_offset)getProc(lib, "cairo_surface_get_device_offset"); 
     234        cairo_scaled_font_get_font_options = cast(pf_cairo_scaled_font_get_font_options)getProc(lib, "cairo_scaled_font_get_font_options"); 
     235        cairo_pop_group_to_source = cast(pf_cairo_pop_group_to_source)getProc(lib, "cairo_pop_group_to_source"); 
     236        cairo_scaled_font_text_extents = cast(pf_cairo_scaled_font_text_extents)getProc(lib, "cairo_scaled_font_text_extents"); 
     237        cairo_push_group_with_content = cast(pf_cairo_push_group_with_content)getProc(lib, "cairo_push_group_with_content"); 
     238        cairo_pattern_get_type = cast(pf_cairo_pattern_get_type)getProc(lib, "cairo_pattern_get_type"); 
     239        cairo_image_surface_get_data = cast(pf_cairo_image_surface_get_data)getProc(lib, "cairo_image_surface_get_data"); 
     240        cairo_get_group_target = cast(pf_cairo_get_group_target)getProc(lib, "cairo_get_group_target"); 
     241        cairo_surface_set_fallback_resolution = cast(pf_cairo_surface_set_fallback_resolution)getProc(lib, "cairo_surface_set_fallback_resolution"); 
     242        cairo_scaled_font_get_font_matrix = cast(pf_cairo_scaled_font_get_font_matrix)getProc(lib, "cairo_scaled_font_get_font_matrix"); 
     243        cairo_scaled_font_get_font_face = cast(pf_cairo_scaled_font_get_font_face)getProc(lib, "cairo_scaled_font_get_font_face"); 
     244        cairo_scaled_font_get_type = cast(pf_cairo_scaled_font_get_type)getProc(lib, "cairo_scaled_font_get_type"); 
     245        cairo_pop_group = cast(pf_cairo_pop_group)getProc(lib, "cairo_pop_group"); 
     246        cairo_font_face_get_type = cast(pf_cairo_font_face_get_type)getProc(lib, "cairo_font_face_get_type"); 
     247        cairo_surface_get_type = cast(pf_cairo_surface_get_type)getProc(lib, "cairo_surface_get_type"); 
     248        cairo_push_group = cast(pf_cairo_push_group)getProc(lib, "cairo_push_group"); 
     249        cairo_new_sub_path = cast(pf_cairo_new_sub_path)getProc(lib, "cairo_new_sub_path"); 
     250        cairo_image_surface_get_stride = cast(pf_cairo_image_surface_get_stride)getProc(lib, "cairo_image_surface_get_stride"); 
     251    } 
     252    version( cairo_1_4 ) 
     253    { 
     254        cairo_get_user_data = cast(pf_cairo_get_user_data)getProc(lib, "cairo_get_user_data"); 
     255        cairo_scaled_font_get_user_data = cast(pf_cairo_scaled_font_get_user_data)getProc(lib, "cairo_scaled_font_get_user_data"); 
     256        cairo_pattern_get_rgba = cast(pf_cairo_pattern_get_rgba)getProc(lib, "cairo_pattern_get_rgba"); 
     257        cairo_font_face_get_reference_count = cast(pf_cairo_font_face_get_reference_count)getProc(lib, "cairo_font_face_get_reference_count"); 
     258        cairo_scaled_font_set_user_data = cast(pf_cairo_scaled_font_set_user_data)getProc(lib, "cairo_scaled_font_set_user_data"); 
     259        cairo_pattern_get_radial_circles = cast(pf_cairo_pattern_get_radial_circles)getProc(lib, "cairo_pattern_get_radial_circles"); 
     260        cairo_clip_extents = cast(pf_cairo_clip_extents)getProc(lib, "cairo_clip_extents"); 
     261        cairo_pattern_get_color_stop_rgba = cast(pf_cairo_pattern_get_color_stop_rgba)getProc(lib, "cairo_pattern_get_color_stop_rgba"); 
     262        cairo_get_dash_count = cast(pf_cairo_get_dash_count)getProc(lib, "cairo_get_dash_count"); 
     263        cairo_get_reference_count = cast(pf_cairo_get_reference_count)getProc(lib, "cairo_get_reference_count"); 
     264        cairo_rectangle_list_destroy = cast(pf_cairo_rectangle_list_destroy)getProc(lib, "cairo_rectangle_list_destroy"); 
     265        cairo_pattern_get_reference_count = cast(pf_cairo_pattern_get_reference_count)getProc(lib, "cairo_pattern_get_reference_count"); 
     266        cairo_pattern_get_surface = cast(pf_cairo_pattern_get_surface)getProc(lib, "cairo_pattern_get_surface"); 
     267        cairo_pattern_set_user_data = cast(pf_cairo_pattern_set_user_data)getProc(lib, "cairo_pattern_set_user_data"); 
     268        cairo_get_dash = cast(pf_cairo_get_dash)getProc(lib, "cairo_get_dash"); 
     269        cairo_set_user_data = cast(pf_cairo_set_user_data)getProc(lib, "cairo_set_user_data"); 
     270        cairo_scaled_font_get_reference_count = cast(pf_cairo_scaled_font_get_reference_count)getProc(lib, "cairo_scaled_font_get_reference_count"); 
     271        cairo_get_scaled_font = cast(pf_cairo_get_scaled_font)getProc(lib, "cairo_get_scaled_font"); 
     272        cairo_copy_clip_rectangle_list = cast(pf_cairo_copy_clip_rectangle_list)getProc(lib, "cairo_copy_clip_rectangle_list"); 
     273        cairo_pattern_get_color_stop_count = cast(pf_cairo_pattern_get_color_stop_count)getProc(lib, "cairo_pattern_get_color_stop_count"); 
     274        cairo_surface_get_reference_count = cast(pf_cairo_surface_get_reference_count)getProc(lib, "cairo_surface_get_reference_count"); 
     275        cairo_pattern_get_user_data = cast(pf_cairo_pattern_get_user_data)getProc(lib, "cairo_pattern_get_user_data"); 
     276        cairo_pattern_get_linear_points = cast(pf_cairo_pattern_get_linear_points)getProc(lib, "cairo_pattern_get_linear_points"); 
     277    } 
    215278} 
    216279 
     
    380443typedef void function(cairo_t* cr, double sx, double sy) pf_cairo_scale; 
    381444typedef void function(cairo_matrix_t* matrix, double tx, double ty) pf_cairo_matrix_init_translate; 
     445version( cairo_1_2 ) 
     446{ 
     447    typedef void function(cairo_scaled_font_t* scaled_font, cairo_matrix_t* ctm) pf_cairo_scaled_font_get_ctm; 
     448    typedef cairo_format_t function(cairo_surface_t* surface) pf_cairo_image_surface_get_format; 
     449    typedef cairo_content_t function(cairo_surface_t* surface) pf_cairo_surface_get_content; 
     450    typedef void function(cairo_t* cr, cairo_scaled_font_t* scaled_font) pf_cairo_set_scaled_font; 
     451    typedef void function(cairo_surface_t* surface, double* x_offset, double* y_offset) pf_cairo_surface_get_device_offset; 
     452    typedef void function(cairo_scaled_font_t* scaled_font, cairo_font_options_t* options) pf_cairo_scaled_font_get_font_options; 
     453    typedef void function(cairo_t* cr) pf_cairo_pop_group_to_source; 
     454    typedef void function(cairo_scaled_font_t* scaled_font, char* utf8, cairo_text_extents_t* extents) pf_cairo_scaled_font_text_extents; 
     455    typedef void function(cairo_t* cr, cairo_content_t content) pf_cairo_push_group_with_content; 
     456    typedef cairo_pattern_type_t function(cairo_pattern_t* pattern) pf_cairo_pattern_get_type; 
     457    typedef ubyte* function(cairo_surface_t* surface) pf_cairo_image_surface_get_data; 
     458    typedef cairo_surface_t* function(cairo_t* cr) pf_cairo_get_group_target; 
     459    typedef void function(cairo_surface_t* surface, double x_pixels_per_inch, double y_pixels_per_inch) pf_cairo_surface_set_fallback_resolution; 
     460    typedef void function(cairo_scaled_font_t* scaled_font, cairo_matrix_t* font_matrix) pf_cairo_scaled_font_get_font_matrix; 
     461    typedef cairo_font_face_t* function(cairo_scaled_font_t* scaled_font) pf_cairo_scaled_font_get_font_face; 
     462    typedef cairo_font_type_t function(cairo_scaled_font_t* scaled_font) pf_cairo_scaled_font_get_type; 
     463    typedef cairo_pattern_t* function(cairo_t* cr) pf_cairo_pop_group; 
     464    typedef cairo_font_type_t function(cairo_font_face_t* font_face) pf_cairo_font_face_get_type; 
     465    typedef cairo_surface_t function(cairo_surface_t* surface) pf_cairo_surface_get_type; 
     466    typedef void function(cairo_t* cr) pf_cairo_push_group; 
     467    typedef void function(cairo_t* cr) pf_cairo_new_sub_path; 
     468    typedef int function(cairo_surface_t* surface) pf_cairo_image_surface_get_stride; 
     469} 
     470version( cairo_1_4 ) 
     471{ 
     472    typedef void* function(cairo_t* cr, cairo_user_data_key_t* key) pf_cairo_get_user_data; 
     473    typedef void* function(cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key) pf_cairo_scaled_font_get_user_data; 
     474    typedef cairo_status_t function(cairo_pattern_t* pattern, double* red, double* green, double* blue, double* alpha) pf_cairo_pattern_get_rgba; 
     475    typedef uint function(cairo_font_face_t* font_face) pf_cairo_font_face_get_reference_count; 
     476    typedef cairo_status_t function(cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy) pf_cairo_scaled_font_set_user_data; 
     477    typedef cairo_status_t function(cairo_pattern_t* pattern, double* x0, double* y0, double* r0, double* x1, double* y1, double* r1) pf_cairo_pattern_get_radial_circles; 
     478    typedef void function(cairo_t* cr, double* x1, double* y1, double* x2, double* y2) pf_cairo_clip_extents; 
     479    typedef cairo_status_t function(cairo_pattern_t* pattern, int index, double* offset, double* red, double* green, double* blue, double* alpha) pf_cairo_pattern_get_color_stop_rgba; 
     480    typedef int function(cairo_t* cr) pf_cairo_get_dash_count; 
     481    typedef uint function(cairo_t* cr) pf_cairo_get_reference_count; 
     482    typedef void function(cairo_rectangle_list_t* rectangle_list) pf_cairo_rectangle_list_destroy; 
     483    typedef uint function(cairo_pattern_t* pattern) pf_cairo_pattern_get_reference_count; 
     484    typedef cairo_status_t function(cairo_pattern_t* pattern, cairo_surface_t** surface) pf_cairo_pattern_get_surface; 
     485    typedef cairo_status_t function(cairo_pattern_t* pattern, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy) pf_cairo_pattern_set_user_data; 
     486    typedef void function(cairo_t* cr, double* dashes, double* offset) pf_cairo_get_dash; 
     487    typedef cairo_status_t function(cairo_t* cr, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy) pf_cairo_set_user_data; 
     488    typedef uint function(cairo_scaled_font_t* scaled_font) pf_cairo_scaled_font_get_reference_count; 
     489    typedef cairo_scaled_font_t* function(cairo_t* cr) pf_cairo_get_scaled_font; 
     490    typedef cairo_rectangle_list_t* function(cairo_t* cr) pf_cairo_copy_clip_rectangle_list; 
     491    typedef cairo_status_t function(cairo_pattern_t* pattern, int* count) pf_cairo_pattern_get_color_stop_count; 
     492    typedef uint function(cairo_surface_t* surface) pf_cairo_surface_get_reference_count; 
     493    typedef void* function(cairo_pattern_t* pattern, cairo_user_data_key_t* key) pf_cairo_pattern_get_user_data; 
     494    typedef cairo_status_t function(cairo_pattern_t* pattern, double* x0, double* y0, double* x1, double* y1) pf_cairo_pattern_get_linear_points; 
     495} 
    382496 
    383497//pfName Name; 
     
    543657pf_cairo_scale cairo_scale; 
    544658pf_cairo_matrix_init_translate cairo_matrix_init_translate; 
     659version( cairo_1_2 ) 
     660{ 
     661    pf_cairo_scaled_font_get_ctm cairo_scaled_font_get_ctm; 
     662    pf_cairo_image_surface_get_format cairo_image_surface_get_format; 
     663    pf_cairo_surface_get_content cairo_surface_get_content; 
     664    pf_cairo_set_scaled_font cairo_set_scaled_font; 
     665    pf_cairo_surface_get_device_offset cairo_surface_get_device_offset; 
     666    pf_cairo_scaled_font_get_font_options cairo_scaled_font_get_font_options; 
     667    pf_cairo_pop_group_to_source cairo_pop_group_to_source; 
     668    pf_cairo_scaled_font_text_extents cairo_scaled_font_text_extents; 
     669    pf_cairo_push_group_with_content cairo_push_group_with_content; 
     670    pf_cairo_pattern_get_type cairo_pattern_get_type; 
     671    pf_cairo_image_surface_get_data cairo_image_surface_get_data; 
     672    pf_cairo_get_group_target cairo_get_group_target; 
     673    pf_cairo_surface_set_fallback_resolution cairo_surface_set_fallback_resolution; 
     674    pf_cairo_scaled_font_get_font_matrix cairo_scaled_font_get_font_matrix; 
     675    pf_cairo_scaled_font_get_font_face cairo_scaled_font_get_font_face; 
     676    pf_cairo_scaled_font_get_type cairo_scaled_font_get_type; 
     677    pf_cairo_pop_group cairo_pop_group; 
     678    pf_cairo_font_face_get_type cairo_font_face_get_type; 
     679    pf_cairo_surface_get_type cairo_surface_get_type; 
     680    pf_cairo_push_group cairo_push_group; 
     681    pf_cairo_new_sub_path cairo_new_sub_path; 
     682    pf_cairo_image_surface_get_stride cairo_image_surface_get_stride; 
     683} 
     684version( cairo_1_4 ) 
     685{ 
     686    pf_cairo_get_user_data cairo_get_user_data; 
     687    pf_cairo_scaled_font_get_user_data cairo_scaled_font_get_user_data; 
     688    pf_cairo_pattern_get_rgba cairo_pattern_get_rgba; 
     689    pf_cairo_font_face_get_reference_count cairo_font_face_get_reference_count; 
     690    pf_cairo_scaled_font_set_user_data cairo_scaled_font_set_user_data; 
     691    pf_cairo_pattern_get_radial_circles cairo_pattern_get_radial_circles; 
     692    pf_cairo_clip_extents cairo_clip_extents; 
     693    pf_cairo_pattern_get_color_stop_rgba cairo_pattern_get_color_stop_rgba; 
     694    pf_cairo_get_dash_count cairo_get_dash_count; 
     695    pf_cairo_get_reference_count cairo_get_reference_count; 
     696    pf_cairo_rectangle_list_destroy cairo_rectangle_list_destroy; 
     697    pf_cairo_pattern_get_reference_count cairo_pattern_get_reference_count; 
     698    pf_cairo_pattern_get_surface cairo_pattern_get_surface; 
     699    pf_cairo_pattern_set_user_data cairo_pattern_set_user_data; 
     700    pf_cairo_get_dash cairo_get_dash; 
     701    pf_cairo_set_user_data cairo_set_user_data; 
     702    pf_cairo_scaled_font_get_reference_count cairo_scaled_font_get_reference_count; 
     703    pf_cairo_get_scaled_font cairo_get_scaled_font; 
     704    pf_cairo_copy_clip_rectangle_list cairo_copy_clip_rectangle_list; 
     705    pf_cairo_pattern_get_color_stop_count cairo_pattern_get_color_stop_count; 
     706    pf_cairo_surface_get_reference_count cairo_surface_get_reference_count; 
     707    pf_cairo_pattern_get_user_data cairo_pattern_get_user_data; 
     708    pf_cairo_pattern_get_linear_points cairo_pattern_get_linear_points; 
     709} 
    545710 
  • trunk/cairo/cairo/cairotypes.d

    r119 r228  
    3939 */ 
    4040module cairo.cairotypes; 
     41 
     42version( cairo_1_4 ) { version = cairo_1_2; } 
    4143 
    4244extern(C): 
     
    271273} 
    272274 
     275version( cairo_1_2 ) 
     276{ 
     277    enum cairo_font_type_t 
     278    { 
     279        CAIRO_FONT_TYPE_TOY, 
     280        CAIRO_FONT_TYPE_FT, 
     281        CAIRO_FONT_TYPE_WIN32, 
     282        CAIRO_FONT_TYPE_ATSUI 
     283    } 
     284 
     285    enum cairo_pattern_type_t 
     286    { 
     287        CAIRO_PATTERN_TYPE_SOLID, 
     288        CAIRO_PATTERN_TYPE_SURFACE, 
     289        CAIRO_PATTERN_TYPE_LINEAR, 
     290        CAIRO_PATTERN_TYPE_RADIAL 
     291    } 
     292 
     293    enum cairo_surface_type_t 
     294    { 
     295        CAIRO_SURFACE_TYPE_IMAGE, 
     296        CAIRO_SURFACE_TYPE_PDF, 
     297        CAIRO_SURFACE_TYPE_PS, 
     298        CAIRO_SURFACE_TYPE_XLIB, 
     299        CAIRO_SURFACE_TYPE_XCB, 
     300        CAIRO_SURFACE_TYPE_GLITZ, 
     301        CAIRO_SURFACE_TYPE_QUARTZ, 
     302        CAIRO_SURFACE_TYPE_WIN32, 
     303        CAIRO_SURFACE_TYPE_BEOS, 
     304        CAIRO_SURFACE_TYPE_DIRECTFB, 
     305        CAIRO_SURFACE_TYPE_SVG, 
     306        CAIRO_SURFACE_TYPE_OS2 
     307    } 
     308} 
     309 
     310version( cairo_1_4 ) 
     311{ 
     312    struct cairo_rectangle_t 
     313    { 
     314        double x, y, width, height; 
     315    } 
     316 
     317    struct cairo_rectangle_list_t 
     318    { 
     319        cairo_status_t status; 
     320        cairo_rectangle_t* rectangles; 
     321        int num_rectangles; 
     322    } 
     323} 
     324 
  • trunk/cairo/cairo/loader.d

    r179 r228  
    44 * the Derelict project's loader.d file. 
    55 * 
    6  * Authors: Daniel Keep 
    7  * Copyright: 2005-2006, Derelict developers; 
    8  *            2006, Daniel Keep. 
     6 * Authors: Derelict developers, Daniel Keep 
     7 * Copyright: 2005-2006 Derelict developers, 2006 Daniel Keep. 
    98 * License: BSD v2 (http://www.opensource.org/licenses/bsd-license.php). 
    109 */ 
    1110/* 
    12  * Copyright © 2006 Daniel Keep 
     11 * Copyright © 2006 Daniel Keep. 
    1312 * All rights reserved. 
    1413 * 
  • trunk/cairo/cairo/png/cairofuncs_png.d

    r119 r228  
    4242module cairo.png.cairofuncs_png; 
    4343 
     44version( cairo_1_4 ) { version = cairo_1_2; } 
     45 
    4446private 
    4547{ 
  • trunk/cairo/cairo/win32/cairotypes_win32.d

    r179 r228  
    4343 
    4444public import cairo.cairotypes; 
    45 public import win32.windows; 
    4645 
     46version( cairo_dfl ) 
     47{ 
     48    public import dfl.internal.winapi : HDC, LOGFONTW; 
     49} 
     50else 
     51{ 
     52    public import win32.windows : HDC, LOGFONTW; 
     53} 
     54