e_scrollbar smart. needs callbacks.

SVN revision: 17150
This commit is contained in:
codewarrior 2005-10-04 01:33:59 +00:00 committed by codewarrior
parent 5fd6574067
commit 13daf7d8bd
21 changed files with 775 additions and 2 deletions

View File

@ -46,6 +46,7 @@ collections {
#include "default_pointer.edc"
#include "default_about.edc"
#include "default_theme_about.edc"
#include "default_entry.edc"
#include "default_entry.edc"
#include "default_scrollbar.edc"
}

View File

@ -0,0 +1,529 @@
images {
image: "e17_hscrollbar_trough.png" COMP;
image: "e17_scrollbar_left_arrow.png" COMP;
image: "e17_scrollbar_left_arrow_down.png" COMP;
image: "e17_scrollbar_right_arrow.png" COMP;
image: "e17_scrollbar_right_arrow_down.png" COMP;
image: "e17_scrollbar_left_arrow.png" COMP;
image: "e17_scrollbar_left_arrow_down.png" COMP;
image: "e17_hhandle.png" COMP;
image: "e17_hhandle_down.png" COMP;
image: "e17_hhandle_thumb.png" COMP;
image: "e17_vscrollbar_trough.png" COMP;
image: "e17_scrollbar_top_arrow.png" COMP;
image: "e17_scrollbar_top_arrow_down.png" COMP;
image: "e17_scrollbar_bottom_arrow.png" COMP;
image: "e17_scrollbar_bottom_arrow_down.png" COMP;
image: "e17_scrollbar_top_arrow.png" COMP;
image: "e17_scrollbar_top_arrow_down.png" COMP;
image: "e17_vhandle.png" COMP;
image: "e17_vhandle_down.png" COMP;
image: "e17_vhandle_thumb.png" COMP;
}
group {
name: "widgets/hscrollbar";
min: 40 16;
parts {
part {
name: "trough";
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.5;
offset: 0 -8;
}
rel2 {
relative: 1.0 0.5;
offset: -1 9;
}
image {
normal: "e17_hscrollbar_trough.png";
border: 6 6 6 6;
}
}
}
part {
name: "left_left_arrow";
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.5;
offset: -1 -8;
}
rel2 {
relative: 0.0 0.5;
offset: 16 9;
}
image {
normal: "e17_scrollbar_left_arrow.png";
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_scrollbar_left_arrow_down.png";
}
}
}
part {
name: "right_right_arrow";
description {
state: "default" 0.0;
rel1 {
relative: 1.0 0.5;
offset: -17 -8;
}
rel2 {
relative: 1.0 0.5;
offset: 0 9;
}
image {
normal: "e17_scrollbar_right_arrow.png";
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_scrollbar_right_arrow_down.png";
}
}
}
part {
name: "right_left_arrow";
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.0;
offset: -18 0;
to: "right_right_arrow";
}
rel2 {
relative: 0.0 1.0;
offset: -1 -1;
to: "right_right_arrow";
}
image {
normal: "e17_scrollbar_left_arrow.png";
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_scrollbar_left_arrow_down.png";
}
}
}
part {
name: "scrollbar_bar_confine";
type: RECT;
description {
state: "default" 0.0;
visible: 0;
rel1 {
relative: 1.0 0.5;
offset: 0 9;
to_x: "left_left_arrow";
}
rel2 {
relative: 0.0 0.5;
offset: 0 10;
to_x: "right_left_arrow";
}
}
}
part {
name: "drag";
dragable {
confine: "scrollbar_bar_confine";
x: 1 1 1;
y: 0 0 0;
}
description {
state: "default" 0.0;
min: 58 18;
max: 58 18;
image {
normal: "e17_hhandle.png";
border: 10 10 0 0;
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_hhandle_down.png";
}
}
}
part {
name: "drag_thumb";
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
relative: 0.5 0.5;
offset: -9 -4;
to: "drag";
}
rel2 {
relative: 0.5 0.5;
offset: 6 1;
to: "drag";
}
image {
normal: "e17_hhandle_thumb.png";
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
rel1 {
offset: -8 -3;
}
rel2 {
offset: 7 2;
}
}
}
}
programs {
program {
name: "hscrollbar_drag_down";
signal: "mouse,down,1";
source: "drag";
action: STATE_SET "down" 0.0;
target: "drag";
target: "drag_thumb";
}
program {
name: "hscrollbar_drag_up";
signal: "mouse,up,1";
source: "drag";
action: STATE_SET "default" 0.0;
target: "drag";
target: "drag_thumb";
}
program {
name: "left_left_arrow_down";
signal: "mouse,down,1";
source: "left_left_arrow";
action: STATE_SET "down" 0.0;
target: "left_left_arrow";
after: "emit_scroll_left_start";
}
program {
name: "left_left_arrow_up";
signal: "mouse,up,1";
source: "left_left_arrow";
action: STATE_SET "default" 0.0;
target: "left_left_arrow";
after: "emit_scroll_left_stop";
}
program {
name: "right_left_arrow_down";
signal: "mouse,down,1";
source: "right_left_arrow";
action: STATE_SET "down" 0.0;
target: "right_left_arrow";
after: "emit_scroll_left_start";
}
program {
name: "right_left_arrow_up";
signal: "mouse,up,1";
source: "right_left_arrow";
action: STATE_SET "default" 0.0;
target: "right_left_arrow";
after: "emit_scroll_left_stop";
}
program {
name: "right_right_arrow_down";
signal: "mouse,down,1";
source: "right_right_arrow";
action: STATE_SET "down" 0.0;
target: "right_right_arrow";
after: "emit_scroll_right_start";
}
program {
name: "right_right_arrow_up";
signal: "mouse,up,1";
source: "right_right_arrow";
action: STATE_SET "default" 0.0;
target: "right_right_arrow";
after: "emit_scroll_right_stop";
}
program {
name: "emit_scroll_left_start";
action: SIGNAL_EMIT "scroll_left_start" "";
}
program {
name: "emit_scroll_left_stop";
action: SIGNAL_EMIT "scroll_left_stop" "";
}
program {
name: "emit_scroll_right_start";
action: SIGNAL_EMIT "scroll_right_start" "";
}
program {
name: "emit_scroll_right_stop";
action: SIGNAL_EMIT "scroll_right_stop" "";
}
}
}
group {
name: "widgets/vscrollbar";
min: 16 40;
parts {
part {
name: "trough";
description {
state: "default" 0.0;
rel1 {
relative: 0.5 0.0;
offset: -8 0;
}
rel2 {
relative: 0.5 1.0;
offset: 9 -1;
}
image {
normal: "e17_vscrollbar_trough.png";
border: 6 6 6 6;
}
}
}
part {
name: "top_top_arrow";
description {
state: "default" 0.0;
rel1 {
relative: 0.5 0.0;
offset: -8 -1;
}
rel2 {
relative: 0.5 0.0;
offset: 9 16;
}
image {
normal: "e17_scrollbar_top_arrow.png";
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_scrollbar_top_arrow_down.png";
}
}
}
part {
name: "bottom_bottom_arrow";
description {
state: "default" 0.0;
rel1 {
relative: 0.5 1.0;
offset: -8 -17;
}
rel2 {
relative: 0.5 1.0;
offset: 9 0;
}
image {
normal: "e17_scrollbar_bottom_arrow.png";
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_scrollbar_bottom_arrow_down.png";
}
}
}
part {
name: "bottom_top_arrow";
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.0;
offset: 0 -18;
to: "bottom_bottom_arrow";
}
rel2 {
relative: 1.0 0.0;
offset: -1 -1;
to: "bottom_bottom_arrow";
}
image {
normal: "e17_scrollbar_top_arrow.png";
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_scrollbar_top_arrow_down.png";
}
}
}
part {
name: "scrollbar_bar_confine";
type: RECT;
description {
state: "default" 0.0;
visible: 0;
rel1 {
relative: 0.5 1.0;
offset: 9 0;
to_y: "top_top_arrow";
}
rel2 {
relative: 0.5 0.0;
offset: 10 0;
to_y: "bottom_top_arrow";
}
}
}
part {
name: "drag";
dragable {
confine: "scrollbar_bar_confine";
x: 0 0 0;
y: 1 1 1;
}
description {
state: "default" 0.0;
min: 18 58;
max: 18 58;
image {
normal: "e17_vhandle.png";
border: 0 0 10 10;
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
image {
normal: "e17_vhandle_down.png";
}
}
}
part {
name: "drag_thumb";
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
relative: 0.5 0.5;
offset: -4 -9;
to: "drag";
}
rel2 {
relative: 0.5 0.5;
offset: 1 6;
to: "drag";
}
image {
normal: "e17_vhandle_thumb.png";
}
}
description {
state: "down" 0.0;
inherit: "default" 0.0;
rel1 {
offset: -3 -8;
}
rel2 {
offset: 2 7;
}
}
}
}
programs {
program {
name: "vscrollbar_drag_down";
signal: "mouse,down,1";
source: "drag";
action: STATE_SET "down" 0.0;
target: "drag";
target: "drag_thumb";
}
program {
name: "vscrollbar_drag_up";
signal: "mouse,up,1";
source: "drag";
action: STATE_SET "default" 0.0;
target: "drag";
target: "drag_thumb";
}
program {
name: "top_top_arrow_down";
signal: "mouse,down,1";
source: "top_top_arrow";
action: STATE_SET "down" 0.0;
target: "top_top_arrow";
after: "emit_scroll_top_start";
}
program {
name: "top_top_arrow_up";
signal: "mouse,up,1";
source: "top_top_arrow";
action: STATE_SET "default" 0.0;
target: "top_top_arrow";
after: "emit_scroll_top_stop";
}
program {
name: "bottom_top_arrow_down";
signal: "mouse,down,1";
source: "bottom_top_arrow";
action: STATE_SET "down" 0.0;
target: "bottom_top_arrow";
after: "emit_scroll_top_start";
}
program {
name: "bottom_top_arrow_up";
signal: "mouse,up,1";
source: "bottom_top_arrow";
action: STATE_SET "default" 0.0;
target: "bottom_top_arrow";
after: "emit_scroll_top_stop";
}
program {
name: "bottom_bottom_arrow_down";
signal: "mouse,down,1";
source: "bottom_bottom_arrow";
action: STATE_SET "down" 0.0;
target: "bottom_bottom_arrow";
after: "emit_scroll_bottom_start";
}
program {
name: "bottom_bottom_arrow_up";
signal: "mouse,up,1";
source: "bottom_bottom_arrow";
action: STATE_SET "default" 0.0;
target: "bottom_bottom_arrow";
after: "emit_scroll_bottom_stop";
}
program {
name: "emit_scroll_top_start";
action: SIGNAL_EMIT "scroll_top_start" "";
}
program {
name: "emit_scroll_top_stop";
action: SIGNAL_EMIT "scroll_top_stop" "";
}
program {
name: "emit_scroll_bottom_start";
action: SIGNAL_EMIT "scroll_bottom_start" "";
}
program {
name: "emit_scroll_bottom_stop";
action: SIGNAL_EMIT "scroll_bottom_stop" "";
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -78,7 +78,8 @@ e_configure.h \
e_about.h \
e_theme_about.h \
e_apps_cache.h \
e_entry.h
e_entry.h \
e_scrollbar.h
enlightenment_src = \
e_user.c \
@ -140,6 +141,7 @@ e_about.c \
e_theme_about.c \
e_apps_cache.c \
e_entry.c \
e_scrollbar.c \
$(ENLIGHTENMENTHEADERS)
enlightenment_SOURCES = \

223
src/bin/e_scrollbar.c Normal file
View File

@ -0,0 +1,223 @@
#include "e.h"
/*
* TODO:
* - add event handlers for scrolling
* - add functions to set / get values and min / max
*/
typedef struct _E_Scrollbar_Smart_Data
{
Evas_Object *edje_object;
struct {
double min;
double max;
} value;
E_Scrollbar_Direction direction;
} E_Scrollbar_Smart_Data;
static void _e_scrollbar_smart_add(Evas_Object *object);
static void _e_scrollbar_smart_del(Evas_Object *object);
static void _e_scrollbar_smart_raise(Evas_Object *object);
static void _e_scrollbar_smart_lower(Evas_Object *object);
static void _e_scrollbar_smart_stack_above(Evas_Object *object, Evas_Object *above);
static void _e_scrollbar_smart_stack_below(Evas_Object *object, Evas_Object *below);
static void _e_scrollbar_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y);
static void _e_scrollbar_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h);
static void _e_scrollbar_smart_show(Evas_Object *object);
static void _e_scrollbar_smart_hide(Evas_Object *object);
static Evas_Smart *e_scrollbar_smart = NULL;
Evas_Object *e_scrollbar_add(Evas *evas)
{
Evas_Object *o;
if (!e_scrollbar_smart)
{
e_scrollbar_smart = evas_smart_new("e_entry",
_e_scrollbar_smart_add, /* add */
_e_scrollbar_smart_del, /* del */
NULL, /* layer_set */
_e_scrollbar_smart_raise, /* raise */
_e_scrollbar_smart_lower, /* lower */
_e_scrollbar_smart_stack_above, /* stack_above */
_e_scrollbar_smart_stack_below, /* stack_below */
_e_scrollbar_smart_move, /* move */
_e_scrollbar_smart_resize, /* resize */
_e_scrollbar_smart_show, /* show */
_e_scrollbar_smart_hide, /* hide */
NULL, /* color_set */
NULL, /* clip_set */
NULL, /* clip_unset */
NULL); /* data*/
}
o = evas_object_smart_add(evas, e_scrollbar_smart);
return o;
}
void
e_scrollbar_direction_set (Evas_Object *object, E_Scrollbar_Direction dir)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
if (scrollbar_sd->direction == dir)
return;
switch (dir)
{
case E_SCROLLBAR_HOR:
e_theme_edje_object_set(scrollbar_sd->edje_object,
"base/theme/widgets/hscrollbar",
"widgets/hscrollbar");
break;
case E_SCROLLBAR_VERT:
e_theme_edje_object_set(scrollbar_sd->edje_object,
"base/theme/widgets/vscrollbar",
"widgets/vscrollbar");
break;
}
}
E_Scrollbar_Direction
e_scrollbar_direction_get (Evas_Object *object)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
return scrollbar_sd->direction;
}
/**************************
* Private functions
**************************/
static void _e_scrollbar_smart_add(Evas_Object *object)
{
Evas *evas;
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(evas = evas_object_evas_get(object)))
return;
scrollbar_sd = calloc(1, sizeof(E_Scrollbar_Smart_Data));
scrollbar_sd->value.min = 0.0;
scrollbar_sd->value.max = 1.0;
scrollbar_sd->edje_object = edje_object_add(evas);
e_theme_edje_object_set(scrollbar_sd->edje_object,
"base/theme/widgets/hscrollbar",
"widgets/hscrollbar");
scrollbar_sd->direction = E_SCROLLBAR_HOR;
evas_object_smart_member_add(scrollbar_sd->edje_object, object);
evas_object_smart_data_set(object, scrollbar_sd);
}
static void _e_scrollbar_smart_del(Evas_Object *object)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_del(scrollbar_sd->edje_object);
free(scrollbar_sd);
}
static void _e_scrollbar_smart_raise(Evas_Object *object)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_raise(scrollbar_sd->edje_object);
}
static void _e_scrollbar_smart_lower(Evas_Object *object)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_lower(scrollbar_sd->edje_object);
}
static void _e_scrollbar_smart_stack_above(Evas_Object *object, Evas_Object *above)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !above || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_stack_above(scrollbar_sd->edje_object, above);
}
/* Called when the object is stacked below another object */
static void _e_scrollbar_smart_stack_below(Evas_Object *object, Evas_Object *below)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !below || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_stack_below(scrollbar_sd->edje_object, below);
}
/* Called when the object is moved */
static void _e_scrollbar_smart_move(Evas_Object *object, Evas_Coord x, Evas_Coord y)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_move(scrollbar_sd->edje_object, x, y);
}
/* Called when the object is resized */
static void _e_scrollbar_smart_resize(Evas_Object *object, Evas_Coord w, Evas_Coord h)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_resize(scrollbar_sd->edje_object, w, h);
}
static void _e_scrollbar_smart_show(Evas_Object *object)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_show(scrollbar_sd->edje_object);
}
static void _e_scrollbar_smart_hide(Evas_Object *object)
{
E_Scrollbar_Smart_Data *scrollbar_sd;
if (!object || !(scrollbar_sd = evas_object_smart_data_get(object)))
return;
evas_object_hide(scrollbar_sd->edje_object);
}

18
src/bin/e_scrollbar.h Normal file
View File

@ -0,0 +1,18 @@
#ifdef E_TYPEDEFS
typedef enum _E_Scrollbar_Direction
{
E_SCROLLBAR_HOR = 0,
E_SCROLLBAR_VERT = 1
} E_Scrollbar_Direction;
#else
#ifndef E_SCROLLBAR_H
#define E_SCROLLBAR_H
EAPI Evas_Object *e_scrollbar_add(Evas *evas);
EAPI void e_scrollbar_direction_set_(Evas_Object *object, E_Scrollbar_Direction dir);
EAPI E_Scrollbar_Direction e_scrollbar_direction_get(Evas_Object *object);
#endif
#endif