ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=1a5d6fa93ad35de94ddb19664336eee1050d980c

commit 1a5d6fa93ad35de94ddb19664336eee1050d980c
Author: Andy Williams <[email protected]>
Date:   Tue Dec 5 23:21:11 2017 +0000

    elm_code: Adding initial support for alpha channel
---
 src/bin/elementary/test_code.c               |   2 +
 src/lib/elementary/elm_code_widget.c         | 100 ++++++++++++++++-----------
 src/lib/elementary/elm_code_widget.eo        |  10 +++
 src/lib/elementary/elm_code_widget_private.h |   1 +
 4 files changed, 74 insertions(+), 39 deletions(-)

diff --git a/src/bin/elementary/test_code.c b/src/bin/elementary/test_code.c
index b05240c1af..81b68812a8 100644
--- a/src/bin/elementary/test_code.c
+++ b/src/bin/elementary/test_code.c
@@ -10,6 +10,7 @@ static Evas_Object *_test_code_win_create(const char *id, 
const char *name)
    win = elm_win_add(NULL, id, ELM_WIN_BASIC);
    elm_win_title_set(win, name);
    elm_win_autodel_set(win, EINA_TRUE);
+   elm_win_alpha_set(win, EINA_TRUE);
 
    evas_object_resize(win, 360 * elm_config_scale_get(), 220 * 
elm_config_scale_get());
    return win;
@@ -95,6 +96,7 @@ _elm_code_test_editor_setup(Evas_Object *parent, Eina_Bool 
log)
    elm_obj_code_widget_editable_set(widget, EINA_TRUE);
    elm_obj_code_widget_show_whitespace_set(widget, EINA_TRUE);
    elm_obj_code_widget_line_numbers_set(widget, EINA_TRUE);
