Cairo__Surface.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 14 Jun 2012 09:18:25 +0000
changeset 12 e5f0c18af8a9
parent 11 fdc697f4f190
child 15 c1db2c8aa2ed
permissions -rw-r--r--
- Cairo::Format added: #version_SVN - Cairo::LineCap added: #version_SVN - Cairo::Extend added: #version_SVN - Cairo::RefCountedStructure added: #dllPath #version_SVN - Cairo::Operator added: #version_SVN - Cairo::PathData added: #dllPath #version_SVN - Cairo::SubpixelOrder added: #version_SVN - Cairo::ScaledFont added: #dllPath #version_SVN - Cairo::PathDataType added: #version_SVN - Cairo::Surface added: #dllPath #version_SVN - Cairo::GLXWorkstation added: #version_SVN - Cairo::LineJoin added: #version_SVN - Cairo::FillRule added: #version_SVN - Cairo::Path added: #dllPath #version_SVN - Cairo::RectangleList added: #dllPath #version_SVN - Cairo::FontSlant added: #version_SVN - Cairo::SurfaceType added: #version_SVN - Cairo::PatternType added: #version_SVN - stx_goodies_libcairo added: #extensionsVersion_SVN #svnRepositoryUrlString #svnRevisionNr #version_SVN - Cairo::Matrix added: #dllPath #version_SVN - Cairo::Filter added: #version_SVN - Cairo::Glyph added: #dllPath #version_SVN - Cairo::FontOptions added: #dllPath #version_SVN - Cairo::GraphicsContext added: #dllPath #version_SVN - Cairo::FontType added: #version_SVN - Cairo::Antialias added: #version_SVN - Cairo::SvgVersion added: #version_SVN - Cairo::HintMetrics added: #version_SVN - Cairo::FontFace added: #dllPath #version_SVN - Cairo::Rectangle added: #dllPath #version_SVN - Cairo::Pattern added: #dllPath #version_SVN - Cairo::FontExtents added: #dllPath #version_SVN - Cairo::FontWeight added: #version_SVN - Cairo::TextExtents added: #dllPath #version_SVN - Cairo::Content added: #version_SVN - Cairo::HintStyle added: #version_SVN - Cairo::UserDataKey added: #dllPath #version_SVN - Cairo::Status added: #version_SVN - extensions ...

"{ 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'!

dllPath

    OperatingSystem isMSWINDOWSlike ifTrue:[
        ^ #( 'C:\Windows' 'C:\Windows\System32' "Wild guess, should not harm" )
    ].

    OperatingSystem isUNIXlike ifTrue:[
        OperatingSystem getSystemType == #linux ifTrue:[
            | path |

            path := #( '/lib' '/usr/lib' '/usr/local/lib' ).
            (OperatingSystem getSystemInfo at:#machine) = 'x86_64' ifTrue:[
                "If the machine is 64bit, prepend standard path for 32bit libs.
                 Leave standard paths at the end, as the system might be completely 
                 32bit but running on 64bit-capable CPU.

                CAVEAT: This is bit dangerous, as on 64bit OS, if ia32 libs are
                not installed byt 64bit sqlite libs are, then 64bit libs are found
                and when a function is called, segfault will occur!!

                Q: Is there a way how to figure out if the OS itself is 32bit,
                regardles on CPU?"
                path := #( '/lib32' '/usr/lib32' '/usr/local/lib32' ) , path.
            ].
            ^path

        ].
    ].

    self error:'Unsupported operating system'

    "
        SqliteLibrary dllPath
    "

    "Created: / 31-08-2011 / 18:02:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

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$'
!

version_SVN
    ^ '$Id::                                                                                                                        $'
! !