Crop Changes
authorchitta ranjan <chitta.rs@samsung.com>
Tue, 26 Mar 2013 11:28:14 +0000 (20:28 +0900)
committerchitta ranjan <chitta.rs@samsung.com>
Tue, 26 Mar 2013 11:34:27 +0000 (20:34 +0900)
Change-Id: I55f638c83f29481892e7c6268a6938139f7d9dcb
Signed-off-by: chitta ranjan <chitta.rs@samsung.com>
inc/IvImageCrop.h
src/IvImageCrop.cpp

index c247b0d..f42c0e6 100644 (file)
@@ -86,7 +86,7 @@ private:
        static const int IDA_BUTTON_CANCEL = 104;
 
        Tizen::Graphics::Rectangle __cropBox;
-       Tizen::Base::String __destFilePath;
+       Tizen::Base::String __sourceFilePath;
        Tizen::Graphics::Rectangle __imageBox;
        Tizen::Media::ImageBuffer __imageBuffer;
        int __imageHeight;
index 6c06fc5..fb8a92c 100644 (file)
 #include <FMedia.h>
 #include "IvImageCrop.h"
 #include "IvImageViewerPresentationModel.h"
+#include "IvResourceManager.h"
 #include "IvTypes.h"
 
 using namespace Tizen::App;
 using namespace Tizen::Base;
 using namespace Tizen::Base::Collection;
 using namespace Tizen::Graphics;
+using namespace Tizen::Io;
 using namespace Tizen::Media;
 using namespace Tizen::Ui::Controls;
 using namespace Tizen::Ui::Scenes;
@@ -52,12 +54,10 @@ ImageCropForm::~ImageCropForm(void)
        {
                delete __pCurrentBitmap;
        }
-
        if (__pRectangleBitmap != null)
        {
                delete __pRectangleBitmap;
        }
-
        if (__pCanvas != null)
        {
                delete __pCanvas;
@@ -142,17 +142,17 @@ ImageCropForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId&
                pFilePath = static_cast<String*>(pArgs->GetAt(0));
                delete pArgs;
        }
