Cairo__Surface.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 10 Jul 2008 21:10:31 +0000
changeset 3 f4f599f2a1b5
parent 2 c2f163833877
child 5 65635e9ef3e8
permissions -rw-r--r--
Added FT font primitives

"{ Package: 'stx:goodies/libcairo' }"

"{ NameSpace: Cairo }"

ExternalStructure subclass:#Surface
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Cairo - C Types'
!

!Surface class methodsFor:'instance creation'!

forPdfFile: aStringOrFilename width: w height: h

    ^self
        primPdfSurfaceCreate: aStringOrFilename asFilename asString
        widthInPoints: w asDouble 
        heightInPoints: h asDouble

    "Created: / 10-07-2008 / 09:35:34 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

forView: view

    ^view device cairoSurfaceFor: view

    "Created: / 10-07-2008 / 10:15:04 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

forXlib: dpy drawable: drawable visual: visual width: width height: height 

    ^self primXlibSurfaceCreate: dpy drawable: drawable visual: visual width: width height: height

    "Created: / 10-07-2008 / 11:06:22 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!Surface class methodsFor:'accessing'!

libraryName

	OperatingSystem isUNIXlike ifTrue:[^'libcairo.so'].

	OperatingSystem isMSWINDOWSlike ifTrue:[^'cairo.dll'].

	self error:'Library name for host OS is not known'

    "Modified: / 10-07-2008 / 23:05:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!Surface class methodsFor:'primitives'!