+   elm_obj_code_widget_alpha_set(widget, 200);
 
    if (!log)
      {
diff --git a/src/lib/elementary/elm_code_widget.c 
b/src/lib/elementary/elm_code_widget.c
index eb4a83800e..927ebc9941 100644
--- a/src/lib/elementary/elm_code_widget.c
+++ b/src/lib/elementary/elm_code_widget.c
@@ -1786,7 +1786,8 @@ _elm_code_widget_elm_widget_widget_event(Eo *obj 
EINA_UNUSED, Elm_Code_Widget_Da
 
 // load a named colour class from the theme and apply it to the grid's 
specified palette
 static void
-_elm_code_widget_setup_palette_item(Evas_Object *grid, int type, const char 
*name, Evas_Object *edje)
+_elm_code_widget_setup_palette_item(Evas_Object *grid, int type, const char 
*name,
+                                    double fade, Evas_Object *edje)
 {
    int r, g, b, a;
 
@@ -1794,54 +1795,55 @@ _elm_code_widget_setup_palette_item(Evas_Object *grid, 
int type, const char *nam
                                     NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL))
      return;
 
-   evas_object_textgrid_palette_set(grid, EVAS_TEXTGRID_PALETTE_STANDARD, 
type, r, g, b, a);
+   evas_object_textgrid_palette_set(grid, EVAS_TEXTGRID_PALETTE_STANDARD, type,
+                                    r * fade, g * fade, b * fade, a * fade);
 }
 
 static void
-_elm_code_widget_setup_palette(Evas_Object *o, Evas_Object *layout)
+_elm_code_widget_setup_palette(Evas_Object *o, Evas_Object *layout, float fade)
 {
    Evas_Object *edje;
 
    edje = elm_layout_edje_get(layout);
 
    // setup status colors
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_DEFAULT, 
"elm/code/status/default", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_CURRENT, 
"elm/code/status/current", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_IGNORED, 
"elm/code/status/ignored", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_NOTE, 
"elm/code/status/note", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_WARNING, 
"elm/code/status/warning", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_ERROR, 
"elm/code/status/error", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_FATAL, 
"elm/code/status/fatal", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_ADDED, 
"elm/code/status/added", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_REMOVED, 
"elm/code/status/removed", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_CHANGED, 
"elm/code/status/changed", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_PASSED, 
"elm/code/status/passed", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_FAILED, 
"elm/code/status/failed", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_TODO, 
"elm/code/status/todo", edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_DEFAULT, 
"elm/code/status/default", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_CURRENT, 
"elm/code/status/current", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_IGNORED, 
"elm/code/status/ignored", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_NOTE, 
"elm/code/status/note", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_WARNING, 
"elm/code/status/warning", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_ERROR, 
"elm/code/status/error", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_FATAL, 
"elm/code/status/fatal", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_ADDED, 
"elm/code/status/added", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_REMOVED, 
"elm/code/status/removed", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_CHANGED, 
"elm/code/status/changed", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_PASSED, 
"elm/code/status/passed", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_FAILED, 
"elm/code/status/failed", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_STATUS_TYPE_TODO, 
"elm/code/status/todo", fade, edje);
 
    // setup token colors
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_DEFAULT, 
"elm/code/token/default", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_COMMENT, 
"elm/code/token/comment", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_STRING, 
"elm/code/token/string", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_NUMBER, 
"elm/code/token/number", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_BRACE, 
"elm/code/token/brace", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_TYPE, 
"elm/code/token/type", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_CLASS, 
"elm/code/token/class", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_FUNCTION, 
"elm/code/token/function", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_PARAM, 
"elm/code/token/param", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_KEYWORD, 
"elm/code/token/keyword", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_PREPROCESSOR, 
"elm/code/token/preprocessor", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_ADDED, 
"elm/code/token/added", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_REMOVED, 
"elm/code/token/removed", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_CHANGED, 
"elm/code/token/changed", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_MATCH, 
"elm/code/token/match", edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_DEFAULT, 
"elm/code/token/default", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_COMMENT, 
"elm/code/token/comment", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_STRING, 
"elm/code/token/string", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_NUMBER, 
"elm/code/token/number", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_BRACE, 
"elm/code/token/brace", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_TYPE, 
"elm/code/token/type", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_CLASS, 
"elm/code/token/class", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_FUNCTION, 
"elm/code/token/function", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_PARAM, 
"elm/code/token/param", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_KEYWORD, 
"elm/code/token/keyword", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_PREPROCESSOR, 
"elm/code/token/preprocessor", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_ADDED, 
"elm/code/token/added", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_REMOVED, 
"elm/code/token/removed", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_CHANGED, 
"elm/code/token/changed", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_TOKEN_TYPE_MATCH, 
"elm/code/token/match", fade, edje);
 
    // other styles that the widget uses
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_WIDGET_COLOR_SELECTION, 
"elm/code/widget/color/selection", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_WIDGET_COLOR_GUTTER_BG, 
"elm/code/widget/color/gutter/bg", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_WIDGET_COLOR_GUTTER_FG, 
"elm/code/widget/color/gutter/fg", edje);
-   _elm_code_widget_setup_palette_item(o, 
ELM_CODE_WIDGET_COLOR_GUTTER_SCOPE_BG, "elm/code/widget/color/scope/bg", edje);
-   _elm_code_widget_setup_palette_item(o, ELM_CODE_WIDGET_COLOR_WHITESPACE, 
"elm/code/widget/color/whitespace", edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_WIDGET_COLOR_SELECTION, 
"elm/code/widget/color/selection", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_WIDGET_COLOR_GUTTER_BG, 
"elm/code/widget/color/gutter/bg", fade, edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_WIDGET_COLOR_GUTTER_FG, 
"elm/code/widget/color/gutter/fg", fade, edje);
+   _elm_code_widget_setup_palette_item(o, 
ELM_CODE_WIDGET_COLOR_GUTTER_SCOPE_BG, "elm/code/widget/color/scope/bg", fade, 
edje);
+   _elm_code_widget_setup_palette_item(o, ELM_CODE_WIDGET_COLOR_WHITESPACE, 
"elm/code/widget/color/whitespace", fade, edje);
 }
 
 static void
@@ -1876,7 +1878,7 @@ _elm_code_widget_ensure_n_grid_rows(Elm_Code_Widget 
*widget, int rows)
         evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, 0.0);
         evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, 0.0);
         evas_object_show(grid);
