CairoGraphicsContext.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 05 Apr 2016 07:44:27 +0100
changeset 75 e3ca2f982493
parent 74 94902e358396
child 76 f3deda9cea3e
permissions -rw-r--r--
Fixed a baad bug in CairoGraphicsContext>>clippingBounds: Must call `cr clipReset` as `cr clip` can never make clipping bounds larger (see documentation for cairo_clip()). This fixes bard drawing of underlined Text in text editor.
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:[ 
75
e3ca2f982493 Fixed a baad bug in CairoGraphicsContext>>clippingBounds:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   166
        cr clipReset.
e3ca2f982493 Fixed a baad bug in CairoGraphicsContext>>clippingBounds:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   167
        aRectangleOrNil notNil ifTrue:[ 
70
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   168
            cr rectangleX: aRectangleOrNil left
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   169
                        y: aRectangleOrNil top
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   170
                    width: aRectangleOrNil width
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   171
                   height: aRectangleOrNil height.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   172
            cr clip.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   173
        ].
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   174
    ].
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   175
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   176
    "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
   177
    "Modified: / 25-03-2016 / 06:58:26 / jv"
75
e3ca2f982493 Fixed a baad bug in CairoGraphicsContext>>clippingBounds:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 74
diff changeset
   178
    "Modified: / 04-04-2016 / 21:01:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
70
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   179
!
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
deviceClippingBounds:aRectangleOrNil
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   182
    "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
   183
     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
   184
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   185
    super deviceClippingBounds: aRectangleOrNil.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   186
    self deviceCoordinatesDo:[
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   187
        cr notNil ifTrue:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   188
            aRectangleOrNil isNil ifTrue:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   189
                cr clipReset
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   190
            ] ifFalse:[ 
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   191
                cr rectangleX: aRectangleOrNil left
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   192
                            y: aRectangleOrNil top
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   193
                        width: aRectangleOrNil width
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   194
                       height: aRectangleOrNil height.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   195
                cr clip.
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
   196
            ].
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
    "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
   201
!
34
97705b5a9411 Use Cairo's toy text API for text rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   202
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   203
function:aFunctionSymbol
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   204
    "set the drawing function"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   205
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   206
    #todo.
48
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   207
    ^ super function:aFunctionSymbol
2a66aee0a9b3 Added support for creating surfaces for X11 pixmaps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 47
diff changeset
   208
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   209
    "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
   210
!
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
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
   213
    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
   214
    cr notNil ifTrue:[
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   215
        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
   216
    ].
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   217
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   218
    "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
   219
    "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
   220
!
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
mask:aForm
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   223
    "set the drawing mask"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   224
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   225
    super mask: aForm.
64
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   226
    cr notNil ifTrue:[ 
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   227
        self maskSet.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   228
    ].
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   229
64
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   230
    "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
   231
!
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
maskOrigin:aPoint
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   234
    "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
   235
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   236
    super maskOrigin: aPoint.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   237
    gcId notNil ifTrue:[
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   238
        mask notNil ifTrue:[   
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   239
            self maskSet.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   240
        ].
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
    "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
   244
!
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
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
   247
    super paint: aColor.
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   248
    cr notNil ifTrue:[
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   249
        cr source: paint.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
   250
    ].
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
    "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
   253
    "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
   254
    "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
   255
!
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
paint:fgColor on:bgColor
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   258
    "Set the paint and background-paint color.
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   259
     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
   260
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   261
    super paint: fgColor on: bgColor.
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   262
    cr notNil ifTrue:[ 
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   263
        cr source: paint.        
a1280a796155 CairoGraphicsContext: oops, fixed #paint:on:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 60
diff changeset
   264
    ].
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
    "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
   267
!
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
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
   270
    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
   271
        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
   272
    ] 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
   273
        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
   274
    ].
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
    "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
   277
    "Modified: / 02-04-2016 / 15:55:29 / jv"
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
! !
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
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
   280
!CairoGraphicsContext methodsFor:'accessing-transformation'!
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   281
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   282
transformation:aTransformation 
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   283
    "set the transformation"
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   284
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   285
    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
   286
    cr notNil ifTrue:[
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   287
        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
   288
        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
   289
            cr
ffe4882eb977 Avoid excessive font object creation by cacheing in device
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   290
                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
   291
                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
   292
        ]
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   293
    ]
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   294
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   295
    "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
   296
    "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
   297
