jaehyun pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=4439ca4d75af8ac0bee95cbed2144b213f33f6fa

commit 4439ca4d75af8ac0bee95cbed2144b213f33f6fa
Author: Jaehyun Cho <[email protected]>
Date:   Thu Feb 26 20:40:58 2015 +0900

    text_setting: Add font name/style settings.
---
 data/themes/default/layout_setting.edc |  19 ++-
 data/themes/default/theme_ext.edc      |  60 +++++++++
 src/bin/config_data.c                  |  24 ++++
 src/bin/main.c                         |   5 +
 src/bin/setting.c                      |   4 +
 src/bin/text_setting.c                 | 230 +++++++++++++++++++++++++++++++++
 src/include/config_data.h              |   2 +
 src/include/text_setting.h             |   4 +
 8 files changed, 347 insertions(+), 1 deletion(-)

diff --git a/data/themes/default/layout_setting.edc 
b/data/themes/default/layout_setting.edc
index 44e1ba9..1dd6a9d 100644
--- a/data/themes/default/layout_setting.edc
+++ b/data/themes/default/layout_setting.edc
@@ -580,7 +580,7 @@ group { name: "text_setting_layout";
             rel1 {to: "base_frame"; relative: 0.5 0; offset: 5 0;}
             rel2 {to: "base_frame"; relative: 1 0;}
             align: 0.5 0;
-            min: 0 90;
+            min: 0 120;
             fixed: 0 1;
          }
       }
@@ -592,5 +592,22 @@ group { name: "text_setting_layout";
             rel2.to: "preference_frame";
          }
       }
+      part { name: "font_frame";
+         type: SPACER;
+         scale: 1;
+         description {
+            rel1 {to: "preference_frame"; relative: 0 1; offset: 0 5;}
+            rel2 {to: "base_frame";}
+         }
+      }
+      part { name: "elm.swallow.font";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            rel1.to: "font_frame";
+            rel2.to: "font_frame";
+         }
+      }
+
    }
 }
diff --git a/data/themes/default/theme_ext.edc 
b/data/themes/default/theme_ext.edc
index 5ea427e..fb8807f 100644
--- a/data/themes/default/theme_ext.edc
+++ b/data/themes/default/theme_ext.edc
@@ -1812,3 +1812,63 @@ group { name: "elm/entry/base-nowrap-noedit/enventor";
    }
 }
 
