00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include "cinder/Cinder.h"
00026 #include "cinder/Surface.h"
00027 #include "cinder/Color.h"
00028 #include "cinder/Rect.h"
00029 #include "cinder/BSpline.h"
00030 #include "cinder/Shape2d.h"
00031 #include "cinder/Font.h"
00032
00033 #if defined( CINDER_COCOA_TOUCH )
00034 #include <CoreGraphics/CoreGraphics.h>
00035 #elif defined( CINDER_MAC )
00036 #include <ApplicationServices/ApplicationServices.h>
00037 #endif
00038
00039 #include <string>
00040 #include <vector>
00041
00042
00043 struct _cairo_surface;
00044 typedef struct _cairo_surface cairo_surface_t;
00045
00046 struct _cairo;
00047 typedef struct _cairo cairo_t;
00048
00049 struct cairo_path;
00050 typedef struct cairo_path cairo_path_t;
00051
00052 struct _cairo_pattern;
00053 typedef struct _cairo_pattern cairo_pattern_t;
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 struct _cairo_font_options;
00064 typedef struct _cairo_font_options cairo_font_options_t;
00065
00066 struct _cairo_matrix;
00067 typedef struct _cairo_matrix cairo_matrix_t;
00068
00069 struct _cairo_font_face;
00070 typedef struct _cairo_font_face cairo_font_face_t;
00071
00072 struct _cairo_scaled_font;
00073 typedef struct _cairo_scaled_font cairo_scaled_font_t;
00074
00075
00076
00077
00078 struct _cairo_text_extents;
00079 typedef struct _cairo_text_extents cairo_text_extents_t;
00080
00081 struct _cairo_font_extents;
00082 typedef struct _cairo_font_extents cairo_font_extents_t;
00083
00084 namespace cinder { namespace cairo {
00086
00087 class SurfaceBase {
00088 public:
00089 SurfaceBase() : mCairoSurface( 0 ) {}
00090 SurfaceBase( const SurfaceBase &other );
00091 SurfaceBase& operator=( const SurfaceBase &other );
00092
00093 virtual ~SurfaceBase();
00094
00095 cairo_surface_t* getCairoSurface() const { return mCairoSurface; }
00096
00097 int32_t getWidth() const { return mWidth; }
00098 int32_t getHeight() const { return mHeight; }
00099 float getAspectRatio() const { return getWidth() / (float)getHeight(); }
00100 Area getBounds() const { return Area( 0, 0, getWidth(), getHeight() ); }
00101 Vec2i getSize() const { return Vec2i( getWidth(), getHeight() ); }
00102
00103 void flush();
00104
00105 protected:
00106 SurfaceBase( int32_t aWidth, int32_t aHeight ) : mWidth( aWidth ), mHeight( aHeight ), mCairoSurface( 0 ) {}
00107
00108 cairo_surface_t *mCairoSurface;
00109 int32_t mWidth, mHeight;
00110 };
00111
00113
00114 class SurfaceImage : public SurfaceBase {
00115 public:
00116 SurfaceImage() : SurfaceBase() {}
00117 SurfaceImage( int32_t width, int32_t height, bool hasAlpha = false );
00118 SurfaceImage( const uint8_t *dataPtr, int32_t width, int32_t height, int32_t stride, bool hasAlpha = false );
00119 SurfaceImage( const cinder::Surface &ciSurface );
00120 SurfaceImage( const SurfaceImage &other );
00121
00122 uint8_t* getData();
00123 const uint8_t* getData() const { return getData(); }
00124 int32_t getStride() const;
00125
00126 cinder::Surface& getSurface();
00127 const cinder::Surface& getSurface() const { return getSurface(); }
00128
00129 protected:
00130 void initCinderSurface( bool alpha, uint8_t *data, int32_t stride );
00131
00132 cinder::Surface mCinderSurface;
00133 };
00134
00136
00137 class SurfaceSvg : public SurfaceBase {
00138 public:
00139 SurfaceSvg() : SurfaceBase() {}
00140 SurfaceSvg( const std::string &filePath, uint32_t aWidth, uint32_t aHeight );
00141 SurfaceSvg( const SurfaceSvg &other );
00142 };
00143
00145
00146 class SurfacePdf : public SurfaceBase {
00147 public:
00148 SurfacePdf() : SurfaceBase() {}
00149 SurfacePdf( const std::string &filePath, double widthInPoints, double heightInPoints );
00150 SurfacePdf( const SurfacePdf &other );
00151
00152 void setSize( double widthInPoints, double heightInPoints );
00153 };
00154
00156
00157 class SurfacePs : public SurfaceBase {
00158 public:
00159 SurfacePs() : SurfaceBase() {}
00160 SurfacePs( const std::string &filePath, double widthInPoints, double heightInPoints, bool enableLevel3 = true );
00161 SurfacePs( const SurfacePs &other );
00162
00163 void setSize( double widthInPoints, double heightInPoints );
00166 void dscBeginSetup();;
00169 void dscBeginPageSetup();
00171 void dscComment( const std::string &comment ) { dscComment( comment.c_str() ); }
00173 void dscComment( const char *comment );
00174 };
00175
00177
00178 class SurfaceEps : public SurfaceBase {
00179 public:
00180 SurfaceEps() : SurfaceBase() {}
00181 SurfaceEps( const std::string &filePath, double widthInPoints, double heightInPoints, bool enableLevel3 = true );
00182 SurfaceEps( const SurfaceEps &other );
00183
00184 void setSize( double widthInPoints, double heightInPoints );
00187 void dscBeginSetup();;
00190 void dscBeginPageSetup();
00192 void dscComment( const std::string &comment ) { dscComment( comment.c_str() ); }
00194 void dscComment( const char *comment );
00195 };
00196
00198
00199 #if defined( CINDER_COCOA )
00200 class SurfaceQuartz : public SurfaceBase {
00201 public:
00202 SurfaceQuartz() : SurfaceBase() {}
00203 SurfaceQuartz( CGContextRef cgContext, int32_t width, int32_t height );
00204 SurfaceQuartz( const SurfaceQuartz &other );
00205
00206 CGContextRef getCgContextRef();
00207
00208 protected:
00209 CGContextRef mCgContextRef;
00210 };
00211
00213
00214 class SurfaceCgBitmapContext : public SurfaceBase {
00215 public:
00216 SurfaceCgBitmapContext() : SurfaceBase() {}
00217 SurfaceCgBitmapContext( int32_t width, int32_t height, bool alpha );
00218 SurfaceCgBitmapContext( const SurfaceCgBitmapContext &other );
00219
00220 cinder::Surface& getSurface() { return mSurface; }
00221 const cinder::Surface& getSurface() const { return getSurface(); }
00222
00223 CGContextRef getCgContextRef() { return mCgContextRef; }
00224
00225 protected:
00226 cinder::Surface mSurface;
00227 CGContextRef mCgContextRef;
00228 };
00229 #endif // defined( CINDER_COCOA )
00230
00232
00233 #if defined( CINDER_MSW )
00234 class SurfaceGdi : public SurfaceBase {
00235 public:
00236 SurfaceGdi() : SurfaceBase() {}
00237 SurfaceGdi( HDC hdc );
00238 SurfaceGdi( const SurfaceGdi &other );
00239
00240 HDC getDc() const { return mDc; }
00241
00242 protected:
00243 HDC mDc;
00244 };
00245 #endif // defined( CINDER_MSW )
00246
00248
00249 class Matrix
00250 {
00251 public:
00252 Matrix();
00253 Matrix( double xx, double yx, double xy, double yy, double x0, double y0 );
00254
00255
00256 cairo_matrix_t& getCairoMatrix() { return *reinterpret_cast<cairo_matrix_t*>( this ); }
00257 const cairo_matrix_t& getCairoMatrix() const { return *reinterpret_cast<const cairo_matrix_t*>( this ); }
00258
00259 void init( double xx, double yx, double xy, double yy, double x0, double y0 );
00260 void initIdentity();
00261 void initTranslate( double tx, double ty );
00262 void initScale( double sx, double sy );
00263 void initRotate( double radians );
00264 void translate( double tx, double ty );
00265 void scale( double sx, double sy );
00266 void rotate( double radians );
00267 int32_t invert();
00268
00270 Vec2f transformPoint( const Vec2f &v ) const;
00272 Vec2f transformDistance( const Vec2f &v ) const;
00273
00274
00275 double xx; double yx;
00276 double xy; double yy;
00277 double x0; double y0;
00278 };
00279
00280 class Pattern {
00281 public:
00282 Pattern( cairo_pattern_t *aPattern ) : mCairoPattern( aPattern ) {}
00284 Pattern( const Pattern &other );
00285 ~Pattern();
00286
00287 Pattern& operator=( const Pattern &other );
00288
00289 cairo_pattern_t* getCairoPattern() { return mCairoPattern; }
00290
00291 void setExtend( int extend );
00292 void setExtendNone();
00293 void setExtendRepeat();
00294 void setExtendReflect();
00295 void setExtendPad();
00296 int getExtend() const;
00297
00298 void setFilter( int filter );
00299 int getFilter() const;
00300
00301 void setMatrix( const Matrix &matrix );
00302 Matrix getMatrix() const;
00303
00304 protected:
00305 Pattern() : mCairoPattern( 0 ) {}
00306
00307 cairo_pattern_t *mCairoPattern;
00308 };
00309
00310 class PatternSolid : public Pattern {
00311 public:
00312 PatternSolid( const ColorA &color );
00313 PatternSolid( const Color &color );
00314 };
00315
00316 class PatternSurface : public Pattern {
00317 public:
00318 PatternSurface( SurfaceBase &surface );
00319 };
00320
00321 class Gradient : public Pattern {
00322 public:
00323 void addColorStopRgb( double offset, double red, double green, double blue );
00324 void addColorStopRgba( double offset, double red, double green, double blue, double alpha );
00325 void addColorStop( double offset, const Color &color ) { addColorStopRgb( offset, (double)color.r, (double)color.g, (double)color.b ); }
00326 void addColorStop( double offset, const ColorA &color ) { addColorStopRgba( offset, (double)color.r, (double)color.g, (double)color.b, (double)color.a ); }
00328 int getColorStopCount();
00329 void getColorStopRgba( int index, double *offset, double *red, double *green, double *blue, double *alpha );
00330
00331 protected:
00332 Gradient( cairo_pattern_t *pattern );
00333 };
00334
00335 class GradientRadial : public Gradient {
00336 public:
00337 GradientRadial( double x0, double y0, double radius0, double x1, double y1, double radius1 );
00338 GradientRadial( const Vec2f ¢er0, float radius0, const Vec2f ¢er1, float radius1 );
00339 };
00340
00341 class GradientLinear : public Gradient {
00342 public:
00343 GradientLinear( double x0, double y0, double x1, double y1 );
00344 GradientLinear( Vec2f point0, Vec2f point1 );
00345 };
00346
00347 class FontOptions
00348 {
00349 public:
00350 FontOptions() { mCairoFontOptions = 0; }
00351 FontOptions( cairo_font_options_t *aCairoFontOptions );
00352 virtual ~FontOptions();
00353
00354 cairo_font_options_t* getCairoFontOptions() { return mCairoFontOptions; }
00355
00356 FontOptions* create();
00357
00358 int32_t status();
00359 void merge( const FontOptions *other );
00360 unsigned long hash();
00361 bool equal( const FontOptions *other );
00362 void setAntiAlias( int32_t antialias );
00363 int32_t getAntiAlias();
00364 void setSubPixelOrder( int32_t subpixel_order );
00365 int32_t getSubPixelOrder();
00366 void setHintStyle( int32_t hint_style );
00367 int32_t getHintStyle();
00368 void setHintMetrics( int32_t hint_metrics );
00369 int32_t getHintMetrics();
00370
00371 private:
00372 cairo_font_options_t *mCairoFontOptions;
00373 };
00374
00375 class FontFace
00376 {
00377 public:
00378 FontFace() { mCairoFontFace = 0; }
00379 FontFace( const std::string &fontName );
00380 FontFace( cairo_font_face_t *aCairoFontFace );
00381 virtual ~FontFace();
00382
00383 cairo_font_face_t* getCairoFontFace() const { return mCairoFontFace; }
00384
00385 int32_t getType();
00386
00387 private:
00388 cairo_font_face_t *mCairoFontFace;
00389 };
00390
00391 class ScaledFont
00392 {
00393 public:
00394 ScaledFont() { mCairoScaledFont = 0; }
00395 ScaledFont( cairo_scaled_font_t *aCairoScaledFont );
00396 virtual ~ScaledFont();
00397
00398 cairo_scaled_font_t* getCairoScaledFont() { return mCairoScaledFont; }
00399
00400 int32_t status();
00401
00402
00403
00404 FontFace* getFontFace();
00405 void getFontOptions( FontOptions *options );
00406 void getFontMatrix( Matrix *font_matrix );
00407 void getCtm( Matrix *ctm);
00408 int32_t getType();
00409
00410 private:
00411 cairo_scaled_font_t *mCairoScaledFont;
00412 };
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450 class FontExtents
00451 {
00452 public:
00453 FontExtents();
00454 FontExtents( cairo_font_extents_t *aCairoFontExtents );
00455 virtual ~FontExtents();
00456
00457 cairo_font_extents_t* getCairoFontExtents() { return mCairoFontExtents.get(); }
00458
00459 const double& ascent() const;
00460 double& ascent();
00461 const double& descent() const;
00462 double& descent();
00463 const double& height() const;
00464 double& height();
00465 const double& maxXAdvance() const;
00466 double& maxXAdvance();
00467 const double& maxYAdvance() const;
00468 double& maxYAdvance();
00469
00470 private:
00471 shared_ptr<cairo_font_extents_t> mCairoFontExtents;
00472 };
00473
00474 class TextExtents
00475 {
00476 public:
00477 TextExtents();
00478 TextExtents( cairo_text_extents_t *aCairoTextExtents );
00479 virtual ~TextExtents();
00480
00481 cairo_text_extents_t* getCairoTextExtents() { return mCairoTextExtents.get(); }
00482
00483 const double& xBearing() const;
00484 double& xBearing();
00485 const double& yBearing() const;
00486 double& yBearing();
00487 const double& width() const;
00488 double& width();
00489 const double& height() const;
00490 double& height();
00491 const double& xAdvance() const;
00492 double& xAdvance();
00493 const double& yAdvance() const;
00494 double& yAdvance();
00495
00496 private:
00497 shared_ptr<cairo_text_extents_t> mCairoTextExtents;
00498 };
00499
00501
00502 class Context
00503 {
00504 public:
00505 Context() : mCairo( 0 ) {}
00506 Context( const SurfaceBase &surface );
00507 Context( const Context &other );
00508 ~Context();
00509
00510 Context& operator=( const Context &other );
00511
00513 cairo_t* getCairo();
00515 cairo_surface_t* getCairoSuface();
00516
00517 void save();
00518 void restore();
00519 void flush();
00520
00521 void pushGroup();
00522
00523 void pushGroupWithContent( int32_t content );
00524 Pattern* popGroup();
00525 void popGroupToSource();
00526
00527 void setSourceRgb( double red, double green, double blue );
00528 void setSourceRgba( double red, double green, double blue, double alpha );
00529 void setSource( const Color &col ) { setSourceRgb( col.r, col.g, col.b ); }
00530 void setSource( const ColorAf &col ) { setSourceRgba( col.r, col.g, col.b, col.a ); }
00531 void setSource( const Pattern &source );
00532 void setSourceSurface( SurfaceBase &surface, double x, double y );
00533 Pattern* getSource();
00534
00535 void copySurface( const SurfaceBase &surface, const Area &srcArea, const Vec2i &dstOffset = Vec2i::zero() );
00536
00537 void setAntiAlias( int32_t antialias );
00538 int32_t getAntiAlias();
00539
00540 void setDash( const double *dashes, int numDashes, double offset );
00541 void setDash( const std::vector<double> &dashes, double offset = 0 );
00542 void unsetDash();
00543 int getDashCount() const;
00544 void getDash( double *dashes, double *offset );
00545
00546 void setFillRule( int32_t fill_rule );
00547 int32_t getFillRule();
00548 void setLineCap( int32_t line_cap );
00549 int32_t getLineCap();
00550 void setLineJoin( int32_t line_join );
00551 int32_t getLineJoin();
00552 void setLineWidth( double width );
00553 double getLineWidth() const;
00554 void setMiterLimit( double limit );
00555 double getMiterLimit() const;
00556
00557 void setOperator( int32_t op );
00558 int32_t getOperator();
00559
00560 void setTolerance( double tolerance );
00561 double getTolerance() const;
00562 void clip();
00563 void clipPerserve();
00564 void clipExtents( double *x1, double *y1, double *x2, double *y2 );
00565 void resetClip();
00566
00567
00568
00569
00570
00571
00572
00573 void fill();
00574 void fillPreserve();
00575 void fillExtents( double *x1, double *y1, double *x2, double *y2 );
00576 bool inFill( double x, double y );
00577
00578
00579
00580 void mask( Pattern *pattern );
00581 void maskSurface( SurfaceBase *surface, double surface_x, double surface_y );
00582
00583 void paint();
00584 void paintWithAlpha( double alpha );
00585 void stroke();
00586 void strokePreserve();
00587 void strokeExtents( double *x1, double *y1, double *x2, double *y2 );
00588 bool inStroke( double x, double y );
00589 void copyPage();
00590 void showPage();
00591
00593 void copyPath( cinder::Shape2d *resultPath );
00595 void copyPathFlat( cinder::Shape2d *resultPath );
00596
00597
00598
00599 void getCurrentPoint( double *x, double *y );
00600 void newPath();
00601 void newSubPath();
00602 void closePath();
00603 void arc( double xc, double yc, double radius, double angle1, double angle2 );
00604 void arc( const Vec2f ¢er, double radius, double angle1, double angle2 ) { arc( center.x, center.y, radius, angle1, angle2 ); }
00605 void arcNegative( double xc, double yc, double radius, double angle1, double angle2 );
00606 void arcNegative( const Vec2f ¢er, double radius, double angle1, double angle2 ) { arcNegative( center.x, center.y, radius, angle1, angle2 ); }
00607 void quadTo( double x1, double y1, double x2, double y2 );
00608 void quadTo( const Vec2f &v1, const Vec2f &v2 ) { quadTo( (double)v1.x, (double)v1.y, (double)v2.x, (double)v2.y ); }
00609 void curveTo( double x1, double y1, double x2, double y2, double x3, double y3 );
00610 void curveTo( const Vec2f &v1, const Vec2f &v2, const Vec2f &v3 ) { curveTo( (double)v1.x, (double)v1.y, (double)v2.x, (double)v2.y, (double)v3.x, (double)v3.y ); }
00611 void line( const Vec2f &v1, const Vec2f &v2 ) { moveTo( v1 ); lineTo( v2 ); }
00612 void lineTo( double x, double y );
00613 void lineTo( const Vec2f &v ) { lineTo( (double)v.x, (double)v.y ); }
00614 void moveTo( double x, double y );
00615 void moveTo( const Vec2f &v ) { moveTo( (double)v.x, (double)v.y ); }
00616 void rectangle( double x, double y, double width, double height );
00617 void rectangle( const Rectf &r ) { rectangle( r.x1, r.y1, r.getWidth(), r.getHeight() ); }
00618 void rectangle( const Vec2f &upperLeft, const Vec2f &lowerRight );
00619
00620 void textPath( const char *utf8 );
00621 void relCurveTo( double dx1, double dy1, double dx2, double dy2, double dx3, double dy3 );
00622 void relLineTo( double dx, double dy );
00623 void relMoveTo( double dx, double dy );
00624 void appendPath( const cinder::Shape2d &path );
00625 void appendPath( const cinder::Path2d &path );
00626 void circle( double dx, double dy, double radius );
00627 void circle( const Vec2f &v, double radius ) { circle( (double)v.x, (double)v.y, radius ); }
00628
00629
00630 void translate( double tx, double ty );
00631 void translate( const Vec2f &v ) { translate( (double)v.x, (double)v.y ); }
00632 void scale( double sx, double sy );
00633 void rotate( double angle );
00634 void transform( const Matrix &aMatrix );
00635 void setMatrix( const Matrix &aMatrix );
00636 void getMatrix( Matrix *aMatrix );
00637 void identityMatrix();
00638 void userToDevice( double *x, double *y );
00639 void userToDeviceDistance( double *dx, double *dy );
00640 void deviceToUser( double *x, double *y );
00641 void deviceToUserDistance( double *dx, double *dy );
00642
00643
00644 void setFont( const cinder::Font &font );
00645 void selectFontFace( const std::string &family, int32_t slant, int32_t weight );
00646 void setFontSize( double size );
00647 void setFontMatrix( const Matrix &matrix );
00648 void getFontMatrix( Matrix *matrix );
00649 void setFontOptions( const FontOptions *options );
00650 void getFontOptions( FontOptions *options );
00651 void setFontFace( const FontFace &font_face );
00652 FontFace* getFontFace();
00653 void setScaledFont( const ScaledFont *scaled_font );
00654 ScaledFont* getScaledFont();
00655 void showText( const std::string &s );
00656
00657
00658 FontExtents fontExtents();
00659 TextExtents textExtents( const std::string &s );
00660
00661
00662
00663 protected:
00664 cairo_t *mCairo;
00665 cairo_surface_t *mCairoSurface;
00666 };
00667
00668 #if defined( CINDER_COCOA )
00669 SurfaceQuartz createWindowSurface();
00670 #else
00671 SurfaceGdi createWindowSurface();
00672 #endif
00673
00674
00675 extern const int32_t FONT_SLANT_NORMAL;
00676 extern const int32_t FONT_SLANT_ITALIC;
00677 extern const int32_t FONT_SLANT_OBLIQUE;
00678 extern const int32_t FONT_WEIGHT_NORMAL;
00679 extern const int32_t FONT_WEIGHT_BOLD;
00680
00681 extern const int32_t FILL_RULE_WINDING;
00682 extern const int32_t FILL_RULE_EVEN_ODD;
00683
00684 extern const int32_t EXTEND_NONE;
00685 extern const int32_t EXTEND_REPEAT;
00686 extern const int32_t EXTEND_REFLECT;
00687 extern const int32_t EXTEND_PAD;
00688
00689 extern const int32_t LINE_CAP_BUTT;
00690 extern const int32_t LINE_CAP_ROUND;
00691 extern const int32_t LINE_CAP_SQUARE;
00692
00693 extern const int32_t LINE_JOIN_MITER;
00694 extern const int32_t LINE_JOIN_ROUND;
00695 extern const int32_t LINE_JOIN_BEVEL;
00696
00697 extern const int32_t HINT_METRICS_DEFAULT;
00698 extern const int32_t HINT_METRICS_OFF;
00699 extern const int32_t HINT_METRICS_ON;
00700 extern const int32_t HINT_STYLE_DEFAULT;
00701 extern const int32_t HINT_STYLE_NONE;
00702 extern const int32_t HINT_STYLE_SLIGHT;
00703 extern const int32_t HINT_STYLE_MEDIUM;
00704 extern const int32_t HINT_STYLE_FULL;
00705
00706 extern const int32_t ANTIALIAS_DEFAULT;
00707 extern const int32_t ANTIALIAS_NONE;
00708 extern const int32_t ANTIALIAS_GRAY;
00709 extern const int32_t ANTIALIAS_SUBPIXEL;
00710
00711 extern const int32_t SUBPIXEL_ORDER_DEFAULT;
00712 extern const int32_t SUBPIXEL_ORDER_RGB;
00713 extern const int32_t SUBPIXEL_ORDER_BGR;
00714 extern const int32_t SUBPIXEL_ORDER_VRGB;
00715 extern const int32_t SUBPIXEL_ORDER_VBGR;
00716
00717 extern const int32_t STATUS_SUCCESS;
00718 extern const int32_t STATUS_NO_AVAILABLE_MEMORY;
00719 extern const int32_t STATUS_INVALID_RESTORE;
00720 extern const int32_t STATUS_INVALID_POP_GROUP;
00721 extern const int32_t STATUS_NO_CURRENT_POINT;
00722 extern const int32_t STATUS_INVALID_MATRIX;
00723 extern const int32_t STATUS_INVALID_STATUS;
00724 extern const int32_t STATUS_NULL_POINTER;
00725 extern const int32_t STATUS_INVALID_STRING;
00726 extern const int32_t STATUS_INVALID_PATH_DATA;
00727 extern const int32_t STATUS_READ_ERROR;
00728 extern const int32_t STATUS_WRITE_ERROR;
00729 extern const int32_t STATUS_SURFACE_FINISHED;
00730 extern const int32_t STATUS_SURFACE_TYPE_MISMATCH;
00731 extern const int32_t STATUS_PATTERN_TYPE_MISMATCH;
00732 extern const int32_t STATUS_INVALID_CONTENT;
00733 extern const int32_t STATUS_INVALID_FORMAT;
00734 extern const int32_t STATUS_INVALID_VISUAL;
00735 extern const int32_t STATUS_FILE_NOT_FOUND;
00736 extern const int32_t STATUS_INVALID_DASH;
00737 extern const int32_t STATUS_INVALID_DSC_COMMENT;
00738 extern const int32_t STATUS_INVALID_INDEX;
00739 extern const int32_t STATUS_CLIP_NOT_REPRESENTABLE;
00740
00741 } }
00742
00743 namespace cinder {
00744
00745 class SurfaceConstraintsCairo : public cinder::SurfaceConstraints {
00746 public:
00747 virtual SurfaceChannelOrder getChannelOrder( bool alpha ) const;
00748 virtual int32_t getRowBytes( int requestedWidth, const SurfaceChannelOrder &sco, int elementSize ) const;
00749 };
00750
00751 }