! !
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   298
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
   299
!CairoGraphicsContext methodsFor:'basic drawing'!
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   300
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   301
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
   302
    | angle1 angle2 |
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   303
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
   304
    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
   305
        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
   306
    ]. 
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
   307
    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
   308
    [
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
        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
   310
            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
   311
        ].
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   312
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
   313
        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
   314
        angle2 := (360 - (start + angle)) \\ 360.
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   315
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
   316
        (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
   317
            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
   318
        ] 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
   319
            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
   320
        ].
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
        cr stroke.
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   322
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
   323
        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
   324
            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
   325
        ].
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
    ] 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
   327
        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
   328
    ]
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   329
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
   330
    "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
   331
    "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
   332
!
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
displayLineFromX:x0 y:y0 toX:x1 y:y1
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   335
    "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
   336
    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
   337
        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
   338
    ].
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
   339
    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
   340
        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
   341
        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
   342
    ] 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
   343
        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
   344
            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
   345
            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
   346
        ] 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
   347
            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
   348
            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
   349
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
    ].
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
   352
    cr stroke.
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   353
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   354
    "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
   355
    "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
   356
!
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   357
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   358
displayPolygon:points
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   359
    "draw a polygon
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   360
     - this could be recoded to draw using displayLine"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   361
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
   362
    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
   363
        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
   364
    ]. 
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
   365
    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
   366
    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
   367
        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
   368
    ].
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
   369
    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
   370
    cr stroke.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   371
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
   372
    "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
   373
    "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
   374
!
17
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   375
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   376
displayRectangleX:x y:y width:w height:h
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   377
    "draw a rectangle
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   378
     - 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
   379
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
   380
    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
   381
        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
   382
    ]. 
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   383
    (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
   384
        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
   385
        cr stroke.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   386
    ]
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   387
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   388
    "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
   389
    "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
   390
!
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   391
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   392
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
   393
    "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
   394
     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
   395
     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
   396
     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
   397
     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
   398
     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
   399
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   400
    | opaque |
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   401
    "
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   402
     if backgroundPaint color is nil, we assume
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   403
     this is a non-opaque draw
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   404
    "
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   405
    opaque := opaqueArg ? false.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   406
    bgPaint isNil ifTrue:[
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   407
        opaque := false.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   408
    ].
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   409
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
   410
    cr isNil ifTrue:[
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   411
        self initGC
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   412
    ]. 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   413
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   414
    (string isString not or:[string isText]) ifTrue:[
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   415
        "
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   416
         hook for non-strings (i.e. attributed text)
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   417
         that 'thing' should know how to display itself ...
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   418
        "
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   419
        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
   420
        ^ self
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   421
    ].   
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   422
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   423
    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
   424
        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
   425
    ] ifFalse:[ 
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   426
        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
   427
        cr surface flush.
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   428
        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
   429
        cr surface markDirty.
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   430
    ].
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   431
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   432
    "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
   433
    "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
   434
    "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
   435
! !
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   436
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
   437
!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
   438
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   439
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
   440
    | angle1 angle2 |
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   441
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
   442
    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
   443
        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
   444
    ].
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
   445
    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
   446
    [
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
        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
   448
            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
   449
        ].
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   450
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   451
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
   452
        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
   453
        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
   454
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
        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
   456
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
   457
        (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
   458
            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
   459
        ] 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
   460
            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
   461
        ].
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
        cr closePath.
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   463
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
   464
        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
   465
        cr fill.
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   466
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
   467
        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
   468
            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
   469
        ].
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
    ] 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
   471
        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
   472
    ]
32
fb983be8d2c0 To fold - support for display/fillArc...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   473
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
   474
    "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
   475
    "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
   476
!
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   477
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   478
fillPolygon:points
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   479
    "fill a polygon with current paint color"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   480
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
   481
    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
   482
        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
   483
    ].
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
   484
    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
   485
    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
   486
        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
   487
    ].
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
   488
    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
   489
    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
   490
    cr fill.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   491
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
   492
    "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
   493
    "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
   494
