Cairo__Surface.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 23 Apr 2009 15:35:17 +0000
changeset 10 dd5fece7c8d2
parent 7 392289f92fab
child 11 fdc697f4f190
permissions -rw-r--r--
Few hacks before presentation at Smalltalk Jihlava 2009

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

"{ NameSpace: Cairo }"

RefCountedStructure subclass:#Surface
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Cairo - Objects'
!


!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.2'].

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

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

    "Modified: / 10-09-2008 / 18:19:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

structSize

	^0

    "Modified: / 10-09-2008 / 18:19:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!Surface class methodsFor:'primitives'!

primCopyPage: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / 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-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primDestroy: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primFinish: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primFlush: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetContent: surface 

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

    "Modified: / 10-09-2008 / 18:19: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-09-2008 / 18:19: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-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetReferenceCount: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primGetType: surface 

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

    "Modified: / 10-09-2008 / 18:19: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-09-2008 / 18:19: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-09-2008 / 18:19: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-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceCreateFromPng: filename 

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

    "Modified: / 10-09-2008 / 18:19: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-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetData: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetFormat: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetHeight: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetStride: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primImageSurfaceGetWidth: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primMarkDirty: surface 

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

    "Modified: / 10-09-2008 / 18:19: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-09-2008 / 18:19: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-09-2008 / 18:19: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-09-2008 / 18:19:54 / 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-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primReference: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / 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-09-2008 / 18:19:55 / 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-09-2008 / 18:19: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-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primShowPage: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primStatus: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / 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-09-2008 / 18:19: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-09-2008 / 18:19: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-09-2008 / 18:19: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-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetDepth: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetDisplay: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetDrawable: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetGc: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetHeight: surface 

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

    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetScreen: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetVisual: surface 

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

    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

primXlibSurfaceGetWidth: surface 

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

    "Modified: / 10-09-2008 / 18:19: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-09-2008 / 18:19:54 / 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-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!Surface methodsFor:'accessing'!

gcId

    self
        assert: (self type == SurfaceType SURFACE_TYPE_XLIB)
        message: 'Not a xlib surface!!'.

    ^self class primXlibSurfaceGetGc: self

    "Created: / 09-09-2008 / 22:19:44 / 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'!

flush

    ^self class primFlush: self

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

!Surface class methodsFor:'documentation'!

version
    ^'$Id$'
! !