---
name: "SWF::Shape"
section: "3pm"
platform: "linux"
package: "libswf-perl"
version: "1:0.4.4-1.1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/SWF::Shape"
---

# SWF::Shape(3pm)

Shape class

## NAME

SWF::Shape - Shape class

## SYNOPSIS

```
        use SWF::Shape;
        $shape = new SWF::Shape();
        $dispitem = $movie->add($shape);
```

## DESCRIPTION

SWF::Shape is the fundamental object of a flash movie.

## METHODS

- new *SWF::Shape()*

  Creates a new Shape object.

- $shape-\>movePenTo($x, $y)

  Move the Shape's (imaginary) pen location to ($x, `$y`) in the Shape's coordinate space.

- $shape-\>movePen($dx, $dy)

  Add ($dx, `$dy`) to the Shape's pen current location.

- $x = $shape-\>*getPenX()*

  Returns Pen's x-coordinates

- $y = $shape-\>*getPenY()*

  Returns Pen's y-coordinates

- ($x, $y) = $shape-\>*getPen()*

  Returns Pen's (x,y) coordinates

- $shape-\>drawLineTo($x, $y)

  Draw a line (using current line style, set by one of the setLine...() methods) from the current position to ($x, `$y`).

- $shape-\>drawLine($dx, $dy)

  Draw a line (using current line style set by one of the setLine...() methods) from the current position to displacement ($dx, `$dy`).

- $shape-\>drawCurveTo($controlx, $controly, $anchorx, $anchory)

  Draw a quadratic curve (using current line style, set by one of the setLine...() methods) from current pen position to ($anchorx, `$anchory`) using control point ($controlx, `$controly`).

- $shape-\>drawCurve($controldx, $controly, $anchorx, $anchory)

  Draw a quadratic curve (using current line style, set by one of the setLine...() methods) from current pen position to displacement ($anchordx, `$anchordy`) using displacement control point ($controldx, `$controldy`).

- $shape-\>drawCubicTo($bx,$by,$cx,$cx,$dx,$dy)

  - $shape-\>drawCubic($bx,$by,$cx,$cx,$dx,$dy)

  Draw a cubic curve (using current line style). \[ToDo: Add some more details and demo code\]

- $shape-\>setLine($width, $r, $g, $b \[,$a\])

  Sets Shape's line width and color (RGB). To remove the Shape's line style call `$shape`-\>*hideLine()*. The used line width for drawing is a product of `$width` argument and scale value set, see SWF::setScale($scale). Arguments `$r`, `$g`, `$b` stand for red, green and blue color parts, optional `$a` for alpha value.

- $shape-\>setLineStyle($width, $r, $g, $b \[,$a\])

  This OLD deprecated method is documented here only for compatibility reason. The line width -in TWIPS units- is independent of Ming scale value (more bug than feature).

- $shape-\>setLine2($width, $r, $g, $b ,$a, $flags, $miterLimit)

  A new method available for SWF version \>=8 setting shape's line width and color (RGBA) with additional control flags (see below) and miter limit. To remove the Shape's line style call `$shape`-\>*hideLine()*. The used line width for drawing is a product of `$width` argument and scale value set, see SWF::setScale($scale). Arguments `$r`, `$g`, `$b`, `$a` stand for red, green, blue and alpha color parts. `$a` is not optional here.

  Available flags are: Line cap style: select one of the following flags (default is round cap style)

  ```
          SWF_LINESTYLE_CAP_ROUND
          SWF_LINESTYLE_CAP_NONE
          SWF_LINESTYLE_CAP_SQUARE
  ```

  Line join style: select one of the following flags (default is round join style)

  ```
          SWF_LINESTYLE_JOIN_ROUND
          SWF_LINESTYLE_JOIN_BEVEL
          SWF_LINESTYLE_JOIN_MITER
  ```

  Scaling flags: disable horizontal / vertical scaling

  ```
          SWF_LINESTYLE_FLAG_NOHSCALE
          SWF_LINESTYLE_FLAG_NOVSCALE
  ```

  Enable pixel hinting to correct blurry vertical / horizontal lines:  all anchors will be aligned to full pixels

  ```
          SWF_LINESTYLE_FLAG_HINTING
  ```

  Disable stroke closure: if no-close flag is set caps will be applied instead of joins.

  ```
          SWF_LINESTYLE_FLAG_NOCLOSE
  ```

  End-cap style: default round

  ```
          SWF_LINESTYLE_FLAG_ENDCAP_ROUND
          SWF_LINESTYLE_FLAG_ENDCAP_NONE
          SWF_LINESTYLE_FLAG_ENDCAP_SQUARE
  ```

  If join style is SWF\_LINESTYLE\_JOIN\_MITER a miter limit factor must be set. Miter max length is then calculated as: max miter len = miter limit \* width. If join style is not miter, this value will be ignored.

- $shape-\>setLineStyle2($width, $r, $g, $b ,$a, $flags, $miterLimit)

  This OLD deprecated method is mentioned here only for compatibility reason, you'd better use *setLine2()*.

- $shape-\>setLine2Filled($width, $fill, $flags, $miterLimit)

  A new method available for SWF version \>=8 setting shape's line width and fill style, `$fill` is an object of SWF::Fill class. For other argument details see item `$shape`-\>*setLine2()*.

- $shape-\>setLine2StyleFilled($width, $fill, $flags, $miterLimit)

  This OLD deprecated method is mentioned here only for compatibility reason, you'd better use *setLine2Filled()*.