!
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   495
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   496
fillRectangleX:x y:y width:w height:h
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   497
    "fill a rectangle with current paint color"
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   498
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
   499
    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
   500
        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
   501
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   502
    (w > 0 and:[h > 0]) ifTrue:[
54
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   503
        | savedWidth |
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   504
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   505
        savedWidth := cr lineWidth.
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   506
        cr lineWidth: 1.  
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   507
        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
   508
        cr strokeAndPreserve.
54
209a2b0b721a CairoGraphicsContext: adjustments to displayRectangle / fillRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 51
diff changeset
   509
        cr lineWidth: savedWidth.  
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   510
        cr fill.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   511
    ].
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   512
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   513
"/    cr save.
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   514
"/    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
   515
"/    cr sourceR: 1 G: 0 B: 0.
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   516
"/    cr lineWidth: 1.  
39
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   517
"/    cr stroke.
8af34937e1ec More work for using CairoGrahicsContext for rendering views
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   518
"/    cr restore.
10
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   519
45
8ee53c41a084 Win32: Initial support for Cairo under Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   520
    "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
   521
    "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
   522
! !
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
!CairoGraphicsContext methodsFor:'bit blitting'!
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   525
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   526
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
   527
    "copy bits from a smalltalk byteArray.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   528
     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
   529
     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
   530
     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
   531
     method to whatever the device needs."
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   532
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   533
    cr notNil ifTrue:[ 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   534
        cr surface flush
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   535
    ].
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   536
    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
   537
    cr notNil ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   538
        cr surface markDirty
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   539
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   540
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   541
    "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
   542
    "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
   543
!
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
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
   546
    "copy from aDrawable into the receiver;
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   547
     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
   548
     All coordinates are in device coordinates.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   549
     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
   550
     - 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
   551
     (not all devices care for this).
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   552
     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
   553
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   554
    cr notNil ifTrue:[ 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   555
        cr surface flush
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   556
    ].
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   557
    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
   558
    cr notNil ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   559
        cr surface markDirty
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   560
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   561
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   562
    "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
   563
    "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
   564
!
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
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
   567
    "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
   568
     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
   569
     The depth of aDrawable must (should) be 1.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   570
     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
   571
     All coordinates are in device coordinates."
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   572
42
475e93b10c8f CairoGraphicsContext: Make sure native GC and Cairo context is initialized
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   573
    cr notNil ifTrue:[ 
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   574
        cr surface flush
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   575
    ].
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   576
    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
   577
    cr notNil ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   578
        cr surface markDirty
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   579
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   580
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   581
    "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
   582
    "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
   583
    "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
   584
! !
dd5fece7c8d2 Few hacks before presentation at Smalltalk Jihlava 2009
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   585
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
   586
!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
   587
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
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
   589
    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
   590
        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
   591
        ^ 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
   592
    ].
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
    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
   594
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
    "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
   596
!
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
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
   599
    "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
   600
     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
   601
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
    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
   603
        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
   604
            | 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
   605
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
            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
   607
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
            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
   609
            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
   610
            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
   611
            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
   612
            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
   613
            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
   614
                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
   615
            ]
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
    "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
   619
    "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
   620
    "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
   621
! !
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
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
   623
