This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch edje-vector-intergration
in repository efl.

View the commit online.

commit 392e7c8220c7a8aba3d627f43ca5d7495199d332
Author: [email protected] <[email protected]>
AuthorDate: Thu Apr 30 20:08:31 2026 -0600

    docs: introduce vector state animation tutorial and Edje_Edit API reference (Phase 8.4)
    
    Phase 8.4 closes the Edje vector state animation feature series by providing
    user-facing documentation and comprehensive Doxygen API reference for theme
    authors and visual-editor implementers.
    
    Three components:
    
    1. New doc/edje_vector_states.dox tutorial page (@page tutorial_edje_vector_states):
       - Introduction: motivation and capabilities (named trees, per-state overrides,
         live transitions)
       - Why use it: designer-friendly, resolution-independent, class-aware retinting,
         zero-copy transitions
       - Feature specification pointer to spec v2
       - EDC walkthrough: color_classes setup, named vector tree, VECTOR part
         definition with state descriptions, programs for signal-to-state binding
       - Minimal C harness walkthrough from src/examples/edje/edje-vector-states.c
       - Programmatic editing via Edje_Edit API: describes all 10 Vector Tree API
         symbols and their use cases
       - Compile-time diagnostics (Phase 7): canonical reference for VEC001-VEC014
         codes with default severity and -W escalation/demotion examples
       - Three TODO(spec-rev3) comments documenting known deviations from v2 spec:
         * stroke{}/fill{} block form not implemented (dotted syntax only)
         * vector.shape "name" {} inline form not implemented (target: statement)
         * VEC014 hard error vs spec's last-write-wins policy
    
    2. Updated doc/Doxyfile.in:
       - Added edje_vector_states.dox to the INPUT list after edje_examples.dox
         so the tutorial is built into generated documentation
    
    3. Comprehensive Edje_Edit.h Doxygen rewrite (+197 -73):
       - All 10 Vector Tree API functions now have full documentation:
         edje_edit_vg_trees_list_get, edje_edit_vg_tree_exists, edje_edit_vg_tree_add,
         edje_edit_vg_tree_del, edje_edit_part_vector_tree_use_get/set,
         edje_edit_part_vector_overrides_list_get, edje_edit_part_vector_override_add/del,
         edje_edit_vector_node_color_class_get/set
       - Each function now has: @brief (1-liner), exhaustive @param documenting
         NULL-safety constraints, comprehensive @return covering success and all
         failure modes, @since 1.27, and @see cross-references
       - Group @name expanded to distinguish Vector Tree API from SVG-file image
         directory API with explicit pointer to tutorial
       - All examples use proper function call syntax with () suffix for consistency
    
    This closes the documentation gap left after Phases 1-8.3. Theme authors and
    visual-editor implementations now have a tutorial entry point, complete API
    reference, and diagnostic troubleshooting guide.
    
    Build verified: ninja -C build (no work), edje_suite: 91/91 pass (no regressions).
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
---
 doc/Doxyfile.in            |   1 +
 doc/edje_vector_states.dox | 240 ++++++++++++++++++++++++++++++++++++++++
 src/lib/edje/Edje_Edit.h   | 270 +++++++++++++++++++++++++++++++++------------
 3 files changed, 438 insertions(+), 73 deletions(-)

diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index 5b0711a390..9ff7434104 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -608,6 +608,7 @@ INPUT                  = @top_srcdir@/src/lib \
                          @srcdir@/eldbus_examples.dox \
                          @srcdir@/ephysics_examples.dox \
                          @srcdir@/edje_examples.dox \
+                         @srcdir@/edje_vector_states.dox \
                          @top_srcdir@/src/bin/edje/edje_cc_handlers.c \
                          @srcdir@/emotion_examples.dox \
                          @srcdir@/elementary_examples.dox
