hopefully fixed ChannelSlider (size, drawing)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16343 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
38690d41b0
commit
2879eb37ec
|
@ -11,6 +11,8 @@
|
||||||
#include <Screen.h>
|
#include <Screen.h>
|
||||||
#include <Window.h>
|
#include <Window.h>
|
||||||
|
|
||||||
|
#define max(a,b) ((a)>(b)?(a):(b))
|
||||||
|
|
||||||
const static unsigned char
|
const static unsigned char
|
||||||
kVerticalKnobData[] = {
|
kVerticalKnobData[] = {
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
@ -43,7 +45,8 @@ kHorizontalKnobData[] = {
|
||||||
0xff, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x12, 0xff,
|
0xff, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x12, 0xff,
|
||||||
0xff, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x12, 0xff,
|
0xff, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x12, 0xff,
|
||||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0xff,
|
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0xff,
|
||||||
0xff, 0xff, 0xff, 0xff, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0xff, 0xff
|
0xff, 0xff, 0xff, 0xff, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -400,7 +403,20 @@ BChannelSlider::SetEnabled(bool on)
|
||||||
void
|
void
|
||||||
BChannelSlider::GetPreferredSize(float *width, float *height)
|
BChannelSlider::GetPreferredSize(float *width, float *height)
|
||||||
{
|
{
|
||||||
BChannelControl::GetPreferredSize(width, height);
|
if (width) {
|
||||||
|
float _width = (float)ceil(StringWidth(Label()));
|
||||||
|
if (Vertical()) {
|
||||||
|
*width = max(_width, 2 + 12 * CountChannels());
|
||||||
|
} else {
|
||||||
|
*width = max(_width, 64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (height) {
|
||||||
|
if (Vertical())
|
||||||
|
*height = 195;
|
||||||
|
else
|
||||||
|
*height = 71;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -518,7 +534,7 @@ BChannelSlider::ThumbFor(int32 channel, bool pressed)
|
||||||
fLeftKnob = new BBitmap(BRect(0, 0, 11, 14), B_CMAP8);
|
fLeftKnob = new BBitmap(BRect(0, 0, 11, 14), B_CMAP8);
|
||||||
fLeftKnob->SetBits(kVerticalKnobData, sizeof(kVerticalKnobData), 0, B_CMAP8);
|
fLeftKnob->SetBits(kVerticalKnobData, sizeof(kVerticalKnobData), 0, B_CMAP8);
|
||||||
} else {
|
} else {
|
||||||
fLeftKnob = new BBitmap(BRect(0, 0, 14, 10), B_CMAP8);
|
fLeftKnob = new BBitmap(BRect(0, 0, 14, 11), B_CMAP8);
|
||||||
fLeftKnob->SetBits(kHorizontalKnobData, sizeof(kHorizontalKnobData), 0, B_CMAP8);
|
fLeftKnob->SetBits(kHorizontalKnobData, sizeof(kHorizontalKnobData), 0, B_CMAP8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -641,8 +657,7 @@ BChannelSlider::DrawThumbs()
|
||||||
{
|
{
|
||||||
if (fBacking == NULL) {
|
if (fBacking == NULL) {
|
||||||
// This is the idea: we build a bitmap by taking the coordinates
|
// This is the idea: we build a bitmap by taking the coordinates
|
||||||
// of the first and last thumb frames (top/left and bottom/right),
|
// of the first and last thumb frames (top/left and bottom/right)
|
||||||
// and by enlarging this rectangle a bit (hence the "InsetBy(-3, -3)").
|
|
||||||
BRect first = ThumbFrameFor(0);
|
BRect first = ThumbFrameFor(0);
|
||||||
BRect last = ThumbFrameFor(CountChannels() - 1);
|
BRect last = ThumbFrameFor(CountChannels() - 1);
|
||||||
BRect bitmapFrame(first.LeftTop(), last.RightBottom());
|
BRect bitmapFrame(first.LeftTop(), last.RightBottom());
|
||||||
|
@ -652,15 +667,20 @@ BChannelSlider::DrawThumbs()
|
||||||
else
|
else
|
||||||
bitmapFrame.right += ThumbRangeFor(0);
|
bitmapFrame.right += ThumbRangeFor(0);
|
||||||
|
|
||||||
bitmapFrame.InsetBy(-3, -3);
|
fBacking = new BBitmap(bitmapFrame,
|
||||||
fBacking = new BBitmap(bitmapFrame, BScreen(Window()).ColorSpace(), true, false);
|
#ifdef __HAIKU__
|
||||||
|
BScreen(Window()).ColorSpace(),
|
||||||
|
#else
|
||||||
|
B_RGB32,
|
||||||
|
#endif
|
||||||
|
true, false);
|
||||||
if (fBacking->Lock()) {
|
if (fBacking->Lock()) {
|
||||||
fBackingView = new BView(bitmapFrame.OffsetToCopy(B_ORIGIN), "backing view", B_FOLLOW_NONE, B_WILL_DRAW);
|
fBackingView = new BView(bitmapFrame.OffsetToCopy(B_ORIGIN), "backing view", B_FOLLOW_NONE, B_WILL_DRAW);
|
||||||
fBacking->AddChild(fBackingView);
|
fBacking->AddChild(fBackingView);
|
||||||
fBackingView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
fBackingView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||||
fBackingView->SetLowColor(fBackingView->ViewColor());
|
fBackingView->SetLowColor(fBackingView->ViewColor());
|
||||||
fBacking->Unlock();
|
fBacking->Unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BPoint drawHere;
|
BPoint drawHere;
|
||||||
|
|
Loading…
Reference in New Issue