-       __destFilePath.Append(*pFilePath);
-       __destFilePath.Reverse();
-       int index = 0;
-       String delimiter = L".";
-       __destFilePath.IndexOf(delimiter, 0, index);
-       __destFilePath.Reverse();
-       String stringToInsert = L"_1";
-       __destFilePath.Insert(stringToInsert, __destFilePath.GetLength() - index - 1);
-       __imageBuffer.GetImageInfo(pFilePath->GetPointer(), __imageFormat, __imageWidth, __imageHeight);
-       __imageBuffer.Construct(pFilePath->GetPointer());
-       __pCurrentBitmap = __imageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_RGB565, BUFFER_SCALING_AUTO);
+       else
+       {
+               return;
+       }
+       if (pFilePath != null)
+       {
+               __sourceFilePath.Append(*pFilePath);
+               __imageBuffer.GetImageInfo(pFilePath->GetPointer(), __imageFormat, __imageWidth, __imageHeight);
+               __imageBuffer.Construct(pFilePath->GetPointer());
+               __pCurrentBitmap = __imageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_RGB565, BUFFER_SCALING_AUTO);
+       }
 
        if (__imageWidth > GetClientAreaBounds().width && __imageHeight > GetClientAreaBounds().height)
        {
@@ -227,13 +227,17 @@ ImageCropForm::OnDraw(void)
        AppLogDebug("ENTER");
        if (__pCanvas != null)
        {
-               __pCanvas->SetLineWidth(CROP_BOX_LINE_WIDTH);
-               __pCanvas->DrawBitmap(Rectangle(__imageBox.x, __imageBox.y, __imageBox.width, __imageBox.height), *__pCurrentBitmap);
-               __pCanvas->DrawRectangle(Rectangle(__cropBox.x, __cropBox.y, __cropBox.width, __cropBox.height));
-               __pCanvas->DrawBitmap(Rectangle((__cropBox.x + __cropBox.width / 2) - (CROP_RECTANGLE_HEIGHT / 2), __cropBox.y - (CROP_RECTANGLE_HEIGHT / 2), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); // Top Rectangle
-               __pCanvas->DrawBitmap(Rectangle((__cropBox.x + __cropBox.width / 2) - (CROP_RECTANGLE_HEIGHT / 2), (__cropBox.y + __cropBox.height - (CROP_RECTANGLE_HEIGHT / 2)), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); // Bottom Rectangle
-               __pCanvas->DrawBitmap(Rectangle(__cropBox.x - (CROP_RECTANGLE_HEIGHT / 2), (__cropBox.y + __cropBox.height / 2) - (CROP_RECTANGLE_HEIGHT / 2), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); //Left Rectangle
-               __pCanvas->DrawBitmap(Rectangle(__cropBox.x + __cropBox.width - (CROP_RECTANGLE_HEIGHT / 2), (__cropBox.y + __cropBox.height / 2) - (CROP_RECTANGLE_HEIGHT / 2), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); //Right Rectangle
+               r = __pCanvas->SetLineWidth(CROP_BOX_LINE_WIDTH);
+               r = __pCanvas->DrawBitmap(Rectangle(__imageBox.x, __imageBox.y, __imageBox.width, __imageBox.height), *__pCurrentBitmap);
+               r = __pCanvas->DrawRectangle(Rectangle(__cropBox.x, __cropBox.y, __cropBox.width, __cropBox.height));
+               r = __pCanvas->DrawBitmap(Rectangle((__cropBox.x + __cropBox.width / 2) - (CROP_RECTANGLE_HEIGHT / 2), __cropBox.y - (CROP_RECTANGLE_HEIGHT / 2), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); // Top Rectangle
+               r = __pCanvas->DrawBitmap(Rectangle((__cropBox.x + __cropBox.width / 2) - (CROP_RECTANGLE_HEIGHT / 2), (__cropBox.y + __cropBox.height - (CROP_RECTANGLE_HEIGHT / 2)), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); // Bottom Rectangle
+               r = __pCanvas->DrawBitmap(Rectangle(__cropBox.x - (CROP_RECTANGLE_HEIGHT / 2), (__cropBox.y + __cropBox.height / 2) - (CROP_RECTANGLE_HEIGHT / 2), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); //Left Rectangle
+               r = __pCanvas->DrawBitmap(Rectangle(__cropBox.x + __cropBox.width - (CROP_RECTANGLE_HEIGHT / 2), (__cropBox.y + __cropBox.height / 2) - (CROP_RECTANGLE_HEIGHT / 2), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); //Right Rectangle
+               r = __pCanvas->DrawBitmap(Rectangle(__cropBox.x - (CROP_RECTANGLE_HEIGHT / 2), __cropBox.y - (CROP_RECTANGLE_HEIGHT / 2), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); // Top Left Rectangle
+               r = __pCanvas->DrawBitmap(Rectangle(__cropBox.x + __cropBox.width - (CROP_RECTANGLE_HEIGHT / 2), __cropBox.y - (CROP_RECTANGLE_HEIGHT / 2), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); // Top Right Rectangle
+               r = __pCanvas->DrawBitmap(Rectangle(__cropBox.x + __cropBox.width - (CROP_RECTANGLE_HEIGHT / 2), (__cropBox.y + __cropBox.height - (CROP_RECTANGLE_HEIGHT / 2)), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); // Bottom Right Rectangle
+               r = __pCanvas->DrawBitmap(Rectangle(__cropBox.x - (CROP_RECTANGLE_HEIGHT / 2), (__cropBox.y + __cropBox.height - (CROP_RECTANGLE_HEIGHT / 2)), CROP_RECTANGLE_HEIGHT, CROP_RECTANGLE_HEIGHT), *__pRectangleBitmap); // Bottom Left Rectangle
        }
        AppLogDebug("EXIT");
        return r;
@@ -250,12 +254,32 @@ ImageCropForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
                break;
        case IDA_BUTTON_SAVE:
        {
-               ImageBuffer* pCropbuffer = null;
-               pCropbuffer = __imageBuffer.CropN(((__cropBox.x - __imageBox.x) * __imageWidth) / __imageBox.width, ((__cropBox.y - __imageBox.y) * __imageHeight) / __imageBox.height,
-                                        (__cropBox.width * __imageWidth) / __imageBox.width, (__cropBox.height * __imageHeight) / __imageBox.height);
-               pCropbuffer->EncodeToFile(__destFilePath, __imageFormat, true, 100);
-               delete pCropbuffer;
-
+               ImageBuffer* pCropBuffer = null;
+               int count = 1;
+               int index = 0;
+               String destFilePath;
+               String stringToInsert = L"_";
+               String delimiter = L".";
+               if (__sourceFilePath.IsEmpty() == false)
+               {
+                       __sourceFilePath.Reverse();
+                       __sourceFilePath.IndexOf(delimiter, 0, index);
+                       __sourceFilePath.Reverse();
+                       __sourceFilePath.Insert(stringToInsert, __sourceFilePath.GetLength() - index - 1);
+                       destFilePath.Append(__sourceFilePath);
+                       destFilePath.Insert(count, destFilePath.GetLength() - index - 1);
+                       while (File::IsFileExist(destFilePath) == true)
+                       {
+                               count++;
+                               destFilePath.Clear();
+                               destFilePath.Append(__sourceFilePath);
+                               destFilePath.Insert(count, destFilePath.GetLength() - index - 1);
+                       }
+                       pCropBuffer = __imageBuffer.CropN(((__cropBox.x - __imageBox.x) * __imageWidth) / __imageBox.width, ((__cropBox.y - __imageBox.y) * __imageHeight) / __imageBox.height,
+                                               (__cropBox.width * __imageWidth) / __imageBox.width, (__cropBox.height * __imageHeight) / __imageBox.height);
+                       pCropBuffer->EncodeToFile(destFilePath, __imageFormat, true, 100);
+                       delete pCropBuffer;
+               }
                pSceneManager->GoBackward(BackwardSceneTransition());
                AppLog("Exit");
        }
@@ -276,73 +300,81 @@ void
 ImageCropForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo)
 {
        AppLogDebug("ENTER");
+       int deltaX = currentPosition.x - __touchStart.x;
+       int deltaY = currentPosition.y - __touchStart.y;
        if (__pointLocation == INSIDE_TOP_RECTANGLE)
        {
-               int deltaY = currentPosition.y - __touchStart.y;
-
-               if ((__cropBox.y + deltaY) > __imageBox.y)
+               if ((__cropBox.y + deltaY) > __imageBox.y && deltaY < (__cropBox.height - (CROP_RECTANGLE_HEIGHT * 3)))
                {
-                       if (__cropBox.height <= (CROP_RECTANGLE_HEIGHT * 2) && deltaY > 0)
-                       {
-                               __cropBox.height = (CROP_RECTANGLE_HEIGHT * 2);
-                       }
-                       else
-                       {
-                               __cropBox.y += deltaY;
-                               __cropBox.height -= deltaY;
-                       }
+                       __cropBox.y += deltaY;
+                       __cropBox.height -= deltaY;
                }
-               RequestRedraw(false);
        }
        else if (__pointLocation == INSIDE_BOTTOM_RECTANGLE)
        {
-               int deltaY = currentPosition.y - __touchStart.y;
-               if ((__cropBox.y + __cropBox.height + deltaY ) < (__imageBox.y + __imageBox.height) && deltaY < __cropBox.height)
+               if ((__cropBox.y + __cropBox.height + deltaY ) < (__imageBox.y + __imageBox.height) && (__cropBox.height + deltaY) > (CROP_RECTANGLE_HEIGHT * 3))
                {
-                       if (__cropBox.height <= (CROP_RECTANGLE_HEIGHT * 2) && deltaY < 0)
-                       {
-                               __cropBox.height = (CROP_RECTANGLE_HEIGHT * 2);
-                       }
-                       else
-                       {
-                               __cropBox.height += deltaY;
-                       }
+                       __cropBox.height += deltaY;
                }
-               RequestRedraw(false);
        }
        else if (__pointLocation == INSIDE_LEFT_RECTANGLE)
        {
-               int deltaX = currentPosition.x - __touchStart.x;
-               if ((__cropBox.x + deltaX) > __imageBox.x && deltaX < __cropBox.width)
+               if ((__cropBox.x + deltaX) > __imageBox.x && deltaX < __cropBox.width - (CROP_RECTANGLE_HEIGHT * 3))
                {
-                       if (__cropBox.width <= (CROP_RECTANGLE_HEIGHT * 2) && deltaX > 0)
-                       {
-                               __cropBox.width = (CROP_RECTANGLE_HEIGHT * 2);
-                       }
-                       else
-                       {
-                               __cropBox.x += deltaX;
-                               __cropBox.width -= deltaX;
-                       }
+                       __cropBox.x += deltaX;
+                       __cropBox.width -= deltaX;
                }
-               RequestRedraw(false);
        }
        else if (__pointLocation == INSIDE_RIGHT_RECTANGLE)
        {
-               int deltaX = currentPosition.x - __touchStart.x;
-               if ((__cropBox.x + __cropBox.width + deltaX) < (__imageBox.x + __imageBox.width) && deltaX < __cropBox.width)
+               if ((__cropBox.x + __cropBox.width + deltaX) < (__imageBox.x + __imageBox.width) && __cropBox.width + deltaX > (CROP_RECTANGLE_HEIGHT * 3))
+               {
+                       __cropBox.width += deltaX;
+               }
+       }
+       else if (__pointLocation == INSIDE_TOP_LEFT_RECTANGLE)
+       {
+               if ((__cropBox.y + deltaY) > __imageBox.y && deltaY < (__cropBox.height - (CROP_RECTANGLE_HEIGHT * 3))
+                               && (__cropBox.x + deltaX) > __imageBox.x && deltaX < __cropBox.width - (CROP_RECTANGLE_HEIGHT * 3))
+               {
+                       __cropBox.y += deltaY;
+                       __cropBox.height -= deltaY;
+                       __cropBox.x += deltaX;
+                       __cropBox.width -= deltaX;
+               }
+       }
+       else if (__pointLocation == INSIDE_TOP_RIGHT_RECTANGLE)
+       {
+               if ((__cropBox.y + deltaY) > __imageBox.y && deltaY < (__cropBox.height - (CROP_RECTANGLE_HEIGHT * 3))
+                               && (__cropBox.x + __cropBox.width + deltaX) < (__imageBox.x + __imageBox.width) && __cropBox.width + deltaX > (CROP_RECTANGLE_HEIGHT * 3))
                {
-                       if (__cropBox.width <= (CROP_RECTANGLE_HEIGHT * 2) && deltaX < 0)
-                               __cropBox.width = (CROP_RECTANGLE_HEIGHT * 2);
-                       else
                        __cropBox.width += deltaX;
+                       __cropBox.y += deltaY;
+                       __cropBox.height -= deltaY;
+               }
+       }
+       else if (__pointLocation == INSIDE_BOTTOM_LEFT_RECTANGLE)
+       {
+               if ((__cropBox.y + __cropBox.height + deltaY ) < (__imageBox.y + __imageBox.height) && (__cropBox.height + deltaY) > (CROP_RECTANGLE_HEIGHT * 3)
+                       && (__cropBox.x + deltaX) > __imageBox.x && deltaX < __cropBox.width - (CROP_RECTANGLE_HEIGHT * 3))
+               {
+                       __cropBox.x += deltaX;
+                       __cropBox.width -= deltaX;
+                       __cropBox.height += deltaY;
                }
-               RequestRedraw(false);
+       }
+       else if (__pointLocation == INSIDE_BOTTOM_RIGHT_RECTANGLE)
+       {
+               if ((__cropBox.x + __cropBox.width + deltaX) < (__imageBox.x + __imageBox.width) && __cropBox.width + deltaX > (CROP_RECTANGLE_HEIGHT * 3)
+                       && (__cropBox.y + __cropBox.height + deltaY ) < (__imageBox.y + __imageBox.height) && (__cropBox.height + deltaY) > (CROP_RECTANGLE_HEIGHT * 3))
+               {
+                       __cropBox.width += deltaX;
+                       __cropBox.height += deltaY;
+               }
+
        }
        else if (__pointLocation == INSIDE_CROPBOX)
        {
-               int deltaX = currentPosition.x - __touchStart.x;
-               int deltaY = currentPosition.y - __touchStart.y;
                if ((__cropBox.x + deltaX) > __imageBox.x)
                {
                        __cropBox.x += deltaX;
@@ -367,8 +399,8 @@ ImageCropForm::OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graph
                {
                        __cropBox.y = __imageBox.y + __imageBox.height - __cropBox.height;
                }
-               RequestRedraw(false);
        }
+       RequestRedraw(false);
        __touchStart = currentPosition;
        AppLogDebug("EXIT");
 }
@@ -405,6 +437,26 @@ ImageCropForm::CheckCurrentPosition(const Point currentPosition)
        {
                __pointLocation = INSIDE_BOTTOM_RECTANGLE;
        }
+       else if (currentPosition.x > (__cropBox.x - (CROP_RECTANGLE_HEIGHT / 2)) && currentPosition.x < (__cropBox.x + (CROP_RECTANGLE_HEIGHT / 2))
+                        && currentPosition.y > (__cropBox.y - (CROP_RECTANGLE_HEIGHT / 2)) && currentPosition.y < (__cropBox.y +(CROP_RECTANGLE_HEIGHT / 2)))
+       {
+               __pointLocation = INSIDE_TOP_LEFT_RECTANGLE;
+       }
+       else if (currentPosition.x > ((__cropBox.x + __cropBox.width / 2) - (CROP_RECTANGLE_HEIGHT / 2)) && currentPosition.x < (__cropBox.x + __cropBox.width + (CROP_RECTANGLE_HEIGHT / 2))
+                       && currentPosition.y > (__cropBox.y - (CROP_RECTANGLE_HEIGHT / 2)) && currentPosition.y < (__cropBox.y +(CROP_RECTANGLE_HEIGHT / 2)))
+       {
+               __pointLocation = INSIDE_TOP_RIGHT_RECTANGLE;
+       }
+       else if (currentPosition.x > (__cropBox.x + __cropBox.width - (CROP_RECTANGLE_HEIGHT / 2)) && currentPosition.x < (__cropBox.x + __cropBox.width + (CROP_RECTANGLE_HEIGHT / 2))
+                       && currentPosition.y > (__cropBox.y + __cropBox.height - (CROP_RECTANGLE_HEIGHT / 2)) && currentPosition.y < (__cropBox.y + __cropBox.height + (CROP_RECTANGLE_HEIGHT / 2)))
+       {
+               __pointLocation = INSIDE_BOTTOM_RIGHT_RECTANGLE;
+       }
+       else if (currentPosition.x > (__cropBox.x - (CROP_RECTANGLE_HEIGHT / 2)) && currentPosition.x < (__cropBox.x + (CROP_RECTANGLE_HEIGHT / 2))
+                       && currentPosition.y > (__cropBox.y + __cropBox.height - (CROP_RECTANGLE_HEIGHT / 2)) && currentPosition.y < (__cropBox.y + __cropBox.height + (CROP_RECTANGLE_HEIGHT / 2)))
+       {
+               __pointLocation = INSIDE_BOTTOM_LEFT_RECTANGLE;
+       }
        else if (currentPosition.x > __cropBox.x && currentPosition.x < (__cropBox.x + __cropBox.width) && currentPosition.y > __cropBox.y && currentPosition.y < (__cropBox.y + __cropBox.height))
        {
                __pointLocation = INSIDE_CROPBOX;