-        _elm_code_widget_setup_palette(grid, widget);
+        _elm_code_widget_setup_palette(grid, widget, (double) pd->alpha / 255);
 
         elm_box_pack_end(pd->gridbox, grid);
         pd->grids = eina_list_append(pd->grids, grid);
@@ -2199,6 +2201,7 @@ _elm_code_widget_elm_widget_theme_apply(Eo *obj, 
Elm_Code_Widget_Data *pd)
 {
    Eo *edje;
    int r, g, b, a;
+   double fade;
    unsigned int i;
    Evas_Object *grid, *background;
 
@@ -2206,18 +2209,36 @@ _elm_code_widget_elm_widget_theme_apply(Eo *obj, 
Elm_Code_Widget_Data *pd)
    edje_object_color_class_get(edje, "elm/code/status/default", &r, &g, &b, &a,
                                NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 
+   fade = (double) pd->alpha / 255;
    background = elm_object_part_content_get(pd->scroller, 
"elm.swallow.background");
-   evas_object_color_set(background, r, g, b, a);
+   evas_object_color_set(background, r * fade, g * fade, b * fade, a * fade);
+
+   if (fade < 1.0)
+     evas_object_color_set(obj, 1, 1, 1, 1); // setting 0 alpha is not working
 
    for (i = 0; i < eina_list_count(pd->grids); i++)
      {
         grid = eina_list_nth(pd->grids, i);
-        _elm_code_widget_setup_palette(grid, obj);
+        _elm_code_widget_setup_palette(grid, obj, fade);
      }
 
    return EFL_UI_THEME_APPLY_SUCCESS;
 }
 
+EOLIAN static int
+_elm_code_widget_alpha_get(Eo *obj EINA_UNUSED, Elm_Code_Widget_Data *pd)
+{
+   return pd->alpha;
+}
+
+EOLIAN static void
+_elm_code_widget_alpha_set(Eo *obj, Elm_Code_Widget_Data *pd, int alpha)
+{
+   pd->alpha = alpha;
+
+   _elm_code_widget_elm_widget_theme_apply(obj, pd);
+}
+
 EOLIAN static void
 _elm_code_widget_efl_canvas_group_group_add(Eo *obj, Elm_Code_Widget_Data *pd)
 {
@@ -2226,6 +2247,7 @@ _elm_code_widget_efl_canvas_group_group_add(Eo *obj, 
Elm_Code_Widget_Data *pd)
 
    efl_canvas_group_add(efl_super(obj, ELM_CODE_WIDGET_CLASS));
    elm_object_focus_allow_set(obj, EINA_TRUE);
+   pd->alpha = 255;
 
    if (!elm_layout_theme_set(obj, "code", "layout", elm_widget_style_get(obj)))
      CRI("Failed to set layout!");
diff --git a/src/lib/elementary/elm_code_widget.eo 
b/src/lib/elementary/elm_code_widget.eo
index c896e4e3ef..026e7cc815 100644
--- a/src/lib/elementary/elm_code_widget.eo
+++ b/src/lib/elementary/elm_code_widget.eo
@@ -149,6 +149,16 @@ class Elm.Code_Widget (Efl.Ui.Layout, Efl.Access.Text)
             show_whitespace: bool; [[Whether or not we show whitespace 
characters]]
          }
       }
+      @property alpha {
+         [[Set an alpha color value for this widget (0 - 255) default is fully 
opaque (255).]]
+         set {
+         }
+         get {
+         }
+         values {
+            alpha: int;
+         }
+      }
       @property syntax_enabled {
          set {
             [[Set whether syntax highlighting should be use for this widget.]]
diff --git a/src/lib/elementary/elm_code_widget_private.h 
b/src/lib/elementary/elm_code_widget_private.h
index 4e050a799b..8ff71becbf 100644
--- a/src/lib/elementary/elm_code_widget_private.h
+++ b/src/lib/elementary/elm_code_widget_private.h
@@ -28,6 +28,7 @@ typedef struct
    Eina_Bool show_line_numbers;
    unsigned int line_width_marker, tabstop;
    Eina_Bool show_whitespace, tab_inserts_spaces;
+   int alpha;
 
    Elm_Code_Widget_Selection_Data *selection;
 

-- 


Reply via email to