+2008-04-04 Matthew Allum <mallum@openedhand.com>
+
+ reviewed by: <delete if not using a buddy>
+
+ * clutter/clutter-actor.c: (clutter_actor_real_hide),
+ (clutter_actor_unrealize), (clutter_actor_set_property),
+ (clutter_actor_get_property), (clutter_actor_class_init),
+ (clutter_actor_init), (clutter_actor_set_parent):
+ * clutter/cogl/gles/cogl.c: (cogl_texture_quad), (cogl_fog_set):
+ * clutter/eglnative/Makefile.am:
+ * clutter/eglx/clutter-backend-egl.c:
+ * tests/test-actors.c: (main):
+
2008-04-03 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/Makefile.am: Only export symbols matching "^clutter.*",
ShaderData *shader_data;
- ClutterStage *stage;
+ gboolean show_on_set_parent;
};
enum
PROP_ROTATION_CENTER_Z,
PROP_ANCHOR_X,
- PROP_ANCHOR_Y
+ PROP_ANCHOR_Y,
+
+ PROP_SHOW_ON_SET_PARENT
};
enum
clutter_scriptable_iface_init));
-
-
static void
clutter_actor_real_show (ClutterActor *self)
{
void
clutter_actor_show (ClutterActor *self)
{
+ ClutterActorPrivate *priv;
+
+ g_return_if_fail (CLUTTER_IS_ACTOR (self));
+
+ priv = self->priv;
+
+ if (priv->show_on_set_parent == FALSE && priv->parent_actor == NULL)
+ g_object_set (self, "show-on-set-parent", TRUE, NULL);
+
if (!CLUTTER_ACTOR_IS_VISIBLE (self))
{
g_object_ref (self);
void
clutter_actor_hide (ClutterActor *self)
{
- if (CLUTTER_ACTOR_IS_VISIBLE (self))
+ ClutterActorPrivate *priv;
+
+ g_return_if_fail (CLUTTER_IS_ACTOR (self));
+
+ priv = self->priv;
+
+ if (priv->show_on_set_parent == TRUE && priv->parent_actor == NULL)
+ g_object_set (self, "show-on-set-parent", FALSE, NULL);
+
+ if (CLUTTER_ACTOR_IS_MAPPED (self))
{
g_object_ref (self);
- if (CLUTTER_ACTOR_IS_REACTIVE(self))
- ; /* FIXME: decrease global reactive count */
-
g_signal_emit (self, actor_signals[HIDE], 0);
g_object_notify (G_OBJECT (self), "visible");
if (klass->unrealize)
(klass->unrealize) (self);
-
- priv->stage = NULL;
}
static void
case PROP_ANCHOR_Y:
priv->anchor_y = CLUTTER_UNITS_FROM_DEVICE (g_value_get_int (value));
break;
+ case PROP_SHOW_ON_SET_PARENT:
+ priv->show_on_set_parent = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_ANCHOR_Y:
g_value_set_int (value, CLUTTER_UNITS_TO_DEVICE (priv->anchor_y));
break;
+ case PROP_SHOW_ON_SET_PARENT:
+ g_value_set_boolean (value, priv->show_on_set_parent);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
CLUTTER_PARAM_READWRITE));
/**
+ * ClutterActor:show-on-set-parent:
+ *
+ * If TRUE, the Actor is automatically shown when parented.
+ *
+ * Since: 0.8
+ */
+ g_object_class_install_property
+ (object_class,
+ PROP_SHOW_ON_SET_PARENT,
+ g_param_spec_boolean ("show-on-set-parent",
+ "Show on set parent",
+ "Whether the actor is shown"
+ " when parented",
+ TRUE,
+ CLUTTER_PARAM_READWRITE));
+
+
+ /**
* ClutterActor::destroy:
* @actor: the object which received the signal
*
priv->scale_x = CFX_ONE;
priv->scale_y = CFX_ONE;
priv->shader_data = NULL;
+ priv->show_on_set_parent = TRUE;
memset (priv->clip, 0, sizeof (ClutterUnit) * 4);
self->priv->parent_actor = parent;
g_signal_emit (self, actor_signals[PARENT_SET], 0, NULL);
+ if (self->priv->show_on_set_parent == TRUE)
+ clutter_actor_show (self);
+
+ /* FIXME: below likely not needed */
if (CLUTTER_ACTOR_IS_REALIZED (self->priv->parent_actor))
clutter_actor_realize (self);
GE( glDrawArrays(GL_TRIANGLES, 0, 6) );
GE( glDisableClientState(GL_TEXTURE_COORD_ARRAY) );
GE( glDisableClientState(GL_VERTEX_ARRAY) );
+
+ /* Note also see glDrawTexxOES for potential optimisation */
}
void
glFogx (GL_FOG_END, (GLfixed) z_far);
}
-/* Offscreen - TODO: possible support from FBO's */
-
+/* Offscreen - TODO: possible support from FBO's/PBuffers
+ * See;
+ * http://www.khronos.org/message_boards/viewtopic.php?t=589
+ * http://www.gamedev.net/community/forums/topic.asp?topic_id=369739
+ *
+ * Likely requires EGL 1.3 for eglBindTexImage
+*/
COGLuint
cogl_offscreen_create (COGLuint target_texture)
{
static ClutterFeatureFlags
clutter_backend_egl_get_features (ClutterBackend *backend)
{
+ ClutterBackendEGL *backend_egl = CLUTTER_BACKEND_EGL (backend);
+
+ CLUTTER_NOTE (BACKEND, "Checking features\n"
+ "GL_VENDOR: %s\n"
+ "GL_RENDERER: %s\n"
+ "GL_VERSION: %s\n"
+ "EGL_VENDOR: %s\n",
+ "EGL_VERSION: %s\n",
+ "EGL_EXTENSIONS: %s\n",
+ glGetString(GL_VENDOR),
+ glGetString(GL_RENDERER),
+ glGetString(GL_VERSION),
+ eglQueryString(backend_egl->edpy, EGL_VENDOR),
+ eglQueryString(backend_egl->edpy, EGL_VERSION),
+ eglQueryString(backend_egl->edpy, EGL_EXTENSIONS));
+
/* We can actually resize too */
- return CLUTTER_FEATURE_STAGE_CURSOR;
+ return CLUTTER_FEATURE_STAGE_CURSOR|CLUTTER_FEATURE_STAGE_MULTIPLE;
}
static gboolean