diff --git a/doc/edje_vector_states.dox b/doc/edje_vector_states.dox
new file mode 100644
index 0000000000..75c9910bd2
--- /dev/null
+++ b/doc/edje_vector_states.dox
@@ -0,0 +1,240 @@
+/**
+ * @page tutorial_edje_vector_states Edje Vector State Animation
+ *
+ * @section edje_vg_intro Introduction
+ *
+ * Edje vector state animation lets a theme author embed resolution-independent
+ * SVG-style vector content directly in an EDC file and morph that content
+ * smoothly between named states — without swapping bitmap frames, loading
+ * external image files, or writing a single line of C.
+ *
+ * Three capabilities combine to make this work:
+ *
+ * -# @b Named @b vector @b trees.  A shared @c vectors {} block at the top of
+ *    the EDC file defines one or more named trees of vector nodes (shapes,
+ *    gradients, containers).  Each tree is stored in the compiled @c .edj and
+ *    can be referenced by any number of VECTOR parts.
+ * -# @b Per-state @b overrides.  Each state description of a VECTOR part can
+ *    include a @c vector.shape {} block that selects a named node inside the
+ *    active tree and replaces individual properties (path geometry, fill /
+ *    stroke colour or colour-class binding, stroke width, transform) for that
+ *    state only.  Unmentioned properties keep the base-tree value.
+ * -# @b Live @b transitions.  When Edje interpolates between two states it
+ *    linearly blends the overridden values.  Path geometry is morphed vertex-
+ *    by-vertex (topologies must match — same command sequence), colour
+ *    components are blended channel-by-channel, and scalar values such as
+ *    stroke width are lerped as floats.  The result drives Efl_VG directly so
+ *    the GPU renders a smooth animated curve without any intermediate bitmaps.
+ *
+ * @section edje_vg_why Why use it?
+ *
+ * @li @b Designer-friendly: the entire visual appearance lives in the EDC file.
+ *    No C code is needed to change shapes or colours on hover / focus / press.
+ * @li @b Resolution-independent: vector content scales to any DPI without
+ *    artefacts.
+ * @li @b Class-aware retinting: bind a shape's fill or stroke to a
+ *    @c color_class so the host application can retint the widget at runtime
+ *    with @c edje_object_color_class_set() — the same mechanism used for text
+ *    and image parts.
+ * @li @b Zero-copy transitions: the materializer works directly on the
+ *    interpolated property snapshot; no extra pixmap allocation is needed.
+ *
+ * @section edje_vg_spec Feature specification
+ *
+ * The full design document is at @c edje-vector-state-animation-spec-v2.md in
+ * the repository root.  Section §11 of the spec contains the canonical example
+ * that this tutorial reproduces verbatim.
+ *
+ * @section edje_vg_edc EDC walkthrough
+ *
+ * The worked example ships at
+ * @c src/examples/edje/vector_states.edc.  The discussion below follows
+ * that file section by section.
+ *
+ * @subsection edje_vg_edc_colorclasses Color classes
+ *
+ * @code
+ * color_classes {
+ *    color_class { name: "logo_fill";    color:  80 140 255 255; }
+ *    color_class { name: "logo_hover";   color: 255 200  80 255; }
+ *    color_class { name: "logo_outline"; color:  20  20  20 255; }
+ * }
+ * @endcode
+ *
+ * Three colour classes are declared.  @c logo_fill is the default fill for the
+ * shape; @c logo_hover replaces it in the hovered state.  Because these are
+ * colour classes, the host application can override either at runtime with
+ * @c edje_object_color_class_set() without touching the theme binary.
+ *
+ * @subsection edje_vg_edc_tree Named vector tree
+ *
+ * @code
+ * vectors {
+ *    vector { name: "logo_glyph";
+ *       viewbox: 0 0 100 100;
+ *       shape { name: "body";
+ *          path: "M0,0 L0,0 L100,0 L100,0 L100,100 L100,100 L0,100 L0,100 L0,0";
+ *          fill.color_class:   "logo_fill";
+ *          stroke.color_class: "logo_outline";
+ *          stroke.width: 2;
+ *       }
+ *    }
+ * }
+ * @endcode
+ *
+ * The @c vectors {} block defines the named tree @c "logo_glyph".  It contains
+ * one shape node named @c "body" whose path is a closed square.  The shape uses
+ * colour-class bindings for both fill and stroke so the colours are themeable
+ * without recompilation.
+ *
+ * The path string uses SVG path syntax: @c M (move-to), @c L (line-to), @c Z
+ * (close).  The command sequence — @c M + 8×L + Z — must be the same in every
+ * state description that overrides this shape, because path morphing works
+ * vertex-by-vertex.
+ *
+ * @subsection edje_vg_edc_part VECTOR part and state descriptions
+ *
+ * @code
+ * part { name: "logo"; type: VECTOR;
+ *    description { state: "default" 0.0;
+ *       rel1.relative: 0.0 0.0;
+ *       rel2.relative: 1.0 1.0;
+ *       vector.use: "logo_glyph";
+ *    }
+ *    description { state: "hover" 0.0;
+ *       inherit: "default" 0.0;
+ *       vector.shape {
+ *          target: "body";
+ *          path: "M0,0 L50,-80 L100,0 L180,50 L100,100 L50,180 L0,100 L-80,50 L0,0";
+ *          fill.color_class: "logo_hover";
+ *          stroke.width: 4;
+ *       }
+ *    }
+ * }
+ * @endcode
+ *
+ * The @c default description binds the part to the @c "logo_glyph" tree via
+ * @c vector.use.  The @c hover description inherits everything from @c default
+ * and adds a @c vector.shape {} override block:
+ *
+ * -# @c target: names the shape node being overridden (@c "body").
+ * -# @c path: provides an alternative star path.  It has the same command
+ *    sequence (M + 8×L + Z) so Edje can morph it smoothly.
+ * -# @c fill.color_class: swaps the fill to @c "logo_hover" in this state.
+ * -# @c stroke.width: widens the outline from 2 to 4.
+ *
+ * Properties not mentioned in the override (@c stroke.color_class) retain
+ * their base-tree value.
+ *
+ * @subsection edje_vg_edc_programs Programs
+ *
+ * @code
+ * programs {
+ *    program { signal: "mouse,in"; source: "logo";
+ *       action: STATE_SET "hover" 0.0;
+ *       target: "logo";
+ *       transition: SINUSOIDAL 0.3;
+ *    }
+ *    program { signal: "mouse,out"; source: "logo";
+ *       action: STATE_SET "default" 0.0;
+ *       target: "logo";
+ *       transition: SINUSOIDAL 0.3;
+ *    }
+ * }
+ * @endcode
+ *
+ * Two programs wire mouse-in / mouse-out signals to a 300 ms sinusoidal
+ * transition.  No C code is needed; the runtime materializer blends the path
+ * vertices and scalar properties automatically.
+ *
+ * @section edje_vg_c C harness
+ *
+ * The minimal C harness at @c src/examples/edje/edje-vector-states.c loads the
+ * compiled @c vector_states.edj, displays the @c "ui/logo" group in a 400×400
+ * window, and registers signal callbacks so the terminal shows which transition
+ * is occurring.  The core is:
+ *
+ * @code
+ * edje_obj = edje_object_add(evas);
+ * edje_object_file_set(edje_obj, edje_file, "ui/logo");
+ *
+ * edje_object_signal_callback_add(edje_obj, "mouse,in",  "logo", _on_hover_in,  NULL);
+ * edje_object_signal_callback_add(edje_obj, "mouse,out", "logo", _on_hover_out, NULL);
+ * @endcode
+ *
+ * Runtime retinting is straightforward:
+ *
+ * @code
+ * // Change the fill colour without recompiling the theme:
+ * edje_object_color_class_set(edje_obj, "logo_fill",
+ *                             255, 80, 80, 255,   // object colour
+ *                             0,   0,  0,   0,    // text colour (unused)
+ *                             0,   0,  0,   0);   // shadow colour (unused)
+ * @endcode
+ *
+ * To compile and run:
+ *
+ * @verbatim
+ * edje_cc src/examples/edje/vector_states.edc
+ * gcc -o edje-vector-states src/examples/edje/edje-vector-states.c \
+ *     -DPACKAGE_DATA_DIR=\".\" \
+ *     `pkg-config --cflags --libs evas ecore ecore-evas edje`
+ * ./edje-vector-states
+ * @endverbatim
+ *
+ * @section edje_vg_edit Programmatic editing via Edje_Edit
+ *
+ * Visual editors can inspect and modify vector trees at runtime using the
+ * Vector Tree API introduced in EFL 1.27.  The key functions are:
+ *
+ * - edje_edit_vg_trees_list_get() — list all named trees in the file.
+ * - edje_edit_vg_tree_add() / edje_edit_vg_tree_del() — create or remove trees.
+ * - edje_edit_part_vector_tree_use_get() / edje_edit_part_vector_tree_use_set()
+ *   — query or change which named tree a part-state is bound to.
+ * - edje_edit_part_vector_overrides_list_get() — enumerate override targets.
+ * - edje_edit_part_vector_override_add() / edje_edit_part_vector_override_del()
+ *   — add or remove override entries on a part-state.
+ * - edje_edit_vector_node_color_class_get() / edje_edit_vector_node_color_class_set()
+ *   — read or assign a colour-class binding to a specific node in a tree.
+ *
+ * All setters mark the Edje file dirty; call edje_edit_save() to persist the
+ * changes.
+ *
+ * @section edje_vg_diagnostics Compile-time diagnostics (Phase 7)
+ *
+ * @c edje_cc emits structured diagnostic messages for common authoring mistakes.
+ * Each code has a default severity (error, warning, or hint) that can be
+ * escalated or demoted on the command line:
+ *
+ * @verbatim
+ * edje_cc -W VEC001=error -W VEC012=hint my_theme.edc
+ * @endverbatim
+ *
+ * The diagnostic codes added in Phase 7 are:
+ *
+ * | Code   | Default  | Condition                                               |
+ * |--------|----------|---------------------------------------------------------|
+ * | VEC001 | error    | Duplicate node name within the same tree                |
+ * | VEC003 | warning  | Node name referenced by an override not found in tree   |
+ * | VEC004 | error    | Override path has different command topology than base  |
+ * | VEC007 | warning  | Gradient type changes between states (will not lerp)    |
+ * | VEC009 | warning  | Stop count changes between states (will not lerp)       |
+ * | VEC010 | warning  | Node type changes between states (will not lerp)        |
+ * | VEC011 | error    | fill.color_class and fill.color both set on same node   |
+ * | VEC012 | error    | stroke.color_class and stroke.color both set on node    |
+ * | VEC014 | error    | Both matrix and decomposed transform forms on same node |
+ *
+ * @note
+ * The following departures from the v2 spec are intentional for this release:
+ *
+ * @c TODO(spec-rev3): stroke{} / fill{} block form (§5.2) not implemented —
+ * only the flat dotted syntax (@c fill.color_class:, @c stroke.width:, etc.)
+ * is accepted.  Block form is scheduled for a follow-up.
+ *
+ * @c TODO(spec-rev3): @c vector.shape "name" {} inline-name form (§4.3) not
+ * implemented — use the @c target: statement inside @c vector.shape {} instead.
+ *
+ * @c TODO(spec-rev3): VEC014 is a hard compile error here; the v2 spec
+ * described last-write-wins semantics.  The hard-error policy was adopted in
+ * Phase 7.3 to surface latent authoring bugs early.
+ */
diff --git a/src/lib/edje/Edje_Edit.h b/src/lib/edje/Edje_Edit.h
index 90811611aa..5a1b2fb3c7 100644
--- a/src/lib/edje/Edje_Edit.h
+++ b/src/lib/edje/Edje_Edit.h
@@ -8953,167 +8953,291 @@ EAPI extern Eina_Error EDJE_EDIT_ERROR_GROUP_DOES_NOT_EXIST;
 /******************************************************************************/
 /**
  * @name Vector Tree API
- * Functions for manipulating the named Edje_Vg_Tree directory (Phase 8.2).
- * This API operates on the toplevel @c vectors {} block, which holds named
- * Edje_Vg_Tree entries.  It is distinct from the SVG-file image-directory
- * API (edje_edit_vector_del, edje_edit_vectors_list_get, etc.).
+ * Functions for manipulating the named Edje_Vg_Tree directory.
+ *
+ * This API operates on the toplevel @c vectors {} block of an EDC file, which
+ * holds named Edje_Vg_Tree entries that VECTOR parts can reference with the
+ * @c vector.use: statement.  It is entirely distinct from the SVG-file
+ * image-directory API (edje_edit_vector_del(), edje_edit_vectors_list_get(),
+ * etc.), which manages SVG asset files rather than in-line vector trees.
+ *
+ * Use edje_edit_save() after any setter to persist changes to disk.
+ *
+ * See also: @ref tutorial_edje_vector_states
  */ //@{
 
 /**
- * @brief Returns the list of named vector-tree names in the file.
+ * @brief Returns the list of named vector-tree names stored in the file.
  *
- * Use edje_edit_string_list_free() to release the returned list.
+ * Each element of the returned list is an Eina_Stringshare string.  The list
+ * itself must be freed with edje_edit_string_list_free() when no longer needed;
+ * the individual strings are owned by the list and must not be freed separately.
  *
- * @param obj Object being edited.
+ * @param obj The Evas object representing the Edje file being edited.
+ *            Must not be @c NULL.
+ *
+ * @return A newly allocated @c Eina_List of @c Eina_Stringshare tree names on
+ *         success, or @c NULL if the file contains no named trees or on error.
  *
- * @return A list of Eina_Stringshare names, one per named Edje_Vg_Tree.
  * @since 1.27
+ * @see edje_edit_vg_tree_exists()
+ * @see edje_edit_vg_tree_add()
+ * @see edje_edit_string_list_free()
  */
 EAPI Eina_List *edje_edit_vg_trees_list_get(Evas_Object *obj);
 
 /**
  * @brief Tests whether a named vector tree exists in the file.
  *
- * @param obj Object being edited.
- * @param name The tree name to look up.
+ * @param obj  The Evas object representing the Edje file being edited.
+ *             Must not be @c NULL.
+ * @param name The tree name to look up.  Must not be @c NULL.
+ *
+ * @return @c EINA_TRUE if a tree with that name is present in the file's
+ *         @c vectors {} directory, @c EINA_FALSE if it does not exist or
+ *         if @p obj or @p name is @c NULL.
  *
- * @return @c EINA_TRUE if a tree with that name is present, @c EINA_FALSE otherwise.
  * @since 1.27
+ * @see edje_edit_vg_trees_list_get()
+ * @see edje_edit_vg_tree_add()
  */
 EAPI Eina_Bool edje_edit_vg_tree_exists(Evas_Object *obj, const char *name);
 
 /**
- * @brief Adds a new empty named vector tree to the file.
+ * @brief Adds a new, empty named vector tree to the file.
  *
- * Returns @c EINA_FALSE if a tree with that name already exists.
+ * The new tree is empty (contains no nodes) after creation.  Nodes must be
+ * populated via the @c edje_decc round-trip or by directly editing the EDC
+ * source.  The file is marked dirty; call edje_edit_save() to persist.
  *
- * @param obj Object being edited.
- * @param name The name for the new tree.
+ * @param obj  The Evas object representing the Edje file being edited.
+ *             Must not be @c NULL.
+ * @param name The name for the new tree.  Must not be @c NULL.  The name
+ *             must be unique; the call fails if a tree with the same name
+ *             already exists.
+ *
+ * @return @c EINA_TRUE on success, @c EINA_FALSE if a tree with @p name
+ *         already exists, if either argument is @c NULL, or on allocation
+ *         failure.
  *
- * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
  * @since 1.27
+ * @see edje_edit_vg_tree_del()
+ * @see edje_edit_vg_tree_exists()
  */
 EAPI Eina_Bool edje_edit_vg_tree_add(Evas_Object *obj, const char *name);
 
 /**
  * @brief Removes a named vector tree from the file.
  *
- * Refuses and returns @c EINA_FALSE if any description's tree_id references
- * this tree (which would leave the file inconsistent).
+ * The call refuses to remove a tree that is referenced by at least one
+ * part-state @c vector.use: binding, returning @c EINA_FALSE in that case
+ * to avoid leaving the file in an inconsistent state.  Use
+ * edje_edit_part_vector_tree_use_set() to clear all bindings first.
  *
- * @param obj Object being edited.
- * @param name The name of the tree to remove.
+ * @param obj  The Evas object representing the Edje file being edited.
+ *             Must not be @c NULL.
+ * @param name The name of the tree to remove.  Must not be @c NULL.
+ *
+ * @return @c EINA_TRUE on success, @c EINA_FALSE if the tree does not
+ *         exist, is still referenced by a part-state, either argument is
+ *         @c NULL, or an internal error occurs.
  *
- * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
  * @since 1.27
+ * @see edje_edit_vg_tree_add()
+ * @see edje_edit_part_vector_tree_use_set()
  */
 EAPI Eina_Bool edje_edit_vg_tree_del(Evas_Object *obj, const char *name);
 
 /**
- * @brief Gets the named vector tree bound to the given part-state.
+ * @brief Gets the named vector tree bound to a given part-state.
  *
- * The returned string is a newly added Eina_Stringshare; release with
- * edje_edit_string_free().  Returns NULL if no tree is bound (tree_id == -1)
- * or if the part is not of type VECTOR.
+ * Returns the name of the tree that the specified state will display when
+ * rendered, i.e., the argument that would appear after @c vector.use: in
+ * the EDC source.
  *
- * @param obj Object being edited.
- * @param part Part name.
- * @param state State name (without value).
- * @param value State value.
+ * The returned string is a newly added Eina_Stringshare value.  Release it
+ * with edje_edit_string_free() when done.
+ *
+ * @param obj   The Evas object representing the Edje file being edited.
+ *              Must not be @c NULL.
+ * @param part  The name of the VECTOR part.  Must not be @c NULL.
+ * @param state The state name, without the numeric value suffix (e.g.
+ *              @c "default" rather than @c "default 0.0").  Must not be @c NULL.
+ * @param value The state value (typically @c 0.0).
+ *
+ * @return An Eina_Stringshare with the bound tree name on success; @c NULL
+ *         if no tree is bound (the state has no @c vector.use: binding), if
+ *         the part is not of type VECTOR, or if any argument is invalid.
  *
- * @return The tree name or NULL.
  * @since 1.27
+ * @see edje_edit_part_vector_tree_use_set()
+ * @see edje_edit_vg_trees_list_get()
+ * @see edje_edit_string_free()
  */
 EAPI const char *edje_edit_part_vector_tree_use_get(Evas_Object *obj, const char *part, const char *state, double value);
 
 /**
  * @brief Binds a named vector tree to the given part-state.
  *
- * Passing NULL for @p tree_name clears the binding (sets tree_id to -1).
+ * Sets the @c vector.use: binding for @p state on @p part so that the named
+ * tree is displayed when that state is active.  Pass @c NULL for @p tree_name
+ * to clear an existing binding (equivalent to removing the @c vector.use:
+ * statement from the EDC source).
  *
- * @param obj Object being edited.
- * @param part Part name.
- * @param state State name (without value).
- * @param value State value.
- * @param tree_name The tree to bind, or NULL to clear.
+ * The file is marked dirty; call edje_edit_save() to persist the change.
+ *
+ * @param obj       The Evas object representing the Edje file being edited.
+ *                  Must not be @c NULL.
+ * @param part      The name of the VECTOR part.  Must not be @c NULL.
+ * @param state     The state name, without the numeric value suffix.
+ *                  Must not be @c NULL.
+ * @param value     The state value (typically @c 0.0).
+ * @param tree_name The name of an existing tree in the file's @c vectors {}
+ *                  directory, or @c NULL to clear the binding.
+ *
+ * @return @c EINA_TRUE on success, @c EINA_FALSE if @p part or @p state is
+ *         @c NULL, if the part is not of type VECTOR, if @p tree_name is
+ *         non-NULL but does not name an existing tree, or on internal error.
  *
- * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
  * @since 1.27
+ * @see edje_edit_part_vector_tree_use_get()
+ * @see edje_edit_vg_tree_exists()
  */
 EAPI Eina_Bool edje_edit_part_vector_tree_use_set(Evas_Object *obj, const char *part, const char *state, double value, const char *tree_name);
 
 /**
- * @brief Returns the list of override target names for a part-state.
+ * @brief Returns the list of override target names active on a part-state.
  *
- * Use edje_edit_string_list_free() to release the returned list.
+ * Each entry in the list is the name of a shape node in the base tree that
+ * the given state overrides with a @c vector.shape {} block.  The list
+ * reflects the order in which overrides were added.
  *
- * @param obj Object being edited.
- * @param part Part name.
- * @param state State name (without value).
- * @param value State value.
+ * Each element is an Eina_Stringshare string.  Free the list with
+ * edje_edit_string_list_free() when no longer needed.
+ *
+ * @param obj   The Evas object representing the Edje file being edited.
+ *              Must not be @c NULL.
+ * @param part  The name of the VECTOR part.  Must not be @c NULL.
+ * @param state The state name, without the numeric value suffix.
+ *              Must not be @c NULL.
+ * @param value The state value (typically @c 0.0).
+ *
+ * @return A newly allocated @c Eina_List of @c Eina_Stringshare target names
+ *         on success, or @c NULL if there are no overrides, the part/state
+ *         combination is invalid, or on error.
  *
- * @return A list of Eina_Stringshare target names.
  * @since 1.27
+ * @see edje_edit_part_vector_override_add()
+ * @see edje_edit_part_vector_override_del()
+ * @see edje_edit_string_list_free()
  */
 EAPI Eina_List *edje_edit_part_vector_overrides_list_get(Evas_Object *obj, const char *part, const char *state, double value);
 
 /**
- * @brief Adds an override entry for the given target node name.
+ * @brief Adds an override entry targeting the given node name to a part-state.
  *
- * Returns @c EINA_FALSE if an override with that target already exists or on error.
+ * Creates an empty @c vector.shape {} override block for @p target on the
+ * specified part-state.  After adding, use the per-property setter functions
+ * to populate the override's fields.  The file is marked dirty; call
+ * edje_edit_save() to persist.
  *
- * @param obj Object being edited.
- * @param part Part name.
- * @param state State name (without value).
- * @param value State value.
- * @param target Target node name.
+ * @param obj    The Evas object representing the Edje file being edited.
+ *               Must not be @c NULL.
+ * @param part   The name of the VECTOR part.  Must not be @c NULL.
+ * @param state  The state name, without the numeric value suffix.
+ *               Must not be @c NULL.
+ * @param value  The state value (typically @c 0.0).
+ * @param target The name of the shape node in the base tree to override.
+ *               Must not be @c NULL.  The call fails if an override with
+ *               the same target already exists on this state.
+ *
+ * @return @c EINA_TRUE on success, @c EINA_FALSE if an override for
+ *         @p target already exists, if any pointer argument is @c NULL,
+ *         if the part is not of type VECTOR, or on allocation failure.
  *
- * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
  * @since 1.27
+ * @see edje_edit_part_vector_override_del()
+ * @see edje_edit_part_vector_overrides_list_get()
  */
 EAPI Eina_Bool edje_edit_part_vector_override_add(Evas_Object *obj, const char *part, const char *state, double value, const char *target);
 
 /**
- * @brief Removes the override entry for the given target node name.
+ * @brief Removes the override entry for the given target node from a part-state.
  *
- * @param obj Object being edited.
- * @param part Part name.
- * @param state State name (without value).
- * @param value State value.
- * @param target Target node name.
+ * Deletes the @c vector.shape {} block that overrides @p target on the
+ * specified part-state.  The file is marked dirty; call edje_edit_save()
+ * to persist.
+ *
+ * @param obj    The Evas object representing the Edje file being edited.
+ *               Must not be @c NULL.
+ * @param part   The name of the VECTOR part.  Must not be @c NULL.
+ * @param state  The state name, without the numeric value suffix.
+ *               Must not be @c NULL.
+ * @param value  The state value (typically @c 0.0).
+ * @param target The name of the shape node whose override is to be removed.
+ *               Must not be @c NULL.
+ *
+ * @return @c EINA_TRUE on success, @c EINA_FALSE if no override with that
+ *         target exists on the state, if any pointer argument is @c NULL,
+ *         if the part is not of type VECTOR, or on error.
  *
- * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
  * @since 1.27
+ * @see edje_edit_part_vector_override_add()
+ * @see edje_edit_part_vector_overrides_list_get()
  */
 EAPI Eina_Bool edje_edit_part_vector_override_del(Evas_Object *obj, const char *part, const char *state, double value, const char *target);
 
 /**
- * @brief Gets the color-class binding on a node in a named toplevel tree.
+ * @brief Gets the color-class binding on a node within a named toplevel tree.
  *
- * The returned string is a newly added Eina_Stringshare; release with
- * edje_edit_string_free().
+ * Returns the name of the color class bound to @p node in @p tree, i.e., the
+ * string that would appear after @c color_class: in the EDC source for that
+ * node.  This is the binding on the base tree node; to inspect override-side
+ * bindings, query the state's override list.
  *
- * @param obj Object being edited.
- * @param tree The named tree to look in.
- * @param node The node name within that tree.
+ * The returned string is a newly added Eina_Stringshare value.  Release it
+ * with edje_edit_string_free() when done.
+ *
+ * @param obj  The Evas object representing the Edje file being edited.
+ *             Must not be @c NULL.
+ * @param tree The name of the toplevel vector tree.  Must not be @c NULL.
+ * @param node The name of the node within that tree.  Must not be @c NULL.
+ *
+ * @return An Eina_Stringshare with the color-class name on success; @c NULL
+ *         if no class is bound to that node, if the tree or node does not
+ *         exist, or if any argument is @c NULL.
  *
- * @return The color-class name or NULL if none is set.
  * @since 1.27
+ * @see edje_edit_vector_node_color_class_set()
+ * @see edje_edit_vg_trees_list_get()
+ * @see edje_edit_string_free()
  */
 EAPI const char *edje_edit_vector_node_color_class_get(Evas_Object *obj, const char *tree, const char *node);
 
 /**
- * @brief Sets the color-class binding on a node in a named toplevel tree.
+ * @brief Sets the color-class binding on a node within a named toplevel tree.
  *
- * Passing NULL for @p class_name clears the binding.
+ * Associates @p class_name with @p node in @p tree so that the node's fill or
+ * stroke color can be overridden at runtime via edje_color_class_set() or
+ * edje_object_color_class_set().  Pass @c NULL for @p class_name to clear an
+ * existing binding.
  *
- * @param obj Object being edited.
- * @param tree The named tree.
- * @param node The node name within that tree.
- * @param class_name The color class to bind, or NULL to clear.
+ * The file is marked dirty; call edje_edit_save() to persist the change.
+ *
+ * @param obj        The Evas object representing the Edje file being edited.
+ *                   Must not be @c NULL.
+ * @param tree       The name of the toplevel vector tree.  Must not be @c NULL.
+ * @param node       The name of the node within that tree.  Must not be @c NULL.
+ * @param class_name The color-class name to bind, or @c NULL to clear the
+ *                   existing binding.
+ *
+ * @return @c EINA_TRUE on success, @c EINA_FALSE if the tree or node does not
+ *         exist, if @p obj, @p tree, or @p node is @c NULL, or on allocation
+ *         failure.
  *
- * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
  * @since 1.27
+ * @see edje_edit_vector_node_color_class_get()
+ * @see edje_color_class_set()
  */
 EAPI Eina_Bool edje_edit_vector_node_color_class_set(Evas_Object *obj, const char *tree, const char *node, const char *class_name);
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to