Resurrected the cairo module today. I almost deleted it a while ago but decided to return to it after I needed some its functionality in my ScanDocs application. Ok, some of these drawing functions can be achieved using a canvas, but I wanted optimal speed. When I returned to the code I found that I broke away after coming to a standstill on implementing the line and fill attributes. I'd got 90% of the way there.... Today got through that one in about 15mins. I've got the most of the Cairo primitives sorted now but have come to a similar 'sticky wicket' with regard to setting patterns. Its a little late now and so this is something for later on this week.
Here's the test script:
#---------------
# test-cairo.tcl
#---------------
#
#---------------
#! ./bin/sh
#\
exec tclsh "$0" "$@"
#---------------
package require Gnocl
# how to pass these values to a cairo context?
# keep them in a global context, when drawing occurs, these are read!
#gnocl::mainLoop
set pb1 [gnocl::pixBuf load -file ./im-0007.pnm]
set pb2 [$pb1 resize -width 210 -height 297]
gnocl::draw set \
-lineColor {1.0 0.0 0.0 0.5} \
-fillColor {0.0 0.0 1.0 0.5} \
-lineWidth 10 \
-dash DUNNO
# top
gnocl::draw line $pb2 -from {0 0} -to {0 296}
# bottom
gnocl::draw set \
-lineColor {0.0 0.0 1.0 0.5} \
-fillColor {1.0 0.0 0.0 0.5} \
-lineWidth 10 \
-dash DUNNO
gnocl::draw line $pb2 -from {200 0} -to {200 296}
gnocl::draw circle $pb2 -center {200 200} -radius 50
set xc 100
set yc 100
set r 100
set a 90
gnocl::draw arc $pb2 \
-center {100 100} \
-radius 50 \
-startAngle 0 \
-endAngle 90 \
-fill 1 \
-negative 1
gnocl::draw curve $pb2 \
-points {
0 150
50 50
150 150
200 50} \
-fill 1
gnocl::draw pattern $pb2 \
-type radial \
-center1 {115.2, 102.4,} \
-radius1 {25.6} \
-center2 {102.4, 102.4,} \
-radius2 {128.0} \
-startColor {1 1 1 1} \
-endColor {0 0 0 1}
# sides
#gnocl::draw line $pb2 -from {200 0} -to {200 296}
#gnocl::draw line $pb2 -from {200 0} -to {200 296}
#centre
#gnocl::draw line $pb2 -from {105 0} -to {105 296}
set img1 [gnocl::image -image %?$pb2 ]
gnocl::window -child $img1
And a screenshot...
Here's the test script:
#---------------
# test-cairo.tcl
#---------------
#
#---------------
#! ./bin/sh
#\
exec tclsh "$0" "$@"
#---------------
package require Gnocl
# how to pass these values to a cairo context?
# keep them in a global context, when drawing occurs, these are read!
#gnocl::mainLoop
set pb1 [gnocl::pixBuf load -file ./im-0007.pnm]
set pb2 [$pb1 resize -width 210 -height 297]
gnocl::draw set \
-lineColor {1.0 0.0 0.0 0.5} \
-fillColor {0.0 0.0 1.0 0.5} \
-lineWidth 10 \
-dash DUNNO
# top
gnocl::draw line $pb2 -from {0 0} -to {0 296}
# bottom
gnocl::draw set \
-lineColor {0.0 0.0 1.0 0.5} \
-fillColor {1.0 0.0 0.0 0.5} \
-lineWidth 10 \
-dash DUNNO
gnocl::draw line $pb2 -from {200 0} -to {200 296}
gnocl::draw circle $pb2 -center {200 200} -radius 50
set xc 100
set yc 100
set r 100
set a 90
gnocl::draw arc $pb2 \
-center {100 100} \
-radius 50 \
-startAngle 0 \
-endAngle 90 \
-fill 1 \
-negative 1
gnocl::draw curve $pb2 \
-points {
0 150
50 50
150 150
200 50} \
-fill 1
gnocl::draw pattern $pb2 \
-type radial \
-center1 {115.2, 102.4,} \
-radius1 {25.6} \
-center2 {102.4, 102.4,} \
-radius2 {128.0} \
-startColor {1 1 1 1} \
-endColor {0 0 0 1}
# sides
#gnocl::draw line $pb2 -from {200 0} -to {200 296}
#gnocl::draw line $pb2 -from {200 0} -to {200 296}
#centre
#gnocl::draw line $pb2 -from {105 0} -to {105 296}
set img1 [gnocl::image -image %?$pb2 ]
gnocl::window -child $img1
And a screenshot...
Comments