---
name: "Gimp::OO"
section: "3pm"
platform: "linux"
package: "libgimp-perl"
version: "2.0.dfsg+2.2pre1.dfsg-5"
release: "Debian 5.0 (Lenny)"
platforms: ["linux"]
url: "https://new.carta.tech/Gimp::OO"
---

# Gimp::OO(3pm)

Pseudo-OO for Gimp functions.

## NAME

Gimp::OO - Pseudo-OO for Gimp functions.

## SYNOPSIS

```
  use Gimp;             # Gimp::OO is now part of Gimp.
```

## DESCRIPTION

As you might have noticed, you can sort most gimp functions fall into three groups, depending on the name-prefix: `"gimp_"`, `"plug_in_"`, `"extension_"` etc..

Whats more, there are functions groups like `"gimp_image_"` or `"gimp_selection_"`, operating on a common object, **Images** and **Selection** in this case.

If you only had the plain syntax, your scripts would quickly aquire the "vertical gimp syndrome":

```
 gimp_palette_set_foreground(...)
 gimp_layer_new(...)
 gimp_palette_set_background(...)
 gimp_image_add_layer(...)
```

etc. Of course, your fingers will suffer from severe injuries as well.

A solution to this situation is to use OO-syntax. Gimp plays some (very) dirty tricks and provides a number of classes, like `"Gimp::Image"` and `"Gimp::Palette"` that allow shorter identifiers to be used (all these appear with the `"Gimp::"` prefix as well as without, i.e. `"Gimp::Palette"` is the same class as `"Palette"`).

If you call a method, `"Gimp"` tries to find a gimp function by prepending a number of prefixes until it finds a valid function:

```
 $image = Gimp->image_new(...); # calls gimp_image_new(...)
 $image = Image->new(...);      # calls gimp_image_new as well
 $image = new Image(...);       # the same in green
 Palette->set_foreground(...)   # calls gimp_palette_set_foreground(..)
```

Return values from functions are automatically blessed (through The Magic Autobless feature ;) to their corresponding classes, i.e.

```
 $image = new Image(...);       # $image is now blessed to Gimp::Image
 $image->height;                # calls gimp_image_height($image)
 $image->flatten;               # likewise gimp_flatten($image)
 $image->histogram(...);        # calls gimp_histogram($image,...), since
                                # gimp_image_histogram does not exist
```

The class argument (`$image` in the above examples) is prepended to the argument list.

Another shortcut: many functions want a (redundant) image argument, like

```
 $image->shear ($layer, ...)
```

Since all you want is to shear the `$layer`, not the `$image`, this is confusing as well. In cases like this, Gimp allows you to write:

```
 $layer->shear (...)
```

And automatically infers the additional IMAGE-type argument.

As the (currently) last goodie, if the first argument is of type INT32, its name is "run\_mode" and there are no other ambiguties, you can omit it, i.e. these three calls are equivalent:

```
 plug_in_gauss_rle (RUN_NONINTERACTIVE, $image, $layer, 8, 1, 1);
 plug_in_gauss_rle ($image, $layer, 8, 1, 1);
 plug_in_gauss_rle ($layer, 8, 1, 1);
```

You can call all sorts of sensible and not-so-sensible functions, so this feature can be abused:

```
 patterns_list Image;           # will call gimp_patterns_list
 quit Plugin;                   # will quit the Gimp, not an Plugin.
```

there is no image involved here whatsoever...

## AVAILABLE CLASSES

The following classes (with and without Gimp::) are available. The prefixes that are checked are shown as well (the null prefix "" is implicit).

- Gimp (there is no Gimp::Gimp, only Gimp::)

  ```
   gimp_
  ```

- Layer

  ```
   gimp_layer_
   gimp_drawable_
   gimp_floating_sel_
   gimp_image_
   gimp_
   plug_in_
   perl_fu_
  ```

- Image

  ```
   gimp_image_
   gimp_drawable_
   gimp_
   plug_in_
   perl_fu_
  ```

- Drawable

  ```
   gimp_drawable_
   gimp_layer_
   gimp_image_
   gimp_
   plug_in_
   perl_fu_
  ```

- Selection

  ```
   gimp_selection_
  ```

- Channel

  ```
   gimp_channel_
   gimp_drawable_
   gimp_selection_
   gimp_image_
   gimp_
   plug_in_
   perl_fu_
  ```

- Display

  ```
   gimp_display_
   gimp_
  ```

- Palette

  ```
   gimp_palette_
  ```

- Plugin

  ```
   plug_in_
  ```

- Gradients

  ```
   gimp_gradients_
  ```

- Edit

  ```
   gimp_edit_
  ```

- Progress

  ```
   gimp_progress_
  ```

- Region

  (none except the implicit null prefix)

- Tile

  ```
   gimp_tile_
  ```

- PixelRgn

  ```
   gimp_pixel_rgn_
  ```

- GDrawable

  ```
   gimp_gdrawable_
  ```

- Brushes

  ```
   gimp_brushes_
  ```

- Patterns

  ```
   gimp_patterns_
  ```

## AUTHOR

Marc Lehmann \<pcg@goof.com\>

## SEE ALSO

[*perl*(1)](/perl/1.md), Gimp.
