[prev in list] [next in list] [prev in thread] [next in thread] 

List:       enlightenment-devel
Subject:    Re: [E-devel] Terminology miniview feature
From:       Galatsanos Panagiotis <galatsanosp () gmail ! com>
Date:       2013-07-21 12:04:47
Message-ID: CAPLzgnqF7OnZ33q5L+aVGJt2ttUj2uS70M4PSo9rqSeOVUe=1A () mail ! gmail ! com
[Download RAW message or body]

scrolio.h is an empty file at the moment. I've added it when it was needed,
but now it isn't.
It should be removed from the final patch.


On Tue, Jul 9, 2013 at 6:38 AM, Carsten Haitzler <raster@rasterman.com>wrote:

> On Sun, 23 Jun 2013 03:21:38 +0300 Galatsanos Panagiotis
> <galatsanosp@gmail.com> said:
>
> missing scrolio.h in patch! :(
>
> > Ignore the previous patch, use this attachment instead.
> >
> >
> > On Sun, Jun 23, 2013 at 2:44 AM, Galatsanos Panagiotis <
> > galatsanosp@gmail.com> wrote:
> >
> > > After spending some time on the miniview feature and with the help of
> > > raster I finally reached the point where it is somehow usable.
> > >
> > > I have some issues where i need some guidance/help/feedback.
> > > First, I want to bring miniview image below controls menu but i don't
> know
> > > how. Currently when miniview is enabled and we have some history lines
> > > drawn, when you press right click the controls menu is below miniview
> but
> > > we don't want this...
> > >
> > > My second issue is that i want to use an animation when miniview
> > > appears/dissapears. Actually what I want for default behaviour is this:
> > > When the user enables miniview it'll slide in from the right and it
> will
> > > show up just for couple of seconds (lets say 5), then it will slide
> back
> > > and only one small part of the miniview will be visible only to
> indicate to
> > > the user that it's enabled and when the user mouses over it will
> re-slide
> > > in...
> > >
> > > Also i'm having an issue when resizing the window, some "garbage"
> pixels
> > > are drawn inside the miniview image and I can't find where are coming
> from.
> > > If someone has a clue it'll be very helpfull! :D
> > >
> > > Please try my patch and tell me what you think
> > > Cheers, Panos.
> > >
> > > From 5c334290e9aa1d6aa2a02ae6bde8ff7a3d6dece6 Mon Sep 17 00:00:00 2001
> > > From: Godfath3r <galatsanosp@gmail.com>
> > > Date: Sun, 23 Jun 2013 03:07:27 +0300
> > > Subject: [PATCH 1/1] add miniview feature to terminology. Pressing
> > >  ctrl+shift+f toggles miniview on the side of each
> > >  terminal/split/tab
> > >
> > > ---
> > >  data/themes/default.edc |  24 +++
> > >  src/bin/Makefile.am     |   1 +
> > >  src/bin/config.c        |   5 +
> > >  src/bin/config.h        |   1 +
> > >  src/bin/main.c          |  61 +++++++-
> > >  src/bin/scrolio.c       | 397
> > > ++++++++++++++++++++++++++++++++++++++++++++++++
> > >  src/bin/termio.c        | 101 +++++++++++-
> > >  src/bin/termio.h        |   3 +
> > >  8 files changed, 582 insertions(+), 11 deletions(-)
> > >  create mode 100644 src/bin/scrolio.c
> > >  create mode 100644 src/bin/scrolio.h
> > >
> > > diff --git a/data/themes/default.edc b/data/themes/default.edc
> > > index 42e3f2a..dfeea2d 100644
> > > --- a/data/themes/default.edc
> > > +++ b/data/themes/default.edc
> > > @@ -3597,4 +3597,28 @@ target: "4.bottom"
> > >           }
> > >        }
> > >     }
> > > +
> > > +   group { name: "terminology/miniview";
> > > +      parts {
> > > +         part { name: "miniview"; type: SWALLOW;
> > > +            mouse_events: 0;
> > > +            description { state: "default" 0.0;
> > > +               color: 25 50 30 100;
> > > +           rel1.relative: 0.85 0.0;
> > > +            }
> > > +         }
> > > +         part { name: "miniview_screen"; type: RECT;
> > > +            mouse_events: 1;
> > > +            dragable {
> > > +               confine: "miniview";
> > > +               x: 0 0 0;
> > > +               y: 1 1 0;
> > > +            }
> > > +            description { state: "default" 0.0;
> > > +               color: 255 255 255 30;
> > > +               fixed:1 1;
> > > +            }
> > > +         }
> > > +      }
> > > +   }
> > >  }
> > > diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
> > > index e95dae7..3be4322 100644
> > > --- a/src/bin/Makefile.am
> > > +++ b/src/bin/Makefile.am
> > > @@ -27,6 +27,7 @@ options_video.c options_video.h \
> > >  options_theme.c options_theme.h \
> > >  options_wallpaper.c options_wallpaper.h \
> > >  sel.c sel.h \
> > > +scrolio.c scrolio.h \
> > >  termio.c termio.h \
> > >  termcmd.c termcmd.h \
> > >  termiolink.c termiolink.h \
> > > diff --git a/src/bin/config.c b/src/bin/config.c
> > > index eafa3da..f03e041 100644
> > > --- a/src/bin/config.c
> > > +++ b/src/bin/config.c
> > > @@ -89,6 +89,8 @@ config_init(void)
> > >       (edd_base, Config, "cg_width", cg_width, EET_T_INT);
> > >     EET_DATA_DESCRIPTOR_ADD_BASIC
> > >       (edd_base, Config, "cg_height", cg_height, EET_T_INT);
> > > +   EET_DATA_DESCRIPTOR_ADD_BASIC
> > > +     (edd_base, Config, "miniview", miniview, EET_T_UCHAR);
> > >  }
> > >
> > >  void
> > > @@ -171,6 +173,7 @@ config_sync(const Config *config_src, Config
> *config)
> > >     config->custom_geometry = config_src->custom_geometry;
> > >     config->cg_width = config_src->cg_width;
> > >     config->cg_height = config_src->cg_height;
> > > +   config->miniview = config_src->miniview;
> > >  }
> > >
> > >  Config *
> > > @@ -426,6 +429,7 @@ config_load(const char *key)
> > >               config->custom_geometry = EINA_FALSE;
> > >               config->cg_width = 80;
> > >               config->cg_height = 24;
> > > +             config->miniview = EINA_FALSE;
> > >            }
> > >       }
> > >
> > > @@ -474,6 +478,7 @@ config_fork(Config *config)
> > >     CPY(custom_geometry);
> > >     CPY(cg_width);
> > >     CPY(cg_height);
> > > +   CPY(miniview);
> > >
> > >     CPY(temporary);
> > >     SCPY(config_key);
> > > diff --git a/src/bin/config.h b/src/bin/config.h
> > > index cda50ff..79cc1c3 100644
> > > --- a/src/bin/config.h
> > > +++ b/src/bin/config.h
> > > @@ -43,6 +43,7 @@ struct _Config
> > >     Eina_Bool         custom_geometry;
> > >     int               cg_width;
> > >     int               cg_height;
> > > +   Eina_Bool         miniview;
> > >
> > >     Eina_Bool         temporary; /* not in EET */
> > >     const char       *config_key; /* not in EET, the key that config
> was
> > > loaded */
> > > diff --git a/src/bin/main.c b/src/bin/main.c
> > > index 5bbf3dc..77ea8ae 100644
> > > --- a/src/bin/main.c
> > > +++ b/src/bin/main.c
> > > @@ -4,6 +4,7 @@
> > >  #include <Elementary.h>
> > >  #include "main.h"
> > >  #include "win.h"
> > > +#include "scrolio.h"
> > >  #include "termio.h"
> > >  #include "termpty.h"
> > >  #include "termcmd.h"
> > > @@ -23,9 +24,9 @@
> > >    #define PANES_BOTTOM "bottom"
> > >  #endif
> > >
> > > -typedef struct _Win   Win;
> > > -typedef struct _Term  Term;
> > > -typedef struct _Split Split;
> > > +typedef struct _Win     Win;
> > > +typedef struct _Term    Term;
> > > +typedef struct _Split   Split;
> > >
> > >  struct _Win
> > >  {
> > > @@ -53,6 +54,7 @@ struct _Term
> > >     Evas_Object *term;
> > >     Evas_Object *media;
> > >     Evas_Object *popmedia;
> > > +   Evas_Object *miniview;
> > >     Evas_Object *sel;
> > >     Evas_Object *tabcount_spacer;
> > >     Eina_List   *popmedia_queue;
> > > @@ -1036,6 +1038,36 @@ _popmedia_show(Term *term, const char *src)
> > >  }
> > >
> > >  static void
> > > +_cb_scrolio_toggle(void *data, Evas_Object *obj __UNUSED__, void
> *event
> > > __UNUSED__)
> > > +{
> > > +   Term *term = data;
> > > +   Config *config = termio_config_get(term->term);
> > > +   if (!config->miniview)
> > > +     {
> > > +        config->miniview = EINA_TRUE;
> > > +        config_save(config, NULL);
> > > +
> > > +        Evas_Object *o;
> > > +        Evas_Coord ox, oy, ow, oh;
> > > +        evas_object_geometry_get(term->term, &ox, &oy, &ow, &oh);
> > > +
> > > +        term->miniview = (Evas_Object *)
> termio_miniview_show(term->term,
> > > ox, oy, ow, oh);
> > > +        //edje_object_part_swallow(term->term, "terminology.content",
> > > term->miniview);
> > > +        evas_object_show(term->miniview);
> > > +     }
> > > +   else
> > > +     {
> > > +        evas_object_hide(term->miniview);
> > > +        //edje_object_part_unswallow(term->term, term->miniview);
> > > +        termio_miniview_hide(term->term);
> > > +        term->miniview = NULL;
> > > +
> > > +        config->miniview = EINA_FALSE;
> > > +        config_save(config, NULL);
> > > +     }
> > > +}
> > > +
> > > +static void
> > >  _popmedia_queue_process(Term *term)
> > >  {
> > >     const char *src;
> > > @@ -1964,6 +1996,13 @@ main_term_free(Term *term)
> > >       }
> > >     term->media = NULL;
> > >     if (term->popmedia) evas_object_del(term->popmedia);
> > > +   if (term->miniview)
> > > +     {
> > > +        evas_object_hide(term->miniview);
> > > +        //edje_object_part_unswallow(term->term, term->miniview);
> > > +        termio_miniview_hide(term->term);
> > > +        term->miniview = NULL;
> > > +     }
> > >     term->popmedia = NULL;
> > >     evas_object_del(term->term);
> > >     term->term = NULL;
> > > @@ -2167,6 +2206,7 @@ main_term_new(Win *wn, Config *config, const char
> > > *cmd,
> > >     evas_object_smart_callback_add(o, "tab,8", _cb_tab_8, term);
> > >     evas_object_smart_callback_add(o, "tab,9", _cb_tab_9, term);
> > >     evas_object_smart_callback_add(o, "tab,0", _cb_tab_0, term);
> > > +   evas_object_smart_callback_add(o, "miniview,toggle",
> > > _cb_scrolio_toggle, term);
> > >     evas_object_show(o);
> > >
> > >     evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
> > > @@ -2181,7 +2221,20 @@ main_term_new(Win *wn, Config *config, const
> char
> > > *cmd,
> > >  //        edje_object_signal_emit(term->base, "focus,in",
> "terminology");
> > >       }
> > >     wn->terms = eina_list_append(wn->terms, term);
> > > -
> > > +
> > > +   if (term->config->miniview && !term->miniview)
> > > +     {
> > > +        Evas_Object *o;
> > > +        Evas_Coord ox, oy, ow, oh;
> > > +        evas_object_geometry_get(term->term, &ox, &oy, &ow, &oh);
> > > +
> > > +        //term->miniview = (Evas_Object *)
> > > termio_miniview_show(term->term,
> > > +        //
>  ox,
> > > oy, ow, oh);
> > > +        edje_object_part_swallow(term->term, "terminology.content",
> > > +                                 term->miniview);
> > > +        evas_object_show(term->miniview);
> > > +     }
> > > +
> > >     return term;
> > >  }
> > >
> > > diff --git a/src/bin/scrolio.c b/src/bin/scrolio.c
> > > new file mode 100644
> > > index 0000000..76b8db3
> > > --- /dev/null
> > > +++ b/src/bin/scrolio.c
> > > @@ -0,0 +1,397 @@
> > > +#include <Elementary.h>
> > > +#include <stdio.h>
> > > +#include "col.h"
> > > +#include "termpty.h"
> > > +#include "termio.h"
> > > +
> > > +// Scrolio is the smart object responsible for miniview
> > > +// feature. (this scroll thing at your right)
> > > +
> > > +typedef struct _Scrolio Scrolio;
> > > +
> > > +struct _Scrolio
> > > +{
> > > +   Evas_Object_Smart_Clipped_Data __clipped_data;
> > > +   Evas_Object *obj, *image_obj, *edje_obj, *screen_obj;
> > > +   struct {
> > > +      int size;
> > > +      const char *name;
> > > +      int chw, chh;
> > > +   } font;
> > > +   struct {
> > > +      int w, h;
> > > +      Evas_Object *obj;
> > > +   } grid;
> > > +   Evas_Object *termio;
> > > +   Termpty *pty;
> > > +   int parent_x, parent_y, parent_w, parent_h;
> > > +   int scroll;
> > > +   int scrollback;
> > > +   double miniview_screen_size, miniview_screen_step,
> > > miniview_screen_default_pos,
> > > +          lines_drawn, screen_obj_scroll_val, screen_obj_custom_pos;
> > > +};
> > > +
> > > +static Evas_Smart *_smart = NULL;
> > > +static Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL;
> > > +
> > > +static void
> > > +_smart_add(Evas_Object *obj)
> > > +{
> > > +   Scrolio *sd;
> > > +   Evas_Object *o;
> > > +   Evas_Load_Error err;
> > > +
> > > +   sd = calloc(1, sizeof(Scrolio));
> > > +   EINA_SAFETY_ON_NULL_RETURN(sd);
> > > +   evas_object_smart_data_set(obj, sd);
> > > +
> > > +   _parent_sc.add(obj);
> > > +
> > > +   /* miniview output widget  */
> > > +   o = evas_object_image_add(evas_object_evas_get(obj));
> > > +   //evas_object_image_file_set(o,
> > > "data/themes/images/miniview_white_bg.png", NULL);
> > > +   //err = evas_object_image_load_error_get(o);
> > > +   //if (err != EVAS_LOAD_ERROR_NONE)
> > > +   //  printf("error\n");
> > > +   evas_object_image_alpha_set(o, EINA_TRUE);
> > > +   evas_object_smart_member_add(o, obj);
> > > +   sd->image_obj = o;
> > > +}
> > > +
> > > +static void
> > > +_smart_del()
> > > +{
> > > +
> > > +}
> > > +
> > > +static void
> > > +_smart_move()
> > > +{
> > > +
> > > +}
> > > +
> > > +static void
> > > +_smart_calculate(Evas_Object *obj)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return;
> > > +
> > > +   //evas_object_geometry_get(sd->obj, &ox, &oy, &ow, &oh);
> > > +   //evas_object_move(sd->grid.obj, ox+(sd->grid.w*0.8), oy);
> > > +   //evas_object_resize(sd->grid.obj,
> > > +   //                   sd->grid.w * sd->font.chw,
> > > +   //                   sd->grid.h * sd->font.chh);
> > > +   evas_object_image_size_set(sd->image_obj, sd->parent_w /
> sd->font.chw,
> > > +                              (sd->parent_h / sd->font.chh) +
> > > sd->scrollback);
> > > +   evas_object_image_fill_set(sd->image_obj, 0, 0, sd->parent_w *
> 0.15,
> > > +                              sd->parent_h);
> > > +   evas_object_resize(sd->image_obj, sd->parent_w * 0.15,
> sd->parent_h);
> > > +   evas_object_move(sd->image_obj, sd->parent_x + (sd->parent_w *
> 0.85),
> > > +                    sd->parent_y);
> > > +
> > > +}
> > > +
> > > +static void
> > > +_smart_apply(Evas_Object *obj)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +
> > > +   evas_object_show(sd->image_obj);
> > > +   evas_object_show(sd->edje_obj);
> > > +   evas_object_show(sd->screen_obj);
> > > +}
> > > +
> > > +static void
> > > +_smart_size(Evas_Object *obj)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +
> > > +   if (!sd) return;
> > > +   sd->miniview_screen_size = (double) sd->parent_h /
> > > +                         (double) (sd->scrollback * sd->font.chh);
> > > +   sd->miniview_screen_step = (double) sd->parent_h / (double)
> > > sd->scrollback;
> > > +   sd->miniview_screen_default_pos = (((double) sd->parent_h/(double)
> > > sd->scrollback)
> > > +                                   * (sd->lines_drawn - sd->scroll))
> > > +                                   / (double) sd->parent_h
> > > +                                   - sd->miniview_screen_size;
> > > +
> > > +   evas_object_image_size_set(sd->image_obj, (sd->parent_w /
> > > sd->font.chw),
> > > +                                              sd->parent_h);
> > > +   evas_object_move(sd->edje_obj, sd->parent_x, sd->parent_y);
> > > +   evas_object_resize(sd->edje_obj, sd->parent_w, sd->parent_h);
> > > +
> > > +   edje_object_part_drag_size_set(sd->screen_obj, "miniview_screen",
> 1.0,
> > > +                                  sd->miniview_screen_size);
> > > +   if (!edje_object_part_drag_step_set(sd->screen_obj,
> "miniview_screen",
> > > 0.0,
> > > +                                       sd->miniview_screen_step))
> > > +     printf("error when setting drag step size.\n");
> > > +   evas_object_move(sd->screen_obj, sd->parent_x, sd->parent_y);
> > > +   evas_object_resize(sd->screen_obj, sd->parent_w, sd->parent_h);
> > > +
> > > +   _smart_calculate(obj);
> > > +   _smart_apply(obj);
> > > +}
> > > +
> > > +static void
> > > +_smart_resize()
> > > +{
> > > +/*
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return;
> > > +
> > > +   _smart_size(obj);
> > > +   _scrolio_draw(obj, sd->grid.obj, sd->parent_w, sd->parent_h);
> > > +*/
> > > +}
> > > +
> > > +
> > > +static void
> > > +_smart_init(void)
> > > +{
> > > +    static Evas_Smart_Class sc;
> > > +
> > > +    evas_object_smart_clipped_smart_set(&_parent_sc);
> > > +    sc           = _parent_sc;
> > > +    sc.name      = "scrolio";
> > > +    sc.version   = EVAS_SMART_CLASS_VERSION;
> > > +    sc.add       = _smart_add;
> > > +    sc.del       = _smart_del;
> > > +    sc.resize    = _smart_resize;
> > > +    sc.move      = _smart_move;
> > > +    sc.calculate = _smart_calculate;
> > > +    _smart = evas_smart_class_new(&sc);
> > > +}
> > > +
> > > +static void
> > > +_on_knob_moved(void *data, Evas_Object *o, const char *emission
> > > EINA_UNUSED, const char *source EINA_UNUSED)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(data);
> > > +   double val;
> > > +
> > > +   edje_object_part_drag_value_get(o, "miniview_screen", NULL, &val);
> > > +   sd->scroll = sd->lines_drawn -
> > > +                ((sd->lines_drawn - (sd->parent_h / sd->font.chh)) *
> > > +                (val + sd->miniview_screen_size));
> > > +
> > > +   // if miniview lines are less than scrollback lines
> > > +   // (miniview obj isn't fully drawn from top to bottom)
> > > +   if (sd->lines_drawn < sd->scrollback + (sd->parent_h /
> sd->font.chh) -
> > > 1)
> > > +     {
> > > +        if (val > sd->miniview_screen_default_pos)
> > > +          {
> > > +             val = sd->miniview_screen_default_pos;
> > > +             sd->scroll = 0;
> > > +          }
> > > +        else
> > > +          {
> > > +             sd->scroll = sd->lines_drawn -
> > > +                          ((sd->lines_drawn - (sd->parent_h /
> > > sd->font.chh)) *
> > > +                          ((val / sd->miniview_screen_default_pos))) -
> > > +                          sd->parent_h / sd->font.chh;
> > > +
> > > +          }
> > > +     }
> > > +   if (sd->scroll < 0) sd->scroll = 0;
> > > +   printf("sd->scroll is:: %d and lines are: %f\n", sd->scroll,
> > > sd->lines_drawn);
> > > +   termio_scroll_set(sd->termio, sd->scroll);
> > > +}
> > > +
> > > +void
> > > +_scrolio_draw(Evas_Object *obj)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +   Termcell *cells;
> > > +
> > > +   unsigned int *pixels, *p;
> > > +   int x=0, y=0, r, g, b, i;
> > > +   int wret=0;
> > > +   int pty_scan_width = 0;
> > > +   Eina_Bool pty_compact_w = EINA_FALSE;
> > > +
> > > +   sd->lines_drawn = 0;
> > > +   pixels = evas_object_image_data_get(sd->image_obj, EINA_TRUE);
> > > +   p = pixels;
> > > +   for (y = 0 - sd->pty->backscroll_num; y < sd->parent_h /
> sd->font.chh;
> > > y++)
> > > +     {
> > > +        cells = termpty_cellrow_get(sd->pty, y, &wret);
> > > +        if (wret < sd->parent_w / sd->font.chw)
> > > +          {
> > > +             pty_scan_width = wret;
> > > +             pty_compact_w = EINA_TRUE;
> > > +          }
> > > +        else
> > > +          {
> > > +             pty_scan_width = sd->parent_w / sd->font.chw;
> > > +             pty_compact_w = EINA_FALSE;
> > > +          }
> > > +        for (x=0; x < pty_scan_width; x++)
> > > +          {
> > > +             if (cells[x].codepoint == 0 || cells[x].codepoint == ' '
> ||
> > > +                 cells[x].att.newline || cells[x].att.tab ||
> > > +                 cells[x].codepoint == '\0' || cells[x].codepoint <=
> 0)
> > > +               {
> > > +                  r=0; g = 0; b = 0;
> > > +                  *p = (r << 16) | (g << 8) | (b);
> > > +                  p++;
> > > +               }
> > > +             else
> > > +               {
> > > +                  switch (cells[x].att.fg)
> > > +                    {
> > > +                       // TODO: get pixel colors from current
> themee...
> > > +                       case 0:
> > > +                          r = 180; g = 180; b = 180;
> > > +                          break;
> > > +                       case 2:
> > > +                          r = 204; g = 51; b = 51;
> > > +                          break;
> > > +                       case 3:
> > > +                          r = 51; g = 204; b = 51;
> > > +                          break;
> > > +                       case 4:
> > > +                          r = 204; g = 136; b = 51;
> > > +                          break;
> > > +                       case 5:
> > > +                          r = 51; g = 51; b = 204;
> > > +                          break;
> > > +                       case 6:
> > > +                          r = 204; g = 51; b = 204;
> > > +                          break;
> > > +                       case 7:
> > > +                          r = 51; g = 204; b = 204;
> > > +                          break;
> > > +                       default:
> > > +                          r = 180; g = 180; b = 180;
> > > +                    }
> > > +                  *p = (r << 16) | (g << 8) | (b);
> > > +                  p++;
> > > +               }
> > > +          }
> > > +          if (pty_compact_w)
> > > +              for (i=0; i < (sd->parent_w / sd->font.chw) - wret; i++)
> > > +                {
> > > +                   r=0; g = 0; b = 0;
> > > +                   *p = (r << 16) | (g << 8) | (b);
> > > +                   p++;
> > > +                }
> > > +          sd->lines_drawn++;
> > > +     }
> > > +   evas_object_image_data_set(sd->image_obj, pixels);
> > > +   evas_object_image_data_update_add(sd->image_obj, 0, 0,
> sd->parent_w *
> > > 0.85, sd->parent_h * sd->parent_h);
> > > +}
> > > +
> > > +void
> > > +scrolio_miniview_resize(Evas_Object *obj, Termpty *pty, int w, int h)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return;
> > > +
> > > +   sd->parent_w = w;
> > > +   sd->parent_h = h;
> > > +   sd->pty = pty;
> > > +   _smart_size(obj);
> > > +}
> > > +
> > > +void
> > > +scrolio_miniview_move(Evas_Object *obj, int x, int y)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return;
> > > +
> > > +   sd->parent_x = x;
> > > +   sd->parent_y = y;
> > > +   _smart_size(obj);
> > > +}
> > > +
> > > +void
> > > +scrolio_miniview_update_scroll(Evas_Object *obj, int scroll_position)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return;
> > > +
> > > +   sd->scroll = scroll_position;
> > > +   _smart_size(obj);
> > > +   edje_object_part_drag_value_set(sd->screen_obj, "miniview_screen",
> > > 0.0, sd->miniview_screen_default_pos);
> > > +
> > > +   _scrolio_draw(obj);
> > > +}
> > > +
> > > +Evas_Object *
> > > +scrolio_miniview_add(Evas_Object *parent, int fontw, int fonth,
> Termpty
> > > *pty,
> > > +                     int scroll, int scroll_position, int x, int y,
> int
> > > w, int h)
> > > +{
> > > +   Evas *e;
> > > +   Evas_Object *obj, *edje_obj;
> > > +   Config *config = termio_config_get(parent);
> > > +   Scrolio *sd;
> > > +
> > > +   EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
> > > +   e = evas_object_evas_get(parent);
> > > +   if (!e) return NULL;
> > > +
> > > +   if (!_smart) _smart_init();
> > > +   obj = evas_object_smart_add(e, _smart);
> > > +   sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return obj;
> > > +
> > > +   sd->parent_x = x;
> > > +   sd->parent_y = y;
> > > +   sd->parent_w = w;
> > > +   sd->parent_h = h;
> > > +   sd->font.chw = fontw;
> > > +   sd->font.chh = fonth;
> > > +   sd->pty = pty;
> > > +   sd->scrollback = config->scrollback;
> > > +   sd->scroll = scroll_position;
> > > +   sd->miniview_screen_size = (double) sd->parent_h / sd->font.chh *
> > > sd->scrollback;
> > > +                         (double) (sd->scrollback * sd->font.chh);
> > > +                         (double) (sd->scrollback * sd->font.chh);
> > > +   sd->miniview_screen_step = (double) sd->parent_h / (double)
> > > sd->scrollback;
> > > +   sd->miniview_screen_default_pos = (((double) sd->parent_h/(double)
> > > sd->scrollback)// How many pixels we need for each line drawn
> > > +                                   * (sd->lines_drawn - sd->scroll))
> > > // Multiplied by how many lines are drawn
> > > +                                   / (double) sd->parent_h  //
> Divided by
> > > height to find the percentage
> > > +                                   - sd->miniview_screen_size;
> > > +   sd->termio = parent;
> > > +   edje_obj = edje_object_add(e);
> > > +   edje_object_file_set(edje_obj, config_theme_path_get(config),
> > > +                        "terminology/miniview");
> > > +   edje_object_part_swallow(edje_obj, "miniview", obj);
> > > +   evas_object_move(edje_obj, x, y);
> > > +   evas_object_resize(edje_obj, w, h);
> > > +   sd->edje_obj = edje_obj;
> > > +
> > > +   edje_obj = edje_object_add(e);
> > > +   edje_object_file_set(edje_obj, config_theme_path_get(config),
> > > +                        "terminology/miniview");
> > > +   edje_object_part_drag_size_set(edje_obj, "miniview_screen", 1.0,
> > > +                                  sd->miniview_screen_size);
> > > +   if (!edje_object_part_drag_step_set(edje_obj, "miniview_screen",
> 0.0,
> > > sd->miniview_screen_step))
> > > +     printf("error when setting drag step size.\n");
> > > +   edje_object_signal_callback_add(edje_obj, "drag",
> "miniview_screen",
> > > _on_knob_moved, obj);
> > > +
> > > +   evas_object_move(edje_obj, x, y);
> > > +   evas_object_resize(edje_obj, w, h);
> > > +   sd->screen_obj = edje_obj;
> > > +
> > > +   _smart_size(obj);
> > > +   _scrolio_draw(obj);
> > > +
> > > +   scrolio_miniview_update_scroll(obj, sd->scroll);
> > > +
> > > +   return obj;
> > > +}
> > > +
> > > +void
> > > +scrolio_miniview_hide(Evas_Object *obj)
> > > +{
> > > +   Scrolio *sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return;
> > > +
> > > +   evas_object_hide(sd->image_obj);
> > > +   evas_object_hide(sd->edje_obj);
> > > +   evas_object_hide(sd->screen_obj);
> > > +
> > > +   sd->image_obj = NULL;
> > > +   sd->edje_obj = NULL;
> > > +   sd->screen_obj = NULL;
> > > +}
> > > diff --git a/src/bin/scrolio.h b/src/bin/scrolio.h
> > > new file mode 100644
> > > index 0000000..e69de29
> > > diff --git a/src/bin/termio.c b/src/bin/termio.c
> > > index f685929..0f1aa0f 100644
> > > --- a/src/bin/termio.c
> > > +++ b/src/bin/termio.c
> > > @@ -3,6 +3,7 @@
> > >  #include <Ecore_IMF_Evas.h>
> > >  #include <Elementary.h>
> > >  #include <Ecore_Input.h>
> > > +#include "scrolio.h"
> > >  #include "termio.h"
> > >  #include "termiolink.h"
> > >  #include "termpty.h"
> > > @@ -61,6 +62,7 @@ struct _Termio
> > >           Eina_Bool dndobjdel : 1;
> > >        } down;
> > >     } link;
> > > +   Evas_Object *scrolio;
> > >     int zoom_fontsize_start;
> > >     int scroll;
> > >     unsigned int last_keyup;
> > > @@ -1127,7 +1129,11 @@ _block_edje_activate(Evas_Object *obj, Termblock
> > > *blk)
> > >     evas_object_show(blk->obj);
> > >     evas_object_data_set(blk->obj, "blk", blk);
> > >
> > > -   if (ok) _block_edje_cmds(sd->pty, blk, blk->cmds, EINA_TRUE);
> > > +   if (ok)
> > > +     {
> > > +        _block_edje_cmds(sd->pty, blk, blk->cmds, EINA_TRUE);
> > > +        //scrolio_pty_update(sd->scrolio, sd->pty);
> > > +     }
> > >  }
> > >
> > >  static void
> > > @@ -1180,7 +1186,7 @@ _smart_apply(Evas_Object *obj)
> > >     Evas_Coord ox, oy, ow, oh;
> > >     Eina_List *l, *ln;
> > >     Termblock *blk;
> > > -   int j, x, y, w, ch1 = 0, ch2 = 0, inv = 0;
> > > +   int j, x, y, w, ch1 = 0, ch2 = 0, inv = 0, jinx=0;
> > >
> > >     if (!sd) return;
> > >     evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
> > > @@ -1392,6 +1398,7 @@ _smart_apply(Evas_Object *obj)
> > >          if (ch1 >= 0)
> > >            evas_object_textgrid_update_add(sd->grid.obj, ch1, y,
> > >                                            ch2 - ch1 + 1, 1);
> > > +          //printf("I'm fine thanx\n");
> > >       }
> > >     termpty_cellcomp_thaw(sd->pty);
> > >
> > > @@ -1414,7 +1421,6 @@ _smart_apply(Evas_Object *obj)
> > >                 (sd->pty->block.active, l);
> > >            }
> > >       }
> > > -
> > >     if ((sd->scroll != 0) || (sd->pty->state.hidecursor))
> > >       evas_object_hide(sd->cur.obj);
> > >     else
> > > @@ -1537,6 +1543,7 @@ _smart_apply(Evas_Object *obj)
> > >       evas_object_hide(sd->cur.selo_theme);
> > >     if (sd->mouseover_delay) ecore_timer_del(sd->mouseover_delay);
> > >     sd->mouseover_delay = ecore_timer_add(0.05, _smart_mouseover_delay,
> > > obj);
> > > +   //printf("How are you today?\n?");
> > >  }
> > >
> > >  static void
> > > @@ -1551,11 +1558,12 @@ _smart_size(Evas_Object *obj, int w, int h,
> > > Eina_Bool force)
> > >       {
> > >          if ((w == sd->grid.w) && (h == sd->grid.h)) return;
> > >       }
> > > -
> > > -   evas_event_freeze(evas_object_evas_get(obj));
> > > -   evas_object_textgrid_size_set(sd->grid.obj, w, h);
> > >     sd->grid.w = w;
> > >     sd->grid.h = h;
> > > +
> > > +   evas_event_freeze(evas_object_evas_get(obj));
> > > +   evas_object_textgrid_size_set(sd->grid.obj, sd->grid.w,
> sd->grid.h);
> > > +
> > >     evas_object_resize(sd->cur.obj, sd->font.chw, sd->font.chh);
> > >     evas_object_size_hint_min_set(obj, sd->font.chw, sd->font.chh);
> > >     if (!sd->noreqsize)
> > > @@ -1563,8 +1571,14 @@ _smart_size(Evas_Object *obj, int w, int h,
> > > Eina_Bool force)
> > >                                         sd->font.chw * sd->grid.w,
> > >                                         sd->font.chh * sd->grid.h);
> > >     termpty_resize(sd->pty, w, h);
> > > +
> > >     _smart_calculate(obj);
> > >     _smart_apply(obj);
> > > +   if (sd->scrolio)
> > > +     {
> > > +        scrolio_miniview_resize(sd->scrolio, sd->pty, w *
> sd->font.chw, h
> > > * sd->font.chh);
> > > +        evas_object_smart_callback_call(obj, "miniview,show", NULL);
> > > +     }
> > >     evas_event_thaw(evas_object_evas_get(obj));
> > >  }
> > >
> > > @@ -1597,6 +1611,8 @@ _smart_cb_change(void *data)
> > >     sd->anim = NULL;
> > >     _smart_apply(obj);
> > >     evas_object_smart_callback_call(obj, "changed", NULL);
> > > +   if (sd->scrolio)
> > > +     scrolio_miniview_update_scroll(sd->scrolio,
> termio_scroll_get(obj));
> > >     return EINA_FALSE;
> > >  }
> > >
> > > @@ -1605,6 +1621,8 @@ _smart_update_queue(Evas_Object *obj, Termio *sd)
> > >  {
> > >     if (sd->anim) return;
> > >     sd->anim = ecore_animator_add(_smart_cb_change, obj);
> > > +   if (sd->scrolio)
> > > +     scrolio_miniview_update_scroll(sd->scrolio,
> termio_scroll_get(obj));
> > >  }
> > >
> > >  static void
> > > @@ -1929,6 +1947,28 @@ _handle_shift(Evas_Event_Key_Down *ev, int by,
> > > Evas_Object *term, Termio *sd)
> > >  }
> > >
> > >  void
> > > +termio_miniview_hide(Evas_Object *obj)
> > > +{
> > > +   Termio *sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return;
> > > +
> > > +   scrolio_miniview_hide(sd->scrolio);
> > > +   sd->scrolio = NULL;
> > > +}
> > > +
> > > +Evas_Object *
> > > +termio_miniview_show(Evas_Object *obj, int x, int y, int w, int h)
> > > +{
> > > +   Termio *sd = evas_object_smart_data_get(obj);
> > > +   if (!sd) return;
> > > +
> > > +   sd->scrolio = (Evas_Object *) scrolio_miniview_add(obj,
> sd->font.chw,
> > > sd->font.chh,
> > > +                                sd->pty, sd->pty->backscroll_num,
> > > +                                termio_scroll_get(obj), x, y, w, h);
> > > +   return sd->scrolio;
> > > +}
> > > +
> > > +void
> > >  _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj
> > > __UNUSED__, void *event)
> > >  {
> > >     Evas_Event_Key_Down *ev = event;
> > > @@ -1988,7 +2028,21 @@ _smart_cb_key_down(void *data, Evas *e
> __UNUSED__,
> > > Evas_Object *obj __UNUSED__,
> > >               evas_object_smart_callback_call(data, "tab,6", NULL);
> > >               goto end;
> > >            }
> > > +<<<<<<< HEAD
> > >          else if (!strcmp(ev->keyname, "7"))
> > > +=======
> > > +        else if (!strcmp(ev->keyname, "f"))
> > > +          {
> > > +             evas_object_smart_callback_call(data, "miniview,toggle",
> > > NULL);
> > > +             goto end;
> > > +          }
> > > +     }
> > > +   if ((evas_key_modifier_is_set(ev->modifiers, "Alt")) &&
> > > +       (!evas_key_modifier_is_set(ev->modifiers, "Shift")) &&
> > > +       (!evas_key_modifier_is_set(ev->modifiers, "Control")))
> > > +     {
> > > +        if (!strcmp(ev->keyname, "Home"))
> > > +>>>>>>> add miniview feature to terminology. Pressing ctrl+shift+f
> > > toggles miniview on the side of each terminal/split/tab
> > >            {
> > >               _compose_seq_reset(sd);
> > >               evas_object_smart_callback_call(data, "tab,7", NULL);
> > > @@ -3166,6 +3220,8 @@ _smart_cb_mouse_wheel(void *data, Evas *e
> > > __UNUSED__, Evas_Object *obj __UNUSED_
> > >            default:
> > >              break;
> > >           }
> > > +        if (sd->scrolio)
> > > +          scrolio_miniview_update_scroll(sd->scrolio,
> > > termio_scroll_get(obj));
> > >       }
> > >  }
> > >
> > > @@ -3210,6 +3266,7 @@ _termio_config_set(Evas_Object *obj, Config
> *config)
> > >     evas_object_textgrid_font_set(sd->grid.obj, sd->font.name,
> > > sd->font.size);
> > >     evas_object_textgrid_size_set(sd->grid.obj, 1, 1);
> > >     evas_object_textgrid_cell_size_get(sd->grid.obj, &w, &h);
> > > +
> > >     if (w < 1) w = 1;
> > >     if (h < 1) h = 1;
> > >     sd->font.chw = w;
> > > @@ -3549,6 +3606,7 @@ static void
> > >  _smart_calculate(Evas_Object *obj)
> > >  {
> > >     Termio *sd = evas_object_smart_data_get(obj);
> > > +   Evas_Object *scr_obj;
> > >     Evas_Coord ox, oy, ow, oh;
> > >
> > >     if (!sd) return;
> > > @@ -3558,6 +3616,18 @@ _smart_calculate(Evas_Object *obj)
> > >     evas_object_resize(sd->grid.obj,
> > >                        sd->grid.w * sd->font.chw,
> > >                        sd->grid.h * sd->font.chh);
> > > +
> > > +   //evas_object_move(sd->scrolio.grid.obj, ox, oy);
> > > +   //evas_object_resize(sd->scrolio.grid.obj,
> > > +   //                   sd->grid.w * sd->font.chw,
> > > +   //                   sd->grid.h * sd->font.chh);
> > > +
> > > +   //scr_obj = scrolio_grid_object_get(sd->scrolio);
> > > +   //evas_object_move(scr_obj, ox, oy);
> > > +   //evas_object_resize(scr_obj,
> > > +   //                   sd->grid.w * sd->font.chw,
> > > +   //                   sd->grid.h * sd->font.chh);
> > > +
> > >     evas_object_move(sd->cur.obj,
> > >                      ox + (sd->cur.x * sd->font.chw),
> > >                      oy + (sd->cur.y * sd->font.chh));
> > > @@ -3571,6 +3641,8 @@ _smart_move(Evas_Object *obj, Evas_Coord x
> > > __UNUSED__, Evas_Coord y __UNUSED__)
> > >     Termio *sd = evas_object_smart_data_get(obj);
> > >     if (!sd) return;
> > >     evas_object_smart_changed(obj);
> > > +   if (sd->scrolio)
> > > +     scrolio_miniview_move(sd->scrolio, x, y);
> > >  }
> > >
> > >  static void
> > > @@ -3617,6 +3689,7 @@ _smart_pty_scroll(void *data)
> > >       {
> > >          // adjust scroll position for added scrollback
> > >          sd->scroll++;
> > > +        ERR("scroll: %d", sd->scroll);
> > >          if (sd->scroll > sd->pty->backscroll_num)
> > >            sd->scroll = sd->pty->backscroll_num;
> > >          changed = 1;
> > > @@ -3869,7 +3942,9 @@ _smart_pty_command(void *data)
> > >                    char *chid = strs->data;
> > >                    blk = termpty_block_chid_get(sd->pty, chid);
> > >                    if (blk)
> > > -                    _block_edje_cmds(sd->pty, blk, strs->next,
> > > EINA_FALSE);
> > > +                    {
> > > +                       _block_edje_cmds(sd->pty, blk, strs->next,
> > > EINA_FALSE);
> > > +                    }
> > >                 }
> > >               EINA_LIST_FREE(strs, pp) free(pp);
> > >            }
> > > @@ -4302,6 +4377,10 @@ termio_config_update(Evas_Object *obj)
> > >     evas_object_scale_set(sd->grid.obj, elm_config_scale_get());
> > >     evas_object_textgrid_font_set(sd->grid.obj, sd->font.name,
> > > sd->font.size);
> > >     evas_object_textgrid_cell_size_get(sd->grid.obj, &w, &h);
> > > +
> > > +   //evas_object_scale_set(sd->scrolio.grid.obj,
> elm_config_scale_get());
> > > +   //evas_object_textgrid_font_set(sd->scrolio.grid.obj, sd->
> font.name,
> > > sd->font.size);
> > > +   //evas_object_textgrid_cell_size_get(sd->scrolio.grid.obj, &w, &h);
> > >     if (w < 1) w = 1;
> > >     if (h < 1) h = 1;
> > >     sd->font.chw = w;
> > > @@ -4380,6 +4459,14 @@ termio_scroll_get(Evas_Object *obj)
> > >     return sd->scroll;
> > >  }
> > >
> > > +void
> > > +termio_scroll_set(Evas_Object *obj, int scroll)
> > > +{
> > > +   Termio *sd = evas_object_smart_data_get(obj);
> > > +   sd->scroll = scroll;
> > > +   _smart_apply(obj);
> > > +}
> > > +
> > >  pid_t
> > >  termio_pid_get(const Evas_Object *obj)
> > >  {
> > > diff --git a/src/bin/termio.h b/src/bin/termio.h
> > > index 485a311..4266dcb 100644
> > > --- a/src/bin/termio.h
> > > +++ b/src/bin/termio.h
> > > @@ -29,6 +29,9 @@ Evas_Object *termio_win_get(Evas_Object *obj);
> > >  Evas_Object *termio_mirror_add(Evas_Object *obj);
> > >  const char  *termio_title_get(Evas_Object *obj);
> > >  const char  *termio_icon_name_get(Evas_Object *obj);
> > > +<<<<<<< HEAD
> > >  void         termio_debugwhite_set(Evas_Object *obj, Eina_Bool dbg);
> > >
> > > +=======
> > > +>>>>>>> add miniview feature to terminology. Pressing ctrl+shift+f
> > > toggles miniview on the side of each terminal/split/tab
> > >  #endif
> > > --
> > > 1.7.12.4
> > >
> > >
>
>
> --
> ------------- Codito, ergo sum - "I code, therefore I am" --------------
> The Rasterman (Carsten Haitzler)    raster@rasterman.com
>
>
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic