Blame clutter/clutter-scriptable.c

Packit 31ecd5
/*
Packit 31ecd5
 * Clutter.
Packit 31ecd5
 *
Packit 31ecd5
 * An OpenGL based 'interactive canvas' library.
Packit 31ecd5
 *
Packit 31ecd5
 * Authored By Matthew Allum  <mallum@openedhand.com>
Packit 31ecd5
 *             Emmanuele Bassi  <ebassi@openedhand.com>
Packit 31ecd5
 *
Packit 31ecd5
 * Copyright (C) 2006 OpenedHand
Packit 31ecd5
 *
Packit 31ecd5
 * This library is free software; you can redistribute it and/or
Packit 31ecd5
 * modify it under the terms of the GNU Lesser General Public
Packit 31ecd5
 * License as published by the Free Software Foundation; either
Packit 31ecd5
 * version 2 of the License, or (at your option) any later version.
Packit 31ecd5
 *
Packit 31ecd5
 * This library is distributed in the hope that it will be useful,
Packit 31ecd5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 31ecd5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 31ecd5
 * Lesser General Public License for more details.
Packit 31ecd5
 *
Packit 31ecd5
 * You should have received a copy of the GNU Lesser General Public
Packit 31ecd5
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
Packit 31ecd5
 *
Packit 31ecd5
 *
Packit 31ecd5
 */
Packit 31ecd5
Packit 31ecd5
/**
Packit 31ecd5
 * SECTION:clutter-scriptable
Packit 31ecd5
 * @short_description: Override the UI definition parsing
Packit 31ecd5
 *
Packit 31ecd5
 * The #ClutterScriptableIface interface exposes the UI definition parsing
Packit 31ecd5
 * process to external classes. By implementing this interface, a class can
Packit 31ecd5
 * override the UI definition parsing and transform complex data types into
Packit 31ecd5
 * GObject properties, or allow custom properties.
Packit 31ecd5
 *
Packit 31ecd5
 * #ClutterScriptable is available since Clutter 0.6
Packit 31ecd5
 */
Packit 31ecd5
Packit 31ecd5
#ifdef HAVE_CONFIG_H
Packit 31ecd5
#include "config.h"
Packit 31ecd5
#endif
Packit 31ecd5
Packit 31ecd5
#include <string.h>
Packit 31ecd5
#include <stdlib.h>
Packit 31ecd5
Packit 31ecd5
#include <glib.h>
Packit 31ecd5
Packit 31ecd5
#include "clutter-scriptable.h"
Packit 31ecd5
#include "clutter-script-private.h"
Packit 31ecd5
Packit 31ecd5
#include "clutter-private.h"
Packit 31ecd5
#include "clutter-debug.h"
Packit 31ecd5
Packit 31ecd5
typedef ClutterScriptableIface  ClutterScriptableInterface;
Packit 31ecd5
Packit 31ecd5
G_DEFINE_INTERFACE (ClutterScriptable, clutter_scriptable, G_TYPE_OBJECT);
Packit 31ecd5
Packit 31ecd5
static void
Packit 31ecd5
clutter_scriptable_default_init (ClutterScriptableInterface *iface)
Packit 31ecd5
{
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
/**
Packit 31ecd5
 * clutter_scriptable_set_id:
Packit 31ecd5
 * @scriptable: a #ClutterScriptable
Packit 31ecd5
 * @id_: the #ClutterScript id of the object
Packit 31ecd5
 *
Packit 31ecd5
 * Sets @id_ as the unique Clutter script it for this instance of
Packit 31ecd5
 * #ClutterScriptableIface.
Packit 31ecd5
 *
Packit 31ecd5
 * This name can be used by user interface designer applications to
Packit 31ecd5
 * define a unique name for an object constructable using the UI
Packit 31ecd5
 * definition language parsed by #ClutterScript.
Packit 31ecd5
 *
Packit 31ecd5
 * Since: 0.6
Packit 31ecd5
 */
Packit 31ecd5
void
Packit 31ecd5
clutter_scriptable_set_id (ClutterScriptable *scriptable,
Packit 31ecd5
                           const gchar       *id_)
Packit 31ecd5
{
Packit 31ecd5
  ClutterScriptableIface *iface;
Packit 31ecd5
Packit 31ecd5
  g_return_if_fail (CLUTTER_IS_SCRIPTABLE (scriptable));
Packit 31ecd5
  g_return_if_fail (id_ != NULL);
Packit 31ecd5
Packit 31ecd5
  iface = CLUTTER_SCRIPTABLE_GET_IFACE (scriptable);
Packit 31ecd5
  if (iface->set_id)
Packit 31ecd5
    iface->set_id (scriptable, id_);
Packit 31ecd5
  else
Packit 31ecd5
    g_object_set_data_full (G_OBJECT (scriptable),
Packit 31ecd5
                            "clutter-script-id",
Packit 31ecd5
                            g_strdup (id_),
Packit 31ecd5
                            g_free);
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
/**
Packit 31ecd5
 * clutter_scriptable_get_id:
Packit 31ecd5
 * @scriptable: a #ClutterScriptable
Packit 31ecd5
 *
Packit 31ecd5
 * Retrieves the id of @scriptable set using clutter_scriptable_set_id().
Packit 31ecd5
 *
Packit 31ecd5
 * Return value: the id of the object. The returned string is owned by
Packit 31ecd5
 *   the scriptable object and should never be modified of freed
Packit 31ecd5
 *
Packit 31ecd5
 * Since: 0.6
Packit 31ecd5
 */
Packit 31ecd5
const gchar *
Packit 31ecd5
clutter_scriptable_get_id (ClutterScriptable *scriptable)
Packit 31ecd5
{
Packit 31ecd5
  ClutterScriptableIface *iface;
Packit 31ecd5
Packit 31ecd5
  g_return_val_if_fail (CLUTTER_IS_SCRIPTABLE (scriptable), NULL);
Packit 31ecd5
Packit 31ecd5
  iface = CLUTTER_SCRIPTABLE_GET_IFACE (scriptable);
Packit 31ecd5
  if (iface->get_id)
Packit 31ecd5
    return iface->get_id (scriptable);
Packit 31ecd5
  else
Packit 31ecd5
    return g_object_get_data (G_OBJECT (scriptable), "clutter-script-id");
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
/**
Packit 31ecd5
 * clutter_scriptable_parse_custom_node:
Packit 31ecd5
 * @scriptable: a #ClutterScriptable
Packit 31ecd5
 * @script: the #ClutterScript creating the scriptable instance
Packit 31ecd5
 * @value: the generic value to be set
Packit 31ecd5
 * @name: the name of the node
Packit 31ecd5
 * @node: the JSON node to be parsed
Packit 31ecd5
 *
Packit 31ecd5
 * Parses the passed JSON node. The implementation must set the type
Packit 31ecd5
 * of the passed #GValue pointer using g_value_init().
Packit 31ecd5
 *
Packit 31ecd5
 * Return value: %TRUE if the node was successfully parsed, %FALSE otherwise.
Packit 31ecd5
 *
Packit 31ecd5
 * Since: 0.6
Packit 31ecd5
 */
Packit 31ecd5
gboolean
Packit 31ecd5
clutter_scriptable_parse_custom_node (ClutterScriptable *scriptable,
Packit 31ecd5
                                      ClutterScript     *script,
Packit 31ecd5
                                      GValue            *value,
Packit 31ecd5
                                      const gchar       *name,
Packit 31ecd5
                                      JsonNode          *node)
Packit 31ecd5
{
Packit 31ecd5
  ClutterScriptableIface *iface;
Packit 31ecd5
Packit 31ecd5
  g_return_val_if_fail (CLUTTER_IS_SCRIPTABLE (scriptable), FALSE);
Packit 31ecd5
  g_return_val_if_fail (CLUTTER_IS_SCRIPT (script), FALSE);
Packit 31ecd5
  g_return_val_if_fail (name != NULL, FALSE);
Packit 31ecd5
  g_return_val_if_fail (node != NULL, FALSE);
Packit 31ecd5
Packit 31ecd5
  iface = CLUTTER_SCRIPTABLE_GET_IFACE (scriptable);
Packit 31ecd5
  if (iface->parse_custom_node)
Packit 31ecd5
    return iface->parse_custom_node (scriptable, script, value, name, node);
Packit 31ecd5
Packit 31ecd5
  return FALSE;
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
/**
Packit 31ecd5
 * clutter_scriptable_set_custom_property:
Packit 31ecd5
 * @scriptable: a #ClutterScriptable
Packit 31ecd5
 * @script: the #ClutterScript creating the scriptable instance
Packit 31ecd5
 * @name: the name of the property
Packit 31ecd5
 * @value: the value of the property
Packit 31ecd5
 *
Packit 31ecd5
 * Overrides the common properties setting. The underlying virtual
Packit 31ecd5
 * function should be used when implementing custom properties.
Packit 31ecd5
 *
Packit 31ecd5
 * Since: 0.6
Packit 31ecd5
 */
Packit 31ecd5
void
Packit 31ecd5
clutter_scriptable_set_custom_property (ClutterScriptable *scriptable,
Packit 31ecd5
                                        ClutterScript     *script,
Packit 31ecd5
                                        const gchar       *name,
Packit 31ecd5
                                        const GValue      *value)
Packit 31ecd5
{
Packit 31ecd5
  ClutterScriptableIface *iface;
Packit 31ecd5
Packit 31ecd5
  g_return_if_fail (CLUTTER_IS_SCRIPTABLE (scriptable));
Packit 31ecd5
  g_return_if_fail (CLUTTER_IS_SCRIPT (script));
Packit 31ecd5
  g_return_if_fail (name != NULL);
Packit 31ecd5
  g_return_if_fail (value != NULL);
Packit 31ecd5
Packit 31ecd5
  iface = CLUTTER_SCRIPTABLE_GET_IFACE (scriptable);
Packit 31ecd5
  if (iface->set_custom_property)
Packit 31ecd5
    iface->set_custom_property (scriptable, script, name, value);
Packit 31ecd5
}