!CairoGraphicsContext methodsFor:'drawing'!
17
5f943c05c028 - Cairo::GraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15
diff changeset
   624
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   625
displayForm:aFormOrImage x:x y:y
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   626
    "draw a form (or image) at x/y; 
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   627
     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
   628
     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
   629
     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
   630
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   631
    | 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
   632
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   633
    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
   634
    (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
   635
        cr notNil ifTrue:[ 
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   636
            cr surface flush.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   637
        ].
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   638
        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
   639
        cr notNil ifTrue:[ 
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   640
            cr surface markDirty.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   641
        ].
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   642
        ^ self.
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   643
    ].
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   644
    width := image width.
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   645
    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
   646
    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
   647
    [
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   648
        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
   649
        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
   650
        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
   651
            self initCR.
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   652
        ].
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
        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
   655
        cr paint.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   656
    ] ensure:[ 
51
5293f2b851ab CairGraphicsContext: added support for displaying images with alpha channel
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   657
        imageSurface release.
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   658
    ].
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   659
31
26070c1e480e GraphicsContext refactoring (part 2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 30
diff changeset
   660
    "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
   661
    "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
   662
!
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
displayLineFrom:p0 to:p1
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   665
    "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
   666
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   667
    ^ 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
   668
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   669
    "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
   670
!
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
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
   673
    "draw a line using a brush.
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   674
     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
   675
     temporary bitmap first, which is then displayed"
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   676
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   677
    cr notNil ifTrue:[ 
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   678
        cr surface flush
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   679
    ].
47
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   680
    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
   681
    cr notNil ifTrue:[ 
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   682
        cr surface markDirty
061f23d91383 CairoScaledFont: fixed drawing of CairoScaledFont on plain old DeviceGraphicsContext.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 46
diff changeset
   683
    ].
40
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   684
28dfc583beb5 #displayString: in CairoGraphicsContext revamped
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   685
    "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
   686
    "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
   687
!
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
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
   690
    | 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
   691
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
   692
    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
   693
        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
   694
    ].
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   695
    wCorn ~~ hCorn ifTrue:[ 
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   696
        self notYetImplemented.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   697
    ].
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   698
    r := wCorn / 2.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   699
    pi := Float pi.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   700
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   701
    "/ 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
   702
    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
   703
    "/ 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
   704
    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
   705
    "/ 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
   706
    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
   707
    "/ 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
   708
    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
   709
    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
   710
    cr stroke.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   711
    
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
     |v|
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   714
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   715
     (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
   716
     v cairo 
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   717
            lineWidth: 5;
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   718
            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
   719
            release
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   720
    "
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
    "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
   723
    "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
   724
    "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
   725
! !
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   726
49
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   727
!CairoGraphicsContext methodsFor:'drawing in device coordinates'!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   728
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   729
displayDeviceForm:aForm x:x y:y
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   730
    "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
   731
     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
   732
     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
   733
     (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
   734
     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
   735
     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
   736
     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
   737
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   738
     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
   739
     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
   740
     No transformation or scaling is done.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   741
     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
   742
     (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
   743
     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
   744
     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
   745
     noColor or allColor)."
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   746
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   747
    cr notNil ifTrue:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   748
        cr surface flush.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   749
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   750
    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
   751
    cr notNil ifTrue:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   752
        cr surface markDirty.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   753
    ].
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
    "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
   756
!
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
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
   759
    "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
   760
     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
   761
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   762
    self deviceCoordinatesDo:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   763
        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
   764
    ].
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
    "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
   767
!
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
displayDeviceOpaqueForm:aForm x:x y:y
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   770
    "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
   771
     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
   772
     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
   773
     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
   774
     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
   775
     Any mask is ignored.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   776
     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
   777
     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
   778
     to the colors) before doing so.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   779
     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
   780
     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
   781
     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
   782
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   783
    cr notNil ifTrue:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   784
        cr surface flush.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   785
    ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   786
    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
   787
    cr notNil ifTrue:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   788
        cr surface markDirty.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   789
    ].
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
    "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
   792
!
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
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
   795
    "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
   796
     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
   797
     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
   798
     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
   799
     No translation or scaling is done."
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   800
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   801
    | savedFont |
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   802
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
     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
   805
     this is a non-opaque draw
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   806
    "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   807
    bgPaint isNil ifTrue:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   808
        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
   809
        ^ self
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   810
    ].
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
    aString isPlainString ifFalse:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   813
        "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   814
         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
   815
         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
   816
        "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   817
        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
   818
        ^ self
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   819
    ].
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
    self deviceCoordinatesDo:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   822
        savedFont := self font.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   823
        [  
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   824
            self font:fontToUse.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   825
            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
   826
        ] ensure:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   827
            self font: savedFont
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   828
        ].
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
    "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
   832
!
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
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
   835
    "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
   836
     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
   837
     No translation or scaling is done"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   838
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   839
    | savedFont |
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   840
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
     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
   843
    "
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   844
    aString isPlainString ifFalse:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   845
        ^ 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
   846
    ].
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
    self deviceCoordinatesDo:[
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   849
        savedFont := self font.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   850
        [  
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   851
            self font:fontToUse.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   852
            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
   853
        ] ensure:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   854
            self font: savedFont
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   855
        ].
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
    "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
   859
!
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
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
   862
    "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
   863
     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
   864
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   865
    self deviceCoordinatesDo:[ 
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   866
        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
   867
    ].
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
    "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
   870
