/* Copyright (C) 2007 The cluttermm Development Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <cluttermm/behaviour.h>
#include <cluttermm/alpha.h>
#include <cluttermm/types.h>

_DEFS(cluttermm,clutter)
_PINCLUDE(cluttermm/private/behaviour_p.h)


namespace Clutter
{

class BehaviourEllipse : public Behaviour
{
  _CLASS_GOBJECT(BehaviourEllipse, ClutterBehaviourEllipse, CLUTTER_BEHAVIOUR_ELLIPSE, Behaviour, ClutterBehaviour)

protected:
  //Hand-coded because x and y must be combined into one ClutterKnot center parameter.
  BehaviourEllipse(const Glib::RefPtr<Alpha>& alpha, int x, int y, int width, int height, RotateDirection direction, double angle_start, double angle_end);
  _IGNORE(clutter_behaviour_ellipse_new)

public:
  _WRAP_CREATE(const Glib::RefPtr<Alpha>& alpha, int x, int y, int width, int height, RotateDirection direction, double begin, double end)

  _WRAP_METHOD(void set_center(int x, int y), clutter_behaviour_ellipse_set_center)
  _WRAP_METHOD(void get_center(int& x, int& y) const, clutter_behaviour_ellipse_get_center)

  _WRAP_METHOD(void set_height(int height), clutter_behaviour_ellipse_set_height)
  _WRAP_METHOD(int get_height() const, clutter_behaviour_ellipse_get_height)
  _WRAP_METHOD(void set_width(int width), clutter_behaviour_ellipse_set_width)
  _WRAP_METHOD(int get_width() const, clutter_behaviour_ellipse_get_width)

  _WRAP_METHOD(void set_angle_start(double angle_start), clutter_behaviour_ellipse_set_angle_start)
  _WRAP_METHOD(double get_angle_start() const, clutter_behaviour_ellipse_get_angle_start)
  _WRAP_METHOD(void set_angle_end(double angle_end), clutter_behaviour_ellipse_set_angle_end)
  _WRAP_METHOD(double get_angle_end() const, clutter_behaviour_ellipse_get_angle_end)
  _WRAP_METHOD(void set_angle_tilt(RotateAxis axis, double angle_tilt), clutter_behaviour_ellipse_set_angle_tilt)
  _WRAP_METHOD(double get_angle_tilt(RotateAxis axis) const, clutter_behaviour_ellipse_get_angle_tilt)

  _WRAP_METHOD(void set_tilt(double angle_tilt_x, double angle_tilt_y, double angle_tilt_z), clutter_behaviour_ellipse_set_tilt)
  _WRAP_METHOD(void get_tilt(double& angle_tilt_x, double& angle_tilt_y, double& angle_tilt_z) const, clutter_behaviour_ellipse_get_tilt)

  _WRAP_METHOD(void set_direction(RotateDirection direction), clutter_behaviour_ellipse_set_direction)
  _WRAP_METHOD(RotateDirection get_direction() const, clutter_behaviour_ellipse_get_direction)

  _WRAP_PROPERTY("angle-end", double)
  _WRAP_PROPERTY("angle-start", double)
  _WRAP_PROPERTY("angle-tilt-x", double)
  _WRAP_PROPERTY("angle-tilt-y", double)
  _WRAP_PROPERTY("angle-tilt-z", double)
  _WRAP_PROPERTY("center", Knot)
  _WRAP_PROPERTY("direction", RotateDirection)
  _WRAP_PROPERTY("height", int)
  _WRAP_PROPERTY("width", int)
};

} // namespace Clutter
