Bug 2955. Workaround for lack of atomic operations in GCCE standard libraries (fall back to default use of Mutex)
setPen NoPen
setBrush black
drawRect 10 10 60 500
setCompositionMode SourceOrDestination
translate 20 20
begin_block drawShape
setBrush 0xffff0000
drawEllipse 5 5 30 30
setBrush 0xff00ff00
drawRect 0 0 20 20
setBrush 0xff0000ff
drawRect 20 20 20 20
end_block
begin_block loop
setCompositionMode SourceAndDestination
translate 0 50
repeat_block drawShape
setCompositionMode SourceXorDestination
translate 0 50
repeat_block drawShape
setCompositionMode NotSourceAndNotDestination
translate 0 50
repeat_block drawShape
setCompositionMode NotSourceOrNotDestination
translate 0 50
repeat_block drawShape
setCompositionMode NotSourceXorDestination
translate 0 50
repeat_block drawShape
setCompositionMode NotSource
translate 0 50
repeat_block drawShape
setCompositionMode NotSourceAndDestination
translate 0 50
repeat_block drawShape
setCompositionMode SourceAndNotDestination
translate 0 50
repeat_block drawShape
end_block
resetMatrix
setCompositionMode Source
setBrush white
drawRect 100 10 60 500
translate 110 20
repeat_block loop
resetMatrix
setCompositionMode Source
translate 190 20
repeat_block loop
resetMatrix
setPen black
setCompositionMode SourceOver
translate 250 45
drawText 20 0 "Or ROP"
translate 0 50
drawText 20 0 "And ROP"
translate 0 50
drawText 20 0 "Xor ROP"
translate 0 50
drawText 20 0 "Nor ROP"
translate 0 50
drawText 20 0 "Nand ROP"
translate 0 50
drawText 0 0 "NSrcXorDst ROP"
translate 0 50
drawText 20 0 "NSrc ROP"
translate 0 50
drawText 0 0 "NSrcAndDst ROP"
translate 0 50
drawText 0 0 "SrcAndNDst ROP"