CSS::SpriteMaker::Layout - Layout interface for items placed on a 2D grid.

Allows to access coordinates of items laid out on a 2D grid.

Shouldn't be instantiated directly, but subclasses should be instantiated instead.


Version 0.04


Lays out the items given their properties. These properties can be global or about individual items, and have the form of the following hashref:

        '<item_id>' : {
            width => <integer>,
            height => <integer>,
            first_pixel_x => <integer>,
            first_pixel_y => <integer>,
            ... other arbitrary properties, if any

This method should never be called on this class, but on a subclass. It contains the implementation of the specific layout after all.


Gets the coordinates of a specific item within the layout.

    my ($x, $y) = $Layout->get_item_coord("129");

Returns a list containing the x and the y coordinates of the specified element respectively.


Sets the coordinates of a layout item.

    # sets coordinates of item #129 to x: 100 y: 200
    $Layout->set_item_coord("129", 100, 200); 

Sets coordinates of the given element internally and returns undef.


Moves all the items in this layout by the given deltay and deltax.


Deletes the item with the specified id from the internal list of items that have been layed out.

WARNING - this doesn't trigger a re-layout: will result in having a hole in the current layout. Be aware of it.

Triggers a warning if the element with the specified id doesn't exist in the current layout.


Merges the current layout with the one specified. For a successful merge to happen, items in the old and in the new layout must have different ids.


Returns the id of each item into an array.

    my @ids = $Layout->get_item_ids();


Returns the current layout in an ascii string suitable for console printing.

Optionally takes width and height of the canvas in px if the canvas is to be reduced to a specific dimension in pixels.

    my $ascii_string = $Layout->get_layout_ascii_string();


    my $ascii_string = $Layout->get_layout_ascii_string({
        canvas_width => 80,
        canvas_height => 60,
        rh_item_info => {
            '<item_id>' => {
                width => <integer>,
                height => <integer>,

NOTE: the $Layout->finalize() method should've been called prior calling this method.


Returns the width of the overall layout in pixels.

    my $width = $Layout->width();


Returns the height of the overall layout in pixels.

    my $width = $Layout->height();


Sets this layout as instantiated. To only be called by a subclass of this base class once class is instantiated.


Once called, some checks are performed on the layout and warnings are issued emitted if something is wrong.

Always returns undef.