/** GSFusedSilica C Interface to graphics drawing library Copyright (C) 2002 Free Software Foundation, Inc. Author: Adam Fedor Date: Sep 2002 This file is part of the GNUStep This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; see the file COPYING.LIB. If not, see or write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _GSFusedSilica_h_INCLUDE #define _GSFusedSilica_h_INCLUDE #include /* ------------------------------------------------------------------------ * Data Types * ------------------------------------------------------------------------*/ typedef struct CGAffineTransform { float a; float b; float c; float d; float tx; float ty; } CGAffineTransform; typedef struct CGPoint { float x; float y; } CGPoint; typedef struct CGSize { float width; float height; } CGSize; typedef struct CGRect { CGPoint origin; CGSize size; } CGRect; typedef void * CGColorSpaceRef; typedef void * CGContextRef; typedef void * CGFontRef; typedef /*UInt16*/ unsigned int CGGlyph; typedef void * CGImageRef; typedef void * CGPatternRef; typedef void * CGPDFDocumentRef; typedef void * CGDataConsumerRef; /* ------------------------------------------------------------------------ * Constants * ---------------------------------------------------------------------- */ static const CGAffineTransform CGAffineTransformIdentity = {1,0,0,1,0,0}; typedef enum CGColorRenderingIntent { kCGRenderingIntentDefault = 0, kCGRenderingIntentAbsoluteColorimetric = 1, kCGRenderingIntentRelativeColorimetric = 2, kCGRenderingIntentPerceptual = 3, kCGRenderingIntentSaturation = 4 } CGColorRenderingIntent; typedef enum CGImageAlphaInfo { kCGImageAlphaNone = 0, kCGImageAlphaPremultipliedLast = 1, kCGImageAlphaPremultipliedFirst = 2, kCGImageAlphaLast = 3, kCGImageAlphaFirst = 4, kCGImageAlphaNoneSkipLast = 5, kCGImageAlphaNoneSkipFirst = 6 } CGImageAlphaInfo; typedef enum CGInterpolationQuality { kCGInterpolationDefault = 0, kCGInterpolationNone = 1, kCGInterpolationLow = 2, kCGInterpolationHigh = 3 } CGInterpolationQuality; typedef enum CGLineCap { kCGLineCapButt = 0, kCGLineCapRound = 1, kCGLineCapSquare = 2 } CGLineCap; typedef enum CGLineJoin { kCGLineJoinMiter = 0, kCGLineJoinRound = 1, kCGLineJoinBevel = 2 } CGLineJoin; typedef enum CGPathDrawingMode { kCGPathFill = 0, kCGPathEOFill = 1, kCGPathStroke = 2, kCGPathFillStroke = 3, kCGPathEOFillStroke = 4 } CGPathDrawingMode; static const CGPoint CGPointZero = {0,0}; typedef enum CGRectEdge { CGRectMinXEdge = 0, CGRectMinYEdge = 1, CGRectMaxXEdge = 2, CGRectMaxYEdge = 3 } CGRectEdge; static const CGRect CGRectNull = {{-1,-1},{0,0}}; /*FIXME*/ static const CGSize CGSizeZero = {0,0}; static const CGRect CGRectZero = {{0,0},{0,0}}; typedef enum CGTextDrawingMode { kCGTextFill = 0, kCGTextStroke = 1, kCGTextFillStroke = 2, kCGTextInvisible = 3, kCGTextFillClip = 4, kCGTextStrokeClip = 5, kCGTextFillStrokeClip = 6, kCGTextClip = 7 } CGTextDrawingMode; typedef enum CGTextEncoding { kCGEncodingFontSpecific = 0, kCGEncodingMacRoman = 1 } CGTextEncoding; /* ------------------------------------------------------------------------ * Callbacks * ---------------------------------------------------------------------- */ typedef void(*CGGetBytePointerProcPtr)(void *info); typedef size_t(*CGGetBytesDirectProcPtr)( void *info, void *buffer, size_t offset, size_t count ); typedef size_t(*CGGetBytesProcPtr)(void *info, void *buffer, size_t count); typedef size_t(*CGPutBytesProcPtr)( void *info, const void *buffer, size_t count ); typedef void(*CGSkipBytesProcPtr)(void *info, size_t count); typedef void(*CGReleaseByteProcPtr)(void *info, const void *pointer); typedef void(*CGReleaseConsumerProcPtr)(void *info); typedef void(*CGReleaseDataProcPtr)( void *info, const void *data, size_t size ); typedef void(*CGReleaseProviderProcPtr)(void *info); typedef void(*CGRewindProcPtr)(void *info); typedef struct CGDataConsumerCallbacks { CGPutBytesProcPtr putBytes; CGReleaseConsumerProcPtr releaseConsumer; } CGDataConsumerCallbacks; typedef void * CGDataProviderRef; typedef struct CGDataProviderCallbacks { CGGetBytesProcPtr getBytes; CGSkipBytesProcPtr skipBytes; CGRewindProcPtr rewind; CGReleaseProviderProcPtr releaseProvider; } CGDataProviderCallbacks; typedef struct CGDataProviderDirectAccessCallbacks { CGGetBytePointerProcPtr getBytePointer; CGReleaseByteProcPtr releaseBytePointer; CGGetBytesDirectProcPtr getBytes; CGReleaseProviderProcPtr releaseProvider; } CGDataProviderDirectAccessCallbacks; /* ------------------------------------------------------------------------ * Functions * ---------------------------------------------------------------------- */ /* Managing Graphics Contexts */ CGContextRef CGBitmapContextCreate( void *data, size_t width, size_t height, size_t bitsPerComponent, size_t bytesPerRow, CGColorSpaceRef colorspace, CGImageAlphaInfo alphaInfo ); /* CGContextRef CGPDFContextCreate( CGDataConsumerRef consumer, const CGRect *mediaBox, CFDictionaryRef auxiliaryInfo ); CGContextRef CGPDFContextCreateWithURL( CFURLRef url, const CGRect *mediaBox, CFDictionaryRef auxiliaryInfo ); */ CGContextRef CGContextRetain(CGContextRef ctx); void CGContextRelease(CGContextRef ctx); void CGContextFlush(CGContextRef ctx); void CGContextSynchronize(CGContextRef ctx); /* Defining Pages */ void CGContextBeginPage(CGContextRef ctx, const CGRect *mediaBox); void CGContextEndPage(CGContextRef ctx); /* Transforming the Coordinate Space of the Page */ void CGContextScaleCTM(CGContextRef ctx, float sx, float sy); void CGContextTranslateCTM(CGContextRef ctx, float tx, float ty); void CGContextRotateCTM(CGContextRef ctx, float angle); void CGContextConcatCTM(CGContextRef ctx, CGAffineTransform transform); CGAffineTransform CGContextGetCTM(CGContextRef ctx); /* Saving and Restoring the Graphics State */ void CGContextSaveGState(CGContextRef ctx); void CGContextRestoreGState(CGContextRef ctx); /* Setting Graphics State Attributes */ void CGContextSetShouldAntialias(CGContextRef ctx, int shouldAntialias); void CGContextSetLineWidth(CGContextRef ctx, float width); void CGContextSetLineJoin(CGContextRef ctx, CGLineJoin join); void CGContextSetMiterLimit(CGContextRef ctx, float limit); void CGContextSetLineCap(CGContextRef ctx, CGLineCap cap); void CGContextSetLineDash(CGContextRef ctx, float phase, const float *lengths, size_t count); void CGContextSetFlatness(CGContextRef ctx, float flatness); /* Constructing Paths */ void CGContextBeginPath(CGContextRef ctx); void CGContextMoveToPoint(CGContextRef ctx, float x, float y); void CGContextAddLineToPoint(CGContextRef ctx, float x, float y); void CGContextAddLines(CGContextRef ctx, const CGPoint *points, size_t count); void CGContextAddCurveToPoint( CGContextRef ctx, float cp1x, float cp1y, float cp2x, float cp2y, float x, float y ); void CGContextAddQuadCurveToPoint( CGContextRef ctx, float cpx, float cpy, float x, float y ); void CGContextAddRect(CGContextRef ctx, CGRect rect); void CGContextAddRects(CGContextRef ctx, const CGRect *rects, size_t count); void CGContextAddArc( CGContextRef ctx, float x, float y, float radius, float startAngle, float endAngle, int clockwise ); void CGContextAddArcToPoint( CGContextRef ctx, float x1, float y1, float x2, float y2, float radius ); void CGContextClosePath(CGContextRef ctx); /* Painting Paths */ void CGContextDrawPath(CGContextRef ctx, CGPathDrawingMode mode); void CGContextStrokePath(CGContextRef ctx); void CGContextFillPath(CGContextRef ctx); void CGContextEOFillPath(CGContextRef ctx); void CGContextStrokeRect(CGContextRef ctx, CGRect rect); void CGContextStrokeRectWithWidth(CGContextRef ctx, CGRect rect, float width); void CGContextFillRect(CGContextRef ctx, CGRect rect); void CGContextFillRects(CGContextRef ctx, const CGRect *rects, size_t count); void CGContextClearRect(CGContextRef c, CGRect rect); /* Obtaining Path Information */ int CGContextIsPathEmpty(CGContextRef ctx); CGPoint CGContextGetPathCurrentPoint(CGContextRef ctx); CGRect CGContextGetPathBoundingBox(CGContextRef ctx); /* Clipping Paths */ void CGContextClip(CGContextRef ctx); void CGContextEOClip(CGContextRef ctx); void CGContextClipToRect(CGContextRef ctx, CGRect rect); void CGContextClipToRects(CGContextRef ctx, const CGRect *rects, size_t count); /* Setting the Color Space */ CGColorSpaceRef CGColorSpaceCreateDeviceGray(void); CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void); CGColorSpaceRef CGColorSpaceCreateDeviceCMYK(void); CGColorSpaceRef CGColorSpaceCreateCalibratedGray( const float *whitePoint, const float *blackPoint, float gamma ); CGColorSpaceRef CGColorSpaceCreateCalibratedRGB( const float *whitePoint, const float *blackPoint, const float *gamma, const float *matrix ); CGColorSpaceRef CGColorSpaceCreateLab( const float *whitePoint, const float *blackPoint, const float *range ); CGColorSpaceRef CGColorSpaceCreateICCBased( size_t nComponents, const float *range, CGDataProviderRef profile, CGColorSpaceRef alternateSpace ); CGColorSpaceRef CGColorSpaceCreateIndexed( CGColorSpaceRef baseSpace, size_t lastIndex, const /*UInt8*/ unsigned short int *colorTable ); size_t CGColorSpaceGetNumberOfComponents(CGColorSpaceRef cs); CGColorSpaceRef CGColorSpaceRetain(CGColorSpaceRef cs); void CGColorSpaceRelease(CGColorSpaceRef cs); void CGContextSetFillColorSpace(CGContextRef ctx, CGColorSpaceRef colorspace); void CGContextSetStrokeColorSpace(CGContextRef ctx, CGColorSpaceRef colorspace); void CGContextSetRenderingIntent(CGContextRef c, CGColorRenderingIntent intent); /* Setting Colors */ void CGContextSetFillColor(CGContextRef ctx, const float *value); void CGContextSetStrokeColor(CGContextRef ctx, const float *value); void CGContextSetGrayFillColor(CGContextRef ctx, float gray, float alpha); void CGContextSetGrayStrokeColor(CGContextRef ctx, float gray, float alpha); void CGContextSetRGBFillColor( CGContextRef ctx, float r, float g, float b, float alpha ); void CGContextSetRGBStrokeColor( CGContextRef ctx, float r, float g, float b, float alpha ); void CGContextSetCMYKFillColor( CGContextRef ctx, float c, float m, float y, float k, float alpha ); void CGContextSetCMYKStrokeColor( CGContextRef ctx, float c, float m, float y, float k, float alpha ); void CGContextSetAlpha(CGContextRef ctx, float alpha); /* Drawing Images */ CGImageRef CGImageCreate( size_t width, size_t height, size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow, CGColorSpaceRef colorspace, CGImageAlphaInfo alphaInfo, CGDataProviderRef provider, const float *decode, int shouldInterpolate, CGColorRenderingIntent intent ); CGImageRef CGImageMaskCreate( size_t width, size_t height, size_t bitsPerComponent, size_t bitsPerPixel, size_t bytesPerRow, CGDataProviderRef provider, const float *decode, int shouldInterpolate ); CGImageRef CGImageRetain(CGImageRef image); void CGImageRelease(CGImageRef image); int CGImageIsMask(CGImageRef image); size_t CGImageGetWidth(CGImageRef image); size_t CGImageGetHeight(CGImageRef image); size_t CGImageGetBitsPerComponent(CGImageRef image); size_t CGImageGetBitsPerPixel(CGImageRef image); size_t CGImageGetBytesPerRow(CGImageRef image); CGColorSpaceRef CGImageGetColorSpace(CGImageRef image); CGImageAlphaInfo CGImageGetAlphaInfo(CGImageRef image); CGDataProviderRef CGImageGetDataProvider(CGImageRef image); const float *CGImageGetDecode(CGImageRef image); int CGImageGetShouldInterpolate(CGImageRef image); CGColorRenderingIntent CGImageGetRenderingIntent(CGImageRef image); void CGContextDrawImage(CGContextRef ctx, CGRect rect, CGImageRef image); /* Drawing PDF Documents */ CGPDFDocumentRef CGPDFDocumentCreateWithProvider(CGDataProviderRef provider); /* CGPDFDocumentRef CGPDFDocumentCreateWithURL(CFURLRef url); */ CGPDFDocumentRef CGPDFDocumentRetain(CGPDFDocumentRef document); void CGPDFDocumentRelease(CGPDFDocumentRef document); int CGPDFDocumentGetNumberOfPages(CGPDFDocumentRef document); CGRect CGPDFDocumentGetMediaBox(CGPDFDocumentRef document, int page); CGRect CGPDFDocumentGetCropBox(CGPDFDocumentRef document, int page); CGRect CGPDFDocumentGetBleedBox(CGPDFDocumentRef document, int page); CGRect CGPDFDocumentGetTrimBox(CGPDFDocumentRef document, int page); CGRect CGPDFDocumentGetArtBox(CGPDFDocumentRef document, int page); int CGPDFDocumentGetRotationAngle(CGPDFDocumentRef document, int page); void CGContextDrawPDFDocument( CGContextRef ctx, CGRect rect, CGPDFDocumentRef document, int page ); /* Drawing Text */ CGFontRef CGFontCreateWithPlatformFont(void *platformFontReference); void CGContextSelectFont( CGContextRef ctx, const char *name, float size, CGTextEncoding textEncoding ); void CGContextSetFont(CGContextRef ctx, CGFontRef font); void CGContextSetFontSize(CGContextRef ctx, float size); CGFontRef CGFontRetain(CGFontRef font); void CGFontRelease(CGFontRef font); void CGContextSetCharacterSpacing(CGContextRef ctx, float spacing); void CGContextSetTextDrawingMode(CGContextRef ctx, CGTextDrawingMode mode); void CGContextSetTextPosition(CGContextRef ctx, float x, float y); CGPoint CGContextGetTextPosition(CGContextRef ctx); void CGContextSetTextMatrix(CGContextRef ctx, CGAffineTransform transform); CGAffineTransform CGContextGetTextMatrix(CGContextRef ctx); void CGContextShowText(CGContextRef ctx, const char *cstring, size_t length); void CGContextShowGlyphs(CGContextRef ctx, const CGGlyph *g, size_t count); void CGContextShowTextAtPoint( CGContextRef ctx, float x, float y, const char *cstring, size_t length ); void CGContextShowGlyphsAtPoint( CGContextRef ctx, float x, float y, const CGGlyph *g, size_t count ); /* Passing Data */ CGDataConsumerRef CGDataConsumerCreate( void *info, const CGDataConsumerCallbacks *callbacks ); /* CGDataConsumerRef CGDataConsumerCreateWithURL(CFURLRef url); */ CGDataConsumerRef CGDataConsumerRetain(CGDataConsumerRef consumer); void CGDataConsumerRelease(CGDataConsumerRef consumer); CGDataProviderRef CGDataProviderCreate( void *info, const CGDataProviderCallbacks *callbacks ); CGDataProviderRef CGDataProviderCreateDirectAccess( void *info, size_t size, const CGDataProviderDirectAccessCallbacks *callbacks ); CGDataProviderRef CGDataProviderCreateWithData( void *info, const void *data, size_t size, int releaseData ); /* CGDataProviderRef CGDataProviderCreateWithURL(CFURLRef url); */ CGDataProviderRef CGDataProviderRetain(CGDataProviderRef provider); void CGDataProviderRelease(CGDataProviderRef provider); /* Modifying Geometric Forms */ CGPoint CGPointMake(float x, float y); CGSize CGSizeMake(float width, float height); CGRect CGRectMake( float x, float y, float width, float height ); CGRect CGRectStandardize(CGRect rect); CGRect CGRectInset(CGRect rect, float dx, float dy); CGRect CGRectOffset(CGRect rect, float dx, float dy); CGRect CGRectIntegral(CGRect rect); CGRect CGRectUnion(CGRect r1, CGRect r2); CGRect CGRectIntersection(CGRect r1, CGRect r2); void CGRectDivide( CGRect rect, CGRect *slice, CGRect *remainder, float amount, CGRectEdge edge ); /* Accessing Geometric Attributes */ float CGRectGetMinX(CGRect rect); float CGRectGetMidX(CGRect rect); float CGRectGetMaxX(CGRect rect); float CGRectGetMinY(CGRect rect); float CGRectGetMidY(CGRect rect); float CGRectGetMaxY(CGRect rect); float CGRectGetWidth(CGRect rect); float CGRectGetHeight(CGRect rect); int CGRectIsNull(CGRect rect); int CGRectIsEmpty(CGRect rect); int CGRectIntersectsRect(CGRect rect1, CGRect rect2); int CGRectContainsRect(CGRect rect1, CGRect rect2); int CGRectContainsPoint(CGRect rect, CGPoint point); int CGRectEqualToRect(CGRect rect1, CGRect rect2); int CGSizeEqualToSize(CGSize size1, CGSize size2); int CGPointEqualToPoint(CGPoint point1, CGPoint point2); /* Affine Transform Utility Functions */ CGAffineTransform CGAffineTransformMake( float a, float b, float c, float d, float tx, float ty ); CGAffineTransform CGAffineTransformMakeTranslation(float tx, float ty); CGAffineTransform CGAffineTransformMakeScale(float sx, float sy); CGAffineTransform CGAffineTransformMakeRotation(float angle); CGAffineTransform CGAffineTransformTranslate( CGAffineTransform t, float tx, float ty ); CGAffineTransform CGAffineTransformScale( CGAffineTransform t, float sx, float sy ); CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, float angle); CGAffineTransform CGAffineTransformInvert(CGAffineTransform t); CGAffineTransform CGAffineTransformConcat( CGAffineTransform t1, CGAffineTransform t2 ); CGPoint CGPointApplyAffineTransform(CGPoint point, CGAffineTransform t); CGSize CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t); #endif