primCopyPage: surface 

	<cdecl: void "cairo_surface_copy_page" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primCreateSimilar: other content: content width: width height: height 

	<cdecl: Cairo::Surface "cairo_surface_create_similar" ( Cairo::Surface int32 int32 int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primDestroy: surface 

	<cdecl: void "cairo_surface_destroy" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primFinish: surface 

	<cdecl: void "cairo_surface_finish" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primFlush: surface 

	<cdecl: void "cairo_surface_flush" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetContent: surface 

	<cdecl: int32 "cairo_surface_get_content" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetDeviceOffset: surface xOffset: x_offset yOffset: y_offset 

	<cdecl: void "cairo_surface_get_device_offset" ( Cairo::Surface pointer pointer ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetFontOptions: surface options: options 

	<cdecl: void "cairo_surface_get_font_options" ( Cairo::Surface Cairo::FontOptions ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetReferenceCount: surface 

	<cdecl: uint32 "cairo_surface_get_reference_count" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetType: surface 

	<cdecl: int32 "cairo_surface_get_type" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetUserData: surface key: key 

	<cdecl: pointer "cairo_surface_get_user_data" ( Cairo::Surface Cairo::UserDataKey ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceCreate: format width: width height: height 

	<cdecl: Cairo::Surface "cairo_image_surface_create" ( int32 int32 int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceCreateForData: data format: format width: width height: height stride: stride 

	<cdecl: Cairo::Surface "cairo_image_surface_create_for_data" ( pointer int32 int32 int32 int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceCreateFromPng: filename 

	<cdecl: Cairo::Surface "cairo_image_surface_create_from_png" ( charPointer ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceCreateFromPngStream: read_func closure: closure 

	<cdecl: Cairo::Surface "cairo_image_surface_create_from_png_stream" ( pointer pointer ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetData: surface 

	<cdecl: pointer "cairo_image_surface_get_data" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetFormat: surface 

	<cdecl: int32 "cairo_image_surface_get_format" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetHeight: surface 

	<cdecl: int32 "cairo_image_surface_get_height" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetStride: surface 

	<cdecl: int32 "cairo_image_surface_get_stride" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetWidth: surface 

	<cdecl: int32 "cairo_image_surface_get_width" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primMarkDirty: surface 

	<cdecl: void "cairo_surface_mark_dirty" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primMarkDirtyRectangle: surface x: x y: y width: width height: height 

	<cdecl: void "cairo_surface_mark_dirty_rectangle" ( Cairo::Surface int32 int32 int32 int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primPdfSurfaceCreate: filename widthInPoints: width_in_points heightInPoints: height_in_points 

	<cdecl: Cairo::Surface "cairo_pdf_surface_create" ( charPointer double double ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primPdfSurfaceCreateForStream: write_func closure: closure widthInPoints: width_in_points heightInPoints: height_in_points 

	<cdecl: Cairo::Surface "cairo_pdf_surface_create_for_stream" ( pointer pointer double double ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primPdfSurfaceSetSize: surface widthInPoints: width_in_points heightInPoints: height_in_points 

	<cdecl: void "cairo_pdf_surface_set_size" ( Cairo::Surface double double ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primReference: surface 

	<cdecl: Cairo::Surface "cairo_surface_reference" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primSetDeviceOffset: surface xOffset: x_offset yOffset: y_offset 

	<cdecl: void "cairo_surface_set_device_offset" ( Cairo::Surface double double ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primSetFallbackResolution: surface xPixelsPerInch: x_pixels_per_inch yPixelsPerInch: y_pixels_per_inch 

	<cdecl: void "cairo_surface_set_fallback_resolution" ( Cairo::Surface double double ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primSetUserData: surface key: key userData: user_data destroy: destroy 

	<cdecl: int32 "cairo_surface_set_user_data" ( Cairo::Surface Cairo::UserDataKey pointer pointer ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primShowPage: surface 

	<cdecl: void "cairo_surface_show_page" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primStatus: surface 

	<cdecl: int32 "cairo_surface_status" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primSvgSurfaceCreate: filename widthInPoints: width_in_points heightInPoints: height_in_points 

	<cdecl: Cairo::Surface "cairo_svg_surface_create" ( charPointer double double ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primSvgSurfaceCreateForStream: write_func closure: closure widthInPoints: width_in_points heightInPoints: height_in_points 

	<cdecl: Cairo::Surface "cairo_svg_surface_create_for_stream" ( pointer pointer double double ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primSvgSurfaceRestrictToVersion: surface version: version 

	<cdecl: void "cairo_svg_surface_restrict_to_version" ( Cairo::Surface int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primWriteToPng: surface filename: filename 

	<cdecl: int32 "cairo_surface_write_to_png" ( Cairo::Surface charPointer ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primWriteToPngStream: surface writeFunc: write_func closure: closure 

	<cdecl: int32 "cairo_surface_write_to_png_stream" ( Cairo::Surface pointer pointer ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceCreate: dpy drawable: drawable visual: visual width: width height: height 

	<cdecl: Cairo::Surface "cairo_xlib_surface_create" ( pointer int32 pointer int32 int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceCreateForBitmap: dpy bitmap: bitmap screen: screen width: width height: height 

	<cdecl: Cairo::Surface "cairo_xlib_surface_create_for_bitmap" ( pointer int32 pointer int32 int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetDepth: surface 

	<cdecl: int32 "cairo_xlib_surface_get_depth" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetDisplay: surface 

	<cdecl: pointer "cairo_xlib_surface_get_display" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetDrawable: surface 

	<cdecl: int32 "cairo_xlib_surface_get_drawable" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetHeight: surface 

	<cdecl: int32 "cairo_xlib_surface_get_height" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetScreen: surface 

	<cdecl: pointer "cairo_xlib_surface_get_screen" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetVisual: surface 

	<cdecl: pointer "cairo_xlib_surface_get_visual" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetWidth: surface 

	<cdecl: int32 "cairo_xlib_surface_get_width" ( Cairo::Surface ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceSetDrawable: surface drawable: drawable width: width height: height 

	<cdecl: void "cairo_xlib_surface_set_drawable" ( Cairo::Surface int32 int32 int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceSetSize: surface width: width height: height 

	<cdecl: void "cairo_xlib_surface_set_size" ( Cairo::Surface int32 int32 ) >
	self primitiveFailed

    "Modified: / 10-07-2008 / 23:05:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!Surface methodsFor:'accessing'!

graphicsContext

    ^GraphicsContext on: self

    "Created: / 10-07-2008 / 09:38:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

referenceCount

    ^self class primGetReferenceCount: self

    "Created: / 10-07-2008 / 10:28:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

type

    ^self class primGetType: self

    "Created: / 10-07-2008 / 10:34:36 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

width: w height: h

    self class primXlibSurfaceSetSize: self width: w height: h

    "Created: / 10-07-2008 / 19:36:39 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!Surface methodsFor:'change & update'!

update: aspect with: param from: sender

    (aspect = #sizeOfView and:[self type = SurfaceType SURFACE_TYPE_XLIB])
        ifTrue:[^self width: sender width height: sender height].

    super update: aspect with: param from: sender

    "Created: / 10-07-2008 / 19:33:39 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!Surface methodsFor:'initialization & release'!

finalize

    Transcript showCR:'Cairo [INFO]: Finalizing surface ' ,self address hexPrintString, ' ref count: ', self referenceCount printString.
    self class 
        primFlush: self;
        primDestroy: self

    "Created: / 10-07-2008 / 09:54:00 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

flush

    ^self class primFlush: self

    "Created: / 10-07-2008 / 10:32:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

reference

    ^self class primReference: self

    "Created: / 10-07-2008 / 10:28:03 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !