From fbd0d9a3c52d1275a6ce3601bf3ecfd2ebc2a2b4 Mon Sep 17 00:00:00 2001
From: Eduardo Felipe Castegnaro <edufelipe@e3c.com.br>
Date: Mon, 7 Feb 2011 19:33:51 -0200
Subject: [PATCH 1/2] Add orientation support to ethumbd

---
 ethumb/src/bin/ethumbd.c         |   27 +++++++++++++++++++++++++++
 ethumb/src/bin/ethumbd_child.c   |   18 ++++++++++++++++++
 ethumb/src/bin/ethumbd_private.h |    1 +
 3 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/ethumb/src/bin/ethumbd.c b/ethumb/src/bin/ethumbd.c
index 0de7ed5..ec7ebe4 100644
--- a/ethumb/src/bin/ethumbd.c
+++ b/ethumb/src/bin/ethumbd.c
@@ -68,6 +68,7 @@ struct _Ethumb_Setup
       Eina_Bool size : 1;
       Eina_Bool format : 1;
       Eina_Bool aspect : 1;
+      Eina_Bool orientation: 1;
       Eina_Bool crop : 1;
       Eina_Bool quality : 1;
       Eina_Bool compress : 1;
@@ -85,6 +86,7 @@ struct _Ethumb_Setup
    int tw, th;
    int format;
    int aspect;
+   int orientation;
    float cx, cy;
    int quality;
    int compress;
@@ -515,6 +517,7 @@ _ethumbd_pipe_write_setup(struct _Ethumbd *ed, int type, const void *data)
       case ETHUMBD_FDO:
       case ETHUMBD_FORMAT:
       case ETHUMBD_ASPECT:
+      case ETHUMBD_ORIENTATION:
       case ETHUMBD_QUALITY:
       case ETHUMBD_COMPRESS:
       case ETHUMBD_SIZE_W:
@@ -569,6 +572,8 @@ _process_setup(struct _Ethumbd *ed)
      _ethumbd_pipe_write_setup(ed, ETHUMBD_FORMAT, &setup->format);
    if (setup->flags.aspect)
      _ethumbd_pipe_write_setup(ed, ETHUMBD_ASPECT, &setup->aspect);
+   if (setup->flags.orientation)
+     _ethumbd_pipe_write_setup(ed, ETHUMBD_ORIENTATION, &setup->orientation);
    if (setup->flags.crop)
      {
 	_ethumbd_pipe_write_setup(ed, ETHUMBD_CROP_X, &setup->cx);
@@ -1240,6 +1245,27 @@ _ethumb_dbus_aspect_set(struct _Ethumb_Object *eobject __UNUSED__, DBusMessageIt
 }
 
 static int
+_ethumb_dbus_orientation_set(struct _Ethumb_Object *eobject __UNUSED__, DBusMessageIter *iter, struct _Ethumb_Request *request)
+{
+   int type;
+   dbus_int32_t orientation;
+
+   type = dbus_message_iter_get_arg_type(iter);
+   if (type != DBUS_TYPE_INT32)
+     {
+	ERR("invalid param for orientation_set.");
+	return 0;
+     }
+
+   dbus_message_iter_get_basic(iter, &orientation);
+   DBG("setting orientation to: %d", orientation);
+   request->setup.flags.orientation = 1;
+   request->setup.orientation = orientation;
+
+   return 1;
+}
+
+static int
 _ethumb_dbus_crop_set(struct _Ethumb_Object *eobject __UNUSED__, DBusMessageIter *iter, struct _Ethumb_Request *request)
 {
    DBusMessageIter oiter;
@@ -1514,6 +1540,7 @@ static struct
   {"size", _ethumb_dbus_size_set},
   {"format", _ethumb_dbus_format_set},
   {"aspect", _ethumb_dbus_aspect_set},
+  {"orientation", _ethumb_dbus_orientation_set},
   {"crop", _ethumb_dbus_crop_set},
   {"quality", _ethumb_dbus_quality_set},
   {"compress", _ethumb_dbus_compress_set},
diff --git a/ethumb/src/bin/ethumbd_child.c b/ethumb/src/bin/ethumbd_child.c
index 66ded38..38b155d 100644
--- a/ethumb/src/bin/ethumbd_child.c
+++ b/ethumb/src/bin/ethumbd_child.c
@@ -349,6 +349,21 @@ _ec_aspect_set(struct _Ethumbd_Child *ec, Ethumb *e)
 }
 
 static int
+_ec_orientation_set(struct _Ethumbd_Child *ec, Ethumb *e)
+{
+   int r;
+   int value;
+
+   r = _ec_read_safe(STDIN_FILENO, &value, sizeof(value));
+   if (!r)
+     return 0;
+   ethumb_thumb_orientation_set(e, value);
+   DBG("orientation = %d", value);
+
+   return 1;
+}
+
+static int
 _ec_crop_set(struct _Ethumbd_Child *ec, Ethumb *e)
 {
    int r;
@@ -574,6 +589,9 @@ _ec_setup_process(struct _Ethumbd_Child *ec, int index, int type)
       case ETHUMBD_ASPECT:
 	 _ec_aspect_set(ec, e);
 	 break;
+      case ETHUMBD_ORIENTATION:
+	 _ec_orientation_set(ec, e);
+	 break;
       case ETHUMBD_CROP_X:
 	 _ec_crop_set(ec, e);
 	 break;
diff --git a/ethumb/src/bin/ethumbd_private.h b/ethumb/src/bin/ethumbd_private.h
index c8ac4d0..688eadd 100644
--- a/ethumb/src/bin/ethumbd_private.h
+++ b/ethumb/src/bin/ethumbd_private.h
@@ -17,6 +17,7 @@ enum Ethubmd_Setup_Option
    ETHUMBD_SIZE_H,
    ETHUMBD_FORMAT,
    ETHUMBD_ASPECT,
+   ETHUMBD_ORIENTATION,
    ETHUMBD_CROP_X,
    ETHUMBD_CROP_Y,
    ETHUMBD_QUALITY,
-- 
1.7.4

