1 #ifndef _EVAS_H 2 # error You shall not include this header directly 3 #endif 4 5 /** 6 * @ingroup Evas_Canvas 7 * 8 * @{ 9 */ 10 /** 11 * Creates a new empty evas. 12 * 13 * Note that before you can use the evas, you will to at a minimum: 14 * @li Set its render method with @ref evas_output_method_set . 15 * @li Set its viewport size with @ref evas_output_viewport_set . 16 * @li Set its size of the canvas with @ref evas_output_size_set . 17 * @li Ensure that the render engine is given the correct settings 18 * with @ref evas_engine_info_set . 19 * 20 * This function should only fail if the memory allocation fails 21 * 22 * @note this function is very low level. Instead of using it 23 * directly, consider using the high level functions in 24 * @ref Ecore_Evas_Group such as @c ecore_evas_new(). See 25 * @ref Ecore. 26 * 27 * @attention it is recommended that one calls evas_init() before 28 * creating new canvas. 29 * 30 * @return A new uninitialised Evas canvas on success. Otherwise, @c NULL. 31 * @ingroup Evas_Canvas 32 */ 33 EAPI Evas *evas_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC; 34 35 /** 36 * Frees the given evas and any objects created on it. 37 * 38 * Any objects with 'free' callbacks will have those callbacks called 39 * in this function. 40 * 41 * @param e The given evas. 42 * 43 * @ingroup Evas_Canvas 44 */ 45 EAPI void evas_free(Evas *e) EINA_ARG_NONNULL(1); 46 47 typedef struct _Evas_Engine_Info /** Generic engine information. Generic info is useless */ 48 { 49 int magic; /**< Magic number */ 50 } Evas_Engine_Info; 51 52 /** 53 * @brief Applies the engine settings for the given evas from the given 54 * @c Evas_Engine_Info structure. 55 * 56 * To get the Evas_Engine_Info structure to use, call 57 * @ref evas_engine_info_get. Do not try to obtain a pointer to an 58 * @c Evas_Engine_Info structure in any other way. 59 * 60 * You will need to call this function at least once before you can create 61 * objects on an evas or render that evas. Some engines allow their settings to 62 * be changed more than once. 63 * 64 * Once called, the @c info pointer should be considered invalid. 65 * 66 * @param[in] info The pointer to the engine info to use. 67 * 68 * @return @c true if no error occurred, @c false otherwise. 69 * 70 * @ingroup Evas_Canvas 71 */ 72 EAPI Eina_Bool evas_engine_info_set(Evas *obj, Evas_Engine_Info *info); 73 74 /** 75 * @brief Retrieves the current render engine info struct from the given evas. 76 * 77 * The returned structure is publicly modifiable. The contents are valid until 78 * either @ref evas_engine_info_set or @ref evas_render are called. 79 * 80 * This structure does not need to be freed by the caller. 81 * 82 * @return The pointer to the engine info to use. 83 * 84 * @ingroup Evas_Canvas 85 */ 86 EAPI Evas_Engine_Info *evas_engine_info_get(const Evas *obj); 87 88 /** 89 * @brief Get the maximum image size evas can possibly handle. 90 * 91 * This function returns the largest image or surface size that evas can handle 92 * in pixels, and if there is one, returns @c true. It returns @c false if no 93 * extra constraint on maximum image size exists. You still should check the 94 * return values of @c maxw and @c maxh as there may still be a limit, just a 95 * much higher one. 96 * 97 * @param[in] obj The object. 98 * @param[out] max The maximum image size (in pixels). 99 * 100 * @return @c true on success, @c false otherwise 101 */ 102 EAPI Eina_Bool evas_image_max_size_get(Eo *eo_e, int *w, int *h); 103 104 105 #include "canvas/evas_canvas_eo.legacy.h" 106 107 /** 108 * @} 109 */ 110 111 /** @addtogroup Evas_Keys 112 * @{ 113 */ 114 115 /** 116 * An opaque type containing information on which lock keys are registered in 117 * an Evas canvas. 118 */ 119 typedef struct _Evas_Lock Evas_Lock; 120 121 /** 122 * An opaque type containing information on which modifier keys are registered 123 * in an Evas canvas. 124 */ 125 typedef struct _Evas_Modifier Evas_Modifier; 126 127 /** 128 * A bitmask of modifier keys. 129 * 130 * See evas_key_modifier_mask_get() for the keyname to bit conversion. 131 */ 132 typedef unsigned long long Evas_Modifier_Mask; 133 134 /** 135 * @} 136 */ 137 138 139 /** 140 * @addtogroup Evas_Canvas_Events 141 * 142 * @{ 143 */ 144 145 typedef struct _Evas_Event_Mouse_Down Evas_Event_Mouse_Down; /**< Event structure for #EVAS_CALLBACK_MOUSE_DOWN event callbacks */ 146 typedef struct _Evas_Event_Mouse_Up Evas_Event_Mouse_Up; /**< Event structure for #EVAS_CALLBACK_MOUSE_UP event callbacks */ 147 typedef struct _Evas_Event_Mouse_In Evas_Event_Mouse_In; /**< Event structure for #EVAS_CALLBACK_MOUSE_IN event callbacks */ 148 typedef struct _Evas_Event_Mouse_Out Evas_Event_Mouse_Out; /**< Event structure for #EVAS_CALLBACK_MOUSE_OUT event callbacks */ 149 typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move; /**< Event structure for #EVAS_CALLBACK_MOUSE_MOVE event callbacks */ 150 typedef struct _Evas_Event_Mouse_Wheel Evas_Event_Mouse_Wheel; /**< Event structure for #EVAS_CALLBACK_MOUSE_WHEEL event callbacks */ 151 typedef struct _Evas_Event_Multi_Down Evas_Event_Multi_Down; /**< Event structure for #EVAS_CALLBACK_MULTI_DOWN event callbacks */ 152 typedef struct _Evas_Event_Multi_Up Evas_Event_Multi_Up; /**< Event structure for #EVAS_CALLBACK_MULTI_UP event callbacks */ 153 typedef struct _Evas_Event_Multi_Move Evas_Event_Multi_Move; /**< Event structure for #EVAS_CALLBACK_MULTI_MOVE event callbacks */ 154 typedef struct _Evas_Event_Key_Down Evas_Event_Key_Down; /**< Event structure for #EVAS_CALLBACK_KEY_DOWN event callbacks */ 155 typedef struct _Evas_Event_Key_Up Evas_Event_Key_Up; /**< Event structure for #EVAS_CALLBACK_KEY_UP event callbacks */ 156 typedef struct _Evas_Event_Hold Evas_Event_Hold; /**< Event structure for #EVAS_CALLBACK_HOLD event callbacks */ 157 typedef struct _Evas_Event_Axis_Update Evas_Event_Axis_Update; /**< Event structure for #EVAS_CALLBACK_AXIS_UPDATE event callbacks @since 1.13 */ 158 159 struct _Evas_Event_Mouse_Down /** Mouse button press event */ 160 { 161 int button; /**< Mouse button number that went down (1 - 32) */ 162 163 Evas_Point output; /**< The X/Y location of the cursor */ 164 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */ 165 166 void *data; 167 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 168 Evas_Lock *locks; 169 170 Evas_Button_Flags flags; /**< button flags set during the event */ 171 unsigned int timestamp; 172 Evas_Event_Flags event_flags; 173 Evas_Device *dev; 174 Evas_Object *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */ 175 }; 176 177 struct _Evas_Event_Mouse_Up /** Mouse button release event */ 178 { 179 int button; /**< Mouse button number that was raised (1 - 32) */ 180 181 Evas_Point output; /**< The X/Y location of the cursor */ 182 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */ 183 184 void *data; 185 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 186 Evas_Lock *locks; 187 188 Evas_Button_Flags flags; /**< button flags set during the event */ 189 unsigned int timestamp; 190 Evas_Event_Flags event_flags; 191 Evas_Device *dev; 192 Evas_Object *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */ 193 }; 194 195 struct _Evas_Event_Mouse_In /** Mouse enter event */ 196 { 197 int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */ 198 199 Evas_Point output; /**< The X/Y location of the cursor */ 200 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */ 201 202 void *data; 203 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 204 Evas_Lock *locks; 205 unsigned int timestamp; 206 Evas_Event_Flags event_flags; 207 Evas_Device *dev; 208 Evas_Object *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */ 209 }; 210 211 struct _Evas_Event_Mouse_Out /** Mouse leave event */ 212 { 213 int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */ 214 215 Evas_Point output; /**< The X/Y location of the cursor */ 216 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */ 217 218 void *data; 219 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 220 Evas_Lock *locks; 221 unsigned int timestamp; 222 Evas_Event_Flags event_flags; 223 Evas_Device *dev; 224 Evas_Object *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */ 225 }; 226 227 struct _Evas_Event_Mouse_Move /** Mouse move event */ 228 { 229 int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */ 230 231 Evas_Position cur; /**< Current mouse position */ 232 Evas_Position prev; /**< Previous mouse position */ 233 234 void *data; 235 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 236 Evas_Lock *locks; 237 unsigned int timestamp; 238 Evas_Event_Flags event_flags; 239 Evas_Device *dev; 240 Evas_Object *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */ 241 }; 242 243 struct _Evas_Event_Mouse_Wheel /** Wheel event */ 244 { 245 int direction; /**< Axis of screen wheel - 0 = default up/down wheel, 1 = horizontal left/right wheel */ 246 int z; /**< The step for the wheel movement relative to the direction above...,-2,-1 = down, 1,2,... = up */ 247 248 Evas_Point output; /**< The X/Y location of the cursor */ 249 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */ 250 251 void *data; 252 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 253 Evas_Lock *locks; 254 unsigned int timestamp; 255 Evas_Event_Flags event_flags; 256 Evas_Device *dev; 257 }; 258 259 struct _Evas_Event_Multi_Down /** Multi button press event */ 260 { 261 int device; /**< Multi device number that went down (1 or more for extra touches) */ 262 double radius, radius_x, radius_y; 263 double pressure, angle; 264 265 Evas_Point output; 266 Evas_Coord_Precision_Point canvas; 267 268 void *data; 269 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 270 Evas_Lock *locks; 271 272 Evas_Button_Flags flags; /**< button flags set during the event */ 273 unsigned int timestamp; 274 Evas_Event_Flags event_flags; 275 Evas_Device *dev; 276 }; 277 278 struct _Evas_Event_Multi_Up /** Multi button release event */ 279 { 280 int device; /**< Multi device number that went up (1 or more for extra touches) */ 281 double radius, radius_x, radius_y; 282 double pressure, angle; 283 284 Evas_Point output; 285 Evas_Coord_Precision_Point canvas; 286 287 void *data; 288 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 289 Evas_Lock *locks; 290 291 Evas_Button_Flags flags; /**< button flags set during the event */ 292 unsigned int timestamp; 293 Evas_Event_Flags event_flags; 294 Evas_Device *dev; 295 }; 296 297 struct _Evas_Event_Multi_Move /** Multi button down event */ 298 { 299 int device; /**< Multi device number that moved (1 or more for extra touches) */ 300 double radius, radius_x, radius_y; 301 double pressure, angle; 302 303 Evas_Precision_Position cur; 304 305 void *data; 306 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 307 Evas_Lock *locks; 308 unsigned int timestamp; 309 Evas_Event_Flags event_flags; 310 Evas_Device *dev; 311 }; 312 313 struct _Evas_Event_Key_Down /** Key press event */ 314 { 315 char *keyname; /**< the name string of the key pressed */ 316 void *data; 317 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 318 Evas_Lock *locks; 319 320 const char *key; /**< The logical key : (eg shift+1 == exclamation) */ 321 const char *string; /**< A UTF8 string if this keystroke has produced a visible string to be ADDED */ 322 const char *compose; /**< A UTF8 string if this keystroke has modified a string in the middle of being composed - this string replaces the previous one */ 323 unsigned int timestamp; 324 Evas_Event_Flags event_flags; 325 Evas_Device *dev; 326 327 unsigned int keycode; /**< Key scan code numeric value @since 1.10 */ 328 }; 329 330 struct _Evas_Event_Key_Up /** Key release event */ 331 { 332 char *keyname; /**< the name string of the key released */ 333 void *data; 334 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */ 335 Evas_Lock *locks; 336 337 const char *key; /**< The logical key : (eg shift+1 == exclamation) */ 338 const char *string; /**< A UTF8 string if this keystroke has produced a visible string to be ADDED */ 339 const char *compose; /**< A UTF8 string if this keystroke has modified a string in the middle of being composed - this string replaces the previous one */ 340 unsigned int timestamp; 341 Evas_Event_Flags event_flags; 342 Evas_Device *dev; 343 344 unsigned int keycode; /**< Key scan code numeric value @since 1.10 */ 345 }; 346 347 struct _Evas_Event_Hold /** Hold change event */ 348 { 349 int hold; /**< The hold flag */ 350 void *data; 351 352 unsigned int timestamp; 353 Evas_Event_Flags event_flags; 354 Evas_Device *dev; 355 }; 356 357 typedef enum _Evas_Axis_Label 358 { 359 EVAS_AXIS_LABEL_UNKNOWN, /**< Axis containing unknown (or not yet representable) data. Range: Unbounded. Unit: Undefined. @since 1.13 */ 360 EVAS_AXIS_LABEL_X, /**< Position along physical X axis; not window relative. Range: Unbounded. Unit: Undefined. @since 1.13 */ 361 EVAS_AXIS_LABEL_Y, /**< Position along physical Y axis; not window relative. Range: Unbounded. Unit: Undefined. @since 1.13 */ 362 EVAS_AXIS_LABEL_PRESSURE, /**< Force applied to tool tip. Range: [0.0, 1.0]. Unit: Unitless. @since 1.13 */ 363 EVAS_AXIS_LABEL_DISTANCE, /**< Relative distance along physical Z axis. Range: [0.0, 1.0]. Unit: Unitless @since 1.13 */ 364 EVAS_AXIS_LABEL_AZIMUTH, /**< Angle of tool about the Z axis from positive X axis. Range: [-PI, PI]. Unit: Radians. @since 1.13 */ 365 EVAS_AXIS_LABEL_TILT, /**< Angle of tool about plane of sensor from positive Z axis. Range: [0.0, PI]. Unit: Radians. @since 1.13 */ 366 EVAS_AXIS_LABEL_TWIST, /**< Rotation of tool about its major axis from its "natural" position. Range: [-PI, PI] Unit: Radians. @since 1.13 */ 367 EVAS_AXIS_LABEL_TOUCH_WIDTH_MAJOR, /**< Length of contact ellipse along AZIMUTH. Range: Unbounded: Unit: Same as EVAS_AXIS_LABEL_{X,Y}. @since 1.13 */ 368 EVAS_AXIS_LABEL_TOUCH_WIDTH_MINOR, /**< Length of contact ellipse perpendicular to AZIMUTH. Range: Unbounded. Unit: Same as EVAS_AXIS_LABEL_{X,Y}. @since 1.13 */ 369 EVAS_AXIS_LABEL_TOOL_WIDTH_MAJOR, /**< Length of tool ellipse along AZIMUTH. Range: Unbounded. Unit: Same as EVAS_AXIS_LABEL_{X,Y}. @since 1.13 */ 370 EVAS_AXIS_LABEL_TOOL_WIDTH_MINOR, /**< Length of tool ellipse perpendicular to AZIMUTH. Range: Unbounded. Unit: Same as EVAS_AXIS_LABEL_{X,Y}. @since 1.13 */ 371 EVAS_AXIS_LABEL_WINDOW_X, /**< X coordinate mapped to the window. @since 1.19 */ 372 EVAS_AXIS_LABEL_WINDOW_Y, /**< Y coordinate mapped to the window. @since 1.19 */ 373 EVAS_AXIS_LABEL_NORMAL_X, /**< X normalized to the [0, 1] range. @since 1.19 */ 374 EVAS_AXIS_LABEL_NORMAL_Y, /**< Y normalized to the [0, 1] range. @since 1.19 */ 375 } Evas_Axis_Label; /**< Types of recognized device axes @since 1.13 */ 376 377 typedef struct _Evas_Axis 378 { 379 Evas_Axis_Label label; 380 double value; 381 } Evas_Axis; 382 383 struct _Evas_Event_Axis_Update 384 { 385 void *data; 386 387 unsigned int timestamp; 388 int device; 389 int toolid; 390 391 int naxis; 392 Evas_Axis *axis; 393 Evas_Device *dev; 394 }; 395 396 /** 397 * Add (register) a callback function to a given canvas event. 398 * 399 * @param e Canvas to attach a callback to 400 * @param type The type of event that will trigger the callback 401 * @param func The (callback) function to be called when the event is 402 * triggered 403 * @param data The data pointer to be passed to @p func 404 * 405 * This function adds a function callback to the canvas @p e when the 406 * event of type @p type occurs on it. The function pointer is @p 407 * func. 408 * 409 * In the event of a memory allocation error during the addition of 410 * the callback to the canvas, evas_alloc_error() should be used to 411 * determine the nature of the error, if any, and the program should 412 * sensibly try and recover. 413 * 414 * A callback function must have the ::Evas_Event_Cb prototype 415 * definition. The first parameter (@p data) in this definition will 416 * have the same value passed to evas_event_callback_add() as the @p 417 * data parameter, at runtime. The second parameter @p e is the canvas 418 * pointer on which the event occurred. The third parameter @p 419 * event_info is a pointer to a data structure that may or may not be 420 * passed to the callback, depending on the event type that triggered 421 * the callback. This is so because some events don't carry extra 422 * context with them, but others do. 423 * 424 * The event type @p type to trigger the function may be one of 425 * #EVAS_CALLBACK_RENDER_FLUSH_PRE, #EVAS_CALLBACK_RENDER_FLUSH_POST, 426 * #EVAS_CALLBACK_CANVAS_FOCUS_IN, #EVAS_CALLBACK_CANVAS_FOCUS_OUT, 427 * #EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN and 428 * #EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT. This determines the kind of 429 * event that will trigger the callback to be called. Only the last 430 * two of the event types listed here provide useful event information 431 * data -- a pointer to the recently focused Evas object. For the 432 * others the @p event_info pointer is going to be @c NULL. 433 * 434 * Example: 435 * @dontinclude evas-events.c 436 * @skip evas_event_callback_add(d.canvas, EVAS_CALLBACK_RENDER_FLUSH_PRE 437 * @until two canvas event callbacks 438 * 439 * Looking to the callbacks registered above, 440 * @dontinclude evas-events.c 441 * @skip called when our rectangle gets focus 442 * @until let's have our events back 443 * 444 * we see that the canvas flushes its rendering pipeline 445 * (#EVAS_CALLBACK_RENDER_FLUSH_PRE) whenever the @c _resize_cb 446 * routine takes place: it has to redraw that image at a different 447 * size. Also, the callback on an object being focused comes just 448 * after we focus it explicitly, on code. 449 * 450 * See the full @ref Example_Evas_Events "example". 451 * 452 * @note Be careful not to add the same callback multiple times, if 453 * that's not what you want, because Evas won't check if a callback 454 * existed before exactly as the one being registered (and thus, call 455 * it more than once on the event, in this case). This would make 456 * sense if you passed different functions and/or callback data, only. 457 */ 458 EAPI void evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); 459 460 /** 461 * Add (register) a callback function to a given canvas event with a 462 * non-default priority set. Except for the priority field, it's exactly the 463 * same as @ref evas_event_callback_add 464 * 465 * @param e Canvas to attach a callback to 466 * @param type The type of event that will trigger the callback 467 * @param priority The priority of the callback, lower values called first. 468 * @param func The (callback) function to be called when the event is 469 * triggered 470 * @param data The data pointer to be passed to @p func 471 * 472 * @see evas_event_callback_add 473 * @since 1.1 474 */ 475 EAPI void evas_event_callback_priority_add(Evas *e, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 4); 476 477 /** 478 * Delete a callback function from the canvas. 479 * 480 * @param e Canvas to remove a callback from 481 * @param type The type of event that was triggering the callback 482 * @param func The function that was to be called when the event was triggered 483 * @return The data pointer that was to be passed to the callback 484 * 485 * This function removes the most recently added callback from the 486 * canvas @p e which was triggered by the event type @p type and was 487 * calling the function @p func when triggered. If the removal is 488 * successful it will also return the data pointer that was passed to 489 * evas_event_callback_add() when the callback was added to the 490 * canvas. If not successful @c NULL will be returned. 491 * 492 * Example: 493 * @code 494 * extern Evas *e; 495 * void *my_data; 496 * void focus_in_callback(void *data, Evas *e, void *event_info); 497 * 498 * my_data = evas_event_callback_del(ebject, EVAS_CALLBACK_CANVAS_FOCUS_IN, focus_in_callback); 499 * @endcode 500 */ 501 EAPI void *evas_event_callback_del(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func) EINA_ARG_NONNULL(1, 3); 502 503 /** 504 * Delete (unregister) a callback function registered to a given 505 * canvas event. 506 * 507 * @param e Canvas to remove an event callback from 508 * @param type The type of event that was triggering the callback 509 * @param func The function that was to be called when the event was 510 * triggered 511 * @param data The data pointer that was to be passed to the callback 512 * @return The data pointer that was to be passed to the callback 513 * 514 * This function removes <b>the first</b> added callback from the 515 * canvas @p e matching the event type @p type, the registered 516 * function pointer @p func and the callback data pointer @p data. If 517 * the removal is successful it will also return the data pointer that 518 * was passed to evas_event_callback_add() (that will be the same as 519 * the parameter) when the callback(s) was(were) added to the 520 * canvas. If not successful @c NULL will be returned. A common use 521 * would be to remove an exact match of a callback. 522 * 523 * Example: 524 * @dontinclude evas-events.c 525 * @skip evas_event_callback_del_full(evas, EVAS_CALLBACK_RENDER_FLUSH_PRE, 526 * @until _object_focus_in_cb, NULL); 527 * 528 * See the full @ref Example_Evas_Events "example". 529 * 530 * @note For deletion of canvas events callbacks filtering by just 531 * type and function pointer, user evas_event_callback_del(). 532 */ 533 EAPI void *evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); 534 535 /** 536 * Push a callback on the post-event callback stack 537 * 538 * @param e Canvas to push the callback on 539 * @param func The function that to be called when the stack is unwound 540 * @param data The data pointer to be passed to the callback 541 * 542 * Evas has a stack of callbacks that get called after all the callbacks for 543 * an event have triggered (all the objects it triggers on and all the callbacks 544 * in each object triggered). When all these have been called, the stack is 545 * unwound from most recently to least recently pushed item and removed from the 546 * stack calling the callback set for it. 547 * 548 * This is intended for doing reverse logic-like processing, example - when a 549 * child object that happens to get the event later is meant to be able to 550 * "steal" functions from a parent and thus on unwind of this stack have its 551 * function called first, thus being able to set flags, or return 0 from the 552 * post-callback that stops all other post-callbacks in the current stack from 553 * being called (thus basically allowing a child to take control, if the event 554 * callback prepares information ready for taking action, but the post callback 555 * actually does the action). 556 * 557 * This function should only be called from inside an evas input event 558 * callback. The event_info data may be kept up until @p func is called, in 559 * order to check the state of the "on-hold" flag for instance. Do not modify 560 * the canvas or otherwise trigger or feed a events to the canvas from inside 561 * @p func. Use jobs to safely modify the canvas. 562 * 563 * @warning Only use this function if you know exactly what you are doing! 564 * 565 */ 566 EAPI void evas_post_event_callback_push(Evas *e, Evas_Object_Event_Post_Cb func, const void *data); 567 568 /** 569 * Remove a callback from the post-event callback stack 570 * 571 * @param e Canvas to push the callback on 572 * @param func The function that to be called when the stack is unwound 573 * 574 * This removes a callback from the stack added with 575 * evas_post_event_callback_push(). The first instance of the function in 576 * the callback stack is removed from being executed when the stack is 577 * unwound. Further instances may still be run on unwind. 578 */ 579 EAPI void evas_post_event_callback_remove(Evas *e, Evas_Object_Event_Post_Cb func); 580 581 /** 582 * Remove a callback from the post-event callback stack 583 * 584 * @param e Canvas to push the callback on 585 * @param func The function that to be called when the stack is unwound 586 * @param data The data pointer to be passed to the callback 587 * 588 * This removes a callback from the stack added with 589 * evas_post_event_callback_push(). The first instance of the function and data 590 * in the callback stack is removed from being executed when the stack is 591 * unwound. Further instances may still be run on unwind. 592 */ 593 EAPI void evas_post_event_callback_remove_full(Evas *e, Evas_Object_Event_Post_Cb func, const void *data); 594 595 /** 596 * @} 597 */ 598 599 /** 600 * @ingroup Evas_Event_Feeding_Group 601 * 602 * @{ 603 */ 604 605 /** 606 * Freeze all input events processing. 607 * 608 * @param e The canvas to freeze input events processing on. 609 * 610 * This function will indicate to Evas that the canvas @p e is to have 611 * all input event processing frozen until a matching 612 * evas_event_thaw() function is called on the same canvas. All events 613 * of this kind during the freeze will get @b discarded. Every freeze 614 * call must be matched by a thaw call in order to completely thaw out 615 * a canvas (i.e. these calls may be nested). The most common use is 616 * when you don't want the user to interact with your user interface 617 * when you're populating a view or changing the layout. 618 * 619 * Example: 620 * @dontinclude evas-events.c 621 * @skip freeze input for 3 seconds 622 * @until } 623 * @dontinclude evas-events.c 624 * @skip let's have our events back 625 * @until } 626 * 627 * See the full @ref Example_Evas_Events "example". 628 * 629 * If you run that example, you'll see the canvas ignoring all input 630 * events for 3 seconds, when the "f" key is pressed. In a more 631 * realistic code we would be freezing while a toolkit or Edje was 632 * doing some UI changes, thawing it back afterwards. 633 */ 634 EAPI void evas_event_freeze(Evas *e) EINA_ARG_NONNULL(1); 635 636 /** 637 * Thaw a canvas out after freezing (for input events). 638 * 639 * @param e The canvas to thaw out. 640 * 641 * This will thaw out a canvas after a matching evas_event_freeze() 642 * call. If this call completely thaws out a canvas, i.e., there's no 643 * other unbalanced call to evas_event_freeze(), events will start to 644 * be processed again, but any "missed" events will @b not be 645 * evaluated. 646 * 647 * See evas_event_freeze() for an example. 648 */ 649 EAPI void evas_event_thaw(Evas *e) EINA_ARG_NONNULL(1); 650 651 /** 652 * Return the freeze count on input events of a given canvas. 653 * 654 * @param e The canvas to fetch the freeze count from. 655 * 656 * This returns the number of times the canvas has been told to freeze 657 * input events. It is possible to call evas_event_freeze() multiple 658 * times, and these must be matched by evas_event_thaw() calls. This 659 * call allows the program to discover just how many times things have 660 * been frozen in case it may want to break out of a deep freeze state 661 * where the count is high. 662 * 663 * Example: 664 * @code 665 * extern Evas *evas; 666 * 667 * while (evas_event_freeze_get(evas) > 0) evas_event_thaw(evas); 668 * @endcode 669 * 670 */ 671 EAPI int evas_event_freeze_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); 672 673 /** 674 * After thaw of a canvas, re-evaluate the state of objects and call callbacks 675 * 676 * @param e The canvas to evaluate after a thaw 677 * 678 * This is normally called after evas_event_thaw() to re-evaluate mouse 679 * containment and other states and thus also call callbacks for mouse in and 680 * out on new objects if the state change demands it. 681 */ 682 EAPI void evas_event_thaw_eval(Evas *e) EINA_ARG_NONNULL(1); 683 684 /** 685 * @brief Mouse move event feed. 686 * 687 * This function will set some evas properties that are necessary when the mouse 688 * is moved from its last position. It prepares information to be treated by 689 * the callback function. 690 * 691 * @param[in] y The vertical position of the mouse pointer. 692 * @param[in] timestamp The timestamp of the mouse up event. 693 * @param[in] data The data for canvas. 694 */ 695 EAPI void evas_event_feed_mouse_move(Evas *obj, int x, int y, unsigned int timestamp, const void *data); 696 697 /** 698 * @brief Mouse move event feed from input. 699 * 700 * Similar to the @ref evas_event_feed_mouse_move, this function will inform 701 * Evas about mouse move events which were received by the input system, 702 * relative to the 0,0 of the window, not to the canvas 0,0. It will take care 703 * of doing any special transformation like adding the framespace offset to the 704 * mouse event. 705 * 706 * @param[in] y The vertical position of the mouse pointer relative to the 0,0 707 * of the window/surface. 708 * @param[in] timestamp The timestamp of the mouse move event. 709 * @param[in] data The data for canvas. 710 * 711 * @since 1.8 712 */ 713 EAPI void evas_event_input_mouse_move(Evas *obj, int x, int y, unsigned int timestamp, const void *data); 714 715 /** 716 * @brief Mouse up event feed. 717 * 718 * This function will set some evas properties that are necessary when the mouse 719 * button is released. It prepares information to be treated by the callback 720 * function. 721 * 722 * @param[in] flags Evas button flags. 723 * @param[in] timestamp The timestamp of the mouse up event. 724 * @param[in] data The data for canvas. 725 */ 726 EAPI void evas_event_feed_mouse_up(Evas *obj, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data); 727 728 /** 729 * @brief Mouse down event feed. 730 * 731 * This function will set some evas properties that are necessary when the mouse 732 * button is pressed. It prepares information to be treated by the callback 733 * function. 734 * 735 * @param[in] flags Evas button flags. 736 * @param[in] timestamp The timestamp of the mouse up event. 737 * @param[in] data The data for canvas. 738 */ 739 EAPI void evas_event_feed_mouse_down(Evas *obj, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data); 740 741 /** 742 * @brief Mouse wheel event feed. 743 * 744 * This function will set some evas properties that are necessary when the mouse 745 * wheel is scrolled up or down. It prepares information to be treated by the 746 * callback function. 747 * 748 * @param[in] z How much mouse wheel was scrolled up or down. 749 * @param[in] timestamp The timestamp of the mouse up event. 750 * @param[in] data The data for canvas. 751 */ 752 EAPI void evas_event_feed_mouse_wheel(Evas *obj, int direction, int z, unsigned int timestamp, const void *data); 753 754 /** 755 * @brief Mouse in event feed. 756 * 757 * This function will set some evas properties that are necessary when the mouse 758 * in event happens. It prepares information to be treated by the callback 759 * function. 760 * 761 * @param[in] data The data for canvas. 762 */ 763 EAPI void evas_event_feed_mouse_in(Evas *obj, unsigned int timestamp, const void *data); 764 765 /** 766 * @brief Mouse out event feed. 767 * 768 * This function will set some evas properties that are necessary when the mouse 769 * out event happens. It prepares information to be treated by the callback 770 * function. 771 * 772 * @param[in] data The data for canvas. 773 */ 774 EAPI void evas_event_feed_mouse_out(Evas *obj, unsigned int timestamp, const void *data); 775 776 /** 777 * @brief Mouse cancel event feed. 778 * 779 * This function will call generate a mouse up event. 780 * 781 * @param[in] data The data for canvas. 782 */ 783 EAPI void evas_event_feed_mouse_cancel(Evas *obj, unsigned int timestamp, const void *data); 784 785 /* multi touch events - no doc */ 786 EAPI void evas_event_input_multi_down(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data); 787 EAPI void evas_event_input_multi_move(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data); 788 EAPI void evas_event_input_multi_up(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data); 789 EAPI void evas_event_feed_multi_down(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data); 790 EAPI void evas_event_feed_multi_move(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data); 791 EAPI void evas_event_feed_multi_up(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data); 792 793 /** 794 * @brief Key down event feed. 795 * 796 * This function will set some evas properties that are necessary when a key is 797 * pressed. It prepares information to be treated by the callback function. 798 * 799 * @param[in] key The key pressed. 800 * @param[in] string A string. 801 * @param[in] compose The compose string. 802 * @param[in] timestamp Timestamp of the mouse up event. 803 * @param[in] data Data for canvas. 804 */ 805 EAPI void evas_event_feed_key_down(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data); 806 807 /** 808 * @brief Key up event feed. 809 * 810 * This function will set some evas properties that are necessary when a key is 811 * released. It prepares information to be treated by the callback function. 812 * 813 * @param[in] key The key released. 814 * @param[in] string A string. 815 * @param[in] compose Compose. 816 * @param[in] timestamp Timestamp of the mouse up event. 817 * @param[in] data Data for canvas. 818 */ 819 EAPI void evas_event_feed_key_up(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data); 820 821 /** 822 * @brief Key down event feed with keycode. 823 * 824 * This function will set some evas properties that are necessary when a key is 825 * pressed. It prepares information to be treated by the callback function. 826 * 827 * @param[in] key The key released. 828 * @param[in] string A string. 829 * @param[in] compose Compose. 830 * @param[in] timestamp Timestamp of the mouse up event. 831 * @param[in] data Data for canvas. 832 * @param[in] keycode Key scan code numeric value for canvas. 833 * 834 * @since 1.10 835 */ 836 EAPI void evas_event_feed_key_down_with_keycode(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode); 837 838 /** 839 * @brief Key up event feed with keycode. 840 * 841 * This function will set some evas properties that are necessary when a key is 842 * released. It prepares information to be treated by the callback function. 843 * 844 * @param[in] key The key released. 845 * @param[in] string A string. 846 * @param[in] compose Compose. 847 * @param[in] timestamp Timestamp of the mouse up event. 848 * @param[in] data Data for canvas. 849 * @param[in] keycode Key scan code numeric value for canvas. 850 * 851 * @since 1.10 852 */ 853 EAPI void evas_event_feed_key_up_with_keycode(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode); 854 855 /** 856 * @brief Input device axis update event feed. 857 * 858 * This function will set some evas properties that are necessary when an e.g. 859 * stylus axis is updated. It prepares information to be treated by the 860 * callback function. 861 * 862 * @param[in] device System-provided device identifier. 863 * @param[in] toolid Type of tool currently being used. 864 * @param[in] naxes Number of elements in the \p axis array. 865 * @param[in] axis Array containing the current value of all updated axes. 866 * @param[in] data Data for canvas. 867 * 868 * @since 1.13 869 */ 870 EAPI void evas_event_feed_axis_update(Evas *obj, unsigned int timestamp, int device, int toolid, int naxes, const Evas_Axis *axis, const void *data); 871 872 /** 873 * @brief Hold event feed. 874 * 875 * This function makes the object to stop sending events. 876 * 877 * @param[in] timestamp The timestamp of the mouse up event. 878 * @param[in] data The data for canvas. 879 */ 880 EAPI void evas_event_feed_hold(Evas *obj, int hold, unsigned int timestamp, const void *data); 881 882 /** 883 * @brief Re feed event. 884 * 885 * This function re-feeds the event pointed by event_copy. 886 * 887 * This function call evas_event_feed_* functions, so it can cause havoc if not 888 * used wisely. Please use it responsibly. 889 * 890 * @param[in] event_type Event type. 891 */ 892 EAPI void evas_event_refeed_event(Evas *obj, void *event_copy, Evas_Callback_Type event_type); 893 894 /** 895 * @} 896 */ 897 898 /** 899 * @addtogroup Evas_Keys 900 * @{ 901 */ 902 903 /** 904 * @brief Returns a handle to the list of modifier keys registered in the 905 * canvas @c e. 906 * 907 * This is required to check for which modifiers are set at a given time with 908 * the @ref evas_key_modifier_is_set function. 909 * 910 * See also @ref evas_key_modifier_add, @ref evas_key_modifier_del, 911 * @ref evas_key_modifier_on, @ref evas_key_modifier_off, 912 * @ref evas_seat_key_modifier_on, @ref evas_seat_key_modifier_off. 913 * 914 * @return An Evas_Modifier handle to query Evas' keys subsystem with @ref 915 * evas_key_modifier_is_set or @ref evas_seat_key_modifier_is_set, or @c null 916 * on error. 917 * 918 * @ingroup Evas_Canvas 919 */ 920 EAPI const Evas_Modifier *evas_key_modifier_get(const Evas *obj) EINA_WARN_UNUSED_RESULT; 921 922 /** 923 * @brief Creates a bit mask from the @c keyname modifier key. Values returned 924 * from different calls to it may be ORed together, naturally. 925 * 926 * This function is meant to be using in conjunction with @ref 927 * evas_object_key_grab/\@ref evas_object_key_ungrab. Go check their 928 * documentation for more information. 929 * 930 * See also @ref evas_key_modifier_add, @ref evas_key_modifier_get, 931 * @ref evas_key_modifier_on, @ref evas_key_modifier_off, 932 * @ref evas_seat_key_modifier_on, @ref evas_seat_key_modifier_off, @ref 933 * evas_key_modifier_is_set, @ref evas_seat_key_modifier_is_set.. 934 * 935 * @param[in] keyname The name of the modifier key to create the mask for. 936 * 937 * @return The bit mask or 0 if the @c keyname key wasn't registered as a 938 * modifier for canvas @c e. 939 * 940 * @ingroup Evas_Canvas 941 */ 942 EAPI Evas_Modifier_Mask evas_key_modifier_mask_get(const Evas *evas, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2); 943 944 /** 945 * Checks the state of a given modifier of the default seat, at the time of the 946 * call. If the modifier is set, such as shift being pressed, this 947 * function returns @c Eina_True. 948 * 949 * @param m The current modifiers set, as returned by 950 * evas_key_modifier_get(). 951 * @param keyname The name of the modifier key to check status for. 952 * 953 * @return @c Eina_True if the modifier key named @p keyname is on, @c 954 * Eina_False otherwise. 955 * 956 * @see evas_key_modifier_add 957 * @see evas_key_modifier_del 958 * @see evas_key_modifier_get 959 * @see evas_key_modifier_on 960 * @see evas_key_modifier_off 961 * @see evas_seat_key_modifier_is_set 962 */ 963 EAPI Eina_Bool evas_key_modifier_is_set(const Evas_Modifier *m, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2); 964 965 /** 966 * Checks the state of a given modifier key of a given seat, at the time of the 967 * call. If the modifier is set, such as shift being pressed, this 968 * function returns @c Eina_True. 969 * 970 * @param m The current modifiers set, as returned by 971 * evas_key_modifier_get(). 972 * @param keyname The name of the modifier key to check status for. 973 * @param seat The seat to check if the lock is set. Use @c NULL for the default seat. 974 * 975 * @return @c Eina_True if the modifier key named @p keyname is on, @c 976 * Eina_False otherwise. 977 * 978 * @see evas_key_modifier_add 979 * @see evas_key_modifier_del 980 * @see evas_key_modifier_get 981 * @see evas_key_modifier_on 982 * @see evas_key_modifier_off 983 * @see evas_seat_key_modifier_on 984 * @see evas_seat_key_modifier_off 985 * @see evas_key_modifier_is_set 986 * @since 1.19 987 */ 988 EAPI Eina_Bool evas_seat_key_modifier_is_set(const Evas_Modifier *m, const char *keyname, const Evas_Device *seat) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2); 989 990 /** 991 * Checks the state of a given lock key of the default seat, at the time of the call. If 992 * the lock is set, such as caps lock, this function returns @c 993 * Eina_True. 994 * 995 * @param l The current locks set, as returned by evas_key_lock_get(). 996 * @param keyname The name of the lock key to check status for. 997 * 998 * @return @c Eina_True if the @p keyname lock key is set, @c 999 * Eina_False otherwise. 1000 * 1001 * @see evas_key_lock_get 1002 * @see evas_key_lock_add 1003 * @see evas_key_lock_del 1004 * @see evas_key_lock_on 1005 * @see evas_key_lock_off 1006 * @see evas_seat_key_lock_on 1007 * @see evas_seat_key_lock_off 1008 * @see evas_seat_key_lock_is_set 1009 */ 1010 EAPI Eina_Bool evas_key_lock_is_set(const Evas_Lock *l, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2); 1011 1012 /** 1013 * Checks the state of a given lock key of a given seat, at the time of the call. If 1014 * the lock is set, such as caps lock, this function returns @c 1015 * Eina_True. 1016 * 1017 * @param l The current locks set, as returned by evas_key_lock_get(). 1018 * @param keyname The name of the lock key to check status for. 1019 * @param seat The seat to check if the lock is set. Use @c NULL for the default seat. 1020 * 1021 * @return @c Eina_True if the @p keyname lock key is set, @c 1022 * Eina_False otherwise. 1023 * 1024 * @see evas_key_lock_get 1025 * @see evas_key_lock_add 1026 * @see evas_key_lock_del 1027 * @see evas_key_lock_on 1028 * @see evas_key_lock_off 1029 * @see evas_key_lock_is_set 1030 * @since 1.19 1031 */ 1032 EAPI Eina_Bool evas_seat_key_lock_is_set(const Evas_Lock *l, const char *keyname, const Evas_Device *seat) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2); 1033 1034 /** 1035 * @brief Returns a handle to the list of lock keys registered in the canvas 1036 * @c e. 1037 * 1038 * This is required to check for which locks are set at a given time with the 1039 * @ref evas_key_lock_is_set function. 1040 * 1041 * @return An Evas_Lock handle to query Evas' keys subsystem with @ref 1042 * evas_key_lock_is_set or @ref evas_seat_key_lock_is_set, or @c null on error. 1043 * 1044 * @ingroup Evas_Canvas 1045 */ 1046 EAPI const Evas_Lock *evas_key_lock_get(const Evas *obj) EINA_WARN_UNUSED_RESULT; 1047 1048 /** 1049 * @} 1050 */ 1051 1052 /** 1053 * @brief Returns whether the mouse pointer is logically inside the canvas. 1054 * 1055 * @param[in] obj The object. 1056 * @param[in] dev The pointer device. 1057 * 1058 * @return @c true if the pointer is inside, @c false otherwise. 1059 * 1060 * @since 1.19 1061 * 1062 * @ingroup Evas_Canvas 1063 */ 1064 EAPI Eina_Bool evas_pointer_inside_by_device_get(const Evas *obj, Efl_Input_Device *dev); 1065 1066 /** 1067 * @brief Returns whether the default mouse pointer is logically inside the 1068 * canvas. 1069 * 1070 * When this function is called it will return a value of either @c false or 1071 * @c true, depending on if event_feed_mouse_in or event_feed_mouse_out have 1072 * been called to feed in a mouse enter event into the canvas. 1073 * 1074 * A return value of @c true indicates the mouse is logically inside the 1075 * canvas, and @c false implies it is logically outside the canvas. 1076 * 1077 * A canvas begins with the mouse being assumed outside ($false). 1078 * 1079 * If @c e is not a valid canvas, the return value is undefined. 1080 * 1081 * @param[in] obj The object. 1082 * 1083 * @return @c true if the mouse pointer is inside the canvas, @c false 1084 * otherwise 1085 * 1086 * @ingroup Evas_Canvas 1087 */ 1088 EAPI Eina_Bool evas_pointer_inside_get(const Evas *obj) EINA_WARN_UNUSED_RESULT; 1089 1090 /** 1091 * @defgroup Evas_Touch_Point_List Touch Point List Functions 1092 * 1093 * Functions to get information of touched points in the Evas. 1094 * 1095 * Evas maintains list of touched points on the canvas. Each point has 1096 * its co-ordinates, id and state. You can get the number of touched 1097 * points and information of each point using evas_touch_point_list 1098 * functions. 1099 * 1100 * @ingroup Evas_Canvas 1101 * 1102 * @{ 1103 */ 1104 1105 /** 1106 * State of Evas_Coord_Touch_Point 1107 */ 1108 typedef enum 1109 { 1110 EVAS_TOUCH_POINT_DOWN = 0, /**< Touch point is pressed down */ 1111 EVAS_TOUCH_POINT_UP, /**< Touch point is released */ 1112 EVAS_TOUCH_POINT_MOVE, /**< Touch point is moved */ 1113 EVAS_TOUCH_POINT_STILL, /**< Touch point is not moved after pressed */ 1114 EVAS_TOUCH_POINT_CANCEL /**< Touch point is cancelled */ 1115 } Evas_Touch_Point_State; 1116 1117 /** 1118 * @brief Get the number of touched point in the evas. 1119 * 1120 * New touched point is added to the list whenever touching the evas and point 1121 * is removed whenever removing touched point from the evas. 1122 * 1123 * @return The number of touched point on the evas. 1124 */ 1125 EAPI unsigned int evas_touch_point_list_count(Evas *obj); 1126 1127 /** 1128 * @brief This function returns the @c id of nth touch point. 1129 * 1130 * The point which comes from Mouse Event has @c id 0 and The point which comes 1131 * from Multi Event has @c id that is same as Multi Event's device id. 1132 * 1133 * @param[in] n The number of the touched point (0 being the first). 1134 * 1135 * @return id of nth touch point, if the call succeeded, -1 otherwise. 1136 */ 1137 EAPI int evas_touch_point_list_nth_id_get(Evas *obj, unsigned int n); 1138 1139 /** 1140 * @brief This function returns the @c state of nth touch point. 1141 * 1142 * The point's @c state is EVAS_TOUCH_POINT_DOWN when pressed, 1143 * EVAS_TOUCH_POINT_STILL when the point is not moved after pressed, 1144 * EVAS_TOUCH_POINT_MOVE when moved at least once after pressed and 1145 * EVAS_TOUCH_POINT_UP when released. 1146 * 1147 * @param[in] n The number of the touched point (0 being the first). 1148 * 1149 * @return @c state of nth touch point, if the call succeeded, 1150 * EVAS_TOUCH_POINT_CANCEL otherwise. 1151 */ 1152 EAPI Evas_Touch_Point_State evas_touch_point_list_nth_state_get(Evas *obj, unsigned int n); 1153 1154 /** 1155 * @brief This function returns the nth touch point's coordinates. 1156 * 1157 * Touch point's coordinates is updated whenever moving that point on the 1158 * canvas. 1159 * 1160 * @param[in] n The number of the touched point (0 being the first). 1161 * @param[out] x The pointer to a Evas_Coord to be filled in. 1162 * @param[out] y The pointer to a Evas_Coord to be filled in. 1163 */ 1164 EAPI void evas_touch_point_list_nth_xy_get(Evas *eo_e, unsigned int n, Evas_Coord *x, Evas_Coord *y); 1165 1166 /** 1167 * @} 1168 */ 1169 1170 /** 1171 * @addtogroup Evas_Font_Group 1172 * 1173 * @{ 1174 */ 1175 1176 /** 1177 * Free list of font descriptions returned by evas_font_dir_available_list(). 1178 * 1179 * @param e The evas instance that returned such list. 1180 * @param available the list returned by evas_font_dir_available_list(). 1181 */ 1182 EAPI void evas_font_available_list_free(Evas *e, Eina_List *available) EINA_ARG_NONNULL(1); 1183 1184 /** Flags for Font Hinting 1185 */ 1186 typedef enum 1187 { 1188 EVAS_FONT_HINTING_NONE = 0, /**< No font hinting */ 1189 EVAS_FONT_HINTING_AUTO, /**< Automatic font hinting */ 1190 EVAS_FONT_HINTING_BYTECODE /**< Bytecode font hinting */ 1191 } Evas_Font_Hinting_Flags; 1192 1193 /** 1194 * @brief Changes the font hinting for the given evas. 1195 * 1196 * #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE. 1197 * 1198 * @param[in] hinting The used hinting, one of #EVAS_FONT_HINTING_NONE, 1199 * #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE. 1200 */ 1201 EAPI void evas_font_hinting_set(Evas *e, Evas_Font_Hinting_Flags hinting); 1202 1203 /** 1204 * @brief Retrieves the font hinting used by the given evas. 1205 * 1206 * @return The used hinting, one of #EVAS_FONT_HINTING_NONE, 1207 * #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE. 1208 */ 1209 EAPI Evas_Font_Hinting_Flags evas_font_hinting_get(const Evas *e); 1210 1211 /** 1212 * @brief Checks if the font hinting is supported by the given evas. 1213 * 1214 * One of #EVAS_FONT_HINTING_NONE, #EVAS_FONT_HINTING_AUTO, 1215 * #EVAS_FONT_HINTING_BYTECODE. 1216 * 1217 * @param[in] hinting The hinting to use. 1218 * 1219 * @return @c true if it is supported, @c false otherwise. 1220 * 1221 * @ingroup Evas_Canvas 1222 */ 1223 EAPI Eina_Bool evas_font_hinting_can_hint(const Evas *e, Evas_Font_Hinting_Flags hinting) EINA_WARN_UNUSED_RESULT; 1224 1225 /** 1226 * @} 1227 */ 1228 1229 /** 1230 * @ingroup Evas_Object_Group_Basic 1231 * 1232 * @{ 1233 */ 1234 1235 /** 1236 * Increments object reference count to defer its deletion. 1237 * 1238 * @param obj The given Evas object to reference 1239 * 1240 * This increments the reference count of an object, which if greater 1241 * than 0 will defer deletion by evas_object_del() until all 1242 * references are released back (counter back to 0). References cannot 1243 * go below 0 and unreferencing past that will result in the reference 1244 * count being limited to 0. References are limited to <c>2^32 - 1</c> 1245 * for an object. Referencing it more than this will result in it 1246 * being limited to this value. 1247 * 1248 * @see evas_object_unref() 1249 * @see evas_object_del() 1250 * 1251 * @note This is a <b>very simple</b> reference counting mechanism! For 1252 * instance, Evas is not ready to check for pending references on a 1253 * canvas deletion, or things like that. This is useful on scenarios 1254 * where, inside a code block, callbacks exist which would possibly 1255 * delete an object we are operating on afterwards. Then, one would 1256 * evas_object_ref() it on the beginning of the block and 1257 * evas_object_unref() it on the end. It would then be deleted at this 1258 * point, if it should be. 1259 * 1260 * Example: 1261 * @code 1262 * evas_object_ref(obj); 1263 * 1264 * // action here... 1265 * evas_object_smart_callback_call(obj, SIG_SELECTED, NULL); 1266 * // more action here... 1267 * evas_object_unref(obj); 1268 * @endcode 1269 * 1270 * @ingroup Evas_Object_Group_Basic 1271 * @since 1.1 1272 */ 1273 EAPI void evas_object_ref(Evas_Object *obj); 1274 1275 /** 1276 * Decrements object reference count. 1277 * 1278 * @param obj The given Evas object to unreference 1279 * 1280 * This decrements the reference count of an object. If the object has 1281 * had evas_object_del() called on it while references were more than 1282 * 0, it will be deleted at the time this function is called and puts 1283 * the counter back to 0. See evas_object_ref() for more information. 1284 * 1285 * @see evas_object_ref() (for an example) 1286 * @see evas_object_del() 1287 * 1288 * @ingroup Evas_Object_Group_Basic 1289 * @since 1.1 1290 */ 1291 EAPI void evas_object_unref(Evas_Object *obj); 1292 1293 /** 1294 * Get the object reference count. 1295 * 1296 * @param obj The given Evas object to query 1297 * 1298 * This gets the reference count for an object (normally 0 until it is 1299 * referenced). Values of 1 or greater mean that someone is holding a 1300 * reference to this object that needs to be unreffed before it can be 1301 * deleted. 1302 * 1303 * @see evas_object_ref() 1304 * @see evas_object_unref() 1305 * @see evas_object_del() 1306 * 1307 * @ingroup Evas_Object_Group_Basic 1308 * @since 1.2 1309 */ 1310 EAPI int evas_object_ref_get(const Evas_Object *obj); 1311 1312 /** 1313 * Marks the given Evas object for deletion (when Evas will free its 1314 * memory). 1315 * 1316 * @param obj The given Evas object. 1317 * 1318 * This call will mark @p obj for deletion, which will take place 1319 * whenever it has no more references to it (see evas_object_ref() and 1320 * evas_object_unref()). 1321 * 1322 * At actual deletion time, which may or may not be just after this 1323 * call, ::EVAS_CALLBACK_DEL and ::EVAS_CALLBACK_FREE callbacks will 1324 * be called. If the object currently had the focus, its 1325 * ::EVAS_CALLBACK_FOCUS_OUT callback will also be called. 1326 * 1327 * @see evas_object_ref() 1328 * @see evas_object_unref() 1329 * 1330 * @ingroup Evas_Object_Group_Basic 1331 */ 1332 EAPI void evas_object_del(Evas_Object *obj) EINA_ARG_NONNULL(1); 1333 1334 /** 1335 * @brief Retrieves the type of the given Evas object. 1336 * 1337 * For Evas' builtin types, the return strings will be one of "rectangle", 1338 * "line", "polygon", "text", "textblock" or "image". 1339 * 1340 * For Evas smart objects (see @ref Evas_Smart_Group), the name of the smart 1341 * class itself is returned on this call. For the built-in smart objects, these 1342 * names are "EvasObjectSmartClipped" for the clipped smart object, 1343 * "Evas_Object_Box" for the box object and "Evas_Object_Table for the table 1344 * object. 1345 * 1346 * @return The type of the object. 1347 * 1348 * @ingroup Evas_Object_Group_Basic 1349 * @since 1.18 1350 */ 1351 EAPI const char *evas_object_type_get(const Evas_Object *obj); 1352 1353 /** 1354 * @brief Sets the name of the given Evas object to the given name. 1355 * 1356 * There might be occasions where one would like to name his/her objects. 1357 * 1358 * @param[in] name The given name. 1359 * 1360 * @ingroup Evas_Object_Group_Basic 1361 */ 1362 EAPI void evas_object_name_set(Evas_Object *obj, const char *name); 1363 1364 /** 1365 * @brief Retrieves the name of the given Evas object. 1366 * 1367 * Return: The name of the object or @c null, if no name has been given to it. 1368 * 1369 * @return The given name. 1370 * 1371 * @ingroup Evas_Object_Group_Basic 1372 */ 1373 EAPI const char *evas_object_name_get(const Evas_Object *obj); 1374 1375 /** 1376 * @brief Retrieves the object from children of the given object with the given 1377 * name. 1378 * 1379 * This looks for the evas object given a name by @ref evas_object_name_set, 1380 * but it ONLY looks at the children of the object *p obj, and will only 1381 * recurse into those children if @c recurse is greater than 0. If the name is 1382 * not unique within immediate children (or the whole child tree) then it is 1383 * not defined which child object will be returned. If @c recurse is set to -1 1384 * then it will recurse without limit. 1385 * 1386 * @param[in] name The given name. 1387 * @param[in] recurse Set to the number of child levels to recurse (0 == don't 1388 * recurse, 1 == only look at the children of @c obj or their immediate 1389 * children, but no further etc.). 1390 * 1391 * @return The Evas object with the given name on success, Otherwise @c null. 1392 * 1393 * @since 1.2 1394 * 1395 * @ingroup Evas_Object_Group_Basic 1396 */ 1397 EAPI Evas_Object *evas_object_name_child_find(const Evas_Object *obj, const char *name, int recurse) EINA_WARN_UNUSED_RESULT; 1398 1399 /** 1400 * Retrieves the position and (rectangular) size of the given Evas 1401 * object. 1402 * 1403 * @param obj The given Evas object. 1404 * @param x Pointer to an integer in which to store the X coordinate 1405 * of the object. 1406 * @param y Pointer to an integer in which to store the Y coordinate 1407 * of the object. 1408 * @param w Pointer to an integer in which to store the width of the 1409 * object. 1410 * @param h Pointer to an integer in which to store the height of the 1411 * object. 1412 * 1413 * The position, naturally, will be relative to the top left corner of 1414 * the canvas' viewport. 1415 * 1416 * @note Use @c NULL pointers on the geometry components you're not 1417 * interested in: they'll be ignored by the function. 1418 * 1419 * Example: 1420 * @dontinclude evas-events.c 1421 * @skip int w, h, cw, ch; 1422 * @until return 1423 * 1424 * See the full @ref Example_Evas_Events "example". 1425 * 1426 * @ingroup Evas_Object_Group_Basic 1427 */ 1428 EAPI void evas_object_geometry_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1); 1429 1430 /** 1431 * Set the position and (rectangular) size of the given Evas object. 1432 * 1433 * @param obj The given Evas object. 1434 * @param x X position to move the object to, in canvas units. 1435 * @param y Y position to move the object to, in canvas units. 1436 * @param w The new width of the Evas object. 1437 * @param h The new height of the Evas object. 1438 * 1439 * The position, naturally, will be relative to the top left corner of 1440 * the canvas' viewport. 1441 * 1442 * If the object get moved, the object's ::EVAS_CALLBACK_MOVE callback 1443 * will be called. 1444 * 1445 * If the object get resized, the object's ::EVAS_CALLBACK_RESIZE callback 1446 * will be called. 1447 * 1448 * @see evas_object_move() 1449 * @see evas_object_resize() 1450 * @see evas_object_geometry_get 1451 * 1452 * @since 1.8 1453 * @ingroup Evas_Object_Group_Basic 1454 */ 1455 EAPI void evas_object_geometry_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1); 1456 1457 1458 /** 1459 * Makes the given Evas object visible. 1460 * 1461 * @param obj The given Evas object. 1462 * 1463 * Besides becoming visible, the object's ::EVAS_CALLBACK_SHOW 1464 * callback will be called. 1465 * 1466 * @see evas_object_hide() for more on object visibility. 1467 * @see evas_object_visible_get() 1468 * 1469 * @ingroup Evas_Object_Group_Basic 1470 */ 1471 EAPI void evas_object_show(Evas_Object *obj) EINA_ARG_NONNULL(1); 1472 1473 /** 1474 * Makes the given Evas object invisible. 1475 * 1476 * @param obj The given Evas object. 1477 * 1478 * Hidden objects, besides not being shown at all in your canvas, 1479 * won't be checked for changes on the canvas rendering 1480 * process. Furthermore, they will not catch input events. Thus, they 1481 * are much ligher (in processing needs) than an object that is 1482 * invisible due to indirect causes, such as being clipped or out of 1483 * the canvas' viewport. 1484 * 1485 * Besides becoming hidden, @p obj object's ::EVAS_CALLBACK_SHOW 1486 * callback will be called. 1487 * 1488 * @note All objects are created in the hidden state! If you want them 1489 * shown, use evas_object_show() after their creation. 1490 * 1491 * @see evas_object_show() 1492 * @see evas_object_visible_get() 1493 * 1494 * Example: 1495 * @dontinclude evas-object-manipulation.c 1496 * @skip if (evas_object_visible_get(d.clipper)) 1497 * @until return 1498 * 1499 * See the full @ref Example_Evas_Object_Manipulation "example". 1500 * 1501 * @ingroup Evas_Object_Group_Basic 1502 */ 1503 EAPI void evas_object_hide(Evas_Object *obj) EINA_ARG_NONNULL(1); 1504 1505 /** 1506 * 1507 * Sets the general/main color of the given Evas object to the given 1508 * one. 1509 * 1510 * @see evas_object_color_get() (for an example) 1511 * @note These color values are expected to be premultiplied by @p a. 1512 * 1513 * @ingroup Evas_Object_Group_Basic 1514 * 1515 * @param[in] r The red component of the given color. 1516 * @param[in] g The green component of the given color. 1517 * @param[in] b The blue component of the given color. 1518 * @param[in] a The alpha component of the given color. 1519 */ 1520 EAPI void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a); 1521 1522 /** 1523 * 1524 * Retrieves the general/main color of the given Evas object. 1525 * 1526 * Retrieves the “main” color's RGB component (and alpha channel) 1527 * values, <b>which range from 0 to 255</b>. For the alpha channel, 1528 * which defines the object's transparency level, 0 means totally 1529 * transparent, while 255 means opaque. These color values are 1530 * premultiplied by the alpha value. 1531 * 1532 * Usually you’ll use this attribute for text and rectangle objects, 1533 * where the “main” color is their unique one. If set for objects 1534 * which themselves have colors, like the images one, those colors get 1535 * modulated by this one. 1536 * 1537 * @note All newly created Evas rectangles get the default color 1538 * values of <code>255 255 255 255</code> (opaque white). 1539 * 1540 * @note Use @c NULL pointers on the components you're not interested 1541 * in: they'll be ignored by the function. 1542 * 1543 * Example: 1544 * @dontinclude evas-object-manipulation.c 1545 * @skip int alpha, r, g, b; 1546 * @until return 1547 * 1548 * See the full @ref Example_Evas_Object_Manipulation "example". 1549 * 1550 * @ingroup Evas_Object_Group_Basic 1551 * 1552 * @param[out] r The red component of the given color. 1553 * @param[out] g The green component of the given color. 1554 * @param[out] b The blue component of the given color. 1555 * @param[out] a The alpha component of the given color. 1556 */ 1557 EAPI void evas_object_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a); 1558 1559 /** 1560 * @} 1561 */ 1562 1563 /** 1564 * 1565 * Move the given Evas object to the given location inside its canvas' viewport. 1566 * 1567 * @param[in] x in 1568 * @param[in] y in 1569 * @ingroup Evas_Object_Group 1570 */ 1571 EAPI void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); 1572 1573 /** 1574 * 1575 * Changes the size of the given Evas object. 1576 * 1577 * @param[in] w in 1578 * @param[in] h in 1579 * @ingroup Evas_Object_Group 1580 */ 1581 EAPI void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); 1582 1583 /** 1584 * 1585 * Retrieves whether or not the given Evas object is visible. 1586 * 1587 * @ingroup Evas_Object_Group 1588 */ 1589 EAPI Eina_Bool evas_object_visible_get(const Evas_Object *obj); 1590 1591 /** 1592 * @brief Sets the hints for an object's maximum size. 1593 * 1594 * This is not a size enforcement in any way, it's just a hint that should be 1595 * used whenever appropriate. 1596 * 1597 * Values -1 will be treated as unset hint components, when queried by 1598 * managers. 1599 * 1600 * @note Smart objects (such as elementary) can have their own size hint 1601 * policy. So calling this API may or may not affect the size of smart objects. 1602 * 1603 * @param[in] w Integer to use as the maximum width hint. 1604 * @param[in] h Integer to use as the maximum height hint. 1605 * 1606 * @ingroup Evas_Object_Group 1607 */ 1608 EAPI void evas_object_size_hint_max_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h); 1609 1610 /** 1611 * @brief Retrieves the hints for an object's maximum size. 1612 * 1613 * These are hints on the maximum sizes @c obj should have. This is not a size 1614 * enforcement in any way, it's just a hint that should be used whenever 1615 * appropriate. 1616 * 1617 * @note Use @c null pointers on the hint components you're not interested in: 1618 * they'll be ignored by the function. 1619 * 1620 * @param[out] w Integer to use as the maximum width hint. 1621 * @param[out] h Integer to use as the maximum height hint. 1622 * 1623 * @ingroup Evas_Object_Group 1624 */ 1625 EAPI void evas_object_size_hint_max_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); 1626 1627 /** 1628 * @brief Sets the hints for an object's optimum size. 1629 * 1630 * This is not a size enforcement in any way, it's just a hint that should be 1631 * used whenever appropriate. 1632 * 1633 * Values 0 will be treated as unset hint components, when queried by managers. 1634 * 1635 * @note Smart objects(such as elementary) can have their own size hint policy. 1636 * So calling this API may or may not affect the size of smart objects. 1637 * 1638 * @param[in] w Integer to use as the preferred width hint. 1639 * @param[in] h Integer to use as the preferred height hint. 1640 * 1641 * @ingroup Evas_Object_Group 1642 */ 1643 EAPI void evas_object_size_hint_request_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h); 1644 1645 /** 1646 * @brief Retrieves the hints for an object's optimum size. 1647 * 1648 * These are hints on the optimum sizes @c obj should have. This is not a size 1649 * enforcement in any way, it's just a hint that should be used whenever 1650 * appropriate. 1651 * 1652 * @note Use @c null pointers on the hint components you're not interested in: 1653 * they'll be ignored by the function. 1654 * 1655 * @param[out] w Integer to use as the preferred width hint. 1656 * @param[out] h Integer to use as the preferred height hint. 1657 * 1658 * @ingroup Evas_Object_Group 1659 */ 1660 EAPI void evas_object_size_hint_request_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); 1661 1662 /** 1663 * @brief Sets the hints for an object's minimum size. 1664 * 1665 * This is not a size enforcement in any way, it's just a hint that should be 1666 * used whenever appropriate. 1667 * 1668 * Values 0 will be treated as unset hint components, when queried by managers. 1669 * 1670 * @note Smart objects(such as elementary) can have their own size hint policy. 1671 * So calling this API may or may not affect the size of smart objects. 1672 * 1673 * @param[in] w Integer to use as the minimum width hint. 1674 * @param[in] h Integer to use as the minimum height hint. 1675 * 1676 * @ingroup Evas_Object_Group 1677 */ 1678 EAPI void evas_object_size_hint_min_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h); 1679 1680 /** 1681 * @brief Disable/cease clipping on a clipped @c obj object. 1682 * 1683 * This function disables clipping for the object @c obj, if it was already 1684 * clipped, i.e., its visibility and color get detached from the previous 1685 * clipper. If it wasn't, this has no effect. The object @c obj must be a valid 1686 * Evas_Object. 1687 * 1688 * See also @ref evas_object_clip_set, @ref evas_object_clipees_get and 1689 * @ref evas_object_clip_get. 1690 * 1691 * @ingroup Evas_Object_Group 1692 */ 1693 EAPI void evas_object_clip_unset(Evas_Object *obj); 1694 1695 /** 1696 * @brief Retrieves the hints for an object's minimum size. 1697 * 1698 * These are hints on the minimum sizes @c obj should have. This is not a size 1699 * enforcement in any way, it's just a hint that should be used whenever 1700 * appropriate. 1701 * 1702 * @note Use @c null pointers on the hint components you're not interested in: 1703 * they'll be ignored by the function. 1704 * 1705 * @param[out] w Integer to use as the minimum width hint. 1706 * @param[out] h Integer to use as the minimum height hint. 1707 * 1708 * @ingroup Evas_Object_Group 1709 */ 1710 EAPI void evas_object_size_hint_min_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); 1711 1712 /** 1713 * @brief Sets the hints for an object's padding space. 1714 * 1715 * This is not a size enforcement in any way, it's just a hint that should be 1716 * used whenever appropriate. 1717 * 1718 * @note Smart objects(such as elementary) can have their own size hint policy. 1719 * So calling this API may or may not affect the size of smart objects. 1720 * 1721 * @param[in] l Integer to specify left padding. 1722 * @param[in] r Integer to specify right padding. 1723 * @param[in] t Integer to specify top padding. 1724 * @param[in] b Integer to specify bottom padding. 1725 * 1726 * @ingroup Evas_Object_Group 1727 */ 1728 EAPI void evas_object_size_hint_padding_set(Evas_Object *obj, Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b); 1729 1730 /** 1731 * @brief Retrieves the hints for an object's padding space. 1732 * 1733 * Padding is extra space an object takes on each of its delimiting rectangle 1734 * sides, in canvas units. 1735 * 1736 * This is not a size enforcement in any way, it's just a hint that should be 1737 * used whenever appropriate. 1738 * 1739 * @note Use @c null pointers on the hint components you're not interested in: 1740 * they'll be ignored by the function. 1741 * 1742 * @param[out] l Integer to specify left padding. 1743 * @param[out] r Integer to specify right padding. 1744 * @param[out] t Integer to specify top padding. 1745 * @param[out] b Integer to specify bottom padding. 1746 * 1747 * @ingroup Evas_Object_Group 1748 */ 1749 EAPI void evas_object_size_hint_padding_get(const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b); 1750 1751 /** 1752 * @brief Sets the hints for an object's weight. 1753 * 1754 * This is not a size enforcement in any way, it's just a hint that should be 1755 * used whenever appropriate. 1756 * 1757 * This is a hint on how a container object should resize a given child within 1758 * its area. Containers may adhere to the simpler logic of just expanding the 1759 * child object's dimensions to fit its own (see the #EVAS_HINT_EXPAND helper 1760 * weight macro) or the complete one of taking each child's weight hint as real 1761 * weights to how much of its size to allocate for them in each axis. A 1762 * container is supposed to, after normalizing the weights of its children 1763 * (with weight hints), distribute the space it has to layout them by those 1764 * factors -- most weighted children get larger in this process than the least 1765 * ones. 1766 * 1767 * @note Default weight hint values are 0.0, for both axis. 1768 * 1769 * @param[in] x Non-negative double value to use as horizontal weight hint. 1770 * @param[in] y Non-negative double value to use as vertical weight hint. 1771 * 1772 * @ingroup Evas_Object_Group 1773 */ 1774 EAPI void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y); 1775 1776 /** 1777 * @brief Retrieves the hints for an object's weight. 1778 * 1779 * Accepted values are zero or positive values. Some users might use this hint 1780 * as a boolean, but some might consider it as a proportion, see documentation 1781 * of possible users, which in Evas are the @ref Evas_Object_Box "box" and @ref 1782 * Evas_Object_Table_Group "table" smart objects. 1783 * 1784 * This is not a size enforcement in any way, it's just a hint that should be 1785 * used whenever appropriate. 1786 * 1787 * @note Use @c null pointers on the hint components you're not interested in: 1788 * they'll be ignored by the function. 1789 * 1790 * @note If @c obj is invalid, then the hint components will be set with 0.0. 1791 * 1792 * @param[out] x Non-negative double value to use as horizontal weight hint. 1793 * @param[out] y Non-negative double value to use as vertical weight hint. 1794 * 1795 * @ingroup Evas_Object_Group 1796 */ 1797 EAPI void evas_object_size_hint_weight_get(const Evas_Object *obj, double *x, double *y); 1798 1799 /** 1800 * @brief Sets the hints for an object's alignment. 1801 * 1802 * These are hints on how to align an object inside the boundaries of a 1803 * container/manager. Accepted values are in the 0.0 to 1.0 range, with the 1804 * special value #EVAS_HINT_FILL used to specify "justify" or "fill" by some 1805 * users. In this case, maximum size hints should be enforced with higher 1806 * priority, if they are set. Also, any padding hint set on objects should add 1807 * up to the alignment space on the final scene composition. 1808 * 1809 * See documentation of possible users: in Evas, they are the @ref 1810 * Evas_Object_Box "box" and @ref Evas_Object_Table_Group "table" smart objects. 1811 * 1812 * For the horizontal component, 0.0 means to the left, 1.0 means to the right. 1813 * Analogously, for the vertical component, 0.0 to the top, 1.0 means to the 1814 * bottom. 1815 * 1816 * This is not a size enforcement in any way, it's just a hint that should be 1817 * used whenever appropriate. 1818 * 1819 * @note Default alignment hint values are 0.5, for both axis. 1820 * 1821 * @param[in] x Double, ranging from 0.0 to 1.0 or with the special value 1822 * #EVAS_HINT_FILL, to use as horizontal alignment hint. 1823 * @param[in] y Double, ranging from 0.0 to 1.0 or with the special value 1824 * #EVAS_HINT_FILL, to use as vertical alignment hint. 1825 * 1826 * @ingroup Evas_Object_Group 1827 */ 1828 EAPI void evas_object_size_hint_align_set(Evas_Object *obj, double x, double y); 1829 1830 /** 1831 * @brief Retrieves the hints for on object's alignment. 1832 * 1833 * This is not a size enforcement in any way, it's just a hint that should be 1834 * used whenever appropriate. 1835 * 1836 * @note Use @c null pointers on the hint components you're not interested in: 1837 * they'll be ignored by the function. 1838 * 1839 * @note If @c obj is invalid, then the hint components will be set with 0.5 1840 * 1841 * @param[out] x Double, ranging from 0.0 to 1.0 or with the special value 1842 * #EVAS_HINT_FILL, to use as horizontal alignment hint. 1843 * @param[out] y Double, ranging from 0.0 to 1.0 or with the special value 1844 * #EVAS_HINT_FILL, to use as vertical alignment hint. 1845 * 1846 * @ingroup Evas_Object_Group 1847 */ 1848 EAPI void evas_object_size_hint_align_get(const Evas_Object *obj, double *x, double *y); 1849 1850 /** 1851 * @brief Sets the hints for an object's aspect ratio. 1852 * 1853 * This is not a size enforcement in any way, it's just a hint that should be 1854 * used whenever appropriate. 1855 * 1856 * If any of the given aspect ratio terms are 0, the object's container will 1857 * ignore the aspect and scale @c obj to occupy the whole available area, for 1858 * any given policy. 1859 * 1860 * @note Smart objects(such as elementary) can have their own size hint policy. 1861 * So calling this API may or may not affect the size of smart objects. 1862 * 1863 * @param[in] aspect The policy/type of aspect ratio to apply to @c obj. 1864 * @param[in] w Integer to use as aspect width ratio term. 1865 * @param[in] h Integer to use as aspect height ratio term. 1866 * 1867 * @ingroup Evas_Object_Group 1868 */ 1869 EAPI void evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h); 1870 1871 /** 1872 * @brief Retrieves the hints for an object's aspect ratio. 1873 * 1874 * The different aspect ratio policies are documented in the 1875 * #Evas_Aspect_Control type. A container respecting these size hints would 1876 * resize its children accordingly to those policies. 1877 * 1878 * For any policy, if any of the given aspect ratio terms are 0, the object's 1879 * container should ignore the aspect and scale @c obj to occupy the whole 1880 * available area. If they are both positive integers, that proportion will be 1881 * respected, under each scaling policy. 1882 * 1883 * @note Use @c null pointers on the hint components you're not interested in: 1884 * they'll be ignored by the function. 1885 * 1886 * @param[out] aspect The policy/type of aspect ratio to apply to @c obj. 1887 * @param[out] w Integer to use as aspect width ratio term. 1888 * @param[out] h Integer to use as aspect height ratio term. 1889 * 1890 * @ingroup Evas_Object_Group 1891 */ 1892 EAPI void evas_object_size_hint_aspect_get(const Evas_Object *obj, Evas_Aspect_Control *aspect, Evas_Coord *w, Evas_Coord *h); 1893 1894 /** Display mode size hint. */ 1895 typedef enum 1896 { 1897 EFL_GFX_HINT_MODE_NONE = 0, /**< Default mode */ 1898 EFL_GFX_HINT_MODE_COMPRESS = 1, /**< Use this mode when you want to give 1899 * compress display mode hint to an object */ 1900 EFL_GFX_HINT_MODE_EXPAND = 2, /**< Use this mode when you want to give 1901 * expand display mode hint to an object */ 1902 EFL_GFX_HINT_MODE_DONT_CHANGE = 3 /**< Use this mode when an object 1903 * should not change its display mode */ 1904 } Efl_Gfx_Hint_Mode; 1905 1906 typedef Efl_Gfx_Hint_Mode Evas_Display_Mode; 1907 1908 #define EVAS_DISPLAY_MODE_NONE EFL_GFX_HINT_MODE_NONE 1909 #define EVAS_DISPLAY_MODE_COMPRESS EFL_GFX_HINT_MODE_COMPRESS 1910 #define EVAS_DISPLAY_MODE_EXPAND EFL_GFX_HINT_MODE_EXPAND 1911 #define EVAS_DISPLAY_MODE_DONT_CHANGE EFL_GFX_HINT_MODE_DONT_CHANGE 1912 1913 /** 1914 * @brief Sets the hints for an object's disply mode, 1915 * 1916 * This is not a size enforcement in any way, it's just a hint that can be used 1917 * whenever appropriate. 1918 * 1919 * @param[in] dispmode Display mode hint. 1920 * 1921 * @ingroup Evas_Object_Group 1922 */ 1923 EAPI void evas_object_size_hint_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode); 1924 1925 /** 1926 * @brief Retrieves the hints for an object's display mode 1927 * 1928 * These are hints on the display mode @c obj. This is not a size enforcement 1929 * in any way, it's just a hint that can be used whenever appropriate. This 1930 * mode can be used object's display mode like compress or expand. 1931 * 1932 * @return Display mode hint. 1933 * 1934 * @ingroup Evas_Object_Group 1935 */ 1936 EAPI Evas_Display_Mode evas_object_size_hint_display_mode_get(const Evas_Object *obj); 1937 1938 /** 1939 * 1940 * Sets the layer of its canvas that the given object will be part of. 1941 * 1942 * If you don't use this function, you'll be dealing with an @b unique 1943 * layer of objects, the default one. Additional layers are handy when 1944 * you don't want a set of objects to interfere with another set with 1945 * regard to @b stacking. Two layers are completely disjoint in that 1946 * matter. 1947 * 1948 * This is a low-level function, which you'd be using when something 1949 * should be always on top, for example. 1950 * 1951 * @warning Be careful, it doesn't make sense to change the layer of 1952 * smart objects' children. Smart objects have a layer of their own, 1953 * which should contain all their children objects. 1954 * 1955 * @see evas_object_layer_get() 1956 * 1957 * @param[in] l The number of the layer to place the object on. 1958 Must be between #EVAS_LAYER_MIN and #EVAS_LAYER_MAX. 1959 * @ingroup Evas_Object_Group 1960 */ 1961 EAPI void evas_object_layer_set(Evas_Object *obj, short l); 1962 1963 /** 1964 * 1965 * Retrieves the layer of its canvas that the given object is part of. 1966 * 1967 * @return Number of its layer 1968 * 1969 * @see evas_object_layer_set() 1970 * 1971 * @ingroup Evas_Object_Group 1972 */ 1973 EAPI short evas_object_layer_get(const Evas_Object *obj); 1974 1975 /** 1976 * 1977 * Get the Evas object stacked right below @p obj 1978 * 1979 * @return the #Evas_Object directly below @p obj, if any, or @c NULL, 1980 * if none 1981 * 1982 * This function will traverse layers in its search, if there are 1983 * objects on layers below the one @p obj is placed at. 1984 * 1985 * @see evas_object_layer_get() 1986 * @see evas_object_layer_set() 1987 * @see evas_object_below_get() 1988 * 1989 * @ingroup Evas_Object_Group 1990 */ 1991 EAPI Evas_Object *evas_object_below_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 1992 1993 /** 1994 * 1995 * Get the Evas object stacked right above @p obj 1996 * 1997 * @return the #Evas_Object directly above @p obj, if any, or @c NULL, 1998 * if none 1999 * 2000 * This function will traverse layers in its search, if there are 2001 * objects on layers above the one @p obj is placed at. 2002 * 2003 * @see evas_object_layer_get() 2004 * @see evas_object_layer_set() 2005 * @see evas_object_below_get() 2006 * 2007 * @ingroup Evas_Object_Group 2008 */ 2009 EAPI Evas_Object *evas_object_above_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 2010 2011 /** 2012 * 2013 * Stack @p obj immediately below @p below 2014 * 2015 * Objects, in a given canvas, are stacked in the order they get added 2016 * to it. This means that, if they overlap, the highest ones will 2017 * cover the lowest ones, in that order. This function is a way to 2018 * change the stacking order for the objects. 2019 * 2020 * This function is intended to be used with <b>objects belonging to 2021 * the same layer</b> in a given canvas, otherwise it will fail (and 2022 * accomplish nothing). 2023 * 2024 * If you have smart objects on your canvas and @p obj is a member of 2025 * one of them, then @p below must also be a member of the same 2026 * smart object. 2027 * 2028 * Similarly, if @p obj is not a member of a smart object, @p below 2029 * must not be either. 2030 * 2031 * @see evas_object_layer_get() 2032 * @see evas_object_layer_set() 2033 * @see evas_object_stack_below() 2034 * 2035 * 2036 * @param[in] below the object below which to stack 2037 * @ingroup Evas_Object_Group 2038 */ 2039 EAPI void evas_object_stack_below(Evas_Object *obj, Evas_Object *below) EINA_ARG_NONNULL(2); 2040 2041 /** 2042 * 2043 * Raise @p obj to the top of its layer. 2044 * 2045 * @p obj will, then, be the highest one in the layer it belongs 2046 * to. Object on other layers won't get touched. 2047 * 2048 * @see evas_object_stack_above() 2049 * @see evas_object_stack_below() 2050 * @see evas_object_lower() 2051 * 2052 * @ingroup Evas_Object_Group 2053 * 2054 */ 2055 EAPI void evas_object_raise(Evas_Object *obj); 2056 2057 /** 2058 * 2059 * Stack @p obj immediately above @p above 2060 * 2061 * Objects, in a given canvas, are stacked in the order they get added 2062 * to it. This means that, if they overlap, the highest ones will 2063 * cover the lowest ones, in that order. This function is a way to 2064 * change the stacking order for the objects. 2065 * 2066 * This function is intended to be used with <b>objects belonging to 2067 * the same layer</b> in a given canvas, otherwise it will fail (and 2068 * accomplish nothing). 2069 * 2070 * If you have smart objects on your canvas and @p obj is a member of 2071 * one of them, then @p above must also be a member of the same 2072 * smart object. 2073 * 2074 * Similarly, if @p obj is not a member of a smart object, @p above 2075 * must not be either. 2076 * 2077 * @see evas_object_layer_get() 2078 * @see evas_object_layer_set() 2079 * @see evas_object_stack_below() 2080 * 2081 * 2082 * @param[in] above the object above which to stack 2083 * @ingroup Evas_Object_Group 2084 */ 2085 EAPI void evas_object_stack_above(Evas_Object *obj, Evas_Object *above) EINA_ARG_NONNULL(2); 2086 2087 /** 2088 * 2089 * Lower @p obj to the bottom of its layer. 2090 * 2091 * @p obj will, then, be the lowest one in the layer it belongs 2092 * to. Objects on other layers won't get touched. 2093 * 2094 * @see evas_object_stack_above() 2095 * @see evas_object_stack_below() 2096 * @see evas_object_raise() 2097 * 2098 * @ingroup Evas_Object_Group 2099 * 2100 */ 2101 EAPI void evas_object_lower(Evas_Object *obj); 2102 2103 /** 2104 * @brief Set a hint flag on the given Evas object that it's used as a "static 2105 * clipper". 2106 * 2107 * This is a hint to Evas that this object is used as a big static clipper and 2108 * shouldn't be moved with children and otherwise considered specially. The 2109 * default value for new objects is @c false. 2110 * 2111 * @param[in] is_static_clip @c true if it's to be used as a static clipper, 2112 * @c false otherwise. 2113 * 2114 * @ingroup Evas_Object_Group 2115 */ 2116 EAPI void evas_object_static_clip_set(Evas_Object *obj, Eina_Bool is_static_clip); 2117 2118 /** 2119 * @brief Return a list of objects currently clipped by @c obj. 2120 * 2121 * This returns the internal list handle that contains all objects clipped by 2122 * the object @c obj. If none are clipped by it, the call returns @c null. This 2123 * list is only valid until the clip list is changed and should be fetched 2124 * again with another call to this function if any objects being clipped by 2125 * this object are unclipped, clipped by a new object, deleted or get the 2126 * clipper deleted. These operations will invalidate the list returned, so it 2127 * should not be used anymore after that point. Any use of the list after this 2128 * may have undefined results, possibly leading to crashes. The object @c obj 2129 * must be a valid Evas_Object. 2130 * 2131 * See also @ref evas_object_clip_set, @ref evas_object_clip_unset and 2132 * @ref evas_object_clip_get. 2133 * 2134 * @return A list of objects being clipped by @c obj. 2135 * 2136 * @ingroup Evas_Object_Group 2137 */ 2138 EAPI const Eina_List *evas_object_clipees_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 2139 2140 /** 2141 * @brief Test if any object is clipped by @c obj. 2142 * 2143 * @param[in] obj The object. 2144 * 2145 * @return @c true if any object is clipped by @c obj, @c false otherwise 2146 * 2147 * @since 1.8 2148 * 2149 * @ingroup Evas_Object_Group 2150 */ 2151 EAPI Eina_Bool evas_object_clipees_has(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 2152 2153 /** How the object should be rendered to output. 2154 * 2155 * @ingroup Evas_Object_Group 2156 */ 2157 typedef enum 2158 { 2159 EVAS_RENDER_BLEND = 0, /**< Default render operation: d = d*(1-sa) + s. The 2160 * object will be merged onto the bottom objects using 2161 * simple alpha compositing (a over b). */ 2162 EVAS_RENDER_BLEND_REL = 1, /**< DEPRECATED. d = d*(1 - sa) + s*da */ 2163 EVAS_RENDER_COPY = 2, /**< Copy mode, d = s. The object's pixels will replace 2164 * everything that was below, effectively hiding them. 2165 */ 2166 EVAS_RENDER_COPY_REL = 3, /**< DEPRECATED. d = s*da */ 2167 EVAS_RENDER_ADD = 4, /**< DEPRECATED. d = d + s */ 2168 EVAS_RENDER_ADD_REL = 5, /**< DEPRECATED. d = d + s*da */ 2169 EVAS_RENDER_SUB = 6, /**< DEPRECATED. d = d - s */ 2170 EVAS_RENDER_SUB_REL = 7, /**< DEPRECATED. d = d - s*da */ 2171 EVAS_RENDER_TINT = 8, /**< DEPRECATED. d = d*s + d*(1 - sa) + s*(1 - da) */ 2172 EVAS_RENDER_TINT_REL = 9, /**< DEPRECATED. d = d*(1 - sa + s) */ 2173 EVAS_RENDER_MASK = 10, /**< DEPRECATED. d = d*sa. For masking support, please 2174 * use Efl.Canvas.Object.clip_set or EDC "clip_to" instead. 2175 */ 2176 EVAS_RENDER_MUL = 11 /**< DEPRECATED. d = d*s */ 2177 } Evas_Render_Op; 2178 2179 /** 2180 * @brief Sets the render mode to be used for compositing the Evas object. 2181 * 2182 * Note that only copy and blend modes are actually supported: - 2183 * @ref Evas_Render_Op.EVAS_RENDER_BLEND means the object will be merged on top 2184 * of objects below it using simple alpha compositing. - 2185 * @ref Evas_Render_Op.EVAS_RENDER_COPY means this object's pixels will replace 2186 * everything that is below, making this object opaque. 2187 * 2188 * Please do not assume that @ref Evas_Render_Op.EVAS_RENDER_COPY mode can be 2189 * used to "poke" holes in a window (to see through it), as only the compositor 2190 * can ensure that. Copy mode should only be used with otherwise opaque 2191 * widgets, or inside non-window surfaces (eg. a transparent background inside 2192 * an Ecore.Evas.Buffer). 2193 * 2194 * @param[in] render_op One of the Evas_Render_Op values. Only blend (default) 2195 * and copy modes are supported. 2196 * 2197 * @ingroup Evas_Object_Group 2198 */ 2199 EAPI void evas_object_render_op_set(Evas_Object *obj, Evas_Render_Op render_op); 2200 2201 /** 2202 * @brief Retrieves the current value of the operation used for rendering the 2203 * Evas object. 2204 * 2205 * @return One of the Evas_Render_Op values. Only blend (default) and copy 2206 * modes are supported. 2207 * 2208 * @ingroup Evas_Object_Group 2209 */ 2210 EAPI Evas_Render_Op evas_object_render_op_get(const Evas_Object *obj); 2211 2212 /** 2213 * @brief Get the "static clipper" hint flag for a given Evas object. 2214 * 2215 * @return @c true if it's to be used as a static clipper, @c false otherwise. 2216 * 2217 * @ingroup Evas_Object_Group 2218 */ 2219 EAPI Eina_Bool evas_object_static_clip_get(const Evas_Object *obj); 2220 2221 /** 2222 * @brief Sets the scaling factor for an Evas object. Does not affect all 2223 * objects. 2224 * 2225 * This will multiply the object's dimension by the given factor, thus altering 2226 * its geometry (width and height). Useful when you want scalable UI elements, 2227 * possibly at run time. 2228 * 2229 * @note Only text and textblock objects have scaling change handlers. Other 2230 * objects won't change visually on this call. 2231 * 2232 * @param[in] obj The object. 2233 * @param[in] scale The scaling factor. 1.0 means no scaling, default size. 2234 * 2235 * @ingroup Evas_Object_Group 2236 */ 2237 EAPI void evas_object_scale_set(Evas_Object *obj, double scale); 2238 2239 /** 2240 * @brief Retrieves the scaling factor for the given Evas object. 2241 * 2242 * @param[in] obj The object. 2243 * 2244 * @return The scaling factor. 1.0 means no scaling, default size. 2245 * 2246 * @ingroup Evas_Object_Group 2247 */ 2248 EAPI double evas_object_scale_get(const Evas_Object *obj); 2249 2250 /** 2251 * @brief Returns whether the mouse pointer is logically inside the object. 2252 * 2253 * @param[in] dev The pointer device. 2254 * 2255 * @return @c true if the pointer is inside, @c false otherwise. 2256 * 2257 * @since 1.20 2258 * 2259 * @ingroup Evas_Object_Group 2260 */ 2261 EAPI Eina_Bool evas_object_pointer_inside_by_device_get(const Evas_Object *obj, Efl_Input_Device * dev); 2262 2263 /** 2264 * @brief Returns whether the default mouse pointer is logically inside the 2265 * object. 2266 * 2267 * When this function is called it will return a value of either @c false or 2268 * @c true, depending on if event_feed_mouse_in or event_feed_mouse_out have 2269 * been called to feed in a mouse enter event into the object. 2270 * 2271 * A return value of @c true indicates the mouse is logically inside the 2272 * object, and @c false implies it is logically outside the object. 2273 * 2274 * If @c e is not a valid object, the return value is undefined. 2275 * 2276 * @return @c true if the mouse pointer is inside the object, @c false 2277 * otherwise 2278 * 2279 * @ingroup Evas_Object_Group 2280 */ 2281 EAPI Eina_Bool evas_object_pointer_inside_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 2282 2283 /** 2284 * @brief Returns whether the coords are logically inside the object. 2285 * 2286 * When this function is called it will return a value of either @c false or 2287 * @c true, depending on if the coords are inside the object's current 2288 * geometry. 2289 * 2290 * A return value of @c true indicates the position is logically inside the 2291 * object, and @c false implies it is logically outside the object. 2292 * 2293 * If @c e is not a valid object, the return value is undefined. 2294 * 2295 * @param[in] x The canvas-relative x coordinate. 2296 * @param[in] y The canvas-relative y coordinate. 2297 * 2298 * @return @c true if the coords are inside the object, @c false otherwise 2299 * 2300 * @ingroup Evas_Object_Group 2301 */ 2302 2303 EAPI Eina_Bool evas_object_pointer_coords_inside_get(const Evas_Object *eo_obj, int x, int y) EINA_WARN_UNUSED_RESULT; 2304 2305 #include "canvas/efl_canvas_object_eo.legacy.h" 2306 2307 /** 2308 * @brief Get the Evas to which this object belongs to 2309 * 2310 * The object may be an evas object, an elementary object or window, or an 2311 * evas 3D / VG object. 2312 * @ingroup Evas_Object_Group 2313 */ 2314 EAPI Evas *evas_object_evas_get(const Eo *obj); 2315 2316 /** 2317 * @brief Retrieve a list of objects lying over a given position in a canvas. 2318 * 2319 * This function will traverse all the layers of the given canvas, from top to 2320 * bottom, querying for objects with areas covering the given position. The 2321 * user can remove from query objects which are hidden and/or which are set to 2322 * pass events. 2323 * 2324 * @warning This function will skip objects parented by smart objects, acting 2325 * only on the ones at the "top level", with regard to object parenting. 2326 * 2327 * @param[in] obj The object. 2328 * @param[in] x The pixel position. 2329 * @param[in] y The pixel position. 2330 * @param[in] include_pass_events_objects Boolean flag to include or not 2331 * objects which pass events in this calculation. 2332 * @param[in] include_hidden_objects Boolean flag to include or not hidden 2333 * objects in this calculation. 2334 * 2335 * @return The list of objects that are over the given position in @c e. 2336 * 2337 * @ingroup Evas_Canvas 2338 */ 2339 EAPI Eina_List *evas_objects_at_xy_get(Eo *eo_e, int x, int y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects); 2340 2341 2342 /** 2343 * @brief Retrieve the object stacked at the top of a given position in a 2344 * canvas. 2345 * 2346 * This function will traverse all the layers of the given canvas, from top to 2347 * bottom, querying for objects with areas covering the given position. The 2348 * user can remove from the query objects which are hidden and/or which are set 2349 * to pass events. 2350 * 2351 * @warning This function will skip objects parented by smart objects, acting 2352 * only on the ones at the "top level", with regard to object parenting. 2353 * 2354 * @param[in] obj The object. 2355 * @param[in] x The pixel position. 2356 * @param[in] y The pixel position. 2357 * @param[in] include_pass_events_objects Boolean flag to include or not 2358 * objects which pass events in this calculation. 2359 * @param[in] include_hidden_objects Boolean flag to include or not hidden 2360 * objects in this calculation. 2361 * 2362 * @return The Evas object that is over all other objects at the given 2363 * position. 2364 * @ingroup Evas_Canvas 2365 */ 2366 EAPI Evas_Object* evas_object_top_at_xy_get(Eo *eo_e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects); 2367 2368 2369 /** 2370 * @brief Get all objects in the given rectangle 2371 * 2372 * @param[in] obj The object. 2373 * @param[in] x X coordinate 2374 * @param[in] y Y coordinate 2375 * @param[in] w Width 2376 * @param[in] h Height 2377 * @param[in] include_pass_events_objects @c true if the list should include 2378 * objects which pass events 2379 * @param[in] include_hidden_objects @c true if the list should include hidden 2380 * objects 2381 * 2382 * @return List of objects 2383 * @ingroup Evas_Canvas 2384 */ 2385 EAPI Eina_List *evas_objects_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT; 2386 2387 /** 2388 * @brief Retrieve the Evas object stacked at the top of a given rectangular 2389 * region in a canvas 2390 * 2391 * This function will traverse all the layers of the given canvas, from top to 2392 * bottom, querying for objects with areas overlapping with the given 2393 * rectangular region inside @c e. The user can remove from the query objects 2394 * which are hidden and/or which are set to pass events. 2395 * 2396 * @warning This function will skip objects parented by smart objects, acting 2397 * only on the ones at the "top level", with regard to object parenting. 2398 * 2399 * @param[in] obj The object. 2400 * @param[in] x The top left corner's horizontal coordinate for the rectangular 2401 * region. 2402 * @param[in] y The top left corner's vertical coordinate for the rectangular 2403 * region. 2404 * @param[in] w The width of the rectangular region. 2405 * @param[in] h The height of the rectangular region. 2406 * @param[in] include_pass_events_objects Boolean flag to include or not 2407 * objects which pass events in this calculation. 2408 * @param[in] include_hidden_objects Boolean flag to include or not hidden 2409 * objects in this calculation. 2410 * 2411 * @return The Evas object that is over all other objects at the given 2412 * rectangular region. 2413 * 2414 * @ingroup Evas_Canvas 2415 */ 2416 EAPI Evas_Object *evas_object_top_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT; 2417 2418 /** 2419 * @ingroup Evas_Object_Group_Events 2420 * 2421 * @{ 2422 */ 2423 2424 /** 2425 * Add (register) a callback function to a given Evas object event. 2426 * 2427 * @param obj Object to attach a callback to 2428 * @param type The type of event that will trigger the callback 2429 * @param func The function to be called when the event is triggered 2430 * @param data The data pointer to be passed to @p func 2431 * 2432 * This function adds a function callback to an object when the event 2433 * of type @p type occurs on object @p obj. The function is @p func. 2434 * 2435 * In the event of a memory allocation error during addition of the 2436 * callback to the object, evas_alloc_error() should be used to 2437 * determine the nature of the error, if any, and the program should 2438 * sensibly try and recover. 2439 * 2440 * A callback function must have the ::Evas_Object_Event_Cb prototype 2441 * definition. The first parameter (@p data) in this definition will 2442 * have the same value passed to evas_object_event_callback_add() as 2443 * the @p data parameter, at runtime. The second parameter @p e is the 2444 * canvas pointer on which the event occurred. The third parameter is 2445 * a pointer to the object on which event occurred. Finally, the 2446 * fourth parameter @p event_info is a pointer to a data structure 2447 * that may or may not be passed to the callback, depending on the 2448 * event type that triggered the callback. This is so because some 2449 * events don't carry extra context with them, but others do. 2450 * 2451 * The event type @p type to trigger the function may be one of 2452 * #EVAS_CALLBACK_MOUSE_IN, #EVAS_CALLBACK_MOUSE_OUT, 2453 * #EVAS_CALLBACK_MOUSE_DOWN, #EVAS_CALLBACK_MOUSE_UP, 2454 * #EVAS_CALLBACK_MOUSE_MOVE, #EVAS_CALLBACK_MOUSE_WHEEL, 2455 * #EVAS_CALLBACK_MULTI_DOWN, #EVAS_CALLBACK_MULTI_UP, 2456 * #EVAS_CALLBACK_AXIS_UPDATE, 2457 * #EVAS_CALLBACK_MULTI_MOVE, #EVAS_CALLBACK_FREE, 2458 * #EVAS_CALLBACK_KEY_DOWN, #EVAS_CALLBACK_KEY_UP, 2459 * #EVAS_CALLBACK_FOCUS_IN, #EVAS_CALLBACK_FOCUS_OUT, 2460 * #EVAS_CALLBACK_SHOW, #EVAS_CALLBACK_HIDE, #EVAS_CALLBACK_MOVE, 2461 * #EVAS_CALLBACK_RESIZE, #EVAS_CALLBACK_RESTACK, #EVAS_CALLBACK_DEL, 2462 * #EVAS_CALLBACK_HOLD, #EVAS_CALLBACK_CHANGED_SIZE_HINTS, 2463 * #EVAS_CALLBACK_IMAGE_PRELOADED or #EVAS_CALLBACK_IMAGE_UNLOADED. 2464 * 2465 * This determines the kind of event that will trigger the callback. 2466 * What follows is a list explaining better the nature of each type of 2467 * event, along with their associated @p event_info pointers: 2468 * 2469 * - #EVAS_CALLBACK_MOUSE_IN: @p event_info is a pointer to an 2470 * #Evas_Event_Mouse_In struct\n\n 2471 * This event is triggered when the mouse pointer enters the area 2472 * (not shaded by other objects) of the object @p obj. This may 2473 * occur by the mouse pointer being moved by 2474 * evas_event_feed_mouse_move() calls, or by the object being shown, 2475 * raised, moved, resized, or other objects being moved out of the 2476 * way, hidden or lowered, whatever may cause the mouse pointer to 2477 * get on top of @p obj, having been on top of another object 2478 * previously. 2479 * 2480 * - #EVAS_CALLBACK_MOUSE_OUT: @p event_info is a pointer to an 2481 * #Evas_Event_Mouse_Out struct\n\n 2482 * This event is triggered exactly like #EVAS_CALLBACK_MOUSE_IN is, 2483 * but it occurs when the mouse pointer exits an object's area. Note 2484 * that no mouse out events will be reported if the mouse pointer is 2485 * implicitly grabbed to an object (mouse buttons are down, having 2486 * been pressed while the pointer was over that object). In these 2487 * cases, mouse out events will be reported once all buttons are 2488 * released, if the mouse pointer has left the object's area. The 2489 * indirect ways of taking off the mouse pointer from an object, 2490 * like cited above, for #EVAS_CALLBACK_MOUSE_IN, also apply here, 2491 * naturally. 2492 * 2493 * - #EVAS_CALLBACK_MOUSE_DOWN: @p event_info is a pointer to an 2494 * #Evas_Event_Mouse_Down struct\n\n 2495 * This event is triggered by a mouse button being pressed while the 2496 * mouse pointer is over an object. If the pointer mode for Evas is 2497 * #EVAS_OBJECT_POINTER_MODE_AUTOGRAB (default), this causes this 2498 * object to <b>passively grab the mouse</b> until all mouse buttons 2499 * have been released: all future mouse events will be reported to 2500 * only this object until no buttons are down. That includes mouse 2501 * move events, mouse in and mouse out events, and further button 2502 * presses. When all buttons are released, event propagation will 2503 * occur as normal (see #Evas_Object_Pointer_Mode). 2504 * 2505 * - #EVAS_CALLBACK_MOUSE_UP: @p event_info is a pointer to an 2506 * #Evas_Event_Mouse_Up struct\n\n 2507 * This event is triggered by a mouse button being released while 2508 * the mouse pointer is over an object's area (or when passively 2509 * grabbed to an object). 2510 * 2511 * - #EVAS_CALLBACK_MOUSE_MOVE: @p event_info is a pointer to an 2512 * #Evas_Event_Mouse_Move struct\n\n 2513 * This event is triggered by the mouse pointer being moved while 2514 * over an object's area (or while passively grabbed to an object). 2515 * 2516 * - #EVAS_CALLBACK_MOUSE_WHEEL: @p event_info is a pointer to an 2517 * #Evas_Event_Mouse_Wheel struct\n\n 2518 * This event is triggered by the mouse wheel being rolled while the 2519 * mouse pointer is over an object (or passively grabbed to an 2520 * object). 2521 * 2522 * - #EVAS_CALLBACK_MULTI_DOWN: @p event_info is a pointer to an 2523 * #Evas_Event_Multi_Down struct 2524 * 2525 * - #EVAS_CALLBACK_MULTI_UP: @p event_info is a pointer to an 2526 * #Evas_Event_Multi_Up struct 2527 * 2528 * - #EVAS_CALLBACK_MULTI_MOVE: @p event_info is a pointer to an 2529 * #Evas_Event_Multi_Move struct 2530 * 2531 * - #EVAS_CALLBACK_AXIS_UPDATE: @p event_info is a pointer to an 2532 * #Evas_Event_Axis_Update struct 2533 * 2534 * - #EVAS_CALLBACK_FREE: @p event_info is @c NULL \n\n 2535 * This event is triggered just before Evas is about to free all 2536 * memory used by an object and remove all references to it. This is 2537 * useful for programs to use if they attached data to an object and 2538 * want to free it when the object is deleted. The object is still 2539 * valid when this callback is called, but after it returns, there 2540 * is no guarantee on the object's validity. 2541 * 2542 * - #EVAS_CALLBACK_KEY_DOWN: @p event_info is a pointer to an 2543 * #Evas_Event_Key_Down struct\n\n 2544 * This callback is called when a key is pressed and the focus is on 2545 * the object, or a key has been grabbed to a particular object 2546 * which wants to intercept the key press regardless of what object 2547 * has the focus. 2548 * 2549 * - #EVAS_CALLBACK_KEY_UP: @p event_info is a pointer to an 2550 * #Evas_Event_Key_Up struct \n\n 2551 * This callback is called when a key is released and the focus is 2552 * on the object, or a key has been grabbed to a particular object 2553 * which wants to intercept the key release regardless of what 2554 * object has the focus. 2555 * 2556 * - #EVAS_CALLBACK_FOCUS_IN: @p event_info is @c NULL \n\n 2557 * This event is called when an object gains the focus. When it is 2558 * called the object has already gained the focus. 2559 * 2560 * - #EVAS_CALLBACK_FOCUS_OUT: @p event_info is @c NULL \n\n 2561 * This event is triggered when an object loses the focus. When it 2562 * is called the object has already lost the focus. 2563 * 2564 * - #EVAS_CALLBACK_SHOW: @p event_info is @c NULL \n\n 2565 * This event is triggered by the object being shown by 2566 * evas_object_show(). 2567 * 2568 * - #EVAS_CALLBACK_HIDE: @p event_info is @c NULL \n\n 2569 * This event is triggered by an object being hidden by 2570 * evas_object_hide(). 2571 * 2572 * - #EVAS_CALLBACK_MOVE: @p event_info is @c NULL \n\n 2573 * This event is triggered by an object being 2574 * moved. evas_object_move() can trigger this, as can any 2575 * object-specific manipulations that would mean the object's origin 2576 * could move. 2577 * 2578 * - #EVAS_CALLBACK_RESIZE: @p event_info is @c NULL \n\n 2579 * This event is triggered by an object being resized. Resizes can 2580 * be triggered by evas_object_resize() or by any object-specific 2581 * calls that may cause the object to resize. 2582 * 2583 * - #EVAS_CALLBACK_RESTACK: @p event_info is @c NULL \n\n 2584 * This event is triggered by an object being re-stacked. Stacking 2585 * changes can be triggered by 2586 * evas_object_stack_below()/evas_object_stack_above() and others. 2587 * 2588 * - #EVAS_CALLBACK_DEL: @p event_info is @c NULL. 2589 * 2590 * - #EVAS_CALLBACK_HOLD: @p event_info is a pointer to an 2591 * #Evas_Event_Hold struct 2592 * 2593 * - #EVAS_CALLBACK_CHANGED_SIZE_HINTS: @p event_info is @c NULL. 2594 * 2595 * - #EVAS_CALLBACK_IMAGE_PRELOADED: @p event_info is @c NULL. 2596 * 2597 * - #EVAS_CALLBACK_IMAGE_UNLOADED: @p event_info is @c NULL. 2598 * 2599 * @note Be careful not to add the same callback multiple times, if 2600 * that's not what you want, because Evas won't check if a callback 2601 * existed before exactly as the one being registered (and thus, call 2602 * it more than once on the event, in this case). This would make 2603 * sense if you passed different functions and/or callback data, only. 2604 * 2605 * Example: 2606 * @dontinclude evas-events.c 2607 * @skip evas_object_event_callback_add( 2608 * @until } 2609 * 2610 * See the full example @ref Example_Evas_Events "here". 2611 * 2612 */ 2613 EAPI void evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); 2614 2615 /** 2616 * Add (register) a callback function to a given Evas object event with a 2617 * non-default priority set. Except for the priority field, it's exactly the 2618 * same as @ref evas_object_event_callback_add 2619 * 2620 * @param obj Object to attach a callback to 2621 * @param type The type of event that will trigger the callback 2622 * @param priority The priority of the callback, lower values called first. 2623 * @param func The function to be called when the event is triggered 2624 * @param data The data pointer to be passed to @p func 2625 * 2626 * @see evas_object_event_callback_add 2627 * @since 1.1 2628 */ 2629 EAPI void evas_object_event_callback_priority_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 4); 2630 2631 /** 2632 * Delete a callback function from an object 2633 * 2634 * @param obj Object to remove a callback from 2635 * @param type The type of event that was triggering the callback 2636 * @param func The function that was to be called when the event was triggered 2637 * @return The data pointer that was to be passed to the callback 2638 * 2639 * This function removes the most recently added callback from the 2640 * object @p obj which was triggered by the event type @p type and was 2641 * calling the function @p func when triggered. If the removal is 2642 * successful it will also return the data pointer that was passed to 2643 * evas_object_event_callback_add() when the callback was added to the 2644 * object. If not successful @c NULL will be returned. 2645 * 2646 * Example: 2647 * @code 2648 * extern Evas_Object *object; 2649 * void *my_data; 2650 * void up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info); 2651 * 2652 * my_data = evas_object_event_callback_del(object, EVAS_CALLBACK_MOUSE_UP, up_callback); 2653 * @endcode 2654 */ 2655 EAPI void *evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func) EINA_ARG_NONNULL(1, 3); 2656 2657 /** 2658 * Delete (unregister) a callback function registered to a given 2659 * Evas object event. 2660 * 2661 * @param obj Object to remove a callback from 2662 * @param type The type of event that was triggering the callback 2663 * @param func The function that was to be called when the event was 2664 * triggered 2665 * @param data The data pointer that was to be passed to the callback 2666 * @return The data pointer that was to be passed to the callback 2667 * 2668 * This function removes the most recently added callback from the 2669 * object @p obj, which was triggered by the event type @p type and was 2670 * calling the function @p func with data @p data, when triggered. If 2671 * the removal is successful it will also return the data pointer that 2672 * was passed to evas_object_event_callback_add() (that will be the 2673 * same as the parameter) when the callback was added to the 2674 * object. In errors, @c NULL will be returned. 2675 * 2676 * @note For deletion of Evas object events callbacks filtering by 2677 * just type and function pointer, use 2678 * evas_object_event_callback_del(). 2679 * 2680 * Example: 2681 * @code 2682 * extern Evas_Object *object; 2683 * void *my_data; 2684 * void up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info); 2685 * 2686 * my_data = evas_object_event_callback_del_full(object, EVAS_CALLBACK_MOUSE_UP, up_callback, data); 2687 * @endcode 2688 */ 2689 EAPI void *evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3); 2690 2691 /** 2692 * @brief Requests @c keyname key events be directed to @c obj. 2693 * 2694 * Key grabs allow one or more objects to receive key events for specific key 2695 * strokes even if other objects have focus. Whenever a key is grabbed, only 2696 * the objects grabbing it will get the events for the given keys. 2697 * 2698 * @c keyname is a platform dependent symbolic name for the key pressed (see 2699 * @ref Evas_Keys for more information). 2700 * 2701 * @c modifiers and @c not_modifiers are bit masks of all the modifiers that 2702 * must and mustn't, respectively, be pressed along with @c keyname key in 2703 * order to trigger this new key grab. Modifiers can be things such as Shift 2704 * and Ctrl as well as user defined types via @ref evas_key_modifier_add. 2705 * Retrieve them with @ref evas_key_modifier_mask_get or use 0 for empty masks. 2706 * 2707 * @c exclusive will make the given object the only one permitted to grab the 2708 * given key. If given @c true, subsequent calls on this function with 2709 * different @c obj arguments will fail, unless the key is ungrabbed again. 2710 * 2711 * @warning Providing impossible modifier sets creates undefined behavior. 2712 * 2713 * See also @ref evas_object_key_ungrab, @ref evas_object_focus_get, 2714 * @ref evas_object_focus_set, @ref evas_focus_get, @ref evas_key_modifier_add. 2715 * 2716 * @param[in] keyname The key to request events for. 2717 * @param[in] modifiers A mask of modifiers that must be present to trigger the 2718 * event. 2719 * @param[in] not_modifiers A mask of modifiers that must not be present to 2720 * trigger the event. 2721 * @param[in] exclusive Request that the @c obj is the only object receiving 2722 * the @c keyname events. 2723 * 2724 * @return @c true if the call succeeded, @c false otherwise. 2725 */ 2726 EAPI Eina_Bool evas_object_key_grab(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers, Eina_Bool exclusive) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2); 2727 2728 /** 2729 * @brief Removes the grab on @c keyname key events by @c obj. 2730 * 2731 * Removes a key grab on @c obj if @c keyname, @c modifiers, and 2732 * @c not_modifiers match. 2733 * 2734 * See also @ref evas_object_key_grab, @ref evas_object_focus_get, 2735 * @ref evas_object_focus_set, @ref evas_focus_get. 2736 * 2737 * @param[in] keyname The key the grab is set for. 2738 * @param[in] modifiers A mask of modifiers that must be present to trigger the 2739 * event. 2740 * @param[in] not_modifiers A mask of modifiers that mus not not be present to 2741 * trigger the event. 2742 */ 2743 EAPI void evas_object_key_ungrab(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers) EINA_ARG_NONNULL(2); 2744 2745 /** 2746 * @} 2747 */ 2748 2749 /** 2750 * @ingroup Evas_Object_Group_Extras 2751 * 2752 * @{ 2753 */ 2754 2755 /** 2756 * Set an attached data pointer to an object with a given string key. 2757 * 2758 * @param obj The object to attach the data pointer to 2759 * @param key The string key for the data to access it 2760 * @param data The pointer to the data to be attached 2761 * 2762 * This attaches the pointer @p data to the object @p obj, given the 2763 * access string @p key. This pointer will stay "hooked" to the object 2764 * until a new pointer with the same string key is attached with 2765 * evas_object_data_set() or it is deleted with 2766 * evas_object_data_del(). On deletion of the object @p obj, the 2767 * pointers will not be accessible from the object anymore. 2768 * 2769 * You can find the pointer attached under a string key using 2770 * evas_object_data_get(). It is the job of the calling application to 2771 * free any data pointed to by @p data when it is no longer required. 2772 * 2773 * If @p data is @c NULL, the old value stored at @p key will be 2774 * removed but no new value will be stored. This is synonymous with 2775 * calling evas_object_data_del() with @p obj and @p key. 2776 * 2777 * @note This function is very handy when you have data associated 2778 * specifically to an Evas object, being of use only when dealing with 2779 * it. Than you don't have the burden to a pointer to it elsewhere, 2780 * using this family of functions. 2781 * 2782 * Example: 2783 * 2784 * @code 2785 * int *my_data; 2786 * extern Evas_Object *obj; 2787 * 2788 * my_data = malloc(500); 2789 * evas_object_data_set(obj, "name_of_data", my_data); 2790 * printf("The data that was attached was %p\n", evas_object_data_get(obj, "name_of_data")); 2791 * @endcode 2792 */ 2793 EAPI void evas_object_data_set(Evas_Object *obj, const char *key, const void *data) EINA_ARG_NONNULL(1, 2); 2794 2795 /** 2796 * Return an attached data pointer on an Evas object by its given 2797 * string key. 2798 * 2799 * @param obj The object to which the data was attached 2800 * @param key The string key the data was stored under 2801 * @return The data pointer stored, or @c NULL if none was stored 2802 * 2803 * This function will return the data pointer attached to the object 2804 * @p obj, stored using the string key @p key. If the object is valid 2805 * and a data pointer was stored under the given key, that pointer 2806 * will be returned. If this is not the case, @c NULL will be 2807 * returned, signifying an invalid object or a non-existent key. It is 2808 * possible that a @c NULL pointer was stored given that key, but this 2809 * situation is nonsensical and thus can be considered an error as 2810 * well. @c NULL pointers are never stored as this is the return value 2811 * if an error occurs. 2812 * 2813 * Example: 2814 * 2815 * @code 2816 * int *my_data; 2817 * extern Evas_Object *obj; 2818 * 2819 * my_data = evas_object_data_get(obj, "name_of_my_data"); 2820 * if (my_data) printf("Data stored was %p\n", my_data); 2821 * else printf("No data was stored on the object\n"); 2822 * @endcode 2823 */ 2824 EAPI void *evas_object_data_get(const Evas_Object *obj, const char *key) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2); 2825 2826 /** 2827 * Delete an attached data pointer from an object. 2828 * 2829 * @param obj The object to delete the data pointer from 2830 * @param key The string key the data was stored under 2831 * @return The original data pointer stored at @p key on @p obj 2832 * 2833 * This will remove the stored data pointer from @p obj stored under 2834 * @p key and return this same pointer, if actually there was data 2835 * there, or @c NULL, if nothing was stored under that key. 2836 * 2837 * Example: 2838 * 2839 * @code 2840 * int *my_data; 2841 * extern Evas_Object *obj; 2842 * 2843 * my_data = evas_object_data_del(obj, "name_of_my_data"); 2844 * @endcode 2845 */ 2846 EAPI void *evas_object_data_del(Evas_Object *obj, const char *key) EINA_ARG_NONNULL(1, 2); 2847 2848 /** 2849 * @} 2850 */ 2851 2852 /** 2853 * @ingroup Evas_Object_Group_Find 2854 * 2855 * @{ 2856 */ 2857 2858 /** 2859 * Retrieve the Evas object stacked at the top at the position of the 2860 * mouse cursor, over a given canvas 2861 * 2862 * @param e A handle to the canvas. 2863 * @return The Evas object that is over all other objects at the mouse 2864 * pointer's position 2865 * 2866 * This function will traverse all the layers of the given canvas, 2867 * from top to bottom, querying for objects with areas covering the 2868 * mouse pointer's position, over @p e. 2869 * 2870 * @warning This function will @b skip objects parented by smart 2871 * objects, acting only on the ones at the "top level", with regard to 2872 * object parenting. 2873 */ 2874 EAPI Evas_Object *evas_object_top_at_pointer_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); 2875 2876 /** 2877 * @} 2878 */ 2879 2880 /** 2881 * @defgroup Evas_Object_Group_Interceptors Object Method Interceptors 2882 * 2883 * Evas provides a way to intercept method calls. The interceptor 2884 * callback may opt to completely deny the call, or may check and 2885 * change the parameters before continuing. The continuation of an 2886 * intercepted call is done by calling the intercepted call again, 2887 * from inside the interceptor callback. 2888 * 2889 * @ingroup Evas_Object_Group 2890 */ 2891 2892 /** 2893 * @ingroup Evas_Object_Group_Interceptors 2894 * 2895 * @{ 2896 */ 2897 2898 /** 2899 * Function signature for the resize event of an evas object 2900 * 2901 * @param data is the pointer passed through the callback. 2902 * @param obj the object being shown. 2903 * 2904 * @see evas_object_intercept_show_callback_add() 2905 * @see evas_object_intercept_show_callback_del() 2906 * 2907 */ 2908 typedef void (*Evas_Object_Intercept_Show_Cb)(void *data, Evas_Object *obj); 2909 2910 /** 2911 * Function signature for the hide event of an evas object 2912 * 2913 * @param data is the pointer passed through the callback. 2914 * @param obj the object being hidden. 2915 * 2916 * @see evas_object_intercept_hide_callback_add() 2917 * @see evas_object_intercept_hide_callback_del() 2918 * 2919 */ 2920 typedef void (*Evas_Object_Intercept_Hide_Cb)(void *data, Evas_Object *obj); 2921 2922 /** 2923 * Function signature for the move event of an evas object 2924 * 2925 * @param data the pointer passed through the callback. 2926 * @param obj the object being moved. 2927 * @param x move x position 2928 * @param y move y position 2929 * 2930 * @see evas_object_intercept_move_callback_add() 2931 * @see evas_object_intercept_move_callback_del() 2932 * 2933 */ 2934 typedef void (*Evas_Object_Intercept_Move_Cb)(void *data, Evas_Object *obj, Evas_Coord x, Evas_Coord y); 2935 2936 /** 2937 * Function signature for the resize event of an evas object 2938 * 2939 * @param data the pointer passed through the callback. 2940 * @param obj the object being resized. 2941 * @param width of the object 2942 * @param height of the object 2943 * 2944 * @see evas_object_intercept_resize_callback_add() 2945 * @see evas_object_intercept_resize_callback_del() 2946 * 2947 */ 2948 typedef void (*Evas_Object_Intercept_Resize_Cb)(void *data, Evas_Object *obj, Evas_Coord w, Evas_Coord h); 2949 2950 /** 2951 * Function signature for the raise event of an evas object 2952 * 2953 * @param data the pointer passed through the callback. 2954 * @param obj the object being raised. 2955 * 2956 * @see evas_object_intercept_raise_callback_add() 2957 * @see evas_object_intercept_raise_callback_del() 2958 * 2959 */ 2960 typedef void (*Evas_Object_Intercept_Raise_Cb)(void *data, Evas_Object *obj); 2961 2962 /** 2963 * Function signature for the lower event of an evas object 2964 * 2965 * @param data the pointer passed through the callback. 2966 * @param obj the object being lowered. 2967 * 2968 * @see evas_object_intercept_lower_callback_add() 2969 * @see evas_object_intercept_lower_callback_del() 2970 * 2971 */ 2972 typedef void (*Evas_Object_Intercept_Lower_Cb)(void *data, Evas_Object *obj); 2973 2974 /** 2975 * Function signature for the stack above event of an evas object 2976 * 2977 * @param data the pointer passed through the callback. 2978 * @param obj the object being stacked above. 2979 * @param above the object above which the object is stacked 2980 * 2981 * @see evas_object_intercept_stack_above_callback_add() 2982 * @see evas_object_intercept_stack_above_callback_del() 2983 * 2984 */ 2985 typedef void (*Evas_Object_Intercept_Stack_Above_Cb)(void *data, Evas_Object *obj, Evas_Object *above); 2986 2987 /** 2988 * Function signature for the stack below event of an evas object 2989 * 2990 * @param data the pointer passed through the callback. 2991 * @param obj the object being stacked below. 2992 * @param above the object below which the object is stacked 2993 * 2994 * @see evas_object_intercept_stack_below_callback_add() 2995 * @see evas_object_intercept_stack_below_callback_del() 2996 * 2997 */ 2998 typedef void (*Evas_Object_Intercept_Stack_Below_Cb)(void *data, Evas_Object *obj, Evas_Object *above); 2999 3000 /** 3001 * Function signature for the layer event of an evas object 3002 * 3003 * @param data the pointer passed through the callback. 3004 * @param obj the object being layered 3005 * @param l the layer value 3006 * 3007 * @see evas_object_intercept_layer_callback_add() 3008 * @see evas_object_intercept_layer_callback_del() 3009 * 3010 */ 3011 typedef void (*Evas_Object_Intercept_Layer_Set_Cb)(void *data, Evas_Object *obj, int l); 3012 3013 /** 3014 * Function signature for the focus set event of an evas object 3015 * 3016 * @param data the pointer passed through the callback. 3017 * @param obj the object being focused 3018 * @param focus the focus value, EINA_TRUE if the object is focused, EINA_FALSE otherwise 3019 * 3020 * @see evas_object_intercept_focus_set_callback_add() 3021 * @see evas_object_intercept_focus_set_callback_del() 3022 * 3023 */ 3024 typedef void (*Evas_Object_Intercept_Focus_Set_Cb)(void *data, Evas_Object *obj, Eina_Bool focus); 3025 3026 /** 3027 * Function signature for the focus set event of an evas object with seat info 3028 * 3029 * @param data the pointer passed through the callback. 3030 * @param obj the object being focused 3031 * @param focus the focus value, EINA_TRUE if the object is focused, EINA_FALSE otherwise 3032 * @param seat the seat for which focus is being set 3033 * 3034 * @see evas_object_intercept_device_focus_set_callback_add() 3035 * @see evas_object_intercept_device_focus_set_callback_del() 3036 * 3037 * @since 1.20 3038 */ 3039 typedef void (*Evas_Object_Intercept_Device_Focus_Set_Cb)(void *data, Evas_Object *obj, Eina_Bool focus, Eo *seat); 3040 3041 /** 3042 * Function signature for the color set event of an evas object 3043 * 3044 * @param data the pointer passed through the callback. 3045 * @param obj the object changing color 3046 * @param r the red component of the color 3047 * @param g the green component of the color 3048 * @param b the blue component of the color 3049 * @param a the alpha component of the color 3050 * 3051 * @see evas_object_intercept_color_set_callback_add() 3052 * @see evas_object_intercept_color_set_callback_del() 3053 * 3054 */ 3055 typedef void (*Evas_Object_Intercept_Color_Set_Cb)(void *data, Evas_Object *obj, int r, int g, int b, int a); 3056 3057 /** 3058 * Function signature for the clip set event of an evas object 3059 * 3060 * @param data the pointer passed through the callback. 3061 * @param obj the object being clipped 3062 * @param clip the evas object on which the object is clipped 3063 * 3064 * @see evas_object_intercept_clip_set_callback_add() 3065 * @see evas_object_intercept_clip_set_callback_del() 3066 * 3067 */ 3068 typedef void (*Evas_Object_Intercept_Clip_Set_Cb)(void *data, Evas_Object *obj, Evas_Object *clip); 3069 3070 /** 3071 * Function signature for the clip unset event of an evas object 3072 * 3073 * @param data the pointer passed through the callback. 3074 * @param obj the object being unclipped 3075 * 3076 * @see evas_object_intercept_clip_unset_callback_add() 3077 * @see evas_object_intercept_clip_unset_callback_del() 3078 * 3079 */ 3080 typedef void (*Evas_Object_Intercept_Clip_Unset_Cb)(void *data, Evas_Object *obj); 3081 3082 /** 3083 * Set the callback function that intercepts a show event of an object. 3084 * 3085 * @param obj The given canvas object pointer. 3086 * @param func The given function to be the callback function. 3087 * @param data The data passed to the callback function. 3088 * 3089 * This function sets a callback function to intercepts a show event 3090 * of a canvas object. 3091 * 3092 * @see evas_object_intercept_show_callback_del(). 3093 * 3094 */ 3095 EAPI void evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3096 3097 /** 3098 * Unset the callback function that intercepts a show event of a object. 3099 * 3100 * @param obj The given canvas object pointer. 3101 * @param func The given callback function. 3102 * 3103 * This function sets a callback function to intercepts a show event 3104 * of a canvas object. 3105 * 3106 * @see evas_object_intercept_show_callback_add(). 3107 * 3108 */ 3109 EAPI void *evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func) EINA_ARG_NONNULL(1, 2); 3110 3111 /** 3112 * Set the callback function that intercepts a hide event of a object. 3113 * 3114 * @param obj The given canvas object pointer. 3115 * @param func The given function to be the callback function. 3116 * @param data The data passed to the callback function. 3117 * 3118 * This function sets a callback function to intercepts a hide event 3119 * of a canvas object. 3120 * 3121 * @see evas_object_intercept_hide_callback_del(). 3122 * 3123 */ 3124 EAPI void evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3125 3126 /** 3127 * Unset the callback function that intercepts a hide event of a object. 3128 * 3129 * @param obj The given canvas object pointer. 3130 * @param func The given callback function. 3131 * 3132 * This function sets a callback function to intercepts a hide event 3133 * of a canvas object. 3134 * 3135 * @see evas_object_intercept_hide_callback_add(). 3136 * 3137 */ 3138 EAPI void *evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func) EINA_ARG_NONNULL(1, 2); 3139 3140 /** 3141 * Set the callback function that intercepts a move event of an object. 3142 * 3143 * @param obj The given canvas object pointer. 3144 * @param func The given function to be the callback function. 3145 * @param data The data passed to the callback function. 3146 * 3147 * This function sets a callback function to intercepts a move event 3148 * of a canvas object. 3149 * 3150 * @see evas_object_intercept_move_callback_del(). 3151 * 3152 */ 3153 EAPI void evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3154 3155 /** 3156 * Unset the callback function that intercepts a move event of an object. 3157 * 3158 * @param obj The given canvas object pointer. 3159 * @param func The given callback function. 3160 * 3161 * This function sets a callback function to intercepts a move event 3162 * of a canvas object. 3163 * 3164 * @see evas_object_intercept_move_callback_add(). 3165 * 3166 */ 3167 EAPI void *evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func) EINA_ARG_NONNULL(1, 2); 3168 3169 /** 3170 * Set the callback function that intercepts a resize event of an object. 3171 * 3172 * @param obj The given canvas object pointer. 3173 * @param func The given function to be the callback function. 3174 * @param data The data passed to the callback function. 3175 * 3176 * This function sets a callback function to intercepts a resize event 3177 * of a canvas object. 3178 * 3179 * @see evas_object_intercept_resize_callback_del(). 3180 * 3181 */ 3182 EAPI void evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3183 3184 /** 3185 * Unset the callback function that intercepts a resize event of an object. 3186 * 3187 * @param obj The given canvas object pointer. 3188 * @param func The given callback function. 3189 * 3190 * This function sets a callback function to intercepts a resize event 3191 * of a canvas object. 3192 * 3193 * @see evas_object_intercept_resize_callback_add(). 3194 * 3195 */ 3196 EAPI void *evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func) EINA_ARG_NONNULL(1, 2); 3197 3198 /** 3199 * Set the callback function that intercepts a raise event of an object. 3200 * 3201 * @param obj The given canvas object pointer. 3202 * @param func The given function to be the callback function. 3203 * @param data The data passed to the callback function. 3204 * 3205 * This function sets a callback function to intercepts a raise event 3206 * of a canvas object. 3207 * 3208 * @see evas_object_intercept_raise_callback_del(). 3209 * 3210 */ 3211 EAPI void evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3212 3213 /** 3214 * Unset the callback function that intercepts a raise event of an object. 3215 * 3216 * @param obj The given canvas object pointer. 3217 * @param func The given callback function. 3218 * 3219 * This function sets a callback function to intercepts a raise event 3220 * of a canvas object. 3221 * 3222 * @see evas_object_intercept_raise_callback_add(). 3223 * 3224 */ 3225 EAPI void *evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func) EINA_ARG_NONNULL(1, 2); 3226 3227 /** 3228 * Set the callback function that intercepts a lower event of an object. 3229 * 3230 * @param obj The given canvas object pointer. 3231 * @param func The given function to be the callback function. 3232 * @param data The data passed to the callback function. 3233 * 3234 * This function sets a callback function to intercepts a lower event 3235 * of a canvas object. 3236 * 3237 * @see evas_object_intercept_lower_callback_del(). 3238 * 3239 */ 3240 EAPI void evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3241 3242 /** 3243 * Unset the callback function that intercepts a lower event of an object. 3244 * 3245 * @param obj The given canvas object pointer. 3246 * @param func The given callback function. 3247 * 3248 * This function sets a callback function to intercepts a lower event 3249 * of a canvas object. 3250 * 3251 * @see evas_object_intercept_lower_callback_add(). 3252 * 3253 */ 3254 EAPI void *evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func) EINA_ARG_NONNULL(1, 2); 3255 3256 /** 3257 * Set the callback function that intercepts a stack above event of an object. 3258 * 3259 * @param obj The given canvas object pointer. 3260 * @param func The given function to be the callback function. 3261 * @param data The data passed to the callback function. 3262 * 3263 * This function sets a callback function to intercepts a stack above event 3264 * of a canvas object. 3265 * 3266 * @see evas_object_intercept_stack_above_callback_del(). 3267 * 3268 */ 3269 EAPI void evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3270 3271 /** 3272 * Unset the callback function that intercepts a stack above event of an object. 3273 * 3274 * @param obj The given canvas object pointer. 3275 * @param func The given callback function. 3276 * 3277 * This function sets a callback function to intercepts a stack above event 3278 * of a canvas object. 3279 * 3280 * @see evas_object_intercept_stack_above_callback_add(). 3281 * 3282 */ 3283 EAPI void *evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func) EINA_ARG_NONNULL(1, 2); 3284 3285 /** 3286 * Set the callback function that intercepts a stack below event of an object. 3287 * 3288 * @param obj The given canvas object pointer. 3289 * @param func The given function to be the callback function. 3290 * @param data The data passed to the callback function. 3291 * 3292 * This function sets a callback function to intercepts a stack below event 3293 * of a canvas object. 3294 * 3295 * @see evas_object_intercept_stack_below_callback_del(). 3296 * 3297 */ 3298 EAPI void evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3299 3300 /** 3301 * Unset the callback function that intercepts a stack below event of an object. 3302 * 3303 * @param obj The given canvas object pointer. 3304 * @param func The given callback function. 3305 * 3306 * This function sets a callback function to intercepts a stack below event 3307 * of a canvas object. 3308 * 3309 * @see evas_object_intercept_stack_below_callback_add(). 3310 * 3311 */ 3312 EAPI void *evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func) EINA_ARG_NONNULL(1, 2); 3313 3314 /** 3315 * Set the callback function that intercepts a layer set event of an object. 3316 * 3317 * @param obj The given canvas object pointer. 3318 * @param func The given function to be the callback function. 3319 * @param data The data passed to the callback function. 3320 * 3321 * This function sets a callback function to intercepts a layer set event 3322 * of a canvas object. 3323 * 3324 * @see evas_object_intercept_layer_set_callback_del(). 3325 * 3326 */ 3327 EAPI void evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3328 3329 /** 3330 * Unset the callback function that intercepts a layer set event of an object. 3331 * 3332 * @param obj The given canvas object pointer. 3333 * @param func The given callback function. 3334 * 3335 * This function sets a callback function to intercepts a layer set event 3336 * of a canvas object. 3337 * 3338 * @see evas_object_intercept_layer_set_callback_add(). 3339 * 3340 */ 3341 EAPI void *evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func) EINA_ARG_NONNULL(1, 2); 3342 3343 /** 3344 * Set the callback function that intercepts a color set event of an object. 3345 * 3346 * @param obj The given canvas object pointer. 3347 * @param func The given function to be the callback function. 3348 * @param data The data passed to the callback function. 3349 * 3350 * This function sets a callback function to intercepts a color set event 3351 * of a canvas object. 3352 * 3353 * @see evas_object_intercept_color_set_callback_del(). 3354 * 3355 */ 3356 EAPI void evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3357 3358 /** 3359 * Unset the callback function that intercepts a color set event of an object. 3360 * 3361 * @param obj The given canvas object pointer. 3362 * @param func The given callback function. 3363 * 3364 * This function sets a callback function to intercepts a color set event 3365 * of a canvas object. 3366 * 3367 * @see evas_object_intercept_color_set_callback_add(). 3368 * 3369 */ 3370 EAPI void *evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func) EINA_ARG_NONNULL(1, 2); 3371 3372 /** 3373 * Set the callback function that intercepts a clip set event of an object. 3374 * 3375 * @param obj The given canvas object pointer. 3376 * @param func The given function to be the callback function. 3377 * @param data The data passed to the callback function. 3378 * 3379 * This function sets a callback function to intercepts a clip set event 3380 * of a canvas object. 3381 * 3382 * @see evas_object_intercept_clip_set_callback_del(). 3383 * 3384 */ 3385 EAPI void evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3386 3387 /** 3388 * Unset the callback function that intercepts a clip set event of an object. 3389 * 3390 * @param obj The given canvas object pointer. 3391 * @param func The given callback function. 3392 * 3393 * This function sets a callback function to intercepts a clip set event 3394 * of a canvas object. 3395 * 3396 * @see evas_object_intercept_clip_set_callback_add(). 3397 * 3398 */ 3399 EAPI void *evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func) EINA_ARG_NONNULL(1, 2); 3400 3401 /** 3402 * Set the callback function that intercepts a clip unset event of an object. 3403 * 3404 * @param obj The given canvas object pointer. 3405 * @param func The given function to be the callback function. 3406 * @param data The data passed to the callback function. 3407 * 3408 * This function sets a callback function to intercepts a clip unset event 3409 * of a canvas object. 3410 * 3411 * @see evas_object_intercept_clip_unset_callback_del(). 3412 * 3413 */ 3414 EAPI void evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3415 3416 /** 3417 * Unset the callback function that intercepts a clip unset event of an object. 3418 * 3419 * @param obj The given canvas object pointer. 3420 * @param func The given callback function. 3421 * 3422 * This function sets a callback function to intercepts a clip unset event 3423 * of a canvas object. 3424 * 3425 * @see evas_object_intercept_clip_unset_callback_add(). 3426 * 3427 */ 3428 EAPI void *evas_object_intercept_clip_unset_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func) EINA_ARG_NONNULL(1, 2); 3429 3430 /** 3431 * Set the callback function that intercepts a focus set event of an object. 3432 * 3433 * @param obj The given canvas object pointer. 3434 * @param func The given function to be the callback function. 3435 * @param data The data passed to the callback function. 3436 * 3437 * This function sets a callback function to intercepts a focus set event 3438 * of a canvas object. 3439 * 3440 * @see evas_object_intercept_focus_set_callback_del(). 3441 * 3442 */ 3443 EAPI void evas_object_intercept_focus_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Focus_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3444 3445 /** 3446 * Unset the callback function that intercepts a focus set event of an object. 3447 * 3448 * @param obj The given canvas object pointer. 3449 * @param func The given callback function. 3450 * 3451 * This function sets a callback function to intercepts a focus set event 3452 * of a canvas object. 3453 * 3454 * @see evas_object_intercept_focus_set_callback_add(). 3455 * 3456 */ 3457 EAPI void *evas_object_intercept_focus_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Focus_Set_Cb func) EINA_ARG_NONNULL(1, 2); 3458 3459 /** 3460 * Set the callback function that intercepts a focus set event of an object. 3461 * 3462 * @param obj The given canvas object pointer. 3463 * @param func The given function to be the callback function. 3464 * @param data The data passed to the callback function. 3465 * 3466 * This function sets a callback function to intercepts a focus set event 3467 * of a canvas object and provides seat info. 3468 * 3469 * @see evas_object_intercept_device_focus_set_callback_del(). 3470 * 3471 * @since 1.20 3472 * 3473 */ 3474 EAPI void evas_object_intercept_device_focus_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Device_Focus_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2); 3475 3476 /** 3477 * Unset the callback function that intercepts a focus set event of an object. 3478 * 3479 * @param obj The given canvas object pointer. 3480 * @param func The given callback function. 3481 * 3482 * This function sets a callback function to intercepts a focus set event 3483 * of a canvas object and provides seat info. 3484 * 3485 * @see evas_object_intercept_device_focus_set_callback_add(). 3486 * 3487 * @since 1.20 3488 * 3489 */ 3490 EAPI void *evas_object_intercept_device_focus_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Device_Focus_Set_Cb func) EINA_ARG_NONNULL(1, 2); 3491 3492 /* Internal APIs for legacy compatibility */ 3493 #ifdef EFL_CANVAS_OBJECT_PROTECTED 3494 3495 enum _Evas_Object_Intercept_Cb_Type 3496 { 3497 EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 3498 EVAS_OBJECT_INTERCEPT_CB_MOVE, 3499 EVAS_OBJECT_INTERCEPT_CB_RESIZE, 3500 EVAS_OBJECT_INTERCEPT_CB_RAISE, 3501 EVAS_OBJECT_INTERCEPT_CB_LOWER, 3502 EVAS_OBJECT_INTERCEPT_CB_STACK_ABOVE, 3503 EVAS_OBJECT_INTERCEPT_CB_STACK_BELOW, 3504 EVAS_OBJECT_INTERCEPT_CB_LAYER_SET, 3505 EVAS_OBJECT_INTERCEPT_CB_FOCUS_SET, 3506 EVAS_OBJECT_INTERCEPT_CB_COLOR_SET, 3507 EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 3508 EVAS_OBJECT_INTERCEPT_CB_DEVICE_FOCUS_SET, 3509 }; 3510 typedef enum _Evas_Object_Intercept_Cb_Type Evas_Object_Intercept_Cb_Type; 3511 3512 EWAPI Eina_Bool _evas_object_intercept_call(Evas_Object *obj, Evas_Object_Intercept_Cb_Type type, int internal, ...); 3513 3514 #endif 3515 3516 3517 /** 3518 * @} 3519 */ 3520 3521 /** 3522 * @ingroup Evas_Object_Rectangle 3523 * 3524 * @{ 3525 */ 3526 3527 /** 3528 * Adds a rectangle to the given evas. 3529 * @param e The given evas. 3530 * @return The new rectangle object. 3531 * 3532 * @ingroup Evas_Object_Rectangle 3533 */ 3534 EAPI Evas_Object *evas_object_rectangle_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 3535 3536 /** 3537 * @} 3538 */ 3539 3540 /** 3541 * @defgroup Evas_Object_Vg_Group Vector Graphics Object 3542 * @ingroup Evas 3543 * 3544 * @ref Evas_Object_Vg_Group is the scene graph for managing vector graphics objects. 3545 * User can create shape objects as well as fill objects and give them to the 3546 * Evas_Object_Vg for drawing on the screen as well as managing the lifecycle 3547 * of the objects, enabling reuse of shape objects. 3548 * 3549 * Since Evas_Object_Vg is an Evas_Object all operations applicable to 3550 * an Evas_Object can be performed on it (clipping, mapping, etc). 3551 * 3552 * To create complex vector graphics you can create a hierarchy of shape 3553 * and fill objects and give the hierarchy to Evas_Object which will be 3554 * responsible for drawing and showing on the screen. 3555 * 3556 * As the shape object and fill object (linear and radial gradients) have 3557 * retain mode API, you only have to create it once and set the properties 3558 * and give it to Evas_Object_Vg. 3559 * 3560 * Any change in the properties of a shape or fill object are automatically 3561 * notified to Evas_Object_Vg triggering a redraw to reflect the changes. 3562 * 3563 * To create a vector path, you can give a list of path commands to the shape 3564 * object using efl_gfx_shape_path_set() API. 3565 * 3566 * Below are the list of features currently supported by Vector object. 3567 * 3568 * @li Drawing SVG Path. 3569 * You can construct a path by using api in efl_gfx_utils.h 3570 * 3571 * @li Gradient filling and stroking. 3572 * You can fill or stroke the path using linear or radial gradient. 3573 * @see Evas_Vg_Gradient_Linear and Evas_Vg_Gradient_Radial 3574 * 3575 * @li Transformation support for path and gradient fill. You can apply 3576 affine transforms to path objects. 3577 * @see Eina_Matrix. 3578 * 3579 * @note Below are the list of interfaces and classes that can be used 3580 * to draw vector graphics using vector objects. 3581 * 3582 * @li Efl.Gfx.Shape 3583 * @li Evas.VG_Shape 3584 * @li Evas.VG_Node 3585 * @li Efl.Gfx.Gradient 3586 * @li Efl.Gfx.Gradient_Radial 3587 * @li Efl.Gfx.Gradient_Linear 3588 * 3589 * Example: 3590 * @code 3591 * vector = evas_object_vg_add(canvas); 3592 * root = evas_obj_vg_root_node_get(vector); 3593 * shape = efl_add(EVAS_VG_SHAPE_CLASS, root); 3594 * Efl_Gfx_Path_Command *path_cmd = NULL; 3595 * double *points = NULL; 3596 * efl_gfx_path_append_circle(&path_cmd, &points); 3597 * * evas_vg_node_origin_set(shape, 10, 10); 3598 * * efl_gfx_shape_stroke_width_set(shape, 1.0); 3599 * * evas_vg_node_color_set(shape, 128, 128, 128, 80); 3600 * * efl_gfx_shape_path_set(shape, path_cmd, points); 3601 * @endcode 3602 * 3603 * @since 1.14 3604 * 3605 * @{ 3606 */ 3607 3608 /** 3609 * @brief Creates a new vector object on the given Evas @p e canvas. 3610 * 3611 * The shape object hierarchy can be added to the evas_object_vg by accessing 3612 * the root node of the vg canvas and adding the hierarchy as child to the root 3613 * node. 3614 * 3615 * @param[in] e The given canvas. 3616 * @return The created vector object handle. 3617 * 3618 * @see evas_obj_vg_root_node_get() 3619 * 3620 * @since 1.14 3621 */ 3622 EAPI Evas_Object *evas_object_vg_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 3623 3624 /** 3625 * Get the total number of frames of the vector, if it's animated. 3626 * 3627 * @return The number of frames. 0, if it's not animated. 3628 * 3629 * @since 1.23 3630 */ 3631 EAPI int evas_object_vg_animated_frame_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); 3632 3633 /** 3634 * Get the duration of a sequence of frames. 3635 * 3636 * This returns total duration in seconds that the specified 3637 * sequence of frames should take. 3638 * 3639 * If @p start_frame is 1 and @p frame_num is 0, this returns the 3640 * duration of frame 1. If @p start_frame is 1 and @p frame_num is 1, 3641 * this returns the total duration of frame 1 + frame 2. 3642 * 3643 * @param[in] start_frame The first frame, ranges from 1 to maximum frame count. 3644 * @param[in] frame_num Number of frames in the sequence, starts from 0. 3645 * 3646 * @return Duration in seconds. 3647 * 3648 * @see evas_object_vg_animated_frame_count_get() 3649 * @since 1.23 3650 */ 3651 EAPI double evas_object_vg_animated_frame_duration_get(const Evas_Object *obj, int start_frame EINA_UNUSED, int frame_num EINA_UNUSED) EINA_ARG_NONNULL(1); 3652 3653 /** 3654 * 3655 * Set the source file from where an vector object must fetch the real 3656 * vector data (it may be one of json, svg, eet files). 3657 * 3658 * If the file supports multiple data stored in it (as Eet files do), 3659 * you can specify the key to be used as the index of the vector in 3660 * this file. 3661 * 3662 * @param[in] file The vector file path. 3663 * @param[in] key The vector key in @p file (if its an Eet one), or @c 3664 NULL, otherwise. 3665 * 3666 * @return @c EINA_TRUE if it's succeed to read file, @c EINA_FALSE otherwise. 3667 * 3668 * @since 1.23 3669 */ 3670 EAPI Eina_Bool evas_object_vg_file_set(Evas_Object *obj, const char *file, const char *key); 3671 3672 /** 3673 * Set current frame of animated vector object. 3674 * 3675 * @param[in] frame_index The index of current frame. 3676 * 3677 * @note the @p frame_index must be in range of animation frames. (0 ~ max frame count) 3678 * 3679 * @return @c EINA_TRUE, if the frame index is valid. @c EINA_FALSE, otherwise. 3680 * 3681 * @see evas_object_vg_animated_frame_count_get() 3682 * 3683 * @since 1.23 3684 */ 3685 EAPI Eina_Bool evas_object_vg_animated_frame_set(Evas_Object *obj, int frame_index) EINA_ARG_NONNULL(1, 2); 3686 3687 /** 3688 * Get the current frame number of animated vector object. 3689 * 3690 * @return The frame index. 3691 * 3692 * @see evas_object_vg_animated_frame_set() 3693 * @see evas_object_vg_animated_frame_count_get() 3694 * 3695 * @since 1.23 3696 */ 3697 EAPI int evas_object_vg_animated_frame_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); 3698 3699 3700 #include "canvas/efl_canvas_vg_node_eo.legacy.h" 3701 #include "canvas/efl_canvas_vg_object_eo.legacy.h" 3702 #include "canvas/efl_canvas_vg_container_eo.legacy.h" 3703 #include "canvas/efl_canvas_vg_shape_eo.legacy.h" 3704 #include "canvas/efl_canvas_vg_gradient_eo.legacy.h" 3705 3706 /** 3707 * @brief These values determine how the end of opened sub-paths are rendered in a 3708 * stroke. @ref evas_vg_shape_stroke_cap_set 3709 * 3710 * @since 1.24 3711 */ 3712 typedef enum Evas_Vg_Cap_Type 3713 { 3714 EVAS_VG_CAP_BUTT = 0, /**< The end of lines is rendered as a full stop on the 3715 * last point itself */ 3716 EVAS_VG_CAP_ROUND, /**< The end of lines is rendered as a half-circle 3717 * around */ 3718 EVAS_VG_CAP_SQUARE, /**< The end of lines is rendered as a square around 3719 * the last point */ 3720 EVAS_VG_CAP_LAST /**< Sentinel value to indicate last enum field during 3721 * iteration */ 3722 } Evas_Vg_Cap; 3723 3724 3725 /** 3726 * @brief These values determine how two joining lines are rendered in a stroker. 3727 * @ref evas_vg_shape_stroke_join_set 3728 * 3729 * @since 1.24 3730 */ 3731 typedef enum Evas_Vg_Join_Type 3732 { 3733 EVAS_VG_JOIN_MITER = 0, /**< Used to render mitered line joins. The intersection 3734 * of the strokes is clipped at a line perpendicular to 3735 * the bisector of the angle between the strokes, at the 3736 * distance from the intersection of the segments equal 3737 * to the product of the miter limit value and the border 3738 * radius. This prevents long spikes being created */ 3739 EVAS_VG_JOIN_ROUND, /**< Used to render rounded line joins. Circular arcs 3740 * are used to join two lines smoothly */ 3741 EVAS_VG_JOIN_BEVEL, /**< Used to render beveled line joins. The outer corner 3742 * of the joined lines is filled by enclosing the 3743 * triangular region of the corner with a straight line 3744 * between the outer corners of each stroke */ 3745 EVAS_VG_JOIN_LAST /**< Sentinel value to indicate last enum field during 3746 * iteration */ 3747 } Evas_Vg_Join; 3748 3749 /** 3750 * @brief These values determine how the points are interpreted in a stream of points. 3751 * 3752 * @since 1.24 3753 */ 3754 typedef enum Evas_Vg_Path_Command_Type 3755 { 3756 EVAS_VG_PATH_COMMAND_END = 0, /**< The end of stream , no more points to process */ 3757 EVAS_VG_PATH_COMMAND_MOVE_TO, /**< The next point is the start point of a sub path */ 3758 EVAS_VG_PATH_COMMAND_LINE_TO, /**< The next point is used to draw a line from 3759 * current point */ 3760 EVAS_VG_PATH_COMMAND_CUBIC_TO, /**< The next three point is used to draw 3761 * a cubic bezier curve from current point */ 3762 EVAS_VG_PATH_COMMAND_CLOSE, /**< Close the current subpath by drawing a line 3763 * between current point and the first point of 3764 * current subpath */ 3765 EVAS_VG_PATH_COMMAND_LAST /**< Sentinel value to indicate last enum field 3766 * during iteration */ 3767 } Evas_Vg_Path_Command; 3768 3769 /** 3770 * @brief Type defining gradient stops. Describes the location and color of a 3771 * transition point in a gradient. 3772 * 3773 * @since 1.24 3774 */ 3775 typedef struct _Evas_Vg_Gradient_Stop 3776 { 3777 double offset; /**< The location of the gradient stop within the gradient 3778 * vector */ 3779 int r; /**< The component R color of the gradient stop */ 3780 int g; /**< The component G color of the gradient stop */ 3781 int b; /**< The component B color of the gradient stop */ 3782 int a; /**< The component A color of the gradient stop */ 3783 } Evas_Vg_Gradient_Stop; 3784 3785 /** 3786 * @brief Specifies how the area outside the gradient area should be filled. 3787 * @ref evas_vg_gradient_spread_set 3788 * 3789 * @since 1.24 3790 */ 3791 typedef enum Evas_Vg_Gradient_Spread_Type 3792 { 3793 EVAS_VG_GRADIENT_SPREAD_PAD = 0, /**< The area is filled with the closest stop 3794 * color. This is the default */ 3795 EVAS_VG_GRADIENT_SPREAD_REFLECT, /**< The gradient is reflected outside the 3796 * gradient area */ 3797 EVAS_VG_GRADIENT_SPREAD_REPEAT, /**< The gradient is repeated outside the 3798 * gradient area */ 3799 EVAS_VG_GRADIENT_SPREAD_LAST /**< Sentinel value to indicate last enum field 3800 * during iteration */ 3801 } Evas_Vg_Gradient_Spread; 3802 3803 /** 3804 * @brief Type describing dash. 3805 * @ref evas_vg_shape_stroke_dash_set 3806 * 3807 * @since 1.24 3808 */ 3809 typedef struct _Evas_Vg_Dash 3810 { 3811 double length; /**< Dash drawing length */ 3812 double gap; /**< Distance between two dashes */ 3813 } Evas_Vg_Dash; 3814 3815 /** 3816 * @brief Creates a new vector shape object. 3817 * 3818 * @param[in] parent The given vector container object. 3819 * @return The created vector shape object handle. 3820 * 3821 * @since 1.14 3822 */ 3823 EAPI Evas_Vg_Shape* evas_vg_shape_add(Evas_Vg_Container *parent); 3824 3825 /** 3826 * @brief Creates a new vector container object. 3827 * 3828 * @param[in] parent The given vector container object. 3829 * @return The created vector container object handle. 3830 * 3831 * @since 1.14 3832 */ 3833 3834 EAPI Evas_Vg_Container* evas_vg_container_add(Evas_Object *parent); 3835 3836 /** 3837 * @brief Retrieves whether or not the given Evas_Vg_Node object is visible. 3838 * 3839 * @param[in] obj The object. 3840 * @return @c EINA_TRUE if the object is visible, @c EINA_FALSE otherwise. 3841 * 3842 * @since 1.24 3843 */ 3844 EAPI Eina_Bool evas_vg_node_visible_get(Evas_Vg_Node *obj); 3845 3846 /** 3847 * @brief Makes the given Evas_Vg_Node object visible or invisible. 3848 * 3849 * @param[in] obj The object. 3850 * @param[in] v @c EINA_TRUE if to make the object visible, @c EINA_FALSE otherwise. 3851 * 3852 * @since 1.24 3853 */ 3854 EAPI void evas_vg_node_visible_set(Evas_Vg_Node *obj, Eina_Bool v); 3855 3856 /** 3857 * @brief Retrieves the general/main color of the given Evas_Vg_Node object. 3858 * 3859 * Retrieves the “main” color's RGB component (and alpha channel) 3860 * values, <b>which range from 0 to 255</b>. For the alpha channel, 3861 * which defines the object's transparency level, 0 means totally 3862 * transparent, while 255 means opaque. These color values are 3863 * premultiplied by the alpha value. 3864 * 3865 * 3866 * @note Use @c NULL pointers on the components you're not interested 3867 * in: they'll be ignored by the function. 3868 * 3869 * @param[in] obj The object. 3870 * @param[out] r The red component of the given color. 3871 * @param[out] g The green component of the given color. 3872 * @param[out] b The blue component of the given color. 3873 * @param[out] a The alpha component of the given color. 3874 * 3875 * @since 1.24 3876 */ 3877 EAPI void evas_vg_node_color_get(Evas_Vg_Node *obj, int *r, int *g, int *b, int *a); 3878 3879 /** 3880 * @brief Sets the general/main color of the given Evas_Vg_Node object to the given 3881 * one. 3882 * 3883 * @see evas_vg_node_color_get() (for an example) 3884 * @note These color values are expected to be premultiplied by @p a. 3885 * 3886 * @param[in] obj The object. 3887 * @param[in] r The red component of the given color. 3888 * @param[in] g The green component of the given color. 3889 * @param[in] b The blue component of the given color. 3890 * @param[in] a The alpha component of the given color. 3891 * 3892 * @since 1.24 3893 */ 3894 EAPI void evas_vg_node_color_set(Evas_Vg_Node *obj, int r, int g, int b, int a); 3895 3896 /** 3897 * @brief Retrieves the geometry of the given Evas_Vg_Node object. 3898 * 3899 * @param[in] obj The object. 3900 * @param[out] x The x geometry of the given object. 3901 * @param[out] y The y geometry of the given object. 3902 * @param[out] w The w geometry of the given object. 3903 * @param[out] h The h geometry of the given object. 3904 * 3905 * @since 1.24 3906 */ 3907 EAPI void evas_vg_node_geometry_get(Evas_Vg_Node *obj, int *x, int *y, int *w, int *h); 3908 3909 /** 3910 * @brief Changes the geometry of the given Evas_Vg_Node object. 3911 * 3912 * @param[in] obj The object. 3913 * @param[in] x The x geometry of the given object. 3914 * @param[in] y The y geometry of the given object. 3915 * @param[in] w The w geometry of the given object. 3916 * @param[in] h The h geometry of the given object. 3917 * 3918 * @since 1.24 3919 * @deprecated 3920 */ 3921 EAPI void evas_vg_node_geometry_set(Evas_Vg_Node *obj, int x, int y, int w, int h) EINA_DEPRECATED; 3922 3923 /** 3924 * @brief Stack @p obj immediately below @p below. 3925 * 3926 * Objects, in a given canvas, are stacked in the order they get added 3927 * to it. This means that, if they overlap, the highest ones will 3928 * cover the lowest ones, in that order. This function is a way to 3929 * change the stacking order for the objects. 3930 * 3931 * This function is intended to be used with <b>objects belonging to 3932 * the same layer</b> in a given canvas, otherwise it will fail (and 3933 * accomplish nothing). 3934 * 3935 * If you have smart objects on your canvas and @p obj is a member of 3936 * one of them, then @p below must also be a member of the same 3937 * smart object. 3938 * 3939 * Similarly, if @p obj is not a member of a smart object, @p below 3940 * must not be either. 3941 * 3942 * @see evas_object_layer_get() 3943 * @see evas_object_layer_set() 3944 * @see evas_object_stack_below() 3945 * 3946 * @param[in] obj The object. 3947 * @param[in] below The object below which to stack. 3948 * 3949 * @since 1.24 3950 */ 3951 EAPI void evas_vg_node_stack_below(Evas_Vg_Node *obj, Evas_Vg_Node *below); 3952 3953 /** 3954 * @brief Stack @p obj immediately above @p above. 3955 * 3956 * Objects, in a given canvas, are stacked in the order they get added 3957 * to it. This means that, if they overlap, the highest ones will 3958 * cover the lowest ones, in that order. This function is a way to 3959 * change the stacking order for the objects. 3960 * 3961 * This function is intended to be used with <b>objects belonging to 3962 * the same layer</b> in a given canvas, otherwise it will fail (and 3963 * accomplish nothing). 3964 * 3965 * If you have smart objects on your canvas and @p obj is a member of 3966 * one of them, then @p above must also be a member of the same 3967 * smart object. 3968 * 3969 * Similarly, if @p obj is not a member of a smart object, @p above 3970 * must not be either. 3971 * 3972 * @see evas_object_layer_get() 3973 * @see evas_object_layer_set() 3974 * @see evas_object_stack_below() 3975 * 3976 * @param[in] obj The object. 3977 * @param[in] above The object above which to stack. 3978 * 3979 * @since 1.24 3980 */ 3981 EAPI void evas_vg_node_stack_above(Evas_Vg_Node *obj, Evas_Vg_Node *above); 3982 3983 /** 3984 * @brief Raise @p obj to the top of its layer. 3985 * 3986 * @p obj will, then, be the highest one in the layer it belongs 3987 * to. Object on other layers won't get touched. 3988 * 3989 * @see evas_object_stack_above() 3990 * @see evas_object_stack_below() 3991 * @see evas_object_lower() 3992 * 3993 * @param[in] obj The object. 3994 * 3995 * @since 1.24 3996 */ 3997 EAPI void evas_vg_node_raise(Evas_Vg_Node *obj); 3998 3999 /** 4000 * @brief Lower @p obj to the bottom of its layer. 4001 * 4002 * @p obj will, then, be the lowest one in the layer it belongs 4003 * to. Objects on other layers won't get touched. 4004 * 4005 * @see evas_object_stack_above() 4006 * @see evas_object_stack_below() 4007 * @see evas_object_raise() 4008 * 4009 * @param[in] obj The object. 4010 * 4011 * @since 1.24 4012 */ 4013 EAPI void evas_vg_node_lower(Evas_Vg_Node *obj); 4014 4015 #include "canvas/efl_canvas_vg_node_eo.legacy.h" 4016 4017 /** 4018 * @brief Get the stroke scaling factor used for stroking this path. 4019 * 4020 * @param[in] obj The object. 4021 * @return The stroke scale of the given object. 4022 * 4023 * @since 1.14 4024 */ 4025 EAPI double evas_vg_shape_stroke_scale_get(Evas_Vg_Shape *obj); 4026 4027 /** 4028 * @brief Sets the stroke scale to be used for stroking the path. 4029 * the scale property will be used along with stroke width property. 4030 * 4031 * @param[in] obj The object. 4032 * @param[in] s The stroke scale value. 4033 * 4034 * @since 1.14 4035 */ 4036 EAPI void evas_vg_shape_stroke_scale_set(Evas_Vg_Shape *obj, double s); 4037 4038 /** 4039 * @brief Gets the color used for stroking the path. 4040 * 4041 * @param[in] obj The object. 4042 * @param[out] r The red component of the given color. 4043 * @param[out] g The green component of the given color. 4044 * @param[out] b The blue component of the given color. 4045 * @param[out] a The alpha component of the given color. 4046 * 4047 * @since 1.14 4048 */ 4049 EAPI void evas_vg_shape_stroke_color_get(Evas_Vg_Shape *obj, int *r, int *g, int *b, int *a); 4050 4051 /** 4052 * @brief Sets the color to be used for stroking the path. 4053 * 4054 * @param[in] obj The object. 4055 * @param[in] r The red component of the given color. 4056 * @param[in] g The green component of the given color. 4057 * @param[in] b The blue component of the given color. 4058 * @param[in] a The alpha component of the given color. 4059 * 4060 * @since 1.14 4061 */ 4062 EAPI void evas_vg_shape_stroke_color_set(Evas_Vg_Shape *obj, int r, int g, int b, int a); 4063 4064 /** 4065 * @brief Gets the stroke width to be used for stroking the path. 4066 * 4067 * @param[in] obj The object. 4068 * @return The stroke width of the given object. 4069 * 4070 * @since 1.14 4071 */ 4072 EAPI double evas_vg_shape_stroke_width_get(Evas_Vg_Shape *obj); 4073 4074 /** 4075 * @brief Sets the stroke width to be used for stroking the path. 4076 * 4077 * @param[in] obj The object. 4078 * @param[in] w The stroke width to be used. 4079 * 4080 * @since 1.14 4081 */ 4082 EAPI void evas_vg_shape_stroke_width_set(Evas_Vg_Shape *obj, double w); 4083 4084 /** 4085 * @brief Gets the stroke location to be used for stroking the path. 4086 * 4087 * @param[in] obj The object. 4088 * @return The stroke location. 4089 * 4090 * @since 1.24 4091 */ 4092 EAPI double evas_vg_shape_stroke_location_get(Evas_Vg_Shape *obj); 4093 4094 /** 4095 * @brief Sets the stroke location to be used for stroking the path. 4096 * 4097 * @param[in] obj The object. 4098 * @param[in] centered The stroke location. 4099 * 4100 * @since 1.24 4101 */ 4102 EAPI void evas_vg_shape_stroke_location_set(Evas_Vg_Shape *obj, double centered); 4103 4104 /** 4105 * @brief Gets the stroke dash type used for stroking path. 4106 * 4107 * @param[in] obj The object. 4108 * @param[out] dash The dash types. 4109 * @param[out] length The length of dash types. 4110 * 4111 * @since 1.24 4112 */ 4113 EAPI void evas_vg_shape_stroke_dash_get(Evas_Vg_Shape *obj, const Evas_Vg_Dash **dash, unsigned int *length); 4114 4115 /** 4116 * @brief Sets the stroke dash type to be used for stroking the path. 4117 * 4118 * @param[in] obj The object. 4119 * @param[in] dash The dash types. 4120 * @param[in] length The length of dash types. 4121 * 4122 * @since 1.24 4123 */ 4124 EAPI void evas_vg_shape_stroke_dash_set(Evas_Vg_Shape *obj, const Evas_Vg_Dash *dash, unsigned int length); 4125 4126 /** 4127 * @brief Gets the cap style used for stroking path. 4128 * 4129 * @param[in] obj The object. 4130 * @return The cap style of the given object. 4131 * 4132 * @since 1.14 4133 */ 4134 EAPI Evas_Vg_Cap evas_vg_shape_stroke_cap_get(Evas_Vg_Shape *obj); 4135 4136 /** 4137 * @brief Sets the cap style to be used for stroking the path. 4138 * 4139 * The cap will be used for capping the end point of a 4140 * open subpath. 4141 * 4142 * @see Evas_Vg_Cap 4143 * 4144 * @param[in] obj The object. 4145 * @param[in] c The cap style to use , default is EVAS_VG_CAP_BUTT 4146 * 4147 * @since 1.14 4148 */ 4149 EAPI void evas_vg_shape_stroke_cap_set(Evas_Vg_Shape *obj, Evas_Vg_Cap c); 4150 4151 /** 4152 * @brief Gets the join style used for stroking path. 4153 * 4154 * @param[in] obj The object. 4155 * @return The join style of the given object. 4156 * 4157 * @since 1.14 4158 */ 4159 EAPI Evas_Vg_Join evas_vg_shape_stroke_join_get(Evas_Vg_Shape *obj); 4160 4161 /** 4162 * @brief Sets the join style to be used for stroking the path. 4163 * 4164 * The join style will be used for joining the two line segment 4165 * while stroking the path. 4166 * 4167 * @see Evas_Vg_Join 4168 * 4169 * @param[in] obj The object. 4170 * @param[in] j The join style to use, default is EVAS_VG_JOIN_MITER. 4171 * 4172 * @since 1.14 4173 */ 4174 EAPI void evas_vg_shape_stroke_join_set(Evas_Vg_Shape *obj, Evas_Vg_Join j); 4175 4176 /** 4177 * @brief Set the list of commands and points to be used to create the 4178 * content of shape. 4179 * 4180 * @see Evas_Vg_Path_Command 4181 * 4182 * @param[in] obj The object. 4183 * @param[in] op The command list. 4184 * @param[in] points The point list. 4185 * 4186 * @since 1.14 4187 */ 4188 EAPI void evas_vg_shape_path_set(Evas_Vg_Shape *obj, const Evas_Vg_Path_Command *op, const double *points); 4189 4190 /** 4191 * @brief Gets the command and points list. 4192 * 4193 * @param[in] obj The object. 4194 * @param[out] op The command list. 4195 * @param[out] points The point list. 4196 * 4197 * @since 1.14 4198 */ 4199 4200 EAPI void evas_vg_shape_path_get(Evas_Vg_Shape *obj, const Evas_Vg_Path_Command **op, const double **points); 4201 4202 /** 4203 * @brief Gets the command and points length. 4204 * 4205 * @param[in] obj The object. 4206 * @param[out] commands The command length. 4207 * @param[out] points The points length. 4208 * 4209 * @since 1.14 4210 */ 4211 EAPI void evas_vg_shape_path_length_get(Evas_Vg_Shape *obj, unsigned int *commands, unsigned int *points); 4212 4213 /** 4214 * @brief Gets the current points. 4215 * 4216 * @param[in] obj The object. 4217 * @param[out] x The x co-ordinate of current point. 4218 * @param[out] y The y co-ordinate of current point. 4219 * 4220 * @since 1.14 4221 */ 4222 EAPI void evas_vg_shape_current_get(Evas_Vg_Shape *obj, double *x, double *y); 4223 4224 /** 4225 * @brief Gets the current control points. 4226 * 4227 * @param[in] obj The object. 4228 * @param[out] x The x co-ordinate of control point. 4229 * @param[out] y The y co-ordinate of control point. 4230 * 4231 * @since 1.14 4232 */ 4233 EAPI void evas_vg_shape_current_ctrl_get(Evas_Vg_Shape *obj, double *x, double *y); 4234 4235 /** 4236 * @brief Copy the shape data from the object specified. 4237 * 4238 * @param[in] obj The object. 4239 * @param[in] dup_from The Shape object from where data will be copied. 4240 * 4241 * @since 1.14 4242 */ 4243 EAPI void evas_vg_shape_dup(Evas_Vg_Shape *obj, Evas_Vg_Shape *dup_from); 4244 4245 /** 4246 * @brief Reset the shape data of the shape object. 4247 * 4248 * @param[in] obj The object. 4249 * 4250 * @since 1.14 4251 */ 4252 EAPI void evas_vg_shape_reset(Evas_Vg_Shape *obj); 4253 4254 /** 4255 * @brief Moves the current point to the given point, 4256 * implicitly starting a new subpath and closing the previous one. 4257 * 4258 * @see evas_vg_shape_append_close() 4259 * 4260 * @param[in] obj The object. 4261 * @param[in] x The x co-ordinate of the current point. 4262 * @param[in] y The y co-ordinate of the current point. 4263 * 4264 * @since 1.14 4265 */ 4266 EAPI void evas_vg_shape_append_move_to(Evas_Vg_Shape *obj, double x, double y); 4267 4268 /** 4269 * @brief Adds a straight line from the current position to the given endPoint. 4270 * After the line is drawn, the current position is updated to be at the end 4271 * point of the line. 4272 * 4273 * @note if no current position present, it draws a line to itself, basically 4274 * a point. 4275 * 4276 * @see evas_vg_shape_append_move_to() 4277 * 4278 * @param[in] obj The object. 4279 * @param[in] x The x co-ordinate of end point of the line. 4280 * @param[in] y The y co-ordinate of end point of the line. 4281 * 4282 * @since 1.14 4283 */ 4284 EAPI void evas_vg_shape_append_line_to(Evas_Vg_Shape *obj, double x, double y); 4285 4286 /** 4287 * @brief Adds a quadratic Bezier curve between the current position and the 4288 * given end point (x,y) using the control points specified by (ctrl_x, ctrl_y). 4289 * After the path is drawn, the current position is updated to be at the end 4290 * point of the path. 4291 * 4292 * @param[in] obj The object. 4293 * @param[in] x The x co-ordinate of end point of the line. 4294 * @param[in] y The y co-ordinate of end point of the line. 4295 * @param[in] ctrl_x The x co-ordinate of control point. 4296 * @param[in] ctrl_y The y co-ordinate of control point. 4297 * 4298 * @since 1.14 4299 */ 4300 EAPI void evas_vg_shape_append_quadratic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x, double ctrl_y); 4301 4302 /** 4303 * @brief Same as evas_vg_shape_append_quadratic_to() api only difference is that it 4304 * uses the current control point to draw the bezier. 4305 * 4306 * @see evas_vg_shape_append_quadratic_to() 4307 * 4308 * @param[in] obj The object. 4309 * @param[in] x The x co-ordinate of end point of the line. 4310 * @param[in] y The y co-ordinate of end point of the line. 4311 * 4312 * @since 1.14 4313 */ 4314 EAPI void evas_vg_shape_append_squadratic_to(Evas_Vg_Shape *obj, double x, double y); 4315 4316 /** 4317 * @brief Adds a cubic Bezier curve between the current position and the 4318 * given end point (x,y) using the control points specified by 4319 * (ctrl_x0, ctrl_y0), and (ctrl_x1, ctrl_y1). After the path is drawn, 4320 * the current position is updated to be at the end point of the path. 4321 * 4322 * @param[in] obj The object. 4323 * @param[in] x The x co-ordinate of end point of the line. 4324 * @param[in] y The y co-ordinate of end point of the line. 4325 * @param[in] ctrl_x0 The x co-ordinate of 1st control point. 4326 * @param[in] ctrl_y0 The y co-ordinate of 1st control point. 4327 * @param[in] ctrl_x1 The x co-ordinate of 2nd control point. 4328 * @param[in] ctrl_y1 The y co-ordinate of 2nd control point. 4329 * 4330 * @since 1.14 4331 */ 4332 EAPI void evas_vg_shape_append_cubic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1); 4333 4334 /** 4335 * @brief Same as evas_vg_shape_append_cubic_to() api only difference is that it uses 4336 * the current control point to draw the bezier. 4337 * 4338 * @see evas_vg_shape_append_cubic_to() 4339 * 4340 * @param[in] obj The object. 4341 * @param[in] x The x co-ordinate of end point of the line. 4342 * @param[in] y The x co-ordinate of end point of the line. 4343 * @param[in] ctrl_x The x co-ordinate of 2nd control point. 4344 * @param[in] ctrl_y The y co-ordinate of 2nd control point. 4345 * 4346 * @since 1.14 4347 */ 4348 EAPI void evas_vg_shape_append_scubic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x, double ctrl_y); 4349 4350 /** 4351 * @brief Append an arc that connects from the current point int the point list 4352 * to the given point (x,y). The arc is defined by the given radius in 4353 * x-direction (rx) and radius in y direction (ry). 4354 * 4355 * @note Use this api if you know the end point's of the arc otherwise 4356 * use more convenient function evas_vg_shape_append_arc_to() 4357 * 4358 * @see evas_vg_shape_append_arc_to() 4359 * 4360 * @param[in] obj The object. 4361 * @param[in] x The x co-ordinate of end point of the arc. 4362 * @param[in] y The y co-ordinate of end point of the arc. 4363 * @param[in] rx The radius of arc in x direction. 4364 * @param[in] ry The radius of arc in y direction. 4365 * @param[in] angle The x-axis rotation , normally 0. 4366 * @param[in] large_arc Defines whether to draw the larger arc or smaller arc joining two point. 4367 * @param[in] sweep Defines whether the arc will be drawn counter-clockwise or clockwise from current point to the end point taking into account the large_arc property. 4368 * 4369 * @since 1.14 4370 */ 4371 EAPI void evas_vg_shape_append_arc_to(Evas_Vg_Shape *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep); 4372 4373 /** 4374 * @brief Append an arc that enclosed in the given rectangle (x, y, w, h). The 4375 * angle is defined in counter clock wise , use -ve angle for clockwise arc. 4376 * 4377 * @param[in] obj The object. 4378 * @param[in] y The x co-ordinate of the rect. 4379 * @param[in] y The y co-ordinate of the rect. 4380 * @param[in] w The width of the rect. 4381 * @param[in] h The height of the rect. 4382 * @param[in] start_angle The angle at which the arc will start. 4383 * @param[in] sweep_length The length of the arc. 4384 * 4385 * @since 1.18 4386 */ 4387 EAPI void evas_vg_shape_append_arc(Evas_Vg_Shape *obj, double x, double y, double w, double h, double start_angle, double sweep_length); 4388 4389 /** 4390 * @brief Closes the current subpath by drawing a line to the beginning of the subpath, 4391 * automatically starting a new path. The current point of the new path is 4392 * (0, 0). 4393 * 4394 * @note If the subpath does not contain any points, this function does nothing. 4395 * 4396 * @param[in] obj The object. 4397 * 4398 * @since 1.14 4399 */ 4400 EAPI void evas_vg_shape_append_close(Evas_Vg_Shape *obj); 4401 4402 /** 4403 * @brief Append a circle with given center and radius. 4404 * 4405 * @see evas_vg_shape_append_arc() 4406 * 4407 * @param[in] obj The object. 4408 * @param[in] x The x co-ordinate of the center of the circle. 4409 * @param[in] y The y co-ordinate of the center of the circle. 4410 * @param[in] radius The radius of the circle. 4411 * 4412 * @since 1.14 4413 */ 4414 EAPI void evas_vg_shape_append_circle(Evas_Vg_Shape *obj, double x, double y, double radius); 4415 4416 /** 4417 * @brief Append the given rectangle with rounded corner to the path. 4418 * 4419 * The xr and yr arguments specify the radii of the ellipses defining the 4420 * corners of the rounded rectangle. 4421 * 4422 * @note xr and yr are specified in terms of width and height respectively. 4423 * @note if xr and yr are 0, then it will draw a rectangle without rounded corner. 4424 * 4425 * @param[in] obj The object. 4426 * @param[in] x The x co-ordinate of the rectangle. 4427 * @param[in] y The y co-ordinate of the rectangle. 4428 * @param[in] w The width of the rectangle. 4429 * @param[in] h The height of the rectangle. 4430 * @param[in] rx The x radius of the rounded corner and should be in range [0 to w/2]. 4431 * @param[in] ry The y radius of the rounded corner and should be in range [0 to h/2]. 4432 * 4433 * @since 1.14 4434 */ 4435 EAPI void evas_vg_shape_append_rect(Evas_Vg_Shape *obj, double x, double y, double w, double h, double rx, double ry); 4436 4437 /** 4438 * @brief Append the SVG path data. 4439 * 4440 * @param[in] obj The object. 4441 * @param[in] svg_path_data The svg path data to append. 4442 * 4443 * @since 1.24 4444 */ 4445 EAPI void evas_vg_shape_append_svg_path(Evas_Vg_Shape *obj, const char *svg_path_data); 4446 4447 /** 4448 * @brief Creates intermediary path part-way between two paths 4449 * 4450 * Sets the points of the @c obj as the linear interpolation of the points in 4451 * the @c from and @c to paths. The path's x,y position and control point 4452 * coordinates are likewise interpolated. 4453 * 4454 * The @c from and @c to paths must not already have equivalent points, and 4455 * @c to must contain at least as many points as @c from, else the function 4456 * returns @c false with no interpolation performed. If @c to has more points 4457 * than @c from, the excess points are ignored. 4458 * 4459 * @param[in] obj The object. 4460 * @param[in] from The source path. 4461 * @param[in] to The destination path. 4462 * @param[in] pos_map The position map in range 0.0 to 1.0. 4463 * 4464 * @since 1.24 4465 */ 4466 EAPI Eina_Bool evas_vg_shape_interpolate(Evas_Vg_Shape *obj, const Eo *from, const Eo *to, double pos_map); 4467 4468 /** 4469 * @brief Check if the given objects have equal commands. 4470 * 4471 * @param[in] obj The object. 4472 * @param[in] with The target object. 4473 * 4474 * @return True on equal, @c false otherwise. 4475 * 4476 * @since 1.24 4477 */ 4478 EAPI Eina_Bool evas_vg_shape_equal_commands(Evas_Vg_Shape *obj, const Eo *with); 4479 4480 /** 4481 * @brief Set a vg object as the fill property. 4482 * 4483 * @param[in] obj The object whose fill property gets modified. 4484 * @param[in] f The object content to be used for filling. 4485 * 4486 * @since 1.24 4487 */ 4488 EAPI void evas_vg_shape_fill_set(Evas_Vg_Shape *obj, Evas_Vg_Node *f); 4489 4490 /** 4491 * @brief Returns the object that is set for the fill property. 4492 * 4493 * @param[in] obj The object whose fill property is inspected. 4494 * @return The object that is set as fill property. 4495 * 4496 * @since 1.24 4497 */ 4498 EAPI Evas_Vg_Node* evas_vg_shape_fill_get(const Evas_Vg_Shape *obj); 4499 4500 /** 4501 * @brief Set a vg object as the stroke fill property. 4502 * 4503 * @param[in] obj The object whose stroke fill property gets modified. 4504 * @param[in] f The object content will be used for stroke filling. 4505 * 4506 * @since 1.24 4507 */ 4508 EAPI void evas_vg_shape_stroke_fill_set(Evas_Vg_Shape *obj, Evas_Vg_Node *f); 4509 4510 /** 4511 * @brief Returns the object that is set for the stroke fill property. 4512 * 4513 * @param[in] obj The object whose stroke fill property is inspected. 4514 * @return The object that is set as stroke fill property. 4515 * 4516 * @since 1.24 4517 */ 4518 EAPI Evas_Vg_Node* evas_vg_shape_stroke_fill_get(const Evas_Vg_Shape *obj); 4519 4520 #include "canvas/efl_canvas_vg_shape_eo.legacy.h" 4521 4522 /** 4523 * @brief Set the list of color stops for the gradient. 4524 * 4525 * @param[in] obj The object. 4526 * @param[in] colors The color stops list. 4527 * @param[in] length The length of the list. 4528 * 4529 * @since 1.14 4530 */ 4531 EAPI void evas_vg_gradient_stop_set(Evas_Vg_Gradient *obj, const Evas_Vg_Gradient_Stop *colors, unsigned int length); 4532 4533 /** 4534 * @brief Get the list of color stops. 4535 * 4536 * @param[in] obj The object. 4537 * @param[out] colors The color stops list. 4538 * @param[out] length The length of the list. 4539 * 4540 * @since 1.14 4541 */ 4542 EAPI void evas_vg_gradient_stop_get(Evas_Vg_Gradient *obj, const Evas_Vg_Gradient_Stop **colors, unsigned int *length); 4543 4544 /** 4545 * @brief Specifies the spread method that should be used for this gradient. 4546 * 4547 * @param[in] obj The object. 4548 * @param[in] s The spread type to be used. 4549 * 4550 * @since 1.14 4551 */ 4552 EAPI void evas_vg_gradient_spread_set(Evas_Vg_Gradient *obj, Evas_Vg_Gradient_Spread s); 4553 4554 /** 4555 * @brief Returns the spread method use by this gradient. The default is 4556 * EVAS_VG_GRADIENT_SPREAD_PAD. 4557 * 4558 * @param[in] obj The object. 4559 * @return The spread type of the given object. 4560 * 4561 * @since 1.14 4562 */ 4563 EAPI Evas_Vg_Gradient_Spread evas_vg_gradient_spread_get(Evas_Vg_Gradient *obj); 4564 4565 /** 4566 * @brief Creates a new linear gradient object. 4567 * 4568 * @param[in] parent The given vector container object. 4569 * @return The created linear gradient object handle. 4570 * 4571 * @since 1.24 4572 */ 4573 EAPI Evas_Vg_Gradient_Linear* evas_vg_gradient_linear_add(Evas_Vg_Container *parent); 4574 4575 /** 4576 * @brief Sets the start point of this linear gradient. 4577 * 4578 * @param[in] obj The object. 4579 * @param[in] x The x co-ordinate of start point. 4580 * @param[in] y The y co-ordinate of start point 4581 * 4582 * @since 1.24 4583 */ 4584 EAPI void evas_vg_gradient_linear_start_set(Evas_Vg_Gradient_Linear *obj, double x, double y); 4585 4586 /** 4587 * @brief Gets the start point of this linear gradient. 4588 * 4589 * @param[in] obj The object. 4590 * @param[out] x The x co-ordinate of start point. 4591 * @param[out] y The y co-ordinate of start point. 4592 * 4593 * @since 1.24 4594 */ 4595 EAPI void evas_vg_gradient_linear_start_get(Evas_Vg_Gradient_Linear *obj, double *x, double *y); 4596 4597 /** 4598 * @brief Sets the end point of this linear gradient. 4599 * 4600 * @param[in] obj The object. 4601 * @param[in] x The x co-ordinate of end point. 4602 * @param[in] y The y co-ordinate of end point. 4603 * 4604 * @since 1.24 4605 */ 4606 EAPI void evas_vg_gradient_linear_end_set(Evas_Vg_Gradient_Linear *obj, double x, double y); 4607 4608 /** 4609 * @brief Gets the end point of this linear gradient. 4610 * 4611 * @param[in] obj The object. 4612 * @param[out] x The x co-ordinate of end point. 4613 * @param[out] y The y co-ordinate of end point. 4614 * 4615 * @since 1.24 4616 */ 4617 EAPI void evas_vg_gradient_linear_end_get(Evas_Vg_Gradient_Linear *obj, double *x, double *y); 4618 4619 /** 4620 * @brief Creates a new radial gradient object. 4621 * 4622 * @param[in] parent The given vector container object. 4623 * @return The created radial gradient object handle. 4624 * 4625 * @since 1.24 4626 */ 4627 EAPI Evas_Vg_Gradient_Radial* evas_vg_gradient_radial_add(Evas_Vg_Container *parent); 4628 4629 /** 4630 * @brief Sets the center of this radial gradient. 4631 * 4632 * @param[in] obj The object. 4633 * @param[in] x The x co-ordinate of center point. 4634 * @param[in] y The y co-ordinate of center point. 4635 * 4636 * @since 1.24 4637 */ 4638 EAPI void evas_vg_gradient_radial_center_set(Evas_Vg_Gradient_Radial *obj, double x, double y); 4639 4640 /** 4641 * @brief Gets the center of this radial gradient. 4642 * 4643 * @param[in] obj The object. 4644 * @param[out] x The x co-ordinate of center point. 4645 * @param[out] y The y co-ordinate of center point. 4646 * 4647 * @since 1.24 4648 */ 4649 EAPI void evas_vg_gradient_radial_center_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y); 4650 4651 /** 4652 * @brief Sets the center radius of this radial gradient. 4653 * 4654 * @param[in] obj The object. 4655 * @param[in] r The center radius. 4656 * 4657 * @since 1.24 4658 */ 4659 EAPI void evas_vg_gradient_radial_radius_set(Evas_Vg_Gradient_Radial *obj, double r); 4660 4661 /** 4662 * @brief Gets the center radius of this radial gradient. 4663 * 4664 * @param[in] obj The object. 4665 * @return The center radius of the given object. 4666 * 4667 * @since 1.24 4668 */ 4669 EAPI double evas_vg_gradient_radial_radius_get(Evas_Vg_Gradient_Radial *obj); 4670 4671 /** 4672 * @brief Sets the focal point of this radial gradient. 4673 * 4674 * @param[in] obj The object. 4675 * @param[in] x The x co-ordinate of focal point. 4676 * @param[in] y The y co-ordinate of focal point. 4677 * 4678 * @since 1.24 4679 */ 4680 EAPI void evas_vg_gradient_radial_focal_set(Evas_Vg_Gradient_Radial *obj, double x, double y); 4681 4682 /** 4683 * @brief Gets the focal point of this radial gradient. 4684 * 4685 * @param[in] obj The object. 4686 * @param[out] x The x co-ordinate of focal point. 4687 * @param[out] y The y co-ordinate of focal point. 4688 * 4689 * @since 1.24 4690 */ 4691 EAPI void evas_vg_gradient_radial_focal_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y); 4692 4693 /** 4694 * @} 4695 */ 4696 4697 /** 4698 * @addtogroup Evas_Object_Image 4699 * 4700 * @{ 4701 */ 4702 4703 /** 4704 * Creates a new image object on the given Evas @p e canvas. 4705 * 4706 * @param e The given canvas. 4707 * @return The created image object handle. 4708 * 4709 * @note If you intend to @b display an image somehow in a GUI, 4710 * besides binding it to a real image file/source (with 4711 * evas_object_image_file_set(), for example), you'll have to tell 4712 * this image object how to fill its space with the pixels it can get 4713 * from the source. See evas_object_image_filled_add(), for a helper 4714 * on the common case of scaling up an image source to the whole area 4715 * of the image object. 4716 * 4717 * @see evas_object_image_fill_set() 4718 * 4719 * Example: 4720 * @code 4721 * img = evas_object_image_add(canvas); 4722 * evas_object_image_file_set(img, "/path/to/img", NULL); 4723 * @endcode 4724 */ 4725 EAPI Evas_Object *evas_object_image_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 4726 4727 /** 4728 * Creates a new image object that @b automatically scales its bound 4729 * image to the object's area, on both axis. 4730 * 4731 * @param e The given canvas. 4732 * @return The created image object handle. 4733 * 4734 * This is a helper function around evas_object_image_add() and 4735 * evas_object_image_filled_set(). It has the same effect of applying 4736 * those functions in sequence, which is a very common use case. 4737 * 4738 * @note Whenever this object gets resized, the bound image will be 4739 * rescaled, too. 4740 * 4741 * @see evas_object_image_add() 4742 * @see evas_object_image_filled_set() 4743 * @see evas_object_image_fill_set() 4744 */ 4745 EAPI Evas_Object *evas_object_image_filled_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 4746 4747 /** 4748 * Sets the data for an image from memory to be loaded 4749 * 4750 * This is the same as evas_object_image_file_set() but the file to be loaded 4751 * may exist at an address in memory (the data for the file, not the filename 4752 * itself). The @p data at the address is copied and stored for future use, so 4753 * no @p data needs to be kept after this call is made. It will be managed and 4754 * freed for you when no longer needed. The @p size is limited to 2 gigabytes 4755 * in size, and must be greater than 0. A @c NULL @p data pointer is also 4756 * invalid. Set the filename to @c NULL to reset to empty state and have the 4757 * image file data freed from memory using evas_object_image_file_set(). 4758 * 4759 * The @p format is optional (pass @c NULL if you don't need/use it). It is 4760 * used to help Evas guess better which loader to use for the data. It may 4761 * simply be the "extension" of the file as it would normally be on disk 4762 * such as "jpg" or "png" or "gif" etc. 4763 * 4764 * @param obj The given image object. 4765 * @param data The image file data address 4766 * @param size The size of the image file data in bytes 4767 * @param format The format of the file (optional), or @c NULL if not needed 4768 * @param key The image key in file, or @c NULL. 4769 */ 4770 EAPI void evas_object_image_memfile_set(Evas_Object *obj, void *data, int size, char *format, char *key) EINA_ARG_NONNULL(1, 2); 4771 4772 /** 4773 * @def EVAS_NATIVE_SURFACE_VERSION 4774 * Magic version number to know what the native surface struct looks like 4775 */ 4776 4777 #define EVAS_NATIVE_SURFACE_VERSION 5 4778 4779 /** 4780 * Native surface types that image object supports 4781 * 4782 * @see Evas_Native_Surface 4783 * @see evas_object_image_native_surface_set() 4784 */ 4785 typedef enum _Evas_Native_Surface_Type 4786 { 4787 EVAS_NATIVE_SURFACE_NONE, /**< No surface type */ 4788 EVAS_NATIVE_SURFACE_X11, /**< X Window system based type. pixmap id or visual of the pixmap */ 4789 EVAS_NATIVE_SURFACE_OPENGL, /**< OpenGL system based type. texture or framebuffer id*/ 4790 EVAS_NATIVE_SURFACE_WL, /**< Wayland system based type. buffer of surface */ 4791 EVAS_NATIVE_SURFACE_TBM, /**< Tizen system based type. tbm surface @since 1.14 */ 4792 EVAS_NATIVE_SURFACE_EVASGL, /**< Evas GL based type. evas gl surface @since 1.14 */ 4793 EVAS_NATIVE_SURFACE_WL_DMABUF, /**< Wayland system based type. using dmabuf @since 1.18 */ 4794 } Evas_Native_Surface_Type; 4795 4796 /** 4797 * Native surface types that image object supports 4798 * 4799 * @see Evas_Native_Surface 4800 * @see evas_object_image_native_surface_set() 4801 */ 4802 typedef enum _Evas_Native_Surface_Status 4803 { 4804 EVAS_NATIVE_SURFACE_STATUS_SCANOUT_ON, 4805 EVAS_NATIVE_SURFACE_STATUS_SCANOUT_OFF, 4806 EVAS_NATIVE_SURFACE_STATUS_PLANE_ASSIGN, 4807 EVAS_NATIVE_SURFACE_STATUS_PLANE_RELEASE, 4808 } Evas_Native_Surface_Status; 4809 4810 typedef void (*Evas_Native_Scanout_Handler)(void *scanout_data, Evas_Native_Surface_Status status); 4811 4812 typedef struct _Evas_Native_Scanout 4813 { 4814 Evas_Native_Scanout_Handler handler; 4815 void *data; 4816 } Evas_Native_Scanout; 4817 4818 /** 4819 * @brief A generic datatype for engine specific native surface information. 4820 * 4821 * Please fill up Evas_Native_Surface fields that regarded with current surface 4822 * type. If you want to set the native surface type to 4823 * EVAS_NATIVE_SURFACE_X11, you need to set union data with x11.visual or 4824 * x11.pixmap. If you need to set the native surface as 4825 * EVAS_NATIVE_SURFACE_OPENGL, on the other hand, you need to set union data 4826 * with opengl.texture_id or opengl.framebuffer_id and so on. 4827 * If you need to set the native surface as EVAS_NATIVE_SURFACE_WL, 4828 * you need to set union data with wl.legacy_buffer. 4829 * If you need to set the native surface as EVAS_NATIVE_SURFACE_TBM, 4830 * you need to set union data with tbm surface. The version field 4831 * should be set with EVAS_NATIVE_SURFACE_VERSION in order to check abi 4832 * break in your application on the different efl library versions. 4833 * 4834 * @warning Native surface types totally depend on the system. Please 4835 * be aware that the types are supported on your system before using 4836 * them. 4837 * 4838 * @note The information stored in an @c Evas_Native_Surface returned by 4839 * @ref evas_gl_native_surface_get() is not meant to be used by 4840 * applications except for passing it to 4841 * @ref evas_object_image_native_surface_set(). 4842 * 4843 * @see evas_object_image_native_surface_set() 4844 */ 4845 typedef struct _Evas_Native_Surface 4846 { 4847 int version; /**< Current Native Surface Version. Use EVAS_NATIVE_SURFACE_VERSION */ 4848 Evas_Native_Surface_Type type; /**< Surface type. @see Evas_Native_Surface_Type */ 4849 union { 4850 struct 4851 { 4852 void *visual; /**< visual of the pixmap to use (Visual) */ 4853 unsigned long pixmap; /**< pixmap id to use (Pixmap) */ 4854 unsigned int multiple_buffer; /**< From version 4. 1 if pixmap is multiple buffer pixmap such as named pixmap created by enlightenment. driver dependent. @since 1.19 */ 4855 } x11; /**< Set this struct fields if surface data is X11 based. */ 4856 4857 struct 4858 { 4859 unsigned int texture_id; /**< opengl texture id to use from glGenTextures() */ 4860 unsigned int framebuffer_id; /**< 0 if not a FBO, FBO id otherwise from glGenFramebuffers() */ 4861 unsigned int internal_format; /**< same as 'internalFormat' for glTexImage2D() */ 4862 unsigned int format; /**< same as 'format' for glTexImage2D() */ 4863 unsigned int x, y, w, h; /**< region inside the texture to use (image size is assumed as texture size, with 0, 0 being the top-left and co-ordinates working down to the right and bottom being positive) */ 4864 } opengl; /**< Set this struct fields if surface data is OpenGL based. */ 4865 struct 4866 { 4867 void *legacy_buffer; /**< wayland client buffer to use */ 4868 } wl; /**< Set this struct fields if surface data is Wayland based. */ 4869 struct 4870 { 4871 void *attr; /**< Pointer to dmabuf attributes - contents copied */ 4872 void *resource; /**< Wayland resource pointer, kept as is */ 4873 Evas_Native_Scanout scanout; 4874 } wl_dmabuf; /**< Set this struct fields if surface data is Wayland dmabuf based. @since 1.18 */ 4875 struct 4876 { 4877 void *buffer; /**< tbm surface buffer to use @since 1.14 */ 4878 } tbm; /**< Set this struct fields if surface data is Tizen based. @since 1.14 */ 4879 struct 4880 { 4881 void *surface; /**< evas gl surface to use @since 1.14 */ 4882 } evasgl; /**< Set this struct fields if surface data is Evas GL based. @since 1.14 */ 4883 } data; /**< Choose one union data according to your surface. */ 4884 } Evas_Native_Surface; 4885 4886 /** 4887 * Set the native surface of a given image of the canvas 4888 * 4889 * @param obj The given canvas pointer. 4890 * @param surf The new native surface. 4891 * 4892 * This function sets a native surface of a given canvas image. 4893 * 4894 */ 4895 EAPI void evas_object_image_native_surface_set(Evas_Object *obj, Evas_Native_Surface *surf) EINA_ARG_NONNULL(1, 2); 4896 4897 /** 4898 * @brief Get the native surface of a given image of the canvas 4899 * 4900 * This function returns the native surface of a given canvas image. 4901 * 4902 * @return The native surface. 4903 */ 4904 EAPI Evas_Native_Surface *evas_object_image_native_surface_get(const Evas_Object *obj); 4905 4906 /** 4907 * Possible orientation options for evas_object_image_orient_set(). 4908 * 4909 * @since 1.14 4910 */ 4911 typedef enum 4912 { 4913 EVAS_IMAGE_ORIENT_NONE = 0, /**< no orientation change */ 4914 EVAS_IMAGE_ORIENT_0 = 0, /**< no orientation change */ 4915 EVAS_IMAGE_ORIENT_90 = 1, /**< rotate 90 degrees clockwise */ 4916 EVAS_IMAGE_ORIENT_180 = 2, /**< rotate 180 degrees clockwise */ 4917 EVAS_IMAGE_ORIENT_270 = 3, /**< rotate 90 degrees counter-clockwise (i.e. 270 degrees clockwise) */ 4918 EVAS_IMAGE_FLIP_HORIZONTAL = 4, /**< flip image horizontally (along the x = width / 2 line) */ 4919 EVAS_IMAGE_FLIP_VERTICAL = 5, /**< flip image vertically (along the y = height / 2 line) */ 4920 EVAS_IMAGE_FLIP_TRANSPOSE = 6, /**< flip image along the y = (width - x) line (bottom-left to top-right) */ 4921 EVAS_IMAGE_FLIP_TRANSVERSE = 7 /**< flip image along the y = x line (top-left to bottom-right) */ 4922 } Evas_Image_Orient; 4923 4924 /** 4925 * Preload an image object's image data in the background 4926 * 4927 * @param obj The given image object. 4928 * @param cancel @c EINA_FALSE will add it the preloading work queue, 4929 * @c EINA_TRUE will remove it (if it was issued before). 4930 * 4931 * This function requests the preload of the data image in the 4932 * background. The work is queued before being processed (because 4933 * there might be other pending requests of this type). 4934 * 4935 * Whenever the image data gets loaded, Evas will call 4936 * #EVAS_CALLBACK_IMAGE_PRELOADED registered callbacks on @p obj (what 4937 * may be immediately, if the data was already preloaded before). 4938 * 4939 * Use @c EINA_TRUE for @p cancel on scenarios where you don't need 4940 * the image data preloaded anymore. 4941 * 4942 * @note Any evas_object_show() call after evas_object_image_preload() 4943 * will make the latter to be @b cancelled, with the loading process 4944 * now taking place @b synchronously (and, thus, blocking the return 4945 * of the former until the image is loaded). It is highly advisable, 4946 * then, that the user preload an image with it being @b hidden, just 4947 * to be shown on the #EVAS_CALLBACK_IMAGE_PRELOADED event's callback. 4948 */ 4949 EAPI void evas_object_image_preload(Evas_Object *obj, Eina_Bool cancel) EINA_ARG_NONNULL(1); 4950 4951 /** 4952 * Clear the source object on a proxy image object. 4953 * 4954 * @param obj Image object to clear source of. 4955 * @return @c EINA_TRUE on success, @c EINA_FALSE on error. 4956 * 4957 * This is equivalent to calling evas_object_image_source_set() with a 4958 * @c NULL source. 4959 */ 4960 EAPI Eina_Bool evas_object_image_source_unset(Evas_Object *obj) EINA_ARG_NONNULL(1); 4961 4962 /** 4963 * 4964 * Set the source file from where an image object must fetch the real 4965 * image data (it may be an Eet file, besides pure image ones). 4966 * 4967 * If the file supports multiple data stored in it (as Eet files do), 4968 * you can specify the key to be used as the index of the image in 4969 * this file. 4970 * 4971 * Example: 4972 * @code 4973 * img = evas_object_image_add(canvas); 4974 * evas_object_image_file_set(img, "/path/to/img", NULL); 4975 * err = evas_object_image_load_error_get(img); 4976 * if (err != EVAS_LOAD_ERROR_NONE) 4977 * { 4978 * fprintf(stderr, "could not load image '%s'. error string is \"%s\"\n", 4979 * valid_path, evas_load_error_str(err)); 4980 * } 4981 * else 4982 * { 4983 * evas_object_image_fill_set(img, 0, 0, w, h); 4984 * evas_object_resize(img, w, h); 4985 * evas_object_show(img); 4986 * } 4987 * @endcode 4988 * 4989 * @param[in] obj The object 4990 * @param[in] file The image file path. 4991 * @param[in] key The image key in @p file (if its an Eet one), or @c 4992 * NULL, otherwise. 4993 */ 4994 EAPI void evas_object_image_file_set(Eo *obj, const char *file, const char *key); 4995 4996 /** 4997 * 4998 * Retrieve the source file from where an image object is to fetch the 4999 * real image data (it may be an Eet file, besides pure image ones). 5000 * 5001 * You must @b not modify the strings on the returned pointers. 5002 * 5003 * @note Use @c NULL pointers on the file components you're not 5004 * interested in: they'll be ignored by the function. 5005 * 5006 * @param[in] obj The object 5007 * @param[out] file The image file path. 5008 * @param[out] key The image key in @p file (if its an Eet one), or @c 5009 * NULL, otherwise. 5010 */ 5011 EAPI void evas_object_image_file_get(const Eo *obj, const char **file, const char **key); 5012 5013 /** 5014 * 5015 * Set the source mmaped file from where an image object must fetch the real 5016 * image data (it must be an Eina_File). 5017 * 5018 * If the file supports multiple data stored in it (as Eet files do), 5019 * you can specify the key to be used as the index of the image in 5020 * this file. 5021 * 5022 * @since 1.8 5023 * 5024 * @param[in] obj The object 5025 * @param[in] f The mmaped file 5026 * @param[in] key The image key in @p file (if its an Eet one), or @c 5027 * NULL, otherwise. 5028 */ 5029 EAPI void evas_object_image_mmap_set(Eo *obj, const Eina_File *f, const char *key); 5030 5031 /** 5032 * 5033 * Get the source mmaped file from where an image object must fetch the real 5034 * image data (it must be an Eina_File). 5035 * 5036 * If the file supports multiple data stored in it (as Eet files do), 5037 * you can get the key to be used as the index of the image in 5038 * this file. 5039 * 5040 * @since 1.10 5041 * 5042 * @param[in] obj The object 5043 * @param[out] f The mmaped file 5044 * @param[out] key The image key in @p file (if its an Eet one), or @c 5045 * NULL, otherwise. 5046 */ 5047 EAPI void evas_object_image_mmap_get(const Eo *obj, const Eina_File **f, const char **key); 5048 5049 /** 5050 * 5051 * Save the given image object's contents to an (image) file. 5052 * Proxy object is image object, but it doesn't have contents. So you can't use this function for proxy objects. 5053 * 5054 * The extension suffix on @p file will determine which <b>saver 5055 * module</b> Evas is to use when saving, thus the final file's 5056 * format. If the file supports multiple data stored in it (Eet ones), 5057 * you can specify the key to be used as the index of the image in it. 5058 * 5059 * You can specify some flags when saving the image. Currently 5060 * acceptable flags are @c quality and @c compress. Eg.: @c 5061 * "quality=100 compress=9" 5062 * 5063 * quality is hint for the quality of image,0-100. 0 means low quality 5064 * and saved image size is small. 100 means high quality and saved image size is big. 5065 * 5066 * compress is hint for the compression modes (Eet ones) or for the compression flags (Png one) 5067 * (1 == compress, 0 = don't compress). 5068 * 5069 * @param[in] obj The object 5070 * @param[in] file The filename to be used to save the image (extension 5071 * obligatory). 5072 * @param[in] key The image key in the file (if an Eet one), or @c NULL, 5073 * otherwise. 5074 * @param[in] flags String containing the flags to be used (@c NULL for 5075 none). 5076 */ 5077 EAPI Eina_Bool evas_object_image_save(const Eo *obj, const char *file, const char *key, const char *flags) EINA_ARG_NONNULL(2); 5078 5079 /** 5080 * 5081 * Check if an image object can be animated (have multiple frames) 5082 * 5083 * @param[in] obj The object 5084 * @return whether obj support animation 5085 * 5086 * This returns if the image file of an image object is capable of animation 5087 * such as an animated gif file might. This is only useful to be called once 5088 * the image object file has been set. 5089 * 5090 * Example: 5091 * @code 5092 * extern Evas_Object *obj; 5093 * 5094 * if (evas_object_image_animated_get(obj)) 5095 * { 5096 * int frame_count; 5097 * int loop_count; 5098 * Evas_Image_Animated_Loop_Hint loop_type; 5099 * double duration; 5100 * 5101 * frame_count = evas_object_image_animated_frame_count_get(obj); 5102 * printf("This image has %d frames\n",frame_count); 5103 * 5104 * duration = evas_object_image_animated_frame_duration_get(obj,1,0); 5105 * printf("Frame 1's duration is %f. You had better set object's frame to 2 after this duration using timer\n"); 5106 * 5107 * loop_count = evas_object_image_animated_loop_count_get(obj); 5108 * printf("loop count is %d. You had better run loop %d times\n",loop_count,loop_count); 5109 * 5110 * loop_type = evas_object_image_animated_loop_type_get(obj); 5111 * if (loop_type == EVAS_IMAGE_ANIMATED_HINT_LOOP) 5112 * printf("You had better set frame like 1->2->3->1->2->3...\n"); 5113 * else if (loop_type == EVAS_IMAGE_ANIMATED_HINT_PINGPONG) 5114 * printf("You had better set frame like 1->2->3->2->1->2...\n"); 5115 * else 5116 * printf("Unknown loop type\n"); 5117 * 5118 * evas_object_image_animated_frame_set(obj,1); 5119 * printf("You set image object's frame to 1. You can see frame 1\n"); 5120 * } 5121 * @endcode 5122 * 5123 * @see evas_object_image_animated_get() 5124 * @see evas_object_image_animated_frame_count_get() 5125 * @see evas_object_image_animated_loop_type_get() 5126 * @see evas_object_image_animated_loop_count_get() 5127 * @see evas_object_image_animated_frame_duration_get() 5128 * @see evas_object_image_animated_frame_set() 5129 * @since 1.1 5130 * 5131 */ 5132 EAPI Eina_Bool evas_object_image_animated_get(const Eo *obj); 5133 5134 /** 5135 * @brief Set the frame to current frame of an image object. 5136 * 5137 * This set image object's current frame to frame_num with 1 being the first 5138 * frame. 5139 * 5140 * See also @ref evas_object_image_animated_get, 5141 * @ref evas_object_image_animated_frame_count_get, 5142 * @ref evas_object_image_animated_loop_type_get, 5143 * @ref evas_object_image_animated_loop_count_get, 5144 * @ref evas_object_image_animated_frame_duration_get. 5145 * @ref evas_object_image_animated_frame_get. 5146 * 5147 * @param[in] obj The object 5148 * @param[in] frame_index The index of current frame. 5149 * 5150 * @since 1.1 5151 */ 5152 EAPI void evas_object_image_animated_frame_set(Evas_Object *obj, int frame_index); 5153 5154 /** 5155 * @brief Get the frame to current frame of an image object. 5156 * 5157 * This returns image object's current frame. 5158 * 5159 * See also @ref evas_object_image_animated_get, 5160 * @ref evas_object_image_animated_frame_count_get, 5161 * @ref evas_object_image_animated_loop_type_get, 5162 * @ref evas_object_image_animated_loop_count_get, 5163 * @ref evas_object_image_animated_frame_duration_get. 5164 * @ref evas_object_image_animated_frame_set. 5165 * 5166 * @param[in] obj The object 5167 * @return The index of current frame. 5168 * 5169 * @since 1.24 5170 */ 5171 EAPI int evas_object_image_animated_frame_get(Evas_Object *obj); 5172 5173 /** 5174 * @brief Get the total number of frames of the image object. 5175 * 5176 * This returns total number of frames the image object supports (if animated). 5177 * 5178 * See also @ref evas_object_image_animated_get, 5179 * @ref evas_object_image_animated_loop_type_get, 5180 * @ref evas_object_image_animated_loop_count_get, 5181 * @ref evas_object_image_animated_frame_duration_get. 5182 * 5183 * @return The number of frames. 5184 * 5185 * @since 1.1 5186 */ 5187 EAPI int evas_object_image_animated_frame_count_get(const Evas_Object *obj); 5188 5189 /** 5190 * @brief Get the kind of looping the image object does. 5191 * 5192 * This returns the kind of looping the image object wants to do. 5193 * 5194 * If it returns EVAS_IMAGE_ANIMATED_HINT_LOOP, you should display frames in a 5195 * sequence like: 1->2->3->1->2->3->1... 5196 * 5197 * If it returns EVAS_IMAGE_ANIMATED_HINT_PINGPONG, it is better to display 5198 * frames in a sequence like: 1->2->3->2->1->2->3->1... 5199 * 5200 * The default type is EVAS_IMAGE_ANIMATED_HINT_LOOP. 5201 * 5202 * See also @ref evas_object_image_animated_get, 5203 * @ref evas_object_image_animated_frame_count_get, 5204 * @ref evas_object_image_animated_loop_count_get, 5205 * @ref evas_object_image_animated_frame_duration_get. 5206 * 5207 * @param[in] obj The object 5208 * @return Loop type of the image object. 5209 * 5210 * @since 1.1 5211 */ 5212 EAPI Evas_Image_Animated_Loop_Hint evas_object_image_animated_loop_type_get(const Evas_Object *obj); 5213 5214 /** 5215 * @brief Get the number times the animation of the object loops. 5216 * 5217 * This returns loop count of image. The loop count is the number of times the 5218 * animation will play fully from first to last frame until the animation 5219 * should stop (at the final frame). 5220 * 5221 * If 0 is returned, then looping should happen indefinitely (no limit to the 5222 * number of times it loops). 5223 * 5224 * See also @ref evas_object_image_animated_get, 5225 * @ref evas_object_image_animated_frame_count_get, 5226 * @ref evas_object_image_animated_loop_type_get, 5227 * @ref evas_object_image_animated_frame_duration_get. 5228 * 5229 * @param[in] obj The object 5230 * @return The number of loop of an animated image object. 5231 * 5232 * @since 1.1 5233 */ 5234 EAPI int evas_object_image_animated_loop_count_get(const Evas_Object *obj); 5235 5236 /** 5237 * @brief Get the duration of a sequence of frames. 5238 * 5239 * This returns total duration that the specified sequence of frames should 5240 * take in seconds. 5241 * 5242 * If you set start_frame to 1 and frame_num 0, you get frame 1's duration. If 5243 * you set start_frame to 1 and frame_num 1, you get frame 1's duration + 5244 * frame2's duration. 5245 * 5246 * See also @ref evas_object_image_animated_get, 5247 * @ref evas_object_image_animated_frame_count_get, 5248 * @ref evas_object_image_animated_loop_type_get, 5249 * @ref evas_object_image_animated_loop_count_get, 5250 * 5251 * @param[in] obj The object 5252 * @param[in] frame_num Number of frames in the sequence. 5253 * 5254 * @since 1.1 5255 */ 5256 EAPI double evas_object_image_animated_frame_duration_get(const Evas_Object *obj, int start_frame, int frame_num); 5257 5258 /** 5259 * @brief Set the DPI resolution of an image object's source image. 5260 * 5261 * This function sets the DPI resolution of a given loaded canvas image. Most 5262 * useful for the SVG image loader. 5263 * 5264 * @param[in] obj The object 5265 * @param[in] dpi The DPI resolution. 5266 */ 5267 EAPI void evas_object_image_load_dpi_set(Evas_Object *obj, double dpi); 5268 5269 /** 5270 * @brief Get the DPI resolution of a loaded image object in the canvas. 5271 * 5272 * This function returns the DPI resolution of the given canvas image. 5273 * 5274 * @param[in] obj The object 5275 * @return The DPI resolution. 5276 */ 5277 EAPI double evas_object_image_load_dpi_get(const Evas_Object *obj); 5278 5279 /** 5280 * 5281 * Set the load size of a given image object's source image. 5282 * 5283 * This function sets a new geometry size for the given canvas image. 5284 * The image will be loaded into memory as if it was the set size instead of 5285 * the original size. 5286 * 5287 * @note The size of a given image object's source image will be less than or 5288 * equal to the size of @p w and @p h. 5289 * 5290 * @see evas_object_image_load_size_get() 5291 * 5292 * @param[in] obj The object 5293 * @param[in] w The new width of the image's load size. 5294 * @param[in] h The new height of the image's load size. 5295 */ 5296 EAPI void evas_object_image_load_size_set(Eo *obj, int w, int h); 5297 5298 /** 5299 * 5300 * Get the load size of a given image object's source image. 5301 * 5302 * This function gets the geometry size set manually for the given canvas image. 5303 * 5304 * @note Use @c NULL pointers on the size components you're not 5305 * interested in: they'll be ignored by the function. 5306 * @note @p w and @p h will be set with the image's loading size only if 5307 * the image's load size is set manually: if evas_object_image_load_size_set() 5308 * has not been called, @p w and @p h will be set with 0. 5309 * 5310 * @see evas_object_image_load_size_set() for more details 5311 * 5312 * @param[in] obj The object 5313 * @param[out] w The new width of the image's load size. 5314 * @param[out] h The new height of the image's load size. 5315 */ 5316 EAPI void evas_object_image_load_size_get(const Eo *obj, int *w, int *h); 5317 5318 /** 5319 * @brief Inform a given image object to load a selective region of its source 5320 * image. 5321 * 5322 * This function is useful when one is not showing all of an image's area on 5323 * its image object. 5324 * 5325 * @note The image loader for the image format in question has to support 5326 * selective region loading in order to this function to take effect. 5327 * 5328 * @param[in] obj The object 5329 * @param[in] x X-offset of the region to be loaded. 5330 * @param[in] y Y-offset of the region to be loaded. 5331 * @param[in] w Width of the region to be loaded. 5332 * @param[in] h Height of the region to be loaded. 5333 */ 5334 EAPI void evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int w, int h); 5335 5336 /** 5337 * @brief Retrieve the coordinates of a given image object's selective (source 5338 * image) load region. 5339 * 5340 * @note Use @c null pointers on the coordinates you're not interested in: 5341 * they'll be ignored by the function. 5342 * 5343 * @param[in] obj The object 5344 * @param[out] x X-offset of the region to be loaded. 5345 * @param[out] y Y-offset of the region to be loaded. 5346 * @param[out] w Width of the region to be loaded. 5347 * @param[out] h Height of the region to be loaded. 5348 */ 5349 EAPI void evas_object_image_load_region_get(const Evas_Object *obj, int *x, int *y, int *w, int *h); 5350 5351 /** 5352 * @brief Get the support state of a given image. 5353 * 5354 * @param[in] obj The object 5355 * @return The region support state. 5356 * 5357 * @since 1.2 5358 * 5359 * @ingroup Evas_Image 5360 */ 5361 EAPI Eina_Bool evas_object_image_region_support_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 5362 5363 /** 5364 * @brief Define if the orientation information in the image file should be 5365 * honored. 5366 * 5367 * @param[in] obj The object 5368 * @param[in] enable @c true means that it should honor the orientation 5369 * information. 5370 * 5371 * @since 1.1 5372 */ 5373 EAPI void evas_object_image_load_orientation_set(Evas_Object *obj, Eina_Bool enable); 5374 5375 /** 5376 * @brief Get if the orientation information in the image file should be 5377 * honored. 5378 * 5379 * @param[in] obj The object 5380 * @return @c true means that it should honor the orientation information. 5381 * 5382 * @since 1.1 5383 */ 5384 EAPI Eina_Bool evas_object_image_load_orientation_get(const Evas_Object *obj); 5385 5386 /** 5387 * @brief Set the scale down factor of a given image object's source image, 5388 * when loading it. 5389 * 5390 * This function sets the scale down factor of a given canvas image. Most 5391 * useful for the SVG image loader. 5392 * 5393 * @param[in] obj The object 5394 * @param[in] scale_down The scale down factor. 5395 */ 5396 EAPI void evas_object_image_load_scale_down_set(Evas_Object *obj, int scale_down); 5397 5398 /** 5399 * @brief Get the scale down factor of a given image object's source image, 5400 * when loading it. 5401 * 5402 * @param[in] obj The object 5403 * @return The scale down factor. 5404 */ 5405 EAPI int evas_object_image_load_scale_down_get(const Evas_Object *obj); 5406 5407 /** 5408 * @brief Set a load option to skip initial header load and defer to preload 5409 * 5410 * This is meant to be used in conjunction with evas_object_image_file_set() 5411 * and evas_object_image_preload() by deferring any header loading until 5412 * a evas_object_image_preload() is issued making the file file set simply 5413 * set up the file to refer to without any validation of its type or 5414 * file existence or even inspecting the image header to get size or alpha 5415 * channel flags etc. All of this will then be done as part of the preload 5416 * stage. 5417 * @param[in] obj The object 5418 * 5419 * @since 1.19 5420 */ 5421 EAPI void evas_object_image_load_head_skip_set(Evas_Object *obj, Eina_Bool skip); 5422 5423 /** 5424 * @brief Get the load option to skip header loads before preload 5425 * 5426 * This gets the head skip value set by evas_object_image_load_head_skip_set() 5427 * @param[in] obj The object 5428 * 5429 * @see evas_object_image_load_head_skip_set 5430 * @since 1.19 5431 */ 5432 EAPI Eina_Bool evas_object_image_load_head_skip_get(const Evas_Object *obj); 5433 5434 /** 5435 * @brief Retrieves a number representing any error that occurred during the 5436 * last loading of the given image object's source image. 5437 * 5438 * @param[in] obj The object 5439 * @return A value giving the last error that occurred. It should be one of the 5440 * @ref Evas_Load_Error values. #EVAS_LOAD_ERROR_NONE is returned if there was 5441 * no error. 5442 */ 5443 EAPI Evas_Load_Error evas_object_image_load_error_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 5444 5445 /** 5446 * 5447 * Sets whether to use high-quality image scaling algorithm on the 5448 * given image object. 5449 * 5450 * When enabled, a higher quality image scaling algorithm is used when 5451 * scaling images to sizes other than the source image's original 5452 * one. This gives better results but is more computationally 5453 * expensive. 5454 * 5455 * @note Image objects get created originally with smooth scaling @b 5456 * on. 5457 * 5458 * @see evas_object_image_smooth_scale_get() 5459 * 5460 * @param[in] obj The object 5461 * @param[in] smooth_scale Whether to use smooth scale or not. 5462 */ 5463 EAPI void evas_object_image_smooth_scale_set(Eo *obj, Eina_Bool smooth_scale); 5464 5465 /** 5466 * 5467 * Retrieves whether the given image object is using high-quality 5468 * image scaling algorithm. 5469 * 5470 * @return Whether smooth scale is being used. 5471 * 5472 * See @ref evas_object_image_smooth_scale_set() for more details. 5473 * 5474 */ 5475 EAPI Eina_Bool evas_object_image_smooth_scale_get(const Eo *obj); 5476 5477 /* not implemented! removed from the interface, kept as legacy only */ 5478 typedef enum _Efl_Gfx_Fill_Spread { 5479 /** Fill spread mode. Warning: support is not implemented! 5480 * @since 1.14 */ 5481 EFL_GFX_FILL_REFLECT = 0, /**< Tiling reflects and repeats */ 5482 EFL_GFX_FILL_REPEAT = 1, /**< Tiling repeats like a mosaic */ 5483 EFL_GFX_FILL_RESTRICT = 2, /**< Tiling clamps, range offset ignored */ 5484 EFL_GFX_FILL_RESTRICT_REFLECT = 3, /**< Tiling clamps and any range offset reflects */ 5485 EFL_GFX_FILL_RESTRICT_REPEAT = 4, /**< Tiling clamps and any range offset repeats */ 5486 EFL_GFX_FILL_PAD = 5, /**< Tiling extends with end values */ 5487 } Efl_Gfx_Fill_Spread; 5488 5489 typedef Efl_Gfx_Fill_Spread Evas_Fill_Spread; 5490 #define EVAS_TEXTURE_REFLECT EFL_GFX_FILL_REFLECT 5491 #define EVAS_TEXTURE_REPEAT EFL_GFX_FILL_REPEAT 5492 #define EVAS_TEXTURE_RESTRICT EFL_GFX_FILL_RESTRICT 5493 #define EVAS_TEXTURE_RESTRICT_REFLECT EFL_GFX_FILL_RESTRICT_REFLECT 5494 #define EVAS_TEXTURE_RESTRICT_REPEAT EFL_GFX_FILL_RESTRICT_REPEAT 5495 #define EVAS_TEXTURE_PAD EFL_GFX_FILL_PAD 5496 5497 /** 5498 * 5499 * Sets the tiling mode for the given evas image object's fill. 5500 * EVAS_TEXTURE_RESTRICT, or EVAS_TEXTURE_PAD. 5501 * 5502 * @param[in] obj The object 5503 * @param[in] spread One of EVAS_TEXTURE_REFLECT, EVAS_TEXTURE_REPEAT, 5504 */ 5505 EAPI void evas_object_image_fill_spread_set(Evas_Object *obj, Evas_Fill_Spread spread) EINA_DEPRECATED; 5506 5507 /** 5508 * 5509 * Retrieves the spread (tiling mode) for the given image object's 5510 * fill. 5511 * 5512 * @param[in] obj The object 5513 * @return The current spread mode of the image object. 5514 * 5515 */ 5516 EAPI Evas_Fill_Spread evas_object_image_fill_spread_get(const Evas_Object *obj) EINA_DEPRECATED; 5517 5518 /** 5519 * 5520 * Set how to fill an image object's drawing rectangle given the 5521 * (real) image bound to it. 5522 * 5523 * Note that if @p w or @p h are smaller than the dimensions of 5524 * @p obj, the displayed image will be @b tiled around the object's 5525 * area. To have only one copy of the bound image drawn, @p x and @p y 5526 * must be 0 and @p w and @p h need to be the exact width and height 5527 * of the image object itself, respectively. 5528 * 5529 * See the following image to better understand the effects of this 5530 * call. On this diagram, both image object and original image source 5531 * have @c a x @c a dimensions and the image itself is a circle, with 5532 * empty space around it: 5533 * 5534 * @image html image-fill.png 5535 * @image rtf image-fill.png 5536 * @image latex image-fill.eps 5537 * 5538 * @warning The default values for the fill parameters are @p x = 0, 5539 * @p y = 0, @p w = 0 and @p h = 0. Thus, if you're not using the 5540 * evas_object_image_filled_add() helper and want your image 5541 * displayed, you'll have to set valid values with this function on 5542 * your object. 5543 * 5544 * @note evas_object_image_filled_set() is a helper function which 5545 * will @b override the values set here automatically, for you, in a 5546 * given way. 5547 * 5548 * @param[in] obj The object 5549 * @param[in] x The x coordinate (from the top left corner of the bound 5550 image) to start drawing from. 5551 * @param[in] y The y coordinate (from the top left corner of the bound 5552 image) to start drawing from. 5553 * @param[in] w The width the bound image will be displayed at. 5554 * @param[in] h The height the bound image will be displayed at. 5555 */ 5556 EAPI void evas_object_image_fill_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); 5557 5558 /** 5559 * 5560 * Retrieve how an image object is to fill its drawing rectangle, 5561 * given the (real) image bound to it. 5562 * 5563 * @note Use @c NULL pointers on the fill components you're not 5564 * interested in: they'll be ignored by the function. 5565 * 5566 * See @ref evas_object_image_fill_set() for more details. 5567 * 5568 * @param[in] obj The object 5569 * @param[out] x The x coordinate (from the top left corner of the bound 5570 image) to start drawing from. 5571 * @param[out] y The y coordinate (from the top left corner of the bound 5572 image) to start drawing from. 5573 * @param[out] w The width the bound image will be displayed at. 5574 * @param[out] h The height the bound image will be displayed at. 5575 */ 5576 EAPI void evas_object_image_fill_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); 5577 5578 /** 5579 * @brief Set whether the image object's fill property should track the 5580 * object's size. 5581 * 5582 * If @c setting is @c true, then every @ref evas_object_resize will 5583 * automatically trigger a call to @ref evas_object_image_fill_set with the 5584 * that new size (and 0, 0 as source image's origin), so the bound image will 5585 * fill the whole object's area. 5586 * 5587 * @param[in] obj The object 5588 * @param[in] filled @c true to make the fill property follow object size or 5589 * @c false otherwise. 5590 */ 5591 EAPI void evas_object_image_filled_set(Evas_Object *obj, Eina_Bool filled); 5592 5593 /** 5594 * @brief Retrieve whether the image object's fill property should track the 5595 * object's size. 5596 * 5597 * Returns @c true if it is tracking, @c false if not (and @ref 5598 * evas_object_image_fill_set must be called manually). 5599 * 5600 * @param[in] obj The object 5601 * @return @c true to make the fill property follow object size or @c false 5602 * otherwise. 5603 */ 5604 EAPI Eina_Bool evas_object_image_filled_get(const Evas_Object *obj); 5605 5606 /** 5607 * @brief Retrieve whether alpha channel data is being used on the given image 5608 * object. 5609 * 5610 * This function returns @c true if the image object's alpha channel is being 5611 * used, or @c false otherwise. 5612 * 5613 * @param[in] obj The object 5614 * @return Whether to use alpha channel ($true) data or not ($false). 5615 * 5616 * @ingroup Evas_Image 5617 */ 5618 EAPI Eina_Bool evas_object_image_alpha_get(const Evas_Object *obj); 5619 5620 /** 5621 * @brief Enable or disable alpha channel usage on the given image object. 5622 * 5623 * This function sets a flag on an image object indicating whether or not to 5624 * use alpha channel data. A value of @c true makes it use alpha channel data, 5625 * and @c false makes it ignore that data. Note that this has nothing to do 5626 * with an object's color as manipulated by @ref evas_object_color_set. 5627 * 5628 * @param[in] obj The object 5629 * @param[in] alpha Whether to use alpha channel ($true) data or not ($false). 5630 */ 5631 EAPI void evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool alpha); 5632 5633 /** 5634 * @brief Dimensions of this image's border, a region that does not scale with 5635 * the center area. 5636 * 5637 * When EFL renders an image, its source may be scaled to fit the size of the 5638 * object. This function sets an area from the borders of the image inwards 5639 * which is not to be scaled. This function is useful for making frames and for 5640 * widget theming, where, for example, buttons may be of varying sizes, but 5641 * their border size must remain constant. 5642 * 5643 * The units used for @c l, @c r, @c t and @c b are canvas units (pixels). 5644 * 5645 * @note The border region itself may be scaled by the 5646 * @ref evas_object_image_border_scale_set function. 5647 * 5648 * @note By default, image objects have no borders set, i.e. @c l, @c r, @c t 5649 * and @c b start as 0. 5650 * 5651 * @note Similar to the concepts of 9-patch images or cap insets. 5652 * 5653 * @param[in] obj The object 5654 * @param[in] l The border's left width. 5655 * @param[in] r The border's right width. 5656 * @param[in] t The border's top height. 5657 * @param[in] b The border's bottom height. 5658 */ 5659 EAPI void evas_object_image_border_set(Evas_Object *obj, int l, int r, int t, int b); 5660 5661 /** 5662 * @brief Dimensions of this image's border, a region that does not scale with 5663 * the center area. 5664 * 5665 * When EFL renders an image, its source may be scaled to fit the size of the 5666 * object. This function sets an area from the borders of the image inwards 5667 * which is not to be scaled. This function is useful for making frames and for 5668 * widget theming, where, for example, buttons may be of varying sizes, but 5669 * their border size must remain constant. 5670 * 5671 * The units used for @c l, @c r, @c t and @c b are canvas units (pixels). 5672 * 5673 * @note The border region itself may be scaled by the 5674 * @ref evas_object_image_border_scale_set function. 5675 * 5676 * @note By default, image objects have no borders set, i.e. @c l, @c r, @c t 5677 * and @c b start as 0. 5678 * 5679 * @note Similar to the concepts of 9-patch images or cap insets. 5680 * 5681 * @param[in] obj The object 5682 * @param[out] l The border's left width. 5683 * @param[out] r The border's right width. 5684 * @param[out] t The border's top height. 5685 * @param[out] b The border's bottom height. 5686 */ 5687 EAPI void evas_object_image_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b); 5688 5689 /** 5690 * @brief Scaling factor applied to the image borders. 5691 * 5692 * This value multiplies the size of the @ref evas_object_image_border_get when 5693 * scaling an object. 5694 * 5695 * Default value is 1.0 (no scaling). 5696 * 5697 * @param[in] obj The object 5698 * @param[in] scale The scale factor. 5699 */ 5700 EAPI void evas_object_image_border_scale_set(Evas_Object *obj, double scale); 5701 5702 /** 5703 * @brief Scaling factor applied to the image borders. 5704 * 5705 * This value multiplies the size of the @ref evas_object_image_border_get when 5706 * scaling an object. 5707 * 5708 * Default value is 1.0 (no scaling). 5709 * 5710 * @param[in] obj The object 5711 * @return The scale factor. 5712 */ 5713 EAPI double evas_object_image_border_scale_get(const Evas_Object *obj); 5714 5715 /** 5716 * How an image's center region (the complement to the border region) should 5717 * be rendered by Evas 5718 */ 5719 typedef enum 5720 { 5721 EVAS_BORDER_FILL_NONE = 0, /**< Image's center region is @b not to be rendered */ 5722 EVAS_BORDER_FILL_DEFAULT = 1, /**< Image's center region is to be @b blended 5723 * with objects underneath it, if it has 5724 * transparency. This is the default behavior 5725 * for image objects */ 5726 EVAS_BORDER_FILL_SOLID = 2 /**< Image's center region is to be made solid, 5727 * even if it has transparency on it */ 5728 } Evas_Border_Fill_Mode; 5729 5730 /** 5731 * @brief Specifies how the center part of the object (not the borders) should 5732 * be drawn when EFL is rendering it. 5733 * 5734 * This function sets how the center part of the image object's source image is 5735 * to be drawn, which must be one of the values in @ref Evas_Border_Fill_Mode. 5736 * By center we mean the complementary part of that defined by 5737 * @ref evas_object_image_border_set. This one is very useful for making frames 5738 * and decorations. 5739 * 5740 * @param[in] obj The object 5741 * @param[in] fill Fill mode of the center region of @c obj (a value in 5742 * #Evas_Border_Fill_Mode). 5743 */ 5744 EAPI void evas_object_image_border_center_fill_set(Evas_Object *obj, Evas_Border_Fill_Mode fill); 5745 5746 /** 5747 * @brief Specifies how the center part of the object (not the borders) should 5748 * be drawn when EFL is rendering it. 5749 * 5750 * This function sets how the center part of the image object's source image is 5751 * to be drawn, which must be one of the values in @ref Evas_Border_Fill_Mode. 5752 * By center we mean the complementary part of that defined by 5753 * @ref evas_object_image_border_set. This one is very useful for making frames 5754 * and decorations. 5755 * 5756 * The default value is 5757 * 5758 * @param[in] obj The object 5759 * @return Fill mode of the center region of @c obj (a value in 5760 * #Evas_Border_Fill_Mode). 5761 */ 5762 EAPI Evas_Border_Fill_Mode evas_object_image_border_center_fill_get(const Evas_Object *obj); 5763 5764 /** 5765 * @brief Set the image orientation. 5766 * 5767 * This function allows to rotate or flip the image. 5768 * 5769 * @param[in] obj The object 5770 * @param[in] orient The image orientation @ref Evas_Image_Orient. Default is 5771 * #EVAS_IMAGE_ORIENT_NONE. 5772 * 5773 * @since 1.14 5774 * 5775 * @ingroup Evas_Image 5776 */ 5777 EAPI void evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient); 5778 5779 /** 5780 * @brief Get the image orientation. 5781 * 5782 * @param[in] obj The object 5783 * @return The image orientation @ref Evas_Image_Orient. Default is 5784 * #EVAS_IMAGE_ORIENT_NONE. 5785 * 5786 * @since 1.14 5787 * 5788 * @ingroup Evas_Image 5789 */ 5790 EAPI Evas_Image_Orient evas_object_image_orient_get(const Evas_Object *obj); 5791 5792 /** 5793 * @brief Set the content hint setting of a given image object of the canvas. 5794 * 5795 * This function sets the content hint value of the given image of the canvas. 5796 * For example, if you're on the GL engine and your driver implementation 5797 * supports it, setting this hint to #EVAS_IMAGE_CONTENT_HINT_DYNAMIC will make 5798 * it need zero copies at texture upload time, which is an "expensive" 5799 * operation. 5800 * 5801 * @param[in] obj The object 5802 * @param[in] hint The content hint value, one of the 5803 * @ref Evas_Image_Content_Hint ones. 5804 */ 5805 EAPI void evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hint); 5806 5807 /** 5808 * @brief Get the content hint setting of a given image object of the canvas. 5809 * 5810 * This returns #EVAS_IMAGE_CONTENT_HINT_NONE on error. 5811 * 5812 * @param[in] obj The object 5813 * @return The content hint value, one of the @ref Evas_Image_Content_Hint 5814 * ones. 5815 */ 5816 EAPI Evas_Image_Content_Hint evas_object_image_content_hint_get(const Evas_Object *obj); 5817 5818 /** 5819 * @brief Set the scale hint of a given image of the canvas. 5820 * 5821 * This function sets the scale hint value of the given image object in the 5822 * canvas, which will affect how Evas is to cache scaled versions of its 5823 * original source image. 5824 * 5825 * @param[in] obj The object 5826 * @param[in] hint The scale hint, a value in @ref Evas_Image_Scale_Hint. 5827 * 5828 * @ingroup Evas_Image 5829 */ 5830 EAPI void evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint); 5831 5832 /** 5833 * @brief Get the scale hint of a given image of the canvas. 5834 * 5835 * This function returns the scale hint value of the given image object of the 5836 * canvas. 5837 * 5838 * @param[in] obj The object 5839 * @return The scale hint, a value in @ref Evas_Image_Scale_Hint. 5840 * 5841 * @ingroup Evas_Image 5842 */ 5843 EAPI Evas_Image_Scale_Hint evas_object_image_scale_hint_get(const Evas_Object *obj); 5844 5845 /** 5846 * 5847 * Sets the size of the given image object. 5848 * 5849 * This function will scale down or crop the image so that it is 5850 * treated as if it were at the given size. If the size given is 5851 * smaller than the image, it will be cropped. If the size given is 5852 * larger, then the image will be treated as if it were in the upper 5853 * left hand corner of a larger image that is otherwise transparent. 5854 * 5855 * @param[in] obj The object 5856 * @param[in] w The new width of the image. 5857 * @param[in] h The new height of the image. 5858 */ 5859 EAPI void evas_object_image_size_set(Evas_Object *obj, int w, int h); 5860 5861 /** 5862 * 5863 * Retrieves the size of the given image object. 5864 * 5865 * See @ref evas_object_image_size_set() for more details. 5866 * 5867 * @param[in] obj The object 5868 * @param[out] w The new width of the image. 5869 * @param[out] h The new height of the image. 5870 */ 5871 EAPI void evas_object_image_size_get(const Evas_Object *obj, int *w, int *h); 5872 5873 /** 5874 * @brief Set the colorspace of a given image of the canvas. 5875 * 5876 * This function sets the colorspace of given canvas image. 5877 * 5878 * @param[in] obj The object 5879 * @param[in] cspace The new color space. 5880 * 5881 * @ingroup Evas_Image 5882 */ 5883 EAPI void evas_object_image_colorspace_set(Evas_Object *obj, Evas_Colorspace cspace); 5884 5885 /** 5886 * @brief Get the colorspace of a given image of the canvas. 5887 * 5888 * This function returns the colorspace of given canvas image. 5889 * 5890 * @param[in] obj The object 5891 * @return The new color space. 5892 * 5893 * @ingroup Evas_Image 5894 */ 5895 EAPI Evas_Colorspace evas_object_image_colorspace_get(const Evas_Object *obj); 5896 5897 /** 5898 * @brief Retrieves the row stride of the given image object. 5899 * 5900 * The row stride is the number of bytes between the start of a row and the 5901 * start of the next row for image data. 5902 * 5903 * @param[in] obj The object 5904 * @return The stride of the image (in bytes). 5905 * 5906 * @ingroup Evas_Image 5907 */ 5908 EAPI int evas_object_image_stride_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 5909 5910 /** 5911 * @brief Replaces the raw image data of the given image object. 5912 * 5913 * This function lets the application replace an image object's internal pixel 5914 * buffer with a user-allocated one. For best results, you should generally 5915 * first call @ref evas_object_image_size_set with the width and height for the 5916 * new buffer. 5917 * 5918 * This call is best suited for when you will be using image data with 5919 * different dimensions than the existing image data, if any. If you only need 5920 * to modify the existing image in some fashion, then using 5921 * @ref evas_object_image_data_get is probably what you are after. 5922 * 5923 * Note that the caller is responsible for freeing the buffer when finished 5924 * with it, as user-set image data will not be automatically freed when the 5925 * image object is deleted. 5926 * 5927 * @param[in] obj The object 5928 * @param[in] data The raw data to replace. 5929 * 5930 * @ingroup Evas_Image 5931 */ 5932 EAPI void evas_object_image_data_copy_set(Evas_Object *obj, void *data); 5933 5934 /** 5935 * @brief Sets the raw image data of the given image object. 5936 * 5937 * Note that the raw data must be of the same size (see @ref 5938 * evas_object_image_size_set, which has to be called before this one) and 5939 * colorspace (see @ref evas_object_image_colorspace_set) of the image. If data is 5940 * @c null, the current image data will be freed. Naturally, if one does not 5941 * set an image object's data manually, it will still have one, allocated by 5942 * Evas. 5943 * 5944 * @param[in] obj The object 5945 * @param[in] data The raw data, or @c null. 5946 * 5947 * @ingroup Evas_Image 5948 */ 5949 EAPI void evas_object_image_data_set(Evas_Object *obj, void *data); 5950 5951 /** 5952 * @brief Get a pointer to the raw image data of the given image object. 5953 * 5954 * This function returns a pointer to an image object's internal pixel buffer, 5955 * for reading only or read/write. If you request it for writing, the image 5956 * will be marked dirty so that it gets redrawn at the next update. 5957 * 5958 * Each time you call this function on an image object, its data buffer will 5959 * have an internal reference counter incremented. Decrement it back by using 5960 * @ref evas_object_image_data_set. 5961 * 5962 * This is best suited for when you want to modify an existing image, without 5963 * changing its dimensions. 5964 * 5965 * @note The contents' format returned by it depend on the color space of the 5966 * given image object. 5967 * 5968 * @note You may want to use @ref evas_object_image_data_update_add to inform data 5969 * changes, if you did any. 5970 * 5971 * @param[in] obj The object 5972 * @param[in] for_writing Whether the data being retrieved will be modified 5973 * ($true) or not ($false). 5974 * 5975 * @return The raw image data. 5976 * 5977 * @ingroup Evas_Image 5978 */ 5979 EAPI void *evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writing) EINA_WARN_UNUSED_RESULT; 5980 5981 /** 5982 * @brief Mark a sub-region of the given image object to be redrawn. 5983 * 5984 * This function schedules a particular rectangular region of an image object 5985 * to be updated (redrawn) at the next rendering cycle. 5986 * 5987 * @param[in] obj The object 5988 * @param[in] y Y-offset of the region to be updated. 5989 * @param[in] w Width of the region to be updated. 5990 * @param[in] h Height of the region to be updated. 5991 */ 5992 EAPI void evas_object_image_data_update_add(Evas_Object *obj, int x, int y, int w, int h); 5993 5994 /** 5995 * @brief The content below the Evas_Object_Image will be rendered inside it 5996 * and you can reuse it as a source for any kind of effect. 5997 * 5998 * @param[in] obj The object 5999 * @param[in] s Whether to put the content of the canvas below inside the 6000 * Evas_Object_Image. 6001 * 6002 * @since 1.15 6003 */ 6004 EAPI void evas_object_image_snapshot_set(Evas_Object *obj, Eina_Bool s); 6005 6006 /** 6007 * @brief Determine whether the Evas_Object_Image replicate the content of the 6008 * canvas below. 6009 * 6010 * @param[in] obj The object 6011 * @return Wether to put the content of the canvas below inside the 6012 * Evas_Object_Image. 6013 * 6014 * @since 1.15 6015 */ 6016 EAPI Eina_Bool evas_object_image_snapshot_get(const Evas_Object *obj); 6017 6018 /** 6019 * @brief Set the source object on an image object to used as a proxy. 6020 * 6021 * If an image object is set to behave as a proxy, it will mirror the rendering 6022 * contents of a given source object in its drawing region, without affecting 6023 * that source in any way. The source must be another valid Evas object. Other 6024 * effects may be applied to the proxy, such as a map (see @ref 6025 * evas_object_map_set) to create a reflection of the original object (for 6026 * example). 6027 * 6028 * Any existing source object on @c obj will be removed after this call. 6029 * Setting @c src to @c null clears the proxy object (not in "proxy state" 6030 * anymore). 6031 * 6032 * @warning You cannot set a proxy as another proxy's source. 6033 * 6034 * @param[in] obj The object 6035 * @param[in] src Source object to use for the proxy. 6036 */ 6037 EAPI Eina_Bool evas_object_image_source_set(Evas_Object *obj, Evas_Object *src); 6038 6039 /** 6040 * @brief Get the current source object of an image object. 6041 * 6042 * @param[in] obj The object 6043 * @return Source object to use for the proxy. 6044 */ 6045 EAPI Evas_Object *evas_object_image_source_get(const Evas_Object *obj); 6046 6047 /** 6048 * @brief Clip the proxy object with the source object's clipper. 6049 * 6050 * @param[in] obj The object 6051 * @param[in] source_clip Whether @c obj is clipped by the source clipper 6052 * ($true) or not ($false). 6053 * 6054 * @since 1.8 6055 */ 6056 EAPI void evas_object_image_source_clip_set(Evas_Object *obj, Eina_Bool source_clip); 6057 6058 /** 6059 * @brief Determine whether an object is clipped by source object's clipper. 6060 * 6061 * @param[in] obj The object 6062 * @return Whether @c obj is clipped by the source clipper ($true) or not 6063 * ($false). 6064 * 6065 * @since 1.8 6066 */ 6067 EAPI Eina_Bool evas_object_image_source_clip_get(const Evas_Object *obj); 6068 6069 /** 6070 * @brief Set whether an Evas object is to source events. 6071 * 6072 * Set whether an Evas object is to repeat events to source. 6073 * 6074 * If @c repeat is @c true, it will make events on @c obj to also be repeated 6075 * for the source object (see @ref evas_object_image_source_set). Even the 6076 * @c obj and source geometries are different, the event position will be 6077 * transformed to the source object's space. 6078 * 6079 * If @c repeat is @c false, events occurring on @c obj will be processed only 6080 * on it. 6081 * 6082 * @param[in] obj The object 6083 * @param[in] repeat Whether @c obj is to pass events ($true) or not ($false). 6084 * 6085 * @since 1.8 6086 */ 6087 EAPI void evas_object_image_source_events_set(Evas_Object *obj, Eina_Bool repeat); 6088 6089 /** 6090 * @brief Determine whether an object is set to source events. 6091 * 6092 * @param[in] obj The object 6093 * @return Whether @c obj is to pass events ($true) or not ($false). 6094 * 6095 * @since 1.8 6096 */ 6097 EAPI Eina_Bool evas_object_image_source_events_get(const Evas_Object *obj); 6098 6099 /** 6100 * @brief Set the source object to be visible or not. 6101 * 6102 * If @c visible is set to @c false, the source object of the proxy ($obj) will 6103 * be invisible. 6104 * 6105 * This API works differently to @ref evas_object_show and @ref 6106 * evas_object_hide. Once source object is hidden, the proxy object will be 6107 * hidden as well. Actually in this case both objects are excluded from the 6108 * Evas internal update circle. 6109 * 6110 * By this API, instead, one can toggle the visibility of a proxy's source 6111 * object remaining the proxy visibility untouched. 6112 * 6113 * @warning If the all of proxies are deleted, then the source visibility of 6114 * the source object will be cancelled. 6115 * 6116 * @param[in] obj The object 6117 * @param[in] visible @c true is source object to be shown, @c false otherwise. 6118 * 6119 * @deprecated Please use evas_object_norender_get() on the source instead. 6120 * 6121 * @since 1.8 6122 */ 6123 EAPI void evas_object_image_source_visible_set(Evas_Object *obj, Eina_Bool visible); 6124 6125 /** 6126 * @brief Get the state of the source object visibility. 6127 * 6128 * @param[in] obj The object 6129 * @return @c true is source object to be shown, @c false otherwise. 6130 * 6131 * @deprecated Please use evas_object_norender_get() on the source instead. 6132 * 6133 * @since 1.8 6134 */ 6135 EAPI Eina_Bool evas_object_image_source_visible_get(const Evas_Object *obj); 6136 6137 /** 6138 * @brief Mark whether the given image object is dirty and needs to request its 6139 * pixels. 6140 * 6141 * This function will only properly work if a pixels get callback has been set. 6142 * 6143 * @warning Use this function if you really know what you are doing. 6144 * 6145 * @param[in] obj The object 6146 * @param[in] dirty Whether the image is dirty. 6147 */ 6148 EAPI void evas_object_image_pixels_dirty_set(Evas_Object *obj, Eina_Bool dirty); 6149 6150 /** 6151 * @brief Retrieves whether the given image object is dirty (needs to be 6152 * redrawn). 6153 * 6154 * @param[in] obj The object 6155 * @return Whether the image is dirty. 6156 */ 6157 EAPI Eina_Bool evas_object_image_pixels_dirty_get(const Evas_Object *obj); 6158 6159 /** 6160 * @brief Set the callback function to get pixels from a canvas' image. 6161 * 6162 * This functions sets a function to be the callback function that get pixels 6163 * from a image of the canvas. 6164 * 6165 * @param[in] obj The object 6166 * @param[in] func The callback function. 6167 * @param[in] data The data pointer to be passed to @c func. 6168 */ 6169 EAPI void evas_object_image_pixels_get_callback_set(Evas_Object *obj, Evas_Object_Image_Pixels_Get_Cb func, void *data) EINA_ARG_NONNULL(2); 6170 6171 6172 /** 6173 * @typedef Evas_Video_Surface 6174 * 6175 * A generic datatype for video specific surface information 6176 * @see evas_object_image_video_surface_set 6177 * @see evas_object_image_video_surface_get 6178 * @since 1.1 6179 */ 6180 typedef struct _Evas_Video_Surface Evas_Video_Surface; 6181 6182 /** 6183 * @def EVAS_VIDEO_SURFACE_VERSION 6184 * Magic version number to know what the video surf struct looks like 6185 * @since 1.1 6186 */ 6187 #define EVAS_VIDEO_SURFACE_VERSION 1 6188 6189 typedef void (*Evas_Video_Cb)(void *data, Evas_Object *obj, const Evas_Video_Surface *surface); /**< Evas video callback function signature */ 6190 typedef void (*Evas_Video_Coord_Cb)(void *data, Evas_Object *obj, const Evas_Video_Surface *surface, Evas_Coord a, Evas_Coord b); /**< Evas video coordinates callback function signature */ 6191 6192 struct _Evas_Video_Surface 6193 { 6194 int version; /**< The Evas Video surface version in use @see EVAS_VIDEO_SURFACE_VERSION*/ 6195 6196 Evas_Video_Coord_Cb move; /**< Move the video surface to this position */ 6197 Evas_Video_Coord_Cb resize; /**< Resize the video surface to that size */ 6198 Evas_Video_Cb show; /**< Show the video overlay surface */ 6199 Evas_Video_Cb hide; /**< Hide the video overlay surface */ 6200 Evas_Video_Cb update_pixels; /**< Please update the Evas_Object_Image pixels when called */ 6201 6202 Evas_Object *parent; /**< The parent object */ 6203 void *data; 6204 }; 6205 6206 /** 6207 * Enum values for the Video surface capabilities 6208 * @see evas_object_image_video_surface_caps_get() 6209 * @see evas_object_image_video_surface_caps_set() 6210 */ 6211 6212 typedef enum _Evas_Video_Surface_Caps 6213 { 6214 EVAS_VIDEO_SURFACE_MOVE = 1, /**< Move capability */ 6215 EVAS_VIDEO_SURFACE_RESIZE = 2, /**< Resize capability */ 6216 EVAS_VIDEO_SURFACE_CLIP = 4, /**< Clip capability */ 6217 EVAS_VIDEO_SURFACE_BELOW = 8, /**< Below capability */ 6218 EVAS_VIDEO_SURFACE_STACKING_CHECK = 16, /**< Stacking capability */ 6219 EVAS_VIDEO_SURFACE_IGNORE_WINDOW = 32, /**< Ignore window capability */ 6220 } Evas_Video_Surface_Caps; 6221 6222 /** 6223 * @brief Set the video surface linked to a given image of the canvas. 6224 * 6225 * @param[in] obj The object 6226 * @param[in] surf The new video surface. 6227 * 6228 * @since 1.1 6229 */ 6230 EAPI void evas_object_image_video_surface_set(Evas_Object *obj, Evas_Video_Surface *surf); 6231 6232 /** 6233 * @brief Get the video surface linked to a given image of the canvas. 6234 * 6235 * @param[in] obj The object 6236 * @return The new video surface. 6237 * 6238 * @since 1.1 6239 */ 6240 EAPI const Evas_Video_Surface *evas_object_image_video_surface_get(const Evas_Object *obj); 6241 6242 /** 6243 * @brief Set the video surface capabilities to a given image of the canvas. 6244 * 6245 * @param[in] obj The object 6246 * @param[in] caps Surface capabilities 6247 */ 6248 EAPI void evas_object_image_video_surface_caps_set(Evas_Object *obj, unsigned int caps); 6249 6250 /** Get the video surface capabilities to a given image of the canvas. 6251 * @param[in] obj The object 6252 * @return Surface capabilities 6253 */ 6254 EAPI unsigned int evas_object_image_video_surface_caps_get(const Evas_Object *obj); 6255 6256 6257 /* 6258 * Converts the raw image data of the given image object to the 6259 * specified colorspace. 6260 * 6261 * Note that this function does not modify the raw image data. If the 6262 * requested colorspace is the same as the image colorspace nothing is 6263 * done and @c NULL is returned. You should use 6264 * evas_object_image_colorspace_get() to check the current image 6265 * colorspace. 6266 * 6267 * See @ref evas_object_image_colorspace_get. 6268 * 6269 * @return data A newly allocated data in the format specified by to_cspace. 6270 * 6271 * @param[in] obj The object 6272 * @param[in] to_cspace The colorspace to which the image raw data will be converted. 6273 */ 6274 /** @deprecated evas_object_image_data_convert */ 6275 EAPI void *evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace) EINA_WARN_UNUSED_RESULT EINA_DEPRECATED; 6276 6277 /* 6278 * Import pixels from given source to a given canvas image object. 6279 * 6280 * This function imports pixels from a given source to a given canvas image. 6281 * 6282 * @param[in] obj The object 6283 * @param[in] pixels The pixel's source to be imported. 6284 */ 6285 /** @deprecated evas_object_image_pixels_import */ 6286 EAPI Eina_Bool evas_object_image_pixels_import(Evas_Object *obj, Evas_Pixel_Import_Source *pixels) EINA_ARG_NONNULL(2) EINA_DEPRECATED; 6287 6288 /* 6289 * Reload an image object's image data. 6290 * 6291 * This function reloads the image data bound to image object @p obj. 6292 */ 6293 /** @deprecated evas_object_image_reload */ 6294 EAPI void evas_object_image_reload(Evas_Object *obj) EINA_DEPRECATED; 6295 6296 /** 6297 * @deprecated This function has never been implemented. Please use 6298 * evas_object_clip_set() with an alpha or RGBA image instead 6299 * of setting this flag. 6300 */ 6301 EAPI void evas_object_image_alpha_mask_set(Evas_Object *obj, Eina_Bool ismask) EINA_ARG_NONNULL(1) EINA_DEPRECATED; 6302 6303 #include "canvas/evas_image_eo.legacy.h" 6304 6305 /** 6306 * @} 6307 */ 6308 6309 /** 6310 * @addtogroup Evas_Object_Text_Group 6311 * 6312 * @{ 6313 */ 6314 6315 /** 6316 * Creates a new text object on the provided canvas. 6317 * 6318 * @param e The canvas to create the text object on. 6319 * @return @c NULL on error, a pointer to a new text object on 6320 * success. 6321 * 6322 * Text objects are for simple, single line text elements. If you want 6323 * more elaborated text blocks, see @ref Evas_Object_Textblock_Group. 6324 * 6325 * @see evas_object_text_font_source_set() 6326 * @see evas_object_text_font_set() 6327 * @see evas_object_text_text_set() 6328 */ 6329 EAPI Evas_Object *evas_object_text_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 6330 6331 /** 6332 * 6333 * Sets the text string to be displayed by the given text object. 6334 * 6335 * @see evas_object_text_text_get() 6336 * 6337 * @param[in] text Text string to display on it. 6338 */ 6339 EAPI void evas_object_text_text_set(Eo *obj, const char *text); 6340 6341 /** 6342 * 6343 * Retrieves the text string currently being displayed by the given 6344 * text object. 6345 * 6346 * @return The text string currently being displayed on it. 6347 * 6348 * @note Do not free() the return value. 6349 * 6350 * @see evas_object_text_text_set() 6351 * 6352 */ 6353 EAPI const char *evas_object_text_text_get(const Eo *obj); 6354 6355 /** 6356 * Types of styles to be applied on text objects. The 6357 * EVAS_TEXT_STYLE_SHADOW_DIRECTION_* ones are to be OR'ed together with others 6358 * imposing shadow, to change the shadow's direction. 6359 * 6360 * @see evas_object_text_style_set() 6361 * @see evas_object_text_style_get() 6362 */ 6363 typedef enum 6364 { 6365 EVAS_TEXT_STYLE_PLAIN = 0, /**< plain, standard text */ 6366 EVAS_TEXT_STYLE_SHADOW, /**< text with shadow underneath */ 6367 EVAS_TEXT_STYLE_OUTLINE, /**< text with an outline */ 6368 EVAS_TEXT_STYLE_SOFT_OUTLINE, /**< text with a soft outline */ 6369 EVAS_TEXT_STYLE_GLOW, /**< text with a glow effect */ 6370 EVAS_TEXT_STYLE_OUTLINE_SHADOW, /**< text with both outline and shadow effects */ 6371 EVAS_TEXT_STYLE_FAR_SHADOW, /**< text with (far) shadow underneath */ 6372 EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW, /**< text with outline and soft shadow effects combined */ 6373 EVAS_TEXT_STYLE_SOFT_SHADOW, /**< text with (soft) shadow underneath */ 6374 EVAS_TEXT_STYLE_FAR_SOFT_SHADOW, /**< text with (far soft) shadow underneath */ 6375 6376 // Shadow direction modifiers 6377 EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_RIGHT = 0 /* 0 >> 4 */, /**< shadow growing to bottom right */ 6378 EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM = 16 /* 1 >> 4 */, /**< shadow growing to the bottom */ 6379 EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_LEFT = 32 /* 2 >> 4 */, /**< shadow growing to bottom left */ 6380 EVAS_TEXT_STYLE_SHADOW_DIRECTION_LEFT = 48 /* 3 >> 4 */, /**< shadow growing to the left */ 6381 EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP_LEFT = 64 /* 4 >> 4 */, /**< shadow growing to top left */ 6382 EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP = 80 /* 5 >> 4 */, /**< shadow growing to the top */ 6383 EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP_RIGHT = 96 /* 6 >> 4 */, /**< shadow growing to top right */ 6384 EVAS_TEXT_STYLE_SHADOW_DIRECTION_RIGHT = 112 /* 7 >> 4 */ /**< shadow growing to the right */ 6385 } Evas_Text_Style_Type; 6386 6387 #include "canvas/evas_text_eo.legacy.h" 6388 6389 /** 6390 * 6391 * Set the font (source) file to be used on a given text object. 6392 * 6393 * This function allows the font file to be explicitly set for a given 6394 * text object, overriding system lookup, which will first occur in 6395 * the given file's contents. 6396 * 6397 * @see evas_object_text_font_get() 6398 * 6399 * @param[in] font_source The font file's path. 6400 */ 6401 EAPI void evas_object_text_font_source_set(Eo *obj, const char *font_source); 6402 6403 /** 6404 * 6405 * Get the font file's path which is being used on a given text 6406 * object. 6407 * 6408 * @return The font file's path. 6409 * 6410 * @see evas_object_text_font_get() for more details 6411 * 6412 */ 6413 EAPI const char *evas_object_text_font_source_get(const Eo *obj); 6414 6415 /** 6416 * 6417 * Set the font family or filename, and size on a given text object. 6418 * 6419 * This function allows the font name and size of a text object to be 6420 * set. The @p font string has to follow fontconfig's convention on 6421 * naming fonts, as it's the underlying library used to query system 6422 * fonts by Evas (see the @c fc-list command's output, on your system, 6423 * to get an idea). Alternatively, one can use a full path to a font file. 6424 * 6425 * @see evas_object_text_font_get() 6426 * @see evas_object_text_font_source_set() 6427 * 6428 * @param[in] font The font family name or filename. 6429 * @param[in] size The font size, in points. 6430 */ 6431 EAPI void evas_object_text_font_set(Eo *obj, const char *font, Evas_Font_Size size); 6432 6433 /** 6434 * 6435 * Retrieve the font family and size in use on a given text object. 6436 * 6437 * This function allows the font name and size of a text object to be 6438 * queried. Be aware that the font name string is still owned by Evas 6439 * and should @b not have free() called on it by the caller of the 6440 * function. 6441 * 6442 * @see evas_object_text_font_set() 6443 * 6444 * @param[out] font The font family name or filename. 6445 * @param[out] size The font size, in points. 6446 */ 6447 EAPI void evas_object_text_font_get(const Eo *obj, const char **font, Evas_Font_Size *size); 6448 6449 6450 /** 6451 * @} 6452 */ 6453 6454 #include "canvas/evas_textblock_legacy.h" 6455 6456 /** 6457 * @ingroup Evas_Object_Grid_Group 6458 * 6459 * @{ 6460 */ 6461 /** 6462 * @brief Add a textgrid to the given Evas. 6463 * 6464 * @param e The given evas. 6465 * @return The new textgrid object. 6466 * 6467 * This function adds a new textgrid object to the Evas @p e and returns the object. 6468 * 6469 * @since 1.7 6470 */ 6471 EAPI Evas_Object *evas_object_textgrid_add(Evas *e); 6472 6473 #include "canvas/evas_textgrid_eo.legacy.h" 6474 6475 /** 6476 * 6477 * @brief Set the font (source) file to be used on a given textgrid object. 6478 * 6479 * This function allows the font file @p font_source to be explicitly 6480 * set for the textgrid object @p obj, overriding system lookup, which 6481 * will first occur in the given file's contents. If @p font_source is 6482 * @c NULL or is an empty string, or the same font_source has already 6483 * been set, or on error, this function does nothing. 6484 * 6485 * @see evas_object_textgrid_font_get() 6486 * @see evas_object_textgrid_font_set() 6487 * @see evas_object_textgrid_font_source_get() 6488 * 6489 * @since 1.7 6490 * 6491 * @param[in] font_source The font file's path. 6492 */ 6493 EAPI void evas_object_textgrid_font_source_set(Eo *obj, const char *font_source); 6494 6495 /** 6496 * 6497 * @brief Get the font file's path which is being used on a given textgrid object. 6498 * 6499 * @return The font file's path. 6500 * 6501 * This function returns the font source path of the textgrid object 6502 * @p obj. If the font source path has not been set, or on error, 6503 * @c NULL is returned. 6504 * 6505 * @see evas_object_textgrid_font_get() 6506 * @see evas_object_textgrid_font_set() 6507 * @see evas_object_textgrid_font_source_set() 6508 * 6509 * @since 1.7 6510 * 6511 */ 6512 EAPI const char *evas_object_textgrid_font_source_get(const Eo *obj); 6513 6514 /** 6515 * 6516 * @brief Set the font family and size on a given textgrid object. 6517 * 6518 * This function allows the font name @p font_name and size 6519 * @p font_size of the textgrid object @p obj to be set. The @p font_name 6520 * string has to follow fontconfig's convention on naming fonts, as 6521 * it's the underlying library used to query system fonts by Evas (see 6522 * the @c fc-list command's output, on your system, to get an 6523 * idea). It also has to be a monospace font. If @p font_name is 6524 * @c NULL, or if it is an empty string, or if @p font_size is less or 6525 * equal than 0, or on error, this function does nothing. 6526 * 6527 * @see evas_object_textgrid_font_get() 6528 * @see evas_object_textgrid_font_source_set() 6529 * @see evas_object_textgrid_font_source_get() 6530 * 6531 * @since 1.7 6532 * 6533 * @param[in] font_name The font (family) name. 6534 * @param[in] font_size The font size, in points. 6535 */ 6536 EAPI void evas_object_textgrid_font_set(Eo *obj, const char *font_name, Evas_Font_Size font_size); 6537 6538 /** 6539 * 6540 * @brief Retrieve the font family and size in use on a given textgrid object. 6541 * 6542 * This function allows the font name and size of a textgrid object 6543 * @p obj to be queried and stored respectively in the buffers 6544 * @p font_name and @p font_size. Be aware that the font name string is 6545 * still owned by Evas and should @b not have free() called on it by 6546 * the caller of the function. On error, the font name is the empty 6547 * string and the font size is 0. @p font_name and @p font_source can 6548 * be @c NULL. 6549 * 6550 * @see evas_object_textgrid_font_set() 6551 * @see evas_object_textgrid_font_source_set() 6552 * @see evas_object_textgrid_font_source_get() 6553 * 6554 * @since 1.7 6555 * 6556 * @param[out] font_name The font (family) name. 6557 * @param[out] font_size The font size, in points. 6558 */ 6559 EAPI void evas_object_textgrid_font_get(const Eo *obj, const char **font_name, Evas_Font_Size *font_size); 6560 6561 /** 6562 * @} 6563 */ 6564 6565 /** 6566 * @addtogroup Evas_Object_Line_Group 6567 * 6568 * @{ 6569 */ 6570 /** 6571 * Adds a new evas line object to the given evas. 6572 * @param e The given evas. 6573 * @return The new evas line object. 6574 */ 6575 EAPI Evas_Object *evas_object_line_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 6576 6577 #include "canvas/evas_line_eo.legacy.h" 6578 6579 /** 6580 * @} 6581 */ 6582 6583 /** 6584 * @addtogroup Evas_Object_Polygon 6585 * 6586 * @{ 6587 */ 6588 /** 6589 * Adds a new evas polygon object to the given evas. 6590 * @param e The given evas. 6591 * @return A new evas polygon object. 6592 */ 6593 EAPI Evas_Object *evas_object_polygon_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 6594 6595 /** 6596 * @brief Adds the given point to the given evas polygon object. 6597 * 6598 * @param[in] obj The object 6599 * @param[in] y The Y coordinate of the given point. 6600 */ 6601 EAPI void evas_object_polygon_point_add(Evas_Object *obj, Evas_Coord x, Evas_Coord y); 6602 6603 /** Removes all of the points from the given evas polygon object. 6604 * @param[in] obj The object 6605 */ 6606 EAPI void evas_object_polygon_points_clear(Evas_Object *obj); 6607 6608 /** 6609 * @} 6610 */ 6611 6612 6613 /** 6614 * @} 6615 */ 6616 6617 6618 /** 6619 * @addtogroup Evas_Smart_Object_Group 6620 * 6621 * @{ 6622 */ 6623 6624 6625 /** Call user-provided @c calculate smart functions and unset the flag 6626 * signalling that the object needs to get recalculated to all smart objects in 6627 * the canvas. 6628 */ 6629 EAPI void evas_smart_objects_calculate(Eo *obj); 6630 6631 /** 6632 * @brief Get if the canvas is currently calculating smart objects. 6633 * 6634 * @param[in] obj The object. 6635 * 6636 * @return @c true if currently calculating smart objects. 6637 */ 6638 EAPI Eina_Bool evas_smart_objects_calculating_get(const Eo *obj); 6639 6640 /** 6641 * Instantiates a new smart object described by @p s. 6642 * 6643 * @param e the canvas on which to add the object 6644 * @param s the #Evas_Smart describing the smart object 6645 * @return a new #Evas_Object handle 6646 * 6647 * This is the function one should use when defining the public 6648 * function @b adding an instance of the new smart object to a given 6649 * canvas. It will take care of setting all of its internals to work 6650 * as they should, if the user set things properly, as seem on the 6651 * #EVAS_SMART_SUBCLASS_NEW, for example. 6652 */ 6653 EAPI Evas_Object *evas_object_smart_add(Evas *e, Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_MALLOC; 6654 6655 /** 6656 * Set an Evas object as a member of a given smart object. 6657 * 6658 * @param obj The member object 6659 * @param smart_obj The smart object 6660 * 6661 * Members will automatically be stacked and layered together with the 6662 * smart object. The various stacking functions will operate on 6663 * members relative to the other members instead of the entire canvas, 6664 * since they now live on an exclusive layer (see 6665 * evas_object_stack_above(), for more details). 6666 * 6667 * Any @p smart_obj object's specific implementation of the @c 6668 * member_add() smart function will take place too, naturally. 6669 * 6670 * @see evas_object_smart_member_del() 6671 * @see evas_object_smart_members_get() 6672 */ 6673 EAPI void evas_object_smart_member_add(Evas_Object *obj, Evas_Object *smart_obj) EINA_ARG_NONNULL(1, 2); 6674 6675 /** 6676 * Removes a member object from a given smart object. 6677 * 6678 * @param obj the member object 6679 * 6680 * This removes a member object from a smart object, if it was added 6681 * to any. The object will still be on the canvas, but no longer 6682 * associated with whichever smart object it was associated with. 6683 * 6684 * @see evas_object_smart_member_add() for more details 6685 * @see evas_object_smart_members_get() 6686 */ 6687 EAPI void evas_object_smart_member_del(Evas_Object *obj) EINA_ARG_NONNULL(1); 6688 6689 /** 6690 * Add (register) a callback function to the smart event specified by 6691 * @p event on the smart object @p obj. 6692 * 6693 * @param obj a smart object 6694 * @param event the event's name string 6695 * @param func the callback function 6696 * @param data user data to be passed to the callback function 6697 * 6698 * Smart callbacks look very similar to Evas callbacks, but are 6699 * implemented as smart object's custom ones. 6700 * 6701 * This function adds a function callback to an smart object when the 6702 * event named @p event occurs in it. The function is @p func. 6703 * 6704 * In the event of a memory allocation error during addition of the 6705 * callback to the object, evas_alloc_error() should be used to 6706 * determine the nature of the error, if any, and the program should 6707 * sensibly try and recover. 6708 * 6709 * A smart callback function must have the ::Evas_Smart_Cb prototype 6710 * definition. The first parameter (@p data) in this definition will 6711 * have the same value passed to evas_object_smart_callback_add() as 6712 * the @p data parameter, at runtime. The second parameter @p obj is a 6713 * handle to the object on which the event occurred. The third 6714 * parameter, @p event_info, is a pointer to data which is totally 6715 * dependent on the smart object's implementation and semantic for the 6716 * given event. 6717 * 6718 * There is an infrastructure for introspection on smart objects' 6719 * events (see evas_smart_callbacks_descriptions_get()), but no 6720 * internal smart objects on Evas implement them yet. 6721 * 6722 * @see @ref Evas_Smart_Object_Group_Callbacks for more details. 6723 * 6724 * @see evas_object_smart_callback_del() 6725 */ 6726 EAPI void evas_object_smart_callback_add(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3); 6727 6728 /** 6729 * Add (register) a callback function to the smart event specified by 6730 * @p event on the smart object @p obj. Except for the priority field, 6731 * it's exactly the same as @ref evas_object_smart_callback_add 6732 * 6733 * @param obj a smart object 6734 * @param event the event's name string 6735 * @param priority The priority of the callback, lower values called first. 6736 * @param func the callback function 6737 * @param data user data to be passed to the callback function 6738 * 6739 * @see evas_object_smart_callback_add 6740 * @since 1.1 6741 */ 6742 EAPI void evas_object_smart_callback_priority_add(Evas_Object *obj, const char *event, Evas_Callback_Priority priority, Evas_Smart_Cb func, const void *data); 6743 6744 /** 6745 * Delete (unregister) a callback function from the smart event 6746 * specified by @p event on the smart object @p obj. 6747 * 6748 * @param obj a smart object 6749 * @param event the event's name string 6750 * @param func the callback function 6751 * @return the data pointer 6752 * 6753 * This function removes <b>the first</b> added smart callback on the 6754 * object @p obj matching the event name @p event and the registered 6755 * function pointer @p func. If the removal is successful it will also 6756 * return the data pointer that was passed to 6757 * evas_object_smart_callback_add() (that will be the same as the 6758 * parameter) when the callback(s) was(were) added to the canvas. If 6759 * not successful @c NULL will be returned. 6760 * 6761 * @see evas_object_smart_callback_add() for more details. 6762 */ 6763 EAPI void *evas_object_smart_callback_del(Evas_Object *obj, const char *event, Evas_Smart_Cb func) EINA_ARG_NONNULL(1, 2, 3); 6764 6765 /** 6766 * Delete (unregister) a callback function from the smart event 6767 * specified by @p event on the smart object @p obj. 6768 * 6769 * @param obj a smart object 6770 * @param event the event's name string 6771 * @param func the callback function 6772 * @param data the data pointer that was passed to the callback 6773 * @return the data pointer 6774 * 6775 * This function removes <b>the first</b> added smart callback on the 6776 * object @p obj matching the event name @p event, the registered 6777 * function pointer @p func and the callback data pointer @p data. If 6778 * the removal is successful it will also return the data pointer that 6779 * was passed to evas_object_smart_callback_add() (that will be the same 6780 * as the parameter) when the callback(s) was(were) added to the canvas. 6781 * If not successful @c NULL will be returned. A common use would be to 6782 * remove an exact match of a callback 6783 * 6784 * @see evas_object_smart_callback_add() for more details. 6785 * @since 1.2 6786 * 6787 * @note To delete all smart event callbacks which match @p type and @p func, 6788 * use evas_object_smart_callback_del(). 6789 */ 6790 EAPI void *evas_object_smart_callback_del_full(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3); 6791 6792 /** 6793 * Call a given smart callback on the smart object @p obj. 6794 * 6795 * @param obj the smart object 6796 * @param event the event's name string 6797 * @param event_info pointer to an event specific struct or information to 6798 * pass to the callback functions registered on this smart event 6799 * 6800 * This should be called @b internally, from the smart object's own 6801 * code, when some specific event has occurred and the implementor 6802 * wants is to pertain to the object's events API (see @ref 6803 * Evas_Smart_Object_Group_Callbacks). The documentation for the smart 6804 * object should include a list of possible events and what type of @p 6805 * event_info to expect for each of them. Also, when defining an 6806 * #Evas_Smart_Class, smart object implementors are strongly 6807 * encouraged to properly set the Evas_Smart_Class::callbacks 6808 * callbacks description array, so that the users of the smart object 6809 * can have introspection on its events API <b>at run time</b>. 6810 */ 6811 EAPI void evas_object_smart_callback_call(Evas_Object *obj, const char *event, void *event_info) EINA_ARG_NONNULL(1, 2); 6812 6813 /** 6814 * Retrieve an Evas smart object's interface, by name string pointer. 6815 * 6816 * @param obj An Evas smart object. 6817 * @param name Name string of the desired interface, which must be the 6818 * same pointer used at the interface's declarion, when 6819 * creating the smart object @a obj. 6820 * 6821 * @since 1.7 6822 * 6823 * @return The interface's handle pointer, if found, @c NULL 6824 * otherwise. 6825 */ 6826 EAPI const void *evas_object_smart_interface_get(const Evas_Object *obj, const char *name); 6827 6828 /** 6829 * Retrieve an Evas smart object interface's <b>private data</b>. 6830 * 6831 * @param obj An Evas smart object. 6832 * @param iface The given object's interface handle. 6833 * 6834 * @since 1.7 6835 * 6836 * @return The object interface's private data blob pointer, if found, 6837 * @c NULL otherwise. 6838 */ 6839 EAPI void *evas_object_smart_interface_data_get(const Evas_Object *obj, const Evas_Smart_Interface *iface); 6840 6841 /** 6842 * @brief Checks whether a given smart object or any of its smart object 6843 * parents is of a given smart class. 6844 * 6845 * If @c obj is not a smart object, this call will fail immediately. 6846 * 6847 * The checks use smart classes names and string comparison. There is a version 6848 * of this same check using pointer comparison, since a smart class' name is a 6849 * single string in Evas. 6850 * 6851 * See also @ref evas_object_smart_type_check_ptr. 6852 * 6853 * @param[in] type The name (type) of the smart class to check for. 6854 */ 6855 EAPI Eina_Bool evas_object_smart_type_check(const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2); 6856 6857 /** 6858 * @brief Checks whether a given smart object or any of its smart object 6859 * parents is of a given smart class, using pointer comparison. 6860 * 6861 * @param[in] type The type (name string) to check for. Must be the name. 6862 * 6863 * @return @c true if @c obj or any of its parents is of type @c type, @c false 6864 * otherwise. 6865 */ 6866 EAPI Eina_Bool evas_object_smart_type_check_ptr(const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2); 6867 6868 /** 6869 * @brief Set an smart object instance's smart callbacks descriptions. 6870 * 6871 * These descriptions are hints to be used by introspection and are not 6872 * enforced in any way. 6873 * 6874 * It will not be checked if instance callbacks descriptions have the same name 6875 * as respective possibly registered in the smart object class. Both are kept 6876 * in different arrays and users of 6877 * evas_object_smart_callbacks_descriptions_get() should handle this case as 6878 * they wish. 6879 * 6880 * @note Because @c descriptions must be @c null terminated, and because a 6881 * @c null name makes little sense, too, Evas_Smart_Cb_Description.name must 6882 * not be @c null. 6883 * 6884 * @note While instance callbacks descriptions are possible, they are not 6885 * recommended. Use class callbacks descriptions instead as they make you smart 6886 * object user's life simpler and will use less memory, as descriptions and 6887 * arrays will be shared among all instances. 6888 * 6889 * @param[in] descriptions @c null terminated array with 6890 * @ref Evas_Smart_Cb_Description descriptions. Array elements won't be 6891 * modified at run time, but references to them and their contents will be 6892 * made, so this array should be kept alive during the whole object's lifetime. 6893 * 6894 * @return @c true on success, @c false on failure. 6895 */ 6896 EAPI Eina_Bool evas_object_smart_callbacks_descriptions_set(Evas_Object *obj, const Evas_Smart_Cb_Description *descriptions); 6897 6898 /** 6899 * @brief Retrieve an smart object's know smart callback descriptions (both 6900 * instance and class ones). 6901 * 6902 * This call searches for registered callback descriptions for both instance 6903 * and class of the given smart object. These arrays will be sorted by 6904 * Evas_Smart_Cb_Description.name and also @c null terminated, so both 6905 * class_count and instance_count can be ignored, if the caller wishes so. The 6906 * terminator @c null is not counted in these values. 6907 * 6908 * @note If just class descriptions are of interest, try 6909 * evas_smart_callbacks_descriptions_get() instead. 6910 * 6911 * @note Use @c null pointers on the descriptions/counters you're not 6912 * interested in: they'll be ignored by the function. 6913 * 6914 * @ref evas_smart_callbacks_descriptions_get(). 6915 * 6916 * @param[out] class_descriptions Where to store class callbacks descriptions 6917 * array, if any is known. If no descriptions are known, @c null is returned. 6918 * @param[out] class_count Returns how many class callbacks descriptions are 6919 * known. 6920 * @param[out] instance_descriptions Where to store instance callbacks 6921 * descriptions array, if any is known. If no descriptions are known, @c null 6922 * is returned. 6923 * @param[out] instance_count Returns how many instance callbacks descriptions 6924 * are known. 6925 */ 6926 EAPI void evas_object_smart_callbacks_descriptions_get(const Evas_Object *obj, const Evas_Smart_Cb_Description ***class_descriptions, unsigned int *class_count, const Evas_Smart_Cb_Description ***instance_descriptions, unsigned int *instance_count); 6927 6928 /** 6929 * @brief Find callback description for callback called name or @c null if not 6930 * found. 6931 * 6932 * If parameter is @c null, no search will be done on instance descriptions. 6933 * 6934 * @param[in] name name of desired callback, must not be @c null. The search 6935 * have a special case for name being the same pointer as registered with 6936 * Evas_Smart_Cb_Description, one can use it to avoid excessive use of 6937 * strcmp(). 6938 * @param[out] class_description pointer to return class description or @c null 6939 * if not found. If parameter is @c null, no search will be done on class 6940 * descriptions. 6941 * @param[out] instance_description pointer to return instance description. 6942 */ 6943 EAPI void evas_object_smart_callback_description_find(const Evas_Object *obj, const char *name, const Evas_Smart_Cb_Description **class_description, const Evas_Smart_Cb_Description **instance_description) EINA_ARG_NONNULL(2); 6944 6945 /** 6946 * @brief Get the @ref Evas_Smart from which @c obj smart object was created. 6947 * 6948 * @return the @ref Evas_Smart handle or @c null, on errors. 6949 */ 6950 EAPI Evas_Smart *evas_object_smart_smart_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 6951 6952 /** 6953 * @brief Store a pointer to user data for a given smart object. 6954 * 6955 * This data is stored independently of the one set by evas_object_data_set(), 6956 * naturally. 6957 * 6958 * See also @ref evas_object_smart_data_get. 6959 * 6960 * @param[in] obj The object 6961 * @param[in] data A pointer to user data. 6962 */ 6963 EAPI void evas_object_smart_data_set(Evas_Object *obj, void *data); 6964 6965 /** 6966 * @brief Retrieves the pointer to user data for a given smart object. 6967 * 6968 * This data is stored independently of the one set by evas_object_data_set(), 6969 * naturally. 6970 * 6971 * See also @ref evas_object_smart_data_set. 6972 * 6973 * @param[in] obj The object 6974 * @return A pointer to user data. 6975 */ 6976 EAPI void *evas_object_smart_data_get(const Evas_Object *obj); 6977 6978 /** 6979 * @brief Get the clipper object for the given clipped smart object. 6980 * 6981 * Use this function if you want to change any of this clipper's properties, 6982 * like colors. 6983 */ 6984 EAPI Evas_Object *evas_object_smart_clipped_clipper_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 6985 6986 /** 6987 * @brief Retrieves the list of the member objects of a given Evas smart 6988 * object. 6989 * 6990 * The returned list should be freed with @c eina_list_free() when you no 6991 * longer need it. 6992 * 6993 * This function will return @c null when a non-smart object is passed. 6994 * 6995 * See also @ref evas_object_smart_member_add, 6996 * @ref evas_object_smart_member_del and @ref evas_object_smart_iterator_new. 6997 * 6998 * @return Returns the list of the member objects of @c obj. 6999 * 7000 * @since 1.7 7001 */ 7002 EAPI Eina_List *evas_object_smart_members_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 7003 7004 /** 7005 * @brief Set or unset the flag signalling that a given smart object needs to 7006 * get recalculated. 7007 * 7008 * If this flag is set, then the @c calculate() smart function of @c obj will 7009 * be called, if one is provided, during rendering phase of Evas (see 7010 * evas_render()), after which this flag will be automatically unset. 7011 * 7012 * If that smart function is not provided for the given object, this flag will 7013 * be left unchanged. 7014 * 7015 * @note just setting this flag will not make the canvas' whole scene dirty, by 7016 * itself, and evas_render() will have no effect. To force that, use 7017 * evas_object_smart_changed(), that will also call this function 7018 * automatically, with @c true as parameter. 7019 * 7020 * See also @ref evas_object_smart_need_recalculate_get, 7021 * @ref evas_object_smart_calculate and @ref evas_smart_objects_calculate(). 7022 * 7023 * @param[in] value whether one wants to set ($true) or to unset ($false) the 7024 * flag. 7025 */ 7026 EAPI void evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool value); 7027 7028 /** 7029 * @brief Get the value of the flag signalling that a given smart object needs 7030 * to get recalculated. 7031 * 7032 * @note this flag will be unset during the rendering phase, when the 7033 * @c calculate() smart function is called, if one is provided. If it's not 7034 * provided, then the flag will be left unchanged after the rendering phase. 7035 * 7036 * See also @ref evas_object_smart_need_recalculate_set, for more details. 7037 * 7038 * @return whether one wants to set ($true) or to unset ($false) the flag. 7039 */ 7040 EAPI Eina_Bool evas_object_smart_need_recalculate_get(const Evas_Object *obj); 7041 7042 /** 7043 * @brief Retrieves an iterator of the member objects of a given Evas smart 7044 * object. 7045 * 7046 * See also @ref evas_object_smart_member_add and 7047 * @ref evas_object_smart_member_del 7048 * 7049 * @return Returns the iterator of the member objects of @c obj. 7050 * 7051 * @since 1.8 7052 */ 7053 EAPI Eina_Iterator *evas_object_smart_iterator_new(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT; 7054 7055 /** 7056 * @brief Call the calculate() smart function immediately on a given smart 7057 * object. 7058 * 7059 * This will force immediate calculations (see #Evas_Smart_Class) needed for 7060 * renderization of this object and, besides, unset the flag on it telling it 7061 * needs recalculation for the next rendering phase. 7062 * 7063 * See also @ref evas_object_smart_need_recalculate_set 7064 */ 7065 EAPI void evas_object_smart_calculate(Evas_Object *obj); 7066 7067 /** 7068 * @brief Mark smart object as changed, dirty. 7069 * 7070 * This will flag the given object as needing recalculation, forcefully. As an 7071 * effect, on the next rendering cycle its calculate() (see #Evas_Smart_Class) 7072 * smart function will be called. 7073 * 7074 * See also @ref evas_object_smart_need_recalculate_set and 7075 * @ref evas_object_smart_calculate. 7076 */ 7077 EAPI void evas_object_smart_changed(Evas_Object *obj); 7078 7079 /** 7080 * @brief Moves all children objects of a given smart object relative to a 7081 * given offset. 7082 * 7083 * This will make each of @c obj object's children to move, from where they 7084 * before, with those delta values (offsets) on both directions. 7085 * 7086 * @note This is most useful on custom smart @c move functions. 7087 * 7088 * @note Clipped smart objects already make use of this function on their 7089 * @c move smart function definition. 7090 * 7091 * @param[in] dx Horizontal offset (delta). 7092 * @param[in] dy Vertical offset (delta). 7093 */ 7094 EAPI void evas_object_smart_move_children_relative(Evas_Object *obj, Evas_Coord dx, Evas_Coord dy); 7095 7096 #include "canvas/efl_canvas_group_eo.legacy.h" 7097 7098 /** 7099 * @} 7100 */ 7101 7102 /** 7103 * @addtogroup Evas_Object_Box_Group 7104 * 7105 * @{ 7106 */ 7107 7108 /** 7109 * Add a new box object on the provided canvas. 7110 * 7111 * @param evas The canvas to create the box object on. 7112 * @return @c NULL on error, a pointer to a new box object on 7113 * success. 7114 * 7115 * After instantiation, if a box object hasn't its layout function 7116 * set, via evas_object_box_layout_set(), it will have it by default 7117 * set to evas_object_box_layout_horizontal(). The remaining 7118 * properties of the box must be set/retrieved via 7119 * <c>evas_object_box_{h,v}_{align,padding}_{get,set)()</c>. 7120 */ 7121 EAPI Evas_Object *evas_object_box_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 7122 7123 /** 7124 * Get a property's value (by its given numerical identifier), on a 7125 * given box child element -- by a variable argument list 7126 * 7127 * @param o The box parenting the child element 7128 * @param opt The box option structure bound to the child box element 7129 * to get a property from 7130 * @param property The numerical ID of the given property 7131 * @param args The variable argument list with pointers to where to 7132 * store the values of this property. They @b must point to variables 7133 * of the same type the user has defined for them. 7134 * @return @c EINA_TRUE on success, @c EINA_FALSE on failure. 7135 * 7136 * This is a variable argument list variant of the 7137 * evas_object_box_option_property_get(). See its documentation for 7138 * more details. 7139 */ 7140 EAPI Eina_Bool evas_object_box_option_property_vget(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2); 7141 7142 /** 7143 * Set a property value (by its given numerical identifier), on a 7144 * given box child element -- by a variable argument list 7145 * 7146 * @param o The box parenting the child element 7147 * @param opt The box option structure bound to the child box element 7148 * to set a property on 7149 * @param property The numerical ID of the given property 7150 * @param args The variable argument list implementing the value to 7151 * be set for this property. It @b must be of the same type the user has 7152 * defined for it. 7153 * @return @c EINA_TRUE on success, @c EINA_FALSE on failure. 7154 * 7155 * This is a variable argument list variant of the 7156 * evas_object_box_option_property_set(). See its documentation for 7157 * more details. 7158 */ 7159 EAPI Eina_Bool evas_object_box_option_property_vset(Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2); 7160 7161 /** 7162 * Set a property value (by its given numerical identifier), on a 7163 * given box child element 7164 * 7165 * @param o The box parenting the child element 7166 * @param opt The box option structure bound to the child box element 7167 * to set a property on 7168 * @param property The numerical ID of the given property 7169 * @param ... (List of) actual value(s) to be set for this 7170 * property. It (they) @b must be of the same type the user has 7171 * defined for it (them). 7172 * @return @c EINA_TRUE on success, @c EINA_FALSE on failure. 7173 * 7174 * @note This call won't do anything for a canonical Evas box. Only 7175 * users which have @b subclassed it, setting custom box items options 7176 * (see #Evas_Object_Box_Option) on it, would benefit from this 7177 * function. They'd have to implement it and set it to be the 7178 * _Evas_Object_Box_Api::property_set smart class function of the box, 7179 * which is originally set to @c NULL. 7180 * 7181 * @note This function will internally create a variable argument 7182 * list, with the values passed after @p property, and call 7183 * evas_object_box_option_property_vset() with this list and the same 7184 * previous arguments. 7185 */ 7186 EAPI Eina_Bool evas_object_box_option_property_set(Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2); 7187 7188 /** 7189 * Get a property's value (by its given numerical identifier), on a 7190 * given box child element 7191 * 7192 * @param o The box parenting the child element 7193 * @param opt The box option structure bound to the child box element 7194 * to get a property from 7195 * @param property The numerical ID of the given property 7196 * @param ... (List of) pointer(s) where to store the value(s) set for 7197 * this property. It (they) @b must point to variable(s) of the same 7198 * type the user has defined for it (them). 7199 * @return @c EINA_TRUE on success, @c EINA_FALSE on failure. 7200 * 7201 * @note This call won't do anything for a canonical Evas box. Only 7202 * users which have @b subclassed it, getting custom box items options 7203 * (see #Evas_Object_Box_Option) on it, would benefit from this 7204 * function. They'd have to implement it and get it to be the 7205 * _Evas_Object_Box_Api::property_get smart class function of the 7206 * box, which is originally get to @c NULL. 7207 * 7208 * @note This function will internally create a variable argument 7209 * list, with the values passed after @p property, and call 7210 * evas_object_box_option_property_vget() with this list and the same 7211 * previous arguments. 7212 */ 7213 EAPI Eina_Bool evas_object_box_option_property_get(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2); 7214 7215 /** 7216 * Get the list of children objects in a given box object. 7217 * 7218 * @param o The box to retrieve an items list from 7219 * @return A list of @p o's child objects, on success, or @c NULL, 7220 * on errors (or if it has no child objects) 7221 * 7222 * The returned list should be freed with @c eina_list_free() when you 7223 * no longer need it. 7224 * 7225 * @note This is a duplicate of the list kept by the box internally. 7226 * It's up to the user to destroy it when it no longer needs it. 7227 * It's possible to remove objects from the box when walking 7228 * this list, but these removals won't be reflected on it. 7229 */ 7230 EAPI Eina_List *evas_object_box_children_get(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 7231 7232 #include "canvas/evas_box_eo.legacy.h" 7233 7234 /** 7235 * @} 7236 */ 7237 7238 /** 7239 * @addtogroup Evas_Object_Table_Group 7240 * 7241 * @{ 7242 */ 7243 /** 7244 * @brief Create a new table. 7245 * 7246 * @param evas Canvas in which table will be added. 7247 */ 7248 EAPI Evas_Object *evas_object_table_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 7249 7250 /** 7251 * @brief Control the mirrored mode of the table. In mirrored mode, the table 7252 * items go from right to left instead of left to right. That is, 1,1 is top 7253 * right, not top left. 7254 * 7255 * @param[in] obj The object. 7256 * @param[in] mirrored @c true if mirrored, @c false otherwise 7257 * 7258 * @since 1.1 7259 * 7260 * @ingroup Evas_Table 7261 */ 7262 EAPI void evas_object_table_mirrored_set(Eo *obj, Eina_Bool mirrored); 7263 7264 /** 7265 * @brief Control the mirrored mode of the table. In mirrored mode, the table 7266 * items go from right to left instead of left to right. That is, 1,1 is top 7267 * right, not top left. 7268 * 7269 * @param[in] obj The object. 7270 * 7271 * @return @c true if mirrored, @c false otherwise 7272 * 7273 * @since 1.1 7274 * 7275 * @ingroup Evas_Table 7276 */ 7277 EAPI Eina_Bool evas_object_table_mirrored_get(const Eo *obj); 7278 7279 #include "canvas/evas_table_eo.legacy.h" 7280 7281 /** 7282 * @} 7283 */ 7284 7285 /** 7286 * @addtogroup Evas_Object_Grid_Group 7287 * 7288 * @{ 7289 */ 7290 /** 7291 * Create a new grid. 7292 * 7293 * It's set to a virtual size of 1x1 by default and add children with 7294 * evas_object_grid_pack(). 7295 * @since 1.1 7296 */ 7297 EAPI Evas_Object *evas_object_grid_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 7298 7299 7300 /** 7301 * @brief Sets the mirrored mode of the grid. In mirrored mode the grid items 7302 * go from right to left instead of left to right. That is, 0,0 is top right, 7303 * not to left. 7304 * 7305 * @param[in] obj The object. 7306 * @param[in] mirrored @c true if mirrored mode is set, @c false otherwise 7307 * 7308 * @since 1.1 7309 * 7310 * @ingroup Evas_Grid 7311 */ 7312 EAPI void evas_object_grid_mirrored_set(Eo *obj, Eina_Bool mirrored); 7313 7314 /** 7315 * @brief Gets the mirrored mode of the grid. 7316 * 7317 * See also @ref evas_object_grid_mirrored_set 7318 * 7319 * @param[in] obj The object. 7320 * 7321 * @return @c true if mirrored mode is set, @c false otherwise 7322 * 7323 * @since 1.1 7324 * 7325 * @ingroup Evas_Grid 7326 */ 7327 EAPI Eina_Bool evas_object_grid_mirrored_get(const Eo *obj); 7328 7329 #include "canvas/evas_grid_eo.legacy.h" 7330 7331 /** 7332 * @} 7333 */ 7334 7335 /** 7336 * @brief Sets the output framespace size of the render engine of the given 7337 * evas. 7338 * 7339 * The framespace size is used in the Wayland engines to denote space in the 7340 * viewport which is occupied by the window frame. This is mainly used in 7341 * ecore_evas to draw borders. 7342 * 7343 * The units used for @c w and @c h depend on the engine used by the evas. 7344 * 7345 * @param[in] x The left coordinate in output units, usually pixels. 7346 * @param[in] y The top coordinate in output units, usually pixels. 7347 * @param[in] w The width in output units, usually pixels. 7348 * @param[in] h The height in output units, usually pixels. 7349 * 7350 * @since 1.1 7351 * 7352 * @ingroup Evas_Canvas 7353 */ 7354 EAPI void evas_output_framespace_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); 7355 7356 /** 7357 * @brief Get the render engine's output framespace coordinates in canvas 7358 * units. 7359 * 7360 * @param[out] x The left coordinate in output units, usually pixels. 7361 * @param[out] y The top coordinate in output units, usually pixels. 7362 * @param[out] w The width in output units, usually pixels. 7363 * @param[out] h The height in output units, usually pixels. 7364 * 7365 * @since 1.1 7366 * 7367 * @ingroup Evas_Canvas 7368 */ 7369 EAPI void evas_output_framespace_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); 7370 7371 /** 7372 * @brief Sets the output viewport of the given evas in evas units. 7373 * 7374 * The output viewport is the area of the evas that will be visible to the 7375 * viewer. The viewport will be stretched to fit the output target of the evas 7376 * when rendering is performed. 7377 * 7378 * @note The coordinate values do not have to map 1-to-1 with the output 7379 * target. However, it is generally advised that it is done for ease of use. 7380 * 7381 * @param[in] x The top-left corner x value of the viewport. 7382 * @param[in] y The top-left corner y value of the viewport. 7383 * @param[in] w The width of the viewport. Must be greater than 0. 7384 * @param[in] h The height of the viewport. Must be greater than 0. 7385 * 7386 * @ingroup Evas_Canvas 7387 */ 7388 EAPI void evas_output_viewport_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); 7389 7390 /** 7391 * @brief Get the render engine's output viewport coordinates in canvas units. 7392 * 7393 * Calling this function writes the current canvas output viewport size and 7394 * location values into the variables pointed to by @c x, @c y, @c w and @c h. 7395 * On success the variables have the output location and size values written 7396 * to them in canvas units. Any of @c x, @c y, @c w or @c h that are @c null 7397 * will not be written to. If @c e is invalid, the results are undefined. 7398 * 7399 * @param[out] x The top-left corner x value of the viewport. 7400 * @param[out] y The top-left corner y value of the viewport. 7401 * @param[out] w The width of the viewport. Must be greater than 0. 7402 * @param[out] h The height of the viewport. Must be greater than 0. 7403 * 7404 * @ingroup Evas_Canvas 7405 */ 7406 EAPI void evas_output_viewport_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); 7407 7408 /** 7409 * @brief Sets the output engine for the given evas. 7410 * 7411 * Once the output engine for an evas is set, any attempt to change it will be 7412 * ignored. The value for @c render_method can be found using @ref 7413 * evas_render_method_lookup. 7414 * 7415 * @note it is mandatory that one calls @ref evas_init before setting the 7416 * output method. 7417 * 7418 * @param[in] render_method The numeric engine value to use. 7419 * 7420 * @ingroup Evas_Canvas 7421 */ 7422 EAPI void evas_output_method_set(Evas *e, int render_method); 7423 7424 /** 7425 * @brief Retrieves the number of the output engine used for the given evas. 7426 * 7427 * @return The numeric engine value to use. 7428 * 7429 * @ingroup Evas_Canvas 7430 */ 7431 EAPI int evas_output_method_get(const Evas *e); 7432 7433 /** 7434 * @brief Sets the output size of the render engine of the given evas. 7435 * 7436 * The evas will render to a rectangle of the given size once this function is 7437 * called. The output size is independent of the viewport size. The viewport 7438 * will be stretched to fill the given rectangle. 7439 * 7440 * The units used for @c w and @c h depend on the engine used by the evas. 7441 * 7442 * @param[in] w The width in output units, usually pixels. 7443 * @param[in] h The height in output units, usually pixels. 7444 * 7445 * @ingroup Evas_Canvas 7446 */ 7447 EAPI void evas_output_size_set(Evas *e, int w, int h); 7448 7449 /** 7450 * @brief Retrieve the output size of the render engine of the given evas. 7451 * 7452 * The output size is given in whatever the output units are for the engine. 7453 * 7454 * If either @c w or @c h is @c null, then it is ignored. If @c e is invalid, 7455 * the returned results are undefined. 7456 * 7457 * @param[out] w The width in output units, usually pixels. 7458 * @param[out] h The height in output units, usually pixels. 7459 * 7460 * @ingroup Evas_Canvas 7461 */ 7462 EAPI void evas_output_size_get(const Evas *e, int *w, int *h); 7463 7464 typedef struct _Evas_Map Evas_Map; 7465 7466 /** 7467 * @defgroup Evas_Object_Group_Map UV Mapping (Rotation, Perspective, 3D...) 7468 * 7469 * Evas allows different transformations to be applied to all kinds of 7470 * objects. These are applied by means of UV mapping. 7471 * 7472 * With UV mapping, one maps points in the source object to a 3D space 7473 * positioning at target. This allows rotation, perspective, scale and 7474 * lots of other effects, depending on the map that is used. 7475 * 7476 * Each map point may carry a multiplier color. If properly 7477 * calculated, these can do shading effects on the object, producing 7478 * 3D effects. 7479 * 7480 * As usual, Evas provides both the raw and easy to use methods. The 7481 * raw methods allow developers to create their maps somewhere else, 7482 * possibly loading them from some file format. The easy to use methods 7483 * calculate the points given some high-level parameters such as 7484 * rotation angle, ambient light, and so on. 7485 * 7486 * @note applying mapping will reduce performance, so use with 7487 * care. The impact on performance depends on engine in 7488 * use. Software is quite optimized, but not as fast as OpenGL. 7489 * 7490 * @section sec-map-points Map points 7491 * @subsection subsec-rotation Rotation 7492 * 7493 * A map consists of a set of points, currently only four are supported. Each 7494 * of these points contains a set of canvas coordinates @c x and @c y that 7495 * can be used to alter the geometry of the mapped object, and a @c z 7496 * coordinate that indicates the depth of that point. This last coordinate 7497 * does not normally affect the map, but it's used by several of the utility 7498 * functions to calculate the right position of the point given other 7499 * parameters. 7500 * 7501 * The coordinates for each point are set with evas_map_point_coord_set(). 7502 * The following image shows a map set to match the geometry of an existing 7503 * object. 7504 * 7505 * @image html map-set-map-points-1.png 7506 * @image rtf map-set-map-points-1.png 7507 * @image latex map-set-map-points-1.eps 7508 * 7509 * This is a common practice, so there are a few functions that help make it 7510 * easier. 7511 * 7512 * evas_map_util_points_populate_from_geometry() sets the coordinates of each 7513 * point in the given map to match the rectangle defined by the function 7514 * parameters. 7515 * 7516 * evas_map_util_points_populate_from_object() and 7517 * evas_map_util_points_populate_from_object_full() both take an object and 7518 * set the map points to match its geometry. The difference between the two 7519 * is that the first function sets the @c z value of all points to 0, while 7520 * the latter receives the value to set in said coordinate as a parameter. 7521 * 7522 * The following lines of code all produce the same result as in the image 7523 * above. 7524 * @code 7525 * evas_map_util_points_populate_from_geometry(m, 100, 100, 200, 200, 0); 7526 * // Assuming o is our original object 7527 * evas_object_move(o, 100, 100); 7528 * evas_object_resize(o, 200, 200); 7529 * evas_map_util_points_populate_from_object(m, o); 7530 * evas_map_util_points_populate_from_object_full(m, o, 0); 7531 * @endcode 7532 * 7533 * Several effects can be applied to an object by simply setting each point 7534 * of the map to the right coordinates. For example, a simulated perspective 7535 * could be achieve as follows. 7536 * 7537 * @image html map-set-map-points-2.png 7538 * @image rtf map-set-map-points-2.png 7539 * @image latex map-set-map-points-2.eps 7540 * 7541 * As said before, the @c z coordinate is unused here so when setting points 7542 * by hand, its value is of no importance. 7543 * 7544 * @image html map-set-map-points-3.png 7545 * @image rtf map-set-map-points-3.png 7546 * @image latex map-set-map-points-3.eps 7547 * 7548 * In all three cases above, setting the map to be used by the object is the 7549 * same. 7550 * @code 7551 * evas_object_map_set(o, m); 7552 * evas_object_map_enable_set(o, EINA_TRUE); 7553 * @endcode 7554 * 7555 * Doing things this way, however, is a lot of work that can be avoided by 7556 * using the provided utility functions, as described in the next section. 7557 * 7558 * @section map-utils Utility functions 7559 * 7560 * Utility functions take an already set up map and alter it to produce a 7561 * specific effect. For example, to rotate an object around its own center 7562 * you would need to take the rotation angle, the coordinates of each corner 7563 * of the object and do all the math to get the new set of coordinates that 7564 * need to be set in the map. 7565 * 7566 * Or you can use this code: 7567 * @code 7568 * evas_object_geometry_get(o, &x, &y, &w, &h); 7569 * m = evas_map_new(4); 7570 * evas_map_util_points_populate_from_object(m, o); 7571 * evas_map_util_rotate(m, 45, x + (w / 2), y + (h / 2)); 7572 * evas_object_map_set(o, m); 7573 * evas_object_map_enable_set(o, EINA_TRUE); 7574 * evas_map_free(m); 7575 * @endcode 7576 * 7577 * Which will rotate the object around its center point in a 45 degree angle 7578 * in the clockwise direction, taking it from this 7579 * 7580 * @image html map-rotation-2d-1.png 7581 * @image rtf map-rotation-2d-1.png 7582 * @image latex map-rotation-2d-1.eps 7583 * 7584 * to this 7585 * 7586 * @image html map-rotation-2d-2.png 7587 * @image rtf map-rotation-2d-2.png 7588 * @image latex map-rotation-2d-2.eps 7589 * 7590 * Objects may be rotated around any other point just by setting the last two 7591 * paramaters of the evas_map_util_rotate() function to the right values. A 7592 * circle of roughly the diameter of the object overlaid on each image shows 7593 * where the center of rotation is set for each example. 7594 * 7595 * For example, this code 7596 * @code 7597 * evas_object_geometry_get(o, &x, &y, &w, &h); 7598 * m = evas_map_new(4); 7599 * evas_map_util_points_populate_from_object(m, o); 7600 * evas_map_util_rotate(m, 45, x + w - 20, y + h - 20); 7601 * evas_object_map_set(o, m); 7602 * evas_object_map_enable_set(o, EINA_TRUE); 7603 * evas_map_free(m); 7604 * @endcode 7605 * 7606 * produces something like 7607 * 7608 * @image html map-rotation-2d-3.png 7609 * @image rtf map-rotation-2d-3.png 7610 * @image latex map-rotation-2d-3.eps 7611 * 7612 * And the following 7613 * @code 7614 * evas_output_size_get(evas, &w, &h); 7615 * m = evas_map_new(4); 7616 * evas_map_util_points_populate_from_object(m, o); 7617 * evas_map_util_rotate(m, 45, w, h); 7618 * evas_object_map_set(o, m); 7619 * evas_object_map_enable_set(o, EINA_TRUE); 7620 * evas_map_free(m); 7621 * @endcode 7622 * 7623 * rotates the object around the center of the window 7624 * 7625 * @image html map-rotation-2d-4.png 7626 * @image rtf map-rotation-2d-4.png 7627 * @image latex map-rotation-2d-4.eps 7628 * 7629 * @subsection subsec-3d 3D Maps 7630 * 7631 * Maps can also be used to achieve the effect of 3-dimensionality. When doing 7632 * this, the @c z coordinate of each point counts, with higher values meaning 7633 * the point is further into the screen, and smaller values (negative, usually) 7634 * meaning the point is closer towards the user. 7635 * 7636 * Thinking in 3D also introduces the concept of back-face of an object. An 7637 * object is said to be facing the user when all its points are placed in a 7638 * clockwise fashion. The next image shows this, with each point showing the 7639 * with which is identified within the map. 7640 * 7641 * @image html map-point-order-face.png 7642 * @image rtf map-point-order-face.png 7643 * @image latex map-point-order-face.eps 7644 * 7645 * Rotating this map around the @c Y axis would leave the order of the points 7646 * in a counter-clockwise fashion, as seen in the following image. 7647 * 7648 * @image html map-point-order-back.png 7649 * @image rtf map-point-order-back.png 7650 * @image latex map-point-order-back.eps 7651 * 7652 * This way we can say that we are looking at the back face of the object. 7653 * This will have stronger implications later when we talk about lighting. 7654 * 7655 * To know if a map is facing towards the user or not it's enough to use 7656 * the evas_map_util_clockwise_get() function, but this is normally done 7657 * after all the other operations are applied on the map. 7658 * 7659 * @subsection subsec-3d-rot 3D rotation and perspective 7660 * 7661 * Much like evas_map_util_rotate(), there's the function 7662 * evas_map_util_3d_rotate() that transforms the map to apply a 3D rotation 7663 * to an object. As in its 2D counterpart, the rotation can be applied around 7664 * any point in the canvas, this time with a @c z coordinate too. The rotation 7665 * can also be around any of the 3 axis. 7666 * 7667 * Starting from this simple setup 7668 * 7669 * @image html map-3d-basic-1.png 7670 * @image rtf map-3d-basic-1.png 7671 * @image latex map-3d-basic-1.eps 7672 * 7673 * and setting maps so that the blue square to rotate on all axis around a 7674 * sphere that uses the object as its center, and the red square to rotate 7675 * around the @c Y axis, we get the following. A simple overlay over the image 7676 * shows the original geometry of each object and the axis around which they 7677 * are being rotated, with the @c Z one not appearing due to being orthogonal 7678 * to the screen. 7679 * 7680 * @image html map-3d-basic-2.png 7681 * @image rtf map-3d-basic-2.png 7682 * @image latex map-3d-basic-2.eps 7683 * 7684 * which doesn't look very real. This can be helped by adding perspective 7685 * to the transformation, which can be simply done by calling 7686 * evas_map_util_3d_perspective() on the map after its position has been set. 7687 * The result in this case, making the vanishing point the center of each 7688 * object: 7689 * 7690 * @image html map-3d-basic-3.png 7691 * @image rtf map-3d-basic-3.png 7692 * @image latex map-3d-basic-3.eps 7693 * 7694 * @section sec-color Color and lighting 7695 * 7696 * Each point in a map can be set to a color, which will be multiplied with 7697 * the objects own color and linearly interpolated in between adjacent points. 7698 * This is done with evas_map_point_color_set() for each point of the map, 7699 * or evas_map_util_points_color_set() to set every point to the same color. 7700 * 7701 * When using 3D effects, colors can be used to improve the looks of them by 7702 * simulating a light source. The evas_map_util_3d_lighting() function makes 7703 * this task easier by taking the coordinates of the light source and its 7704 * color, along with the color of the ambient light. Evas then sets the color 7705 * of each point based on the distance to the light source, the angle with 7706 * which the object is facing the light and the ambient light. Here, the 7707 * orientation of each point as explained before, becomes more important. 7708 * If the map is defined counter-clockwise, the object will be facing away 7709 * from the user and thus become obscured, since no light would be reflecting 7710 * from it. 7711 * 7712 * @image html map-light.png 7713 * @image rtf map-light.png 7714 * @image latex map-light.eps 7715 * @note Object facing the light source 7716 * 7717 * @image html map-light2.png 7718 * @image rtf map-light2.png 7719 * @image latex map-light2.eps 7720 * @note Same object facing away from the user 7721 * 7722 * @section Image mapping 7723 * 7724 * @image html map-uv-mapping-1.png 7725 * @image rtf map-uv-mapping-1.png 7726 * @image latex map-uv-mapping-1.eps 7727 * 7728 * Images need some special handling when mapped. Evas can easily take care 7729 * of objects and do almost anything with them, but it's completely oblivious 7730 * to the content of images, so each point in the map needs to be told to what 7731 * pixel in the source image it belongs. Failing to do may sometimes result 7732 * in the expected behavior, or it may look like a partial work. 7733 * 7734 * The next image illustrates one possibility of a map being set to an image 7735 * object, without setting the right UV mapping for each point. The objects 7736 * themselves are mapped properly to their new geometry, but the image content 7737 * may not be displayed correctly within the mapped object. 7738 * 7739 * @image html map-uv-mapping-2.png 7740 * @image rtf map-uv-mapping-2.png 7741 * @image latex map-uv-mapping-2.eps 7742 * 7743 * Once Evas knows how to handle the source image within the map, it will 7744 * transform it as needed. This is done with evas_map_point_image_uv_set(), 7745 * which tells the map to which pixel in image it maps. 7746 * 7747 * To match our example images to the maps above all we need is the size of 7748 * each image, which can always be found with evas_object_image_size_get(). 7749 * 7750 * @code 7751 * evas_map_point_image_uv_set(m, 0, 0, 0); 7752 * evas_map_point_image_uv_set(m, 1, 150, 0); 7753 * evas_map_point_image_uv_set(m, 2, 150, 200); 7754 * evas_map_point_image_uv_set(m, 3, 0, 200); 7755 * evas_object_map_set(o, m); 7756 * evas_object_map_enable_set(o, EINA_TRUE); 7757 * 7758 * evas_map_point_image_uv_set(m, 0, 0, 0); 7759 * evas_map_point_image_uv_set(m, 1, 120, 0); 7760 * evas_map_point_image_uv_set(m, 2, 120, 160); 7761 * evas_map_point_image_uv_set(m, 3, 0, 160); 7762 * evas_object_map_set(o2, m); 7763 * evas_object_map_enable_set(o2, EINA_TRUE); 7764 * @endcode 7765 * 7766 * To get 7767 * 7768 * @image html map-uv-mapping-3.png 7769 * @image rtf map-uv-mapping-3.png 7770 * @image latex map-uv-mapping-3.eps 7771 * 7772 * Maps can also be set to use part of an image only, or even map them inverted, 7773 * and combined with evas_object_image_source_set() it can be used to achieve 7774 * more interesting results. 7775 * 7776 * @code 7777 * evas_object_image_size_get(evas_object_image_source_get(o), &w, &h); 7778 * evas_map_point_image_uv_set(m, 0, 0, h); 7779 * evas_map_point_image_uv_set(m, 1, w, h); 7780 * evas_map_point_image_uv_set(m, 2, w, h / 3); 7781 * evas_map_point_image_uv_set(m, 3, 0, h / 3); 7782 * evas_object_map_set(o, m); 7783 * evas_object_map_enable_set(o, EINA_TRUE); 7784 * @endcode 7785 * 7786 * @image html map-uv-mapping-4.png 7787 * @image rtf map-uv-mapping-4.png 7788 * @image latex map-uv-mapping-4.eps 7789 * 7790 * Examples: 7791 * @li @ref Example_Evas_Map_Overview 7792 * 7793 * @ingroup Evas_Object_Group 7794 * 7795 * @{ 7796 */ 7797 7798 /** 7799 * Populate source and destination map points to match exactly object. 7800 * 7801 * Usually one initialize map of an object to match it's original 7802 * position and size, then transform these with evas_map_util_* 7803 * functions, such as evas_map_util_rotate() or 7804 * evas_map_util_3d_rotate(). The original set is done by this 7805 * function, avoiding code duplication all around. 7806 * 7807 * @param m map to change all 4 points (must be of size 4). 7808 * @param obj object to use unmapped geometry to populate map coordinates. 7809 * @param z Point Z Coordinate hint (pre-perspective transform). This value 7810 * will be used for all four points. 7811 * 7812 * @see evas_map_util_points_populate_from_object() 7813 * @see evas_map_point_coord_set() 7814 * @see evas_map_point_image_uv_set() 7815 */ 7816 EAPI void evas_map_util_points_populate_from_object_full(Evas_Map *m, const Evas_Object *obj, Evas_Coord z); 7817 7818 /** 7819 * Populate source and destination map points to match exactly object. 7820 * 7821 * Usually one initialize map of an object to match it's original 7822 * position and size, then transform these with evas_map_util_* 7823 * functions, such as evas_map_util_rotate() or 7824 * evas_map_util_3d_rotate(). The original set is done by this 7825 * function, avoiding code duplication all around. 7826 * 7827 * Z Point coordinate is assumed as 0 (zero). 7828 * 7829 * @param m map to change all 4 points (must be of size 4). 7830 * @param obj object to use unmapped geometry to populate map coordinates. 7831 * 7832 * @see evas_map_util_points_populate_from_object_full() 7833 * @see evas_map_util_points_populate_from_geometry() 7834 * @see evas_map_point_coord_set() 7835 * @see evas_map_point_image_uv_set() 7836 */ 7837 EAPI void evas_map_util_points_populate_from_object(Evas_Map *m, const Evas_Object *obj); 7838 7839 /** 7840 * Populate source and destination map points to match given geometry. 7841 * 7842 * Similar to evas_map_util_points_populate_from_object_full(), this 7843 * call takes raw values instead of querying object's unmapped 7844 * geometry. The given width will be used to calculate destination 7845 * points (evas_map_point_coord_set()) and set the image uv 7846 * (evas_map_point_image_uv_set()). 7847 * 7848 * @param m map to change all 4 points (must be of size 4). 7849 * @param x Point X Coordinate 7850 * @param y Point Y Coordinate 7851 * @param w width to use to calculate second and third points. 7852 * @param h height to use to calculate third and fourth points. 7853 * @param z Point Z Coordinate hint (pre-perspective transform). This value 7854 * will be used for all four points. 7855 * 7856 * @see evas_map_util_points_populate_from_object() 7857 * @see evas_map_point_coord_set() 7858 * @see evas_map_point_image_uv_set() 7859 */ 7860 EAPI void evas_map_util_points_populate_from_geometry(Evas_Map *m, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Evas_Coord z); 7861 7862 /** 7863 * Set color of all points to given color. 7864 * 7865 * This call is useful to reuse maps after they had 3d lighting or 7866 * any other colorization applied before. 7867 * 7868 * @param m map to change the color of. 7869 * @param r red (0 - 255) 7870 * @param g green (0 - 255) 7871 * @param b blue (0 - 255) 7872 * @param a alpha (0 - 255) 7873 * 7874 * @see evas_map_point_color_set() 7875 */ 7876 EAPI void evas_map_util_points_color_set(Evas_Map *m, int r, int g, int b, int a); 7877 7878 /** 7879 * Change the map to apply the given rotation. 7880 * 7881 * This rotates the indicated map's coordinates around the center coordinate 7882 * given by @p cx and @p cy as the rotation center. The points will have their 7883 * X and Y coordinates rotated clockwise by @p degrees degrees (360.0 is a 7884 * full rotation). Negative values for degrees will rotate counter-clockwise 7885 * by that amount. All coordinates are canvas global coordinates. 7886 * 7887 * @param m map to change. 7888 * @param degrees amount of degrees from 0.0 to 360.0 to rotate. 7889 * @param cx rotation's center horizontal position. 7890 * @param cy rotation's center vertical position. 7891 * 7892 * @see evas_map_point_coord_set() 7893 * @see evas_map_util_zoom() 7894 */ 7895 EAPI void evas_map_util_rotate(Evas_Map *m, double degrees, Evas_Coord cx, Evas_Coord cy); 7896 7897 /** 7898 * Change the map to apply the given zooming. 7899 * 7900 * Like evas_map_util_rotate(), this zooms the points of the map from a center 7901 * point. That center is defined by @p cx and @p cy. The @p zoomx and @p zoomy 7902 * parameters specify how much to zoom in the X and Y direction respectively. 7903 * A value of 1.0 means "don't zoom". 2.0 means "double the size". 0.5 is 7904 * "half the size" etc. All coordinates are canvas global coordinates. 7905 * 7906 * @param m map to change. 7907 * @param zoomx horizontal zoom to use. 7908 * @param zoomy vertical zoom to use. 7909 * @param cx zooming center horizontal position. 7910 * @param cy zooming center vertical position. 7911 * 7912 * @see evas_map_point_coord_set() 7913 * @see evas_map_util_rotate() 7914 */ 7915 EAPI void evas_map_util_zoom(Evas_Map *m, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy); 7916 7917 /** 7918 * Rotate the map around 3 axes in 3D 7919 * 7920 * This will rotate not just around the "Z" axis as in evas_map_util_rotate() 7921 * (which is a convenience call for those only wanting 2D). This will rotate 7922 * around the X, Y and Z axes. The Z axis points "into" the screen with low 7923 * values at the screen and higher values further away. The X axis runs from 7924 * left to right on the screen and the Y axis from top to bottom. Like with 7925 * evas_map_util_rotate() you provide a center point to rotate around (in 3D). 7926 * 7927 * @param m map to change. 7928 * @param dx amount of degrees from 0.0 to 360.0 to rotate around X axis. 7929 * @param dy amount of degrees from 0.0 to 360.0 to rotate around Y axis. 7930 * @param dz amount of degrees from 0.0 to 360.0 to rotate around Z axis. 7931 * @param cx rotation's center horizontal position. 7932 * @param cy rotation's center vertical position. 7933 * @param cz rotation's center vertical position. 7934 */ 7935 EAPI void evas_map_util_3d_rotate(Evas_Map *m, double dx, double dy, double dz, Evas_Coord cx, Evas_Coord cy, Evas_Coord cz); 7936 7937 /** 7938 * Rotate the map in 3D using a unit quaternion. 7939 * 7940 * This will rotate in 3D using a unit quaternion. Like with 7941 * evas_map_util_3d_rotate() you provide a center point 7942 * to rotate around (in 3D). 7943 * 7944 * @param m map to change. 7945 * @param qx the x component of the imaginary part of the quaternion. 7946 * @param qy the y component of the imaginary part of the quaternion. 7947 * @param qz the z component of the imaginary part of the quaternion. 7948 * @param qw the w component of the real part of the quaternion. 7949 * @param cx rotation's center x. 7950 * @param cy rotation's center y. 7951 * @param cz rotation's center z. 7952 * 7953 * @warning Rotations can be done using a unit quaternion. Thus, this 7954 * function expects a unit quaternion (i.e. qx² + qy² + qz² + qw² == 1). 7955 * If this is not the case the behavior is undefined. 7956 * 7957 * @since 1.8 7958 */ 7959 EAPI void evas_map_util_quat_rotate(Evas_Map *m, double qx, double qy, double qz, double qw, double cx, double cy, double cz); 7960 7961 /** 7962 * Perform lighting calculations on the given Map 7963 * 7964 * This is used to apply lighting calculations (from a single light source) 7965 * to a given map. The R, G and B values of each vertex will be modified to 7966 * reflect the lighting based on the light point coordinates, the light 7967 * color and the ambient color, and at what angle the map is facing the 7968 * light source. A surface should have its points be declared in a 7969 * clockwise fashion if the face is "facing" towards you (as opposed to 7970 * away from you) as faces have a "logical" side for lighting. 7971 * 7972 * @image html map-light3.png 7973 * @image rtf map-light3.png 7974 * @image latex map-light3.eps 7975 * @note Grey object, no lighting used 7976 * 7977 * @image html map-light4.png 7978 * @image rtf map-light4.png 7979 * @image latex map-light4.eps 7980 * @note Lights out! Every color set to 0 7981 * 7982 * @image html map-light5.png 7983 * @image rtf map-light5.png 7984 * @image latex map-light5.eps 7985 * @note Ambient light to full black, red light coming from close at the 7986 * bottom-left vertex 7987 * 7988 * @image html map-light6.png 7989 * @image rtf map-light6.png 7990 * @image latex map-light6.eps 7991 * @note Same light as before, but not the light is set to 0 and ambient light 7992 * is cyan 7993 * 7994 * @image html map-light7.png 7995 * @image rtf map-light7.png 7996 * @image latex map-light7.eps 7997 * @note Both lights are on 7998 * 7999 * @image html map-light8.png 8000 * @image rtf map-light8.png 8001 * @image latex map-light8.eps 8002 * @note Both lights again, but this time both are the same color. 8003 * 8004 * @param m map to change. 8005 * @param lx X coordinate in space of light point 8006 * @param ly Y coordinate in space of light point 8007 * @param lz Z coordinate in space of light point 8008 * @param lr light red value (0 - 255) 8009 * @param lg light green value (0 - 255) 8010 * @param lb light blue value (0 - 255) 8011 * @param ar ambient color red value (0 - 255) 8012 * @param ag ambient color green value (0 - 255) 8013 * @param ab ambient color blue value (0 - 255) 8014 */ 8015 EAPI void evas_map_util_3d_lighting(Evas_Map *m, Evas_Coord lx, Evas_Coord ly, Evas_Coord lz, int lr, int lg, int lb, int ar, int ag, int ab); 8016 8017 /** 8018 * Apply a perspective transform to the map 8019 * 8020 * This applies a given perspective (3D) to the map coordinates. X, Y and Z 8021 * values are used. The px and py points specify the "infinite distance" point 8022 * in the 3D conversion (where all lines converge to like when artists draw 8023 * 3D by hand). The @p z0 value specifies the z value at which there is a 1:1 8024 * mapping between spatial coordinates and screen coordinates. Any points 8025 * on this z value will not have their X and Y values modified in the transform. 8026 * Those further away (Z value higher) will shrink into the distance, and 8027 * those less than this value will expand and become bigger. The @p foc value 8028 * determines the "focal length" of the camera. This is in reality the distance 8029 * between the camera lens plane itself (at or closer than this rendering 8030 * results are undefined) and the "z0" z value. This allows for some "depth" 8031 * control and @p foc must be greater than 0. 8032 * 8033 * @param m map to change. 8034 * @param px The perspective distance X coordinate 8035 * @param py The perspective distance Y coordinate 8036 * @param z0 The "0" z plane value 8037 * @param foc The focal distance 8038 */ 8039 EAPI void evas_map_util_3d_perspective(Evas_Map *m, Evas_Coord px, Evas_Coord py, Evas_Coord z0, Evas_Coord foc); 8040 8041 /** 8042 * Get the clockwise state of a map 8043 * 8044 * This determines if the output points (X and Y. Z is not used) are 8045 * clockwise or counter-clockwise. This can be used for "back-face culling". This 8046 * is where you hide objects that "face away" from you. In this case objects 8047 * that are not clockwise. 8048 * 8049 * @param m map to query. 8050 * @return 1 if clockwise, 0 otherwise 8051 */ 8052 EAPI Eina_Bool evas_map_util_clockwise_get(Evas_Map *m); 8053 8054 /** 8055 * Create map of transformation points to be later used with an Evas object. 8056 * 8057 * This creates a set of points (currently only 4 is supported. no other 8058 * number for @p count will work). That is empty and ready to be modified 8059 * with evas_map calls. 8060 * 8061 * @param count number of points in the map. 8062 * @return a newly allocated map or @c NULL on errors. 8063 * 8064 * @see evas_map_free() 8065 * @see evas_map_dup() 8066 * @see evas_map_point_coord_set() 8067 * @see evas_map_point_image_uv_set() 8068 * @see evas_map_util_points_populate_from_object_full() 8069 * @see evas_map_util_points_populate_from_object() 8070 * 8071 * @see evas_object_map_set() 8072 */ 8073 EAPI Evas_Map *evas_map_new(int count); 8074 8075 /** 8076 * Set the smoothing for map rendering 8077 * 8078 * This sets smoothing for map rendering. If the object is a type that has 8079 * its own smoothing settings, then both the smooth settings for this object 8080 * and the map must be turned off. By default smooth maps are enabled. 8081 * 8082 * @param m map to modify. Must not be NULL. 8083 * @param enabled enable or disable smooth map rendering 8084 */ 8085 EAPI void evas_map_smooth_set(Evas_Map *m, Eina_Bool enabled); 8086 8087 /** 8088 * Get the smoothing for map rendering 8089 * 8090 * This gets smoothing for map rendering. 8091 * 8092 * @param m map to get the smooth from. Must not be NULL. 8093 * @return @c EINA_TRUE if the smooth is enabled, @c EINA_FALSE otherwise. 8094 */ 8095 EAPI Eina_Bool evas_map_smooth_get(const Evas_Map *m); 8096 8097 /** 8098 * Set the alpha flag for map rendering 8099 * 8100 * This sets alpha flag for map rendering. If the object is a type that has 8101 * its own alpha settings, then this will take precedence. Only image objects 8102 * have this currently. 8103 * Setting this off stops alpha blending of the map area, and is 8104 * useful if you know the object and/or all sub-objects is 100% solid. 8105 * 8106 * @param m map to modify. Must not be NULL. 8107 * @param enabled enable or disable alpha map rendering 8108 */ 8109 EAPI void evas_map_alpha_set(Evas_Map *m, Eina_Bool enabled); 8110 8111 /** 8112 * Get the alpha flag for map rendering 8113 * 8114 * This gets the alpha flag for map rendering. 8115 * 8116 * @param m map to get the alpha from. Must not be NULL. 8117 * @return EINA_FALSE if map is NULL EINA_TRUE otherwise. 8118 */ 8119 EAPI Eina_Bool evas_map_alpha_get(const Evas_Map *m); 8120 8121 /** 8122 * Set the flag of the object move synchronization for map rendering 8123 * 8124 * This sets the flag of the object move synchronization for map rendering. 8125 * If the flag is set as enabled, the map will be moved as the object of the map 8126 * is moved. By default, the flag of the object move synchronization is not 8127 * enabled. 8128 * 8129 * @param m map to modify. Must not be NULL. 8130 * @param enabled enable or disable the object move synchronization for map 8131 * rendering. 8132 * @since 1.13 8133 */ 8134 EAPI void evas_map_util_object_move_sync_set(Evas_Map *m, Eina_Bool enabled); 8135 8136 /** 8137 * Get the flag of the object move synchronization for map rendering 8138 * 8139 * This gets the flag of the object move synchronization for map rendering. 8140 * 8141 * @param m map to get the flag of the object move synchronization from. Must 8142 * not be NULL. 8143 * @return EINA_FALSE if map is NULL EINA_TRUE otherwise. 8144 * @since 1.13 8145 */ 8146 EAPI Eina_Bool evas_map_util_object_move_sync_get(const Evas_Map *m); 8147 8148 /** 8149 * Copy a previously allocated map. 8150 * 8151 * This makes a duplicate of the @p m object and returns it. 8152 * 8153 * @param m map to copy. Must not be NULL. 8154 * @return newly allocated map with the same count and contents as @p m. 8155 */ 8156 EAPI Evas_Map *evas_map_dup(const Evas_Map *m); 8157 8158 /** 8159 * Free a previously allocated map. 8160 * 8161 * This frees a given map @p m and all memory associated with it. You must NOT 8162 * free a map returned by evas_object_map_get() as this is internal. 8163 * 8164 * @param m map to free. 8165 */ 8166 EAPI void evas_map_free(Evas_Map *m); 8167 8168 /** 8169 * Get a maps size. 8170 * 8171 * Returns the number of points in a map. Should be at least 4. 8172 * 8173 * @param m map to get size. 8174 * @return -1 on error, points otherwise. 8175 */ 8176 EAPI int evas_map_count_get(const Evas_Map *m) EINA_CONST; 8177 8178 /** 8179 * Apply a map transformation on given coordinate 8180 * 8181 * @param m map to use to transform x and y 8182 * @param x point x source coordinate 8183 * @param y point y source coordinate 8184 * @param mx point x after transformation by m 8185 * @param my point y after transformation by m 8186 * @param grab 8187 * @return #EINA_TRUE on success interpolation, #EINA_FALSE otherwise 8188 * @since 1.20 8189 */ 8190 EAPI Eina_Bool evas_map_coords_get(const Evas_Map *m, double x, double y, 8191 double *mx, double *my, int grab); 8192 8193 /** 8194 * Change the map point's coordinate. 8195 * 8196 * This sets the fixed point's coordinate in the map. Note that points 8197 * describe the outline of a quadrangle and are ordered either clockwise 8198 * or counter-clockwise. It is suggested to keep your quadrangles concave and 8199 * non-complex, though these polygon modes may work, they may not render 8200 * a desired set of output. The quadrangle will use points 0 and 1 , 1 and 2, 8201 * 2 and 3, and 3 and 0 to describe the edges of the quadrangle. 8202 * 8203 * The X and Y and Z coordinates are in canvas units. Z is optional and may 8204 * or may not be honored in drawing. Z is a hint and does not affect the 8205 * X and Y rendered coordinates. It may be used for calculating fills with 8206 * perspective correct rendering. 8207 * 8208 * Remember all coordinates are canvas global ones like with move and resize 8209 * in evas. 8210 * 8211 * @param m map to change point. Must not be @c NULL. 8212 * @param idx index of point to change. Must be smaller than map size. 8213 * @param x Point X Coordinate 8214 * @param y Point Y Coordinate 8215 * @param z Point Z Coordinate hint (pre-perspective transform) 8216 * 8217 * @see evas_map_util_rotate() 8218 * @see evas_map_util_zoom() 8219 * @see evas_map_util_points_populate_from_object_full() 8220 * @see evas_map_util_points_populate_from_object() 8221 */ 8222 EAPI void evas_map_point_coord_set(Evas_Map *m, int idx, Evas_Coord x, Evas_Coord y, Evas_Coord z); 8223 8224 /** 8225 * Get the map point's coordinate. 8226 * 8227 * This returns the coordinates of the given point in the map. 8228 * 8229 * @param m map to query point. 8230 * @param idx index of point to query. Must be smaller than map size. 8231 * @param x where to return the X coordinate. 8232 * @param y where to return the Y coordinate. 8233 * @param z where to return the Z coordinate. 8234 */ 8235 EAPI void evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z); 8236 8237 /** 8238 * Change the map point's U and V texture source point 8239 * 8240 * This sets the U and V coordinates for the point. This determines which 8241 * coordinate in the source image is mapped to the given point, much like 8242 * OpenGL and textures. Notes that these points do select the pixel, but 8243 * are double floating point values to allow for accuracy and sub-pixel 8244 * selection. 8245 * 8246 * @param m map to change the point of. 8247 * @param idx index of point to change. Must be smaller than map size. 8248 * @param u the X coordinate within the image/texture source 8249 * @param v the Y coordinate within the image/texture source 8250 * 8251 * @see evas_map_point_coord_set() 8252 * @see evas_object_map_set() 8253 * @see evas_map_util_points_populate_from_object_full() 8254 * @see evas_map_util_points_populate_from_object() 8255 */ 8256 EAPI void evas_map_point_image_uv_set(Evas_Map *m, int idx, double u, double v); 8257 8258 /** 8259 * Get the map point's U and V texture source points 8260 * 8261 * This returns the texture points set by evas_map_point_image_uv_set(). 8262 * 8263 * @param m map to query point. 8264 * @param idx index of point to query. Must be smaller than map size. 8265 * @param u where to write the X coordinate within the image/texture source 8266 * @param v where to write the Y coordinate within the image/texture source 8267 */ 8268 EAPI void evas_map_point_image_uv_get(const Evas_Map *m, int idx, double *u, double *v); 8269 8270 /** 8271 * Set the color of a vertex in the map 8272 * 8273 * This sets the color of the vertex in the map. Colors will be linearly 8274 * interpolated between vertex points through the map. Color will multiply 8275 * the "texture" pixels (like GL_MODULATE in OpenGL). The default color of 8276 * a vertex in a map is white solid (255, 255, 255, 255) which means it will 8277 * have no affect on modifying the texture pixels. 8278 * 8279 * @param m map to change the color of. 8280 * @param idx index of point to change. Must be smaller than map size. 8281 * @param r red (0 - 255) 8282 * @param g green (0 - 255) 8283 * @param b blue (0 - 255) 8284 * @param a alpha (0 - 255) 8285 * 8286 * @see evas_map_util_points_color_set() 8287 * @see evas_map_point_coord_set() 8288 * @see evas_object_map_set() 8289 */ 8290 EAPI void evas_map_point_color_set(Evas_Map *m, int idx, int r, int g, int b, int a); 8291 8292 /** 8293 * Get the color set on a vertex in the map 8294 * 8295 * This gets the color set by evas_map_point_color_set() on the given vertex 8296 * of the map. 8297 * 8298 * @param m map to get the color of the vertex from. 8299 * @param idx index of point get. Must be smaller than map size. 8300 * @param r pointer to red return 8301 * @param g pointer to green return 8302 * @param b pointer to blue return 8303 * @param a pointer to alpha return 8304 * 8305 * @see evas_map_point_coord_set() 8306 * @see evas_object_map_set() 8307 */ 8308 EAPI void evas_map_point_color_get(const Evas_Map *m, int idx, int *r, int *g, int *b, int *a); 8309 /** 8310 * @} 8311 */ 8312 8313 /** 8314 * @brief Set current object transformation map. 8315 * 8316 * This sets the map on a given object. It is copied from the @c map pointer, 8317 * so there is no need to keep the @c map object if you don't need it anymore. 8318 * 8319 * A map is a set of 4 points which have canvas x, y coordinates per point, 8320 * with an optional z point value as a hint for perspective correction, if it 8321 * is available. As well each point has u and v coordinates. These are like 8322 * "texture coordinates" in OpenGL in that they define a point in the source 8323 * image that is mapped to that map vertex/point. The u corresponds to the x 8324 * coordinate of this mapped point and v, the y coordinate. Note that these 8325 * coordinates describe a bounding region to sample. 8326 * 8327 * @note The map points a uv coordinates match the image geometry. If the 8328 * @c map parameter is @c null, the stored map will be freed and geometry prior 8329 * to enabling/setting a map will be restored. 8330 * 8331 * @param[in] map The map. 8332 * 8333 * @ingroup Evas_Object_Group 8334 */ 8335 EAPI void evas_object_map_set(Evas_Object *obj, const Evas_Map *map); 8336 8337 /** 8338 * @brief Get current object transformation map. 8339 * 8340 * This returns the current internal map set on the indicated object. It is 8341 * intended for read-only access and is only valid as long as the object is not 8342 * deleted or the map on the object is not changed. 8343 * 8344 * @return The map. 8345 * 8346 * @ingroup Evas_Object_Group 8347 */ 8348 EAPI const Evas_Map *evas_object_map_get(const Evas_Object *obj); 8349 8350 /** 8351 * @brief Enable or disable the map that is set. 8352 * 8353 * Enable or disable the use of map for the object @c obj. On enable, the 8354 * object geometry will be saved, and the new geometry will change (position 8355 * and size) to reflect the map geometry set. 8356 * 8357 * If the object doesn't have a map set (with @ref evas_object_map_set), the 8358 * initial geometry will be undefined. It is advised to always set a map to the 8359 * object first, and then call this function to enable its use. 8360 * 8361 * @param[in] enabled Enabled state. 8362 * 8363 * @ingroup Evas_Object_Group 8364 */ 8365 EAPI void evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled); 8366 8367 /** 8368 * @brief Whether the map is enabled or not 8369 * 8370 * @param[in] obj The evas object 8371 * 8372 * @return The value of @c enabled as passed to evas_object_map_enable_set(). 8373 * 8374 * @see evas_object_map_enable_set 8375 * @ingroup Evas_Object_Group 8376 */ 8377 EAPI Eina_Bool evas_object_map_enable_get(const Evas_Object *obj); 8378 8379 /** 8380 * @brief Apply an evas filter program on this text object. 8381 * 8382 * Note: the preferred method for filters is to edit EDC styles, rather than 8383 * calling this API directly. 8384 * 8385 * @since 1.18 8386 */ 8387 EAPI void evas_object_text_filter_program_set(Evas_Object *obj, const char *code) EINA_DEPRECATED; 8388 8389 /** 8390 * @brief Set a named source object for an evas filter program. 8391 * 8392 * Note: the preferred method for filters is to edit EDC styles, rather than 8393 * calling this API directly. 8394 * @since 1.18 8395 */ 8396 EAPI void evas_object_text_filter_source_set(Evas_Object *obj, const char *name, Evas_Object *source) EINA_DEPRECATED; 8397 8398 /** 8399 * Creates a new smart rectangle object on the given Evas @p e canvas. 8400 * 8401 * @param e The given canvas. 8402 * @return The created object handle. 8403 * 8404 * This provides a smart version of the typical "event rectangle", 8405 * which allows objects to set this as their parent and route events 8406 * to a group of objects. Events will not propagate to non-member objects 8407 * below this object. 8408 * 8409 * Adding members is done just like a normal smart object, using 8410 * efl_canvas_group_member_add (Eo API) or evas_object_smart_member_add (legacy). 8411 * 8412 * Child objects are not modified in any way, unlike other types of smart objects. 8413 * 8414 * It is a user error for any child objects to be stacked above the event 8415 * grabber parent while the event grabber is visible. 8416 * A critical error will be raised if this is detected at any point. 8417 * 8418 * @since 1.20 8419 */ 8420 EAPI Evas_Object *evas_object_event_grabber_add(Evas *e); 8421 8422 /** 8423 * @brief If @c true the object belongs to the window border decorations. 8424 * 8425 * This will be @c false by default, and should be @c false for all objects 8426 * created by the application, unless swallowed in some very specific parts of 8427 * the window. 8428 * 8429 * It is very unlikely that an application needs to call this manually, as the 8430 * window will handle this feature automatically. 8431 * 8432 * @param[in] obj The object. 8433 * @param[in] is_frame @c true if the object is a frame, @c false otherwise 8434 * 8435 * @since 1.2 8436 * 8437 * @ingroup Evas_Object_Group 8438 */ 8439 EAPI void evas_object_is_frame_object_set(Efl_Canvas_Object *obj, Eina_Bool is_frame); 8440 8441 /** 8442 * @brief If @c true the object belongs to the window border decorations. 8443 * 8444 * This will be @c false by default, and should be @c false for all objects 8445 * created by the application, unless swallowed in some very specific parts of 8446 * the window. 8447 * 8448 * It is very unlikely that an application needs to call this manually, as the 8449 * window will handle this feature automatically. 8450 * 8451 * @param[in] obj The object. 8452 * 8453 * @return @c true if the object is a frame, @c false otherwise 8454 * 8455 * @since 1.2 8456 * 8457 * @ingroup Evas_Object_Group 8458 */ 8459 EAPI Eina_Bool evas_object_is_frame_object_get(const Efl_Canvas_Object *obj); 8460 8461 /** 8462 * @brief Set whether an Evas object is to freeze (discard) events. 8463 * 8464 * If @c freeze is @c true, it will force events on @c obj to be discarded. 8465 * Unlike @ref evas_object_pass_events_set, events will not be passed to next 8466 * lower object. This API can be used for blocking events while @c obj is in 8467 * transition. 8468 * 8469 * If @c freeze is @c false, events will be processed on that object as normal. 8470 * 8471 * @warning If you block only key/mouse up events with this API, you can't be 8472 * sure of the state of any objects that have only key/mouse down events. 8473 * 8474 * @param[in] obj The object. 8475 * @param[in] freeze Pass when @c obj is to freeze events ($true) or not 8476 * ($false). 8477 * 8478 * @since 1.1 8479 * 8480 * @ingroup Evas_Object_Group 8481 */ 8482 EAPI void evas_object_freeze_events_set(Efl_Canvas_Object *obj, Eina_Bool freeze); 8483 8484 /** 8485 * @brief Determine whether an object is set to freeze (discard) events. 8486 * 8487 * @param[in] obj The object. 8488 * 8489 * @return Pass when @c obj is to freeze events ($true) or not ($false). 8490 * 8491 * @since 1.1 8492 * 8493 * @ingroup Evas_Object_Group 8494 */ 8495 EAPI Eina_Bool evas_object_freeze_events_get(const Efl_Canvas_Object *obj); 8496 8497 #include "canvas/efl_canvas_event_grabber_eo.legacy.h" 8498