Sunday, February 06, 2011

gnocl::draw

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...



No comments: