add miniview feature to terminology.
Pressing ctrl+shift+f toggles miniview on the side of each terminal/split/tab
This commit is contained in:
parent
eb28d29bde
commit
a5bb346937
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 \
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue