CairoGraphicsContext.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 25 Mar 2016 22:05:01 +0000
changeset 72 3eabcca278cd
parent 70 4f58f5ed77b3
child 74 94902e358396
permissions -rw-r--r--
Cairo context and surface management for CairoGraphicsContext reworked to work under Win32 Win32 surfaces take initial clip/bounds from the passed device context. Therefore when the view changes its size, the drawing is still clipped by the initial size. Xlib surfaces need to be updated when window size changes. This means that under Win32 the surface must be thrown away whenever the size of the view changes. To do so, CairoGraphicsContext registers on #sizeOfView event and updates (Xlib surfaces) or recreate surface and cairo context (Win32 surfaces). Under Win32, use new WinWworkstation>>#dcLockForGC:/#dcUnlockForGC: to make sure the device context is not released behind the back for Cairo's surface. This reworked code depends on new API in stx:libview (see commits in stx:libview 9f5e7ff7c729 and 1b427e95d77c) This should fix issue #2.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/libcairo' }"
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
     3
"{ NameSpace: Smalltalk }"
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
     5
DeviceGraphicsContext subclass:#CairoGraphicsContext
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
     6
	instanceVariableNames:'cr'
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
     7
	classVariableNames:''
46
e624554ca9a3 CairoGraphicsContext: fixed drawing/filling of lines and rectangles to match DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
     8
	poolDictionaries:'Cairo::FontSlant Cairo::FontWeight Cairo::Format Cairo::Status
64
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
     9
		Cairo::Antialias Cairo::Extend'
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    10
	category:'Cairo-Compatibility'
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
!
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    13
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    14
!CairoGraphicsContext class methodsFor:'instance creation'!
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    15
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    16
onDeviceGraphicsContext: dGC
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    17
    | cGC |
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    18
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
    19
    cGC := self basicNew.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
    20
    1 to: DeviceGraphicsContext instSize do:[:i |
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
    21
        cGC instVarAt: i put: (dGC instVarAt: i).
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    22
    ].
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    23
    dGC gcId notNil ifTrue:[ 
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
    24
        cGC initGC.
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    25
    ].
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    26
    ^ cGC
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    27
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    28
    "Created: / 15-02-2016 / 21:20:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
    29
    "Modified: / 18-02-2016 / 22:50:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    30
! !
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    31
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    32
!CairoGraphicsContext class methodsFor:'accessing'!
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
12
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    34
dllPath
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    35
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    36
    OperatingSystem isMSWINDOWSlike ifTrue:[
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    37
        ^ #( 'C:\Windows' 'C:\Windows\System32' "Wild guess, should not harm" )
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    38
    ].
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    39
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    40
    OperatingSystem isUNIXlike ifTrue:[
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    41
        OperatingSystem getSystemType == #linux ifTrue:[
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    42
            | path |
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    43
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    44
            path := #( '/lib' '/usr/lib' '/usr/local/lib' ).
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    45
            (OperatingSystem getSystemInfo at:#machine) = 'x86_64' ifTrue:[
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    46
                "If the machine is 64bit, prepend standard path for 32bit libs.
20
18a3e6b5f310 Added const modifier to FFI specs (required by recent STX)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
    47
                 Leave standard paths at the end, as the system might be completely
12
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    48
                 32bit but running on 64bit-capable CPU.
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    49
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    50
                CAVEAT: This is bit dangerous, as on 64bit OS, if ia32 libs are
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    51
                not installed byt 64bit sqlite libs are, then 64bit libs are found
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    52
                and when a function is called, segfault will occur!!
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    53
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    54
                Q: Is there a way how to figure out if the OS itself is 32bit,
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    55
                regardles on CPU?"
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    56
                path := #( '/lib32' '/usr/lib32' '/usr/local/lib32' ) , path.
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    57
            ].
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    58
            ^path
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    59
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    60
        ].
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    61
    ].
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    62
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    63
    self error:'Unsupported operating system'
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    64
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    65
    "
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    66
        SqliteLibrary dllPath
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    67
    "
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    68
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    69
    "Created: / 31-08-2011 / 18:02:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    70
!
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    71
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
libraryName
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
29
6ba06265e543 Bindinge updated to recent Cairo version.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    74
    OperatingSystem isUNIXlike ifTrue:[^'libcairo.so.2'].
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
29
6ba06265e543 Bindinge updated to recent Cairo version.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    76
    OperatingSystem isMSWINDOWSlike ifTrue:[^'cairo.dll'].
12
e5f0c18af8a9 - Cairo::Format
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
    77
29
6ba06265e543 Bindinge updated to recent Cairo version.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    78
    self error:'Library name for host OS is not known'
6
c1f387b40e3a regenerated using newer version of CFace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    79
!
c1f387b40e3a regenerated using newer version of CFace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    80
26
7f07a8c31e6d Fixed flickring of Cairo::ClockView by rendering into an off-screen image.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
    81
sizeof
29
6ba06265e543 Bindinge updated to recent Cairo version.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    82
    "Returns size of undelaying structure in bytes"
6
c1f387b40e3a regenerated using newer version of CFace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    83
29
6ba06265e543 Bindinge updated to recent Cairo version.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    84
    ^0
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
! !
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    87
!CairoGraphicsContext class methodsFor:'examples'!
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    88
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    89
rectangleOnTranscript
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    90
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    91
    "
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    92
        Cairo::GraphicsContext rectangleOnTranscript
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    93
    "
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    94
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    95
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    96
    | gc |
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    97
    gc := Transcript cairo.
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    98
    gc paint: Color black.
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    99
    gc moveToX: 30 y: 50.
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   100
    gc paint: (Color red alpha: 0.5).
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   101
    gc rectangleX: 10 y: 15 width: 150 height: 60.
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   102
    gc fill.
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   103
    gc paint: (Color red alpha: 0.75).
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   104
    gc rectangleX: 10 y: 15 width: 150 height: 60.
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   105
    gc stroke.
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   106
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   107
    "Created: / 23-04-2009 / 17:33:57 / Jan Vrany <vranyj1@fel.cvut.cz>"
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   108
! !
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   109
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   110
!CairoGraphicsContext methodsFor:'accessing'!
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   111
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   112
atX:x y:y
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   113
    "return the pixel at the coordinate given by x/y"
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   114
    cr notNil ifTrue:[ 
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   115
        cr surface flush.
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   116
    ].
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   117
    ^ device getPixelX:x y:y from:drawableId with:gcId
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   118
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   119
    "Created: / 16-03-2016 / 18:27:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   120
