Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
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 rifling through the Monastery: (11)
As of 2015-07-06 15:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (77 votes), past polls