summaryrefslogtreecommitdiff
path: root/src/ui/draw-workspace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/draw-workspace.c')
-rw-r--r--src/ui/draw-workspace.c232
1 files changed, 0 insertions, 232 deletions
diff --git a/src/ui/draw-workspace.c b/src/ui/draw-workspace.c
deleted file mode 100644
index f7c98b68..00000000
--- a/src/ui/draw-workspace.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-
-/* Draw a workspace */
-
-/* This file should not be modified to depend on other files in
- * libwnck or metacity, since it's used in both of them
- */
-
-/*
- * Copyright (C) 2002 Red Hat Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include "draw-workspace.h"
-
-
-static void
-get_window_rect (const WnckWindowDisplayInfo *win,
- int screen_width,
- int screen_height,
- const GdkRectangle *workspace_rect,
- GdkRectangle *rect)
-{
- double width_ratio, height_ratio;
- int x, y, width, height;
-
- width_ratio = (double) workspace_rect->width / (double) screen_width;
- height_ratio = (double) workspace_rect->height / (double) screen_height;
-
- x = win->x;
- y = win->y;
- width = win->width;
- height = win->height;
-
- x *= width_ratio;
- y *= height_ratio;
- width *= width_ratio;
- height *= height_ratio;
-
- x += workspace_rect->x;
- y += workspace_rect->y;
-
- if (width < 3)
- width = 3;
- if (height < 3)
- height = 3;
-
- rect->x = x;
- rect->y = y;
- rect->width = width;
- rect->height = height;
-}
-
-static void
-draw_window (GtkWidget *widget,
- GdkDrawable *drawable,
- const WnckWindowDisplayInfo *win,
- const GdkRectangle *winrect,
- GtkStateType state)
-{
- cairo_t *cr;
- GdkPixbuf *icon;
- int icon_x, icon_y, icon_w, icon_h;
- gboolean is_active;
- GdkColor *color;
-
- is_active = win->is_active;
-
- cr = gdk_cairo_create (drawable);
- cairo_rectangle (cr, winrect->x, winrect->y, winrect->width, winrect->height);
- cairo_clip (cr);
-
- if (is_active)
- color = &widget->style->light[state];
- else
- color = &widget->style->bg[state];
- cairo_set_source_rgb (cr,
- color->red / 65535.,
- color->green / 65535.,
- color->blue / 65535.);
-
- cairo_rectangle (cr,
- winrect->x + 1, winrect->y + 1,
- MAX (0, winrect->width - 2), MAX (0, winrect->height - 2));
- cairo_fill (cr);
-
-
- icon = win->icon;
-
- 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 = win->mini_icon;
- if (icon)
- {
- icon_w = gdk_pixbuf_get_width (icon);
- icon_h = gdk_pixbuf_get_height (icon);
-
- /* Give up. */
- if (icon_w > (winrect->width - 2) ||
- icon_h > (winrect->height - 2))
- icon = NULL;
- }
- }
- }
-
- if (icon)
- {
- icon_x = winrect->x + (winrect->width - icon_w) / 2;
- icon_y = winrect->y + (winrect->height - icon_h) / 2;
-
- cairo_save (cr);
- gdk_cairo_set_source_pixbuf (cr, icon, icon_x, icon_y);
- cairo_rectangle (cr, icon_x, icon_y, icon_w, icon_h);
- cairo_clip (cr);
- cairo_paint (cr);
- cairo_restore (cr);
- }
-
- if (is_active)
- color = &widget->style->fg[state];
- else
- color = &widget->style->fg[state];
-
- cairo_set_source_rgb (cr,
- color->red / 65535.,
- color->green / 65535.,
- color->blue / 65535.);
- cairo_set_line_width (cr, 1.0);
- cairo_rectangle (cr,
- winrect->x + 0.5, winrect->y + 0.5,
- MAX (0, winrect->width - 1), MAX (0, winrect->height - 1));
- cairo_stroke (cr);
-
- cairo_destroy (cr);
-}
-
-void
-wnck_draw_workspace (GtkWidget *widget,
- GdkDrawable *drawable,
- int x,
- int y,
- int width,
- int height,
- int screen_width,
- int screen_height,
- GdkPixbuf *workspace_background,
- gboolean is_active,
- const WnckWindowDisplayInfo *windows,
- int n_windows)
-{
- int i;
- GdkRectangle workspace_rect;
- GtkStateType state;
-
- workspace_rect.x = x;
- workspace_rect.y = y;
- workspace_rect.width = width;
- workspace_rect.height = height;
-
- if (is_active)
- state = GTK_STATE_SELECTED;
- else if (workspace_background)
- state = GTK_STATE_PRELIGHT;
- else
- state = GTK_STATE_NORMAL;
-
- if (workspace_background)
- {
- gdk_draw_pixbuf (drawable,
- GTK_WIDGET (widget)->style->dark_gc[state],
- workspace_background,
- 0, 0,
- x, y,
- -1, -1,
- GDK_RGB_DITHER_MAX,
- 0, 0);
- }
- else
- {
- cairo_t *cr;
-
- cr = gdk_cairo_create (widget->window);
- gdk_cairo_set_source_color (cr, &widget->style->dark[state]);
- cairo_rectangle (cr, x, y, width, height);
- cairo_fill (cr);
- cairo_destroy (cr);
- }
-
- i = 0;
- while (i < n_windows)
- {
- const WnckWindowDisplayInfo *win = &windows[i];
- GdkRectangle winrect;
-
- get_window_rect (win, screen_width,
- screen_height, &workspace_rect, &winrect);
-
- draw_window (widget,
- drawable,
- win,
- &winrect,
- state);
-
- ++i;
- }
-}