!
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   121
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   122
basicFont:aFont
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   123
    (aFont ~~ font) ifTrue:[     
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   124
        super basicFont: aFont.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   125
        font notNil ifTrue:[ 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   126
            font := CairoScaledFont fromFontDescription: font onDevice: device.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   127
            cr notNil ifTrue:[ 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   128
                cr font: font scaledFont.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   129
            ].
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   130
        ].
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   131
    ].
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   132
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   133
    "Created: / 16-02-2016 / 15:37:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
44
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   134
    "Modified: / 23-02-2016 / 14:46:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   135
    "Modified: / 21-02-2016 / 15:38:52 / jv"
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   136
!
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   137
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   138
cairo
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   139
    "Return a Cairo context for drawing onto this GC" 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   140
    | ncr |
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   141
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   142
    ncr := Cairo::GraphicsContext onSurface: super cairoSurface.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   143
    ^ ncr.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   144
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   145
    "Created: / 31-03-2016 / 00:13:07 / jv"
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   146
!
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   147
48
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   148
cairoSurface
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   149
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   150
        self initCR.
48
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   151
    ].
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   152
    cr isNil ifTrue:[ 
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   153
        ^ super cairoSurface
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   154
    ].
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   155
    ^ cr surface
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   156
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   157
    "Created: / 25-02-2016 / 10:46:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   158
!
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   159
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   160
clippingBounds:aRectangleOrNil
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   161
    "set the clipping rectangle for drawing (in logical coordinates);
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   162
     a nil argument turn off clipping (i.e. whole view is drawable)"    
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   163
70
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   164
    super clippingBounds:aRectangleOrNil.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   165
    cr notNil ifTrue:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   166
        aRectangleOrNil isNil ifTrue:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   167
            cr clipReset
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   168
        ] ifFalse:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   169
            cr rectangleX: aRectangleOrNil left
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   170
                        y: aRectangleOrNil top
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   171
                    width: aRectangleOrNil width
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   172
                   height: aRectangleOrNil height.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   173
            cr clip.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   174
        ].
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   175
    ].
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   176
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   177
    "Created: / 15-02-2016 / 21:38:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
70
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   178
    "Modified: / 25-03-2016 / 06:58:26 / jv"
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   179
    "Modified: / 27-03-2016 / 00:05:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   180
!
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   181
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   182
deviceClippingBounds:aRectangleOrNil
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   183
    "set the clipping rectangle for drawing (in device coordinates);
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   184
     a nil argument turns off clipping (i.e. whole view is drawable - incl. margins)"
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   185
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   186
    super deviceClippingBounds: aRectangleOrNil.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   187
    self deviceCoordinatesDo:[
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   188
        cr notNil ifTrue:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   189
            aRectangleOrNil isNil ifTrue:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   190
                cr clipReset
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   191
            ] ifFalse:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   192
                cr rectangleX: aRectangleOrNil left
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   193
                            y: aRectangleOrNil top
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   194
                        width: aRectangleOrNil width
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   195
                       height: aRectangleOrNil height.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   196
                cr clip.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   197
            ].
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   198
        ].
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   199
    ].
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   200
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   201
    "Created: / 27-03-2016 / 00:09:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   202
!
34
97705b5a9411 Use Cairo's toy text API for text rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   203
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   204
function:aFunctionSymbol
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   205
    "set the drawing function"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   206
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   207
    #todo.
48
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   208
    ^ super function:aFunctionSymbol
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   209
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   210
    "Modified: / 27-02-2016 / 15:21:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   211
!
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   212
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   213
lineWidth: w
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   214
    super lineWidth: w. 
44
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   215
    cr notNil ifTrue:[
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   216
        cr lineWidth: (w == 0 ifTrue:[ 1 ] ifFalse:[ w ]).
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   217
    ].
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   218
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   219
    "Created: / 17-06-2012 / 21:55:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
44
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   220
    "Modified: / 23-02-2016 / 11:29:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   221
!
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   222
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   223
mask:aForm
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   224
    "set the drawing mask"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   225
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   226
    super mask: aForm.
64
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   227
    cr notNil ifTrue:[ 
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   228
        self maskSet.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   229
    ].
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   230
64
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   231
    "Modified (format): / 08-03-2016 / 21:22:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   232
!
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   233
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   234
maskOrigin:aPoint
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   235
    "set the origin of the mask-pattern"
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   236
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   237
    super maskOrigin: aPoint.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   238
    gcId notNil ifTrue:[
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   239
        mask notNil ifTrue:[   
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   240
            self maskSet.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   241
        ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   242
    ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   243
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   244
    "Created: / 08-03-2016 / 21:23:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   245
!
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   246
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   247
paint: aColor
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   248
    super paint: aColor.
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   249
    cr notNil ifTrue:[
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   250
        cr source: paint.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   251
    ].
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
    "Created: / 10-07-2008 / 11:18:13 / Jan Vrany <vranyj1@fel.cvut.cz>"
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   254
    "Modified: / 23-04-2009 / 17:31:33 / Jan Vrany <vranyj1@fel.cvut.cz>"
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   255
    "Modified: / 18-02-2016 / 22:56:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
62
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   256
!
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   257
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   258
paint:fgColor on:bgColor
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   259
    "Set the paint and background-paint color.
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   260
     The bg-paint is used in opaque-draw operations"
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   261
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   262
    super paint: fgColor on: bgColor.
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   263
    cr notNil ifTrue:[ 
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   264
        cr source: paint.        
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   265
    ].
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   266
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   267
    "Created: / 05-03-2016 / 16:35:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   268
!
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   269
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   270
width: width height: height
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   271
    device isX11Platform ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   272
        cr surface width: width height: height 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   273
    ] ifFalse:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   274
        self destroyCR.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   275
    ].
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   276
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   277
    "Created: / 02-04-2016 / 15:37:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   278
    "Modified: / 02-04-2016 / 15:55:29 / jv"
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
! !
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   281
!CairoGraphicsContext methodsFor:'accessing-transformation'!
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   282
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   283
transformation:aTransformation 
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   284
    "set the transformation"
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   285
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   286
    super transformation: aTransformation.
