Author: rpmcruz
Date: Fri Oct 12 03:22:41 2007
New Revision: 41397
URL: http://svn.opensuse.org/viewcvs/yast?rev=41397&view=rev
Log:
* src/ygtksteps.c: bug fix #328500: steps may be truncated when they get
highlighted. Calculate size_request as if they are all highlighted.
TODO: we may want to get rid of PangoLayout in favor of the simpler Cairo.
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/ygtksteps.c
trunk/gtk/src/ygtksteps.h
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=41397&r1=41396&r2=41397&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Fri Oct 12 03:22:41 2007
@@ -34,6 +34,10 @@
documented behavior, and the YCP code is at fault here, but we probably
should emulate the other interfaces.
+ * src/ygtksteps.c: bug fix #328500: steps may be truncated when they get
+ highlighted. Calculate size_request as if they are all highlighted.
+ TODO: we may want to get rid of PangoLayout in favor of the simpler Cairo.
+
2007-10-10 Ricardo Cruz
* src/YGPackageSelector.cc: fixed bug #330467. Do a full match to
Modified: trunk/gtk/src/ygtksteps.c
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtksteps.c?rev=41397&r1=41396&r2=41397&view=diff
==============================================================================
--- trunk/gtk/src/ygtksteps.c (original)
+++ trunk/gtk/src/ygtksteps.c Fri Oct 12 03:22:41 2007
@@ -66,6 +66,10 @@
g_object_unref (G_OBJECT (step->layout));
step->layout = NULL;
}
+ if (step->layout_bold) {
+ g_object_unref (G_OBJECT (step->layout_bold));
+ step->layout_bold = NULL;
+ }
}
// should be called rather than accessing step->layout
@@ -76,25 +80,35 @@
if (!step->layout) {
step->layout = gtk_widget_create_pango_layout (GTK_WIDGET (steps), NULL);
- gchar *text;
+ gchar *text, *text_bold = 0;
if (step->is_heading) {
text = g_strdup_printf ("%s</span>",
step->text);
pango_layout_set_spacing (step->layout, STEPS_HEADER_SPACING * PANGO_SCALE);
}
else {
- if (steps->current_step == step_nb)
- text = g_strdup_printf ("<b>%s</b>", step->text);
- else
- text = g_strdup (step->text);
+ if (!step->layout_bold)
+ step->layout_bold = gtk_widget_create_pango_layout (GTK_WIDGET (steps), NULL);
+ g_assert (step->layout_bold);
+ text = g_strdup (step->text);
+ text_bold = g_strdup_printf ("<b>%s</b>", step->text);
pango_layout_set_indent (step->layout, STEPS_IDENTATION * PANGO_SCALE);
+ pango_layout_set_indent (step->layout_bold, STEPS_IDENTATION * PANGO_SCALE);
pango_layout_set_spacing (step->layout, STEPS_SPACING * PANGO_SCALE);
+ pango_layout_set_spacing (step->layout_bold, STEPS_SPACING * PANGO_SCALE);
}
pango_layout_set_markup (step->layout, text, -1);
g_free (text);
+ if (step->layout_bold)
+ {
+ pango_layout_set_markup (step->layout_bold, text_bold, -1);
+ g_free (text_bold);
+ }
}
+ if (steps->current_step == step_nb)
+ return step->layout_bold;
return step->layout;
}
@@ -106,6 +120,8 @@
YGtkSingleStep *step = it->data;
if (step->layout)
pango_layout_context_changed (step->layout);
+ if (step->layout_bold)
+ pango_layout_context_changed (step->layout_bold);
}
}
@@ -129,6 +145,9 @@
int i;
for (i = 0; i < ygtk_steps_total (steps); i++) {
PangoLayout *layout = ygtk_steps_get_step_layout (steps, i);
+ YGtkSingleStep *step = ygtk_steps_get_step (steps, i);
+ if (!step->is_heading)
+ layout = step->layout_bold;
int w, h;
pango_layout_get_pixel_size (layout, &w, &h);
@@ -213,7 +232,7 @@
step->is_heading = FALSE;
step->text = g_strdup (step_text);
step->strength = 1;
- step->layout = NULL;
+ step->layout = step->layout_bold = NULL;
steps->steps = g_list_append (steps->steps, step);
gtk_widget_queue_resize (GTK_WIDGET (steps));
@@ -230,7 +249,7 @@
step->is_heading = TRUE;
step->text = g_strdup (heading);
step->strength = 1; // not important anyway
- step->layout = NULL;
+ step->layout = step->layout_bold = NULL;
steps->steps = g_list_append (steps->steps, step);
gtk_widget_queue_resize (GTK_WIDGET (steps));
@@ -302,3 +321,4 @@
GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass);
gtkobject_class->destroy = ygtk_steps_destroy;
}
+
Modified: trunk/gtk/src/ygtksteps.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtksteps.h?rev=41397&r1=41396&r2=41397&view=diff
==============================================================================
--- trunk/gtk/src/ygtksteps.h (original)
+++ trunk/gtk/src/ygtksteps.h Fri Oct 12 03:22:41 2007
@@ -12,6 +12,9 @@
once to actually advance for a given step), you may append a
step with the same name of the previous, that they'll be collapsed.
(Internally, we call that the 'strength' of the step.)
+
+ TODO: the PangoLayout usage is getting a bit hacky. We may want to
+ replace it with Cairo methods.
*/
#ifndef YGTK_STEPS_H
@@ -59,7 +62,7 @@
guint strength; // check the text at top
// private -- don't access it, call ygtk_step_get_layout() instead
- PangoLayout *layout; // cache
+ PangoLayout *layout, *layout_bold; // cache
} YGtkSingleStep;
GtkWidget* ygtk_steps_new (void);
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org