TizenRefApp-7666 Implement support of font size change in the Dialer 13/99013/2
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Mon, 21 Nov 2016 12:07:20 +0000 (14:07 +0200)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Thu, 24 Nov 2016 14:25:35 +0000 (06:25 -0800)
Change-Id: I3548052aca9245245c237dbdab783278d59f1dc3
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
lib-phone/inc/Phone/Dialer/KeypadEntry.h
lib-phone/src/Phone/Dialer/DialerView.cpp
lib-phone/src/Phone/Dialer/KeypadEntry.cpp

index 1da71fc9f436724dde3f4342e36b67109aa98389..4a354df8d1f339a5b2ed60a6c1cfb1552de16a3f 100644 (file)
@@ -36,6 +36,8 @@ namespace Phone
                         */
                        typedef std::function<void()> ChangedCallback;
 
+                       KeypadEntry();
+
                        /**
                         * @return Entered number
                         */
@@ -53,9 +55,9 @@ namespace Phone
                        void insert(char c);
 
                        /**
-                        * @brief Remove last character from the current entry.
+                        * @brief Erase character before the cursor or current selection if exists.
                         */
-                       void popBack();
+                       void erase();
 
                        /**
                         * @brief Erase current entry.
@@ -69,10 +71,17 @@ namespace Phone
 
                private:
                        virtual Evas_Object *onCreate(Evas_Object *parent) override;
+                       virtual void onCreated() override;
+
                        static void onFocused(void *data, Evas_Object *obj, void *event_info);
                        static void onUnfocused(void *data, Evas_Object *obj, void *event_info);
                        void onChanged(Evas_Object *obj, void *event_info);
 
+                       int calcFontSize();
+                       void updateFontSize();
+
+                       int m_FontSize;
+                       int m_Length;
                        ChangedCallback m_OnChanged;
                };
        }
index 766be1f488ad4802c80b992a82090edc41eb4f6e..77e13b0a3ec567abc65124ffde8c28b58cac42b1 100644 (file)
@@ -298,7 +298,7 @@ bool DialerView::onKeyLongpressed(Ui::Button &button)
 void DialerView::onBackspacePressed(Ui::Button &button)
 {
        feedback_play(FEEDBACK_PATTERN_KEY_BACK);
-       m_Entry->popBack();
+       m_Entry->erase();
 }
 
 bool DialerView::onBackspaceLongpressed(Ui::Button &button)
index 45b29c4d7667f109b1f02a610d4f434191f8c74e..8cce246f1641b54c1dd4e70cc547bd190647a8e0 100644 (file)
 
 #include <efl_extension.h>
 
+#define TEXT_MIN_SIZE 56
+#define TEXT_MAX_SIZE 76
+#define STYLE_BUFFER_SIZE 256
+
 using namespace Phone::Dialer;
 
+KeypadEntry::KeypadEntry()
+       : m_FontSize(TEXT_MAX_SIZE), m_Length(0)
+{
+}
+
 std::string KeypadEntry::getNumber() const
 {
        std::string number;
@@ -45,7 +54,7 @@ void KeypadEntry::insert(char c)
        elm_entry_entry_insert(getEvasObject(), str);
 }
 
-void KeypadEntry::popBack()
+void KeypadEntry::erase()
 {
        if (!elm_entry_selection_get(getEvasObject())) {
                int pos = elm_entry_cursor_pos_get(getEvasObject());
@@ -75,7 +84,6 @@ Evas_Object *KeypadEntry::onCreate(Evas_Object *parent)
 
        static Elm_Entry_Filter_Accept_Set filter = { "+*#;,1234567890", NULL };
        elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set, &filter);
-       elm_entry_text_style_user_push(entry, "DEFAULT='font=Tizen:style=Light font_size=76 color=#fff align=center'");
 
        eext_entry_selection_back_event_allow_set(entry, EINA_TRUE);
        evas_object_smart_callback_add(entry, "focused",
@@ -87,6 +95,11 @@ Evas_Object *KeypadEntry::onCreate(Evas_Object *parent)
        return entry;
 }
 
+void KeypadEntry::onCreated()
+{
+       updateFontSize();
+}
+
 void KeypadEntry::onFocused(void *data, Evas_Object *obj, void *event_info)
 {
        edje_color_class_set("entry/default/cursor", 250, 250, 250, 255, 0, 0, 0, 0, 0, 0, 0, 0);
@@ -99,7 +112,48 @@ void KeypadEntry::onUnfocused(void *data, Evas_Object *obj, void *event_info)
 
 void KeypadEntry::onChanged(Evas_Object *obj, void *event_info)
 {
+       const char *text = elm_entry_entry_get(getEvasObject());
+       int prevLength = m_Length;
+       m_Length = text ? strlen(text) : 0;
+
+       if ((m_Length > prevLength && m_FontSize > TEXT_MIN_SIZE)
+        || (m_Length < prevLength && m_FontSize < TEXT_MAX_SIZE)) {
+               m_FontSize = calcFontSize();
+               updateFontSize();
+       }
+
        if (m_OnChanged) {
                m_OnChanged();
        }
 }
+
+int KeypadEntry::calcFontSize()
+{
+       int entryWidth = 0, textWidth = 0;
+       Evas_Object *textblock = elm_entry_textblock_get(getEvasObject());
+       evas_object_geometry_get(getEvasObject(), nullptr, nullptr, &entryWidth, nullptr);
+       evas_object_textblock_size_native_get(textblock, &textWidth, nullptr);
+
+       int fontSize = m_FontSize;
+       if (textWidth > 0) {
+               fontSize = (fontSize * entryWidth) / textWidth;
+               if (fontSize < TEXT_MIN_SIZE) {
+                       fontSize = TEXT_MIN_SIZE;
+               } else if (fontSize > TEXT_MAX_SIZE) {
+                       fontSize = TEXT_MAX_SIZE;
+               }
+       } else {
+               fontSize = TEXT_MAX_SIZE;
+       }
+
+       return fontSize;
+}
+
+void KeypadEntry::updateFontSize()
+{
+       char buffer[STYLE_BUFFER_SIZE];
+       snprintf(buffer, sizeof(buffer), "DEFAULT='font=Tizen:style=Light font_size=%d color=#fafafa align=%s'",
+                       m_FontSize, m_FontSize == TEXT_MAX_SIZE ? "center" : "left");
+       elm_entry_text_style_user_pop(getEvasObject());
+       elm_entry_text_style_user_push(getEvasObject(), buffer);
+}