44
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   287
    cr notNil ifTrue:[
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   288
        cr matrixReset.
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   289
        transformation notNil ifTrue:[ 
44
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   290
            cr
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   291
                scale: transformation scale;
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   292
                translate: transformation translation.
44
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   293
        ]
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   294
    ]
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   295
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   296
    "Created: / 01-01-2015 / 12:07:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   297
    "Modified: / 16-03-2016 / 22:26:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   298
! !
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   299
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   300
!CairoGraphicsContext methodsFor:'basic drawing'!
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   301
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   302
displayArcX:x y:y width:w height:h from:start angle:angle
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   303
    | angle1 angle2 |
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   304
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   305
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   306
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   307
    ]. 
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   308
    cr save.  
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   309
    [
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   310
        w ~~ h ifTrue:[
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   311
            self notYetImplemented
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   312
        ].
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   313
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   314
        angle1 := (360 - start) .
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   315
        angle2 := (360 - (start + angle)) \\ 360.
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   316
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   317
        (angle2 < angle1) ifTrue:[
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   318
            cr arcNegativeX: (x + (w / 2)) y: (y + (h / 2)) radius: w / 2 from: angle1 * (Float pi / 180) to: angle2 * (Float pi / 180).
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   319
        ] ifFalse:[ 
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   320
            cr arcNegativeX: (x + (w / 2)) y: (y + (h / 2)) radius: w / 2 from: angle2 * (Float pi / 180) to: angle1 * (Float pi / 180).
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   321
        ].
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   322
        cr stroke.
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   323
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   324
        w ~~ h ifTrue:[
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   325
            self notYetImplemented
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   326
        ].
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   327
    ] ensure:[ 
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   328
        cr restore.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   329
    ]
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   330
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   331
    "Modified: / 13-02-2016 / 20:05:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   332
    "Modified: / 21-02-2016 / 15:34:08 / jv"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   333
!
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   334
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   335
displayLineFromX:x0 y:y0 toX:x1 y:y1
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   336
    "draw a line from x0/y0 to x1/y1"
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   337
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   338
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   339
    ].
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   340
    x0 = x1 ifTrue:[
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   341
        cr moveToX: x0 + 0.5 y: y0.
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   342
        cr lineToX: x1 + 0.5 y: y1.
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   343
    ] ifFalse:[ 
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   344
        y0 = y1 ifTrue:[ 
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   345
            cr moveToX: x0 y: y0 + 0.5.
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   346
            cr lineToX: x1 y: y1 + 0.5.
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   347
        ] ifFalse:[ 
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   348
            cr moveToX: x0 y: y0.
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   349
            cr lineToX: x1 y: y1.
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   350
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   351
        ].
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   352
    ].
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   353
    cr stroke.
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   354
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   355
    "Modified: / 21-02-2016 / 15:24:52 / jv"
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   356
    "Modified: / 16-03-2016 / 22:40:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   357
!
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   358
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   359
displayPolygon:points
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   360
    "draw a polygon
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   361
     - this could be recoded to draw using displayLine"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   362
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   363
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   364
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   365
    ]. 
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   366
    cr moveToX: points first x asFloat y: points first y asFloat.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   367
    2 to: points size do:[:i |  
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   368
        cr lineToX: (points at: i) x asFloat  y: (points at: i) y asFloat
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   369
    ].
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   370
    cr closePath.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   371
    cr stroke.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   372
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   373
    "Modified: / 13-02-2016 / 20:04:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   374
    "Modified: / 21-02-2016 / 15:34:19 / jv"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   375
!
17
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   376
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   377
displayRectangleX:x y:y width:w height:h
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   378
    "draw a rectangle
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   379
     - this could be recoded to draw using displayLine"
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   380
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   381
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   382
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   383
    ]. 
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   384
    (w > 0 and:[h > 0]) ifTrue:[
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   385
        cr rectangleX: x + 0.5 y: y + 0.5 width: w - 0.5 height: h - 0.5.
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   386
        cr stroke.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   387
    ]
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   388
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   389
    "Modified: / 21-02-2016 / 15:34:34 / jv"
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   390
    "Modified: / 16-03-2016 / 22:42:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   391
!
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   392
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   393
displayString:string from:index1 to:index2 x:x y:y opaque:opaqueArg maxWidth:maxWidth
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   394
    "draw a substring at the coordinate x/y - draw foreground pixels in
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   395
     paint-color and (if opaque is true), background pixels in bgPaint-color.
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   396
     If the transformation involves scaling, the font's point-size is scaled as appropriate.
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   397
     Assuming that device can only draw in device colors, we have to handle
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   398
     the case where paint and/or bgPaint are dithered colors.
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   399
     maxWidth is the maximum width of the string in pixels or nil if unknown."    
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   400
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   401
    | opaque |
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   402
    "
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   403
     if backgroundPaint color is nil, we assume
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   404
     this is a non-opaque draw
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   405
    "
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   406
    opaque := opaqueArg ? false.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   407
    bgPaint isNil ifTrue:[
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   408
        opaque := false.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   409
    ].
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   410
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   411
    cr isNil ifTrue:[
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   412
        self initGC
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   413
    ]. 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   414
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   415
    (string isString not or:[string isText]) ifTrue:[
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   416
        "
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   417
         hook for non-strings (i.e. attributed text)
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   418
         that 'thing' should know how to display itself ...
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   419
        "
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   420
        string displayOn:self x:x y:y from:index1 to:index2 opaque:opaque.
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   421
        ^ self
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   422
    ].   
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   423
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   424
    font class == CairoScaledFont ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   425
        font displayString:string from:index1 to:index2 x:x y:y cr:cr fg: paint bg: bgPaint opaque:opaque
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   426
    ] ifFalse:[ 
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   427
        Logger warning:'Drawing text using non-Cairo font (%1 )on CairoGraphicsContext' with: font class name.
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   428
        cr surface flush.
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   429
        super displayString:string from:index1 to:index2 x:x y:y opaque:opaqueArg maxWidth:maxWidth.
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   430
        cr surface markDirty.
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   431
    ].
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   432
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   433
    "Created: / 16-02-2016 / 10:51:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   434
    "Modified: / 19-02-2016 / 21:04:49 / jv"
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   435
    "Modified: / 24-02-2016 / 17:14:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   436
