GooCanvas2(3)

πŸ’… NAME πŸ’…

GooCanvas2 β€” bestie, it's the Perl binding for the GooCanvas2 widget, and it works its magic through Glib::Object::Introspection ✨ (yes that's a whole mouthful, we stan anyway)


πŸ¦‹ SYNOPSIS πŸ¦‹

okay so here's the whole vibe, literally copy-paste-able, no cap:

#!/usr/bin/perl -w
use strict;
use warnings;

use Gtk3 -init;
use GooCanvas2;

my $window = Gtk3::Window->new();
$window->set_default_size(640, 600);
$window->signal_connect('destroy' => sub {Gtk3->main_quit()});

my $scrolled_win = Gtk3::ScrolledWindow->new();
$scrolled_win->set_shadow_type('in');

my $canvas = GooCanvas2::Canvas->new();
$canvas->set_size_request(600,450);
$canvas->set_bounds(0,0,1000,1000);
$scrolled_win->add($canvas);

my $root = $canvas->get_root_item();

# Add a few simple items
my $rect_item = GooCanvas2::CanvasRect->new('parent' => $root,
                                        'x' => 100,
                                        'y' => 100,
                                        'width' => 300,
                                        'height' => 300,
                                        'line_width' => 10.0,
                                        'radius-x' => 20.0,
                                        'radius-y' => 10.0,
                                        'stroke-color' => 'yellow',
                                        'fill-color' => 'red');

my $text_item = GooCanvas2::CanvasText->new('parent' => $root,
                                        'text' => 'Hello World',
                                        'x' => 300, 'y' => 300,
                                        'width' => -1,
                                        'anchor' => 'center',
                                        'font' => 'Sans 24');
$text_item->rotate(45, 300, 300);

# Connect a signal handler for the rectangle item.
$rect_item->signal_connect('button_press_event' => \&on_rect_button_press);

$window->add($scrolled_win);
$window->show_all;

# Pass control to the Gtk3 main event loop
Gtk3->main();

# This handles button presses in item views.
#We simply output a message to the console
sub on_rect_button_press {
        my ($item, $target, $event) = @_;
        print "rect item received button press event \n";
        return 1;
}

like, look at that rectangle. the text. the rotation. chef's kiss πŸŽ€


🌸 INSTALLATION 🌸

bestie listen, before anything works you gotta have the typelib file for GooCanvas-2.0 installed. no typelib, no canvas, and we'd simply perish 😭

on Debian/Ubuntu it should be necessary to install this package:

sudo apt-get install gir1.2-goocanvas-2.0

on Mageia, for example, you have to install:

urpmi lib64goocanvas-gir2.0

✨ DESCRIPTION ✨

GooCanvas2 is the new canvas widget for use with Gtk3, and it uses the Cairo 2d library for drawing πŸ”₯ it's a simple and basic implementation of this wonderful Canvas widget β€” humble queen energy fr fr.

for more informations see <https://wiki.gnome.org/action/show/Projects/GooCanvas>

and for instructions on how to use GooCanvas2, please study the API reference at <https://developer.gnome.org/goocanvas/unstable/> for now πŸ‘‘ a perl-specific documentation will perhaps come in later versions. but applying the C documentation should be no problem β€” you got this, i believe in you 🫢

πŸ’œ OBJECTS, ITEMS, MODELS πŸ’œ

the GooCanvas2 module provides the following objects, items and models. for more details see <https://wiki.gnome.org/action/show/Projects/GooCanvas>.

🧚 Core Objects 🧚

  • GooCanvas2::Canvas β€” the main canvas widget, the literal main character πŸ‘‘
  • GooCanvas2::CanvasItem β€” the interface for canvas items
  • GooCanvas2::CanvasItemModel β€” the interface for canvas item models.
  • GooCanvas2::CanvasItemSimple β€” the base class for the standard canvas items.
  • GooCanvas2::CanvasItemModelSimple β€” the base class for the standard canvas item models.
  • GooCanvas2::CanvasStyle β€” support for cascading style properties for canvas items.

πŸ“ Standard Canvas Items πŸ“

  • GooCanvas2::CanvasGroup β€” a group of items.
  • GooCanvas2::CanvasEllipse β€” an ellipse item.
  • GooCanvas2::CanvasGrid β€” a grid item.
  • GooCanvas2::CanvasImage β€” an image item.
  • GooCanvas2::CanvasPath β€” a path item (a series of lines and curves).
  • GooCanvas2::CanvasPolyline β€” a polyline item (a series of lines with optional arrows).
  • GooCanvas2::CanvasRect β€” a rectangle item.
  • GooCanvas2::CanvasText β€” a text item.
  • GooCanvas2::CanvasWidget β€” an embedded widget item.
  • GooCanvas2::CanvasTable β€” a table container to layout items.

🌈 Standard Canvas Item Models 🌈

  • GooCanvas2::CanvasGroupModel β€” a model for a group of items.
  • GooCanvas2::CanvasEllipseModel β€” a model for ellipse items.
  • GooCanvas2::CanvasGridModel β€” a model for grid items.
  • GooCanvas2::CanvasImageModel β€” a model for image items.
  • GooCanvas2::CanvasPathModel β€” a model for path items (a series of lines and curves).
  • GooCanvas2::CanvasPolylineModel β€” a model for polyline items (a series of lines with optional arrows).
  • GooCanvas2::CanvasRectModel β€” a model for rectangle items.
  • GooCanvas2::CanvasTextModel β€” a model for text items.
  • GooCanvas2::CanvasTableModel β€” a model for a table container to layout items.

πŸ¦‹ Development status and informations πŸ¦‹

Customizations and overrides

so in order to make things more Perlish, GooCanvas2 customizes the API generated by Glib::Object::Introspection in a few spots πŸ‘€

  • the array ref normally returned by the following functions is flattened into a list:
GooCanvas2::Canvas::get_items_at
GooCanvas2::Canvas::get_items_in_area
GooCanvas2::CanvasItem::get_items_at
GooCanvas2::CanvasItem::class_list_child_properties
GooCanvas2::CanvasItemModell::class_list_child_properties

⭐ SEE ALSO ⭐


πŸ’– AUTHOR πŸ’–

Maximilian Lika, <Maximilian-Lika@gmx.de>


Copyright (C) 2017 by Maximilian Lika

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.22.3 or, at your option, any later version of Perl 5 you may have available.


and that's the whole page bestie, go forth and draw rectangles πŸ–ΌοΈ mwah πŸ’‹ β€” this lil artifact is perl v5.42.0, dated 2019-01-07, and it's the GooCanvas2(3) man page signing off 🫢✨

πŸ“¦ where this page comes from