/* dzl-rect-helper.c
 *
 * Copyright (C) 2015 Christian Hergert <christian@hergert.me>
 *
 * This file 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 file 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 General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#define G_LOG_DOMAIN "dzl-rect-helper"

#include "config.h"

#include <glib/gi18n.h>

#include "widgets/dzl-rect-helper.h"

struct _DzlRectHelper
{
  GObject parent_instance;

  gint x;
  gint y;
  gint width;
  gint height;
};

enum {
  PROP_0,
  PROP_X,
  PROP_Y,
  PROP_WIDTH,
  PROP_HEIGHT,
  LAST_PROP
};

G_DEFINE_TYPE (DzlRectHelper, dzl_rect_helper, G_TYPE_OBJECT)

static GParamSpec *properties [LAST_PROP];

static void
dzl_rect_helper_get_property (GObject    *object,
                              guint       prop_id,
                              GValue     *value,
                              GParamSpec *pspec)
{
  DzlRectHelper *self = DZL_RECT_HELPER (object);

  switch (prop_id)
    {
    case PROP_X:
      g_value_set_int (value, self->x);
      break;

    case PROP_Y:
      g_value_set_int (value, self->y);
      break;

    case PROP_WIDTH:
      g_value_set_int (value, self->width);
      break;

    case PROP_HEIGHT:
      g_value_set_int (value, self->height);
      break;

    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
    }
}

static void
dzl_rect_helper_set_property (GObject      *object,
                              guint         prop_id,
                              const GValue *value,
                              GParamSpec   *pspec)
{
  DzlRectHelper *self = DZL_RECT_HELPER (object);

  switch (prop_id)
    {
    case PROP_X:
      self->x = g_value_get_int (value);
      break;

    case PROP_Y:
      self->y = g_value_get_int (value);
      break;

    case PROP_WIDTH:
      self->width = g_value_get_int (value);
      break;

    case PROP_HEIGHT:
      self->height = g_value_get_int (value);
      break;

    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
    }
}

static void
dzl_rect_helper_class_init (DzlRectHelperClass *klass)
{
  GObjectClass *object_class = G_OBJECT_CLASS (klass);

  object_class->get_property = dzl_rect_helper_get_property;
  object_class->set_property = dzl_rect_helper_set_property;

  properties [PROP_X] =
    g_param_spec_int ("x",
                      "X",
                      "X",
                      G_MININT,
                      G_MAXINT,
                      0,
                      (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

  properties [PROP_Y] =
    g_param_spec_int ("y",
                      "Y",
                      "Y",
                      G_MININT,
                      G_MAXINT,
                      0,
                      (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

  properties [PROP_WIDTH] =
    g_param_spec_int ("width",
                      "Width",
                      "Width",
                      G_MININT,
                      G_MAXINT,
                      0,
                      (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

  properties [PROP_HEIGHT] =
    g_param_spec_int ("height",
                      "Height",
                      "Height",
                      G_MININT,
                      G_MAXINT,
                      0,
                      (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

  g_object_class_install_properties (object_class, LAST_PROP, properties);
}

static void
dzl_rect_helper_init (DzlRectHelper *rect)
{
}

void
dzl_rect_helper_get_rect (DzlRectHelper *self,
                          GdkRectangle  *rect)
{
  g_return_if_fail (DZL_IS_RECT_HELPER (self));
  g_return_if_fail (rect != NULL);

  rect->x = self->x;
  rect->y = self->y;
  rect->width = self->width;
  rect->height = self->height;
}