! !
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   437
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   438
!CairoGraphicsContext methodsFor:'basic filling'!
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   439
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   440
fillArcX:x y:y width:w height:h from:start angle:angle
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   441
    | angle1 angle2 |
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   442
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   443
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   444
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   445
    ].
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   446
    cr save. 
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   447
    [
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   448
        w ~~ h ifTrue:[
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   449
            self notYetImplemented
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   450
        ].
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   451
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   452
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   453
        angle1 := (360 - start) .
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   454
        angle2 := (360 - (start + angle)) \\ 360.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   455
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   456
        cr moveToX: (x + (w / 2)) y: (y + (h / 2)).
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   457
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   458
        (angle2 < angle1) ifTrue:[
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   459
            cr arcNegativeX: (x + (w / 2)) y: (y + (h / 2)) radius: w / 2 from: angle1 * (Float pi / 180) to: angle2 * (Float pi / 180).
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   460
        ] ifFalse:[ 
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   461
            cr arcNegativeX: (x + (w / 2)) y: (y + (h / 2)) radius: w / 2 from: angle2 * (Float pi / 180) to: angle1 * (Float pi / 180).
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   462
        ].
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   463
        cr closePath.
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   464
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   465
        cr strokeAndPreserve.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   466
        cr fill.
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   467
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   468
        w ~~ h ifTrue:[
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   469
            self notYetImplemented        
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   470
        ].
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   471
    ] ensure:[ 
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   472
        cr restore.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   473
    ]
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   474
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   475
    "Modified: / 13-02-2016 / 20:03:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   476
    "Modified: / 21-02-2016 / 15:34:47 / jv"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   477
!
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   478
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   479
fillPolygon:points
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   480
    "fill a polygon with current paint color"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   481
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   482
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   483
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   484
    ].
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   485
    cr moveToX: points first x asFloat y: points first y asFloat.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   486
    2 to: points size do:[:i |  
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   487
        cr lineToX: (points at: i) x asFloat  y: (points at: i) y asFloat
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   488
    ].
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   489
    cr closePath.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   490
    cr strokeAndPreserve.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   491
    cr fill.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   492
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   493
    "Modified: / 13-02-2016 / 20:01:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   494
    "Modified: / 21-02-2016 / 15:34:52 / jv"
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   495
!
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   496
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   497
fillRectangleX:x y:y width:w height:h
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   498
    "fill a rectangle with current paint color"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   499
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   500
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   501
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   502
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   503
    (w > 0 and:[h > 0]) ifTrue:[
54
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   504
        | savedWidth |
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   505
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   506
        savedWidth := cr lineWidth.
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   507
        cr lineWidth: 1.  
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   508
        cr rectangleX: x y: y width: w height: h. 
46
e624554ca9a3 CairoGraphicsContext: fixed drawing/filling of lines and rectangles to match DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   509
        cr strokeAndPreserve.
54
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   510
        cr lineWidth: savedWidth.  
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   511
        cr fill.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   512
    ].
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   513
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   514
"/    cr save.
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   515
"/    cr rectangleX: x y: y width: w height: h. 
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   516
"/    cr sourceR: 1 G: 0 B: 0.
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   517
"/    cr lineWidth: 1.  
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   518
"/    cr stroke.
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   519
"/    cr restore.
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   520
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   521
    "Modified: / 21-02-2016 / 15:34:56 / jv"
54
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   522
    "Modified: / 28-02-2016 / 16:52:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   523
