,,SVN revion 2009-11-02 - !r43404,, [[TOC]] '''Important Note''': the included code should be used only as conceptual idea of how something works. This document is incomplete, you are welcome to fill it up with useful functions of EFL, just think on this document about a fast list of features reference of EFL/e17 == EINA == === Accessor === Accessors allow a random access of the data of a container. They can access an element at any position. === Arrays === Create and manage arrays, very fast access to data list. === Benchmarks === Allow you to add benchmark framework in a project for timing critical part and detect slow parts of code. === Convert === These functions allow you to convert integer or real numbers to string or conversely. === Cpu === Get the features of a cpu, like mmx, se, altivec, etc === File === * list the content of a directory, recusrsively or not, and can call a callback function for eachfound file. * split a path into all the subdirectories that compose it, according to the separator of the file system. === Hash === Hash management Hash functions are mostly used to speed up table lookup or data comparison tasks such as finding items in a database, detecting duplicated or similar records in a large file, finding similar stretches in DNA sequences, and so on. === Rectangle === Rectangle coordenades and calculations === Stringshare === These functions allow you to store one copy of a string, and use it throughout your program. It sounds like micro-optimizing, but profiling has shown this can have a significant impact as you scale the number of copies up. It improves string creation/destruction speed, reduces memory use and decreases memory fragmentation, so a win all-around. === Trash === Instead to malloc/free pointers, just put them in the trash, you can reuse it later too, you can free the entire trash later. FIXME: is that ok ? === List === Lists management * for (foreach) * free lists * next/prev/last * append/prepend/*relative * data get * counter * find * sort * remove * promote: move the specified data to the first of the list * nth: get the nth number of the member in the list * merge/split * iterator === Iterator === This is like a cursor to access the elements sequentially in a container === Lalloc === Lazy Allocator, that is, for lazy developers or ppl that has a cheapo keyboard. FIXME === Log === Functions to add logs in your code with level of verbosity control and the management of specific-code logs {{{ #!C EINA_LOG_ERR("BIG FAT ERROR!"); EINA_LOG_INFO("Message only visible running app with high log level set"); EINA_LOG_DBG("Running foo, only with big verbosity"); }}} === Magic === Magic checks (WTF, better description) FIXME. Add example FIXME === Matrix Sparse === What's that for, what means the sparse thing there ? FIXME === Red & Black Tree === Self-balancing binary search tree, a data structure, good for use in associative arays, very efficient and fast, removes and insert intelligently the data on the tree, so it is balanced for optimization reasons. FIXME ? === Memory Pool === FIXME: description FIXME: elements: * register/unregister ? * malloc/realloc ? * add/del/free ? * statistics === Modules === Which kind of modules ? eina modules so extra libs features ? FIXME === Safety Checks === Set of macros to check for parameters or values that should never happen, doesn't abort the program but it logs instead The meant of this is to remove possible segfaults when they will be not so important and continue with the process of program FIXME: is this code good ? {{{ #!C EAPI void my_func(Ethumb *e) { EINA_SAFETY_ON_NULL_RETURN(e); // return if our pointer is null do_something; }}} === Tiler === FIXME: description repetitive fill for rectangles (???) === MACROS === FIXME: Add description of these usages: * EINA_WARN_UNUSED_RESULT * EINA_ARG_NONNULL * EINA_DEPRECATED * EINA_PURE * EINA_UNLIKELY/LIKELY * EINA_FALSE/TRUE: equivalent to FALSE/TRUE macros == Evas == * Freeze events * Check if mouse is inside an object * events add/remove/repeat/check/propagate(to_parent)/etc * Clip objects * Layer levels, raise/lower, etc * Name get/set/find * Position move/resize/geometry/min/max/aspect/align * Visible hide/show/visible * Color Get/Set to an evas object * Anti_alias * Scale * Retrieves: position, which object in pointer, which on rectangle, number (which) of objects in a rectangle (zone), * Precise (collision detection?) * Stack * Get object in a relative way, like: above of, lowest object (position), below of, etc * Font: Path/List/Append * norender: Update objects but not render anything * Image: add/filled/border_no_scale/border_fill/tiling_fill/size_get|set/alpha/smooth/preload(in_background)/reload/scale/size/dpi * Map: transformation of evas objects * rotation * distortion * zoom * smooth set/unset * alpha * dup * coordinates * UV texture * vertext color === Smart Evas Objects === Smart Evas object can be defined as the hability to create one or more evas objects with default states/values/capabilities, you can create then your own type of objects with your desired function calls on it, Smart Evas Objects are a container for child objects * Retrieve evas_smart from objects, retrieve data from evas_smart, etc * Members: add/del member objects to a smart object * Callbacks assign to events for smart objects * Recalculation need lags * Move children objects relative to a given offset * Clip * Box * Table === Object Functions === * Gradients: Color stop, angle, colors, fill, offset, direction, type * Lines * Poligons * Rectangles * Text * Font set, get, source * Styles * Shadow * Glow * Outline * !TextBlock * Styles * string_range_get * markups * cursor new/get/free/node/char_next|last|first/pos_get|set/compare/text_append/format/node/char_del/range_del/ == ECORE == === Main Ecore === Main features of ecore: * '''Spawned Process signals''' * State: Pauses a process (STOP signal), Continue it, Interrupt, Quit, Terminate, Kill, Hup * '''Spawning Functions''' * Priority get/set * Run in Pipe mode. Data send to the child process received from stdin. * Tag: set the string tag for a process * Pid Get * Retreives: command of spawned process. Data attached to process * '''Idlers''': callbacks called when the program exits or is in idle state * List: add a handler, set it as first on the list, etc * When: You can set a handler for when the program Enter on the idle state, when Exits, or During it * '''File Descriptors''' (listeners of standard read/write/error? FIXME) * get if a file-descriptor read, write, error, of boths * callback to call if the event ocurrs, with the data to pass, and which element (r/w/e) to watch to a specific file-descriptor * '''Timers''' * Get times (system, last loop stopped) * Add a timer to run after a given time (may loop) * Interval get/set of the ticks to the timer * Delay add for the next occurence * Pending time get * There's also the pollers that calls a function every X interval of time * '''Loops''' * Iterate: runs a SINGLE iteration of the loop to process all the queue * Loop: run the main loop, quit it, etc * '''Events''' * Handlers: You can add handlers that are functions called when a event is happened, like a singal received, when teh program exits, or when it is connected. * Keyboard and Mouse management * '''Animators''' * Add a animator to tick off at every animaton tick during main loop execution. * Set the animator call interval in seconds. * '''IPC''' * '''STR''' * '''Encoding conversor (txt)''' * '''X Atoms''' * window * XDND * client ID * type of window * state of window * '''X Cursor''': Type of cursor (image/mode) * '''X''' * randr * window remove/add/toggle * window state * selection: primary/secondary/xdnd/clipboard * key up/down * mouse double click time set * mouse move position * move/resize windows * title window * alarms * urgent === Config === Complex and pretty complete configurations system * Listener: you can set a callback for when a configuration file is changed * Get/Set values on the config file, they can be different types of values, even ARGB ones * structures: structures of configurations * bundle ? === Con === Connections / Sockets handler functions * Add/del/connect: connections with the sockets/servers * States: Retrieve if is connected, the list of clients, number of bytes transmitted, the IP of the remote connection, etc * Send/Get: send or receive data to/from server * limits: set limits of clients to handle * SSL: SSL featured * URL: url handlers * FTP: ftp upload type support === Data === Contains threading, list, hash, debugging IMPORTANT NOTE: most of the things are moved to Eina and you should use Eina instead, but other things may work a bit differently like the non-sequential access to list elements. Note too that most of them will be possibly deprecated in the future * Hash: compute hash value of a string, some hash management, etc * Double linked lists mode * Binary heap (binary tree?) * trees * string buffer === Ecore_Evas === Evas Wrapper for Ecore (short name: EE) * Engines: Query if a particular rendering engine is supported on the target machine. List available engines. * Create: Create new ecore_evas objects * Data: get/set data associated to an EE * Event Action: move, resize, show, hide, delete, focus, sticky, geometry, rotate window (FIXME: which tipe of rotation?), shape, alpha, raise/lower/layer, activate (focus via WM), title, name_class, min/max_sizes, size_step, cursor, border, ignore_window(override), maximize/fullscreen/iconize, events_ignore, associate_object... * Event Callback: mouse set (FIXME move?), post_render (post mouse event callback) === !FrameBuffer === Framebuffer management * Keyboard/Mouse events * Size_get * Calibrate === File === File management * Misc: is_dir, exists, size_get, modification_times, mkdir, rm, cp, mv, links, filename/dirname, can_read/write/exec, ls, escape_sequences_add, remove_extension, dir_is_empty * Monitor a path with inotify/polling * applications: (talking about their executables in $PATH), check if is installed, list, etc * Download: downloads a file from url with a good number of features like progress === Getopt === Powerful getopt (commandline options) system. it supports long and short options * Duplicated entry's check * Args Get * Help: show list of options in a nicely formatted way == EDJE == === Edje === * Frametime: fps * Freeze: stop/start * Scaling factor * List groups * Data Get * Cache sizes: Collection/File/Color/ * Color class * Text Class * Sizes: min/max/aspect for the object * Signals * Play/Pause states * Animation state * Message send to an object * Parts * Check existance * Text get/set/insert/selection * Swallows get/set * Dragables * Boxes insert/add/remove/append/prepend * Tables * State get === Edje Edit === * Groups * Create new groups * Manage groups * Size min/max set for groups * Data * List data items inside a data block * Color class management * Text * Text Style list (font?) * Tag names list/get * Tag add * Parts * List * Add * Check if exist * Move position of part * Names management * Clip * Get Source/Effect * Mouse get/set events * Dragables * States * list/get/add/del/exists/copy * rel1/2, offset * color state * align/min/max/aspect * fill * visible * Text * ... * Images * ... * Spectrum * ... * Gradient * ... * Programs * ... * Script (get, only) === EDC Reference === http://docs.enlightenment.org/auto/edje/edcref.html == ETHUMB == Generate Thumbnails of multiple file formats, with multiple features like size, duration, format, crop, quality, etc == ELEMENTARY == Widgets library, specially designed for embedded devices so, finger usage, but it can be used for anything, is fast and very light * scale * style * Finger size set/get * Adjust size of element for finger * Focus object * Focus allow object * Scroll hold push/pop * Freeze push/pop * BG * icon * image * box * button: label/icon/style * scroller functions * label * frame * table * clock add/set_time/edit/properties/seconds * layout * notify * notepad * anchorview, anchorblock * bubble * photo * hoversel (FIXME: over-selection tooltip options?) * align items * menu * slider * genlist * checkbox * radiobox * pager * slideshow * progressbar * spinner * index * photocam (FIXME: webcam?) == Enlightenment 17 API == * e actions * alerts * bg add/del/default/update/handler/zone/file_get * bindings modifiers: mouse/grab/find/edge¿?/signal/wheel * border: new/ref/zone/desk/show/hide/move/resize/layer/raise/lower/stack/focus/shade/maximize/fullscreen/iconify/stick/pinned/find_by_*/idler/menu/close/kill/icon/bindings/ping/focus/cancel_actions(move,etc)/immortal/border_under_pointer_get/wrap_to_center * box * canvas * color class, color copy * dialog: button_add|focus/title/text/icon/border/content/resizable/show/ * config_data * config_dialog new/view/find/get/set * config: (check struct for details) * configure (FIXME: ?) * confirm_dialog: yes/no/del * container: container inside a root window: new/show/hide/get/number/move/resize/raise/zone_get/shape/border_* (FIXME: = window?) * datastore (FIXME) * desk: name_set|add|del|update/show/last_focused/next/row/col * desklock * dnd: object_set/move/resize/idler/key_down|up/add/inside/register/responsive/ * dpms * editable: (set/get)_theme|pass|text|insert|cursor_(pos|move|show|hide)|selection|+word * entry_dialog * entry: add/text/pass_set/size/focus * e_exec: exec/pid_find * exehist * filereg FIXME * flowlayout FIXME * fm: file_get|set|rename|del|flush|dup, add/path_set/theme/underlay/all_sel/path_get/parent/config/selected_list/file_show/pan/info/geometry/mount/data, hal/storage_add/volume_add/mount_add/show_desktop_icons/volume_list_get, mimes, operations * focus: event_mouse_in|out|down|up, focus_in|out, setup, setdown * font * gadcon: full_manage, popup * grabinput (FIXME) * hints * e_icon: add/set/edje_set/smooth/alpha/preload/size/fill/scale/data * ilist (FIXME) * init: show/hide/title_set/version_set/status/done/undone * menus * e_manager: (root application) show/hide/new/move/resize/raise/keys_grab * maximize * menu: new/activate_key|mouse/title/icon/category/post|pre_activate_callback/item_new|nth/icon_set/label/submenu/separator/check|radio|radio_group|toggle/callback/realize_callback/submenu_pre|post_callback/drag_callback/item_active/idler * module: all_load/new/save/dir_get/enable/disable/save_all/find/list/dialog_show/delayed_set/priority_set * e_msg (FIXME) * object: alloc/del/type/ref/error/data/references * order * e_pan: (FIXME) * path * place: region/cursor/manual * pointer: hide/size/type/idler * popup: new/show/move/resize/ignore_events/edje_bg_set/layer_set/idler_before * powersave: min/max/get/set * remember * resist border position border|gadman * shelf * slider (widget) * spectrum * stolen: win_get|add|del * table * theme * e_user: homedir_get dir_get desktop_dir_get icon_dir_get * utils: misc utilities * widget: aspect, button, check, config_list, cslider, entry, flist, framelist, frametable, fsel, focus/del/active/disable/on_focus/on_change/data_set|get/size/sub_object/resize/can_focus/focused/change/pointer, ilist, image, label, preview, radio, scrollframe, slider, spectrum, table, textblock, toolbar, toolbook * e_win: new/show/move/resize/raise/placed_set/shaped/evas_get/borderless/layer/sticky/move_callback_set/resize/size/step/title/border/centered/dialog/no_remember * xinerama update/screens_get/fake_screen_add * zone: name_set/move/resize/current_get/bg_reconfigure/flip_coords/desk_count|flip|linear_flip/flip_win_disable === MACROS === * Intersect * inside * contains * e_free