[nautilus] Draw background of inactive panes in INSENSITIVE color.
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nautilus] Draw background of inactive panes in INSENSITIVE color.
- Date: Thu, 10 Dec 2009 17:15:58 +0000 (UTC)
commit 2f843f0ed243a1c1f184c69e166c9da710fe1618
Author: Holger Berndt <berndth gmx de>
Date: Sat Jun 13 15:01:34 2009 +0200
Draw background of inactive panes in INSENSITIVE color.
In order to make it easier to visually distinguish active and inactive
panes, the background of inactive panes is drawn in the theme's
INSENSITIVE color. Like the inactive location bar widgets, this is
only a visual marker, and does not mean that that pane is
insensitive. It's still clickable, and in fact a click makes the
corresponding pane active.
eel/eel-background.c | 66 ++++++++++++++++++++++++++++++++++++++-----
eel/eel-background.h | 4 ++
src/nautilus-window-pane.c | 3 ++
src/nautilus-window-slot.c | 18 ++++++++++++
src/nautilus-window-slot.h | 2 +
5 files changed, 85 insertions(+), 8 deletions(-)
---
diff --git a/eel/eel-background.c b/eel/eel-background.c
index 371ae78..19269bb 100644
--- a/eel/eel-background.c
+++ b/eel/eel-background.c
@@ -98,6 +98,9 @@ struct EelBackgroundDetails {
/* Can we use common pixmap for root window and desktop window */
gboolean use_common_pixmap;
guint change_idle_id;
+
+ /* activity status */
+ gboolean is_active;
};
static void
@@ -171,6 +174,7 @@ eel_background_init (gpointer object, gpointer klass)
background->details->default_color.green = 0xffff;
background->details->default_color.blue = 0xffff;
background->details->bg = gnome_bg_new ();
+ background->details->is_active = TRUE;
g_signal_connect (background->details->bg, "changed",
G_CALLBACK (on_bg_changed), background);
@@ -397,6 +401,38 @@ eel_background_ensure_realized (EelBackground *background, GdkWindow *window)
return changed;
}
+#define CLAMP_COLOR(v) (t = (v), CLAMP (t, 0, G_MAXUSHORT))
+#define SATURATE(v) ((1.0 - saturation) * intensity + saturation * (v))
+
+static void
+make_color_inactive (EelBackground *background, GdkColor *color)
+{
+ double intensity, saturation;
+ gushort t;
+
+ if (!background->details->is_active) {
+ saturation = 0.7;
+ intensity = color->red * 0.30 + color->green * 0.59 + color->blue * 0.11;
+ color->red = SATURATE (color->red);
+ color->green = SATURATE (color->green);
+ color->blue = SATURATE (color->blue);
+
+ if (intensity > G_MAXUSHORT / 2) {
+ color->red *= 0.9;
+ color->green *= 0.9;
+ color->blue *= 0.9;
+ } else {
+ color->red *= 1.25;
+ color->green *= 1.25;
+ color->blue *= 1.25;
+ }
+
+ color->red = CLAMP_COLOR (color->red);
+ color->green = CLAMP_COLOR (color->green);
+ color->blue = CLAMP_COLOR (color->blue);
+ }
+}
+
static GdkPixmap *
eel_background_get_pixmap_and_color (EelBackground *background,
GdkWindow *window,
@@ -408,9 +444,10 @@ eel_background_get_pixmap_and_color (EelBackground *background,
drawable_get_adjusted_size (background, window, &entire_width, &entire_height);
eel_background_ensure_realized (background, window);
-
+
*color = background->details->default_color;
-
+ make_color_inactive (background, color);
+
if (background->details->background_pixmap != NULL) {
return g_object_ref (background->details->background_pixmap);
}
@@ -472,14 +509,15 @@ eel_background_expose (GtkWidget *widget,
static void
set_image_properties (EelBackground *background)
{
+ GdkColor c;
if (!background->details->color) {
+ c = background->details->default_color;
+ make_color_inactive (background, &c);
gnome_bg_set_color (background->details->bg, GNOME_BG_COLOR_SOLID,
- &background->details->default_color, NULL);
+ &c, NULL);
} else if (!eel_gradient_is_gradient (background->details->color)) {
- GdkColor c;
-
eel_gdk_color_parse_with_white_default (background->details->color, &c);
-
+ make_color_inactive (background, &c);
gnome_bg_set_color (background->details->bg, GNOME_BG_COLOR_SOLID, &c, NULL);
} else {
GdkColor c1;
@@ -488,10 +526,12 @@ set_image_properties (EelBackground *background)
spec = eel_gradient_get_start_color_spec (background->details->color);
eel_gdk_color_parse_with_white_default (spec, &c1);
+ make_color_inactive (background, &c1);
g_free (spec);
spec = eel_gradient_get_end_color_spec (background->details->color);
eel_gdk_color_parse_with_white_default (spec, &c2);
+ make_color_inactive (background, &c2);
g_free (spec);
if (eel_gradient_is_horizontal (background->details->color))
@@ -739,8 +779,8 @@ eel_background_set_up_widget (EelBackground *background, GtkWidget *widget)
gdk_window_set_back_pixmap (window, NULL, FALSE);
gdk_window_set_background (window, &color);
}
- }
-
+ }
+
if (background->details->is_desktop && !in_fade) {
set_root_pixmap (background, window);
}
@@ -1079,6 +1119,16 @@ eel_background_save_to_gconf (EelBackground *background)
gnome_bg_save_to_preferences (background->details->bg, client);
}
+void
+eel_background_set_active (EelBackground *background,
+ gboolean is_active)
+{
+ if (background->details->is_active != is_active) {
+ background->details->is_active = is_active;
+ set_image_properties (background);
+ }
+}
+
/* self check code */
#if !defined (EEL_OMIT_SELF_CHECK)
diff --git a/eel/eel-background.h b/eel/eel-background.h
index a2a6404..147cc5d 100644
--- a/eel/eel-background.h
+++ b/eel/eel-background.h
@@ -118,6 +118,10 @@ void eel_background_receive_dropped_background_image (Eel
EelBackground * eel_get_widget_background (GtkWidget *widget);
void eel_background_save_to_gconf (EelBackground *background);
+/* Set activity status of background. Inactive backgrounds are drawn in the theme's INSENSITIVE color. */
+void eel_background_set_active (EelBackground *background,
+ gboolean is_active);
+
typedef struct EelBackgroundDetails EelBackgroundDetails;
struct EelBackground
diff --git a/src/nautilus-window-pane.c b/src/nautilus-window-pane.c
index 371fede..1bdeb5c 100644
--- a/src/nautilus-window-pane.c
+++ b/src/nautilus-window-pane.c
@@ -188,6 +188,9 @@ nautilus_window_pane_set_active (NautilusWindowPane *pane, gboolean is_active)
}
pane->is_active = is_active;
+
+ /* notify the current slot about its activity state (so that it can e.g. modify the bg color) */
+ nautilus_window_slot_is_in_active_pane (pane->active_slot, is_active);
}
static void
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 83cbb55..dc3544d 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -27,11 +27,13 @@
#include "nautilus-desktop-window.h"
#include "nautilus-window-private.h"
#include "nautilus-window-manage-views.h"
+#include "file-manager/fm-directory-view.h"
#include <libnautilus-private/nautilus-file.h>
#include <libnautilus-private/nautilus-file-utilities.h>
#include <libnautilus-private/nautilus-window-slot-info.h>
#include <eel/eel-gtk-macros.h>
#include <eel/eel-string.h>
+#include <eel/eel-background.h>
static void nautilus_window_slot_init (NautilusWindowSlot *slot);
static void nautilus_window_slot_class_init (NautilusWindowSlotClass *class);
@@ -390,6 +392,22 @@ title_changed_callback (NautilusView *view,
nautilus_window_slot_update_icon (slot);
}
+void
+nautilus_window_slot_is_in_active_pane (NautilusWindowSlot *slot,
+ gboolean is_active)
+{
+ EelBackground *bg;
+
+ /* NULL is valid, and happens during init */
+ if (!slot) {
+ return;
+ }
+
+ bg = EEL_BACKGROUND (fm_directory_view_get_background (FM_DIRECTORY_VIEW (slot->content_view)));
+ g_return_if_fail (EEL_IS_BACKGROUND (bg));
+
+ eel_background_set_active (bg, is_active);
+}
void
nautilus_window_slot_connect_content_view (NautilusWindowSlot *slot,
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index ba04dce..3b06f7b 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -176,4 +176,6 @@ void nautilus_window_slot_remove_extra_location_widgets (NautilusWindowSlot *
void nautilus_window_slot_add_current_location_to_history_list (NautilusWindowSlot *slot);
+void nautilus_window_slot_is_in_active_pane (NautilusWindowSlot *slot, gboolean is_active);
+
#endif /* NAUTILUS_WINDOW_SLOT_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]