! !
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   524
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   525
!CairoGraphicsContext methodsFor:'bit blitting'!
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   526
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   527
copyBitsFrom:aByteArray bitsPerPixel:bpp depth:depth padding:pad width:srcW height:srcH x:srcX y:srcY toX:dstX y:dstY
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   528
    "copy bits from a smalltalk byteArray.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   529
     The bits found there are supposed to be in the devices native format (i.e.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   530
     translated to allocated color indices on pseudoColor devices and padded as required.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   531
     The byteOrder is MSB and will be converted as appropriate by the underlying devices
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   532
     method to whatever the device needs."
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   533
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   534
    cr notNil ifTrue:[ 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   535
        cr surface flush
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   536
    ].
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   537
    super copyBitsFrom:aByteArray bitsPerPixel:bpp depth:depth padding:pad width:srcW height:srcH x:srcX y:srcY toX:dstX y:dstY.
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   538
    cr notNil ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   539
        cr surface markDirty
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   540
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   541
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   542
    "Created: / 18-02-2016 / 20:16:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   543
    "Modified: / 24-02-2016 / 18:19:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   544
!
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   545
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   546
copyFrom:aDrawable x:srcX y:srcY toX:dstX y:dstY width:w height:h async:async
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   547
    "copy from aDrawable into the receiver;
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   548
     the source may be the receiver as well - in this case its a scroll.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   549
     All coordinates are in device coordinates.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   550
     If the receiver is a view AND async is true, the call returns immediately
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   551
     - otherwise, it returns when the scroll operation is finished.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   552
     (not all devices care for this).
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   553
     If the receiver is a pixmap, the call always returns immediately."
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   554
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   555
    cr notNil ifTrue:[ 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   556
        cr surface flush
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   557
    ].
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   558
    super copyFrom:aDrawable x:srcX y:srcY toX:dstX y:dstY width:w height:h async:async.
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   559
    cr notNil ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   560
        cr surface markDirty
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   561
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   562
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   563
    "Created: / 18-02-2016 / 20:17:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   564
    "Modified: / 24-02-2016 / 18:19:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   565
!
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   566
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   567
copyPlaneFrom:aDrawable x:srcX y:srcY toX:dstX y:dstY width:w height:h
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   568
    "copy one plane from aDrawable into the receiver. 0's are drawn in
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   569
     background, while 1's are drawn with foreground color.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   570
     The depth of aDrawable must (should) be 1.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   571
     The drawable must have been allocated on the same device.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   572
     All coordinates are in device coordinates."
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   573
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   574
    cr notNil ifTrue:[ 
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   575
        cr surface flush
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   576
    ].
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   577
    super copyPlaneFrom:aDrawable x:srcX y:srcY toX:dstX y:dstY width:w height:h.
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   578
    cr notNil ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   579
        cr surface markDirty
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   580
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   581
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   582
    "Created: / 18-02-2016 / 20:17:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   583
    "Modified (format): / 21-02-2016 / 15:35:11 / jv"
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   584
    "Modified: / 24-02-2016 / 18:19:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   585
! !
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   586
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   587
!CairoGraphicsContext methodsFor:'change & update'!
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   588
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   589
update: aspect with: param from: sender
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   590
    aspect == #sizeOfView  ifTrue:[
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   591
        self updateCR.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   592
        ^ self.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   593
    ].
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   594
    super update: aspect with: param from: sender
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   595
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   596
    "Created: / 29-03-2016 / 23:00:56 / jv"
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   597
!
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   598
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   599
updateCR
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   600
    "Called when view associated with given context
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   601
     changes its size"
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   602
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   603
    cr notNil ifTrue:[        
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   604
        device isWindowsPlatform ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   605
            | surface blocked |
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   606
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   607
            blocked := OperatingSystem blockInterrupts.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   608
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   609
            surface := cr surface.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   610
            cr release.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   611
            surface release.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   612
            device dcUnlockForGC: gcId.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   613
            cr := nil.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   614
            blocked ifFalse:[
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   615
                OperatingSystem unblockInterrupts.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   616
            ]
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   617
        ]].
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   618
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   619
    "Created: / 29-03-2016 / 22:58:49 / jv"
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   620
    "Modified: / 31-03-2016 / 00:39:48 / jv"
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   621
    "Modified: / 02-04-2016 / 15:38:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   622
! !
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   623
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   624
!CairoGraphicsContext methodsFor:'drawing'!
17
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   625
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   626
displayForm:aFormOrImage x:x y:y
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   627
    "draw a form (or image) at x/y; 
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   628
     if the form has depth 1, 1's in the form are
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   629
     drawn in current paint color, 0's are ignored.
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   630
     If the form has depth ~~ 1, the current fg color setting is ignored."
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   631
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   632
    | image width height imageSurface |
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   633
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   634
    image := aFormOrImage asImage.
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   635
    (image mask isNil or:[ image mask depth == 1 ]) ifTrue:[ 
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   636
        cr notNil ifTrue:[ 
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   637
            cr surface flush.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   638
        ].
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   639
        super displayForm:aFormOrImage x:x y:y.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   640
        cr notNil ifTrue:[ 
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   641
            cr surface markDirty.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   642
        ].
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   643
        ^ self.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   644
    ].
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   645
    width := image width.
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   646
    height := image height.
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   647
    imageSurface := Cairo::Surface newImageWithFormat: CAIRO_FORMAT_ARGB32  width: width height: height similarTo: cr surface.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   648
    [
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   649
        image bitsARGB32Into: imageSurface data startingAt: 1 stride: imageSurface stride.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   650
        imageSurface markDirty.
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   651
        cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   652
            self initCR.
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   653
        ].
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   654
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   655
        cr sourceSurface: imageSurface x: x y: y.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   656
        cr paint.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   657
    ] ensure:[ 
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   658
        imageSurface release.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   659
    ].
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   660
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   661
    "Created: / 31-12-2014 / 12:08:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   662
    "Modified: / 27-02-2016 / 19:16:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   663
!
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   664
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   665
displayLineFrom:p0 to:p1
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   666
    "draw a line (with current paint-color); apply transformation if nonNil"
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   667
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   668
    ^ self displayLineFromX: p0 x y: p0 y toX: p1 x y: p1 y
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   669
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   670
    "Created: / 18-02-2016 / 20:27:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   671
!
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   672
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   673
displayLineFromX:xStart y:yStart toX:xEnd y:yEnd brush:aForm
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   674
    "draw a line using a brush.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   675
     Here, a slow fallback is used, drawing into a 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   676
     temporary bitmap first, which is then displayed"
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   677
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   678
    cr notNil ifTrue:[ 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   679
        cr surface flush
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   680
    ].
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   681
    super displayLineFromX:xStart y:yStart toX:xEnd y:yEnd brush:aForm.
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   682
    cr notNil ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   683
        cr surface markDirty
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   684
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   685
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   686
    "Created: / 18-02-2016 / 20:28:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   687
    "Modified: / 24-02-2016 / 18:19:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   688
