Use tint_color to build disabled toolbar icons that look nicer.

This commit is contained in:
Adrien Destugues
2012-11-08 22:02:45 +00:00
parent f399b7e4b0
commit b8a680b175

View File

@@ -404,7 +404,7 @@ index b047bd0..b41130a 100644
+};
+
diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp
index 4003b09..6389e75 100644
index 4003b09..e0c6e6a 100644
--- a/beos/scaffolding.cpp
+++ b/beos/scaffolding.cpp
@@ -22,7 +22,9 @@
@@ -521,7 +521,7 @@ index 4003b09..6389e75 100644
} else {
if (g->top_view->Looper())
g->top_view->UnlockLooper();
@@ -1659,6 +1699,90 @@ static BMenuItem *make_menu_item(const char *name, BMessage *message)
@@ -1659,6 +1699,97 @@ static BMenuItem *make_menu_item(const char *name, BMessage *message)
return item;
}
@@ -537,6 +537,7 @@ index 4003b09..6389e75 100644
+ void SetBitmap(const char* attrName);
+ private:
+ BBitmap* fBitmap;
+ BBitmap* fDisabledBitmap;
+};
+
+
@@ -551,6 +552,7 @@ index 4003b09..6389e75 100644
+BBitmapButton::~BBitmapButton()
+{
+ delete fBitmap;
+ delete fDisabledBitmap;
+}
+
+
@@ -566,20 +568,16 @@ index 4003b09..6389e75 100644
+ rgb_color color = LowColor();
+
+ SetDrawingMode(B_OP_ALPHA);
+ if(Value() != 0) {
+ // button is clicked
+ DrawBitmap(fBitmap, BPoint(1, 1));
+ } else {
+ // button is released
+ DrawBitmap(fBitmap, BPoint(0, 0));
+ }
+
+ if(!IsEnabled())
+ {
+ color.alpha = 127;
+ SetLowColor(color);
+ FillRect(updateRect, B_SOLID_LOW);
+ }
+ if(IsEnabled()) {
+ if(Value() != 0) {
+ // button is clicked
+ DrawBitmap(fBitmap, BPoint(1, 1));
+ } else {
+ // button is released
+ DrawBitmap(fBitmap, BPoint(0, 0));
+ }
+ } else
+ DrawBitmap(fDisabledBitmap, BPoint(0, 0));
+}
+
+
@@ -602,9 +600,18 @@ index 4003b09..6389e75 100644
+ delete fBitmap;
+ fBitmap = NULL;
+ }
+
+ fDisabledBitmap = new BBitmap(fBitmap);
+ rgb_color* pixel = (rgb_color*)fDisabledBitmap->Bits();
+ for(int i = 0; i < fDisabledBitmap->BitsLength()/4; i++)
+ {
+ *pixel = tint_color(*pixel, B_DISABLED_MARK_TINT);
+ pixel++;
+ }
+#else
+ // No vector icon support on BeOS. We could try to load a bitmap one
+ fBitmap = NULL;
+ fDisabledBitmap = NULL;
+#endif
+}
+
@@ -612,7 +619,7 @@ index 4003b09..6389e75 100644
nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
{
struct beos_scaffolding *g = (struct beos_scaffolding *)malloc(sizeof(*g));
@@ -1676,7 +1800,6 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
@@ -1676,7 +1807,6 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
g->window = NULL;
g->menu_bar = NULL;
@@ -620,7 +627,7 @@ index 4003b09..6389e75 100644
if (replicated && !replicant_view) {
warn_user("Error: No subwindow allowed when replicated.", NULL);
@@ -1685,7 +1808,6 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
@@ -1685,7 +1815,6 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
if (!replicant_view) {
@@ -628,7 +635,7 @@ index 4003b09..6389e75 100644
BRect frame(0, 0, 600-1, 500-1);
if (nsoption_int(window_width) > 0) {
frame.Set(0, 0, nsoption_int(window_width) - 1, nsoption_int(window_height) - 1);
@@ -1696,7 +1818,7 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
@@ -1696,7 +1825,7 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
NSBrowserWindow *win = nsbeos_find_last_window();
if (win) {
pos = win->Frame().LeftTop();
@@ -637,7 +644,7 @@ index 4003b09..6389e75 100644
}
pos += BPoint(20, 20);
BScreen screen;
@@ -2038,14 +2160,13 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
@@ -2038,14 +2167,13 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
rect = g->top_view->Bounds();
rect.bottom = rect.top + TOOLBAR_HEIGHT - 1;
rect.right = rect.right - DRAGGER_WIDTH;
@@ -653,7 +660,7 @@ index 4003b09..6389e75 100644
rect = g->tool_bar->Bounds();
rect.right = TOOLBAR_HEIGHT;
rect.InsetBySelf(5, 5);
@@ -2054,35 +2175,35 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
@@ -2054,35 +2182,35 @@ nsbeos_scaffolding *nsbeos_new_scaffolding(struct gui_window *toplevel)
message = new BMessage('back');
message->AddPointer("scaffolding", g);
@@ -694,7 +701,7 @@ index 4003b09..6389e75 100644
g->tool_bar->AddChild(g->home_button);
nButtons++;
@@ -2407,3 +2528,4 @@ void nsbeos_scaffolding_popup_menu(nsbeos_scaffolding *g, BPoint where)
@@ -2407,3 +2535,4 @@ void nsbeos_scaffolding_popup_menu(nsbeos_scaffolding *g, BPoint where)
{
g->popup_menu->Go(where);
}