add miniview feature to terminology.

Pressing ctrl+shift+f toggles miniview on the side of each terminal/split/tab
This commit is contained in:
Godfath3r 2013-06-23 03:07:27 +03:00 committed by Boris Faure
parent eb28d29bde
commit a5bb346937
9 changed files with 563 additions and 7 deletions

View File

@ -3437,4 +3437,28 @@ target: "0.clip"; target: "1.clip"; target: "2.clip"; target: "3.clip"; target:
} }
} }
} }
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;
}
}
}
}
} }

View File

@ -30,6 +30,7 @@ options_keys.c options_keys.h \
options_helpers.c options_helpers.h \ options_helpers.c options_helpers.h \
options_video.c options_video.h \ options_video.c options_video.h \
sel.c sel.h \ sel.c sel.h \
scrolio.c scrolio.h \
termio.c termio.h \ termio.c termio.h \
termcmd.c termcmd.h \ termcmd.c termcmd.h \
termiolink.c termiolink.h \ termiolink.c termiolink.h \

View File

@ -134,6 +134,8 @@ config_init(void)
(edd_base, Config, "colors_use", colors_use, EET_T_UCHAR); (edd_base, Config, "colors_use", colors_use, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_ARRAY EET_DATA_DESCRIPTOR_ADD_ARRAY
(edd_base, Config, "colors", colors, edd_color); (edd_base, Config, "colors", colors, edd_color);
EET_DATA_DESCRIPTOR_ADD_BASIC
(edd_base, Config, "miniview", miniview, EET_T_UCHAR);
} }
void void
@ -547,6 +549,7 @@ config_load(const char *key)
} }
} }
config->mouse_over_focus = EINA_TRUE; config->mouse_over_focus = EINA_TRUE;
config->miniview = EINA_FALSE;
} }
} }
@ -611,7 +614,7 @@ config_fork(Config *config)
CPY(colors_use); CPY(colors_use);
memcpy(config2->colors, config->colors, sizeof(config->colors)); memcpy(config2->colors, config->colors, sizeof(config->colors));
CPY(mouse_over_focus); CPY(mouse_over_focus);
CPY(miniview);
CPY(temporary); CPY(temporary);
SCPY(config_key); SCPY(config_key);
return config2; return config2;

View File

@ -60,6 +60,7 @@ struct _Config
int cg_height; int cg_height;
Eina_Bool colors_use; Eina_Bool colors_use;
Config_Color colors[(4 * 12)]; Config_Color colors[(4 * 12)];
Eina_Bool miniview;
Eina_Bool temporary; /* not in EET */ Eina_Bool temporary; /* not in EET */
const char *config_key; /* not in EET, the key that config was loaded */ const char *config_key; /* not in EET, the key that config was loaded */

View File

@ -4,6 +4,7 @@
#include <Elementary.h> #include <Elementary.h>
#include "main.h" #include "main.h"
#include "win.h" #include "win.h"
#include "scrolio.h"
#include "termio.h" #include "termio.h"
#include "termpty.h" #include "termpty.h"
#include "termcmd.h" #include "termcmd.h"
@ -50,6 +51,7 @@ struct _Term
Evas_Object *term; Evas_Object *term;
Evas_Object *media; Evas_Object *media;
Evas_Object *popmedia; Evas_Object *popmedia;
Evas_Object *miniview;
Evas_Object *sel; Evas_Object *sel;
Evas_Object *tabcount_spacer; Evas_Object *tabcount_spacer;
Eina_List *popmedia_queue; Eina_List *popmedia_queue;
@ -1091,6 +1093,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 static void
_popmedia_queue_process(Term *term) _popmedia_queue_process(Term *term)
{ {
@ -1991,6 +2023,13 @@ main_term_free(Term *term)
} }
term->media = NULL; term->media = NULL;
if (term->popmedia) evas_object_del(term->popmedia); 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; term->popmedia = NULL;
evas_object_del(term->term); evas_object_del(term->term);
term->term = NULL; term->term = NULL;
@ -2226,8 +2265,9 @@ 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,8", _cb_tab_8, term);
evas_object_smart_callback_add(o, "tab,9", _cb_tab_9, term); evas_object_smart_callback_add(o, "tab,9", _cb_tab_9, term);
evas_object_smart_callback_add(o, "tab,0", _cb_tab_10, term); evas_object_smart_callback_add(o, "tab,0", _cb_tab_10, term);
evas_object_smart_callback_add(o, "miniview,toggle", _cb_scrolio_toggle, term);
evas_object_show(o); evas_object_show(o);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
_cb_term_mouse_down, term); _cb_term_mouse_down, term);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP,
@ -2239,7 +2279,20 @@ main_term_new(Win *wn, Config *config, const char *cmd,
wn->terms = eina_list_append(wn->terms, term); wn->terms = eina_list_append(wn->terms, term);
app_server_term_add(term); app_server_term_add(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; return term;
} }

397
src/bin/scrolio.c Normal file
View File

@ -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;
}

0
src/bin/scrolio.h Normal file
View File