!
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   689
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   690
displayRoundRectangleX:x y:y width:w height:h wCorner:wCorn hCorner:hCorn
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   691
    | r pi |
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   692
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   693
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   694
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   695
    ].
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   696
    wCorn ~~ hCorn ifTrue:[ 
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   697
        self notYetImplemented.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   698
    ].
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   699
    r := wCorn / 2.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   700
    pi := Float pi.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   701
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   702
    "/ top-left arc
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   703
    cr arcX: x + r     y: y + r     radius: r from:         pi to: (3/2) * pi.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   704
    "/ top-right atc
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   705
    cr arcX: x + w - r y: y + r     radius: r from: (3/2) * pi to: 0.0.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   706
    "/ bottom-right atc
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   707
    cr arcX: x + w - r y: y + h - r radius: r from: 0.0        to: (1/2) * pi.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   708
    "/ bottom-left atc
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   709
    cr arcX: x + r     y: y + h - r radius: r from: (1/2) * pi to:         pi.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   710
    cr closePath.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   711
    cr stroke.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   712
    
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   713
    "
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   714
     |v|
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   715
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   716
     (v := View new) extent:200@200; openAndWait.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   717
     v cairo 
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   718
            lineWidth: 5;
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   719
            displayRoundRectangleX:10 y:10 width:100 height:100 wCorner:20 hCorner:20;
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   720
            release
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   721
    "
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   722
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   723
    "Created: / 07-01-2015 / 20:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   724
    "Modified: / 13-02-2016 / 20:00:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   725
    "Modified: / 21-02-2016 / 15:35:35 / jv"
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   726
! !
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   727
49
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   728
!CairoGraphicsContext methodsFor:'drawing in device coordinates'!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   729
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   730
displayDeviceForm:aForm x:x y:y
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   731
    "draw a form or image non opaque (i.e. only foreground color is drawn);
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   732
     If its a 1-plane bitmap, 1-bits are drawn in the
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   733
     current paint-color, leaving pixels with 0-bits unchanged
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   734
     (i.e. only 1-bits are drawn from the form).
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   735
     If its a deep form (i.e. a pixmap) the current paint
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   736
     settings are ignored and the form is drawn as-is;
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   737
     however, the mask is applied if present.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   738
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   739
     The form should must have been allocated on the same device,
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   740
     otherwise its converted here, which slows down the draw.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   741
     No transformation or scaling is done.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   742
     Care must be taken, that the paint color is correctly allocated
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   743
     (by sending #on: to the color) before doing so.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   744
     Using functions other than #copy only makes sense if you are
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   745
     certain, that the colors are real colors (actually, only for
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   746
     noColor or allColor)."
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   747
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   748
    cr notNil ifTrue:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   749
        cr surface flush.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   750
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   751
    super displayDeviceForm:aForm x:x y:y.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   752
    cr notNil ifTrue:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   753
        cr surface markDirty.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   754
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   755
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   756
    "Created: / 26-02-2016 / 10:47:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   757
!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   758
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   759
displayDeviceLineFromX:x0 y:y0 toX:x1 y:y1
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   760
    "draw a line (with current paint-color) in device coordinate space.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   761
     This ignores any transformations. The coordinates must be integers."
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   762
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   763
    self deviceCoordinatesDo:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   764
        self displayLineFromX:x0 y:y0 toX:x1 y:y1
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   765
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   766
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   767
    "Created: / 26-02-2016 / 10:32:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   768
!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   769
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   770
displayDeviceOpaqueForm:aForm x:x y:y
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   771
    "draw a form or image opaque (i.e. both fg and bg is drawn);
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   772
     If its a 1-plane bitmap, 1-bits are drawn in the
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   773
     current paint-color and 0-bits in the bgPaint color.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   774
     If its a deep form (i.e. a pixmap) the current paint/bgPaint
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   775
     settings are ignored and the form drawn as-is.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   776
     Any mask is ignored.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   777
     In the 1-plane case, special care must be taken if paint and/or bgPaint
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   778
     dithered colors or patterns, since are that the colors are correctly allocated (by sending #on:
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   779
     to the colors) before doing so.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   780
     The form should have been allocated on the same device; otherwise,
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   781
     its converted here, which slows down the draw.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   782
     Drawing is in device coordinates; no scaling is done."
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   783
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   784
    cr notNil ifTrue:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   785
        cr surface flush.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   786
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   787
    super displayDeviceOpaqueForm:aForm x:x y:y.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   788
    cr notNil ifTrue:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   789
        cr surface markDirty.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   790
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   791
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   792
    "Created: / 26-02-2016 / 10:47:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   793
!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   794
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   795
displayDeviceOpaqueString:aString from:index1 to:index2 in:fontToUse x:x y:y
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   796
    "draw a substring at the coordinate x/y - draw foreground pixels in
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   797
     paint-color and background pixels in bgPaint-color.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   798
     Assuming that device can only draw in device colors, we have to handle
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   799
     the case where paint and/or bgPaint are dithered colors.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   800
     No translation or scaling is done."
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   801
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   802
    | savedFont |
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   803
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   804
    "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   805
     if backgroundPaint color is nil, we assume
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   806
     this is a non-opaque draw
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   807
    "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   808
    bgPaint isNil ifTrue:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   809
        self displayDeviceString:aString from:index1 to:index2 x:x y:y.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   810
        ^ self
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   811
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   812
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   813
    aString isPlainString ifFalse:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   814
        "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   815
         hook for non-strings (i.e. attributed text)
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   816
         that 'thing' should know how to display itself ...
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   817
        "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   818
        aString displayOpaqueOn:self x:x y:y from:index1 to:index2.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   819
        ^ self
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   820
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   821
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   822
    self deviceCoordinatesDo:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   823
        savedFont := self font.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   824
        [  
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   825
            self font:fontToUse.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   826
            self displayOpaqueString:aString from:index1 to:index2 x:x y:y
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   827
        ] ensure:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   828
            self font: savedFont
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   829
        ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   830
    ]
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   831
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   832
    "Created: / 26-02-2016 / 10:44:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   833
