miniview: cleanup

This commit is contained in:
Boris Faure 2014-03-18 22:53:02 +01:00
parent a5bb346937
commit 23d3944b76
9 changed files with 468 additions and 456 deletions

View File

@ -2958,6 +2958,30 @@ 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;
}
}
}
}
//////////////////////////////////////////////////////////////////////////////
//// the multimedia controls
group { name: "terminology/mediabusy";
@ -3438,27 +3462,4 @@ 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,7 +30,7 @@ options_keys.c options_keys.h \
options_helpers.c options_helpers.h \
options_video.c options_video.h \
sel.c sel.h \
scrolio.c scrolio.h \
miniview.c miniview.h \
termio.c termio.h \
termcmd.c termcmd.h \
termiolink.c termiolink.h \

View File

@ -4,7 +4,6 @@
#include <Elementary.h>
#include "main.h"
#include "win.h"
#include "scrolio.h"
#include "termio.h"
#include "termpty.h"
#include "termcmd.h"
@ -16,6 +15,7 @@
#include "sel.h"
#include "dbus.h"
#include "app_server.h"
#include "miniview.h"
#if (ELM_VERSION_MAJOR == 1) && (ELM_VERSION_MINOR < 8)
#define PANES_TOP "left"
@ -1094,20 +1094,19 @@ _popmedia_show(Term *term, const char *src)
}
static void
_cb_scrolio_toggle(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
_cb_miniview_toggle(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
{
Term *term = data;
Config *config = termio_config_get(term->term);
if (!config->miniview)
{
Evas_Coord ox, oy, ow, oh;
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);
term->miniview = termio_miniview_show(term->term, ox, oy, ow, oh);
//edje_object_part_swallow(term->term, "terminology.content", term->miniview);
evas_object_show(term->miniview);
}
@ -2265,7 +2264,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_10, term);
evas_object_smart_callback_add(o, "miniview,toggle", _cb_scrolio_toggle, term);
evas_object_smart_callback_add(o, "miniview,toggle", _cb_miniview_toggle, term);
evas_object_show(o);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
@ -2282,7 +2281,6 @@ main_term_new(Win *wn, Config *config, const char *cmd,
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);

393
src/bin/miniview.c Normal file
View File

@ -0,0 +1,393 @@
#include <Elementary.h>
#include <stdio.h>
#include "col.h"
#include "termpty.h"
#include "termio.h"
typedef struct _Miniview Miniview;
struct _Miniview
{
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)
{
Miniview *mv;
Evas_Object *o;
mv = calloc(1, sizeof(Miniview));
EINA_SAFETY_ON_NULL_RETURN(mv);
evas_object_smart_data_set(obj, mv);
_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);
mv->image_obj = o;
}
static void
_smart_del()
{
}
static void
_smart_move()
{
}
static void
_smart_calculate(Evas_Object *obj)
{
Miniview *mv = evas_object_smart_data_get(obj);
if (!mv) return;
//evas_object_geometry_get(mv->obj, &ox, &oy, &ow, &oh);
//evas_object_move(mv->grid.obj, ox+(mv->grid.w*0.8), oy);
//evas_object_resize(mv->grid.obj,
// mv->grid.w * mv->font.chw,
// mv->grid.h * mv->font.chh);
evas_object_image_size_set(mv->image_obj, mv->parent_w / mv->font.chw,
(mv->parent_h / mv->font.chh) + mv->scrollback);
evas_object_image_fill_set(mv->image_obj, 0, 0, mv->parent_w * 0.15,
mv->parent_h);
evas_object_resize(mv->image_obj, mv->parent_w * 0.15, mv->parent_h);
evas_object_move(mv->image_obj, mv->parent_x + (mv->parent_w * 0.85),
mv->parent_y);
}
static void
_smart_apply(Evas_Object *obj)
{
Miniview *mv = evas_object_smart_data_get(obj);
evas_object_show(mv->image_obj);
evas_object_show(mv->edje_obj);
evas_object_show(mv->screen_obj);
}
static void
_smart_size(Evas_Object *obj)
{
Miniview *mv = evas_object_smart_data_get(obj);
if (!mv) return;
mv->miniview_screen_size = (double) mv->parent_h /
(double) (mv->scrollback * mv->font.chh);
mv->miniview_screen_step = (double) mv->parent_h / (double) mv->scrollback;
mv->miniview_screen_default_pos = (((double) mv->parent_h/(double) mv->scrollback)
* (mv->lines_drawn - mv->scroll))
/ (double) mv->parent_h
- mv->miniview_screen_size;
evas_object_image_size_set(mv->image_obj, (mv->parent_w / mv->font.chw),
mv->parent_h);
evas_object_move(mv->edje_obj, mv->parent_x, mv->parent_y);
evas_object_resize(mv->edje_obj, mv->parent_w, mv->parent_h);
edje_object_part_drag_size_set(mv->screen_obj, "miniview_screen", 1.0,
mv->miniview_screen_size);
if (!edje_object_part_drag_step_set(mv->screen_obj, "miniview_screen", 0.0,
mv->miniview_screen_step))
printf("error when setting drag step size.\n");
evas_object_move(mv->screen_obj, mv->parent_x, mv->parent_y);
evas_object_resize(mv->screen_obj, mv->parent_w, mv->parent_h);
_smart_calculate(obj);
_smart_apply(obj);
}
static void
_smart_resize()
{
/*
Miniview *mv = evas_object_smart_data_get(obj);
if (!mv) return;
_smart_size(obj);
_miniview_draw(obj, mv->grid.obj, mv->parent_w, mv->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 = "miniview";
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)
{
Miniview *mv = evas_object_smart_data_get(data);
double val;
edje_object_part_drag_value_get(o, "miniview_screen", NULL, &val);
mv->scroll = mv->lines_drawn -
((mv->lines_drawn - (mv->parent_h / mv->font.chh)) *
(val + mv->miniview_screen_size));
// if miniview lines are less than scrollback lines
// (miniview obj isn't fully drawn from top to bottom)
if (mv->lines_drawn < mv->scrollback + (mv->parent_h / mv->font.chh) - 1)
{
if (val > mv->miniview_screen_default_pos)
{
val = mv->miniview_screen_default_pos;
mv->scroll = 0;
}
else
{
mv->scroll = mv->lines_drawn -
((mv->lines_drawn - (mv->parent_h / mv->font.chh)) *
((val / mv->miniview_screen_default_pos))) -
mv->parent_h / mv->font.chh;
}
}
if (mv->scroll < 0) mv->scroll = 0;
printf("mv->scroll is:: %d and lines are: %f\n", mv->scroll, mv->lines_drawn);
termio_scroll_set(mv->termio, mv->scroll);
}
static void
_miniview_draw(Evas_Object *obj)
{
Miniview *mv = 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;
mv->lines_drawn = 0;
pixels = evas_object_image_data_get(mv->image_obj, EINA_TRUE);
p = pixels;
for (y = 0 - mv->pty->backscroll_num; y < mv->parent_h / mv->font.chh; y++)
{
cells = termpty_cellrow_get(mv->pty, y, &wret);
if (wret < mv->parent_w / mv->font.chw)
{
pty_scan_width = wret;
pty_compact_w = EINA_TRUE;
}
else
{
pty_scan_width = mv->parent_w / mv->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 < (mv->parent_w / mv->font.chw) - wret; i++)
{
r=0; g = 0; b = 0;
*p = (r << 16) | (g << 8) | (b);
p++;
}
mv->lines_drawn++;
}
evas_object_image_data_set(mv->image_obj, pixels);
evas_object_image_data_update_add(mv->image_obj, 0, 0, mv->parent_w * 0.85, mv->parent_h * mv->parent_h);
}
void
miniview_resize(Evas_Object *obj, Termpty *pty, int w, int h)
{
Miniview *mv = evas_object_smart_data_get(obj);
if (!mv) return;
mv->parent_w = w;
mv->parent_h = h;
mv->pty = pty;
_smart_size(obj);
}
void
miniview_move(Evas_Object *obj, int x, int y)
{
Miniview *mv = evas_object_smart_data_get(obj);
if (!mv) return;
mv->parent_x = x;
mv->parent_y = y;
_smart_size(obj);
}
void
miniview_update_scroll(Evas_Object *obj, int scroll_position)
{
Miniview *mv = evas_object_smart_data_get(obj);
if (!mv) return;
mv->scroll = scroll_position;
_smart_size(obj);
edje_object_part_drag_value_set(mv->screen_obj, "miniview_screen", 0.0, mv->miniview_screen_default_pos);
_miniview_draw(obj);
}
Evas_Object *
miniview_add(Evas_Object *parent, int fontw, int fonth, Termpty *pty,
int scroll_position, int x, int y, int w, int h)
{
Evas *e;
Evas_Object *obj, *edje_obj;
Config *config = termio_config_get(parent);
Miniview *mv;
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);
mv = evas_object_smart_data_get(obj);
if (!mv) return obj;
mv->parent_x = x;
mv->parent_y = y;
mv->parent_w = w;
mv->parent_h = h;
mv->font.chw = fontw;
mv->font.chh = fonth;
mv->pty = pty;
mv->scrollback = config->scrollback;
mv->scroll = scroll_position;
mv->miniview_screen_size = (double) mv->parent_h
/ mv->font.chh * mv->scrollback;
mv->miniview_screen_step = (double) mv->parent_h / (double) mv->scrollback;
mv->miniview_screen_default_pos =
(((double) mv->parent_h/(double) mv->scrollback)// pixels for each line drawn
* (mv->lines_drawn - mv->scroll)) // number of lines drawn
/ (double) mv->parent_h // Divided by height to find the percentage
- mv->miniview_screen_size;
mv->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);
mv->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,
mv->miniview_screen_size);
if (!edje_object_part_drag_step_set(edje_obj, "miniview_screen", 0.0, mv->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);
mv->screen_obj = edje_obj;
_smart_size(obj);
_miniview_draw(obj);
miniview_update_scroll(obj, mv->scroll);
return obj;
}
void
miniview_hide(Evas_Object *obj)
{
Miniview *mv = evas_object_smart_data_get(obj);
if (!mv) return;
evas_object_hide(mv->image_obj);
evas_object_hide(mv->edje_obj);
evas_object_hide(mv->screen_obj);
mv->image_obj = NULL;
mv->edje_obj = NULL;
mv->screen_obj = NULL;
}

10
src/bin/miniview.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef _MINIVIEW_H__
#define _MINIVIEW_H__ 1
void miniview_resize(Evas_Object *obj, Termpty *pty, int w, int h);
void miniview_move(Evas_Object *obj, int x, int y);
void miniview_update_scroll(Evas_Object *obj, int scroll_position);
Evas_Object * miniview_add(Evas_Object *parent, int fontw, int fonth, Termpty *pty,
int scroll_position, int x, int y, int w, int h);
void miniview_hide(Evas_Object *obj);
#endif

View File

@ -1,397 +0,0 @@
#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;
}

View File

View File

@ -1,9 +1,10 @@
#include "private.h"
#include <Ecore_IMF.h>
#include <Ecore_IMF_Evas.h>
#include <Elementary.h>
#include <Ecore_Input.h>
#include "scrolio.h"
#include "termio.h"
#include "termiolink.h"
#include "termpty.h"
@ -15,6 +16,7 @@
#include "utils.h"
#include "media.h"
#include "dbus.h"
#include "miniview.h"
#if defined (__MacOSX__) || (defined (__MACH__) && defined (__APPLE__))
# include <sys/proc_info.h>
@ -61,7 +63,7 @@ struct _Termio
Eina_Bool dndobjdel : 1;
} down;
} link;
Evas_Object *scrolio;
Evas_Object *miniview;
int zoom_fontsize_start;
int scroll;
Eina_List *mirrors;
@ -1253,7 +1255,7 @@ _block_edje_activate(Evas_Object *obj, Termblock *blk)
if (ok)
{
_block_edje_cmds(sd->pty, blk, blk->cmds, EINA_TRUE);
//scrolio_pty_update(sd->scrolio, sd->pty);
//scrolio_pty_update(sd->miniview, sd->pty);
}
}
@ -1653,9 +1655,10 @@ _smart_size(Evas_Object *obj, int w, int h, Eina_Bool force)
_smart_calculate(obj);
_smart_apply(obj);
if (sd->scrolio)
if (sd->miniview)
{
scrolio_miniview_resize(sd->scrolio, sd->pty, w * sd->font.chw, h * sd->font.chh);
miniview_resize(sd->miniview, 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));
@ -1690,8 +1693,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));
if (sd->miniview)
miniview_update_scroll(sd->miniview, termio_scroll_get(obj));
return EINA_FALSE;
}
@ -1700,8 +1703,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));
if (sd->miniview)
miniview_update_scroll(sd->miniview, termio_scroll_get(obj));
}
static void
@ -2081,22 +2084,21 @@ void
termio_miniview_hide(Evas_Object *obj)
{
Termio *sd = evas_object_smart_data_get(obj);
if (!sd) return;
EINA_SAFETY_ON_NULL_RETURN(sd);
scrolio_miniview_hide(sd->scrolio);
sd->scrolio = NULL;
miniview_hide(sd->miniview);
sd->miniview = 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;
EINA_SAFETY_ON_NULL_RETURN_VAL(sd, NULL);
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;
sd->miniview = miniview_add(obj, sd->font.chw, sd->font.chh,
sd->pty, termio_scroll_get(obj), x, y, w, h);
return sd->miniview;
}
static void
@ -3561,8 +3563,8 @@ _smart_cb_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU
default:
break;
}
if (sd->scrolio)
scrolio_miniview_update_scroll(sd->scrolio, termio_scroll_get(obj));
if (sd->miniview)
miniview_update_scroll(sd->miniview, termio_scroll_get(obj));
}
}
@ -3947,7 +3949,6 @@ 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;
EINA_SAFETY_ON_NULL_RETURN(sd);
@ -3961,12 +3962,12 @@ _smart_calculate(Evas_Object *obj)
ox + (sd->cursor.x * sd->font.chw),
oy + (sd->cursor.y * sd->font.chh));
//evas_object_move(sd->scrolio.grid.obj, ox, oy);
//evas_object_resize(sd->scrolio.grid.obj,
//evas_object_move(sd->miniview.grid.obj, ox, oy);
//evas_object_resize(sd->miniview.grid.obj,
// sd->grid.w * sd->font.chw,
// sd->grid.h * sd->font.chh);
//scr_obj = scrolio_grid_object_get(sd->scrolio);
//scr_obj = scrolio_grid_object_get(sd->miniview);
//evas_object_move(scr_obj, ox, oy);
//evas_object_resize(scr_obj,
// sd->grid.w * sd->font.chw,
@ -3983,8 +3984,8 @@ _smart_move(Evas_Object *obj, Evas_Coord x EINA_UNUSED, Evas_Coord y EINA_UNUSED
EINA_SAFETY_ON_NULL_RETURN(sd);
evas_object_smart_changed(obj);
if (sd->scrolio)
scrolio_miniview_move(sd->scrolio, x, y);
if (sd->miniview)
miniview_move(sd->miniview, x, y);
}
static void
@ -4812,9 +4813,9 @@ termio_config_update(Evas_Object *obj)
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);
//evas_object_scale_set(sd->miniview.grid.obj, elm_config_scale_get());
//evas_object_textgrid_font_set(sd->miniview.grid.obj, sd->font.name, sd->font.size);
//evas_object_textgrid_cell_size_get(sd->miniview.grid.obj, &w, &h);
if (w < 1) w = 1;
if (h < 1) h = 1;
sd->font.chw = w;
@ -4901,6 +4902,7 @@ void
termio_scroll_set(Evas_Object *obj, int scroll)
{
Termio *sd = evas_object_smart_data_get(obj);
EINA_SAFETY_ON_NULL_RETURN(sd);
sd->scroll = scroll;
_smart_apply(obj);
}

View File

@ -12,6 +12,7 @@ char *termio_selection_get(Evas_Object *obj,
int c1x, int c1y, int c2x, int c2y,
size_t *len);
Eina_Bool termio_selection_exists(const Evas_Object *obj);
void termio_scroll_set(Evas_Object *obj, int scroll);
void termio_scroll(Evas_Object *obj, int direction, int start_y, int end_y);
void termio_content_change(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int n);
@ -38,4 +39,8 @@ void termio_config_set(Evas_Object *obj, Config *config);
Config *termio_config_get(const Evas_Object *obj);
void termio_debugwhite_set(Evas_Object *obj, Eina_Bool dbg);
void termio_miniview_hide(Evas_Object *obj);
Evas_Object *termio_miniview_show(Evas_Object *obj, int x, int y, int w, int h);
#endif