Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Simple Graphics::Primitive example?

by hdb (Prior)
on Feb 25, 2014 at 07:40 UTC ( #1076098=note: print w/ replies, xml ) Need Help??


in reply to Simple Graphics::Primitive example?

Based on the example in Graphics::Primitive, I came up with this:

use strict; use warnings; use Graphics::Primitive; use Graphics::Color::RGB; use Graphics::Primitive::Border; use Graphics::Primitive::Component; use Graphics::Primitive::Driver::Cairo; my $c = Graphics::Primitive::Component->new( background_color => Graphics::Color::RGB->new( red => 1, green => 0, blue => 0 ), width => 500, height => 350, border => new Graphics::Primitive::Border->new( width => 5 ) ); my $driver = Graphics::Primitive::Driver::Cairo->new(format => 'SVG'); $driver->prepare($c); $driver->finalize($c); $driver->draw($c); $driver->write('test.png');

and then went on to install the missing modules using cpan, specifically Graphics::Primitive and Graphics::Primitive::Driver::Cairo.

As a prerequisite, one has to install the cairo graphics library which I cannot do on my machine. Have you gone through this process?


Comment on Re: Simple Graphics::Primitive example?
Select or Download Code
Re^2: Simple Graphics::Primitive example?
by kcott (Abbot) on Feb 25, 2014 at 08:08 UTC

    I realise the "Graphics::Primitive::Component->new(...)" code you posted is a verbatim copy from the Graphics::Primitive POD; however,

    border => new Graphics::Primitive::Border->new( width => 5 )

    looks like one "new" too many. From the Graphics::Primitive::Border documentation, that should probably be:

    border => Graphics::Primitive::Border->new( width => 5 )

    -- Ken

      Thanks for pointing this out. As I got stuck on installing the prerequisites I never quite got to that point.

Re^2: Simple Graphics::Primitive example?
by djzort (Sexton) on Feb 25, 2014 at 22:39 UTC

    I am just using the debian provided version of driver::cairo (0.46)

    here is the code i am using

    #!/usr/bin/perl use strict;use warnings; use Graphics::Primitive::Container; use Graphics::Color::RGB; use Graphics::Primitive::Font; use Graphics::Primitive::TextBox; use Graphics::Primitive::Driver::Cairo; use Layout::Manager::Compass; my $black = Graphics::Color::RGB->new(red => 0, green => 0, blue => 0) +; my $container = Graphics::Primitive::Container->new( width => 100, hei +ght => 100); $container->border->width(1); $container->border->color($black); $container->padding( Graphics::Primitive::Insets->new(top => 5, bottom => 5, left => 5, + right => 5) ); my $comp = Graphics::Primitive::Component->new; $comp->background_color($black); $container->add_component($comp, 'c'); my $lm = Layout::Manager::Compass->new; $lm->do_layout($container); my $driver = Graphics::Primitive::Driver::Cairo->new; $driver->draw($container); $driver->write('/tmp/foo.png'); __END__

    for which i always see this error

    dean@laserbeak:/tmp$ perl test.pl Use of uninitialized value in subroutine entry at /usr/share/perl5/Gra +phics/Primitive/Driver/Cairo.pm line 85. Use of uninitialized value in subroutine entry at /usr/share/perl5/Gra +phics/Primitive/Driver/Cairo.pm line 85.

    Chart::Clicker works fine, so i know that its possible for Graphics::Primitive::Driver::Cairo to output something

      Looking at the source of the driver module:
      81 my $width = $self->width; 82 my $height = $self->height; 83 84 if(uc($self->format) eq 'PNG') { 85 $surface = Cairo::ImageSurface->create( 86 'argb32', $width, $height 87 );
      So it seems that both $width and $height are not defined. I note that the example on the Graphics::Primitive page has:
      my $c = Graphics::Primitive::Component->new( width => 500, height => 350, );
      Whereas the example on the Graphics::Primitive::Driver::Cairo page has:
      my $c = Graphics::Primitive::Container->new( width => 500, height => 350, );
      I suggest you try adding the width and height parameters when creating the new Component object (or try just using Component instead of Container) and see if that makes a difference.
        that seems to have done the trick, thank ye!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1076098]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (12)
As of 2014-09-19 05:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (129 votes), past polls