! !
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
   871
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
   872
!CairoGraphicsContext methodsFor:'filling'!
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   873
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   874
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
   875
    | 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
   876
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
   877
    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
   878
        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
   879
    ].
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   880
    wCorn ~~ hCorn ifTrue:[ 
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   881
        self notYetImplemented.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   882
    ].
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   883
    r := wCorn / 2.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   884
    pi := Float pi.
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   885
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   886
    "/ 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
   887
    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
   888
    "/ 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
   889
    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
   890
    "/ 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
   891
    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
   892
    "/ 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
   893
    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
   894
    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
   895
    cr fill.
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   896
    
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
     |v|
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   899
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   900
     (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
   901
     v cairoify 
33
8a2e438b4363 To fold - better display/fill RoundedRectangle...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 32
diff changeset
   902
            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
   903
            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
   904
    "
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
    "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
   907
    "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
   908
    "Modified (comment): / 21-02-2016 / 15:58:59 / jv"
1
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   909
! !
2439fb18f3dc Initial commit.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   910
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
   911
!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
   912
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   913
executor
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   914
    ^ 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
   915
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   916
    "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
   917
    "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
   918
! !
97705b5a9411 Use Cairo's toy text API for text rendering.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   919
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
   920
!CairoGraphicsContext methodsFor:'initialization & release'!
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   921
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   922
createCR
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   923
    "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
   924
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
   925
    cr := self cairo.
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   926
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   927
    "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
   928
    "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
   929
!
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   930
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   931
createGC
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   932
    "physically create a device GC.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   933
     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
   934
     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
   935
     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
   936
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   937
    "/ Here, we cannot simply do
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   938
    "/ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   939
    "/   super createGC.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   940
    "/   self createCR.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   941
    "/ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   942
    "/ 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
   943
    "/ 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
   944
    "/ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   945
    "/   Lobby registerChange: self
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   946
    "/ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   947
    "/ 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
   948
    "/ Therefore this ugly code duplication...sigh.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   949
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   950
    drawableType == #window ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   951
        gcId := device gcFor:drawableId.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   952
    ] ifFalse:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   953
        gcId := device gcForBitmap:drawableId.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   954
    ].
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   955
    self createCR.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   956
    Lobby registerChange:self.
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   957
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   958
    "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
   959
    "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
   960
!
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
destroyCR
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   963
    "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
   964
     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
   965
     refcounter goes to zero. However, after calling destroy,
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   966
     this instance should be treated as invalid."
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   967
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
   968
    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
   969
        | 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
   970
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
        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
   972
50
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   973
        crToDestroy := cr.
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   974
        surfaceToDestroy := cr surface.
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   975
        cr := nil.
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   976
        crToDestroy release.
239120c68187 Added classes with examples and example viewers
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 49
diff changeset
   977
        surfaceToDestroy release.
74
94902e358396 Oops, fixed slip in CairoGraphicsContext>>destroyCR
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   978
        device isWindowsPlatform ifTrue:[
94902e358396 Oops, fixed slip in CairoGraphicsContext>>destroyCR
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   979
            device dcUnlockForGC: gcId.
94902e358396 Oops, fixed slip in CairoGraphicsContext>>destroyCR
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   980
        ].
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
   981
        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
   982
            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
   983
        ]    
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   984
    ].
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   985
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   986
    "Created: / 12-02-2016 / 16:59:40 / 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"
74
94902e358396 Oops, fixed slip in CairoGraphicsContext>>destroyCR
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 72
diff changeset
   988
    "Modified: / 04-04-2016 / 18:45:53 / 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
   989
!
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   990
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   991
destroyGC
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   992
    drawableId notNil ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   993
        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
   994
    ].
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   995
    self destroyCR.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   996
    super destroyGC
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   997
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
   998
    "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
   999
    "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
  1000
!
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
  1001
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1002
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
  1003
    | view f |
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1004
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
  1005
    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
  1006
        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
  1007
    ].
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1008
    cr isNil ifTrue:[ 
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1009
        self createCR.
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
  1010
        Lobby registerChange: self.
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1011
    ].
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
  1012
    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
  1013
        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
  1014
        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
  1015
            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
  1016
            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
  1017
                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
  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
    ].
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1021
46
e624554ca9a3 CairoGraphicsContext: fixed drawing/filling of lines and rectangles to match DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
  1022
    cr antialias: CAIRO_ANTIALIAS_NONE.
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1023
    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
  1024
    cr source: paint.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1025
    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
  1026
    self transformation: transformation.
