2 * Copyright 2012 Samsung Electronics Co., Ltd
\r
4 * Licensed under the Flora License, Version 1.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://floralicense.org/license/
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
18 #include "cam_ui_effect_utils.h"
\r
19 static gboolean __focus_zoom_origin_state = TRUE;
\r
20 static Elm_Transit *zoom_transit_effect = NULL;
\r
22 gboolean cam_ui_effect_utils_get_zoom_state()
\r
24 return __focus_zoom_origin_state;
\r
27 static void __zoom_effect_transit_del_cb(void *data, Elm_Transit *transit)
\r
29 DEBUG_TRACE("TODO: set default transit callback process");
\r
30 zoom_transit_effect = NULL;
\r
34 * note: it is for cam_ui_effect_utils_set_zoom_effect
\r
35 * and now: there will be always one zoom effect running for
\r
36 * cam_ui_effect_utils_set_zoom_effect at same time.
\r
39 Elm_Transit * cam_ui_effect_utils_get_zoom_effect()
\r
41 return zoom_transit_effect;
\r
44 void cam_ui_effect_utils_stop_zoom_effect()
\r
46 if (zoom_transit_effect) {
\r
47 elm_transit_del(zoom_transit_effect);
\r
48 zoom_transit_effect = NULL;
\r
52 void cam_ui_effect_utils_set_zoom_effect(Evas_Object *obj, float from_rate, float to_rate, double duration)
\r
54 Evas_Object *layout = obj;
\r
58 /*Zoom in/out to scale to_rate/from_rate.*/
\r
59 if (zoom_transit_effect) {
\r
60 elm_transit_del(zoom_transit_effect);
\r
61 zoom_transit_effect = NULL;
\r
63 zoom_transit_effect = elm_transit_add();
\r
64 if (zoom_transit_effect == NULL)
\r
66 if (to_rate < from_rate)
\r
67 __focus_zoom_origin_state = TRUE;
\r
69 __focus_zoom_origin_state = FALSE;
\r
70 elm_transit_object_add(zoom_transit_effect, layout);
\r
71 elm_transit_effect_zoom_add(zoom_transit_effect, from_rate, to_rate);
\r
72 elm_transit_duration_set(zoom_transit_effect, duration);
\r
73 elm_transit_objects_final_state_keep_set(zoom_transit_effect, EINA_TRUE);
\r
74 elm_transit_del_cb_set(zoom_transit_effect, __zoom_effect_transit_del_cb, NULL);
\r
75 elm_transit_go(zoom_transit_effect);
\r
79 void cam_ui_effect_utils_set_zoom_inout_effect(Evas_Object *obj, float from_rate, float to_rate, double duration)
\r
81 Evas_Object *layout = obj;
\r
85 /*Zoom out to scale */
\r
86 Elm_Transit *transit = elm_transit_add();
\r
87 elm_transit_object_add(transit, layout);
\r
88 elm_transit_effect_zoom_add(transit, from_rate, to_rate);
\r
89 elm_transit_duration_set(transit, duration);
\r
91 /*Zoom in to be original size.*/
\r
92 Elm_Transit *transit2 = elm_transit_add();
\r
93 elm_transit_object_add(transit2, layout);
\r
94 elm_transit_effect_zoom_add(transit2, to_rate, from_rate);
\r
95 elm_transit_duration_set(transit2, duration);
\r
97 elm_transit_chain_transit_add(transit, transit2);
\r
98 elm_transit_go(transit);
\r
103 /*for thumnail animation start*/
\r
104 /*note: init custom effect memory*/
\r
105 static Elm_Transit_Effect * __cam_ui_effect_custom_context_new(Evas_Coord from_w,
\r
111 struct cam_ui_effect_custom_effect *custom_effect = calloc( 1, sizeof( struct cam_ui_effect_custom_effect ) );
\r
112 if (!custom_effect) return NULL;
\r
114 custom_effect->from.w = from_w;
\r
115 custom_effect->from.h = from_h;
\r
116 custom_effect->to.w = to_w - from_w;
\r
117 custom_effect->to.h = to_h - from_h;
\r
118 return custom_effect;
\r
121 /*note: free custom effect memory*/
\r
122 static void __cam_ui_effect_custom_context_free(Elm_Transit_Effect *effect, Elm_Transit *transit)
\r
124 struct cam_ui_effect_custom_effect *custom_effect = effect;
\r
125 free(custom_effect);
\r
126 custom_effect = NULL;
\r
129 /*note: implement the effect solution, you could write new effect, by change these function*/
\r
130 static void __cam_ui_effect_custom_op(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
\r
132 if (!effect) return;
\r
136 const Eina_List *elist;
\r
138 struct cam_ui_effect_custom_effect *custom_effect = (struct cam_ui_effect_custom_effect *) effect;
\r
139 const Eina_List *objs = elm_transit_objects_get(transit);
\r
141 if (progress < 0.5) {
\r
142 h = custom_effect->from.h + (custom_effect->to.h * progress * 2);
\r
143 w = custom_effect->from.w;
\r
145 h = custom_effect->from.h + custom_effect->to.h;
\r
146 w = custom_effect->from.w + (custom_effect->to.w * (progress - 0.5) * 2);
\r
148 EINA_LIST_FOREACH(objs, elist, obj) {
\r
150 evas_object_resize(obj, w, h);
\r
156 /*note: when transit effect end, before transit del, this fuction will be called*/
\r
157 static void __cam_ui_effect_utils_transit_del_cb(void *data, Elm_Transit *transit)
\r
159 Evas_Object *obj = (Evas_Object *)data;
\r
163 struct appdata *ad = (struct appdata *)cam_appdata_get();
\r
166 if (!ad->toolbar.quickview_item.edje) {
\r
167 DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
\r
168 DEL_EVAS_OBJECT(obj);
\r
171 DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
\r
172 ad->toolbar.quickview_item.thumbnail_image = obj;
\r
173 elm_object_part_content_set(ad->toolbar.quickview_item.edje,
\r
174 "thumbnail", ad->toolbar.quickview_item.thumbnail_image);
\r
178 void cam_ui_effect_utils_set_thumbnail_effect(Evas_Object *obj,
\r
185 Evas_Object *layout = obj;
\r
186 Elm_Transit_Effect *effect_context = __cam_ui_effect_custom_context_new(0, h, w, h);
\r
188 Elm_Transit *transit = elm_transit_add();
\r
189 elm_transit_object_add(transit, layout);
\r
190 elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_LINEAR);
\r
191 elm_transit_effect_add(transit, __cam_ui_effect_custom_op, effect_context, __cam_ui_effect_custom_context_free);
\r
193 elm_transit_objects_final_state_keep_set(transit, TRUE);
\r
194 elm_transit_duration_set(transit, duration);
\r
195 elm_transit_del_cb_set(transit, __cam_ui_effect_utils_transit_del_cb, (void *)obj);
\r
196 elm_transit_go(transit);
\r
198 /*for thumbnail antimation end*/
\r