CairoGraphicsContextHandle.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 03 Mar 2016 23:57:57 +0000
changeset 60 9bc47734215d
child 86 e434bd07e403
permissions -rw-r--r--
CairoGraphicsContext: fixed finalization
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
60
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/libcairo' }"
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
DeviceHandle subclass:#CairoGraphicsContextHandle
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:'parentId drawableType cr'
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'Cairo-Compatibility'
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
!CairoGraphicsContextHandle class methodsFor:'documentation'!
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
documentation
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
"
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    Strictly internal!! Instances of CairoGraphicsContextHandle are used as
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    executors for CairoGraphicsContext - do not use!!
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
    [author:]
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
        Jan Vrany <jan.vrany@fit.cvut.cz>
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
    [instance variables:]
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    [class variables:]
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
    [see also:]
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
"
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
! !
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
!CairoGraphicsContextHandle methodsFor:'accessing'!
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
parentId
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
    ^ parentId
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
! !
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
!CairoGraphicsContextHandle methodsFor:'finalization'!
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
finalize
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
    "Called the view or pixmap for which I am a handle was collected - release system resources"
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    drawableId notNil ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
        Logger debug: 'Finalizing drawable %1#%2' with: drawableId with: drawableId identityHash.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
        cr notNil ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
            | surfaceToDestroy crToDestroy |
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
            crToDestroy := cr.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
            surfaceToDestroy := cr surface.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
            cr := nil.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
            crToDestroy release.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
            surfaceToDestroy release.    
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
        ].
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
        drawableType == #window ifTrue:[ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
            [
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
                (device viewIdKnown:drawableId) ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
    "/ 'Display [info]: recycled view (' infoPrint. v infoPrint. ') not destroyed: ' infoPrint.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
    "/ drawableId displayString infoPrintCR.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
                    drawableId := nil.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
                ] ifFalse:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
                    |id|
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
                    (id := gcId) notNil ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
                        gcId := nil.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
                        device deviceIOErrorSignal handle:[:ex |
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
                        ] do:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
                            device destroyGC:id.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
                        ]
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
                    ].
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
                    id := drawableId.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
                    drawableId := nil.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
                    device deviceIOErrorSignal handle:[:ex |
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
                    ] do:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
                        device destroyView:nil withId:id.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
                    ].
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
                    "When a window ist destroyed, all its subwindows are also destroyed.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
                     Unregister all the subwindows, to avoid destroying of reused windoeIds
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
                     later."
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
                    DeviceGraphicsContext cleanupLobbyForChildrenOfViewWithDevice:device id:id.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
                ]
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
            ] valueUninterruptably.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
        ] ifFalse:[ 
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
            | id |
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
            (id := gcId) notNil ifTrue:[
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
                gcId := nil.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
                device destroyGC:id.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
            ].
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
            id := drawableId.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
            drawableId := nil.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
            device destroyPixmap:id.    
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
        ].
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    ].
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    "Created: / 03-03-2016 / 23:21:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
! !
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
!CairoGraphicsContextHandle methodsFor:'private-accessing'!
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
setDevice:aDevice id:aDrawableId gcId:aGCId
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    self shouldNeverBeSent
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
    "Created: / 03-03-2016 / 23:19:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
!
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
setDevice:deviceArg id:drawableIdArg gcId:gcIdArg parentId: parentIdArg type: drawableTypeArg cr: crArg
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    device := deviceArg.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    drawableId := drawableIdArg.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    gcId := gcIdArg.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    parentId :=  parentIdArg.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    drawableType := drawableTypeArg.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    cr := crArg.
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    "Created: / 04-03-2016 / 00:08:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
! !
9bc47734215d CairoGraphicsContext: fixed finalization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117