[gnome-shell] StTooltip: Rework to use StLabel
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] StTooltip: Rework to use StLabel
- Date: Tue, 16 Nov 2010 18:25:08 +0000 (UTC)
commit aa91491730d5ae4d60ab18bf536bb5c5a917290a
Author: Giovanni Campagna <scampa giovanni gmail com>
Date: Tue Jun 22 22:07:00 2010 +0200
StTooltip: Rework to use StLabel
Replaces the internal ClutterText with StLabel, so full CSS
styling is supported.
https://bugzilla.gnome.org/show_bug.cgi?id=622450
data/theme/gnome-shell.css | 7 ++-
src/st/st-tooltip.c | 168 +++++++++++---------------------------------
src/st/st-tooltip.h | 6 +-
src/st/st-widget.c | 6 +-
4 files changed, 51 insertions(+), 136 deletions(-)
---
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index 15755ff..4307494 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -92,12 +92,15 @@ StScrollBar StButton#vhandle:hover
background-color: #292929;
}
-StTooltip {
- border: 1px solid rgba(79,111,173,0.9);
+StTooltip StLabel {
+ border: 1px solid rgba(79,111,173,1);
border-radius: 5px;
padding: 4px;
background-color: rgba(79,111,173,0.9);
color: #ffffff;
+ font-size: 0.8em;
+ font-weight: normal;
+ text-align: center;
}
/* PopupMenu */
diff --git a/src/st/st-tooltip.c b/src/st/st-tooltip.c
index 52419f6..c452e18 100644
--- a/src/st/st-tooltip.c
+++ b/src/st/st-tooltip.c
@@ -41,6 +41,7 @@
#include "st-tooltip.h"
#include "st-widget.h"
+#include "st-label.h"
#include "st-private.h"
enum
@@ -56,7 +57,7 @@ enum
struct _StTooltipPrivate
{
- ClutterActor *label;
+ StLabel *label;
gfloat arrow_offset;
gboolean actor_below;
@@ -68,6 +69,10 @@ extern gfloat st_slow_down_factor;
G_DEFINE_TYPE (StTooltip, st_tooltip, ST_TYPE_WIDGET);
+static void st_tooltip_show (ClutterActor *self);
+static void st_tooltip_show_all (ClutterActor *self);
+static void st_tooltip_hide_all (ClutterActor *self);
+
static void
st_tooltip_set_property (GObject *gobject,
guint prop_id,
@@ -102,7 +107,7 @@ st_tooltip_get_property (GObject *gobject,
switch (prop_id)
{
case PROP_LABEL:
- g_value_set_string (value, clutter_text_get_text (CLUTTER_TEXT (priv->label)));
+ g_value_set_string (value, st_label_get_text (priv->label));
break;
case PROP_TIP_AREA:
@@ -116,29 +121,6 @@ st_tooltip_get_property (GObject *gobject,
}
static void
-st_tooltip_style_changed (StWidget *self)
-{
- StTooltipPrivate *priv;
- StThemeNode *theme_node;
- ClutterColor color;
- const PangoFontDescription *font;
- gchar *font_string;
-
- priv = ST_TOOLTIP (self)->priv;
- theme_node = st_widget_get_theme_node (self);
-
- st_theme_node_get_foreground_color (theme_node, &color);
- clutter_text_set_color (CLUTTER_TEXT (priv->label), &color);
-
- font = st_theme_node_get_font (theme_node);
- font_string = pango_font_description_to_string (font);
- clutter_text_set_font_name (CLUTTER_TEXT (priv->label), font_string);
- g_free (font_string);
-
- ST_WIDGET_CLASS (st_tooltip_parent_class)->style_changed (self);
-}
-
-static void
st_tooltip_get_preferred_width (ClutterActor *self,
gfloat for_height,
gfloat *min_width_p,
@@ -159,13 +141,10 @@ st_tooltip_get_preferred_width (ClutterActor *self,
label_height = -1;
}
- if (priv->label)
- {
- clutter_actor_get_preferred_width (priv->label,
- label_height,
- min_width_p,
- natural_width_p);
- }
+ clutter_actor_get_preferred_width (CLUTTER_ACTOR (priv->label),
+ label_height,
+ min_width_p,
+ natural_width_p);
st_theme_node_adjust_preferred_width (theme_node, min_width_p, natural_width_p);
}
@@ -182,19 +161,10 @@ st_tooltip_get_preferred_height (ClutterActor *self,
st_theme_node_adjust_for_width (theme_node, &for_width);
- if (priv->label)
- {
- clutter_actor_get_preferred_height (priv->label,
- for_width,
- &min_label_h,
- &natural_label_h);
- }
- else
- {
- min_label_h = 0;
- natural_label_h = 0;
- }
-
+ clutter_actor_get_preferred_height (CLUTTER_ACTOR (priv->label),
+ for_width,
+ &min_label_h,
+ &natural_label_h);
if (min_height_p)
*min_height_p = min_label_h;
@@ -223,12 +193,9 @@ st_tooltip_allocate (ClutterActor *self,
child_box.x2 = (box->x2 - box->x1);
child_box.y2 = (box->y2 - box->y1);
- if (priv->label)
- {
- child_box = content_box;
+ child_box = content_box;
- clutter_actor_allocate (priv->label, &child_box, flags);
- }
+ clutter_actor_allocate (CLUTTER_ACTOR (priv->label), &child_box, flags);
}
static void
@@ -236,7 +203,9 @@ st_tooltip_paint (ClutterActor *self)
{
StTooltipPrivate *priv = ST_TOOLTIP (self)->priv;
- clutter_actor_paint (priv->label);
+ CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->paint (self);
+
+ clutter_actor_paint (CLUTTER_ACTOR (priv->label));
}
static void
@@ -246,7 +215,7 @@ st_tooltip_map (ClutterActor *self)
CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->map (self);
- clutter_actor_map (priv->label);
+ clutter_actor_map (CLUTTER_ACTOR (priv->label));
}
static void
@@ -256,7 +225,7 @@ st_tooltip_unmap (ClutterActor *self)
CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->unmap (self);
- clutter_actor_unmap (priv->label);
+ clutter_actor_unmap (CLUTTER_ACTOR (priv->label));
}
static void
@@ -266,7 +235,7 @@ st_tooltip_dispose (GObject *self)
if (priv->label)
{
- clutter_actor_destroy (priv->label);
+ clutter_actor_destroy (CLUTTER_ACTOR (priv->label));
priv->label = NULL;
}
@@ -278,7 +247,6 @@ st_tooltip_class_init (StTooltipClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
- StWidgetClass *widget_class = ST_WIDGET_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StTooltipPrivate));
@@ -293,8 +261,9 @@ st_tooltip_class_init (StTooltipClass *klass)
actor_class->paint = st_tooltip_paint;
actor_class->map = st_tooltip_map;
actor_class->unmap = st_tooltip_unmap;
-
- widget_class->style_changed = st_tooltip_style_changed;
+ actor_class->show = st_tooltip_show;
+ actor_class->show_all = st_tooltip_show_all;
+ actor_class->hide_all = st_tooltip_hide_all;
pspec = g_param_spec_string ("label",
"Label",
@@ -315,11 +284,7 @@ st_tooltip_init (StTooltip *tooltip)
{
tooltip->priv = ST_TOOLTIP_GET_PRIVATE (tooltip);
- tooltip->priv->label = g_object_new (CLUTTER_TYPE_TEXT,
- "line-alignment", PANGO_ALIGN_CENTER,
- "ellipsize", PANGO_ELLIPSIZE_END,
- "use-markup", TRUE,
- NULL);
+ tooltip->priv->label = ST_LABEL (st_label_new (NULL));
tooltip->priv->tip_area = NULL;
@@ -417,7 +382,7 @@ st_tooltip_get_label (StTooltip *tooltip)
{
g_return_val_if_fail (ST_IS_TOOLTIP (tooltip), NULL);
- return clutter_text_get_text (CLUTTER_TEXT (tooltip->priv->label));
+ return st_label_get_text (tooltip->priv->label);
}
/**
@@ -437,32 +402,18 @@ st_tooltip_set_label (StTooltip *tooltip,
priv = tooltip->priv;
- clutter_text_set_text (CLUTTER_TEXT (priv->label), text);
+ st_label_set_text (priv->label, text);
g_object_notify (G_OBJECT (tooltip), "label");
}
-/**
- * st_tooltip_show:
- * @tooltip: a #StTooltip
- *
- * Show the tooltip relative to the associated widget.
- */
-void
-st_tooltip_show (StTooltip *tooltip)
+static void
+st_tooltip_show (ClutterActor *self)
{
- StTooltipPrivate *priv;
+ StTooltip *tooltip = ST_TOOLTIP (self);
ClutterActor *parent;
ClutterActor *stage;
- ClutterActor *self = CLUTTER_ACTOR (tooltip);
- ClutterAnimation *animation;
-
- /* make sure we're not currently already animating (e.g. hiding) */
- animation = clutter_actor_get_animation (CLUTTER_ACTOR (tooltip));
- if (animation)
- clutter_animation_completed (animation);
- priv = tooltip->priv;
parent = clutter_actor_get_parent (self);
stage = clutter_actor_get_stage (self);
@@ -491,59 +442,22 @@ st_tooltip_show (StTooltip *tooltip)
/* finally show the tooltip... */
CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->show (self);
-
- /* and give it some bounce! */
- g_object_set (G_OBJECT (self),
- "scale-center-x", priv->arrow_offset,
- "scale-center-y", (priv->actor_below) ? clutter_actor_get_height (self) : 0,
- NULL);
- clutter_actor_set_scale (self, 0.0, 0.0);
- clutter_actor_animate (self, CLUTTER_EASE_OUT_ELASTIC,
- 500,
- "scale-x", 1.0,
- "scale-y", 1.0,
- NULL);
}
static void
-st_tooltip_hide_complete (ClutterAnimation *animation,
- ClutterActor *actor)
+st_tooltip_show_all (ClutterActor *self)
{
- CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->hide (actor);
- g_signal_handlers_disconnect_by_func (actor,
- st_tooltip_hide_complete,
- actor);
+ CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->show_all (self);
+
+ clutter_actor_show_all (CLUTTER_ACTOR (ST_TOOLTIP (self)->priv->label));
}
-/**
- * st_tooltip_hide:
- * @tooltip: a #StTooltip
- *
- * Hide the tooltip
- */
-void
-st_tooltip_hide (StTooltip *tooltip)
+static void
+st_tooltip_hide_all (ClutterActor *self)
{
- ClutterAnimation *animation;
-
- g_return_if_fail (ST_TOOLTIP (tooltip));
-
- /* make sure we're not currently already animating (e.g. hiding) */
- animation = clutter_actor_get_animation (CLUTTER_ACTOR (tooltip));
- if (animation)
- clutter_animation_completed (animation);
-
- g_object_set (G_OBJECT (tooltip),
- "scale-center-x", tooltip->priv->arrow_offset,
- NULL);
- animation =
- clutter_actor_animate (CLUTTER_ACTOR (tooltip), CLUTTER_EASE_IN_SINE,
- (guint)(150 * st_slow_down_factor),
- "scale-x", 0.0,
- "scale-y", 0.0,
- NULL);
- g_signal_connect (animation, "completed",
- G_CALLBACK (st_tooltip_hide_complete), tooltip);
+ CLUTTER_ACTOR_CLASS (st_tooltip_parent_class)->hide_all (self);
+
+ clutter_actor_hide_all (CLUTTER_ACTOR (ST_TOOLTIP (self)->priv->label));
}
/**
diff --git a/src/st/st-tooltip.h b/src/st/st-tooltip.h
index 0875181..123f6c1 100644
--- a/src/st/st-tooltip.h
+++ b/src/st/st-tooltip.h
@@ -48,14 +48,14 @@ typedef struct _StTooltipClass StTooltipClass;
struct _StTooltip
{
/*< private >*/
- StBin parent_instance;
+ StWidget parent_instance;
StTooltipPrivate *priv;
};
struct _StTooltipClass
{
- StBinClass parent_class;
+ StWidgetClass parent_class;
};
GType st_tooltip_get_type (void) G_GNUC_CONST;
@@ -63,8 +63,6 @@ GType st_tooltip_get_type (void) G_GNUC_CONST;
G_CONST_RETURN gchar *st_tooltip_get_label (StTooltip *tooltip);
void st_tooltip_set_label (StTooltip *tooltip,
const gchar *text);
-void st_tooltip_show (StTooltip *tooltip);
-void st_tooltip_hide (StTooltip *tooltip);
void st_tooltip_set_tip_area (StTooltip *tooltip,
const ClutterGeometry *area);
diff --git a/src/st/st-widget.c b/src/st/st-widget.c
index 312661d..fae5f56 100644
--- a/src/st/st-widget.c
+++ b/src/st/st-widget.c
@@ -663,7 +663,7 @@ st_widget_hide (ClutterActor *actor)
/* hide the tooltip, if there is one */
if (widget->priv->tooltip)
- st_tooltip_hide (ST_TOOLTIP (widget->priv->tooltip));
+ clutter_actor_hide (CLUTTER_ACTOR (widget->priv->tooltip));
CLUTTER_ACTOR_CLASS (st_widget_parent_class)->hide (actor);
}
@@ -1534,7 +1534,7 @@ st_widget_show_tooltip (StWidget *widget)
if (widget->priv->tooltip)
{
st_tooltip_set_tip_area (widget->priv->tooltip, &area);
- st_tooltip_show (widget->priv->tooltip);
+ clutter_actor_show_all (CLUTTER_ACTOR (widget->priv->tooltip));
}
}
@@ -1551,7 +1551,7 @@ st_widget_hide_tooltip (StWidget *widget)
g_return_if_fail (ST_IS_WIDGET (widget));
if (widget->priv->tooltip)
- st_tooltip_hide (widget->priv->tooltip);
+ clutter_actor_hide (CLUTTER_ACTOR (widget->priv->tooltip));
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]