summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/themes/Makefile.am3
-rw-r--r--data/themes/default.edc1
-rw-r--r--data/themes/default_textblock.edc36
-rw-r--r--src/bin/Makefile.am4
-rw-r--r--src/bin/e_configure.c2
-rw-r--r--src/bin/e_includes.h1
-rw-r--r--src/bin/e_test.c36
-rw-r--r--src/bin/e_widget_textblock.c123
-rw-r--r--src/bin/e_widget_textblock.h14
9 files changed, 217 insertions, 3 deletions
diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am
index 2a756730e3..84c3409b71 100644
--- a/data/themes/Makefile.am
+++ b/data/themes/Makefile.am
@@ -51,7 +51,8 @@ default_scrollframe.edc \
default_ilist.edc \
default_tlist.edc \
default_slider.edc \
-default_exebuf.edc
+default_exebuf.edc \
+default_textblock.edc
default.edj: Makefile $(EXTRA_DIST)
$(EDJE_CC) $(EDJE_FLAGS) \
diff --git a/data/themes/default.edc b/data/themes/default.edc
index 140f87dc3f..c26be7e73f 100644
--- a/data/themes/default.edc
+++ b/data/themes/default.edc
@@ -60,5 +60,6 @@ collections {
#include "default_tlist.edc"
#include "default_slider.edc"
#include "default_exebuf.edc"
+#include "default_textblock.edc"
}
diff --git a/data/themes/default_textblock.edc b/data/themes/default_textblock.edc
new file mode 100644
index 0000000000..d2c1a1ab34
--- /dev/null
+++ b/data/themes/default_textblock.edc
@@ -0,0 +1,36 @@
+styles
+{
+ style {
+ name: "textblock_style";
+ base: "font=Edje-Vera font_size=10 align=left color=#000 style=shadow shadow_color=#ffffff80 wrap=word";
+
+ tag: "br" "\n";
+ tag: "hilight" "+ font=Edje-Vera-Bold style=glow color=#fff glow2_color=#fe87 glow_color=#fa14";
+ tag: "title" "+ font_size=12 font=Edje-Vera-Bold style=soft_shadow color=#fff shadow_color=#00000020";
+ tag: "/title" "- \n \n";
+ }
+}
+
+group {
+ name: "widgets/textblock";
+ parts {
+ part {
+ name: "text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ offset: 4 4;
+ }
+ rel2 {
+ offset: -5 -5;
+ }
+ text {
+ style: "textblock_style";
+ min: 1 1;
+ }
+ }
+ }
+ }
+}
diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index 610b256f91..dd985e3b4f 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -134,7 +134,8 @@ e_deskpreview.h \
e_exebuf.h \
e_int_config_modules.h \
e_exehist.h \
-e_color_class.h
+e_color_class.h \
+e_widget_textblock.h
enlightenment_src = \
e_user.c \
@@ -251,6 +252,7 @@ e_exebuf.c \
e_int_config_modules.c \
e_exehist.c \
e_color_class.c \
+e_widget_textblock.c \
$(ENLIGHTENMENTHEADERS)
enlightenment_SOURCES = \
diff --git a/src/bin/e_configure.c b/src/bin/e_configure.c
index 595c3d3ec9..07fb8af834 100644
--- a/src/bin/e_configure.c
+++ b/src/bin/e_configure.c
@@ -54,7 +54,7 @@ e_configure_show(E_Container *con)
e_theme_edje_object_set(eco->edje, "base/theme/configure",
"widgets/configure/main");
- eco->ilist = e_widget_ilist_add(eco->evas, 48, 48, NULL);
+ eco->ilist = e_widget_ilist_add(eco->evas, 24, 24, NULL);
e_widget_ilist_selector_set(eco->ilist, 1);
e_widget_min_size_get(eco->ilist, &mw, &mh);
edje_extern_object_min_size_set(eco->ilist, mw, mh);
diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h
index 798cd54310..90659f69ba 100644
--- a/src/bin/e_includes.h
+++ b/src/bin/e_includes.h
@@ -113,3 +113,4 @@
#include "e_int_config_modules.h"
#include "e_exehist.h"
#include "e_color_class.h"
+#include "e_widget_textblock.h"
diff --git a/src/bin/e_test.c b/src/bin/e_test.c
index bcef3a5da2..0bfadcbf5f 100644
--- a/src/bin/e_test.c
+++ b/src/bin/e_test.c
@@ -534,6 +534,42 @@ _e_test_internal(E_Container *con)
evas_object_focus_set(o, 1);
}
+#elif 0
+static void
+_e_test_internal(E_Container *con)
+{
+ E_Dialog *dia;
+ Evas_Object *o;
+ Evas_Coord mw, mh;
+
+ dia = e_dialog_new(con);
+ e_dialog_title_set(dia, "A Test Dialog");
+
+ o = e_widget_textblock_add(dia->win->evas);
+ e_widget_textblock_markup_set(o,
+ "<title>A title</title>"
+ "This is some text<br>"
+ "Blah blah<br>"
+ "<hilight>hilighted text</hilight><br>"
+ "<br>"
+ "More lines of text<br>"
+ "And yet more lines of text<br>"
+ "A very very long line of text that SHOULD be getting word wrapped because it is so long.<br>"
+ "And another line<br>"
+ "Some more<br>"
+ "Smelly fish on a stick<br>"
+ "Whatever."
+ );
+ evas_object_show(o);
+
+ e_dialog_content_set(dia, o, 160, 160);
+
+ e_dialog_button_add(dia, "OK", NULL, NULL, NULL);
+ e_win_centered_set(dia->win, 1);
+ e_dialog_show(dia);
+
+ evas_object_focus_set(o, 1);
+}
#else
static void
_e_test_internal(E_Container *con)
diff --git a/src/bin/e_widget_textblock.c b/src/bin/e_widget_textblock.c
new file mode 100644
index 0000000000..35ee766456
--- /dev/null
+++ b/src/bin/e_widget_textblock.c
@@ -0,0 +1,123 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
+#include "e.h"
+
+typedef struct _E_Widget_Data E_Widget_Data;
+struct _E_Widget_Data
+{
+ Evas_Object *o_widget, *o_scrollframe, *o_textblock;
+};
+
+static void _e_wid_del_hook(Evas_Object *obj);
+static void _e_wid_focus_hook(Evas_Object *obj);
+static void _e_wid_cb_scrollframe_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info);
+
+/* externally accessible functions */
+EAPI Evas_Object *
+e_widget_textblock_add(Evas *evas)
+{
+ Evas_Object *obj, *o;
+ E_Widget_Data *wd;
+
+ obj = e_widget_add(evas);
+
+ e_widget_del_hook_set(obj, _e_wid_del_hook);
+ e_widget_focus_hook_set(obj, _e_wid_focus_hook);
+ wd = calloc(1, sizeof(E_Widget_Data));
+ e_widget_data_set(obj, wd);
+
+ o = e_scrollframe_add(evas);
+ wd->o_scrollframe = o;
+ evas_object_show(o);
+ e_widget_sub_object_add(obj, o);
+ e_widget_resize_object_set(obj, o);
+ evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj);
+
+ o = edje_object_add(evas);
+ e_theme_edje_object_set(o, "base/theme/widgets",
+ "widgets/textblock");
+ wd->o_textblock = o;
+ evas_object_event_callback_add(wd->o_scrollframe, EVAS_CALLBACK_RESIZE, _e_wid_cb_scrollframe_resize, wd);
+ e_scrollframe_child_set(wd->o_scrollframe, o);
+ e_widget_sub_object_add(obj, o);
+ evas_object_show(o);
+
+ evas_object_resize(obj, 32, 32);
+ e_widget_min_size_set(obj, 32, 32);
+ return obj;
+}
+
+EAPI void
+e_widget_textblock_markup_set(Evas_Object *obj, const char *text)
+{
+ E_Widget_Data *wd;
+ Evas_Coord mw, mh, vw, vh;
+
+ wd = e_widget_data_get(obj);
+ edje_object_part_text_set(wd->o_textblock, "text", text);
+ edje_object_size_min_calc(wd->o_textblock, &mw, &mh);
+ e_scrollframe_child_viewport_size_get(wd->o_scrollframe, &vw, &vh);
+ if (vw > mw) mw = vw;
+ if (vh > mh) mh = vh;
+ evas_object_resize(wd->o_textblock, mw, mh);
+}
+
+EAPI void
+e_widget_textblock_plain_set(Evas_Object *obj, const char *text)
+{
+ /* FIXME: parse text escape anything htmlish, - generate new text, set
+ * as markup
+ */
+ e_widget_textblock_markup_set(obj, text);
+}
+
+
+static void
+_e_wid_del_hook(Evas_Object *obj)
+{
+ E_Widget_Data *wd;
+
+ wd = e_widget_data_get(obj);
+ free(wd);
+}
+
+static void
+_e_wid_focus_hook(Evas_Object *obj)
+{
+ E_Widget_Data *wd;
+
+ wd = e_widget_data_get(obj);
+ if (e_widget_focus_get(obj))
+ {
+ edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_scrollframe), "focus_in", "");
+ evas_object_focus_set(wd->o_scrollframe, 1);
+ }
+ else
+ {
+ edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_scrollframe), "focus_out", "");
+ evas_object_focus_set(wd->o_scrollframe, 0);
+ }
+}
+
+static void
+_e_wid_cb_scrollframe_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ E_Widget_Data *wd;
+ Evas_Coord mw, mh, vw, vh;
+
+ wd = data;
+ e_scrollframe_child_viewport_size_get(obj, &vw, &vh);
+ edje_object_size_min_calc(wd->o_textblock, &mw, &mh);
+ e_scrollframe_child_viewport_size_get(wd->o_scrollframe, &vw, &vh);
+ if (vw > mw) mw = vw;
+ if (vh > mh) mh = vh;
+ evas_object_resize(wd->o_textblock, mw, mh);
+}
+
+static void
+_e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ e_widget_focus_steal(data);
+}
diff --git a/src/bin/e_widget_textblock.h b/src/bin/e_widget_textblock.h
new file mode 100644
index 0000000000..9a0eeddd05
--- /dev/null
+++ b/src/bin/e_widget_textblock.h
@@ -0,0 +1,14 @@
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
+#ifdef E_TYPEDEFS
+#else
+#ifndef E_WIDGET_TEXTBLOCK_H
+#define E_WIDGET_TEXTBLOCK_H
+
+EAPI Evas_Object *e_widget_textblock_add(Evas *evas);
+EAPI void e_widget_textblock_markup_set(Evas_Object *obj, const char *text);
+EAPI void e_widget_textblock_plain_set(Evas_Object *obj, const char *text);
+
+#endif
+#endif