applied magnifier and fixed bug
authorChulheon <ch.jeong47@samsung.com>
Fri, 5 Apr 2013 12:19:08 +0000 (21:19 +0900)
committerChulheon <ch.jeong47@samsung.com>
Fri, 5 Apr 2013 12:26:08 +0000 (21:26 +0900)
Change-Id: Ifc01e38c6312581abc1665976ed28265eb9b7a6e

33 files changed:
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_center.png [moved from res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left.png with 70% similarity, mode: 0644]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_center_reverse.png [moved from res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left.png with 70% similarity, mode: 0644]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left.png [moved from res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_reverse.png with 68% similarity]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left_01.png [moved from res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_reverse.png with 68% similarity]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left_reverse.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_right.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_press.png [deleted file]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_press_reverse.png [deleted file]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right.png [deleted file]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_press.png [deleted file]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_press_reverse.png [deleted file]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_reverse.png [deleted file]
res/common/usr/share/osp/bitmaps/480x800/copy&paste_Magnifier.#.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_center.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_center_reverse.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left_01.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left_reverse.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_right.png [new file with mode: 0644]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_press.png [deleted file]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_press_reverse.png [deleted file]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right.png [deleted file]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_press.png [deleted file]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_press_reverse.png [deleted file]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_reverse.png [deleted file]
res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Magnifier.#.png [new file with mode: 0644]
src/ui/controls/FUiCtrl_EditCopyPasteManager.cpp
src/ui/controls/FUiCtrl_EditPresenter.cpp
src/ui/controls/FUiCtrl_Keypad.cpp
src/ui/inc/FUiCtrl_EditCopyPasteManager.h
src/ui/inc/FUiCtrl_EditPresenter.h
src/ui/inc/FUi_ResourceEditConfig.h
src/ui/resource/FUi_ResourceEditConfig.cpp

old mode 100755 (executable)
new mode 100644 (file)
similarity index 70%
rename from res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left.png
rename to res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_center.png
index f632684..4ffab9d
Binary files a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left.png and b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_center.png differ
old mode 100755 (executable)
new mode 100644 (file)
similarity index 70%
rename from res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left.png
rename to res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_center_reverse.png
index f632684..2fbf49d
Binary files a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left.png and b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_center_reverse.png differ
similarity index 68%
rename from res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_reverse.png
rename to res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left.png
index 863c1f6..470413f 100644 (file)
Binary files a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_reverse.png and b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left.png differ
similarity index 68%
rename from res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_reverse.png
rename to res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left_01.png
index 863c1f6..eaf41bc 100644 (file)
Binary files a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_reverse.png and b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left_01.png differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left_reverse.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left_reverse.png
new file mode 100644 (file)
index 0000000..856f764
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_left_reverse.png differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_right.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_right.png
new file mode 100644 (file)
index 0000000..11741e5
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Handler_right.png differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_press.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_press.png
deleted file mode 100755 (executable)
index 24d3570..0000000
Binary files a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_press.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_press_reverse.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_press_reverse.png
deleted file mode 100644 (file)
index 7e94e5f..0000000
Binary files a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_left_press_reverse.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right.png
deleted file mode 100755 (executable)
index e9df81d..0000000
Binary files a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_press.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_press.png
deleted file mode 100755 (executable)
index a81b556..0000000
Binary files a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_press.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_press_reverse.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_press_reverse.png
deleted file mode 100644 (file)
index ab6b886..0000000
Binary files a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_press_reverse.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_reverse.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_reverse.png
deleted file mode 100644 (file)
index 8e6673c..0000000
Binary files a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Icon_right_reverse.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Magnifier.#.png b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Magnifier.#.png
new file mode 100644 (file)
index 0000000..ce0dac7
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/480x800/copy&paste_Magnifier.#.png differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_center.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_center.png
new file mode 100644 (file)
index 0000000..418df8b
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_center.png differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_center_reverse.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_center_reverse.png
new file mode 100644 (file)
index 0000000..8d2532a
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_center_reverse.png differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left.png
new file mode 100644 (file)
index 0000000..69ada63
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left.png differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left_01.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left_01.png
new file mode 100644 (file)
index 0000000..8e1b2be
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left_01.png differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left_reverse.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left_reverse.png
new file mode 100644 (file)
index 0000000..f657c13
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_left_reverse.png differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_right.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_right.png
new file mode 100644 (file)
index 0000000..dc4a8e1
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Handler_right.png differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_press.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_press.png
deleted file mode 100755 (executable)
index 24d3570..0000000
Binary files a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_press.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_press_reverse.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_press_reverse.png
deleted file mode 100644 (file)
index 7e94e5f..0000000
Binary files a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_left_press_reverse.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right.png
deleted file mode 100755 (executable)
index e9df81d..0000000
Binary files a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_press.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_press.png
deleted file mode 100755 (executable)
index a81b556..0000000
Binary files a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_press.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_press_reverse.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_press_reverse.png
deleted file mode 100644 (file)
index ab6b886..0000000
Binary files a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_press_reverse.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_reverse.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_reverse.png
deleted file mode 100644 (file)
index 8e6673c..0000000
Binary files a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Icon_right_reverse.png and /dev/null differ
diff --git a/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Magnifier.#.png b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Magnifier.#.png
new file mode 100644 (file)
index 0000000..cc442f5
Binary files /dev/null and b/res/common/usr/share/osp/bitmaps/720x1280/copy&paste_Magnifier.#.png differ
index 0c32f1c..5447718 100755 (executable)
@@ -36,6 +36,8 @@
 #include "FUi_EcoreEvas.h"
 #include "FUi_Window.h"
 
+#define EDIT_COPY_PASTE_MAGNIFIER 1
+
 using namespace Tizen::Ui;
 using namespace Tizen::App;
 using namespace Tizen::Base;
@@ -55,6 +57,193 @@ const int COPY_PASTE_PASTE_ID = 235;
 const int COPY_PASTE_CLIPBOARD_ID = 236;
 const int COPY_PASTE_SEARCH_ID = 237;
 
