summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ui/draw-workspace.c36
-rw-r--r--src/ui/tabpopup.c12
2 files changed, 23 insertions, 25 deletions
diff --git a/src/ui/draw-workspace.c b/src/ui/draw-workspace.c
index e9838be1..aca58440 100644
--- a/src/ui/draw-workspace.c
+++ b/src/ui/draw-workspace.c
@@ -91,8 +91,8 @@ draw_window (GtkWidget *widget,
const GdkRectangle *winrect,
GtkStateType state)
{
- GdkPixbuf *icon;
- int icon_x, icon_y, icon_w, icon_h;
+ cairo_surface_t *icon;
+ int icon_x, icon_y, icon_w, icon_h, scale;
gboolean is_active;
GdkRGBA color;
GtkStyleContext *style;
@@ -117,32 +117,28 @@ draw_window (GtkWidget *widget,
MAX (0, winrect->width - 2), MAX (0, winrect->height - 2));
cairo_fill (cr);
+ scale = gtk_widget_get_scale_factor (widget);
- icon = win->icon;
+ icon = gdk_cairo_surface_create_from_pixbuf (win->icon, scale, NULL);
icon_w = icon_h = 0;
if (icon)
{
- icon_w = gdk_pixbuf_get_width (icon);
- icon_h = gdk_pixbuf_get_height (icon);
-
- /* If the icon is too big, fall back to mini icon.
- * We don't arbitrarily scale the icon, because it's
- * just too slow on my Athlon 850.
- */
- if (icon_w > (winrect->width - 2) ||
- icon_h > (winrect->height - 2))
+ icon_w = cairo_image_surface_get_width (icon) / scale;
+ icon_h = cairo_image_surface_get_height (icon) / scale;
+
+ /* If the icon is too big, fall back to mini icon. */
+ if (icon_w > (winrect->width - 2) || icon_h > (winrect->height - 2))
{
- icon = win->mini_icon;
+ icon = gdk_cairo_surface_create_from_pixbuf (win->mini_icon, scale, NULL);
if (icon)
{
- icon_w = gdk_pixbuf_get_width (icon);
- icon_h = gdk_pixbuf_get_height (icon);
+ icon_w = cairo_image_surface_get_width (icon) / scale;
+ icon_h = cairo_image_surface_get_height (icon) / scale;
/* Give up. */
- if (icon_w > (winrect->width - 2) ||
- icon_h > (winrect->height - 2))
+ if (icon_w > (winrect->width - 2) || icon_h > (winrect->height - 2))
icon = NULL;
}
}
@@ -154,7 +150,7 @@ draw_window (GtkWidget *widget,
icon_y = winrect->y + (winrect->height - icon_h) / 2;
cairo_save (cr);
- gdk_cairo_set_source_pixbuf (cr, icon, icon_x, icon_y);
+ cairo_set_source_surface (cr, icon, icon_x, icon_y);
cairo_rectangle (cr, icon_x, icon_y, icon_w, icon_h);
cairo_clip (cr);
cairo_paint (cr);
@@ -216,7 +212,9 @@ wnck_draw_workspace (GtkWidget *widget,
{
GdkRGBA color;
- meta_gtk_style_get_dark_color (style,state, &color);
+ meta_gtk_style_get_dark_color (style, state, &color);
+ color.alpha = 0.25;
+
gdk_cairo_set_source_rgba (cr, &color);
cairo_rectangle (cr, x, y, width, height);
cairo_fill (cr);
diff --git a/src/ui/tabpopup.c b/src/ui/tabpopup.c
index 06ee84e9..263a6a9d 100644
--- a/src/ui/tabpopup.c
+++ b/src/ui/tabpopup.c
@@ -912,7 +912,7 @@ struct _MetaSelectWorkspaceClass
static GType meta_select_workspace_get_type (void) G_GNUC_CONST;
#define SELECT_OUTLINE_WIDTH 2
-#define MINI_WORKSPACE_SCALE 2
+#define MINI_WORKSPACE_SCREEN_FRACTION 0.33
static GtkWidget*
selectable_workspace_new (MetaWorkspace *workspace, int entry_count)
@@ -929,20 +929,20 @@ selectable_workspace_new (MetaWorkspace *workspace, int entry_count)
if (workspace->screen->rect.width < workspace->screen->rect.height)
{
mini_workspace_ratio = (double) workspace->screen->rect.width / (double) workspace->screen->rect.height;
- mini_workspace_height = (int) ((double) current->rect.height / entry_count - SELECT_OUTLINE_WIDTH * 2);
+ mini_workspace_height = (int) ((double) current->rect.height * MINI_WORKSPACE_SCREEN_FRACTION / entry_count);
mini_workspace_width = (int) ((double) mini_workspace_height * mini_workspace_ratio);
}
else
{
mini_workspace_ratio = (double) workspace->screen->rect.height / (double) workspace->screen->rect.width;
- mini_workspace_width = (int) ((double) current->rect.width / entry_count - SELECT_OUTLINE_WIDTH * 2);
+ mini_workspace_width = (int) ((double) current->rect.width * MINI_WORKSPACE_SCREEN_FRACTION / entry_count);
mini_workspace_height = (int) ((double) mini_workspace_width * mini_workspace_ratio);
}
/* account for select rect */
gtk_widget_set_size_request (widget,
- mini_workspace_width / MINI_WORKSPACE_SCALE,
- mini_workspace_height / MINI_WORKSPACE_SCALE);
+ mini_workspace_width + SELECT_OUTLINE_WIDTH * 2,
+ mini_workspace_height + SELECT_OUTLINE_WIDTH * 2);
META_SELECT_WORKSPACE (widget)->workspace = workspace;
@@ -1114,7 +1114,7 @@ meta_select_workspace_draw (GtkWidget *widget,
gtk_style_context_set_state (context,
gtk_widget_get_state_flags (widget));
- gtk_style_context_lookup_color (context, "color", &color);
+ meta_gtk_style_get_light_color (context, GTK_STATE_FLAG_SELECTED, &color);
cairo_set_line_width (cr, SELECT_OUTLINE_WIDTH);
cairo_set_source_rgb (cr, color.red, color.green, color.blue);