+group { name: "elm/entry/base/enventor_setting";
+   inherit: "elm/entry/base/enventor";
+   styles {
+      style { name: "setting_entry_style";
+         base: "font="FN" font_size=10 color=#ffffff style=shadow,bottom 
shadow_color=#00000080 wrap=word text_class=enventor_setting_entry 
color_class=enventor_setting_entry left_margin=2 right_margin=2";
+         ENABLED_TEXTBLOCK_TAGS
+      }
+      style { name: "setting_entry_disabled_style";
+         base: "font="FN" font_size=10 color=#151515 style=shadow,bottom 
shadow_color=#ffffff19 wrap=word text_class=enventor_setting_entry 
color_class=enventor_setting_entry_disabled left_margin=2 right_margin=2";
+         DISABLED_TEXTBLOCK_TAGS
+      }
+      style { name: "setting_entry_guide_style";
+         base: "font="FN" font_size=10 color=#000000 style=shadow,bottom 
shadow_color=#ffffff19 wrap=word text_class=enventor_setting_entry 
color_class=enventor_setting_entry_guide left_margin=2 right_margin=2 
ellipsis=0.0";
+         DISABLED_TEXTBLOCK_TAGS
+      }
+   }
+//   data.item: "context_menu_orientation" "horizontal";
+   parts {
+      part { name: "elm.guide"; type: TEXTBLOCK; mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+            text { style: "setting_entry_guide_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+   }
+}
+
+group { name: "elm/entry/base-nowrap-noedit/enventor_setting";
+   inherit: "elm/entry/base/enventor_setting";
+   parts {
+      part { name: "elm.text";
+         entry_mode: PLAIN;
+         source: "elm/entry/selection/enventor"; // selection under
+         source4: ""; // cursorover
+         source6: "elm/entry/anchor/enventor"; // anchor under
+         description { state: "default" 0.0;
+            text { style: "setting_entry_style";
+               min: 1 1;
+               ellipsis: -1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text { style: "setting_entry_disabled_style";
+            }
+         }
+      }
+   }
+}
+
diff --git a/src/bin/config_data.c b/src/bin/config_data.c
index dd62b96..daf21d9 100644
--- a/src/bin/config_data.c
+++ b/src/bin/config_data.c
@@ -4,6 +4,8 @@ typedef struct config_s
 {
    const char *edc_path;
    const char *edj_path;
+   const char *font_name;
+   const char *font_style;
 
    Eina_List *edc_img_path_list;
    Eina_List *edc_snd_path_list;
@@ -216,6 +218,10 @@ eddc_init(void)
                                        "edc_dat_path_list", edc_dat_path_list);
    EET_DATA_DESCRIPTOR_ADD_LIST_STRING(edd_base, config_data,
                                        "syntax_color_list", syntax_color_list);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "font_name", font_name,
+                                 EET_T_STRING);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "font_style", 
font_style,
+                                 EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "font_scale", 
font_scale,
                                  EET_T_FLOAT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "view_scale",
@@ -653,6 +659,24 @@ config_auto_complete_get(void)
 }
 
 void
+config_font_set(const char *font_name, const char *font_style)
+{
+   config_data *cd = g_cd;
+
+   eina_stringshare_replace(&cd->font_name, font_name);
+   eina_stringshare_replace(&cd->font_style, font_style);
+}
+
+void
+config_font_get(const char **font_name, const char **font_style)
+{
+   config_data *cd = g_cd;
+
+   if (font_name) *font_name = cd->font_name;
+   if (font_style) *font_style = cd->font_style;
+}
+
+void
 config_font_scale_set(float font_scale)
 {
    config_data *cd = g_cd;
diff --git a/src/bin/main.c b/src/bin/main.c
index 4f7131a..a8f47dd 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -53,6 +53,10 @@ auto_indent_toggle(app_data *ad)
 static void
 enventor_common_setup(Evas_Object *enventor)
 {
+   const char *font_name;
+   const char *font_style;
+   config_font_get(&font_name, &font_style);
+   enventor_object_font_set(enventor, font_name, font_style);
    enventor_object_font_scale_set(enventor, config_font_scale_get());
    enventor_object_live_view_scale_set(enventor, config_view_scale_get());
    enventor_object_linenumber_set(enventor, config_linenumber_get());
@@ -535,6 +539,7 @@ enventor_setup(app_data *ad)
                                   enventor_ctxpopup_dismissed_cb, ad);
    evas_object_smart_callback_add(enventor, "focused",
                                   enventor_focused_cb, ad);
+
    evas_object_size_hint_expand_set(enventor, EVAS_HINT_EXPAND,
                                     EVAS_HINT_EXPAND);
    evas_object_size_hint_fill_set(enventor, EVAS_HINT_FILL, EVAS_HINT_FILL);
diff --git a/src/bin/setting.c b/src/bin/setting.c
index 64c27cd..c87813b 100644
--- a/src/bin/setting.c
+++ b/src/bin/setting.c
@@ -166,6 +166,10 @@ setting_reset_btn_cb(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
    elm_check_state_set(sd->toggle_highlight, config_part_highlight_get());
    elm_check_state_set(sd->toggle_swallow, config_dummy_swallow_get());
 
+   const char *font_name;
+   const char *font_style;
+   config_font_get(&font_name, &font_style);
+   text_setting_font_set(font_name, font_style);
    text_setting_font_scale_set((double) config_font_scale_get());
    text_setting_linenumber_set(config_linenumber_get());
    text_setting_auto_indent_set(config_auto_indent_get());
diff --git a/src/bin/text_setting.c b/src/bin/text_setting.c
index f5e7c85..a5434ca 100644
--- a/src/bin/text_setting.c
+++ b/src/bin/text_setting.c
@@ -1,11 +1,23 @@
 #include "common.h"
 #include "text_setting.h"
 
+#define UNSUPPORTED_FONT_CNT 28
+#define UNSUPPORTED_FONT_MAX_LEN 32
 #define COLOR_KEYWORD_MAX_CNT 76
 #define SYNTAX_TEMPLATE_MAX_LEN 3072
 #define SYNTAX_TEMPLATE_FONT_SIZE 10
 #define SYNTAX_COLOR_LEN 7
 
+static char 
unsupported_font_list[UNSUPPORTED_FONT_CNT][UNSUPPORTED_FONT_MAX_LEN] =
+{
+   "Dingbats", "KacstArt", "KacstBook", "KacstDecorative", "KacstDigital",
+   "KacstFarsi", "KacstLetter", "KacstNaskh", "KacstOffice", "KacstPen",
+   "KacstPoster", "KacstQurn", "KacstScreen", "KacstTitle", "KacstTitleL",
+   "LKLUG", "Lohit Bengali", "Lohit Gujarati", "Lohit Punjabi", "Lohit Tamil",
+   "OpenSymbol", "Pothana2000", "Saab", "Standard Symbols L", "Symbol",
+   "Vemana2000", "ori1Uni", "mry_KacstQurn"
+};
+
 static char color_val[ENVENTOR_SYNTAX_COLOR_LAST][SYNTAX_COLOR_LEN] = {{0}};
 
 static int color_type_list[COLOR_KEYWORD_MAX_CNT] =
@@ -642,6 +654,27 @@ text_setting_double_clicked_cb(void *data, Evas_Object 
*obj,
 }
 
 static Evas_Object *
+label_create(Evas_Object *parent, const char *text)
+{
+   Evas_Object *label = elm_label_add(parent);
+   elm_object_text_set(label, text);
+   evas_object_show(label);
+
+   return label;
+}
+
+static Evas_Object *
+list_create(Evas_Object *parent)
+{
+   Evas_Object *list = elm_list_add(parent);
+   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(list);
+
+   return list;
+}
+
+static Evas_Object *
 toggle_create(Evas_Object *parent, const char *text, Eina_Bool state)
 {
    Evas_Object *toggle = elm_check_add(parent);
@@ -666,6 +699,81 @@ font_scale_slider_changed_cb(void *data, Evas_Object *obj,
    syntax_template_apply();
 }
 
+static int
+font_cmp_cb(const void *data1,
+            const void *data2)
+{
+   if (!data1) return 1;
+   if (!data2) return -1;
+   return strcmp(data1, data2);
+}
+
+static void
+font_style_selected_cb(void *data, Evas_Object *obj,
+                       void *event_info EINA_UNUSED)
+{
+   Evas_Object *list_font_name = data;
+   Elm_Object_Item *font_name_it = elm_list_selected_item_get(list_font_name);
+   Elm_Object_Item *font_style_it = elm_list_selected_item_get(obj);
+   const char *font_name = elm_object_item_text_get(font_name_it);
+   const char *font_style = elm_object_item_text_get(font_style_it);
+
+   text_setting_font_set(font_name, font_style);
+}
+
+static void
+font_name_selected_cb(void *data, Evas_Object *obj,
+                      void *event_info EINA_UNUSED)
+{
+   Evas_Object *list_font_style = data;
+   Elm_Object_Item *it = elm_list_selected_item_get(obj);
+   const char *font_name = elm_object_item_text_get(it);
+   elm_list_clear(list_font_style);
+
+   //Append Items of Font Style List
+   Elm_Font_Properties *efp;
+   Eina_List *font_list;
+   Eina_List *l, *ll;
+   char *font, *style;
+   font_list = evas_font_available_list(evas_object_evas_get(obj));
+   font_list = eina_list_sort(font_list, eina_list_count(font_list),
+                              font_cmp_cb);
+   EINA_LIST_FOREACH(font_list, l, font)
+     {
+        efp = elm_font_properties_get(font);
+        if (efp)
+          {
+             if (!strcmp(font_name, efp->name))
+               {
+                  EINA_LIST_FOREACH(efp->styles, ll, style)
+                    {
+                       elm_list_item_append(list_font_style, style, NULL, NULL,
+                                            font_style_selected_cb, obj);
+                    }
+               }
+             elm_font_properties_free(efp);
+          }
+     }
+   elm_list_go(list_font_style);
+
+   text_setting_font_set(font_name, NULL);
+}
+
+static Eina_Bool
+is_supported_font(const char *font_name)
+{
+   if (!font_name) return EINA_FALSE;
+
+   int i;
+   for (i = 0; i < UNSUPPORTED_FONT_CNT; i++)
+     {
+        if (!strcmp(font_name, unsupported_font_list[i]))
+          return EINA_FALSE;
+     }
+
+   return EINA_TRUE;
+}
+
 Evas_Object *
 text_setting_layout_create(Evas_Object *parent)
 {
@@ -679,6 +787,9 @@ text_setting_layout_create(Evas_Object *parent)
 
    //Text Editor
    Evas_Object *entry = elm_entry_add(layout);
+   char style_name[128];
+   snprintf(style_name, sizeof(style_name), "%s_setting", elm_app_name_get());
+   elm_object_style_set(entry, style_name);
    elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
    elm_entry_line_wrap_set(entry, ELM_WRAP_NONE);
    elm_entry_scrollable_set(entry, EINA_TRUE);
@@ -686,6 +797,12 @@ text_setting_layout_create(Evas_Object *parent)
    evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
+   //Font information
+   const char *font_name;
+   const char *font_style;
+   config_font_get(&font_name, &font_style);
+   text_setting_font_set(font_name, font_style);
+
    tsd->font_scale = (double) config_font_scale_get();
    char *syntax_template_str = syntax_template_create(tsd->font_scale);
    elm_entry_entry_set(entry, syntax_template_str);
@@ -747,7 +864,91 @@ text_setting_layout_create(Evas_Object *parent)
                                                 config_auto_complete_get());
    elm_box_pack_end(box, toggle_autocomp);
 
+   //Font Name and Style (Box)
+   box = elm_box_add(layout);
+   elm_box_horizontal_set(box, EINA_TRUE);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_part_content_set(layout, "elm.swallow.font", box);
+
+   //Font Name (Box)
+   box2 = elm_box_add(box);
+   evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(box2);
+
+   elm_box_pack_end(box, box2);
+
+   //Font Name (Label)
+
+   /* This layout is intended to put the label aligned to left side
+      far from 3 pixels. */
+   Evas_Object *layout_padding3 = elm_layout_add(box2);
+   elm_layout_file_set(layout_padding3, EDJE_PATH, "padding3_layout");
+   evas_object_show(layout_padding3);
+
+   elm_box_pack_end(box2, layout_padding3);
+
+   Evas_Object *label_font_name = label_create(layout_padding3, "Font Name");
+   elm_object_part_content_set(layout_padding3, "elm.swallow.content",
+                               label_font_name);
+
+   //Font Name (List)
+   Evas_Object *list_font_name = list_create(box2);
+   elm_box_pack_end(box2, list_font_name);
+
+   //Font Style (Box)
+   box2 = elm_box_add(box);
+   evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(box2);
+
+   elm_box_pack_end(box, box2);
+
+   //Font Style (Label)
+
+   /* This layout is intended to put the label aligned to left side
+      far from 3 pixels. */
+   layout_padding3 = elm_layout_add(box2);
+   elm_layout_file_set(layout_padding3, EDJE_PATH, "padding3_layout");
+   evas_object_show(layout_padding3);
+
+   elm_box_pack_end(box2, layout_padding3);
+
+   Evas_Object *label_font_style = label_create(layout_padding3, "Font Style");
+   elm_object_part_content_set(layout_padding3, "elm.swallow.content",
+                               label_font_style);
+
+   //Font Style (List)
+   Evas_Object *list_font_style = list_create(box2);
+   elm_box_pack_end(box2, list_font_style);
+
+   //Append Items of Font Name List
+   Elm_Font_Properties *efp;
+   Eina_List *font_list;
+   Eina_List *l;
+   char *font;
+   char prev_font[128] = {0};
+   font_list = evas_font_available_list(evas_object_evas_get(parent));
+   font_list = eina_list_sort(font_list, eina_list_count(font_list),
+                              font_cmp_cb);
+   EINA_LIST_FOREACH(font_list, l, font)
+     {
+        efp = elm_font_properties_get(font);
+        if (efp)
+          {
+             if (strcmp(prev_font, efp->name) && is_supported_font(efp->name))
+               {
+                  elm_list_item_append(list_font_name, efp->name, NULL, NULL,
+                                       font_name_selected_cb, list_font_style);
+                  snprintf(prev_font, sizeof(prev_font), "%s", efp->name);
+               }
+             elm_font_properties_free(efp);
+          }
+     }
+   elm_list_go(list_font_name);
+
    tsd->text_setting_layout = layout;
+   tsd->text_edit_entry = entry;
    tsd->slider_font = slider_font;
    tsd->toggle_linenum = toggle_linenum;
    tsd->toggle_indent = toggle_indent;
@@ -793,12 +994,39 @@ text_setting_config_set(void)
 {
    text_setting_data *tsd = g_tsd;
 
+   config_font_set(tsd->font_name, tsd->font_style);
    config_font_scale_set((float) elm_slider_value_get(tsd->slider_font));
    config_linenumber_set(elm_check_state_get(tsd->toggle_linenum));
    config_auto_indent_set(elm_check_state_get(tsd->toggle_indent));
    config_auto_complete_set(elm_check_state_get(tsd->toggle_autocomp));
 }
 
+static void
+text_setting_font_apply(const char *font_name, const char *font_style)
+{
+   text_setting_data *tsd = g_tsd;
+
+   char text_class_name[32];
+   snprintf(text_class_name, sizeof(text_class_name), "%s_setting_entry",
+            elm_app_name_get());
+
+   char *font = elm_font_fontconfig_name_get(font_name, font_style);
+   edje_text_class_set(text_class_name, font, -100);
+   elm_font_fontconfig_name_free(font);
+
+   elm_entry_calc_force(tsd->text_edit_entry);
+}
+
+void
+text_setting_font_set(const char *font_name, const char *font_style)
+{
+   text_setting_data *tsd = g_tsd;
+
+   eina_stringshare_replace(&tsd->font_name, font_name);
+   eina_stringshare_replace(&tsd->font_style, font_style);
+   text_setting_font_apply(font_name, font_style);
+}
+
 void
 text_setting_font_scale_set(double font_scale)
 {
@@ -858,6 +1086,8 @@ text_setting_term(void)
      free(tsd->syntax_template_format);
    if (tsd->syntax_template_str)
      free(tsd->syntax_template_str);
+   eina_stringshare_del(tsd->font_name);
+   eina_stringshare_del(tsd->font_style);
    free(tsd);
    g_tsd = NULL;
 }
diff --git a/src/include/config_data.h b/src/include/config_data.h
index ffbafe6..a2de4c8 100644
--- a/src/include/config_data.h
+++ b/src/include/config_data.h
@@ -40,6 +40,8 @@ void config_auto_indent_set(Eina_Bool auto_indent);
 Eina_Bool config_auto_indent_get(void);
 void config_auto_complete_set(Eina_Bool auto_complete);
 Eina_Bool config_auto_complete_get(void);
+void config_font_set(const char *font_name, const char *font_style);
+void config_font_get(const char **font_name, const char **font_style);
 void config_font_scale_set(float font_scale);
 float config_font_scale_get(void);
 void config_view_scale_set(double view_scale);
diff --git a/src/include/text_setting.h b/src/include/text_setting.h
index 41d43b6..5e37be2 100644
--- a/src/include/text_setting.h
+++ b/src/include/text_setting.h
@@ -8,6 +8,7 @@ typedef struct color_keyword_s
 struct text_setting_s
 {
    Evas_Object *text_setting_layout;
+   Evas_Object *text_edit_entry;
    Evas_Object *color_ctxpopup;
 
    Evas_Object *slider_font;
@@ -19,6 +20,8 @@ struct text_setting_s
    char *syntax_template_format;
    char *syntax_template_str;
 
+   const char *font_name;
+   const char *font_style;
    double font_scale;
 };
 
@@ -29,6 +32,7 @@ void text_setting_layout_show(Evas_Object *setting_layout, 
Evas_Object *tabbar,
 void text_setting_syntax_color_reset(void);
 void text_setting_syntax_color_save(void);
 void text_setting_config_set(void);
+void text_setting_font_set(const char *font_name, const char *font_style);
 void text_setting_font_scale_set(double font_scale);
 void text_setting_linenumber_set(Eina_Bool enabled);
 void text_setting_auto_indent_set(Eina_Bool enabled);

-- 


Reply via email to