From: Jaehwan Kim <jae.hwan.kim@samsung.com>
Subject: [E-devel] [Patch] ELM_THUMBSCROLL_SENSITIVITY_FRICTION I talked with you about 4.0, magic number. I want to change the part that the length of mouse dragging multiply 4.0 to _elm_config->thumbscroll_sensitivity_friction. 4.0 is nice. But some device may want to change the value. It is a kind of sensitivity. So I added the config "ELM_THUMBSCROLL_SENESITIVITY _FRICTION". And I change the value mean. If the value is high, it is more sensitive. The range of the value is from 0.1 to 1.0. It cannot be 0.0. 4.0 changed to 0.25. Please check this patch. SVN revision: 64051
This commit is contained in:
parent
e429abd9d7
commit
2fd30a5890
|
@ -12,6 +12,7 @@ group "Elm_Config" struct {
|
|||
value "bring_in_scroll_friction" double: 0.5;
|
||||
value "zoom_friction" double: 0.5;
|
||||
value "thumbscroll_border_friction" double: 0.5;
|
||||
value "thumbscroll_sensitivity_friction" double: 0.25;
|
||||
value "scale" double: 1.0;
|
||||
value "bgpixmap" int: 0;
|
||||
value "compositing" int: 1;
|
||||
|
|
|
@ -12,6 +12,7 @@ group "Elm_Config" struct {
|
|||
value "bring_in_scroll_friction" double: 0.5;
|
||||
value "zoom_friction" double: 0.5;
|
||||
value "thumbscroll_border_friction" double: 0.5;
|
||||
value "thumbscroll_sensitivity_friction" double: 0.25;
|
||||
value "scroll_smooth_amount" double: 1.0;
|
||||
value "scroll_smooth_history_weight" double: 0.3;
|
||||
value "scroll_smooth_future_time" double: 0.0;
|
||||
|
|
|
@ -12,6 +12,7 @@ group "Elm_Config" struct {
|
|||
value "bring_in_scroll_friction" double: 0.5;
|
||||
value "zoom_friction" double: 0.5;
|
||||
value "thumbscroll_border_friction" double: 0.5;
|
||||
value "thumbscroll_sensitivity_friction" double: 0.25;
|
||||
value "scroll_smooth_amount" double: 0.0;
|
||||
value "scroll_smooth_history_weight" double: 0.3;
|
||||
value "scroll_smooth_future_time" double: 0.0;
|
||||
|
|
|
@ -914,3 +914,149 @@ group {
|
|||
}
|
||||
}
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
group {
|
||||
name: "elm/ctxpopup/item_compress/default";
|
||||
images {
|
||||
image: "hoversel_entry_bg.png" COMP;
|
||||
}
|
||||
parts {
|
||||
part { name: "event";
|
||||
mouse_events: 1;
|
||||
description { state: "default" 0.0;
|
||||
}
|
||||
}
|
||||
part { name: "bg";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel1.offset: 2 2;
|
||||
rel2.offset: -3 -3;
|
||||
image { normal:"hoversel_entry_bg.png";
|
||||
border: 0 0 2 2;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
color: 255 255 255 0;
|
||||
}
|
||||
description { state: "clicked" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 255 255 255 255;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.icon";
|
||||
type: SWALLOW;
|
||||
clip_to: "disclip";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
min: 25 25;
|
||||
max: 25 25;
|
||||
align: 0 0.5;
|
||||
aspect: 1.0 1.0;
|
||||
rel1 { offset: 10 10; }
|
||||
rel2 { offset: 0 -10; }
|
||||
}
|
||||
}
|
||||
part { name: "elm.text";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
clip_to: "disclip";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
min: 1 40;
|
||||
fixed: 0 1;
|
||||
align: 0.5 0.5;
|
||||
rel1 { relative: 1.0 0.0; to: "elm.swallow.icon"; offset: 10 0; }
|
||||
rel2 { relative: 1.0 1.0; }
|
||||
color: 255 255 255 255;
|
||||
text {
|
||||
font: "Sans";
|
||||
size: 10;
|
||||
min: 0 1;
|
||||
align: 0.0 0.5;
|
||||
}
|
||||
}
|
||||
description { state: "clicked" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 0 0 0 255;
|
||||
}
|
||||
}
|
||||
part { name: "over1";
|
||||
mouse_events: 1;
|
||||
repeat_events: 1;
|
||||
ignore_flags: ON_HOLD;
|
||||
description { state: "default" 0.0;
|
||||
color: 255 255 255 0;
|
||||
}
|
||||
description { state: "clicked" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 255 255 255 255;
|
||||
}
|
||||
}
|
||||
part { name: "over2";
|
||||
mouse_events: 1;
|
||||
repeat_events: 1;
|
||||
description { state: "default" 0.0;
|
||||
color: 255 255 255 0;
|
||||
}
|
||||
description { state: "clicked" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color: 255 255 255 255;
|
||||
}
|
||||
}
|
||||
part { name: "disclip";
|
||||
type: RECT;
|
||||
description { state: "default" 0.0;
|
||||
color: 255 255 255 255;
|
||||
}
|
||||
description { state: "enabled" 0.0;
|
||||
color: 127 127 127 127;
|
||||
}
|
||||
}
|
||||
part { name: "blocker";
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
}
|
||||
description { state: "enabled" 0.0;
|
||||
visible: 1;
|
||||
color: 0 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program {
|
||||
name: "item_unclick";
|
||||
signal: "mouse,up,1";
|
||||
source: "over1";
|
||||
action: SIGNAL_EMIT "elm,action,click" "";
|
||||
}
|
||||
program { name: "disable";
|
||||
signal: "elm,state,disabled";
|
||||
source: "elm";
|
||||
action: STATE_SET "enabled" 0.0;
|
||||
target: "disclip";
|
||||
target: "blocker";
|
||||
}
|
||||
program { name: "enable";
|
||||
signal: "elm,state,enabled";
|
||||
source: "elm";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "disclip";
|
||||
target: "blocker";
|
||||
}
|
||||
program { name: "item_click2";
|
||||
signal: "mouse,down,1";
|
||||
source: "over2";
|
||||
script {
|
||||
set_state(PART:"elm.text", "clicked", 0.0);
|
||||
set_state(PART:"bg", "clicked", 0.0);
|
||||
}
|
||||
}
|
||||
program { name: "item_unclick2";
|
||||
signal: "mouse,up,1";
|
||||
source: "over2";
|
||||
script {
|
||||
set_state(PART:"elm.text", "default", 0.0);
|
||||
set_state(PART:"bg", "default", 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -361,6 +361,30 @@ tsbf_change(void *data __UNUSED__,
|
|||
elm_scroll_thumbscroll_border_friction_all_set(val);
|
||||
}
|
||||
|
||||
static void
|
||||
tssf_round(void *data __UNUSED__,
|
||||
Evas_Object *obj,
|
||||
void *event_info __UNUSED__)
|
||||
{
|
||||
double val = elm_slider_value_get(obj);
|
||||
double v;
|
||||
|
||||
v = ((double)((int)(val * 20.0))) / 20.0;
|
||||
if (v != val) elm_slider_value_set(obj, v);
|
||||
}
|
||||
|
||||
static void
|
||||
tssf_change(void *data __UNUSED__,
|
||||
Evas_Object *obj,
|
||||
void *event_info __UNUSED__)
|
||||
{
|
||||
double tssf = elm_scroll_thumbscroll_sensitivity_friction_get();
|
||||
double val = elm_slider_value_get(obj);
|
||||
|
||||
if (tssf == val) return;
|
||||
elm_scroll_thumbscroll_sensitivity_friction_all_set(val);
|
||||
}
|
||||
|
||||
static void
|
||||
cf_enable(void *data,
|
||||
Evas_Object *obj,
|
||||
|
@ -864,7 +888,7 @@ _profile_change_do(Evas_Object *win,
|
|||
{
|
||||
int flush_interval, font_c, image_c, edje_file_c, edje_col_c, ts_threshould;
|
||||
double scale, s_bounce_friction, ts_momentum_threshold, ts_friction,
|
||||
ts_border_friction, page_friction, bring_in_friction, zoom_friction;
|
||||
ts_border_friction, ts_sensitivity_friction, page_friction, bring_in_friction, zoom_friction;
|
||||
const char *curr_theme, *curr_engine;
|
||||
const Eina_List *l_items, *l;
|
||||
Eina_Bool s_bounce, ts;
|
||||
|
@ -889,6 +913,7 @@ _profile_change_do(Evas_Object *win,
|
|||
ts_momentum_threshold = elm_scroll_thumbscroll_momentum_threshold_get();
|
||||
ts_friction = elm_scroll_thumbscroll_friction_get();
|
||||
ts_border_friction = elm_scroll_thumbscroll_border_friction_get();
|
||||
ts_sensitivity_friction = elm_scroll_thumbscroll_sensitivity_friction_get();
|
||||
page_friction = elm_scroll_page_scroll_friction_get();
|
||||
bring_in_friction = elm_scroll_bring_in_scroll_friction_get();
|
||||
zoom_friction = elm_scroll_zoom_friction_get();
|
||||
|
@ -940,6 +965,9 @@ _profile_change_do(Evas_Object *win,
|
|||
elm_scroll_thumbscroll_border_friction_all_set(ts_border_friction);
|
||||
elm_slider_value_set(evas_object_data_get(win, "ts_border_friction_slider"),
|
||||
ts_border_friction);
|
||||
elm_scroll_thumbscroll_sensitivity_friction_all_set(ts_sensitivity_friction);
|
||||
elm_slider_value_set(evas_object_data_get(win, "ts_sensitivity_friction_slider"),
|
||||
ts_sensitivity_friction);
|
||||
elm_scroll_page_scroll_friction_all_set(page_friction);
|
||||
elm_slider_value_set(evas_object_data_get(win,
|
||||
"page_scroll_friction_slider"),
|
||||
|
@ -2518,6 +2546,26 @@ _status_config_scrolling(Evas_Object *win,
|
|||
evas_object_smart_callback_add(sl, "changed", tsbf_round, NULL);
|
||||
evas_object_smart_callback_add(sl, "delay,changed", tsbf_change, NULL);
|
||||
|
||||
LABEL_FRAME_ADD("<hilight>Thumb scroll sensitivity friction</>");
|
||||
|
||||
sl = elm_slider_add(win);
|
||||
elm_object_tooltip_text_set(sl, "This is the sensitivity amount which<br>"
|
||||
"is be multiplied by the length of mouse<br>"
|
||||
"dragging.");
|
||||
evas_object_data_set(win, "ts_sensitivity_friction_slider", sl);
|
||||
evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.0);
|
||||
evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
|
||||
elm_slider_span_size_set(sl, 120);
|
||||
elm_slider_unit_format_set(sl, "%1.2f");
|
||||
elm_slider_indicator_format_set(sl, "%1.2f");
|
||||
elm_slider_min_max_set(sl, 0.1, 1.0);
|
||||
elm_slider_value_set(sl, elm_scroll_thumbscroll_sensitivity_friction_get());
|
||||
elm_box_pack_end(bx, sl);
|
||||
evas_object_show(sl);
|
||||
|
||||
evas_object_smart_callback_add(sl, "changed", tssf_round, NULL);
|
||||
evas_object_smart_callback_add(sl, "delay,changed", tssf_change, NULL);
|
||||
|
||||
sp = elm_separator_add(win);
|
||||
elm_separator_horizontal_set(sp, EINA_TRUE);
|
||||
evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, 0.0);
|
||||
|
|
|
@ -2830,6 +2830,46 @@ extern "C" {
|
|||
*/
|
||||
EAPI void elm_scroll_thumbscroll_border_friction_all_set(double friction);
|
||||
|
||||
/**
|
||||
* Get the sensitivity amount which is be multiplied by the length of
|
||||
* mouse dragging.
|
||||
*
|
||||
* @return the thumb scroll sensitivity friction
|
||||
*
|
||||
* @ingroup Scrolling
|
||||
*/
|
||||
EAPI double elm_scroll_thumbscroll_sensitivity_friction_get(void);
|
||||
|
||||
/**
|
||||
* Set the sensitivity amount which is be multiplied by the length of
|
||||
* mouse dragging.
|
||||
*
|
||||
* @param friction the thumb scroll sensitivity friction. @c 0.1 for
|
||||
* minimun sensitivity, @c 1.0 for maximum sensitivity. 0.25
|
||||
* is proper.
|
||||
*
|
||||
* @see elm_thumbscroll_sensitivity_friction_get()
|
||||
* @note parameter value will get bound to 0.1 - 1.0 interval, always
|
||||
*
|
||||
* @ingroup Scrolling
|
||||
*/
|
||||
EAPI void elm_scroll_thumbscroll_sensitivity_friction_set(double friction);
|
||||
|
||||
/**
|
||||
* Set the sensitivity amount which is be multiplied by the length of
|
||||
* mouse dragging, for all Elementary application windows.
|
||||
*
|
||||
* @param friction the thumb scroll sensitivity friction. @c 0.1 for
|
||||
* minimun sensitivity, @c 1.0 for maximum sensitivity. 0.25
|
||||
* is proper.
|
||||
*
|
||||
* @see elm_thumbscroll_sensitivity_friction_get()
|
||||
* @note parameter value will get bound to 0.1 - 1.0 interval, always
|
||||
*
|
||||
* @ingroup Scrolling
|
||||
*/
|
||||
EAPI void elm_scroll_thumbscroll_sensitivity_friction_all_set(double friction);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -76,7 +76,7 @@ static size_t _elm_user_dir_snprintf(char *dst,
|
|||
#ifdef HAVE_ELEMENTARY_X
|
||||
static Ecore_Event_Handler *_prop_change_handler = NULL;
|
||||
static Ecore_X_Window _root_1st = 0;
|
||||
#define ATOM_COUNT 22
|
||||
#define ATOM_COUNT 23
|
||||
static Ecore_X_Atom _atom[ATOM_COUNT];
|
||||
static Ecore_X_Atom _atom_config = 0;
|
||||
static const char *_atom_names[ATOM_COUNT] =
|
||||
|
@ -99,6 +99,7 @@ static const char *_atom_names[ATOM_COUNT] =
|
|||
"ENLIGHTENMENT_THUMBSCROLL_MOMENTUM_THRESHOLD",
|
||||
"ENLIGHTENMENT_THUMBSCROLL_FRICTION",
|
||||
"ENLIGHTENMENT_THUMBSCROLL_BORDER_FRICTION",
|
||||
"ENLIGHTENMENT_THUMBSCROLL_SENSITIVITY_FRICTION",
|
||||
"ENLIGHTENMENT_THUMBSCROLL_PAGE_SCROLL_FRICTION",
|
||||
"ENLIGHTENMENT_THUMBSCROLL_BRING_IN_SCROLL_FRICTION",
|
||||
"ENLIGHTENMENT_THUMBSCROLL_ZOOM_FRICTION",
|
||||
|
@ -122,10 +123,11 @@ static const char *_atom_names[ATOM_COUNT] =
|
|||
#define ATOM_E_THUMBSCROLL_MOMENTUM_THRESHOLD 15
|
||||
#define ATOM_E_THUMBSCROLL_FRICTION 16
|
||||
#define ATOM_E_THUMBSCROLL_BORDER_FRICTION 17
|
||||
#define ATOM_E_THUMBSCROLL_PAGE_SCROLL_FRICTION 18
|
||||
#define ATOM_E_THUMBSCROLL_BRING_IN_SCROLL_FRICTION 19
|
||||
#define ATOM_E_THUMBSCROLL_ZOOM_FRICTION 20
|
||||
#define ATOM_E_CONFIG 21
|
||||
#define ATOM_E_THUMBSCROLL_SENSITIVITY_FRICTION 18
|
||||
#define ATOM_E_THUMBSCROLL_PAGE_SCROLL_FRICTION 19
|
||||
#define ATOM_E_THUMBSCROLL_BRING_IN_SCROLL_FRICTION 20
|
||||
#define ATOM_E_THUMBSCROLL_ZOOM_FRICTION 21
|
||||
#define ATOM_E_CONFIG 22
|
||||
|
||||
static Eina_Bool _prop_config_get(void);
|
||||
static Eina_Bool _prop_change(void *data __UNUSED__,
|
||||
|
@ -465,6 +467,18 @@ _prop_change(void *data __UNUSED__,
|
|||
_elm_config->thumbscroll_border_friction =
|
||||
(double)val / 1000.0;
|
||||
}
|
||||
}
|
||||
else if (event->atom == _atom[ATOM_E_THUMBSCROLL_SENSITIVITY_FRICTION])
|
||||
{
|
||||
unsigned int val = 1000;
|
||||
|
||||
if (ecore_x_window_prop_card32_get(event->win,
|
||||
event->atom,
|
||||
&val, 1) > 0)
|
||||
{
|
||||
_elm_config->thumbscroll_sensitivity_friction =
|
||||
(double)val / 1000.0;
|
||||
}
|
||||
}
|
||||
else if (event->atom == _atom[ATOM_E_THUMBSCROLL_PAGE_SCROLL_FRICTION])
|
||||
{
|
||||
|
@ -566,6 +580,7 @@ _desc_init(void)
|
|||
ELM_CONFIG_VAL(D, T, thumbscroll_friction, T_DOUBLE);
|
||||
ELM_CONFIG_VAL(D, T, thumbscroll_bounce_friction, T_DOUBLE);
|
||||
ELM_CONFIG_VAL(D, T, thumbscroll_border_friction, T_DOUBLE);
|
||||
ELM_CONFIG_VAL(D, T, thumbscroll_sensitivity_friction, T_DOUBLE);
|
||||
ELM_CONFIG_VAL(D, T, page_scroll_friction, T_DOUBLE);
|
||||
ELM_CONFIG_VAL(D, T, bring_in_scroll_friction, T_DOUBLE);
|
||||
ELM_CONFIG_VAL(D, T, zoom_friction, T_DOUBLE);
|
||||
|
@ -1138,6 +1153,7 @@ _config_load(void)
|
|||
_elm_config->bring_in_scroll_friction = 0.5;
|
||||
_elm_config->zoom_friction = 0.5;
|
||||
_elm_config->thumbscroll_border_friction = 0.5;
|
||||
_elm_config->thumbscroll_sensitivity_friction = 0.25; // magic number! just trial and error shows this makes it behave "nicer" and not run off at high speed all the time
|
||||
_elm_config->scroll_smooth_amount = 1.0;
|
||||
_elm_config->scroll_smooth_history_weight = 0.3;
|
||||
_elm_config->scroll_smooth_future_time = 0.0;
|
||||
|
@ -1508,6 +1524,18 @@ _env_get(void)
|
|||
|
||||
_elm_config->thumbscroll_border_friction = friction;
|
||||
}
|
||||
s = getenv("ELM_THUMBSCROLL_SENSITIVITY_FRICTION");
|
||||
if (s)
|
||||
{
|
||||
friction = atof(s);
|
||||
if (friction < 0.1)
|
||||
friction = 0.1;
|
||||
|
||||
if (friction > 1.0)
|
||||
friction = 1.0;
|
||||
|
||||
_elm_config->thumbscroll_sensitivity_friction = friction;
|
||||
}
|
||||
s = getenv("ELM_SCROLL_SMOOTH_AMOUNT");
|
||||
if (s) _elm_config->scroll_smooth_amount = atof(s);
|
||||
s = getenv("ELM_SCROLL_SMOOTH_HISTORY_WEIGHT");
|
||||
|
|
|
@ -1887,6 +1887,44 @@ elm_scroll_thumbscroll_border_friction_all_set(double friction)
|
|||
#endif
|
||||
}
|
||||
|
||||
EAPI double
|
||||
elm_scroll_thumbscroll_sensitivity_friction_get(void)
|
||||
{
|
||||
return _elm_config->thumbscroll_sensitivity_friction;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_scroll_thumbscroll_sensitivity_friction_set(double friction)
|
||||
{
|
||||
if (friction < 0.1)
|
||||
friction = 0.1;
|
||||
|
||||
if (friction > 1.0)
|
||||
friction = 1.0;
|
||||
|
||||
_elm_config->thumbscroll_friction = friction;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_scroll_thumbscroll_sensitivity_friction_all_set(double friction)
|
||||
{
|
||||
if (friction < 0.1)
|
||||
friction = 0.1;
|
||||
|
||||
if (friction > 1.0)
|
||||
friction = 1.0;
|
||||
|
||||
#ifdef HAVE_ELEMENTARY_X
|
||||
static Ecore_X_Atom atom = 0;
|
||||
unsigned int sensitivity_friction_i = (unsigned int)(friction * 1000.0);
|
||||
|
||||
if (!atom)
|
||||
atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_SENSITIVITY_FRICTION");
|
||||
ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
|
||||
atom, &sensitivity_friction_i, 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_object_scroll_hold_push(Evas_Object *obj)
|
||||
{
|
||||
|
|
|
@ -97,6 +97,7 @@ struct _Elm_Config
|
|||
double zoom_friction;
|
||||
unsigned char thumbscroll_bounce_enable;
|
||||
double thumbscroll_border_friction;
|
||||
double thumbscroll_sensitivity_friction;
|
||||
double scroll_smooth_amount;
|
||||
double scroll_smooth_history_weight;
|
||||
double scroll_smooth_future_time;
|
||||
|
|
|
@ -1969,7 +1969,7 @@ _smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *ev
|
|||
ax /= (i + 1);
|
||||
ay /= (i + 1);
|
||||
at /= (i + 1);
|
||||
at *= 4.0; // magic number! just trial and error shows this makes it behave "nicer" and not run off at high speed all the time
|
||||
at /= _elm_config->thumbscroll_sensitivity_friction;
|
||||
dx = ev->canvas.x - ax;
|
||||
dy = ev->canvas.y - ay;
|
||||
if (at > 0)
|
||||
|
|
Loading…
Reference in New Issue