!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   834
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   835
displayDeviceString:aString from:index1 to:index2 in:fontToUse x:x y:y
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   836
    "draw a substring at the coordinate x/y -
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   837
     draw foreground-pixels only (in current paint-color), leaving background as-is.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   838
     No translation or scaling is done"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   839
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   840
    | savedFont |
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   841
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   842
    "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   843
     hook for non-strings (i.e. attributed text)
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   844
    "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   845
    aString isPlainString ifFalse:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   846
        ^ aString displayOn:self x:x y:y from:index1 to:index2
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   847
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   848
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   849
    self deviceCoordinatesDo:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   850
        savedFont := self font.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   851
        [  
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   852
            self font:fontToUse.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   853
            self displayString:aString from:index1 to:index2 x:x y:y
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   854
        ] ensure:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   855
            self font: savedFont
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   856
        ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   857
    ]
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   858
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   859
    "Created: / 26-02-2016 / 10:45:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   860
!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   861
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   862
fillDeviceRectangleX:x y:y width:w height:h
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   863
    "draw a filled rectangle in device coordinate space.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   864
     This ignores any transformations. The coordinates must be integers."
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   865
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   866
    self deviceCoordinatesDo:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   867
        self fillRectangleX:x y:y width:w height:h
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   868
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   869
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   870
    "Created: / 26-02-2016 / 10:29:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   871
! !
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   872
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   873
!CairoGraphicsContext methodsFor:'filling'!
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   874
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   875
fillRoundRectangleX:x y:y width:w height:h wCorner:wCorn hCorner:hCorn
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   876
    | r pi |
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   877
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   878
    cr isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   879
        self initCR.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   880
    ].
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   881
    wCorn ~~ hCorn ifTrue:[ 
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   882
        self notYetImplemented.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   883
    ].
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   884
    r := wCorn / 2.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   885
    pi := Float pi.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   886
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   887
    "/ top-left arc
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   888
    cr arcX: x + r     y: y + r     radius: r from:         pi to: (3/2) * pi.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   889
    "/ top-right atc
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   890
    cr arcX: x + w - r y: y + r     radius: r from: (3/2) * pi to: 0.0.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   891
    "/ bottom-right atc
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   892
    cr arcX: x + w - r y: y + h - r radius: r from: 0.0        to: (1/2) * pi.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   893
    "/ bottom-left atc
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   894
    cr arcX: x + r     y: y + h - r radius: r from: (1/2) * pi to:         pi.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   895
    cr closePath.
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   896
    cr fill.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   897
    
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   898
    "
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   899
     |v|
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   900
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   901
     (v := View new) extent:200@200; openAndWait.
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   902
     v cairoify 
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   903
            lineWidth: 5;
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   904
            displayRoundRectangleX:10 y:10 width:100 height:100 wCorner:20 hCorner:20.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   905
    "
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   906
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   907
    "Created: / 07-01-2015 / 21:33:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   908
    "Modified: / 13-02-2016 / 20:00:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   909
    "Modified (comment): / 21-02-2016 / 15:58:59 / jv"
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   910
! !
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   911
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   912
!CairoGraphicsContext methodsFor:'finalization'!
34
97705b5a9411 Use Cairo's toy text API for text rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   913
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   914
executor
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   915
    ^ CairoGraphicsContextHandle basicNew setDevice:device id:drawableId gcId:gcId parentId: parentId type: drawableType cr: cr
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   916
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   917
    "Created: / 12-02-2016 / 17:04:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   918
    "Modified: / 04-03-2016 / 00:09:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
34
97705b5a9411 Use Cairo's toy text API for text rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   919
! !
97705b5a9411 Use Cairo's toy text API for text rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   920
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   921
!CairoGraphicsContext methodsFor:'initialization & release'!
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   922
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   923
createCR
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   924
    "Physically create a Cairo graphics context"
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   925
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   926
    cr := self cairo.
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   927
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   928
    "Created: / 12-02-2016 / 16:59:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   929
    "Modified: / 18-02-2016 / 22:53:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   930
!
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   931
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   932
createGC
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   933
    "physically create a device GC.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   934
     Since we do not need a gc-object for the drawable until something is
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   935
     really drawn, none is created up to the first draw.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   936
     This method is sent, when the first drawing happens"      
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   937
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   938
    "/ Here, we cannot simply do
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   939
    "/ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   940
    "/   super createGC.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   941
    "/   self createCR.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   942
    "/ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   943
    "/ As we need to tell the finalization lobby to register change
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   944
    "/ after we create Cairo context. Of course, we could just call
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   945
    "/ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   946
    "/   Lobby registerChange: self
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   947
    "/ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   948
    "/ in createCR, but then we'd call it twice which is not what we want.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   949
    "/ Therefore this ugly code duplication...sigh.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   950
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   951
    drawableType == #window ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   952
        gcId := device gcFor:drawableId.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   953
    ] ifFalse:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   954
        gcId := device gcForBitmap:drawableId.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   955
    ].
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   956
    self createCR.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   957
    Lobby registerChange:self.
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   958
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   959
    "Created: / 12-02-2016 / 16:58:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   960
    "Modified: / 03-03-2016 / 23:28:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   961
!
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   962
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   963
destroyCR
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   964
    "Tell Cairo library to destroy the corresponding C object.
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   965
     Remember that object is physically destroyed only if internal
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   966
     refcounter goes to zero. However, after calling destroy,
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   967
     this instance should be treated as invalid."
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   968
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   969
    cr notNil ifTrue:[
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   970
        | wasBlocked surfaceToDestroy crToDestroy |
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   971
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   972
        wasBlocked := OperatingSystem unblockInterrupts.
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
   973
50
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   974
        crToDestroy := cr.
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   975
        surfaceToDestroy := cr surface.
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   976
        cr := nil.
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   977
        crToDestroy release.
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   978
        surfaceToDestroy release.
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   979
        device dcUnlockForGC: gcId.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   980
        wasBlocked ifFalse:[
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   981
            OperatingSystem unblockInterrupts.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   982
        ]    
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   983
    ].
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   984
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   985
    "Created: / 12-02-2016 / 16:59:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