+class _EditCopyPasteMagnifier
+       : public _Window
+{
+public:
+       _EditCopyPasteMagnifier(_EditCopyPasteManager* pCopyPasteManager, int handlerCursorPos);
+       virtual ~_EditCopyPasteMagnifier(void);
+       static _EditCopyPasteMagnifier* CreateInstanceN(const FloatPoint& point, int handlerCursorPos, _EditCopyPasteManager* pCopyPasteManager);
+       virtual void OnDraw(void);
+       void CaptureTextArea(Canvas& canvas);
+       void MoveMagnifier(const FloatPoint& point, int handlerCursorPos);
+       Bitmap* GetMagnifierBitmap(void) const;
+
+private:
+       _EditCopyPasteMagnifier(const _EditCopyPasteMagnifier& value);
+       _EditCopyPasteMagnifier& operator =(const _EditCopyPasteMagnifier& value);
+
+private:
+       _EditCopyPasteManager* __pCopyPasteManager;
+       Bitmap* __pMagnifierBitmap;
+       _VisualElement* __pRoot;
+       int __handlerCursorPos;
+};
+
+_EditCopyPasteMagnifier::_EditCopyPasteMagnifier(_EditCopyPasteManager* pCopyPasteManager, int handlerCursorPos)
+       : __pCopyPasteManager(pCopyPasteManager)
+       , __pMagnifierBitmap(null)
+       , __pRoot(null)
+       , __handlerCursorPos(handlerCursorPos)
+{
+       AcquireHandle();
+       __pRoot = GetVisualElement();
+       __pRoot->SetSurfaceOpaque(false);
+
+       GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_MAGNIFIER, BITMAP_PIXEL_FORMAT_ARGB8888, __pMagnifierBitmap);
+}
+
+_EditCopyPasteMagnifier::~_EditCopyPasteMagnifier(void)
+{
+       if (__pMagnifierBitmap)
+       {
+               delete __pMagnifierBitmap;
+               __pMagnifierBitmap = null;
+       }
+}
+
+Bitmap*
+_EditCopyPasteMagnifier::GetMagnifierBitmap(void) const
+{
+       return __pMagnifierBitmap;
+}
+
+_EditCopyPasteMagnifier*
+_EditCopyPasteMagnifier::CreateInstanceN(const FloatPoint& point, int handlerCursorPos, _EditCopyPasteManager* pCopyPasteManager)
+{
+       _EditCopyPasteMagnifier* pCopyPasteMagnifier = new (std::nothrow) _EditCopyPasteMagnifier(pCopyPasteManager, handlerCursorPos);
+       SysTryReturn(NID_UI_CTRL, pCopyPasteMagnifier != null, null, E_OUT_OF_MEMORY, "pCopyPasteMagnifier is null");
+
+       FloatPoint cursorPoint(point);
+       FloatRectangle bounds(0.0f, 0.0f, 0.0f, 0.0f);
+       float width = 0.0f;
+       float height = 0.0f;
+       _Edit* pEdit = pCopyPasteManager->GetEdit();
+       _ControlOrientation orientation = pEdit->GetOrientation();
+
+       Bitmap* pMagnifierBitmap = pCopyPasteMagnifier->GetMagnifierBitmap();
+       SysTryReturn(NID_UI_CTRL, pMagnifierBitmap != null, null, E_OUT_OF_MEMORY, "pMagnifierBitmap is null");
+
+       result r = pCopyPasteMagnifier->CreateRootVisualElement();
+       SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+       pCopyPasteMagnifier->SetActivationEnabled(false);
+
+       GET_SHAPE_CONFIG(EDIT::COPYPASTE_MAGNIFIER_WIDTH, orientation, width);
+       GET_SHAPE_CONFIG(EDIT::COPYPASTE_MAGNIFIER_HEIGHT, orientation, height);
+
+       bounds = FloatRectangle(cursorPoint.x - width/2, cursorPoint.y - height, width, height);
+       pCopyPasteMagnifier->SetBounds(bounds);
+       pCopyPasteMagnifier->Open();
+
+       return pCopyPasteMagnifier;
+
+CATCH:
+       pCopyPasteMagnifier->Close();
+       delete pCopyPasteMagnifier;
+
+       return null;
+}
+
+void
+_EditCopyPasteMagnifier::OnDraw(void)
+{
+       Canvas* pCanvas = GetCanvasN();
+       if (pCanvas == null)
+       {
+               return;
+       }
+       pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
+       pCanvas->Clear();
+       if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pMagnifierBitmap))
+       {
+               pCanvas->DrawNinePatchedBitmap(pCanvas->GetBoundsF(), *__pMagnifierBitmap);
+       }
+       else
+       {
+               pCanvas->DrawBitmap(pCanvas->GetBoundsF(), *__pMagnifierBitmap);
+       }
+
+       CaptureTextArea(*pCanvas);
+
+       delete pCanvas;
+
+}
+
+void
+_EditCopyPasteMagnifier::CaptureTextArea(Canvas& canvas)
+{
+       _Edit* pEdit = __pCopyPasteManager->GetEdit();
+       SysTryReturnVoidResult(NID_UI_CTRL, pEdit, E_INVALID_STATE, "pEdit is null.");
+
+       _EditPresenter* pEditPresenter = pEdit->GetPresenter();
+       SysTryReturnVoidResult(NID_UI_CTRL, pEditPresenter, E_INVALID_STATE, "pEditPresenter is null.");
+
+       _VisualElement* pTextVisualElement = pEditPresenter->GetTextVisualElement();
+       SysTryReturnVoidResult(NID_UI_CTRL, pTextVisualElement, E_INVALID_STATE, "pTextVisualElement is null.");
+
+       Canvas* pTextCanvas = pTextVisualElement->GetCanvasN();
+
+       float captureWidth = 0.0f;
+       float captureHeight = 0.0f;
+       float capturePosX = 0.0f;
+       float capturePosY = 0.0f;
+       FloatRectangle cursorBounds(0.0f, 0.0f, 0.0f, 0.0f);
+       FloatRectangle magnifierBounds = GetBoundsF();
+       pEditPresenter->CalculateCursorBounds(pEditPresenter->GetTextBoundsF(), cursorBounds, __handlerCursorPos);
+
+       GET_SHAPE_CONFIG(EDIT::COPYPASTE_MAGNIFIER_CAPTURE_WIDTH, pEdit->GetOrientation(), captureWidth);
+       GET_SHAPE_CONFIG(EDIT::COPYPASTE_MAGNIFIER_CAPTURE_HEIGHT, pEdit->GetOrientation(), captureHeight);
+       GET_SHAPE_CONFIG(EDIT::COPYPASTE_MAGNIFIER_CAPTURE_POSITION_X, pEdit->GetOrientation(), capturePosX);
+       GET_SHAPE_CONFIG(EDIT::COPYPASTE_MAGNIFIER_CAPTURE_POSITION_Y, pEdit->GetOrientation(), capturePosY);
+
+       FloatRectangle textVisualElementBounds = pTextVisualElement->GetBounds();
+       FloatRectangle captureBounds(0.0f, 0.0f, 0.0f, 0.0f);
+
+       if (cursorBounds.x >= captureWidth/2.0f)
+       {
+               captureBounds.x = cursorBounds.x - captureWidth/2.0f;
+       }
+       else
+       {
+               captureBounds.x = captureWidth/2.0f - cursorBounds.x;
+       }
+       if (cursorBounds.x <=  textVisualElementBounds.width - captureWidth/2.0f)
+       {
+               captureBounds.width = captureWidth;
+       }
+       else
+       {
+               captureBounds.width = textVisualElementBounds.width - captureBounds.x;
+       }
+
+       captureBounds.y = cursorBounds.y;
+       if (cursorBounds.y <=  textVisualElementBounds.height - captureHeight)
+       {
+               captureBounds.height = captureHeight;
+       }
+       else
+       {
+               captureBounds.height = textVisualElementBounds.height - captureBounds.y;
+       }
+
+       Bitmap bitmap;
+       bitmap.Construct(*pTextCanvas, captureBounds);
+       bitmap.Scale(FloatDimension(bitmap.GetWidth()*1.5f, bitmap.GetHeight()*1.5f));
+
+       canvas.DrawBitmap(FloatPoint(capturePosX, capturePosY), bitmap);
+       delete pTextCanvas;
+}
+
+void
+_EditCopyPasteMagnifier::MoveMagnifier(const FloatPoint& point, int handlerCursorPos)
+{
+       FloatRectangle bounds = FloatRectangle(point.x - GetBoundsF().width/2, point.y - GetBoundsF().height, GetBoundsF().width, GetBoundsF().height);
+       __handlerCursorPos = handlerCursorPos;
+       SetBounds(bounds);
+       Invalidate();
+}
+
 /**
 * @class       _EditCopyPasteHandler
 * @brief       This class defines the common behavior for the %_EditCopyPasteHandler.
@@ -100,6 +289,9 @@ public:
        void CheckReverseStatus(void);
        void ChangeHandlerBitmap(void);
        Bitmap* GetHandlerBitmap(void) const;
+       bool CreateCopyPasteMagnifier(void);
+       void DestroyCopyPasteMagnifier(void);
+       void MoveCopyPasteMagnifier(void);
 
 // virtual function
        virtual void OnDraw(void);
@@ -123,7 +315,6 @@ private:
 private:
        _VisualElement* __pRoot;
        Bitmap* __pHandlerBitmap;
-       Bitmap* __pHandlerPressedBitmap;
        FloatPoint __touchPressedPoint;
        _EditCopyPasteManager* __pCopyPasteManager;
        bool __leftHandler;
@@ -132,7 +323,9 @@ private:
        bool __isTouchPressed;
        FloatRectangle __windowBounds;
        HandlerDirection __handlerDirection;
-       
+       bool __singleHandler;
+       _EditCopyPasteMagnifier* __pCopyPasteMagnifier;
+       bool __isTouchMoving;
 }; // _EditCopyPasteHandler
 
 Bitmap*
@@ -141,6 +334,55 @@ _EditCopyPasteHandler::GetHandlerBitmap(void) const
        return __pHandlerBitmap;
 }
 
+bool
+_EditCopyPasteHandler::CreateCopyPasteMagnifier(void)
+{
+       if (!__pCopyPasteMagnifier)
+       {
+               _Edit* pEdit = __pCopyPasteManager->GetEdit();
+               SysTryReturn(NID_UI_CTRL, pEdit, false, E_INVALID_STATE, "[E_INVALID_STATE] pEdit is null.\n");
+
+               _EditPresenter* pEditPresenter = pEdit->GetPresenter();
+               SysTryReturn(NID_UI_CTRL, pEditPresenter, false, E_INVALID_STATE, "[E_INVALID_STATE] pEditPresenter is null.\n");
+
+               FloatRectangle cursorBounds(0.0f, 0.0f, 0.0f, 0.0f);
+               pEdit->CalculateAbsoluteCursorBounds(__handlerCursorPos, cursorBounds);
+
+               __pCopyPasteMagnifier = _EditCopyPasteMagnifier::CreateInstanceN(FloatPoint(cursorBounds.x, cursorBounds.y), __handlerCursorPos, __pCopyPasteManager);
+               SysTryReturn(NID_UI_CTRL, pEdit, false, E_INVALID_STATE, "[E_INVALID_STATE] pEdit is null.\n");
+       }
+       return true;
+}
+
+void
+_EditCopyPasteHandler::DestroyCopyPasteMagnifier(void)
+{
+       if (__pCopyPasteMagnifier)
+       {
+               __pCopyPasteMagnifier->Close();
+               delete __pCopyPasteMagnifier;
+               __pCopyPasteMagnifier = null;
+       }
+}
+
+void
+_EditCopyPasteHandler::MoveCopyPasteMagnifier(void)
+{
+       if (__pCopyPasteMagnifier)
+       {
+               _Edit* pEdit = __pCopyPasteManager->GetEdit();
+               SysTryReturnVoidResult(NID_UI_CTRL, pEdit, E_INVALID_STATE, "pEdit is null.");
+
+               _EditPresenter* pEditPresenter = pEdit->GetPresenter();
+               SysTryReturnVoidResult(NID_UI_CTRL, pEditPresenter, E_INVALID_STATE, "pEditPresenter is null.");
+
+               FloatRectangle cursorBounds(0.0f, 0.0f, 0.0f, 0.0f);
+               pEdit->CalculateAbsoluteCursorBounds(__handlerCursorPos, cursorBounds);
+
+               __pCopyPasteMagnifier->MoveMagnifier(FloatPoint(cursorBounds.x, cursorBounds.y), __handlerCursorPos);
+       }
+}
+
 void
 _EditCopyPasteHandler::ChangeHandlerBitmap(void)
 {
@@ -149,32 +391,23 @@ _EditCopyPasteHandler::ChangeHandlerBitmap(void)
                delete __pHandlerBitmap;
                __pHandlerBitmap = null;
        }
-       if (__pHandlerPressedBitmap)
-       {
-               delete __pHandlerPressedBitmap;
-               __pHandlerPressedBitmap = null;
-       }
        if (__leftHandler)
        {
                switch(__handlerDirection)
                {
                        case HANDLER_DIRECTION_REVERSE_1:
                                GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_RIGHT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_RIGHT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                                break;
                        case HANDLER_DIRECTION_REVERSE_2:
                                GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_REVERSE_LEFT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_REVERSE_LEFT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                                break;
                        case HANDLER_DIRECTION_REVERSE_3:
                                GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_REVERSE_RIGHT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_REVERSE_RIGHT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                                break;
                        case HANDLER_DIRECTION_NONE:
                                //fall through
                        default:
                                GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                                break;          
                }
        }
@@ -184,21 +417,17 @@ _EditCopyPasteHandler::ChangeHandlerBitmap(void)
                {
                        case HANDLER_DIRECTION_REVERSE_1:
                                GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                                break;
                        case HANDLER_DIRECTION_REVERSE_2:
                                GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_REVERSE_RIGHT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_REVERSE_RIGHT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                                break;
                        case HANDLER_DIRECTION_REVERSE_3:
                                GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_REVERSE_LEFT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_REVERSE_LEFT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                                break;
                        case HANDLER_DIRECTION_NONE:
                                //fall through
                        default:
                                GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_RIGHT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_RIGHT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                                break;          
                }
        }
@@ -207,7 +436,6 @@ _EditCopyPasteHandler::ChangeHandlerBitmap(void)
 _EditCopyPasteHandler::_EditCopyPasteHandler(const Point& point, int handlerCursorPos, _EditCopyPasteManager* pCopyPasteManager, bool singleHandler, bool leftHandler)
        : __pRoot(null)
        , __pHandlerBitmap(null)
-       , __pHandlerPressedBitmap(null)
        , __touchPressedPoint(0.0f, 0.0f)
        , __pCopyPasteManager(pCopyPasteManager)
        , __leftHandler(leftHandler)
@@ -216,6 +444,9 @@ _EditCopyPasteHandler::_EditCopyPasteHandler(const Point& point, int handlerCurs
        , __isTouchPressed(false)
        , __windowBounds(0.0f, 0.0f, 0.0f, 0.0f)
        , __handlerDirection(HANDLER_DIRECTION_NONE)
+       , __singleHandler(false)
+       , __pCopyPasteMagnifier(null)
+       , __isTouchMoving(false)
 {
        AcquireHandle();
 
@@ -226,21 +457,20 @@ _EditCopyPasteHandler::_EditCopyPasteHandler(const Point& point, int handlerCurs
 
        if (singleHandler)
        {
-               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
+               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_CENTER_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
                handlerPoint.x = handlerPoint.x - (__pHandlerBitmap->GetWidth() / 2);
+               __singleHandler = true;
        }
        else
        {
                if (leftHandler)
                {
                        GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                       GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                        handlerPoint.x = handlerPoint.x - __pHandlerBitmap->GetWidth();
                }
                else
                {
                        GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_RIGHT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                       GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_RIGHT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                }
        }
 
@@ -250,7 +480,6 @@ _EditCopyPasteHandler::_EditCopyPasteHandler(const Point& point, int handlerCurs
 _EditCopyPasteHandler::_EditCopyPasteHandler(const FloatPoint& point, int handlerCursorPos, _EditCopyPasteManager* pCopyPasteManager, bool singleHandler, bool leftHandler)
        : __pRoot(null)
        , __pHandlerBitmap(null)
-       , __pHandlerPressedBitmap(null)
        , __touchPressedPoint(0.0f, 0.0f)
        , __pCopyPasteManager(pCopyPasteManager)
        , __leftHandler(leftHandler)
@@ -259,6 +488,9 @@ _EditCopyPasteHandler::_EditCopyPasteHandler(const FloatPoint& point, int handle
        , __isTouchPressed(false)
        , __windowBounds(0.0f, 0.0f, 0.0f, 0.0f)
        , __handlerDirection(HANDLER_DIRECTION_NONE)
+       , __singleHandler(false)
+       , __pCopyPasteMagnifier(null)
+       , __isTouchMoving(false)
 {
        AcquireHandle();
 
@@ -270,21 +502,20 @@ _EditCopyPasteHandler::_EditCopyPasteHandler(const FloatPoint& point, int handle
        FloatPoint handlerPoint(point);
        if (singleHandler)
        {
-               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
+               GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_CENTER_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
                handlerPoint.x = handlerPoint.x - (__pHandlerBitmap->GetWidthF() / 2.0f);
+               __singleHandler = true;
        }
        else
        {
                if (leftHandler)
                {
                        GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                       GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_LEFT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                        handlerPoint.x = handlerPoint.x - __pHandlerBitmap->GetWidthF();
                }
                else
                {
                        GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_RIGHT_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerBitmap);
-                       GET_BITMAP_CONFIG_N(EDIT::COPY_PASTE_ICON_RIGHT_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, __pHandlerPressedBitmap);
                }
        }
        
@@ -293,16 +524,13 @@ _EditCopyPasteHandler::_EditCopyPasteHandler(const FloatPoint& point, int handle
 
 _EditCopyPasteHandler::~_EditCopyPasteHandler(void)
 {
+       DestroyCopyPasteMagnifier();
+
        if (__pHandlerBitmap)
        {
                delete __pHandlerBitmap;
                __pHandlerBitmap = null;
        }
-       if (__pHandlerPressedBitmap)
-       {
-               delete __pHandlerPressedBitmap;
-               __pHandlerPressedBitmap = null;
-       }
 }
 
 _EditCopyPasteHandler*
@@ -410,64 +638,75 @@ _EditCopyPasteHandler::SetHandlerCursorPosition(int handlerCursorPos)
 void
 _EditCopyPasteHandler::AdjustBounds(void)
 {
-       int previousCursorPos;
        FloatRectangle cursorRect;
        FloatRectangle rect = GetBoundsF();
        FloatPoint checkPoint(0.0f, 0.0f);
+       _Edit* pEdit = __pCopyPasteManager->GetEdit();
+       _EditPresenter* pEditPresenter = pEdit->GetPresenter();
 
-       previousCursorPos = __pCopyPasteManager->GetCursorPosition();
-       __pCopyPasteManager->SetCursorPosition(__handlerCursorPos);
-       cursorRect = __pCopyPasteManager->GetCursorBoundsF(true);
-       __pCopyPasteManager->SetCursorPosition(previousCursorPos);
+       if (__singleHandler)
+       {
+               cursorRect = __pCopyPasteManager->GetCursorBoundsF(true);
+               rect.x = cursorRect.x - __pHandlerBitmap->GetWidthF()/2.0f;
+               rect.y = cursorRect.y + cursorRect.height;
+               checkPoint = FloatPoint(cursorRect.x , cursorRect.y + cursorRect.height);
+       }
+       else
+       {
+               pEditPresenter->CalculateAbsoluteCursorBounds(__handlerCursorPos, cursorRect);
 
-       rect.x = cursorRect.x;
-       rect.y = cursorRect.y + cursorRect.height;
+               rect.x = cursorRect.x;
+               rect.y = cursorRect.y + cursorRect.height;
 
-       checkPoint = FloatPoint(rect.x, rect.y);
+               checkPoint = FloatPoint(cursorRect.x + cursorRect.width/2.0f, cursorRect.y + cursorRect.height);
 
-       if (__leftHandler)
-       {
-               if (__handlerDirection == HANDLER_DIRECTION_NONE)
-               {
-                       rect.x = rect.x - __pHandlerBitmap->GetWidthF();
-               }
-               else if (__handlerDirection == HANDLER_DIRECTION_REVERSE_2)
+               if (__leftHandler)
                {
-                       rect.x = rect.x - __pHandlerBitmap->GetWidthF();
-                       rect.y -= rect.height;
+                       if (__handlerDirection == HANDLER_DIRECTION_NONE)
+                       {
+                               rect.x = rect.x - __pHandlerBitmap->GetWidthF();
+                       }
+                       else if (__handlerDirection == HANDLER_DIRECTION_REVERSE_2)
+                       {
+                               rect.x = rect.x - __pHandlerBitmap->GetWidthF();
+                               rect.y -= rect.height;
+                       }
+                       else if (__handlerDirection == HANDLER_DIRECTION_REVERSE_3)
+                       {
+                               rect.y -= rect.height;
+                       }
                }
-               else if (__handlerDirection == HANDLER_DIRECTION_REVERSE_3)
+               else
                {
-                       rect.y -= rect.height;                  
+                       if (__handlerDirection == HANDLER_DIRECTION_REVERSE_1)
+                       {
+                               rect.x = rect.x - __pHandlerBitmap->GetWidthF();
+                       }
+                       else if (__handlerDirection == HANDLER_DIRECTION_REVERSE_2)
+                       {
+                               rect.y -= rect.height;
+                       }
+                       else if (__handlerDirection == HANDLER_DIRECTION_REVERSE_3)
+                       {
+                               rect.x = rect.x - __pHandlerBitmap->GetWidthF();
+                               rect.y -= rect.height;
+                       }
                }
        }
-       else
+
+       if (!__isTouchMoving)
        {
-               if (__handlerDirection == HANDLER_DIRECTION_REVERSE_1)
+               bool visibleState = __pCopyPasteManager->CheckHandleBounds(checkPoint);
+               if (visibleState && !GetVisibleState())
                {
-                       rect.x = rect.x - __pHandlerBitmap->GetWidthF();
+                       SetVisibleState(true);
+                       Open();
                }
-               else if (__handlerDirection == HANDLER_DIRECTION_REVERSE_2)
+               else if (!visibleState && GetVisibleState())
                {
-                       rect.y -= rect.height;
+                       SetVisibleState(false);
+                       Close();
                }
-               else if (__handlerDirection == HANDLER_DIRECTION_REVERSE_3)
-               {
-                       rect.x = rect.x - __pHandlerBitmap->GetWidthF();
-                       rect.y -= rect.height;                  
-               }       
-       }
-
-       bool visibleState = __pCopyPasteManager->CheckHandleBounds(checkPoint);
-       if (visibleState && !GetVisibleState())
-       {
-               SetVisibleState(true);
-               Open();
-       }
-       else if (!visibleState && GetVisibleState())
-       {
-               SetVisibleState(false);
-               Close();
        }
 
        SetBounds(rect);
@@ -484,27 +723,13 @@ _EditCopyPasteHandler::OnDraw(void)
        }
        pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
        pCanvas->Clear();
-       if (__isTouchPressed)
+       if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pHandlerBitmap))
        {
-               if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pHandlerPressedBitmap))
-               {
-                       pCanvas->DrawNinePatchedBitmap(pCanvas->GetBoundsF(), *__pHandlerPressedBitmap);
-               }
-               else
-               {
-                       pCanvas->DrawBitmap(pCanvas->GetBoundsF(), *__pHandlerPressedBitmap);
-               }
+               pCanvas->DrawNinePatchedBitmap(pCanvas->GetBoundsF(), *__pHandlerBitmap);
        }
        else
        {
-               if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*__pHandlerBitmap))
-               {
-                       pCanvas->DrawNinePatchedBitmap(pCanvas->GetBoundsF(), *__pHandlerBitmap);
-               }
-               else
-               {
-                       pCanvas->DrawBitmap(pCanvas->GetBoundsF(), *__pHandlerBitmap);
-               }
+               pCanvas->DrawBitmap(pCanvas->GetBoundsF(), *__pHandlerBitmap);
        }
 
        delete pCanvas;
@@ -524,6 +749,9 @@ bool
 _EditCopyPasteHandler::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
 {
        __pCopyPasteManager->ReleaseCopyPastePopup();
+#if EDIT_COPY_PASTE_MAGNIFIER
+       CreateCopyPasteMagnifier();
+#endif
        __touchPressedPoint = touchinfo.GetCurrentPosition();
        __isTouchPressed = true;
        Invalidate();
@@ -755,6 +983,8 @@ _EditCopyPasteHandler::OnTouchReleased(const _Control& source, const _TouchInfo&
 {
        CheckReverseStatus();
        __isTouchPressed = false;
+       __isTouchMoving = false;
+       DestroyCopyPasteMagnifier();
        __pCopyPasteManager->CreateCopyPastePopup();
        __pCopyPasteManager->Show();
        __pCopyPasteManager->SendTextBlockEvent();
@@ -765,82 +995,87 @@ _EditCopyPasteHandler::OnTouchReleased(const _Control& source, const _TouchInfo&
 bool
 _EditCopyPasteHandler::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
 {
-       int cursorPos;
-       int previousCursorPos;
-       FloatRectangle cursorRect;
-       FloatRectangle absCursorRect;
+       int cursorPos = -1;
+       int previousCursorPos = -1;
+       FloatRectangle cursorRect(0.0f, 0.0f, 0.0f, 0.0f);
+       FloatRectangle absCursorRect(0.0f, 0.0f, 0.0f, 0.0f);
        FloatRectangle rect = GetBoundsF();
        FloatPoint point = touchinfo.GetCurrentPosition();
-       FloatPoint touchPoint;
-       FloatPoint checkPoint;
+       FloatPoint touchPoint(0.0f, 0.0f);
+       FloatPoint checkPoint(0.0f, 0.0f);
+       __isTouchMoving = true;
 
        _Edit* pEdit = __pCopyPasteManager->GetEdit();
        SysTryReturn(NID_UI_CTRL, pEdit, false, E_INVALID_STATE, "[E_INVALID_STATE] pEdit is null.\n");
 
        _EditPresenter* pEditPresenter = pEdit->GetPresenter();
        SysTryReturn(NID_UI_CTRL, pEditPresenter, false, E_INVALID_STATE, "[E_INVALID_STATE] pEditPresenter is null.\n");
+       TextObject* pTextObject = pEditPresenter->GetTextObject();
 
        if (__touchPressedPoint.x == point.x && __touchPressedPoint.y == point.y)
        {
                return true;
        }
-
-       previousCursorPos = __pCopyPasteManager->GetCursorPosition();
-       __pCopyPasteManager->SetCursorPosition(__handlerCursorPos);
+       if (!__singleHandler)
+       {
+               previousCursorPos = __pCopyPasteManager->GetCursorPosition();
+               __pCopyPasteManager->SetCursorPosition(__handlerCursorPos);
+       }
        cursorRect = __pCopyPasteManager->GetCursorBoundsF(false);
        absCursorRect = __pCopyPasteManager->GetCursorBoundsF(true);
+
        touchPoint.x = cursorRect.x + (point.x - __touchPressedPoint.x);
-       touchPoint.y = cursorRect.y + cursorRect.height/2.0f + (point.y - __touchPressedPoint.y);
+       touchPoint.y = cursorRect.y + cursorRect.height + (point.y - __touchPressedPoint.y);
        checkPoint.x = absCursorRect.x + (point.x - __touchPressedPoint.x);
-       checkPoint.y = absCursorRect.y + absCursorRect.height/2.0f + (point.y - __touchPressedPoint.y); 
+       checkPoint.y = absCursorRect.y + absCursorRect.height + (point.y - __touchPressedPoint.y);
        cursorPos = __pCopyPasteManager->GetCursorPositionAt(touchPoint);
 
        //if (cursorPos == -1 || (!__pCopyPasteManager->CheckHandleBounds(FloatPoint(absCursorRect.x, absCursorRect.y + absCursorRect.height))))
        if (cursorPos == -1 || (!__pCopyPasteManager->CheckHandleBounds(FloatPoint(checkPoint.x, checkPoint.y))))
        {
-               TextObject* pTextObject = pEditPresenter->GetTextObject();
+               SysLog(NID_UI, "OnTouchMoved is called");
                int curCursorLine = pTextObject->GetLineIndexAtTextIndex(__handlerCursorPos);
                int totalLine = pTextObject->GetTotalLineCount();
                FloatRectangle editVisibleArea = __pCopyPasteManager->GetEditVisibleAreaF();
 
-               if (cursorPos != -1)
+               if (pEdit->GetEditStyle() & EDIT_STYLE_SINGLE_LINE)
                {
-                       if (pEdit->GetEditStyle() & EDIT_STYLE_SINGLE_LINE)
+                       if (point.x - __touchPressedPoint.x >= 0.0f) // RightSide
                        {
-                               if (point.x - __touchPressedPoint.x >= 0.0f) // RightSide
+                               if (__handlerCursorPos == pEditPresenter->GetTextLength())
+                               {
+                                       cursorPos = __handlerCursorPos;
+                               }
+                               else
                                {
-                                       if (__handlerCursorPos == pEditPresenter->GetTextLength())
+                                       cursorPos = __handlerCursorPos + 1;
+
+                                       if (!__singleHandler && __leftHandler && (cursorPos == pEditPresenter->GetTextLength()))
                                        {
                                                cursorPos = __handlerCursorPos;
                                        }
-                                       else
-                                       {
-                                               cursorPos = __handlerCursorPos + 1;
-
-                                               if (__leftHandler && (cursorPos == pEditPresenter->GetTextLength()))
-                                               {
-                                                       cursorPos = __handlerCursorPos;
-                                               }
-                                       }
                                }
-                               else //LeftSide
+                       }
+                       else //LeftSide
+                       {
+                               if (__handlerCursorPos != 0)
                                {
-                                       if (__handlerCursorPos != 0)
-                                       {
-                                               cursorPos = __handlerCursorPos - 1;
+                                       cursorPos = __handlerCursorPos - 1;
 
-                                               if (__leftHandler)
-                                               {
-                                                       pTextObject->SetFirstDisplayLineIndexFromTextIndex(cursorPos);
-                                               }
+                                       if (!__singleHandler && __leftHandler)
+                                       {
+                                               pTextObject->SetFirstDisplayLineIndexFromTextIndex(cursorPos);
                                        }
                                }
-                               if (point.y < 0.0f || (point.y > GetBoundsF().height))
-                               {
-                                       return true;
-                               }
                        }
-                       else if (editVisibleArea.y <= absCursorRect.y) // DownSide
+                       if (point.y < 0.0f || (point.y > GetBoundsF().height))
+                       {
+                               return true;
+                       }
+               }
+               else
+               {
+                       if (point.y - __touchPressedPoint.y >= 0.0f) // DownSide
                        {
                                if (curCursorLine < totalLine - 1)
                                {
@@ -852,26 +1087,13 @@ _EditCopyPasteHandler::OnTouchMoved(const _Control& source, const _TouchInfo& to
                                        {
                                                cursorPos = firstTextIndex+textLength;
                                        }
-
-                                       if (cursorPos != -1 && __leftHandler)
-                                       {
-                                               int line = pTextObject->GetFirstDisplayLineIndex();
-                                               pTextObject->SetFirstDisplayLineIndex(line+1);
-                                               __pCopyPasteManager->SetCursorPosition(cursorPos);
-                                               absCursorRect = __pCopyPasteManager->GetCursorBoundsF(true);
-                                               float firstDisplayY = pTextObject->GetFirstDisplayPositionYF();
-                                               float gapY = absCursorRect.y + absCursorRect.height - (editVisibleArea.y + editVisibleArea.height);
-                                               float tempMargin = 2.0f;
-                                               if (gapY > 0.0f)
-                                               {
-                                                       pTextObject->SetFirstDisplayPositionY(firstDisplayY + gapY + tempMargin);
-                                               }
-                                       }
+                                       int line = pTextObject->GetFirstDisplayLineIndex();
+                                       pTextObject->SetFirstDisplayLineIndex(line+1);
                                }
                        }
                        else
                        {
-                               if (curCursorLine !=0 )
+                               if (curCursorLine !=0)
                                {
                                        int offset = __handlerCursorPos - pTextObject->GetFirstTextIndexAt(curCursorLine);
                                        int firstTextIndex = pTextObject->GetFirstTextIndexAt(curCursorLine-1);
@@ -881,142 +1103,45 @@ _EditCopyPasteHandler::OnTouchMoved(const _Control& source, const _TouchInfo& to
                                        {
                                                cursorPos = firstTextIndex+textLength;
                                        }
-
-                                       if (cursorPos != -1 && __leftHandler)
-                                       {
-                                               int line = pTextObject->GetFirstDisplayLineIndex();
-                                               if (__leftHandler)
-                                               {
-                                                       pTextObject->SetFirstDisplayLineIndexFromTextIndex(cursorPos);
-                                               }
-                                               else
-                                               {
-                                                       pTextObject->SetFirstDisplayLineIndex(line-1);
-                                               }
-                                       }
-                               }
-                       }
-               }
-               else
-               {
-                       if (pEdit->GetEditStyle() & EDIT_STYLE_SINGLE_LINE)
-                       {
-                               if (point.x - __touchPressedPoint.x >= 0.0f) // RightSide
-                               {
-                                       if (__handlerCursorPos == pEditPresenter->GetTextLength())
-                                       {
-                                               cursorPos = __handlerCursorPos;
-                                       }
-                                       else
-                                       {
-                                               cursorPos = __handlerCursorPos + 1;
-
-                                               if (__leftHandler && (cursorPos == pEditPresenter->GetTextLength()))
-                                               {
-                                                       cursorPos = __handlerCursorPos;
-                                               }
-                                       }
-                               }
-                               else //LeftSide
-                               {
-                                       if (__handlerCursorPos != 0)
-                                       {
-                                               cursorPos = __handlerCursorPos - 1;
-
-                                               if (__leftHandler)
-                                               {
-                                                       pTextObject->SetFirstDisplayLineIndexFromTextIndex(cursorPos);
-                                               }
-                                       }
-                               }
-                               
-                               if (point.y < 0.0f || (point.y > GetBoundsF().height))
-                               {
-                                       return true;
-                               }
-                       }
-                       else
-                       {
-                               if (point.y - __touchPressedPoint.y >= 0.0f) // DownSide
-                               {
-                                       if (curCursorLine < totalLine - 1)
-                                       {
-                                               int offset = __handlerCursorPos - pTextObject->GetFirstTextIndexAt(curCursorLine);
-                                               int firstTextIndex = pTextObject->GetFirstTextIndexAt(curCursorLine+1);
-                                               cursorPos = offset + firstTextIndex;
-                                               int textLength = pTextObject->GetTextLengthAt(curCursorLine+1);
-                                               if (offset > textLength)
-                                               {
-                                                       cursorPos = firstTextIndex+textLength;
-                                               }
-
-                                               if (cursorPos != -1 && __leftHandler)
-                                               {
-                                                       int line = pTextObject->GetFirstDisplayLineIndex();
-                                                       if (__leftHandler)
-                                                       {
-                                                               pTextObject->SetFirstDisplayLineIndexFromTextIndex(cursorPos);
-                                                       }
-                                                       else
-                                                       {
-                                                               pTextObject->SetFirstDisplayLineIndex(line+1);
-                                                       }
-                                               }
-                                       }
-                               }
-                               else    //UpSide
-                               {
-                                       if (curCursorLine !=0 )
-                                       {
-                                               int offset = __handlerCursorPos - pTextObject->GetFirstTextIndexAt(curCursorLine);
-                                               int firstTextIndex = pTextObject->GetFirstTextIndexAt(curCursorLine-1);
-                                               cursorPos = offset + firstTextIndex;
-                                               int textLength = pTextObject->GetTextLengthAt(curCursorLine-1);
-                                               if (offset > textLength)
-                                               {
-                                                       cursorPos = firstTextIndex+textLength;
-                                               }
-
-                                               if (!__leftHandler && cursorPos <= __pCopyPasteManager->GetHandlerCursorPosition(false))
-                                               {
-                                                       cursorPos = __pCopyPasteManager->GetHandlerCursorPosition(false) + 1;
-                                               }
-
-                                               if (cursorPos != -1 && __leftHandler)
-                                               {
-                                                       int line = pTextObject->GetFirstDisplayLineIndex();
-                                                       if (__leftHandler)
-                                                       {
-                                                               pTextObject->SetFirstDisplayLineIndexFromTextIndex(cursorPos);
-                                                       }
-                                                       else
-                                                       {
-                                                               pTextObject->SetFirstDisplayLineIndex(line-1);
-                                                       }
-                                               }
-                                       }
+                                       int line = pTextObject->GetFirstDisplayLineIndex();
+                                       pTextObject->SetFirstDisplayLineIndex(line-1);
                                }
                        }
                }
        }
 
-       if (cursorPos == -1 || __handlerCursorPos == cursorPos ||!__pCopyPasteManager->CheckHandlePosition(__leftHandler, cursorPos))
+       if (!__singleHandler && !__pCopyPasteManager->CheckHandlePosition(__leftHandler, cursorPos))
        {
                __pCopyPasteManager->SetCursorPosition(previousCursorPos);
                pEditPresenter->SetCursorChangedFlag(!__leftHandler);
                return true;
        }
 
-       if (__leftHandler)
+       if (cursorPos == -1 || __handlerCursorPos == cursorPos)
        {
-               TextObject* pTextObject = pEditPresenter->GetTextObject();
-               pTextObject->SetFirstDisplayLineIndexFromTextIndex(cursorPos);
+               if (__singleHandler)
+               {
+                       return true;
+               }
+               __pCopyPasteManager->SetCursorPosition(previousCursorPos);
+               pEditPresenter->SetCursorChangedFlag(!__leftHandler);
+               return true;
        }
 
+       pTextObject->SetFirstDisplayLineIndexFromTextIndex(cursorPos);
+
        __pCopyPasteManager->SetCursorPosition(cursorPos);
        __handlerCursorPos = cursorPos;
-
-       __pCopyPasteManager->RefreshBlock(__leftHandler);
+       if (!__singleHandler)
+       {
+               __pCopyPasteManager->RefreshBlock(__leftHandler);
+       }
+       else
+       {
+               pEditPresenter->DrawText();
+               AdjustBounds();
+       }
+       MoveCopyPasteMagnifier();
 
        return true;
 }
@@ -1137,18 +1262,18 @@ _EditCopyPasteManager::_EditCopyPasteManager(_Edit& parenEdit)
        , __contextMenuAlign(CONTEXT_MENU_CORE_ALIGN_UP)
        , __pCoreCopyPasteEvent(null)
        , __pEdit(&parenEdit)
+       , __pEditPresenter(null)
        , __contextMenuHeight(0.0f)
        , __needToReleaseBlock(true)
        , __isHandlerMoving(false)
        , __editVisibleArea(0.0f, 0.0f, 0.0f, 0.0f)
 {
+       __pEditPresenter = __pEdit->GetPresenter();
+       __pHandle[HANDLER_TYPE_CENTER] = null;
        __pHandle[HANDLER_TYPE_LEFT] = null;
        __pHandle[HANDLER_TYPE_RIGHT] = null;
 
-       if (__pEdit->IsBlocked())
-       {
                CreateHandle();
-       }
 }
 
 _EditCopyPasteManager::~_EditCopyPasteManager(void)
@@ -1172,6 +1297,13 @@ _EditCopyPasteManager::Release(void)
                __pCopyPastePopup = null;
        }
 
+       if (__pHandle[HANDLER_TYPE_CENTER])
+       {
+               __pHandle[HANDLER_TYPE_CENTER]->Close();
+               delete __pHandle[HANDLER_TYPE_CENTER];
+               __pHandle[HANDLER_TYPE_CENTER] = null;
+       }
+
        if (__pHandle[HANDLER_TYPE_LEFT])
        {
                __pHandle[HANDLER_TYPE_LEFT]->Close();
@@ -1212,6 +1344,11 @@ _EditCopyPasteManager::IsCopyPastePopup(const _Control& control) const
 bool
 _EditCopyPasteManager::IsCopyPasteHandle(const _Control& control) const
 {
+       if (__pHandle[HANDLER_TYPE_CENTER] == &control)
+       {
+               return true;
+       }
+
        if (__pHandle[HANDLER_TYPE_LEFT] == &control)
        {
                return true;
@@ -1256,6 +1393,10 @@ _EditCopyPasteManager::SendCopyPasteEvent(CoreCopyPasteStatus status, CoreCopyPa
 void
 _EditCopyPasteManager::CreateCopyPastePopup(void)
 {
+       if (__pHandle[HANDLER_TYPE_CENTER])
+       {
+               __pHandle[HANDLER_TYPE_CENTER]->DestroyCopyPasteMagnifier();
+       }
        if (__pCopyPastePopup)
        {
                __pCopyPastePopup->Close();
@@ -1287,6 +1428,18 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
 
        _ControlOrientation orientation = __pEdit->GetOrientation();
 
+       FloatDimension screenSize;
+       _ControlManager* pControlManager = _ControlManager::GetInstance();
+       if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
+       {
+               screenSize = pControlManager->GetScreenSizeF();
+       }
+       else
+       {
+               screenSize.width = pControlManager->GetScreenSizeF().height;
+               screenSize.height = pControlManager->GetScreenSizeF().width;
+       }
+
        GET_SHAPE_CONFIG(EDIT::COPYPASTE_HANDLER_HEIGHT, orientation, handlerHeight);
 
        GET_SHAPE_CONFIG(CONTEXTMENU::GRID_ITEM_HEIGHT, orientation, contextMenuHeight);
@@ -1301,21 +1454,19 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
        }
 
        editAbsRect = __pEdit->GetAbsoluteBoundsF();
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-       SysTryReturnVoidResult(NID_UI_CTRL, pEditPresenter, E_INVALID_STATE, "[EDIT] pEditPresenter is null.");
 
-       _Toolbar* pCommandButton = pEditPresenter->GetKeypadCommandButton();
+       _Toolbar* pCommandButton = __pEditPresenter->GetKeypadCommandButton();
        if (pCommandButton)
        {
                commandButtonBounds = pCommandButton->GetAbsoluteBoundsF();
                commandButtonExist = true;
        }
-       _Form* pForm = pEditPresenter->GetParentForm();
+       _Form* pForm = __pEditPresenter->GetParentForm();
        if (pForm)
        {
                formClientBounds = pForm->GetClientBoundsF();
        }
-       _ScrollPanel* pPanel = pEditPresenter->GetParentPanel();
+       _ScrollPanel* pPanel = __pEditPresenter->GetParentPanel();
        if (pPanel)
        {
                panelAbsoulteBounds = pPanel->GetAbsoluteBoundsF();
@@ -1325,7 +1476,7 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
        // Edit Show Area
        {
                editShowAreaAbsRect = editAbsRect;
-               FloatRectangle textObjectBounds = pEditPresenter->GetTextBoundsF();
+               FloatRectangle textObjectBounds = __pEditPresenter->GetTextBoundsF();
                editShowAreaAbsRect.x += textObjectBounds.x;
                editShowAreaAbsRect.y += textObjectBounds.y;
                editShowAreaAbsRect.width = textObjectBounds.width;
@@ -1389,14 +1540,12 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
                if ( ((startRect.y + startRect.height) < editShowAreaAbsRect.y) && ((endRect.y + endRect.height) < editShowAreaAbsRect.y))
                {
                        SysLog(NID_UI_CTRL, "Both of handlers are located on the top of the Editor.\n");
-                       PrintLog(copyPastePoint);
                        return;
                }
                //Both of handlers are located on the bottom of the Editor.
                else if( ((startRect.y + startRect.height) > editShowAreaAbsRect.y + editShowAreaAbsRect.height ) && ((endRect.y + endRect.height) > editShowAreaAbsRect.y + editShowAreaAbsRect.height))
                {
                        SysLog(NID_UI_CTRL, "Both of handlers are located on the bottom of the Editor.\n");
-                       PrintLog(copyPastePoint);
                        return;
                }
                // Left handler is located on the top of the Editor and Right handler is located on the bottom of the Editor.
@@ -1411,7 +1560,7 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
 
                }
                // Left handler is located on the top of the Editor and Right handler is located on the Editor
-               else if ( ((startRect.y + startRect.height) < editShowAreaAbsRect.y) && ((endRect.y + endRect.height) < (editShowAreaAbsRect.y + editShowAreaAbsRect.height)) )
+               else if ( ((startRect.y + startRect.height) < editShowAreaAbsRect.y) && ((endRect.y + endRect.height) <= (editShowAreaAbsRect.y + editShowAreaAbsRect.height)) )
                {
                        if ( (endRect.y + endRect.height + handlerHeight + __contextMenuHeight) < keypadBounds.y)
                        {
@@ -1429,12 +1578,11 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
                        else
                        {
                                SysLog(NID_UI_CTRL, "There is no space to draw the copy&paste popup\n");
-                               PrintLog(copyPastePoint);
                                return;
                        }
                }
                // Left handler is located on the Editor and Right handler is located on the bottom of the Editor
-               else if ( ((startRect.y + startRect.height) > editShowAreaAbsRect.y) && ((endRect.y + endRect.height) > (editShowAreaAbsRect.y + editShowAreaAbsRect.height)) )
+               else if ( ((startRect.y + startRect.height) >= editShowAreaAbsRect.y) && ((endRect.y + endRect.height) > (editShowAreaAbsRect.y + editShowAreaAbsRect.height)) )
                {
                        if (__contextMenuHeight < startRect.y)
                        {
@@ -1451,7 +1599,7 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
                        copyPastePoint.y = startRect.y;
                }
                // There is a  space on the bottom of the Editor.
-               else if ( keypadBounds.y  > (endRect.y + endRect.height + handlerHeight + __contextMenuHeight))
+               else if ( screenSize.height  > (endRect.y + endRect.height + handlerHeight + __contextMenuHeight))
                {
                        __contextMenuAlign = CONTEXT_MENU_CORE_ALIGN_DOWN;
 
@@ -1463,7 +1611,6 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
                        if (endRect.y - startRect.y < __contextMenuHeight)
                        {
                                SysLog(NID_UI_CTRL, "There is no space to draw the copy&paste popup\n");
-                               PrintLog(copyPastePoint);
                                return;
                        }
                        copyPastePoint.y = startRect.y + __contextMenuHeight;
@@ -1487,6 +1634,10 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
 
                        copyPastePoint.y += cursorRect.height;
                        __contextMenuAlign = CONTEXT_MENU_CORE_ALIGN_DOWN;
+                       if (__pHandle[HANDLER_TYPE_CENTER])
+                       {
+                               copyPastePoint.y += __pHandle[HANDLER_TYPE_CENTER]->GetBounds().height;
+                       }
                }
        }
        
@@ -1534,7 +1685,7 @@ _EditCopyPasteManager::CreateCopyPastePopup(void)
                        GET_STRING_CONFIG(IDS_COM_BODY_CLIPBOARD, clipboardText);
 
                        __pCopyPastePopup->AddItem(pasteText, COPY_PASTE_PASTE_ID, null, null, null);
-                       if (!isPasswordStyle)
+                       if (!isPasswordStyle && __pEdit->IsKeypadEnabled())
                        {
                                __pCopyPastePopup->AddItem(clipboardText, COPY_PASTE_CLIPBOARD_ID, null, null, null);
                        }
@@ -1600,170 +1751,55 @@ CATCH:
 }
 
 void
-_EditCopyPasteManager::PrintLog(const Point& point)
-{
-       Rectangle startRect;
-       Rectangle endRect;
-       Rectangle editAbsRect;
-       Rectangle keypadBounds;
-       Rectangle editShowAreaAbsRect;
-       Rectangle commandButtonBounds;
-       Rectangle formClientBounds(0, 0, 0, 0);
-       bool hasParentForm = false;
-       bool hasCommandButton = false;
-       Rectangle cursorRect = GetCursorBounds(true);
-
-       editAbsRect = __pEdit->GetAbsoluteBounds();
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-       _Toolbar* pCommandButton = pEditPresenter->GetKeypadCommandButton();
-       if (pCommandButton)
-       {
-               commandButtonBounds = pCommandButton->GetAbsoluteBounds();
-               hasCommandButton = true;
-       }
-       _Form* pForm = pEditPresenter->GetParentForm();
-       if (pForm)
-       {
-               formClientBounds = pForm->GetClientBounds();
-               hasParentForm = true;
-       }
-       int start = -1;
-       int end = -1;
-       __pEdit->GetBlockRange(start, end);
-       if (start == -1 || end == -1)
-       {
-               SysLog(NID_UI_CTRL, "[EditCopyPasteManager] There is no blocked Range");
-               return;
-       }
-       __pEdit->GetKeypadBounds(keypadBounds);
+_EditCopyPasteManager::CreateHandle(void)
+{
+       Release();
 
+       if (__pEdit->IsBlocked())
        {
-               editShowAreaAbsRect = editAbsRect;
-
-               if (hasCommandButton)
-               {
-                       if (editShowAreaAbsRect.y + editShowAreaAbsRect.height > commandButtonBounds.y)
-                       {
-                               editShowAreaAbsRect.height -= (editShowAreaAbsRect.y + editShowAreaAbsRect.height - commandButtonBounds.y);
-                       }
-               }
-               else
-               {
-                       if (editShowAreaAbsRect.y + editShowAreaAbsRect.height > keypadBounds.y)
-                       {
-                               editShowAreaAbsRect.height -= (editShowAreaAbsRect.y + editShowAreaAbsRect.height - keypadBounds.y);
-                       }
-               }
-       }
+               int start = -1;
+               int end = -1;
+               FloatRectangle startRect;
+               FloatRectangle endRect;
 
-       __pEdit->CalculateAbsoluteCursorBounds(start, startRect);
-       __pEdit->CalculateAbsoluteCursorBounds(end, endRect);
+               __pEdit->GetBlockRange(start, end);
 
-       SysLog(NID_UI_CTRL, "copyPastePoint (x=%d), (y=%d)\n", point.x, point.y );
-       SysLog(NID_UI_CTRL, "startRect (x=%d), (y=%d), (width=%d), (height=%d) \n", startRect.x, startRect.y ,startRect.width, startRect.height);
-       SysLog(NID_UI_CTRL, "endRect (x=%d), (y=%d), (width=%d), (height=%d) \n", endRect.x, endRect.y ,endRect.width, endRect.height);
-       SysLog(NID_UI_CTRL, "editAbsRect (x=%d), (y=%d), (width=%d), (height=%d) \n", editAbsRect.x, editAbsRect.y ,editAbsRect.width, editAbsRect.height);
-       SysLog(NID_UI_CTRL, "editShowAreaAbsRect (x=%d), (y=%d), (width=%d), (height=%d) \n", editShowAreaAbsRect.x, editShowAreaAbsRect.y ,editShowAreaAbsRect.width, editShowAreaAbsRect.height);
-       SysLog(NID_UI_CTRL, "keypadBounds (x=%d), (y=%d), (width=%d), (height=%d) \n", keypadBounds.x, keypadBounds.y ,keypadBounds.width, keypadBounds.height);
-       SysLog(NID_UI_CTRL, "commandButtonBounds (x=%d), (y=%d), (width=%d), (height=%d) \n", commandButtonBounds.x, commandButtonBounds.y ,commandButtonBounds.width, commandButtonBounds.height);
-       SysLog(NID_UI_CTRL, "formClientBounds (x=%d), (y=%d), (width=%d), (height=%d) \n", formClientBounds.x, formClientBounds.y ,formClientBounds.width, formClientBounds.height);
-       SysLog(NID_UI_CTRL, "contextMenuHeight = %d\n", __contextMenuHeight);
-}
+               __pEdit->CalculateAbsoluteCursorBounds(start, startRect);
+               __pEdit->CalculateAbsoluteCursorBounds(end, endRect);
 
-void
-_EditCopyPasteManager::PrintLog(const FloatPoint& point)
-{
-       FloatRectangle startRect;
-       FloatRectangle endRect;
-       FloatRectangle editAbsRect;
-       FloatRectangle keypadBounds;
-       FloatRectangle editShowAreaAbsRect;
-       FloatRectangle commandButtonBounds;
-       FloatRectangle formClientBounds(0.0f, 0.0f, 0.0f, 0.0f);
-       bool hasParentForm = false;
-       bool hasCommandButton = false;
-       FloatRectangle cursorRect = GetCursorBoundsF(true);
+               Point leftHandler(startRect.x, startRect.y + startRect.height);
+               Point rightHandler(endRect.x, endRect.y + endRect.height);
 
-       editAbsRect = __pEdit->GetAbsoluteBoundsF();
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-       _Toolbar* pCommandButton = pEditPresenter->GetKeypadCommandButton();
-       if (pCommandButton)
-       {
-               commandButtonBounds = pCommandButton->GetAbsoluteBoundsF();
-               hasCommandButton = true;
+               __pHandle[HANDLER_TYPE_LEFT] = _EditCopyPasteHandler::CreateInstanceN(leftHandler, start, this, false, true);
+               __pHandle[HANDLER_TYPE_RIGHT] = _EditCopyPasteHandler::CreateInstanceN(rightHandler, end, this, false, false);
        }
-       _Form* pForm = pEditPresenter->GetParentForm();
-       if (pForm)
-       {
-               formClientBounds = pForm->GetClientBoundsF();
-               hasParentForm = true;
-       }
-       int start = -1;
-       int end = -1;
-       __pEdit->GetBlockRange(start, end);
-       if (start == -1 || end == -1)
-       {
-               SysLog(NID_UI_CTRL, "[EditCopyPasteManager] There is no blocked Range");
-               return;
-       }
-       __pEdit->GetKeypadBounds(keypadBounds);
-
+       else
        {
-               editShowAreaAbsRect = editAbsRect;
+               FloatRectangle centerRect;
+               __pEdit->CalculateAbsoluteCursorBounds(__pEdit->GetCursorPosition(), centerRect);
+               Point centerHandler(centerRect.x, centerRect.y + centerRect.height);
 
-               if (hasCommandButton)
-               {
-                       if (editShowAreaAbsRect.y + editShowAreaAbsRect.height > commandButtonBounds.y)
-                       {
-                               editShowAreaAbsRect.height -= (editShowAreaAbsRect.y + editShowAreaAbsRect.height - commandButtonBounds.y);
-                       }
-               }
-               else
-               {
-                       if (editShowAreaAbsRect.y + editShowAreaAbsRect.height > keypadBounds.y)
-                       {
-                               editShowAreaAbsRect.height -= (editShowAreaAbsRect.y + editShowAreaAbsRect.height - keypadBounds.y);
-                       }
-               }
+               __pHandle[HANDLER_TYPE_CENTER] = _EditCopyPasteHandler::CreateInstanceN(centerHandler, __pEdit->GetCursorPosition(), this, true, true);
+#if EDIT_COPY_PASTE_MAGNIFIER
+//             __pHandle[HANDLER_TYPE_CENTER]->CreateCopyPasteMagnifier();
+#endif
        }
-
-       __pEdit->CalculateAbsoluteCursorBounds(start, startRect);
-       __pEdit->CalculateAbsoluteCursorBounds(end, endRect);
-
-       SysLog(NID_UI_CTRL, "copyPastePoint (x=%f), (y=%f)\n", point.x, point.y );
-       SysLog(NID_UI_CTRL, "startRect (x=%f), (y=%f), (width=%f), (height=%f) \n", startRect.x, startRect.y ,startRect.width, startRect.height);
-       SysLog(NID_UI_CTRL, "endRect (x=%f), (y=%f), (width=%f), (height=%f) \n", endRect.x, endRect.y ,endRect.width, endRect.height);
-       SysLog(NID_UI_CTRL, "editAbsRect (x=%f), (y=%f), (width=%f), (height=%f) \n", editAbsRect.x, editAbsRect.y ,editAbsRect.width, editAbsRect.height);
-       SysLog(NID_UI_CTRL, "editShowAreaAbsRect (x=%f), (y=%f), (width=%f), (height=%f) \n", editShowAreaAbsRect.x, editShowAreaAbsRect.y ,editShowAreaAbsRect.width, editShowAreaAbsRect.height);
-       SysLog(NID_UI_CTRL, "keypadBounds (x=%f), (y=%f), (width=%f), (height=%f) \n", keypadBounds.x, keypadBounds.y ,keypadBounds.width, keypadBounds.height);
-       SysLog(NID_UI_CTRL, "commandButtonBounds (x=%f), (y=%f), (width=%f), (height=%f) \n", commandButtonBounds.x, commandButtonBounds.y ,commandButtonBounds.width, commandButtonBounds.height);
-       SysLog(NID_UI_CTRL, "formClientBounds (x=%f), (y=%f), (width=%f), (height=%f) \n", formClientBounds.x, formClientBounds.y ,formClientBounds.width, formClientBounds.height);
-       SysLog(NID_UI_CTRL, "contextMenuHeight = %f\n", __contextMenuHeight);
-}
-
-void
-_EditCopyPasteManager::CreateHandle(void)
-{
-       int start = -1;
-       int end = -1;
-       FloatRectangle startRect;
-       FloatRectangle endRect;
-
-       __pEdit->GetBlockRange(start, end);
-
-       __pEdit->CalculateAbsoluteCursorBounds(start, startRect);
-       __pEdit->CalculateAbsoluteCursorBounds(end, endRect);
-
-       Point leftHandler(startRect.x, startRect.y + startRect.height);
-       Point rightHandler(endRect.x, endRect.y + endRect.height);
-
-       __pHandle[HANDLER_TYPE_LEFT] = _EditCopyPasteHandler::CreateInstanceN(leftHandler, start, this, false, true);
-       __pHandle[HANDLER_TYPE_RIGHT] = _EditCopyPasteHandler::CreateInstanceN(rightHandler, end, this, false, false);
 }
 
 void
 _EditCopyPasteManager::Show(void)
 {
+       if (__pHandle[HANDLER_TYPE_CENTER])
+       {
+               if (__pEdit->GetCursorPosition() != __pHandle[HANDLER_TYPE_CENTER]->GetHandlerCursorPosition())
+               {
+                       __pHandle[HANDLER_TYPE_CENTER]->SetHandlerCursorPosition(__pEdit->GetCursorPosition());
+//                     __pHandle[HANDLER_TYPE_CENTER]->MoveCopyPasteMagnifier();
+               }
+               __pHandle[HANDLER_TYPE_CENTER]->AdjustBounds();
+               __pEdit->Invalidate();
+       }
+
        if (__pHandle[HANDLER_TYPE_LEFT] && __pHandle[HANDLER_TYPE_RIGHT])
        {
                AdjustBounds();
@@ -1798,26 +1834,25 @@ _EditCopyPasteManager::CheckHandleBounds(const Point& point)
        Rectangle formClientBounds(0, 0, 0, 0);
        Rectangle panelAbsoulteBounds(0, 0, 0, 0);
        Rectangle editAbsBounds = __pEdit->GetAbsoluteBounds();
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-       Rectangle textObjectBounds = pEditPresenter->GetTextBounds();
+       Rectangle textObjectBounds = __pEditPresenter->GetTextBounds();
        editAbsBounds.x += textObjectBounds.x;
        editAbsBounds.y += textObjectBounds.y;
        editAbsBounds.width = textObjectBounds.width;
        editAbsBounds.height = textObjectBounds.height;
-       _Toolbar* pCommandButton = pEditPresenter->GetKeypadCommandButton();
+       _Toolbar* pCommandButton = __pEditPresenter->GetKeypadCommandButton();
        if (pCommandButton)
        {
                commandButtonBounds = pCommandButton->GetAbsoluteBounds();
                hasCommandButton = true;
        }
-       _Form* pForm = pEditPresenter->GetParentForm();
+       _Form* pForm = __pEditPresenter->GetParentForm();
        if (pForm)
        {
                formClientBounds = pForm->GetClientBounds();
                hasParentForm = true;
        }
 
-       _ScrollPanel* pPanel = pEditPresenter->GetParentPanel();
+       _ScrollPanel* pPanel = __pEditPresenter->GetParentPanel();
        if (pPanel)
        {
                panelAbsoulteBounds = pPanel->GetAbsoluteBounds();
@@ -1859,26 +1894,25 @@ _EditCopyPasteManager::CheckHandleBounds(const FloatPoint& point)
        FloatRectangle formClientBounds(0.0f, 0.0f, 0.0f, 0.0f);
        FloatRectangle panelAbsoulteBounds(0.0f, 0.0f, 0.0f, 0.0f);
        FloatRectangle editAbsBounds = __pEdit->GetAbsoluteBoundsF();
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-       FloatRectangle textObjectBounds = pEditPresenter->GetTextBoundsF();
+       FloatRectangle textObjectBounds = __pEditPresenter->GetTextBoundsF();
        editAbsBounds.x += textObjectBounds.x;
        editAbsBounds.y += textObjectBounds.y;
        editAbsBounds.width = textObjectBounds.width;
        editAbsBounds.height = textObjectBounds.height;
-       _Toolbar* pCommandButton = pEditPresenter->GetKeypadCommandButton();
+       _Toolbar* pCommandButton = __pEditPresenter->GetKeypadCommandButton();
        if (pCommandButton)
        {
                commandButtonBounds = pCommandButton->GetAbsoluteBoundsF();
                hasCommandButton = true;
        }
-       _Form* pForm = pEditPresenter->GetParentForm();
+       _Form* pForm = __pEditPresenter->GetParentForm();
        if (pForm)
        {
                formClientBounds = pForm->GetClientBoundsF();
                hasParentForm = true;
        }
 
-       _ScrollPanel* pPanel = pEditPresenter->GetParentPanel();
+       _ScrollPanel* pPanel = __pEditPresenter->GetParentPanel();
        if (pPanel)
        {
                panelAbsoulteBounds = pPanel->GetAbsoluteBoundsF();
@@ -1945,12 +1979,9 @@ _EditCopyPasteManager::RefreshBlock(bool isLeftHandle)
        int leftHandlerPos = __pHandle[HANDLER_TYPE_LEFT]->GetHandlerCursorPosition();
        int rightHandlerPos = __pHandle[HANDLER_TYPE_RIGHT]->GetHandlerCursorPosition();
 
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-       SysTryReturnVoidResult(NID_UI_CTRL, pEditPresenter, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
-
        __pEdit->SetBlockRange(leftHandlerPos, rightHandlerPos);
-       pEditPresenter->SetCursorChangedFlag(!isLeftHandle);
-       pEditPresenter->DrawText();
+       __pEditPresenter->SetCursorChangedFlag(false);//!isLeftHandle);
+       __pEditPresenter->DrawText();
        AdjustBounds();
 }
 
@@ -1999,9 +2030,9 @@ _EditCopyPasteManager::GetCursorPosition(void) const
 }
 
 int
-_EditCopyPasteManager::GetHandlerCursorPosition(bool rightHandler) const
+_EditCopyPasteManager::GetHandlerCursorPosition(HandlerType handlerType) const
 {
-       return __pHandle[rightHandler]->GetHandlerCursorPosition();
+       return __pHandle[handlerType]->GetHandlerCursorPosition();
 }
 
 void
@@ -2025,8 +2056,6 @@ _EditCopyPasteManager::OnActionPerformed(const _Control& source, int actionId)
        _Clipboard* pClipBoard = _Clipboard::GetInstance();
        SysTryReturnVoidResult(NID_UI_CTRL, pClipBoard, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-
        ReleaseCopyPastePopup();
 
        switch (actionId)
@@ -2054,7 +2083,7 @@ _EditCopyPasteManager::OnActionPerformed(const _Control& source, int actionId)
                        int textLength = __pEdit->GetTextLength();
                        __pEdit->SetBlockRange(0, textLength);
                        SendTextBlockEvent();
-                       pEditPresenter->UpdateComponentInformation();
+                       __pEditPresenter->UpdateComponentInformation();
 
                        Release();
                        CreateHandle();
@@ -2113,8 +2142,7 @@ _EditCopyPasteManager::LaunchSearch(void)
        int start = -1;
        int end = -1;
        __pEdit->GetBlockRange(start, end);
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-       String blockText = pEditPresenter->GetText(start, end-1);
+       String blockText = __pEditPresenter->GetText(start, end-1);
 
        _AppMessageImpl msg;
 
@@ -2169,8 +2197,7 @@ _EditCopyPasteManager::MoveHandler(HandlerMoveType moveType)
         __pEdit->GetCursorBounds(false, cursorBounds);
        FloatPoint cursorPoint(cursorBounds.x, cursorBounds.y);
 
-       _EditPresenter* pEditPresenter = __pEdit->GetPresenter();
-       TextObject* pTextObject = pEditPresenter->GetTextObject();
+       TextObject* pTextObject = __pEditPresenter->GetTextObject();
 
        switch(moveType)
        {
@@ -2215,7 +2242,7 @@ _EditCopyPasteManager::MoveHandler(HandlerMoveType moveType)
 
                        if (newCursorPosition >= 0 && leftHandlerPosition < newCursorPosition)
                        {
-                __pHandle[HANDLER_TYPE_RIGHT]->SetHandlerCursorPosition(newCursorPosition);
+                               __pHandle[HANDLER_TYPE_RIGHT]->SetHandlerCursorPosition(newCursorPosition);
                                RefreshBlock();
                                __pHandle[HANDLER_TYPE_RIGHT]->CheckReverseStatus();
                                __pHandle[HANDLER_TYPE_RIGHT]->Invalidate();
@@ -2255,7 +2282,7 @@ _EditCopyPasteManager::MoveHandler(HandlerMoveType moveType)
 
                        if (newCursorPosition >= 0)
                        {
-                __pHandle[HANDLER_TYPE_RIGHT]->SetHandlerCursorPosition(newCursorPosition);
+                               __pHandle[HANDLER_TYPE_RIGHT]->SetHandlerCursorPosition(newCursorPosition);
                                RefreshBlock();
                                __pHandle[HANDLER_TYPE_RIGHT]->CheckReverseStatus();
                                __pHandle[HANDLER_TYPE_RIGHT]->Invalidate();
index 2c94a70..f235d68 100755 (executable)
@@ -299,6 +299,11 @@ _EditPresenter::OnInputConnectionPanelShowStateChanged(InputConnection& source,
 
                if (__isInputConnectionBound && __isUSBKeyboardConnected) // hide callback from external condition(usb mode off->on), focus remaining
                {
+                       if (!__isKeypadCommandButtonVisible)
+                       {
+                               SetFooterVisible(true);// must be called ahead of DeflateClientRectHeight
+                       }
+
                        if (!__pEdit->IsFullScreenKeypadEdit())
                        {
                                if (__pParentForm)
@@ -312,8 +317,13 @@ _EditPresenter::OnInputConnectionPanelShowStateChanged(InputConnection& source,
                }
                else
                {
-                       if (__isInputConnectionBound)// keypad drag down, auto keypad hide by clipboard switch
+                       if (__isInputConnectionBound)// keypad drag down
                        {
+                               if (!__isKeypadCommandButtonVisible)
+                               {
+                                       SetFooterVisible(true);// must be called ahead of DeflateClientRectHeight
+                               }
+
                                if ( __isTextComposing)
                                {
                                        __pInputConnection->FinishTextComposition();
@@ -637,6 +647,12 @@ _EditPresenter::OnComposingTextChanged(const String& composingText, int cursorPo
                __isTextComposing = true;
        }
 
+       if (__pPasswordTimer)
+       {
+               ChangePasswordToEchoCharacter(__pTextBuffer, __echoChar);
+               StopPasswordTimer();
+       }
+
        // Limitation Protect
        String insetText = composingText;
        int currentLength = GetTextLength();
@@ -2019,8 +2035,8 @@ _EditPresenter::Draw(Canvas& canvas)
        {
                if (__isCopyPasteManagerExist)
                {
-                       __pCopyPasteManager->CreateCopyPastePopup();
                        __pCopyPasteManager->CreateHandle();
+                       __pCopyPasteManager->CreateCopyPastePopup();
                        __pCopyPasteManager->Show();
                }
                __rotated = false;
@@ -2990,6 +3006,18 @@ _EditPresenter::OnTouchReleased(const _Control& source, const _TouchInfo& touchI
                }
                FadeOutScrollBar();
 
+               if (!__isCopyPasteManagerExist)
+               {
+                       if (IsInternalFocused())
+                       {
+                               __pCopyPasteManager = new (std::nothrow) _EditCopyPasteManager(*__pEdit);
+                               SysTryReturn(NID_UI_CTRL, __pCopyPasteManager != null, false, E_SYSTEM, "[EDIT] Unable to create _EditCopyPasteManager instance.");
+                               __pCopyPasteManager->AddCopyPasteEventListener(*this);
+                               __pCopyPasteManager->Show();
+                               __isCopyPasteManagerExist = true;
+                       }
+               }
+
                //if ((cutLinkIndex < 0) && ((__pEdit->GetEditStyle() & EDIT_STYLE_VIEWER) == false) && (IsKeypadEnabled()))
                if ((cutLinkIndex < 0) && ((__pEdit->GetEditStyle() & EDIT_STYLE_VIEWER) == false))
                {
@@ -3846,7 +3874,7 @@ _EditPresenter::OnLongPressGestureDetected(void)
 bool
 _EditPresenter::OnTapGestureDetected(void)
 {
-       if (IsInternalFocused() == false || __isCopyPasteManagerExist)
+       if (IsInternalFocused() == false)
        {
                return true;
        }
@@ -5907,6 +5935,11 @@ _EditPresenter::SetKeypadCommandButton(const FloatRectangle& bounds)
                return r;
        }
 
+       if (__pParentForm == false)
+       {
+               return r;
+       }
+
        __pCommandButton = _Toolbar::CreateToolbarN(false);
        SysTryReturn(NID_UI_CTRL, __pCommandButton, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Unable to create instance.");
 
@@ -6585,7 +6618,7 @@ _EditPresenter::AdjustParentPanelHeight(bool restore, bool panelResizeByPredicti
                        }
                }
 
-               if (__isKeypadCommandButtonVisible || (pFooter && (pFooter->GetVisibleState() == true)))
+               if ((__pParentForm && __isKeypadCommandButtonVisible) || (pFooter && (pFooter->GetVisibleState() == true)))
                {
                        orientation = __pEdit->GetOrientation();
                        GET_SHAPE_CONFIG(FOOTER::HEIGHT, orientation, commandButtonHeight);
index 17c71ae..b4426be 100644 (file)
@@ -473,7 +473,7 @@ _Keypad::ChangeLayoutInternal(void)
        editRect.height -= footerHeight;
 
        FloatRectangle keypadRect;
-       if (__pChildEdit->IsKeypadExist())
+       if (__pChildEdit->IsKeypadExist() && __isInitialized == true)
        {
                r = __pChildEdit->GetKeypadBounds(keypadRect);
                SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
@@ -506,6 +506,7 @@ _Keypad::ChangeLayoutInternal(void)
        __pFooter->SetResizable(false);
        __pFooter->SetMovable(false);
 
+       SysLog(NID_UI_CTRL, "[FULLEDIT] ChangeLayoutInternal Draw FullScreen window- Footer position(%f, %f, %f, %f)", footerBounds.x, footerBounds.y, footerBounds.width, footerBounds.height);
        Invalidate(true);
 
        return r;
@@ -745,6 +746,7 @@ _Keypad::OnActionPerformed(const _Control& source, int actionId)
 void
 _Keypad::OnKeypadWillOpen(void)
 {
+       SysLog(NID_UI_CTRL, "[FULLEDIT] OnKeypadWillOpen");
        return;
 }
 
@@ -756,6 +758,8 @@ _Keypad::OnKeypadOpened(void)
                __isPredictionWindowOpendInUSBMode = true;
        }
 
+       SysLog(NID_UI_CTRL, "[FULLEDIT] OnKeypadOpened");
+
        ChangeLayoutInternal();//usb off & bounded or usb on & prediction
 
        return;
@@ -766,6 +770,8 @@ _Keypad::OnKeypadClosed(void)
 {
        __isPredictionWindowOpendInUSBMode = false;
 
+       SysLog(NID_UI_CTRL, "[FULLEDIT] OnKeypadClosed");
+
        ChangeLayoutInternal();
 
        return;
@@ -774,6 +780,8 @@ _Keypad::OnKeypadClosed(void)
 void
 _Keypad::OnKeypadBoundsChanged(void)
 {
+       SysLog(NID_UI_CTRL, "[FULLEDIT] OnKeypadBoundsChanged");
+
        ChangeLayoutInternal();// predictive window show/hide
 
        return;
index c1a9200..b2ff62d 100644 (file)
@@ -53,7 +53,8 @@ class _EditCopyPasteManager
 public:
        enum HandlerType
        {
-               HANDLER_TYPE_LEFT = 0,
+               HANDLER_TYPE_CENTER = 0,
+               HANDLER_TYPE_LEFT,
                HANDLER_TYPE_RIGHT,
                HANDLER_TYPE_MAX
        };
@@ -95,7 +96,7 @@ public:
        int GetCursorPositionAt(const Tizen::Graphics::FloatPoint& touchPoint) const;
        result SetCursorPosition(int position);
        int GetCursorPosition(void) const;
-       int GetHandlerCursorPosition(bool rightHandler) const;
+       int GetHandlerCursorPosition(HandlerType handlerType) const;
        void SendTextBlockEvent(void);
        void Release(void);
        void ReleaseCopyPastePopup(void);
@@ -106,8 +107,6 @@ public:
        result AddCopyPasteEventListener(const _IEditCopyPasteEventListener& listener);
        result SendCopyPasteEvent(Tizen::Ui::Controls::CoreCopyPasteStatus status, Tizen::Ui::Controls::CoreCopyPasteAction action);
        void LaunchSearch(void);
-       void PrintLog(const Tizen::Graphics::Point& point);
-       void PrintLog(const Tizen::Graphics::FloatPoint& point);
        bool GetTextBlockReleaseFlag(void) const;
        void SetTextBlockReleaseFlag(bool enabled);
        bool IsCopyPasteHandleExist(void) const;
@@ -131,6 +130,7 @@ private:
        _EditCopyPasteHandler* __pHandle[HANDLER_TYPE_MAX];
        _EditCopyPasteEvent* __pCoreCopyPasteEvent;
        _Edit* __pEdit;
+       _EditPresenter* __pEditPresenter;
        float __contextMenuHeight;
        bool __needToReleaseBlock;
        bool __isHandlerMoving;
index 48f6d9c..7c43bc4 100644 (file)
@@ -325,6 +325,9 @@ public:
        bool IsUpdateInitialBounds(void);
        virtual Tizen::Graphics::Rectangle GetTextBounds(void) const;
        virtual Tizen::Graphics::FloatRectangle GetTextBoundsF(void) const;
+       result InitializeCursor(void);
+       result CalculateCursorBounds(const Tizen::Graphics::Rectangle& textBounds, Tizen::Graphics::Rectangle& cursorBounds, int curPos = -1);
+       result CalculateCursorBounds(const Tizen::Graphics::FloatRectangle& textBounds, Tizen::Graphics::FloatRectangle& cursorBounds, int curPos = -1);
 
 protected:
        void StopTitleSlidingTimer(void);
@@ -334,11 +337,8 @@ protected:
        virtual void OnTextCommitted(const Tizen::Base::String& commitText);
        virtual void OnSurroundingTextDeleted(int offset, int charCount);
        result InitializeAtFirstDrawing(void);
-       result CalculateCursorBounds(const Tizen::Graphics::Rectangle& textBounds, Tizen::Graphics::Rectangle& cursorBounds, int curPos = -1);
-       result CalculateCursorBounds(const Tizen::Graphics::FloatRectangle& textBounds, Tizen::Graphics::FloatRectangle& cursorBounds, int curPos = -1);
        Tizen::Ui::Animations::_VisualElement* GetCursorVisualElement(void) const;
        result DrawBackground(Tizen::Graphics::Canvas& canvas, bool drawTitleText = true);
-       result InitializeCursor(void);
        result DrawText(Tizen::Graphics::Canvas& canvas);
        bool IsInitialized(void) const;
        void StopCursorTimer(void);
index 2d46afc..ed28bed 100755 (executable)
@@ -48,19 +48,17 @@ DECLARE_UI_CONFIG(EDIT);
        DECLARE_IMAGE_CONFIG(BG_HIGHLIGHTED, 3)
        DECLARE_IMAGE_CONFIG(BG_DISABLED, 4)
        DECLARE_IMAGE_CONFIG(BG_EFFECT, 5)
-       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_LEFT_NORMAL, 6)
-       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_LEFT_PRESSED, 7)
+       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_CENTER_NORMAL, 6)
+       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_LEFT_NORMAL, 7)
        DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_RIGHT_NORMAL, 8)
-       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_RIGHT_PRESSED, 9)
-       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_LEFT_NORMAL, 10)
-       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_LEFT_PRESSED, 11)
-       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_RIGHT_NORMAL, 12)
-       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_RIGHT_PRESSED, 13)
-       DECLARE_IMAGE_CONFIG(COPY_PASTE_SEARCH_ICON, 14)
-       DECLARE_IMAGE_CONFIG(BG_ROUND_NORMAL, 15)
-       DECLARE_IMAGE_CONFIG(BG_ROUND_EFFECT, 16)
-       DECLARE_IMAGE_CONFIG(CLEAR_ICON_NORMAL, 17)
-       DECLARE_IMAGE_CONFIG(CLEAR_ICON_PRESSED, 18)
+       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_LEFT_NORMAL, 9)
+       DECLARE_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_RIGHT_NORMAL, 10)
+       DECLARE_IMAGE_CONFIG(COPY_PASTE_SEARCH_ICON, 11)
+       DECLARE_IMAGE_CONFIG(COPY_PASTE_MAGNIFIER, 12)
+       DECLARE_IMAGE_CONFIG(BG_ROUND_NORMAL, 13)
+       DECLARE_IMAGE_CONFIG(BG_ROUND_EFFECT, 14)
+       DECLARE_IMAGE_CONFIG(CLEAR_ICON_NORMAL, 15)
+       DECLARE_IMAGE_CONFIG(CLEAR_ICON_PRESSED, 16)
        
        DECLARE_DIMENSION_CONFIG(MIN_SIZE, 1)
        DECLARE_DIMENSION_CONFIG(TITLE_STYLE_MIN_SIZE, 2)
@@ -106,6 +104,12 @@ DECLARE_UI_CONFIG(EDIT);
        DECLARE_SHAPE_CONFIG(AREA_SCROLL_WIDTH, 36)
        DECLARE_SHAPE_CONFIG(CURSOR_WIDTH, 37)
        DECLARE_SHAPE_CONFIG(TEXT_OBJECT_MININMUM_WIDTH, 38)
+       DECLARE_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_WIDTH, 39)
+       DECLARE_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_HEIGHT, 40)
+       DECLARE_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_CAPTURE_WIDTH, 41)
+       DECLARE_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_CAPTURE_HEIGHT, 42)
+       DECLARE_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_CAPTURE_POSITION_X, 43)
+       DECLARE_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_CAPTURE_POSITION_Y, 44)
 DECLARE_END_UI_CONFIG(EDIT);
 
 #endif //_FUI_RESOURCE_EDIT_CONFIG_H_
index 13a9f52..1e39d93 100755 (executable)
@@ -47,16 +47,15 @@ START_UI_CONFIG(EDIT);
        ADD_IMAGE_CONFIG(BG_HIGHLIGHTED, #00_edit_field_no_line_square_bg.#.png);
        ADD_IMAGE_CONFIG(BG_DISABLED, #00_edit_field_no_line_square_bg.#.png);
        ADD_IMAGE_CONFIG(BG_EFFECT, #00_edit_field_no_line_square_bg.#.png);
-       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_LEFT_NORMAL, #copy&paste_Icon_left.png);
-       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_LEFT_PRESSED, #copy&paste_Icon_left_press.png);
-       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_RIGHT_NORMAL, #copy&paste_Icon_right.png);
-       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_RIGHT_PRESSED, #copy&paste_Icon_right_press.png);
-       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_LEFT_NORMAL, #copy&paste_Icon_left_reverse.png);
-       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_LEFT_PRESSED, #copy&paste_Icon_left_press_reverse.png);
-       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_RIGHT_NORMAL, #copy&paste_Icon_right_reverse.png);
-       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_RIGHT_PRESSED, #copy&paste_Icon_right_press_reverse.png);
+       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_CENTER_NORMAL, #copy&paste_Handler_center.png);        
+       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_LEFT_NORMAL, #copy&paste_Handler_left_01.png);
+       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_RIGHT_NORMAL, #copy&paste_Handler_right.png);
+       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_LEFT_NORMAL, #copy&paste_Handler_left.png);
+       ADD_IMAGE_CONFIG(COPY_PASTE_ICON_REVERSE_RIGHT_NORMAL, #copy&paste_Handler_left_reverse.png);
        ADD_IMAGE_CONFIG(COPY_PASTE_SEARCH_ICON, #copy&paste_icon_search.png);
+       ADD_IMAGE_CONFIG(COPY_PASTE_MAGNIFIER, #copy&paste_Magnifier.#.png);
        ADD_IMAGE_CONFIG(BG_ROUND_NORMAL, #00_edit_field_round_bg.#.png);
+       ADD_IMAGE_CONFIG(BG_ROUND_EFFECT, #00_edit_field_line_round_bg_01.#.png);
        ADD_IMAGE_CONFIG(CLEAR_ICON_NORMAL, #00_edit_field_clear.png);
        ADD_IMAGE_CONFIG(CLEAR_ICON_PRESSED, #00_edit_field_clear.png);
 
@@ -81,8 +80,8 @@ START_UI_CONFIG(EDIT);
        ADD_SHAPE_CONFIG(DEFAULT_TITLE_FONT_SIZE, 32);
        ADD_SHAPE_CONFIG(CLEAR_ICON_HEIGHT, 45);
        ADD_SHAPE_CONFIG(CLEAR_ICON_WIDTH, 45);
-       ADD_SHAPE_CONFIG(COPYPASTE_HANDLER_WIDTH, 48);
-       ADD_SHAPE_CONFIG(COPYPASTE_HANDLER_HEIGHT, 68);
+       ADD_SHAPE_CONFIG(COPYPASTE_HANDLER_WIDTH, 29);
+       ADD_SHAPE_CONFIG(COPYPASTE_HANDLER_HEIGHT, 45);
        ADD_SHAPE_CONFIG(FIELD_BORDER_WIDTH, 1);
        ADD_SHAPE_CONFIG(FIELD_LEFT_MARGIN, 0);
        ADD_SHAPE_CONFIG(FIELD_RIGHT_MARGIN, 0);
@@ -116,6 +115,12 @@ START_UI_CONFIG(EDIT);
        ADD_SHAPE_CONFIG(AREA_SCROLL_WIDTH, 5);
        ADD_SHAPE_CONFIG(CURSOR_WIDTH, 2);
        ADD_SHAPE_CONFIG(TEXT_OBJECT_MININMUM_WIDTH, 63);
+       ADD_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_WIDTH, 324);
+       ADD_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_HEIGHT, 164);
+       ADD_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_CAPTURE_WIDTH, 192);
+       ADD_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_CAPTURE_HEIGHT, 69);
+       ADD_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_CAPTURE_POSITION_X, 18);
+       ADD_SHAPE_CONFIG(COPYPASTE_MAGNIFIER_CAPTURE_POSITION_Y, 18);
 
        ADD_DIMENSION_CONFIG(MIN_SIZE, 48, 60);
        ADD_DIMENSION_CONFIG(TITLE_STYLE_MIN_SIZE, 48, 102);