diff --git a/src/apps/activitymonitor/ActivityView.cpp b/src/apps/activitymonitor/ActivityView.cpp index 1a56949ee5..0a8b678348 100644 --- a/src/apps/activitymonitor/ActivityView.cpp +++ b/src/apps/activitymonitor/ActivityView.cpp @@ -618,10 +618,10 @@ ActivityView::FrameResized(float /*width*/, float /*height*/) void -ActivityView::_UpdateOffscreenBitmap() +ActivityView::_UpdateOffscreenBitmap(bool force) { BRect frame = _HistoryFrame(); - if (fOffscreen != NULL && frame == fOffscreen->Bounds()) + if (!force && fOffscreen != NULL && frame == fOffscreen->Bounds()) return; delete fOffscreen; @@ -716,6 +716,28 @@ ActivityView::MouseMoved(BPoint where, uint32 transit, void ActivityView::MessageReceived(BMessage* message) { + // if a color is dropped, use it as background + if (message->WasDropped()) { + rgb_color *color; + ssize_t size; + if ((message->FindData("RGBColor", + B_RGB_COLOR_TYPE, 0, (const void **)&color, &size) == B_OK) && + size == sizeof(rgb_color)) { + //message->PrintToStream(); + BPoint dropPoint, dropOffset; + dropPoint = message->DropPoint(&dropOffset); + ConvertFromScreen(&dropPoint); + dropPoint += dropOffset; + if (_HistoryFrame().Contains(dropPoint)) { + fBackgroundColor = *color; + _UpdateOffscreenBitmap(true); + } else { + // XXX: check each legend color box ? + SetLowColor(*color); + } + return; + } // else try the switch or BView:: + } switch (message->what) { case B_ABOUT_REQUESTED: ActivityMonitor::ShowAbout(); diff --git a/src/apps/activitymonitor/ActivityView.h b/src/apps/activitymonitor/ActivityView.h index f41c529552..2d1d4b4f4f 100644 --- a/src/apps/activitymonitor/ActivityView.h +++ b/src/apps/activitymonitor/ActivityView.h @@ -86,7 +86,7 @@ protected: private: void _Init(const BMessage* settings); void _Refresh(); - void _UpdateOffscreenBitmap(); + void _UpdateOffscreenBitmap(bool force=false); void _UpdateFrame(); BRect _HistoryFrame() const; float _LegendHeight() const;