50
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   986
    "Modified: / 26-02-2016 / 22:50:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   987
    "Modified (format): / 02-04-2016 / 16:07:22 / jv"
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   988
!
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   989
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   990
destroyGC
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   991
    drawableId notNil ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   992
        Logger debug: 'Destroying GC/CR for drawable %1' with: drawableId.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   993
    ].
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   994
    self destroyCR.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   995
    super destroyGC
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   996
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   997
    "Created: / 12-02-2016 / 17:01:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   998
    "Modified: / 03-03-2016 / 23:52:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   999
!
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
  1000
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1001
initCR
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1002
    | view f |
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1003
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1004
    gcId isNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1005
        self initGC.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1006
    ].
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1007
    cr isNil ifTrue:[ 
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1008
        self createCR.
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
  1009
        Lobby registerChange: self.
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1010
    ].
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1011
    device isWindowsPlatform ifTrue:[
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1012
        view := cr surface view.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1013
        view notNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1014
            view addDependent: self.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1015
            view container notNil ifTrue:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1016
                view container addDependent: self.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1017
            ].
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1018
        ].
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1019
    ].
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1020
46
e624554ca9a3 CairoGraphicsContext: fixed drawing/filling of lines and rectangles to match DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
  1021
    cr antialias: CAIRO_ANTIALIAS_NONE.
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1022
    cr lineWidth: (lineWidth == 0 ifTrue:[ 1 ] ifFalse:[ lineWidth ]).
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1023
    cr source: paint.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1024
    cr matrixReset.
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
  1025
    self transformation: transformation.
70
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
  1026
    self clippingBounds: clipRect.
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1027
    f := font.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1028
    font := nil.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1029
    self basicFont: f.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1030
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1031
    "Created: / 18-02-2016 / 22:48:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1032
    "Modified: / 29-03-2016 / 23:57:30 / jv"
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1033
    "Modified: / 02-04-2016 / 15:39:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1034
!
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1035
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1036
releaseCR
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1037
    self destroyCR
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1038
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1039
    "Created: / 12-02-2016 / 17:02:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1040
!
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
  1041
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1042
releaseGC
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1043
    "destroy the associated device GC resource - can be done to be nice to the
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1044
     display if you know that you are done with a drawable."
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1045
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1046
    self releaseCR.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1047
    super releaseGC.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1048
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1049
    "Created: / 12-02-2016 / 17:03:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
  1050
! !
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
  1051
49
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1052
!CairoGraphicsContext methodsFor:'private'!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1053
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1054
deviceCoordinatesDo: aBlock
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1055
    "Evaluate a block using device coordinates (device 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1056
     space using Cairo terminology)"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1057
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1058
    | savedTransformation |
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1059
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1060
    savedTransformation := transformation.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1061
    self transformation: nil.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1062
    aBlock ensure:[ self transformation: savedTransformation ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1063
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1064
    "Created: / 26-02-2016 / 09:29:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1065
!
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1066
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1067
maskSet
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1068
    "Either mask or markOrigin changed. Update Cairo's source pattern"
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1069
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1070
    | maskImage w h maskSurface maskPattern sourceSurface sourceContext sourcePattern |
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1071
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1072
    mask isNil ifTrue:[ 
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1073
        cr source: paint.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1074
        ^ self.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1075
    ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1076
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1077
    maskImage := mask asImage.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1078
    w := maskImage width.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1079
    h := maskImage height.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1080
    [
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1081
        sourceSurface := Cairo::Surface newImageWithFormat: CAIRO_FORMAT_ARGB32 width: w height: h similarTo: cr surface.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1082
        maskImage depth == 1 ifTrue:[
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1083
            maskSurface := maskImage asSurfaceWithFormat: CAIRO_FORMAT_A1 similarTo: sourceSurface.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1084
            maskPattern := Cairo::Pattern surface: maskSurface.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1085
            maskPattern extend: CAIRO_EXTEND_REPEAT.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1086
        ] ifFalse:[ 
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1087
            self error: 'Not yet supported'
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1088
        ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1089
        sourceContext := sourceSurface cairo.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1090
        maskOrigin notNil ifTrue:[ 
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1091
            maskPattern matrix: (Cairo::Matrix translate: maskOrigin negated).
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1092
        ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1093
        sourceContext source: cr source.               
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1094
        sourceContext mask: maskPattern.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1095
    ] ensure:[
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1096
        sourceContext notNil ifTrue:[sourceContext release].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1097
        maskPattern notNil ifTrue:[maskPattern release].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1098
        maskSurface notNil ifTrue:[maskSurface release].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1099
    ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1100
    sourcePattern := Cairo::Pattern surface: sourceSurface.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1101
    sourcePattern extend: CAIRO_EXTEND_REPEAT.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1102
    cr source: sourcePattern.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1103
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1104
    "Created: / 08-03-2016 / 21:21:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
72
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1105
!
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1106
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1107
subViewChangedSizeOrOrigin
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1108
    "Internal. Called whenever one of the owner's
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1109
     subview changes size or origin (i.e., when moved)    
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1110
     See SimpleView>>pixelOrigin:extent:.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1111
     Can be used to adjust internal state."
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1112
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1113
    device isX11Platform ifFalse:[ 
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1114
        self destroyGC.
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1115
    ].
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1116
    "/ Nothing by default
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1117
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1118
    "Created: / 02-04-2016 / 16:04:55 / jv"
49
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1119
! !
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1120
36
9b680e54aa94 Take a step back: separate Cairo's GraphicsContext (cairo_t) and Smalltalk/X's graphics context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
  1121
!CairoGraphicsContext class methodsFor:'documentation'!
7
392289f92fab - DLL path is set automatically.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
  1122
392289f92fab - DLL path is set automatically.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
  1123
version
392289f92fab - DLL path is set automatically.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
  1124
    ^'$Id$'
11
fdc697f4f190 - Cairo::SvgVersion
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
  1125
!
fdc697f4f190 - Cairo::SvgVersion
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
  1126
23
38ee47dbd976 Added version_HG to make Mercurial happy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
  1127
version_HG
38ee47dbd976 Added version_HG to make Mercurial happy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
  1128
    ^ '$Changeset: <not expanded> $'
65
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
  1129
! !
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
  1130