void CColorPicker::MessageReceived(BMessage *msg) { roSColor *c; long l; if (msg->WasDropped() && msg->FindData("roColour", 'roCr', (const void **)&c, &l) == B_NO_ERROR) { fNewColor = *c; fHSV->SetColor(fNewColor); fRGB->SetColor(fNewColor); fON->SetNewColor(f2rgb(fNewColor.m_Red, fNewColor.m_Green, fNewColor.m_Blue, fNewColor.m_Alpha)); return; } switch (msg->what) { case msg_EndTracking: if (fStayOpen) PostNewColor(); break; case msg_RawChange: fRGB->MessageReceived(msg); break; case msg_ManualChange: fHSV->SetColor(fNewColor); fON->SetOldColor(f2rgb(fNewColor.m_Red, fNewColor.m_Green, fNewColor.m_Blue, fNewColor.m_Alpha)); fON->SetNewColor(f2rgb(fNewColor.m_Red, fNewColor.m_Green, fNewColor.m_Blue, fNewColor.m_Alpha)); fRGB->SetColor(fNewColor); break; case msg_OK: PostNewColor(); // fall through case msg_Cancel: Quit(); break; default: BWindow::MessageReceived(msg); } } /* CColorPicker::MessageReceived */
void CColorPicker::SetHSV(float h, float s, float v) { fNewColor.m_Hue = h; hsv2rgb(h, s, v, fNewColor.m_Red, fNewColor.m_Green, fNewColor.m_Blue); fON->SetNewColor(f2rgb(fNewColor.m_Red, fNewColor.m_Green, fNewColor.m_Blue, fNewColor.m_Alpha)); fRGB->SetColor(fNewColor); } /* CColorPicker::SetHSV */
void CColorPicker::SetRGB(float r, float g, float b) { fNewColor.m_Red = r; fNewColor.m_Green = g; fNewColor.m_Blue = b; float s, v; rgb2hsv(r, g, b, fNewColor.m_Hue, s, v); fON->SetNewColor(f2rgb(r, g, b, fNewColor.m_Alpha)); fHSV->SetColor(fNewColor); } /* CColorPicker::SetRGB */
rgb_color ro2rgb(roSColor& ro) { return f2rgb(ro.m_Red, ro.m_Green, ro.m_Blue); } /* ro2rgb */
void CColorPicker::PostNewColor() { rgb_color c = f2rgb(fNewColor.m_Red, fNewColor.m_Green, fNewColor.m_Blue, 1.0); fMessage.ReplaceData("color", B_RGB_COLOR_TYPE, &c, 4); fCaller->Looper()->PostMessage(&fMessage, fCaller); } /* CColorPicker::PostNewColor */
CColorPicker::operator rgb_color() const { return f2rgb(fNewColor.m_Red, fNewColor.m_Green, fNewColor.m_Blue, fNewColor.m_Alpha); } /* CColorPicker::operator rgb_color */