- $shape-\>*hideLine()*

  Remove the Shape's line, i.e. make lines painted after this method call invisible.

- $fill = $shape-\>addSolidFill($r, $g, $b \[,$a\])

  - $fill = $shape-\>addFill($r, $g, $b \[,$a\])

  Adds a solid fill to `$shape` list of fill styles and returns an SWF::Fill object. This object is used with the "*setLine()*" method described below. The default value of `$a` is 0.

- $fill = $shape-\>addBitmapFill($bitmap \[,FLAG\])

  - $fill = $shape-\>addFill($bitmap \[,FLAG\])

  Adds a bitmap fill to `$shape` list of fill styles and returns an SWF::Fill object. This object is used with the "*setLine()*" method described below.

  `$bitmap` is an SWF::Bitmap object while FLAG argument can be SWFFILL\_TILED\_BITMAP or SWFFILL\_CLIPPED\_BITMAP. Make sure to import these constants to your package before useing it, i.e. use the following statement:

  ```
       use SWF::Fill <list of constants>;
  ```

  The default value of FLAG is SWFFILL\_TILED\_BITMAP.

- $fill = $shape-\>addGradientFill($gradient \[,FLAG\])

  - $fill = $shape-\>addFill($gradient \[,FLAG\])

  Adds a gradient fill to `$shape` list of fill styles and returns an SWF::Fill object. This object is used with the "*setLine()*" method described below.

  `$gradient` is an SWF::Gradient object while FLAG argument can be SWFFILL\_LINEAR\_GRADIENT or SWFFILL\_RADIAL\_GRADIENT, plus SWFFILL\_FOCAL\_GRADIENT for V8. Make sure to import these constants to your package before useing it, i.e. use the following statement:

  ```
       use SWF::Fill <list of constants>;
  ```

  The default value of FLAG is SWFFILL\_LINEAR\_GRADIENT.

- $shape-\>xs\_setLeftFill($fill)

  - $shape-\>setLeftFill($fill)

  Sets the fill on the left side of the edge. `$fill` is an SWF::Fill object returned from "addFill" method.

- $shape-\>setLeftFill($r, $g, $b \[,$a\])

  This is another way of saying:

  ```
       my $fill = $shape->addSolidFill($r, $g, $b [,$a]);
       $shape->setLeftFill($fill);
  ```

- $shape-\>xs\_setRightFill($fill)

  - $shape-\>setRightFill($fill)

  Sets the fill on the right side of the edge. `$fill` is an SWF::Fill object returned from "addFill" method.

- $shape-\>setRightFill($r, $g, $b \[,$a\])

  This is another way of saying:

  ```
       my $fill = $shape->addSolidFill($r, $g, $b [,$a]);
       $shape->setRightFill($fill);
  ```

- $shape-\>drawCircle($r)

  Draws a circle with radious `$r`, also changes current position.

- $shape-\>drawArc($r, $startAngle, $endAngle)

  Draws an arc with radious `$r` form start to end.

- $shape-\>useVersion(version)

  This function allows to set the shapes version information. The version is only a hint. If necessary the version is upgraded. Valid values: are 3 and 4. Value of 3 is default, but 4 if linestyle2 is used.  Some shape features are available only for shape version 4 and  SWF file version\>=8. One example is the usage of focal gradients:

  ```
          $g = new SWF::Gradient();
          $g->setFocalPoint(-0.9);
          $g->addEntry(0.000000,0xff,0x00,0x00,0xff);
          $g->addEntry(1.000000,0x00,0xff,0x00,0xff);
          $shape->useVersion(4);
          $shape->addGradientFill($g,SWFFILL_FOCAL_GRADIENT);
  ```

- $version = $shape-\>*getVersion()*

  Gets the current shape object version.

- $shape-\>*dumpOutline()*

  Returns a string describing shape's outline. After drawing in a shape  expect getting a multi-line string like:

  ```
          moveto 368,5
          curveto 348,5 327,1
          curveto 307,-3 284,-15
  etc. etc.
  ```

- $shape-\>*end()*

  Stops drawing on this shape and make the shape complete. Further method calls won't produce any lines, circles etc.  By using this demo code later no circle is painted:

  ```
          $shape->drawLineTo(300,300);
          $shape->end();
          $shape->drawCircle(200);
  ```

- $shape-\>drawGlyph($font, $cnumber \[, $size\])

  Draws character of `$cnumber` of `$font`. Also Unicode fonts are possible, if the font does provide that, just like next example:

  ```
          $font=new SWF::Font("Thai-Bold.fdb");
          $sh->drawGlyph($font, 0x0E44, 44);
  ```

- $shape-\>drawCharacterBounds($character)

  Draws an outer rectangle fitting for `$character`, an object of SWF::Character.

- $shape-\>setRenderHintingFlags(flags)

  Set render hinting flags. Possible values are \
   	SWF::Constants::SWF\_SHAPE\_USESCALINGSTROKES and\
   	SWF::Constants::SWF\_SHAPE\_USENONSCALINGSTROKES

  This method also will set version of this SWF::Shape object to 4.

## AUTHOR

Soheil Seyfaie (soheil at users.sourceforge.net), Albrecht Kleine

## SEE ALSO

SWF, SWF::Bitmap, SWF::Button, SWF::Constants, SWF::DisplayItem,  SWF::Fill, SWF::Font, SWF::Gradient, SWF::Morph, SWF::Movie, SWF::MovieClip, SWF::TextField, SWF::Text, SWF::Character
