bin/live_edit: improve ux.

add a assistance lines for aligning.
This commit is contained in:
ChunEon Park 2015-02-22 23:14:58 +09:00
parent 56848930dd
commit ebfefc0531
1 changed files with 134 additions and 10 deletions

View File

@ -5,6 +5,8 @@
#include <Elementary_Cursor.h>
#include "common.h"
#define ALIGN_LINES_CNT 4
typedef enum
{
Ctrl_Pt_Rel1 = 0,
@ -32,6 +34,7 @@ typedef struct live_editor_s
Evas_Object *enventor;
Evas_Object *trigger;
Evas_Object *ctrl_pt[Ctrl_Pt_Cnt];
Evas_Object *align_line[ALIGN_LINES_CNT];
double half_ctrl_size;
struct {
@ -177,8 +180,8 @@ cp_top_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
Evas_Coord y = ev->cur.canvas.y;
//Limit to boundary
Evas_Coord ly, lh;
evas_object_geometry_get(ld->live_view, NULL, &ly, NULL, &lh);
Evas_Coord lx, ly, lw, lh;
evas_object_geometry_get(ld->live_view, &lx, &ly, &lw, &lh);
Evas_Coord rel2_y;
evas_object_geometry_get(ld->ctrl_pt[Ctrl_Pt_Rel2], NULL, &rel2_y,
@ -187,6 +190,11 @@ cp_top_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
if ((y - ld->half_ctrl_size) > rel2_y) y = (rel2_y + ld->half_ctrl_size);
ld->part_info.rel1_y = ((double) (y - ly) / (double) lh);
//Align Line
evas_object_move(ld->align_line[0], lx + 1, y - 1);
evas_object_resize(ld->align_line[0], lw - 2, 1);
evas_object_show(ld->align_line[0]);
}
static void
@ -199,8 +207,8 @@ cp_bottom_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
Evas_Coord y = ev->cur.canvas.y;
//Limit to boundary
Evas_Coord ly, lh;
evas_object_geometry_get(ld->live_view, NULL, &ly, NULL, &lh);
Evas_Coord lx, ly, lw, lh;
evas_object_geometry_get(ld->live_view, &lx, &ly, &lw, &lh);
Evas_Coord rel1_y;
evas_object_geometry_get(ld->ctrl_pt[Ctrl_Pt_Rel1], NULL, &rel1_y,
@ -209,6 +217,11 @@ cp_bottom_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
if (rel1_y > (y + ld->half_ctrl_size)) y = (rel1_y - ld->half_ctrl_size);
ld->part_info.rel2_y = ((double) (y - ly) / (double) lh);
//Align Line
evas_object_move(ld->align_line[0], lx + 1, y - 1);
evas_object_resize(ld->align_line[0], lw - 2, 1);
evas_object_show(ld->align_line[0]);
}
static void
@ -235,6 +248,18 @@ cp_rel1_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
ld->part_info.rel1_x = ((double) (x - lx) / (double) lw);
ld->part_info.rel1_y = ((double) (y - ly) / (double) lh);
//Align Lines
//Horizontal
evas_object_move(ld->align_line[0], lx + 1, y - 1);
evas_object_resize(ld->align_line[0], lw - 2, 1);
evas_object_show(ld->align_line[0]);
//Vertical
evas_object_move(ld->align_line[1], x - 1, ly + 1);
evas_object_resize(ld->align_line[1], 1, lh - 2);
evas_object_show(ld->align_line[1]);
}
static void
@ -261,6 +286,18 @@ cp_rel2_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
ld->part_info.rel2_x = ((double) (x - lx) / (double) lw);
ld->part_info.rel2_y = ((double) (y - ly) / (double) lh);
//Align Lines
//Horizontal
evas_object_move(ld->align_line[0], lx + 1, y - 1);
evas_object_resize(ld->align_line[0], lw - 2, 1);
evas_object_show(ld->align_line[0]);
//Vertical
evas_object_move(ld->align_line[1], x - 1, ly + 1);
evas_object_resize(ld->align_line[1], 1, lh - 2);
evas_object_show(ld->align_line[1]);
}
static void
@ -291,6 +328,18 @@ cp_rel3_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
ld->part_info.rel2_x = ((double) (x - lx) / (double) lw);
ld->part_info.rel1_y = ((double) (y - ly) / (double) lh);
//Align Lines
//Horizontal
evas_object_move(ld->align_line[0], lx + 1, y - 1);
evas_object_resize(ld->align_line[0], lw - 2, 1);
evas_object_show(ld->align_line[0]);
//Vertical
evas_object_move(ld->align_line[1], x - 1, ly + 1);
evas_object_resize(ld->align_line[1], 1, lh - 2);
evas_object_show(ld->align_line[1]);
}
static void
@ -321,6 +370,18 @@ cp_rel4_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
ld->part_info.rel1_x = ((double) (x - lx) / (double) lw);
ld->part_info.rel2_y = ((double) (y - ly) / (double) lh);
//Align Lines
//Horizontal
evas_object_move(ld->align_line[0], lx + 1, y - 1);
evas_object_resize(ld->align_line[0], lw - 2, 1);
evas_object_show(ld->align_line[0]);
//Vertical
evas_object_move(ld->align_line[1], x - 1, ly + 1);
evas_object_resize(ld->align_line[1], 1, lh - 2);
evas_object_show(ld->align_line[1]);
}
static void
@ -333,8 +394,8 @@ cp_left_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
Evas_Coord x = ev->cur.canvas.x;
//Limit to boundary
Evas_Coord lx, lw;
evas_object_geometry_get(ld->live_view, &lx, NULL, &lw, NULL);
Evas_Coord lx, ly, lw, lh;
evas_object_geometry_get(ld->live_view, &lx, &ly, &lw, &lh);
Evas_Coord rel2_x;
evas_object_geometry_get(ld->ctrl_pt[Ctrl_Pt_Rel2], &rel2_x, NULL,
@ -343,6 +404,11 @@ cp_left_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
if ((x - ld->half_ctrl_size) > rel2_x) x = (rel2_x + ld->half_ctrl_size);
ld->part_info.rel1_x = ((double) (x - lx) / (double) lw);
//Align Line
evas_object_move(ld->align_line[0], x - 1, ly + 1);
evas_object_resize(ld->align_line[0], 1, lh - 2);
evas_object_show(ld->align_line[0]);
}
static void
@ -355,8 +421,8 @@ cp_right_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
Evas_Coord x = ev->cur.canvas.x;
//Limit to boundary
Evas_Coord lx, lw;
evas_object_geometry_get(ld->live_view, &lx, NULL, &lw, NULL);
Evas_Coord lx, ly, lw, lh;
evas_object_geometry_get(ld->live_view, &lx, &ly, &lw, &lh);
Evas_Coord rel1_x;
evas_object_geometry_get(ld->ctrl_pt[Ctrl_Pt_Rel1], &rel1_x, NULL,
@ -365,6 +431,11 @@ cp_right_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
if (rel1_x > (x + ld->half_ctrl_size)) x = (rel1_x - ld->half_ctrl_size);
ld->part_info.rel2_x = ((double) (x - lx) / (double) lw);
//Align Line
evas_object_move(ld->align_line[0], x - 1, ly + 1);
evas_object_resize(ld->align_line[0], 1, lh - 2);
evas_object_show(ld->align_line[0]);
}
static void
@ -404,12 +475,22 @@ cp_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
live_edit_update(ld);
}
static void
align_lines_hide(live_data *ld)
{
int i;
for (i = 0; i < ALIGN_LINES_CNT; i++)
evas_object_hide(ld->align_line[i]);
}
static void
cp_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
evas_object_event_callback_del(obj, EVAS_CALLBACK_MOUSE_MOVE,
cp_mouse_move_cb);
live_data *ld = data;
align_lines_hide(ld);
}
static void
@ -421,8 +502,6 @@ cp_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
evas_object_layer_set(obj, EVAS_LAYER_MAX);
}
static void
ctrl_pt_init(live_data *ld)
{
@ -538,6 +617,28 @@ layout_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
text_update(ld);
ctrl_pt_update(ld);
//Align Lines
//Rel1 Horizontal
evas_object_move(ld->align_line[0], lx + 1, y);
evas_object_resize(ld->align_line[0], lw - 2, 1);
evas_object_show(ld->align_line[0]);
//Rel1 Vertical
evas_object_move(ld->align_line[1], x, ly + 1);
evas_object_resize(ld->align_line[1], 1, lh - 2);
evas_object_show(ld->align_line[1]);
//Rel2 Horizontal
evas_object_move(ld->align_line[2], lx + 1, y + h);
evas_object_resize(ld->align_line[2], lw - 2, 1);
evas_object_show(ld->align_line[2]);
//Rel2 Vertical
evas_object_move(ld->align_line[3], x + w, ly + 1);
evas_object_resize(ld->align_line[3], 1, lh - 2);
evas_object_show(ld->align_line[3]);
}
static void
@ -546,6 +647,8 @@ layout_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
{
evas_object_event_callback_del(obj, EVAS_CALLBACK_MOUSE_MOVE,
layout_mouse_move_cb);
live_data *ld = data;
align_lines_hide(ld);
}
static void
@ -567,6 +670,19 @@ layout_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
layout_mouse_move_cb, data);
}
static void
align_line_init(live_data *ld)
{
//Create Align Lines
int i;
for (i = 0; i < ALIGN_LINES_CNT; i++)
{
Evas_Object *layout = elm_layout_add(ld->layout);
elm_layout_file_set(layout, EDJE_PATH, "ctrl_pt");
ld->align_line[i] = layout;
}
}
static void
live_edit_layer_set(live_data *ld)
{
@ -599,6 +715,7 @@ live_edit_layer_set(live_data *ld)
live_edit_update(ld);
live_edit_symbol_set(ld);
ctrl_pt_init(ld);
align_line_init(ld);
}
static void
@ -711,6 +828,13 @@ live_edit_cancel(void)
ld->ctrl_pt[i] = NULL;
}
//Delete Align Lines
for (i = 0; i < ALIGN_LINES_CNT; i++)
{
evas_object_del(ld->align_line[i]);
ld->align_line[i] = NULL;
}
ld->on = EINA_FALSE;
}