Extend ShellGlobal object with more properties

* Add screen-width, screen-height, overlay-group properties
* Add set_stage_input_area() function
* Fix main.js to rotate DRAFT properly

svn path=/trunk/; revision=6
This commit is contained in:
Owen Taylor 2008-10-31 15:20:54 +00:00
parent 3d0966315e
commit 2fd4c9058d
5 changed files with 122 additions and 38 deletions

View File

@ -6,8 +6,8 @@ function start() {
let message = new Clutter.Label({font_name: "Sans Bold 64px", text: "DRAFT"}); let message = new Clutter.Label({font_name: "Sans Bold 64px", text: "DRAFT"});
message.set_opacity(75); message.set_opacity(75);
// Not working for unclear reasons message.set_anchor_point_from_gravity (Clutter.Gravity.CENTER);
// message.set_rotation(Clutter.RotateAxis.Z_AXIS, - 45, 0, 0, 0); message.set_rotation(Clutter.RotateAxis.Z_AXIS, - 45, 0, 0, 0);
message.set_position(100, 100); message.set_position(global.screen_width / 2, global.screen_height / 2);
global.get_overlay_group().add_actor(message); global.overlay_group.add_actor(message);
} }

View File

@ -83,7 +83,6 @@ static gboolean
do_init (const char *params) do_init (const char *params)
{ {
MutterPlugin *plugin = mutter_get_plugin(); MutterPlugin *plugin = mutter_get_plugin();
ClutterActor *overlay_group;
GError *error = NULL; GError *error = NULL;
int status; int status;
const char *shell_js; const char *shell_js;
@ -101,9 +100,6 @@ do_init (const char *params)
} }
} }
overlay_group = mutter_plugin_get_overlay_group (plugin);
shell_global_set_overlay_group (shell_global_get(), overlay_group);
shell_js = g_getenv("GNOME_SHELL_JS"); shell_js = g_getenv("GNOME_SHELL_JS");
if (!shell_js) if (!shell_js)
shell_js = JSDIR; shell_js = JSDIR;
@ -112,6 +108,8 @@ do_init (const char *params)
plugin_state->gjs_context = gjs_context_new_with_search_path(search_path); plugin_state->gjs_context = gjs_context_new_with_search_path(search_path);
g_strfreev(search_path); g_strfreev(search_path);
_shell_global_set_plugin (shell_global_get(), plugin);
if (!gjs_context_eval (plugin_state->gjs_context, if (!gjs_context_eval (plugin_state->gjs_context,
"const Main = imports.ui.main; Main.start();", "const Main = imports.ui.main; Main.start();",
-1, -1,

View File

@ -2,13 +2,6 @@
#include <mutter-plugin.h> #include <mutter-plugin.h>
void
mutter_plugin_query_screen_size (MutterPlugin *plugin,
int *width,
int *height)
{
}
ClutterActor * ClutterActor *
mutter_plugin_get_overlay_group (MutterPlugin *plugin) mutter_plugin_get_overlay_group (MutterPlugin *plugin)
{ {
@ -20,3 +13,16 @@ mutter_plugin_get_stage (MutterPlugin *plugin)
{ {
return NULL; return NULL;
} }
void
mutter_plugin_query_screen_size (MutterPlugin *plugin,
int *width,
int *height)
{
}
void
mutter_plugin_set_stage_input_area (MutterPlugin *plugin,
gint x, gint y, gint width, gint height)
{
}

View File

@ -1,17 +1,76 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
#include "shell-global.h" #include "shell-global.h"
struct _ShellGlobal { struct _ShellGlobal {
GObject parent; GObject parent;
ClutterActor *overlay_group; MutterPlugin *plugin;
}; };
struct _ShellGlobalClass { struct _ShellGlobalClass {
GObjectClass parent_class; GObjectClass parent_class;
}; };
enum {
PROP_0,
PROP_OVERLAY_GROUP,
PROP_SCREEN_WIDTH,
PROP_SCREEN_HEIGHT
};
G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT); G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT);
static void
shell_global_set_property(GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
switch (prop_id)
{
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
shell_global_get_property(GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
ShellGlobal *global = SHELL_GLOBAL (object);
switch (prop_id)
{
case PROP_OVERLAY_GROUP:
g_value_set_object (value, mutter_plugin_get_overlay_group (global->plugin));
break;
case PROP_SCREEN_WIDTH:
{
int width, height;
mutter_plugin_query_screen_size (global->plugin, &width, &height);
g_value_set_int (value, width);
}
break;
case PROP_SCREEN_HEIGHT:
{
int width, height;
mutter_plugin_query_screen_size (global->plugin, &width, &height);
g_value_set_int (value, height);
}
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void static void
shell_global_init(ShellGlobal *global) shell_global_init(ShellGlobal *global)
{ {
@ -20,6 +79,33 @@ shell_global_init(ShellGlobal *global)
static void static void
shell_global_class_init (ShellGlobalClass *klass) shell_global_class_init (ShellGlobalClass *klass)
{ {
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->get_property = shell_global_get_property;
gobject_class->set_property = shell_global_set_property;
g_object_class_install_property (gobject_class,
PROP_OVERLAY_GROUP,
g_param_spec_object ("overlay-group",
"Overlay Group",
"Actor holding objects that appear above the desktop contents",
CLUTTER_TYPE_ACTOR,
G_PARAM_READABLE));
g_object_class_install_property (gobject_class,
PROP_SCREEN_WIDTH,
g_param_spec_int ("screen-width",
"Screen Width",
"Screen width, in pixels",
0, G_MAXINT, 1,
G_PARAM_READABLE));
g_object_class_install_property (gobject_class,
PROP_SCREEN_HEIGHT,
g_param_spec_int ("screen-height",
"Screen Height",
"Screen height, in pixels",
0, G_MAXINT, 1,
G_PARAM_READABLE));
} }
ShellGlobal * ShellGlobal *
@ -34,25 +120,22 @@ shell_global_get (void)
} }
void void
shell_global_set_overlay_group (ShellGlobal *global, shell_global_set_stage_input_area (ShellGlobal *global,
ClutterActor *overlay_group) int x,
int y,
int width,
int height)
{ {
g_object_ref (overlay_group); g_return_if_fail (SHELL_IS_GLOBAL (global));
if (global->overlay_group) mutter_plugin_set_stage_input_area (global->plugin, x, y, width, height);
g_object_unref(global->overlay_group);
global->overlay_group = overlay_group;
}
ClutterActor *
shell_global_get_overlay_group (ShellGlobal *global)
{
return global->overlay_group;
} }
void void
shell_global_print_hello (ShellGlobal *global) _shell_global_set_plugin (ShellGlobal *global,
MutterPlugin *plugin)
{ {
g_print("Hello World!\n"); g_return_if_fail (SHELL_IS_GLOBAL (global));
global->plugin = plugin;
} }

View File

@ -1,6 +1,7 @@
#ifndef __SHELL_GLOBAL_H__ #ifndef __SHELL_GLOBAL_H__
#define __SHELL_GLOBAL_H__ #define __SHELL_GLOBAL_H__
#include "mutter-plugin.h"
#include <clutter/clutter.h> #include <clutter/clutter.h>
#include <glib-object.h> #include <glib-object.h>
@ -20,12 +21,8 @@ GType shell_global_get_type (void) G_GNUC_CONST;
ShellGlobal *shell_global_get (void); ShellGlobal *shell_global_get (void);
void shell_global_set_overlay_group (ShellGlobal *global, void _shell_global_set_plugin (ShellGlobal *global,
ClutterActor *overlay_group); MutterPlugin *plugin);
ClutterActor *shell_global_get_overlay_group (ShellGlobal *global);
void shell_global_print_hello (ShellGlobal *global);
G_END_DECLS G_END_DECLS