View File

@ -3,6 +3,7 @@
#include <Ecore_IMF_Evas.h> #include <Ecore_IMF_Evas.h>
#include <Elementary.h> #include <Elementary.h>
#include <Ecore_Input.h> #include <Ecore_Input.h>
#include "scrolio.h"
#include "termio.h" #include "termio.h"
#include "termiolink.h" #include "termiolink.h"
#include "termpty.h" #include "termpty.h"
@ -60,6 +61,7 @@ struct _Termio
Eina_Bool dndobjdel : 1; Eina_Bool dndobjdel : 1;
} down; } down;
} link; } link;
Evas_Object *scrolio;
int zoom_fontsize_start; int zoom_fontsize_start;
int scroll; int scroll;
Eina_List *mirrors; Eina_List *mirrors;
@ -1248,7 +1250,11 @@ _block_edje_activate(Evas_Object *obj, Termblock *blk)
evas_object_show(blk->obj); evas_object_show(blk->obj);
evas_object_data_set(blk->obj, "blk", blk); 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 static void
@ -1504,6 +1510,7 @@ _smart_apply(Evas_Object *obj)
if (ch1 >= 0) if (ch1 >= 0)
evas_object_textgrid_update_add(sd->grid.obj, ch1, y, evas_object_textgrid_update_add(sd->grid.obj, ch1, y,
ch2 - ch1 + 1, 1); ch2 - ch1 + 1, 1);
//printf("I'm fine thanx\n");
} }
termpty_cellcomp_thaw(sd->pty); termpty_cellcomp_thaw(sd->pty);
@ -1517,7 +1524,6 @@ _smart_apply(Evas_Object *obj)
(sd->pty->block.active, l); (sd->pty->block.active, l);
} }
} }
if ((sd->scroll != 0) || (sd->pty->state.hidecursor)) if ((sd->scroll != 0) || (sd->pty->state.hidecursor))
evas_object_hide(sd->cursor.obj); evas_object_hide(sd->cursor.obj);
else else
@ -1617,6 +1623,7 @@ _smart_apply(Evas_Object *obj)
evas_object_hide(sd->sel.theme); evas_object_hide(sd->sel.theme);
if (sd->mouseover_delay) ecore_timer_del(sd->mouseover_delay); if (sd->mouseover_delay) ecore_timer_del(sd->mouseover_delay);
sd->mouseover_delay = ecore_timer_add(0.05, _smart_mouseover_delay, obj); sd->mouseover_delay = ecore_timer_add(0.05, _smart_mouseover_delay, obj);
//printf("How are you today?\n?");
} }
static void static void
@ -1631,7 +1638,6 @@ _smart_size(Evas_Object *obj, int w, int h, Eina_Bool force)
{ {
if ((w == sd->grid.w) && (h == sd->grid.h)) return; if ((w == sd->grid.w) && (h == sd->grid.h)) return;
} }
evas_event_freeze(evas_object_evas_get(obj)); evas_event_freeze(evas_object_evas_get(obj));
evas_object_textgrid_size_set(sd->grid.obj, w, h); evas_object_textgrid_size_set(sd->grid.obj, w, h);
sd->grid.w = w; sd->grid.w = w;
@ -1644,8 +1650,14 @@ _smart_size(Evas_Object *obj, int w, int h, Eina_Bool force)
sd->font.chh * sd->grid.h); sd->font.chh * sd->grid.h);
_sel_set(obj, EINA_FALSE); _sel_set(obj, EINA_FALSE);
termpty_resize(sd->pty, w, h); termpty_resize(sd->pty, w, h);
_smart_calculate(obj); _smart_calculate(obj);
_smart_apply(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)); evas_event_thaw(evas_object_evas_get(obj));
} }
@ -1678,6 +1690,8 @@ _smart_cb_change(void *data)
sd->anim = NULL; sd->anim = NULL;
_smart_apply(obj); _smart_apply(obj);
evas_object_smart_callback_call(obj, "changed", NULL); evas_object_smart_callback_call(obj, "changed", NULL);
if (sd->scrolio)
scrolio_miniview_update_scroll(sd->scrolio, termio_scroll_get(obj));
return EINA_FALSE; return EINA_FALSE;
} }
@ -1686,6 +1700,8 @@ _smart_update_queue(Evas_Object *obj, Termio *sd)
{ {
if (sd->anim) return; if (sd->anim) return;
sd->anim = ecore_animator_add(_smart_cb_change, obj); sd->anim = ecore_animator_add(_smart_cb_change, obj);
if (sd->scrolio)
scrolio_miniview_update_scroll(sd->scrolio, termio_scroll_get(obj));
} }
static void static void
@ -2061,6 +2077,28 @@ _handle_shift(Evas_Event_Key_Down *ev, int by, Evas_Object *term, Termio *sd)
return EINA_TRUE; return EINA_TRUE;
} }
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;
}
static void static void
_smart_cb_key_down(void *data, Evas *e EINA_UNUSED, _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
Evas_Object *obj EINA_UNUSED, void *event) Evas_Object *obj EINA_UNUSED, void *event)
@ -2186,6 +2224,11 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
_paste_selection(data, ELM_SEL_TYPE_CLIPBOARD); _paste_selection(data, ELM_SEL_TYPE_CLIPBOARD);
goto end; goto end;
} }
else if (!strcmp(ev->keyname, "f"))
{
evas_object_smart_callback_call(data, "miniview,toggle", NULL);
goto end;
}
} }
if ((alt) && (!shift) && (!ctrl)) if ((alt) && (!shift) && (!ctrl))
{ {
@ -3518,6 +3561,8 @@ _smart_cb_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
default: default:
break; break;
} }
if (sd->scrolio)
scrolio_miniview_update_scroll(sd->scrolio, termio_scroll_get(obj));
} }
} }
@ -3564,6 +3609,7 @@ termio_config_set(Evas_Object *obj, Config *config)
if (h < 1) h = 1; if (h < 1) h = 1;
evas_object_textgrid_size_set(sd->grid.obj, w, h); evas_object_textgrid_size_set(sd->grid.obj, w, h);
evas_object_textgrid_cell_size_get(sd->grid.obj, &w, &h); evas_object_textgrid_cell_size_get(sd->grid.obj, &w, &h);
if (w < 1) w = 1; if (w < 1) w = 1;
if (h < 1) h = 1; if (h < 1) h = 1;
sd->font.chw = w; sd->font.chw = w;
@ -3901,6 +3947,7 @@ static void
_smart_calculate(Evas_Object *obj) _smart_calculate(Evas_Object *obj)
{ {
Termio *sd = evas_object_smart_data_get(obj); Termio *sd = evas_object_smart_data_get(obj);
Evas_Object *scr_obj;
Evas_Coord ox, oy, ow, oh; Evas_Coord ox, oy, ow, oh;
EINA_SAFETY_ON_NULL_RETURN(sd); EINA_SAFETY_ON_NULL_RETURN(sd);
@ -3913,6 +3960,18 @@ _smart_calculate(Evas_Object *obj)
evas_object_move(sd->cursor.obj, evas_object_move(sd->cursor.obj,
ox + (sd->cursor.x * sd->font.chw), ox + (sd->cursor.x * sd->font.chw),
oy + (sd->cursor.y * sd->font.chh)); oy + (sd->cursor.y * 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->event, ox, oy); evas_object_move(sd->event, ox, oy);
evas_object_resize(sd->event, ow, oh); evas_object_resize(sd->event, ow, oh);
} }
@ -3924,6 +3983,8 @@ _smart_move(Evas_Object *obj, Evas_Coord x EINA_UNUSED, Evas_Coord y EINA_UNUSED
EINA_SAFETY_ON_NULL_RETURN(sd); EINA_SAFETY_ON_NULL_RETURN(sd);
evas_object_smart_changed(obj); evas_object_smart_changed(obj);
if (sd->scrolio)
scrolio_miniview_move(sd->scrolio, x, y);
} }
static void static void
@ -3967,6 +4028,7 @@ termio_scroll(Evas_Object *obj, int direction, int start_y, int end_y)
{ {
// adjust scroll position for added scrollback // adjust scroll position for added scrollback
sd->scroll++; sd->scroll++;
ERR("scroll: %d", sd->scroll);
if (sd->scroll > sd->pty->backscroll_num) if (sd->scroll > sd->pty->backscroll_num)
sd->scroll = sd->pty->backscroll_num; sd->scroll = sd->pty->backscroll_num;
} }
@ -4293,7 +4355,9 @@ _smart_pty_command(void *data)
char *chid = strs->data; char *chid = strs->data;
blk = termpty_block_chid_get(sd->pty, chid); blk = termpty_block_chid_get(sd->pty, chid);
if (blk) 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); EINA_LIST_FREE(strs, pp) free(pp);
} }
@ -4747,6 +4811,10 @@ termio_config_update(Evas_Object *obj)
evas_object_scale_set(sd->grid.obj, elm_config_scale_get()); 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_font_set(sd->grid.obj, sd->font.name, sd->font.size);
evas_object_textgrid_cell_size_get(sd->grid.obj, &w, &h); 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 (w < 1) w = 1;
if (h < 1) h = 1; if (h < 1) h = 1;
sd->font.chw = w; sd->font.chw = w;
@ -4829,6 +4897,14 @@ termio_scroll_get(Evas_Object *obj)
return sd->scroll; 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 pid_t
termio_pid_get(const Evas_Object *obj) termio_pid_get(const Evas_Object *obj)
{ {

View File

@ -37,4 +37,5 @@ void termio_debugwhite_set(Evas_Object *obj, Eina_Bool dbg);
void termio_config_set(Evas_Object *obj, Config *config); void termio_config_set(Evas_Object *obj, Config *config);
Config *termio_config_get(const Evas_Object *obj); Config *termio_config_get(const Evas_Object *obj);
void termio_debugwhite_set(Evas_Object *obj, Eina_Bool dbg);
#endif #endif