![]() |
CUGL 4.0
Cornell University Game Library
|
#include <CUNinePatch.h>
Public Member Functions | |
| NinePatch () | |
| ~NinePatch () | |
| virtual void | dispose () override |
| virtual bool | init () override |
| bool | initWithFile (const std::string filename) |
| bool | initWithFile (const std::string filename, const Rect &interior) |
| bool | initWithTexture (const std::shared_ptr< graphics::Texture > &texture) |
| bool | initWithTexture (const std::shared_ptr< graphics::Texture > &texture, const Rect &interior) |
| virtual bool | initWithData (const AssetManager *manager, const std::shared_ptr< JsonValue > &data) override |
| virtual void | setContentSize (const Size &size) override |
| void | setTexture (const std::string &filename) |
| void | setTexture (const std::shared_ptr< graphics::Texture > &texture) |
| std::shared_ptr< graphics::Texture > | getTexture () |
| const std::shared_ptr< graphics::Texture > & | getTexture () const |
| void | setInterior (const Rect &interior) |
| const Rect & | getInterior () const |
| void | setBlendMode (const graphics::BlendMode &mode) |
| void | setBlendState (const graphics::BlendState &blend) |
| const graphics::BlendState & | getBlendState () const |
| virtual void | draw (const std::shared_ptr< graphics::SpriteBatch > &batch, const Affine2 &transform, Color4 tint) override |
| void | refresh () |
| virtual std::string | toString (bool verbose=false) const override |
Public Member Functions inherited from cugl::scene2::SceneNode | |
| SceneNode () | |
| ~SceneNode () | |
| virtual void | dispose () |
| virtual bool | init () |
| virtual bool | initWithPosition (const Vec2 &pos) |
| bool | initWithPosition (float x, float y) |
| virtual bool | initWithBounds (const Size &size) |
| virtual bool | initWithBounds (float width, float height) |
| virtual bool | initWithBounds (const Rect &rect) |
| virtual bool | initWithBounds (float x, float y, float width, float height) |
| virtual bool | initWithData (const AssetManager *manager, const std::shared_ptr< JsonValue > &data) |
| bool | initForDrawableBounds () |
| bool | initForSafeBounds () |
| virtual std::shared_ptr< SceneNode > | copy (const std::shared_ptr< SceneNode > &dst) const |
| unsigned int | getTag () const |
| void | setTag (unsigned int tag) |
| const std::string | getName () const |
| void | setName (const std::string name) |
| const std::string | getClassName () const |
| virtual std::string | toString (bool verbose=false) const |
| operator std::string () const | |
| const std::shared_ptr< cugl::JsonValue > & | getJSON () const |
| const Vec2 & | getPosition () const |
| void | setPosition (const Vec2 &position) |
| void | setPosition (float x, float y) |
| float | getPositionX (void) const |
| void | setPositionX (float x) |
| float | getPositionY (void) const |
| void | setPositionY (float y) |
| Vec2 | getWorldPosition () const |
| const Size & | getContentSize () const |
| virtual void | setContentSize (const Size &size) |
| virtual void | setContentSize (float width, float height) |
| float | getContentWidth () const |
| void | setContentWidth (float width) |
| float | getContentHeight () const |
| void | setContentHeight (float height) |
| virtual Rect | getLayoutBounds () const |
| Size | getSize () const |
| float | getWidth () const |
| float | getHeight () const |
| Rect | getBoundingBox () const |
| virtual bool | inContentBounds (const Vec2 &point) |
| bool | inContentBounds (float x, float y) |
| virtual void | setAnchor (const Vec2 &anchor) |
| virtual void | setAnchor (float x, float y) |
| const Vec2 & | getAnchor () const |
| Vec2 | getAnchorInPixels () |
| Color4 | getColor () const |
| virtual void | setColor (Color4 color) |
| Color4 | getAbsoluteColor () |
| bool | isVisible () const |
| void | setVisible (bool visible) |
| bool | hasRelativeColor () const |
| void | setRelativeColor (bool flag) |
| std::shared_ptr< graphics::Scissor > | getScissor () const |
| void | setScissor (const std::shared_ptr< graphics::Scissor > &scissor) |
| void | setScissor () |
| const Vec2 & | getScale () const |
| float | getScaleX () const |
| float | getScaleY () const |
| void | setScale (float scale) |
| void | setScale (const Vec2 &vec) |
| void | setScale (float sx, float sy) |
| float | getAngle () |
| void | setAngle (float angle) |
| const Affine2 & | getTransform () const |
| const Affine2 & | getAlternateTransform () const |
| void | setAlternateTransform (const Affine2 &transform) |
| bool | withAlternateTransform () |
| void | chooseAlternateTransform (bool active) |
| const Affine2 & | getNodeToParentTransform () const |
| Affine2 | getParentToNodeTransform () const |
| virtual Affine2 | getNodeToWorldTransform () const |
| Affine2 | getWorldToNodeTransform () const |
| Vec2 | screenToNodeCoords (const Vec2 &screenPoint) const |
| Vec2 | worldToNodeCoords (const Vec2 &worldPoint) const |
| Vec2 | nodeToScreenCoords (const Vec2 &nodePoint) const |
| Vec2 | nodeToWorldCoords (const Vec2 &nodePoint) const |
| Vec2 | parentToNodeCoords (const Vec2 &parentPoint) const |
| Vec2 | nodeToParentCoords (const Vec2 &nodePoint) const |
| size_t | getChildCount () const |
| std::shared_ptr< SceneNode > | getChild (unsigned int pos) |
| const std::shared_ptr< SceneNode > & | getChild (unsigned int pos) const |
| template<typename T > | |
| std::shared_ptr< T > | getChild (unsigned int pos) const |
| std::shared_ptr< SceneNode > | getChildByTag (unsigned int tag) const |
| template<typename T > | |
| std::shared_ptr< T > | getChildByTag (unsigned int tag) const |
| std::shared_ptr< SceneNode > | getChildByName (const std::string name) const |
| template<typename T > | |
| std::shared_ptr< T > | getChildByName (const std::string name) const |
| std::vector< std::shared_ptr< SceneNode > > | getChildren () |
| const std::vector< std::shared_ptr< SceneNode > > & | getChildren () const |
| void | addChild (const std::shared_ptr< SceneNode > &child) |
| void | addChildWithTag (const std::shared_ptr< SceneNode > &child, unsigned int tag) |
| void | addChildWithName (const std::shared_ptr< SceneNode > &child, const std::string name) |
| void | swapChild (const std::shared_ptr< SceneNode > &child1, const std::shared_ptr< SceneNode > &child2, bool inherit=false) |
| SceneNode * | getParent () |
| const SceneNode * | getParent () const |
| Scene2 * | getScene () |
| const Scene2 * | getScene () const |
| void | removeFromParent () |
| virtual void | removeChild (unsigned int pos) |
| void | removeChild (const std::shared_ptr< SceneNode > &child) |
| void | removeChildByTag (unsigned int tag) |
| void | removeChildByName (const std::string name) |
| virtual void | removeAllChildren () |
| void | setPriority (float priority) |
| float | getPriority () |
| virtual void | render (const std::shared_ptr< graphics::SpriteBatch > &batch, const Affine2 &transform, Color4 tint) |
| virtual void | render (const std::shared_ptr< graphics::SpriteBatch > &batch) |
| virtual void | draw (const std::shared_ptr< graphics::SpriteBatch > &batch, const Affine2 &transform, Color4 tint) |
| Constraint | getLayoutConstraint () const |
| void | setLayoutConstraint (Constraint constraint) |
| const std::shared_ptr< Layout > & | getLayout () const |
| void | setLayout (const std::shared_ptr< Layout > &layout) |
| virtual void | doLayout () |
Static Public Member Functions | |
| static std::shared_ptr< NinePatch > | alloc () |
| static std::shared_ptr< NinePatch > | allocWithFile (const std::string filename) |
| static std::shared_ptr< NinePatch > | allocWithFile (const std::string filename, const Rect &interior) |
| static std::shared_ptr< NinePatch > | allocWithTexture (const std::shared_ptr< graphics::Texture > &texture) |
| static std::shared_ptr< NinePatch > | allocWithTexture (const std::shared_ptr< graphics::Texture > &texture, const Rect &interior) |
| static std::shared_ptr< SceneNode > | allocWithData (const AssetManager *manager, const std::shared_ptr< JsonValue > &data) |
Static Public Member Functions inherited from cugl::scene2::SceneNode | |
| static std::shared_ptr< SceneNode > | alloc () |
| static std::shared_ptr< SceneNode > | allocWithPosition (const Vec2 &pos) |
| static std::shared_ptr< SceneNode > | allocWithPosition (float x, float y) |
| static std::shared_ptr< SceneNode > | allocWithBounds (const Size &size) |
| static std::shared_ptr< SceneNode > | allocWithBounds (float width, float height) |
| static std::shared_ptr< SceneNode > | allocWithBounds (const Rect &rect) |
| static std::shared_ptr< SceneNode > | allocWithBounds (float x, float y, float width, float height) |
| static std::shared_ptr< SceneNode > | allocWithData (const AssetManager *manager, const std::shared_ptr< JsonValue > &data) |
| static std::shared_ptr< SceneNode > | allocForDrawableBounds () |
| static std::shared_ptr< SceneNode > | allocForSafeBounds () |
Protected Member Functions | |
| virtual void | generateRenderData () |
| void | clearRenderData () |
| Uint32 | generatePatch (const Rect &src, const Rect &dst, Uint32 offset) |
| CU_DISALLOW_COPY_AND_ASSIGN (NinePatch) | |
Protected Attributes | |
| std::shared_ptr< graphics::Texture > | _texture |
| Rect | _interior |
| bool | _rendered |
| graphics::Mesh< graphics::SpriteVertex > | _mesh |
| graphics::BlendState | _blend |
Additional Inherited Members | |
Public Types inherited from cugl::scene2::SceneNode | |
| enum class | Constraint : int { NONE = 0 , SCENE = 1 , SAFE = 2 , LAYOUT = 3 } |
Public Attributes inherited from cugl::scene2::SceneNode | |
| Vec2 | _position |
| Vec2 | _anchor |
| Size | _contentSize |
| Color4 | _tintColor |
| bool | _hasParentColor |
| bool | _isVisible |
| std::shared_ptr< graphics::Scissor > | _scissor |
| Vec2 | _scale |
| float | _angle |
| Affine2 | _transform |
| bool | _useTransform |
| Affine2 | _combined |
| std::vector< std::shared_ptr< SceneNode > > | _children |
| SceneNode * | _parent |
| Scene2 * | _graph |
| std::shared_ptr< Layout > | _layout |
| Constraint | _constraint |
| int | _childOffset |
| unsigned int | _tag |
| std::string | _name |
| size_t | _hashOfName |
| std::string | _classname |
| float | _priority |
| std::shared_ptr< JsonValue > | _json |
Class to support a ninepatch image
Even though a ninepatch is composed of nine parts, we assume that the ninepatch is specified by a single texture (it would be far too inefficient to spread a ninepatch across multiple textures). Instead, the user specifies the interior of the texture with a rectangle, and the class interpolates the ninepatch from that. If no rectangle is specified, it assumes a degenerate ninepatch with a one-pixel middle.
The interior rectangle is specified in pixel coordinates. As with PolygonNode, we assume that the pixel origin is the bottom-left corner of the image.
| cugl::scene2::NinePatch::NinePatch | ( | ) |
|
inline |
Deletes this node, releasing all resources.
|
inlinestatic |
Returns a simple NinePatch with the degenerate texture.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. However, the result will just be rectangle the same size as the blank texture, and so will not be very interesting.
|
inlinestatic |
Returns a newly allocated node with the given JSON specificaton.
This initializer is designed to receive the "data" object from the JSON passed to Scene2Loader. This JSON format supports all of the attribute values of its parent class. In addition, it supports the following additional attributes:
"texture": The name of a previously loaded texture asset "interior": An four-element array of numbers (x,y,width,height) "blend": A string matching a blend mode.
All attributes are optional. However, it is generally a good idea to specify both to take full advantage of NinePatch features.
| manager | The asset manager handling this asset |
| data | The JSON object specifying the node |
|
inlinestatic |
Returns a newly allocated NinePatch with the given interior from the image filename.
The interior rectangle is specified in pixel coordinates. As with PolygonNode, we assume that the pixel origin is the bottom-left corner of the image.
The interior rectangle fully defines the NinePatch. For example, suppose the rectangle has origin (2,3) and size (4,2). Then (1,1) is in the bottom left corner, while (3,1) is in the bottom middle, and so on.
| filename | A path to image file, e.g., "scene1/earthtile.png" |
|
inlinestatic |
Returns a newly allocated NinePatch with the given interior from the image filename.
The interior rectangle is specified in pixel coordinates. As with PolygonNode, we assume that the pixel origin is the bottom-left corner of the image.
The interior rectangle fully defines the NinePatch. Any pixel to the left and above the rectangle is in the top right corner, and so on.
| filename | A path to image file, e.g., "scene1/earthtile.png" |
| interior | The rectangle (in pixel coordinates) defining the interior. |
|
inlinestatic |
Returns a newly allocated degenerate NinePatch from a Texture object.
After creation, this will be a degenerate NinePatch. It will identify the center pixel of the image as the interior. All other pixels will either be a corner or side.
| texture | A shared pointer to a Texture object. |
|
inlinestatic |
Returns a newly allocated NinePatch with the given interior from a Texture object.
The interior rectangle is specified in pixel coordinates. As with PolygonNode, we assume that the pixel origin is the bottom-left corner of the image.
The interior rectangle fully defines the NinePatch. For example, suppose the rectangle has origin (2,3) and size (4,2). Then (1,1) is in the bottom left corner, while (3,1) is in the bottom middle, and so on.
| texture | A shared pointer to a Texture object. |
| interior | The rectangle (in pixel coordinates) defining the interior. |
|
protected |
Clears the render data, releasing all vertices and indices.
|
protected |
This macro disables the copy constructor (not allowed on scene graphs)
|
overridevirtual |
Disposes all of the resources used by this node.
A disposed Node can be safely reinitialized. Any children owned by this node will be released. They will be deleted if no other object owns them.
It is unsafe to call this on a Node that is still currently inside of a scene graph.
Reimplemented from cugl::scene2::SceneNode.
|
overridevirtual |
Draws this Node via the given SpriteBatch.
This method provides the code for drawing a nine-patch stretched to fill the current node content size. This method only worries about drawing the current node. It does not attempt to render the children. Note that this method is guaranteed to only be called when the node is visible.
| batch | The SpriteBatch to draw with. |
| transform | The global transformation matrix. |
| tint | The tint to blend with the Node color. |
Reimplemented from cugl::scene2::SceneNode.
|
protected |
Generates the textured quad for one of the nine patches.
This function generates a quad for the rectangle dst, using the subtexture identified by src. If dst is larger than src, the image is stretched to fit.
The value offset specifies the initial index to use for _indices. The indices for all created vertices are start from this value. The value returned is the next index available.
| src | The subtexture region to use |
| dst | The rectangle to texture and to add to _vertices |
| offset | The first available vertex index |
|
protectedvirtual |
Allocate the render data necessary to render this node.
|
inline |
Returns the color blend state for this NinePatch.
Note that if color blending was set using setBlendMode, that blend mode was expanded into a blend state, and this value will be the result of this expansion. By default this value is equivalent to graphics::BlendMode#PREMULT, as image files are loaded with premultiplied alpha.
This blend state only affects the texture of the current node. It does not affect any children of the node.
|
inline |
Returns the interior rectangle defining the NinePatch.
The interior rectangle is specified in pixel coordinates. As with PolygonNode, we assume that the pixel origin is the bottom-left corner of the image.
The interior rectangle fully defines the NinePatch. For example, suppose the rectangle has origin (2,3) and size (4,2). Then (1,1) is in the bottom left corner, while (3,1) is in the bottom middle, and so on.
|
inline |
Returns the texture used by this node.
|
inline |
Returns the texture used by this node.
|
inlineoverridevirtual |
Intializes a simple NinePatch with the degenerate texture.
You do not need to set the texture; rendering this into a SpriteBatch will simply use the blank texture. However, the result will just be rectangle the same size as the blank texture, and so will not be very interesting.
Reimplemented from cugl::scene2::SceneNode.
|
overridevirtual |
Initializes a node with the given JSON specificaton.
This initializer is designed to receive the "data" object from the JSON passed to Scene2Loader. This JSON format supports all of the attribute values of its parent class. In addition, it supports the following additional attributes:
"texture": The name of a previously loaded texture asset "interior": An four-element array of numbers (x,y,width,height) "blend": A string matching a blend mode.
All attributes are optional. However, it is generally a good idea to specify both to take full advantage of NinePatch features.
| manager | The asset manager handling this asset |
| data | The JSON object specifying the node |
Reimplemented from cugl::scene2::SceneNode.
| bool cugl::scene2::NinePatch::initWithFile | ( | const std::string | filename | ) |
Intializes a degenerate NinePatch from the image filename.
After creation, this will be a degenerate NinePatch. It will identify the center pixel of the image as the interior. All other pixels will either be a corner or side.
| filename | A path to image file, e.g., "scene1/earthtile.png" |
| bool cugl::scene2::NinePatch::initWithFile | ( | const std::string | filename, |
| const Rect & | interior | ||
| ) |
Initializes a NinePatch with the given interior from the image filename.
The interior rectangle is specified in pixel coordinates. As with PolygonNode, we assume that the pixel origin is the bottom-left corner of the image.
The interior rectangle fully defines the NinePatch. For example, suppose the rectangle has origin (2,3) and size (4,2). Then (1,1) is in the bottom left corner, while (3,1) is in the bottom middle, and so on.
| filename | A path to image file, e.g., "scene1/earthtile.png" |
| interior | The rectangle (in pixel coordinates) defining the interior. |
| bool cugl::scene2::NinePatch::initWithTexture | ( | const std::shared_ptr< graphics::Texture > & | texture | ) |
Initializes a degenerate NinePatch from a Texture object.
After creation, this will be a degenerate NinePatch. It will identify the center pixel of the image as the interior. All other pixels will either be a corner or side.
| texture | A shared pointer to a Texture object. |
| bool cugl::scene2::NinePatch::initWithTexture | ( | const std::shared_ptr< graphics::Texture > & | texture, |
| const Rect & | interior | ||
| ) |
Initializes a NinePatch with the given interior from a Texture object.
The interior rectangle is specified in pixel coordinates. As with PolygonNode, we assume that the pixel origin is the bottom-left corner of the image.
The interior rectangle fully defines the NinePatch. For example, suppose the rectangle has origin (2,3) and size (4,2). Then (1,1) is in the bottom left corner, while (3,1) is in the bottom middle, and so on.
| texture | A shared pointer to a Texture object. |
| interior | The rectangle (in pixel coordinates) defining the interior. |
|
inline |
Refreshes this node to restore the render data.
|
inline |
Sets the color blend mode for this NinePatch.
By default this value is graphics::BlendMode#PREMULT, as image files are loaded with premultiplied alpha. You cannot determine the blend mode for a node after it is set. You can only get the blend state for that mode with the method getBlendState.
This blend state only affects the texture of the current node. It does not affect any children of the node.
| mode | The color blend mode for this NinePatch. |
|
inline |
Sets the color blend state for this NinePatch.
This provides much more fine-tuned control over color blending that setBlendMode. By default this value is equivalent to graphics::BlendMode#PREMULT, as image files are loaded with premultiplied alpha.
This blend state only affects the texture of the current node. It does not affect any children of the node.
| blend | The color blend state for this NinePatch. |
|
overridevirtual |
Sets the untransformed size of the node.
The content size remains the same no matter how the node is scaled or rotated. All nodes must have a size, though it may be degenerate (0,0).
Changing the size of a rectangle will not change the position of the node. However, if the anchor is not the bottom-left corner, it will change the origin. The Node will grow out from an anchor on an edge, and equidistant from an anchor in the center.
| size | The untransformed size of the node. |
Reimplemented from cugl::scene2::SceneNode.
| void cugl::scene2::NinePatch::setInterior | ( | const Rect & | interior | ) |
Sets the interior rectangle defining the NinePatch.
The interior rectangle is specified in pixel coordinates. As with PolygonNode, we assume that the pixel origin is the bottom-left corner of the image.
The interior rectangle fully defines the NinePatch. For example, suppose the rectangle has origin (2,3) and size (4,2). Then (1,1) is in the bottom left corner, while (3,1) is in the bottom middle, and so on.
| interior | The NinePatch interior |
| void cugl::scene2::NinePatch::setTexture | ( | const std::shared_ptr< graphics::Texture > & | texture | ) |
Sets the node texture to the one specified.
This method will have no effect on the polygon vertices. This class decouples the geometry from the texture. That is because we do not expect the vertices to match the texture perfectly.
| texture | A shared pointer to a Texture object. |
|
inline |
Sets the node texture to a new one allocated from a filename.
This method will have no effect on the polygon vertices. This class decouples the geometry from the texture. That is because we do not expect the vertices to match the texture perfectly.
| filename | A path to image file, e.g., "scene1/earthtile.png" |
|
overridevirtual |
Returns a string representation of this node for debugging purposes.
If verbose is true, the string will include class information. This allows us to unambiguously identify the class.
| verbose | Whether to include class information |
Reimplemented from cugl::scene2::SceneNode.
|
protected |
The blending equation for this texture
|
protected |
The internal grid square in pixel space
|
protected |
The render vertices for this node
|
protected |
Whether we have generated render data for this node
|
protected |
The NinePatch texture