70
4f58f5ed77b3 Added support for clipping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 65
diff changeset
  1027
    self clippingBounds: clipRect.
41
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1028
    f := font.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1029
    font := nil.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1030
    self basicFont: f.
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1031
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1032
    "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
  1033
    "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
  1034
    "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
  1035
!
17bc740cbc2a Fixed (lazy) initialization of CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 40
diff changeset
  1036
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1037
releaseCR
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1038
    self destroyCR
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1039
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1040
    "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
  1041
!
30
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
  1042
35
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1043
releaseGC
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1044
    "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
  1045
     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
  1046
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1047
    self releaseCR.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1048
    super releaseGC.
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1049
395689a88b32 Make Cairo::GraphicsContext to inherit from DeviceGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 34
diff changeset
  1050
    "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
  1051
! !
c8fe298c8cc7 GraphicsContext refactoring (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
  1052
49
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1053
!CairoGraphicsContext methodsFor:'private'!
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1054
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1055
deviceCoordinatesDo: aBlock
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1056
    "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
  1057
     space using Cairo terminology)"
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1058
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1059
    | savedTransformation |
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1060
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1061
    savedTransformation := transformation.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1062
    self transformation: nil.
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1063
    aBlock ensure:[ self transformation: savedTransformation ].
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1064
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1065
    "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
  1066
!
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1067
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1068
maskSet
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1069
    "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
  1070
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1071
    | 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
  1072
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1073
    mask isNil ifTrue:[ 
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1074
        cr source: paint.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1075
        ^ self.
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
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1078
    maskImage := mask asImage.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1079
    w := maskImage width.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1080
    h := maskImage height.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1081
    [
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1082
        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
  1083
        maskImage depth == 1 ifTrue:[
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1084
            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
  1085
            maskPattern := Cairo::Pattern surface: maskSurface.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1086
            maskPattern extend: CAIRO_EXTEND_REPEAT.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1087
        ] ifFalse:[ 
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1088
            self error: 'Not yet supported'
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1089
        ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1090
        sourceContext := sourceSurface cairo.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1091
        maskOrigin notNil ifTrue:[ 
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1092
            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
  1093
        ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1094
        sourceContext source: cr source.               
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1095
        sourceContext mask: maskPattern.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1096
    ] ensure:[
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1097
        sourceContext notNil ifTrue:[sourceContext release].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1098
        maskPattern notNil ifTrue:[maskPattern release].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1099
        maskSurface notNil ifTrue:[maskSurface release].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1100
    ].
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1101
    sourcePattern := Cairo::Pattern surface: sourceSurface.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1102
    sourcePattern extend: CAIRO_EXTEND_REPEAT.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1103
    cr source: sourcePattern.
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1104
6e9458bb0697 CairoGraphicsContext: Added support for #mask: and #maskOrigin:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
  1105
    "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
  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
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
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
  1109
    "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
  1110
     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
  1111
     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
  1112
     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
  1113
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
    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
  1115
        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
  1116
    ].
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
    "/ 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
  1118
3eabcca278cd Cairo context and surface management for CairoGraphicsContext reworked to work under Win32
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
  1119
    "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
  1120
! !
5218b606b6cf DeviceGraphicsContext: fixed routines using device coordinates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 48
diff changeset
  1121
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
  1122
!CairoGraphicsContext class methodsFor:'documentation'!
7
392289f92fab - DLL path is set automatically.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
  1123
392289f92fab - DLL path is set automatically.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
  1124
version
392289f92fab - DLL path is set automatically.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
  1125
    ^'$Id$'
11
fdc697f4f190 - Cairo::SvgVersion
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
  1126
!
fdc697f4f190 - Cairo::SvgVersion
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
  1127
23
38ee47dbd976 Added version_HG to make Mercurial happy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
  1128
version_HG
38ee47dbd976 Added version_HG to make Mercurial happy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
  1129
    ^ '$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
  1130
! !
dcb2eb06e759 Issue #1: Adjust coordinates for lines/rectangles when drawing using through CairoGraphicsContext
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
  1131