130
132
new BMessage(MSG_SKIP_FORWARD));
131
133
AddChild( fSkipForward );
134
fForward = new TransportButton(frame, B_EMPTY_STRING,
136
kPressedForwardBitmapBits,
137
kDisabledForwardBitmapBits,
138
new BMessage(MSG_FORWARD));
139
// AddChild( fForward );
136
fForward = new TransportButton(frame, B_EMPTY_STRING,
138
kPressedForwardBitmapBits,
139
kDisabledForwardBitmapBits,
140
new BMessage(MSG_FORWARD));
141
// AddChild( fForward );
142
fRewind = new TransportButton(frame, B_EMPTY_STRING,
144
kPressedRewindBitmapBits,
145
kDisabledRewindBitmapBits,
146
new BMessage(MSG_REWIND));
147
// AddChild( fRewind );
144
fRewind = new TransportButton(frame, B_EMPTY_STRING,
146
kPressedRewindBitmapBits,
147
kDisabledRewindBitmapBits,
148
new BMessage(MSG_REWIND));
149
// AddChild( fRewind );
150
152
frame.SetRightBottom(kStopButtonSize);
151
if (fBottomControlHeight < kStopBitmapHeight - 1.0)
152
fBottomControlHeight = kStopBitmapHeight - 1.0;
153
if (fBottomControlHeight < kStopBitmapHeight - 1.0)
154
fBottomControlHeight = kStopBitmapHeight - 1.0;
153
155
fStop = new TransportButton(frame, B_EMPTY_STRING,
154
156
kStopButtonBitmapBits,
155
157
kPressedStopButtonBitmapBits,
156
158
kDisabledStopButtonBitmapBits,
157
159
new BMessage(STOP_PLAYBACK));
161
163
frame.SetRightBottom(kSpeakerButtonSize);
162
if (fBottomControlHeight < kSpeakerIconBitmapHeight - 1.0)
163
fBottomControlHeight = kSpeakerIconBitmapHeight - 1.0;
164
if (fBottomControlHeight < kSpeakerIconBitmapHeight - 1.0)
165
fBottomControlHeight = kSpeakerIconBitmapHeight - 1.0;
164
166
fMute = new TransportButton(frame, B_EMPTY_STRING,
165
167
kSpeakerIconBits,
166
168
kPressedSpeakerIconBits,
167
169
kSpeakerIconBits,
168
170
new BMessage(VOLUME_MUTE));
173
fVolumeSlider = new VolumeSlider(BRect(0.0, 0.0, VOLUME_MIN_WIDTH,
174
kVolumeSliderBitmapHeight - 1.0),
175
"volume slider", 1, AOUT_VOLUME_MAX,
176
new BMessage(VOLUME_CHG));
177
fVolumeSlider->SetValue( config_GetInt( p_intf, "volume" ) );
178
AddChild( fVolumeSlider );
180
// Position Info View
175
fVolumeSlider = new VolumeSlider(BRect(0.0, 0.0, VOLUME_MIN_WIDTH,
176
kVolumeSliderBitmapHeight - 1.0),
177
"volume slider", 1, AOUT_VOLUME_MAX,
178
new BMessage(VOLUME_CHG));
179
fVolumeSlider->SetValue( config_GetInt( p_intf, "volume" ) );
180
AddChild( fVolumeSlider );
182
// Position Info View
181
183
fPositionInfo = new PositionInfoView(BRect(0.0, 0.0, 10.0, 10.0), "led",
183
185
fPositionInfo->ResizeToPreferred();
194
196
MediaControlView::AttachedToWindow()
196
// we are now a valid BHandler
197
fRewind->SetTarget(this);
198
fForward->SetTarget(this);
199
fSkipBack->SetTarget(this);
200
fSkipForward->SetTarget(this);
201
fVolumeSlider->SetTarget(Window());
203
BRect r(_MinFrame());
204
if (BMenuBar* menuBar = Window()->KeyMenuBar()) {
206
menuBar->GetPreferredSize(&width, &height);
207
// r.bottom += menuBar->Bounds().Height();
209
// see that our calculated minimal width is not smaller than what
210
// the menubar can be
216
Window()->SetSizeLimits(r.Width(), r.Width() * 1.8, r.Height(), r.Height() * 1.3);
217
if (!Window()->Bounds().Contains(r))
218
Window()->ResizeTo(r.Width(), r.Height());
220
FrameResized(Bounds().Width(), Bounds().Height());
222
// get pulse message every two frames
223
Window()->SetPulseRate(80000);
198
// we are now a valid BHandler
199
fRewind->SetTarget(this);
200
fForward->SetTarget(this);
201
fSkipBack->SetTarget(this);
202
fSkipForward->SetTarget(this);
203
fVolumeSlider->SetTarget(Window());
205
BRect r(_MinFrame());
206
if (BMenuBar* menuBar = Window()->KeyMenuBar()) {
208
menuBar->GetPreferredSize(&width, &height);
209
// r.bottom += menuBar->Bounds().Height();
211
// see that our calculated minimal width is not smaller than what
212
// the menubar can be
218
Window()->SetSizeLimits(r.Width(), r.Width() * 1.8, r.Height(), r.Height() * 1.3);
219
if (!Window()->Bounds().Contains(r))
220
Window()->ResizeTo(r.Width(), r.Height());
222
FrameResized(Bounds().Width(), Bounds().Height());
224
// get pulse message every two frames
225
Window()->SetPulseRate(80000);
228
230
MediaControlView::FrameResized(float width, float height)
231
// make sure we don't leave dirty pixels
232
// (B_FULL_UPDATE_ON_RESIZE == annoying flicker -> this is smarter)
233
if (fOldBounds.Width() < r.Width())
234
Invalidate(BRect(fOldBounds.right, fOldBounds.top + 1.0,
235
fOldBounds.right, fOldBounds.bottom - 1.0));
237
Invalidate(BRect(r.right, r.top + 1.0,
238
r.right, r.bottom - 1.0));
239
if (fOldBounds.Height() < r.Height())
240
Invalidate(BRect(fOldBounds.left + 1.0, fOldBounds.bottom,
241
fOldBounds.right - 1.0, fOldBounds.bottom));
243
Invalidate(BRect(r.left + 1.0, r.bottom,
244
r.right - 1.0, r.bottom));
245
// remember for next time
248
r.InsetBy(BORDER_INSET, BORDER_INSET);
233
// make sure we don't leave dirty pixels
234
// (B_FULL_UPDATE_ON_RESIZE == annoying flicker -> this is smarter)
235
if (fOldBounds.Width() < r.Width())
236
Invalidate(BRect(fOldBounds.right, fOldBounds.top + 1.0,
237
fOldBounds.right, fOldBounds.bottom - 1.0));
239
Invalidate(BRect(r.right, r.top + 1.0,
240
r.right, r.bottom - 1.0));
241
if (fOldBounds.Height() < r.Height())
242
Invalidate(BRect(fOldBounds.left + 1.0, fOldBounds.bottom,
243
fOldBounds.right - 1.0, fOldBounds.bottom));
245
Invalidate(BRect(r.left + 1.0, r.bottom,
246
r.right - 1.0, r.bottom));
247
// remember for next time
250
r.InsetBy(BORDER_INSET, BORDER_INSET);
252
254
// GetPreferredSize
254
256
MediaControlView::GetPreferredSize(float* width, float* height)
258
BRect r(_MinFrame());
260
*height = r.Height();
260
BRect r(_MinFrame());
262
*height = r.Height();
264
266
// MessageReceived
266
268
MediaControlView::MessageReceived(BMessage* message)
268
switch (message->what)
274
case MSG_SKIP_BACKWARDS:
275
Window()->PostMessage(NAVIGATE_PREV);
277
case MSG_SKIP_FORWARD:
278
Window()->PostMessage(NAVIGATE_NEXT);
281
BBox::MessageReceived(message);
270
switch (message->what)
276
case MSG_SKIP_BACKWARDS:
277
Window()->PostMessage(NAVIGATE_PREV);
279
case MSG_SKIP_FORWARD:
280
Window()->PostMessage(NAVIGATE_NEXT);
283
BBox::MessageReceived(message);
288
290
MediaControlView::Pulse()
290
InterfaceWindow* window = dynamic_cast<InterfaceWindow*>(Window());
291
if (window && window->IsStopped())
292
fPlayPause->SetStopped();
292
InterfaceWindow* window = dynamic_cast<InterfaceWindow*>(Window());
293
if (window && window->IsStopped())
294
fPlayPause->SetStopped();
294
296
unsigned short i_volume;
295
297
aout_VolumeGet( p_intf, (audio_volume_t*)&i_volume );
342
346
/* do not redraw if it is not necessary */
348
fSkipBack->SetEnabled( enabled );
349
fPlayPause->SetEnabled( enabled );
350
fSkipForward->SetEnabled( enabled );
351
fStop->SetEnabled( enabled );
352
fMute->SetEnabled( enabled );
353
fVolumeSlider->SetEnabled( enabled );
354
fSeekSlider->SetEnabled( enabled );
355
fRewind->SetEnabled( enabled );
356
fForward->SetEnabled( enabled );
358
fIsEnabled = enabled;
352
fSkipBack->SetEnabled( enabled );
353
fPlayPause->SetEnabled( enabled );
354
fSkipForward->SetEnabled( enabled );
355
fStop->SetEnabled( enabled );
356
fMute->SetEnabled( enabled );
357
fVolumeSlider->SetEnabled( enabled );
358
fSeekSlider->SetEnabled( enabled );
359
fRewind->SetEnabled( enabled );
360
fForward->SetEnabled( enabled );
362
fIsEnabled = enabled;
362
366
// SetAudioEnabled
364
368
MediaControlView::SetAudioEnabled(bool enabled)
366
fMute->SetEnabled(enabled);
367
fVolumeSlider->SetEnabled(enabled);
370
fMute->SetEnabled(enabled);
371
fVolumeSlider->SetEnabled(enabled);
372
376
MediaControlView::GetVolume() const
374
return fVolumeSlider->Value();
378
return fVolumeSlider->Value();
379
383
MediaControlView::SetSkippable(bool backward, bool forward)
381
fSkipBack->SetEnabled(backward);
382
fSkipForward->SetEnabled(forward);
385
fSkipBack->SetEnabled(backward);
386
fSkipForward->SetEnabled(forward);
387
391
MediaControlView::SetMuted(bool mute)
389
fVolumeSlider->SetMuted(mute);
393
fVolumeSlider->SetMuted(mute);
392
396
// _LayoutControls
394
398
MediaControlView::_LayoutControls(BRect frame) const
398
// calculate absolutly minimal width
399
float minWidth = fSkipBack->Bounds().Width();
400
// minWidth += fRewind->Bounds().Width();
401
minWidth += fStop->Bounds().Width();
402
minWidth += fPlayPause->Bounds().Width();
403
// minWidth += fForward->Bounds().Width();
404
minWidth += fSkipForward->Bounds().Width();
405
minWidth += fMute->Bounds().Width();
406
minWidth += VOLUME_MIN_WIDTH;
408
// layout time slider and info view
402
// calculate absolutly minimal width
403
float minWidth = fSkipBack->Bounds().Width();
404
// minWidth += fRewind->Bounds().Width();
405
minWidth += fStop->Bounds().Width();
406
minWidth += fPlayPause->Bounds().Width();
407
// minWidth += fForward->Bounds().Width();
408
minWidth += fSkipForward->Bounds().Width();
409
minWidth += fMute->Bounds().Width();
410
minWidth += VOLUME_MIN_WIDTH;
412
// layout time slider and info view
409
413
float width, height;
410
414
fPositionInfo->GetBigPreferredSize( &width, &height );
411
415
float ratio = width / height;
435
439
r.right = frame.right;
436
440
_LayoutControl(fSeekSlider, r, true);
438
float currentWidth = frame.Width();
439
float space = (currentWidth - minWidth) / 6.0;//8.0;
441
space = MIN_SPACE + (space - MIN_SPACE) / VOLUME_SLIDER_LAYOUT_WEIGHT;
442
// layout controls with "space" inbetween
444
r.top = r.bottom + MIN_SPACE + 1.0;
445
r.bottom = frame.bottom;
447
r.right = r.left + fSkipBack->Bounds().Width();
448
_LayoutControl(fSkipBack, r);
450
// r.left = r.right + space;
451
// r.right = r.left + fRewind->Bounds().Width();
452
// _LayoutControl(fRewind, r);
454
r.left = r.right + space;
455
r.right = r.left + fStop->Bounds().Width();
456
_LayoutControl(fStop, r);
458
r.left = r.right + space;
459
r.right = r.left + fPlayPause->Bounds().Width();
460
_LayoutControl(fPlayPause, r);
462
// r.left = r.right + space;
463
// r.right = r.left + fForward->Bounds().Width();
464
// _LayoutControl(fForward, r);
466
r.left = r.right + space;
467
r.right = r.left + fSkipForward->Bounds().Width();
468
_LayoutControl(fSkipForward, r);
470
r.left = r.right + space + space;
471
r.right = r.left + fMute->Bounds().Width();
472
_LayoutControl(fMute, r);
474
r.left = r.right + SPEAKER_SLIDER_DIST; // keep speaker icon and volume slider attached
475
r.right = frame.right;
476
_LayoutControl(fVolumeSlider, r, true);
442
float currentWidth = frame.Width();
443
float space = (currentWidth - minWidth) / 6.0;//8.0;
445
space = MIN_SPACE + (space - MIN_SPACE) / VOLUME_SLIDER_LAYOUT_WEIGHT;
446
// layout controls with "space" inbetween
448
r.top = r.bottom + MIN_SPACE + 1.0;
449
r.bottom = frame.bottom;
451
r.right = r.left + fSkipBack->Bounds().Width();
452
_LayoutControl(fSkipBack, r);
454
// r.left = r.right + space;
455
// r.right = r.left + fRewind->Bounds().Width();
456
// _LayoutControl(fRewind, r);
458
r.left = r.right + space;
459
r.right = r.left + fStop->Bounds().Width();
460
_LayoutControl(fStop, r);
462
r.left = r.right + space;
463
r.right = r.left + fPlayPause->Bounds().Width();
464
_LayoutControl(fPlayPause, r);
466
// r.left = r.right + space;
467
// r.right = r.left + fForward->Bounds().Width();
468
// _LayoutControl(fForward, r);
470
r.left = r.right + space;
471
r.right = r.left + fSkipForward->Bounds().Width();
472
_LayoutControl(fSkipForward, r);
474
r.left = r.right + space + space;
475
r.right = r.left + fMute->Bounds().Width();
476
_LayoutControl(fMute, r);
478
r.left = r.right + SPEAKER_SLIDER_DIST; // keep speaker icon and volume slider attached
479
r.right = frame.right;
480
_LayoutControl(fVolumeSlider, r, true);
481
485
MediaControlView::_MinFrame() const
483
// add up width of controls along bottom (seek slider will likely adopt)
484
float minWidth = 2 * BORDER_INSET;
485
minWidth += fSkipBack->Bounds().Width() + MIN_SPACE;
486
// minWidth += fRewind->Bounds().Width() + MIN_SPACE;
487
minWidth += fStop->Bounds().Width() + MIN_SPACE;
488
minWidth += fPlayPause->Bounds().Width() + MIN_SPACE;
489
// minWidth += fForward->Bounds().Width() + MIN_SPACE;
490
minWidth += fSkipForward->Bounds().Width() + MIN_SPACE + MIN_SPACE;
491
minWidth += fMute->Bounds().Width() + SPEAKER_SLIDER_DIST;
492
minWidth += VOLUME_MIN_WIDTH;
487
// add up width of controls along bottom (seek slider will likely adopt)
488
float minWidth = 2 * BORDER_INSET;
489
minWidth += fSkipBack->Bounds().Width() + MIN_SPACE;
490
// minWidth += fRewind->Bounds().Width() + MIN_SPACE;
491
minWidth += fStop->Bounds().Width() + MIN_SPACE;
492
minWidth += fPlayPause->Bounds().Width() + MIN_SPACE;
493
// minWidth += fForward->Bounds().Width() + MIN_SPACE;
494
minWidth += fSkipForward->Bounds().Width() + MIN_SPACE + MIN_SPACE;
495
minWidth += fMute->Bounds().Width() + SPEAKER_SLIDER_DIST;
496
minWidth += VOLUME_MIN_WIDTH;
494
// add up height of seek slider and heighest control on bottom
495
float minHeight = 2 * BORDER_INSET;
496
minHeight += fSeekSlider->Bounds().Height() + MIN_SPACE + MIN_SPACE / 2.0;
497
minHeight += fBottomControlHeight;
498
return BRect(0.0, 0.0, minWidth - 1.0, minHeight - 1.0);
498
// add up height of seek slider and heighest control on bottom
499
float minHeight = 2 * BORDER_INSET;
500
minHeight += fSeekSlider->Bounds().Height() + MIN_SPACE + MIN_SPACE / 2.0;
501
minHeight += fBottomControlHeight;
502
return BRect(0.0, 0.0, minWidth - 1.0, minHeight - 1.0);
501
505
// _LayoutControl
555
559
SeekSlider::Draw(BRect updateRect)
558
float knobWidth2 = SEEK_SLIDER_KNOB_WIDTH / 2.0;
559
float sliderStart = (r.left + knobWidth2);
560
float sliderEnd = (r.right - knobWidth2);
561
float knobPos = sliderStart
562
+ floorf((sliderEnd - sliderStart - 1.0) * Value()
564
// draw both sides (the original from Be doesn't seem
565
// to make a difference for enabled/disabled state)
566
// DrawBitmapAsync(fLeftSideBits, r.LeftTop());
567
// DrawBitmapAsync(fRightSideBits, BPoint(sliderEnd + 1.0, r.top));
568
// colors for the slider area between the two bitmaps
569
rgb_color background = kBackground;//ui_color(B_PANEL_BACKGROUND_COLOR);
570
rgb_color shadow = tint_color(background, B_DARKEN_2_TINT);
571
rgb_color softShadow = tint_color(background, B_DARKEN_1_TINT);
572
rgb_color darkShadow = tint_color(background, B_DARKEN_4_TINT);
573
rgb_color midShadow = tint_color(background, B_DARKEN_3_TINT);
574
rgb_color light = tint_color(background, B_LIGHTEN_MAX_TINT);
575
rgb_color softLight = tint_color(background, B_LIGHTEN_1_TINT);
576
rgb_color green = kSeekGreen;
577
rgb_color greenShadow = kSeekGreenShadow;
578
rgb_color black = kBlack;
579
rgb_color dotGrey = midShadow;
580
rgb_color dotGreen = greenShadow;
582
_StrokeFrame(r, softShadow, softShadow, softLight, softLight);
584
_StrokeFrame(r, black, black, light, light);
589
_StrokeFrame(r, greenShadow, greenShadow, green, green);
592
_StrokeFrame(r, greenShadow, greenShadow, green, green);
598
int32 dotCount = (int32)(r.Width() / 6.0);
600
dotPos.y = r.top + 2.0;
601
SetHighColor(dotGreen);
602
for (int32 i = 0; i < dotCount; i++)
604
dotPos.x = sliderStart + i * 6.0 + 5.0;
605
StrokeLine(dotPos, BPoint(dotPos.x, dotPos.y + 6.0));
610
r.left = knobPos - knobWidth2;
611
r.right = knobPos + knobWidth2;
613
float handleBottomSize = 2.0;
614
float handleArrowSize = 6.0;
617
AddLine(BPoint(r.left, r.top + handleBottomSize),
618
BPoint(r.left, r.top), black);
619
AddLine(BPoint(r.left + 1.0, r.top),
620
BPoint(r.right, r.top), black);
621
AddLine(BPoint(r.right, r.top + 1.0),
622
BPoint(r.right, r.top + handleBottomSize), black);
623
AddLine(BPoint(r.right - 1.0, r.top + handleBottomSize + 1.0),
624
BPoint(knobPos, r.top + handleArrowSize), black);
625
AddLine(BPoint(knobPos - 1.0, r.top + handleArrowSize - 1.0),
626
BPoint(r.left + 1.0, r.top + handleBottomSize + 1.0), black);
628
AddLine(BPoint(r.left, r.bottom),
629
BPoint(r.left, r.bottom - handleBottomSize), black);
630
AddLine(BPoint(r.left + 1.0, r.bottom - handleBottomSize - 1.0),
631
BPoint(knobPos, r.bottom - handleArrowSize), black);
632
AddLine(BPoint(knobPos + 1.0, r.bottom - handleArrowSize + 1.0),
633
BPoint(r.right, r.bottom - handleBottomSize), black);
634
AddLine(BPoint(r.right, r.bottom - handleBottomSize + 1.0),
635
BPoint(r.right, r.bottom), black);
636
AddLine(BPoint(r.right - 1.0, r.bottom),
637
BPoint(r.left + 1.0, r.bottom), black);
639
// inner red light and shadow lines
642
handleArrowSize -= 2.0;
645
AddLine(BPoint(r.left, r.top + handleBottomSize),
646
BPoint(r.left, r.top), kSeekRedLight);
647
AddLine(BPoint(r.left + 1.0, r.top),
648
BPoint(r.right, r.top), kSeekRedLight);
649
AddLine(BPoint(r.right, r.top + 1.0),
650
BPoint(r.right, r.top + handleBottomSize), kSeekRedShadow);
651
AddLine(BPoint(r.right - 1.0, r.top + handleBottomSize + 1.0),
652
BPoint(knobPos, r.top + handleArrowSize), kSeekRedShadow);
653
AddLine(BPoint(knobPos - 1.0, r.top + handleArrowSize - 1.0),
654
BPoint(r.left + 1.0, r.top + handleBottomSize + 1.0), kSeekRedLight);
656
AddLine(BPoint(r.left, r.bottom),
657
BPoint(r.left, r.bottom - handleBottomSize), kSeekRedLight);
658
AddLine(BPoint(r.left + 1.0, r.bottom - handleBottomSize - 1.0),
659
BPoint(knobPos, r.bottom - handleArrowSize), kSeekRedLight);
660
AddLine(BPoint(knobPos + 1.0, r.bottom - handleArrowSize + 1.0),
661
BPoint(r.right, r.bottom - handleBottomSize), kSeekRedShadow);
662
AddLine(BPoint(r.right, r.bottom - handleBottomSize + 1.0),
663
BPoint(r.right, r.bottom), kSeekRedShadow);
664
AddLine(BPoint(r.right - 1.0, r.bottom),
665
BPoint(r.left + 1.0, r.bottom), kSeekRedShadow);
667
// fill rest of handles with red
668
SetHighColor(kSeekRed);
670
handleArrowSize -= 2.0;
672
// upper handle arrow
675
arrow[1].x = r.right;
677
arrow[2].x = knobPos;
678
arrow[2].y = r.top + handleArrowSize;
679
FillPolygon(arrow, 3);
680
// lower handle arrow
682
arrow[0].y = r.bottom;
683
arrow[1].x = r.right;
684
arrow[1].y = r.bottom;
685
arrow[2].x = knobPos;
686
arrow[2].y = r.bottom - handleArrowSize;
687
FillPolygon(arrow, 3);
692
_StrokeFrame(r, darkShadow, darkShadow, darkShadow, darkShadow);
694
_StrokeFrame(r, darkShadow, darkShadow, darkShadow, darkShadow);
696
SetHighColor(darkShadow);
699
float width = floorf(StringWidth(DISABLED_SEEK_MESSAGE));
700
float textPos = r.left + r.Width() / 2.0 - width / 2.0;
701
pattern stripes = {{ 0xc7, 0x8f, 0x1f, 0x3e, 0x7c, 0xf8, 0xf1, 0xe3 }};
702
BRect stripesRect(r);
703
stripesRect.right = textPos - 5.0;
704
FillRect(stripesRect, stripes);
705
stripesRect.left = textPos + width + 3.0;
706
stripesRect.right = r.right;
707
FillRect(stripesRect, stripes);
709
r.left = textPos - 4.0;
710
r.right = textPos + width + 2.0;
712
SetHighColor(shadow);
713
SetLowColor(darkShadow);
716
DrawString(DISABLED_SEEK_MESSAGE, BPoint(textPos, r.top + ceilf(fh.ascent) - 1.0));
562
float knobWidth2 = SEEK_SLIDER_KNOB_WIDTH / 2.0;
563
float sliderStart = (r.left + knobWidth2);
564
float sliderEnd = (r.right - knobWidth2);
565
float knobPos = sliderStart
566
+ floorf((sliderEnd - sliderStart - 1.0) * Value()
568
// draw both sides (the original from Be doesn't seem
569
// to make a difference for enabled/disabled state)
570
// DrawBitmapAsync(fLeftSideBits, r.LeftTop());
571
// DrawBitmapAsync(fRightSideBits, BPoint(sliderEnd + 1.0, r.top));
572
// colors for the slider area between the two bitmaps
573
rgb_color background = kBackground;//ui_color(B_PANEL_BACKGROUND_COLOR);
574
rgb_color shadow = tint_color(background, B_DARKEN_2_TINT);
575
rgb_color softShadow = tint_color(background, B_DARKEN_1_TINT);
576
rgb_color darkShadow = tint_color(background, B_DARKEN_4_TINT);
577
rgb_color midShadow = tint_color(background, B_DARKEN_3_TINT);
578
rgb_color light = tint_color(background, B_LIGHTEN_MAX_TINT);
579
rgb_color softLight = tint_color(background, B_LIGHTEN_1_TINT);
580
rgb_color green = kSeekGreen;
581
rgb_color greenShadow = kSeekGreenShadow;
582
rgb_color black = kBlack;
583
rgb_color dotGrey = midShadow;
584
rgb_color dotGreen = greenShadow;
586
_StrokeFrame(r, softShadow, softShadow, softLight, softLight);
588
_StrokeFrame(r, black, black, light, light);
593
_StrokeFrame(r, greenShadow, greenShadow, green, green);
596
_StrokeFrame(r, greenShadow, greenShadow, green, green);
602
int32 dotCount = (int32)(r.Width() / 6.0);
604
dotPos.y = r.top + 2.0;
605
SetHighColor(dotGreen);
606
for (int32 i = 0; i < dotCount; i++)
608
dotPos.x = sliderStart + i * 6.0 + 5.0;
609
StrokeLine(dotPos, BPoint(dotPos.x, dotPos.y + 6.0));
614
r.left = knobPos - knobWidth2;
615
r.right = knobPos + knobWidth2;
617
float handleBottomSize = 2.0;
618
float handleArrowSize = 6.0;
621
AddLine(BPoint(r.left, r.top + handleBottomSize),
622
BPoint(r.left, r.top), black);
623
AddLine(BPoint(r.left + 1.0, r.top),
624
BPoint(r.right, r.top), black);
625
AddLine(BPoint(r.right, r.top + 1.0),
626
BPoint(r.right, r.top + handleBottomSize), black);
627
AddLine(BPoint(r.right - 1.0, r.top + handleBottomSize + 1.0),
628
BPoint(knobPos, r.top + handleArrowSize), black);
629
AddLine(BPoint(knobPos - 1.0, r.top + handleArrowSize - 1.0),
630
BPoint(r.left + 1.0, r.top + handleBottomSize + 1.0), black);
632
AddLine(BPoint(r.left, r.bottom),
633
BPoint(r.left, r.bottom - handleBottomSize), black);
634
AddLine(BPoint(r.left + 1.0, r.bottom - handleBottomSize - 1.0),
635
BPoint(knobPos, r.bottom - handleArrowSize), black);
636
AddLine(BPoint(knobPos + 1.0, r.bottom - handleArrowSize + 1.0),
637
BPoint(r.right, r.bottom - handleBottomSize), black);
638
AddLine(BPoint(r.right, r.bottom - handleBottomSize + 1.0),
639
BPoint(r.right, r.bottom), black);
640
AddLine(BPoint(r.right - 1.0, r.bottom),
641
BPoint(r.left + 1.0, r.bottom), black);
643
// inner red light and shadow lines
646
handleArrowSize -= 2.0;
649
AddLine(BPoint(r.left, r.top + handleBottomSize),
650
BPoint(r.left, r.top), kSeekRedLight);
651
AddLine(BPoint(r.left + 1.0, r.top),
652
BPoint(r.right, r.top), kSeekRedLight);
653
AddLine(BPoint(r.right, r.top + 1.0),
654
BPoint(r.right, r.top + handleBottomSize), kSeekRedShadow);
655
AddLine(BPoint(r.right - 1.0, r.top + handleBottomSize + 1.0),
656
BPoint(knobPos, r.top + handleArrowSize), kSeekRedShadow);
657
AddLine(BPoint(knobPos - 1.0, r.top + handleArrowSize - 1.0),
658
BPoint(r.left + 1.0, r.top + handleBottomSize + 1.0), kSeekRedLight);
660
AddLine(BPoint(r.left, r.bottom),
661
BPoint(r.left, r.bottom - handleBottomSize), kSeekRedLight);
662
AddLine(BPoint(r.left + 1.0, r.bottom - handleBottomSize - 1.0),
663
BPoint(knobPos, r.bottom - handleArrowSize), kSeekRedLight);
664
AddLine(BPoint(knobPos + 1.0, r.bottom - handleArrowSize + 1.0),
665
BPoint(r.right, r.bottom - handleBottomSize), kSeekRedShadow);
666
AddLine(BPoint(r.right, r.bottom - handleBottomSize + 1.0),
667
BPoint(r.right, r.bottom), kSeekRedShadow);
668
AddLine(BPoint(r.right - 1.0, r.bottom),
669
BPoint(r.left + 1.0, r.bottom), kSeekRedShadow);
671
// fill rest of handles with red
672
SetHighColor(kSeekRed);
674
handleArrowSize -= 2.0;
676
// upper handle arrow
679
arrow[1].x = r.right;
681
arrow[2].x = knobPos;
682
arrow[2].y = r.top + handleArrowSize;
683
FillPolygon(arrow, 3);
684
// lower handle arrow
686
arrow[0].y = r.bottom;
687
arrow[1].x = r.right;
688
arrow[1].y = r.bottom;
689
arrow[2].x = knobPos;
690
arrow[2].y = r.bottom - handleArrowSize;
691
FillPolygon(arrow, 3);
696
_StrokeFrame(r, darkShadow, darkShadow, darkShadow, darkShadow);
698
_StrokeFrame(r, darkShadow, darkShadow, darkShadow, darkShadow);
700
SetHighColor(darkShadow);
703
float width = floorf(StringWidth(DISABLED_SEEK_MESSAGE));
704
float textPos = r.left + r.Width() / 2.0 - width / 2.0;
705
pattern stripes = {{ 0xc7, 0x8f, 0x1f, 0x3e, 0x7c, 0xf8, 0xf1, 0xe3 }};
706
BRect stripesRect(r);
707
stripesRect.right = textPos - 5.0;
708
FillRect(stripesRect, stripes);
709
stripesRect.left = textPos + width + 3.0;
710
stripesRect.right = r.right;
711
FillRect(stripesRect, stripes);
713
r.left = textPos - 4.0;
714
r.right = textPos + width + 2.0;
716
SetHighColor(shadow);
717
SetLowColor(darkShadow);
720
DrawString(DISABLED_SEEK_MESSAGE, BPoint(textPos, r.top + ceilf(fh.ascent) - 1.0));
720
724
/*****************************************************************************
815
819
*****************************************************************************/
817
821
SeekSlider::_StrokeFrame(BRect r, rgb_color left, rgb_color top,
818
rgb_color right, rgb_color bottom)
822
rgb_color right, rgb_color bottom)
821
AddLine(BPoint(r.left, r.bottom), BPoint(r.left, r.top), left);
822
AddLine(BPoint(r.left + 1.0, r.top), BPoint(r.right, r.top), top);
823
AddLine(BPoint(r.right, r.top + 1.0), BPoint(r.right, r.bottom), right);
824
AddLine(BPoint(r.right - 1.0, r.bottom), BPoint(r.left + 1.0, r.bottom), bottom);
825
AddLine(BPoint(r.left, r.bottom), BPoint(r.left, r.top), left);
826
AddLine(BPoint(r.left + 1.0, r.top), BPoint(r.right, r.top), top);
827
AddLine(BPoint(r.right, r.top + 1.0), BPoint(r.right, r.bottom), right);
828
AddLine(BPoint(r.right - 1.0, r.bottom), BPoint(r.left + 1.0, r.bottom), bottom);
828
832
/*****************************************************************************
830
834
*****************************************************************************/
831
835
VolumeSlider::VolumeSlider(BRect frame, const char* name, int32 minValue, int32 maxValue,
832
BMessage* message, BHandler* target)
833
: BControl(frame, name, NULL, message, B_FOLLOW_NONE,
834
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE),
836
fRightSideBits(NULL),
836
BMessage* message, BHandler* target)
837
: BControl(frame, name, NULL, message, B_FOLLOW_NONE,
838
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE),
840
fRightSideBits(NULL),
846
BRect r(BPoint(0.0, 0.0), kVolumeSliderBitmapSize);
847
fLeftSideBits = new BBitmap(r, B_CMAP8);
848
fRightSideBits = new BBitmap(r, B_CMAP8);
849
r.Set(0.0, 0.0, kVolumeSliderKnobBitmapSize.x, kVolumeSliderKnobBitmapSize.y);
850
fKnobBits = new BBitmap(r, B_CMAP8);
850
BRect r(BPoint(0.0, 0.0), kVolumeSliderBitmapSize);
851
fLeftSideBits = new BBitmap(r, B_CMAP8);
852
fRightSideBits = new BBitmap(r, B_CMAP8);
853
r.Set(0.0, 0.0, kVolumeSliderKnobBitmapSize.x, kVolumeSliderKnobBitmapSize.y);
854
fKnobBits = new BBitmap(r, B_CMAP8);
855
859
/*****************************************************************************
906
910
VolumeSlider::Draw(BRect updateRect)
911
float sliderSideWidth = kVolumeSliderBitmapWidth;
912
float sliderStart = (r.left + sliderSideWidth);
913
float sliderEnd = (r.right - sliderSideWidth);
914
float knobPos = sliderStart
915
+ (sliderEnd - sliderStart - 1.0) * (Value() - fMinValue)
916
/ (fMaxValue - fMinValue);
917
// draw both sides (the original from Be doesn't seem
918
// to make a difference for enabled/disabled state)
919
DrawBitmapAsync(fLeftSideBits, r.LeftTop());
920
DrawBitmapAsync(fRightSideBits, BPoint(sliderEnd + 1.0, r.top));
921
// colors for the slider area between the two bitmaps
922
rgb_color background = kBackground;//ui_color(B_PANEL_BACKGROUND_COLOR);
923
rgb_color shadow = tint_color(background, B_DARKEN_2_TINT);
924
rgb_color softShadow = tint_color(background, B_DARKEN_1_TINT);
925
rgb_color darkShadow = tint_color(background, B_DARKEN_4_TINT);
926
rgb_color midShadow = tint_color(background, B_DARKEN_3_TINT);
927
rgb_color light = tint_color(background, B_LIGHTEN_MAX_TINT);
928
rgb_color softLight = tint_color(background, B_LIGHTEN_1_TINT);
929
rgb_color green = kGreen;
930
rgb_color greenShadow = kGreenShadow;
931
rgb_color black = kBlack;
932
rgb_color dotGrey = midShadow;
933
rgb_color dotGreen = greenShadow;
934
// make dimmed version of colors if we're disabled
937
shadow = (rgb_color){ 200, 200, 200, 255 };
938
softShadow = dimmed_color_cmap8(softShadow, background, DIM_LEVEL);
939
darkShadow = dimmed_color_cmap8(darkShadow, background, DIM_LEVEL);
941
light = dimmed_color_cmap8(light, background, DIM_LEVEL);
942
softLight = dimmed_color_cmap8(softLight, background, DIM_LEVEL);
943
green = dimmed_color_cmap8(green, background, DIM_LEVEL);
944
greenShadow = dimmed_color_cmap8(greenShadow, background, DIM_LEVEL);
945
black = dimmed_color_cmap8(black, background, DIM_LEVEL);
950
green = tint_color(kBackground, B_DARKEN_3_TINT);
951
greenShadow = tint_color(kBackground, B_DARKEN_4_TINT);
952
dotGreen = greenShadow;
954
// draw slider edges between bitmaps
956
AddLine(BPoint(sliderStart, r.top),
957
BPoint(sliderEnd, r.top), softShadow);
958
AddLine(BPoint(sliderStart, r.bottom),
959
BPoint(sliderEnd, r.bottom), softLight);
961
AddLine(BPoint(sliderStart, r.top),
962
BPoint(sliderEnd, r.top), black);
963
AddLine(BPoint(sliderStart, r.bottom),
964
BPoint(sliderEnd, r.bottom), light);
966
AddLine(BPoint(sliderStart, r.top),
967
BPoint(knobPos, r.top), greenShadow);
968
AddLine(BPoint(knobPos, r.top),
969
BPoint(sliderEnd, r.top), midShadow);
971
AddLine(BPoint(sliderStart, r.top),
972
BPoint(knobPos, r.top), greenShadow);
974
// fill rest inside of slider
976
r.left = sliderStart;
979
FillRect(r, B_SOLID_HIGH);
980
r.left = knobPos + 1.0;
983
SetHighColor(shadow);
984
FillRect(r, B_SOLID_HIGH);
985
// draw little dots inside
986
int32 dotCount = (int32)((sliderEnd - sliderStart) / 5.0);
988
dotPos.y = r.top + 4.0;
989
for (int32 i = 0; i < dotCount; i++)
991
dotPos.x = sliderStart + i * 5.0 + 4.0;
992
SetHighColor(dotPos.x < knobPos ? dotGreen : dotGrey);
993
StrokeLine(dotPos, BPoint(dotPos.x, dotPos.y + 1.0));
997
SetDrawingMode(B_OP_OVER); // part of knob is transparent
998
DrawBitmapAsync(fKnobBits, BPoint(knobPos - kVolumeSliderKnobWidth / 2, r.top));
915
float sliderSideWidth = kVolumeSliderBitmapWidth;
916
float sliderStart = (r.left + sliderSideWidth);
917
float sliderEnd = (r.right - sliderSideWidth);
918
float knobPos = sliderStart
919
+ (sliderEnd - sliderStart - 1.0) * (Value() - fMinValue)
920
/ (fMaxValue - fMinValue);
921
// draw both sides (the original from Be doesn't seem
922
// to make a difference for enabled/disabled state)
923
DrawBitmapAsync(fLeftSideBits, r.LeftTop());
924
DrawBitmapAsync(fRightSideBits, BPoint(sliderEnd + 1.0, r.top));
925
// colors for the slider area between the two bitmaps
926
rgb_color background = kBackground;//ui_color(B_PANEL_BACKGROUND_COLOR);
927
rgb_color shadow = tint_color(background, B_DARKEN_2_TINT);
928
rgb_color softShadow = tint_color(background, B_DARKEN_1_TINT);
929
rgb_color darkShadow = tint_color(background, B_DARKEN_4_TINT);
930
rgb_color midShadow = tint_color(background, B_DARKEN_3_TINT);
931
rgb_color light = tint_color(background, B_LIGHTEN_MAX_TINT);
932
rgb_color softLight = tint_color(background, B_LIGHTEN_1_TINT);
933
rgb_color green = kGreen;
934
rgb_color greenShadow = kGreenShadow;
935
rgb_color black = kBlack;
936
rgb_color dotGrey = midShadow;
937
rgb_color dotGreen = greenShadow;
938
// make dimmed version of colors if we're disabled
941
shadow = (rgb_color){ 200, 200, 200, 255 };
942
softShadow = dimmed_color_cmap8(softShadow, background, DIM_LEVEL);
943
darkShadow = dimmed_color_cmap8(darkShadow, background, DIM_LEVEL);
945
light = dimmed_color_cmap8(light, background, DIM_LEVEL);
946
softLight = dimmed_color_cmap8(softLight, background, DIM_LEVEL);
947
green = dimmed_color_cmap8(green, background, DIM_LEVEL);
948
greenShadow = dimmed_color_cmap8(greenShadow, background, DIM_LEVEL);
949
black = dimmed_color_cmap8(black, background, DIM_LEVEL);
954
green = tint_color(kBackground, B_DARKEN_3_TINT);
955
greenShadow = tint_color(kBackground, B_DARKEN_4_TINT);
956
dotGreen = greenShadow;
958
// draw slider edges between bitmaps
960
AddLine(BPoint(sliderStart, r.top),
961
BPoint(sliderEnd, r.top), softShadow);
962
AddLine(BPoint(sliderStart, r.bottom),
963
BPoint(sliderEnd, r.bottom), softLight);
965
AddLine(BPoint(sliderStart, r.top),
966
BPoint(sliderEnd, r.top), black);
967
AddLine(BPoint(sliderStart, r.bottom),
968
BPoint(sliderEnd, r.bottom), light);
970
AddLine(BPoint(sliderStart, r.top),
971
BPoint(knobPos, r.top), greenShadow);
972
AddLine(BPoint(knobPos, r.top),
973
BPoint(sliderEnd, r.top), midShadow);
975
AddLine(BPoint(sliderStart, r.top),
976
BPoint(knobPos, r.top), greenShadow);
978
// fill rest inside of slider
980
r.left = sliderStart;
983
FillRect(r, B_SOLID_HIGH);
984
r.left = knobPos + 1.0;
987
SetHighColor(shadow);
988
FillRect(r, B_SOLID_HIGH);
989
// draw little dots inside
990
int32 dotCount = (int32)((sliderEnd - sliderStart) / 5.0);
992
dotPos.y = r.top + 4.0;
993
for (int32 i = 0; i < dotCount; i++)
995
dotPos.x = sliderStart + i * 5.0 + 4.0;
996
SetHighColor(dotPos.x < knobPos ? dotGreen : dotGrey);
997
StrokeLine(dotPos, BPoint(dotPos.x, dotPos.y + 1.0));
1001
SetDrawingMode(B_OP_OVER); // part of knob is transparent
1002
DrawBitmapAsync(fKnobBits, BPoint(knobPos - kVolumeSliderKnobWidth / 2, r.top));
1002
1006
/*****************************************************************************
1065
1069
VolumeSlider::_MakeBitmaps()
1069
// left side of slider
1070
memcpy(fLeftSideBits->Bits(), kVolumeSliderLeftBitmapBits,
1071
fLeftSideBits->BitsLength());
1072
// right side of slider
1073
memcpy(fRightSideBits->Bits(), kVolumeSliderRightBits,
1074
fRightSideBits->BitsLength());
1076
int32 length = fKnobBits->BitsLength();
1077
memcpy(fKnobBits->Bits(), kVolumeSliderKnobBits, length);
1078
uint8* bits = (uint8*)fKnobBits->Bits();
1079
// black was used in the knob to represent transparency
1080
// use screen to get index for the "transarent" color used in the bitmap
1081
BScreen screen(B_MAIN_SCREEN_ID);
1082
uint8 blackIndex = screen.IndexForColor(kBlack);
1083
// replace black index with transparent index
1084
for (int32 i = 0; i < length; i++)
1085
if (bits[i] == blackIndex)
1086
bits[i] = B_TRANSPARENT_MAGIC_CMAP8;
1073
// left side of slider
1074
memcpy(fLeftSideBits->Bits(), kVolumeSliderLeftBitmapBits,
1075
fLeftSideBits->BitsLength());
1076
// right side of slider
1077
memcpy(fRightSideBits->Bits(), kVolumeSliderRightBits,
1078
fRightSideBits->BitsLength());
1080
int32 length = fKnobBits->BitsLength();
1081
memcpy(fKnobBits->Bits(), kVolumeSliderKnobBits, length);
1082
uint8* bits = (uint8*)fKnobBits->Bits();
1083
// black was used in the knob to represent transparency
1084
// use screen to get index for the "transarent" color used in the bitmap
1085
BScreen screen(B_MAIN_SCREEN_ID);
1086
uint8 blackIndex = screen.IndexForColor(kBlack);
1087
// replace black index with transparent index
1088
for (int32 i = 0; i < length; i++)
1089
if (bits[i] == blackIndex)
1090
bits[i] = B_TRANSPARENT_MAGIC_CMAP8;
1090
// make ghosted versions of the bitmaps
1091
dim_bitmap(fLeftSideBits, kBackground, DIM_LEVEL);
1092
dim_bitmap(fRightSideBits, kBackground, DIM_LEVEL);
1093
dim_bitmap(fKnobBits, kBackground, DIM_LEVEL);
1097
// replace green color (and shadow) in left slider side
1098
bits = (uint8*)fLeftSideBits->Bits();
1099
length = fLeftSideBits->BitsLength();
1100
uint8 greenIndex = screen.IndexForColor(kGreen);
1101
uint8 greenShadowIndex = screen.IndexForColor(kGreenShadow);
1102
rgb_color shadow = tint_color(kBackground, B_DARKEN_3_TINT);
1103
rgb_color midShadow = tint_color(kBackground, B_DARKEN_4_TINT);
1104
uint8 replaceIndex = screen.IndexForColor(shadow);
1105
uint8 replaceShadowIndex = screen.IndexForColor(midShadow);
1106
for (int32 i = 0; i < length; i++)
1108
if (bits[i] == greenIndex)
1109
bits[i] = replaceIndex;
1110
else if (bits[i] == greenShadowIndex)
1111
bits[i] = replaceShadowIndex;
1094
// make ghosted versions of the bitmaps
1095
dim_bitmap(fLeftSideBits, kBackground, DIM_LEVEL);
1096
dim_bitmap(fRightSideBits, kBackground, DIM_LEVEL);
1097
dim_bitmap(fKnobBits, kBackground, DIM_LEVEL);
1101
// replace green color (and shadow) in left slider side
1102
bits = (uint8*)fLeftSideBits->Bits();
1103
length = fLeftSideBits->BitsLength();
1104
uint8 greenIndex = screen.IndexForColor(kGreen);
1105
uint8 greenShadowIndex = screen.IndexForColor(kGreenShadow);
1106
rgb_color shadow = tint_color(kBackground, B_DARKEN_3_TINT);
1107
rgb_color midShadow = tint_color(kBackground, B_DARKEN_4_TINT);
1108
uint8 replaceIndex = screen.IndexForColor(shadow);
1109
uint8 replaceShadowIndex = screen.IndexForColor(midShadow);
1110
for (int32 i = 0; i < length; i++)
1112
if (bits[i] == greenIndex)
1113
bits[i] = replaceIndex;
1114
else if (bits[i] == greenShadowIndex)
1115
bits[i] = replaceShadowIndex;
1117
1121
/*****************************************************************************
1174
1178
PositionInfoView::Draw( BRect updateRect )
1176
rgb_color background = ui_color( B_PANEL_BACKGROUND_COLOR );
1177
rgb_color shadow = tint_color( background, B_DARKEN_1_TINT );
1178
rgb_color darkShadow = tint_color( background, B_DARKEN_4_TINT );
1179
rgb_color light = tint_color( background, B_LIGHTEN_MAX_TINT );
1180
rgb_color softLight = tint_color( background, B_LIGHTEN_1_TINT );
1182
BRect r( Bounds() );
1183
BeginLineArray( 8 );
1184
AddLine( BPoint( r.left, r.bottom ),
1185
BPoint( r.left, r.top ), shadow );
1186
AddLine( BPoint( r.left + 1.0, r.top ),
1187
BPoint( r.right, r.top ), shadow );
1188
AddLine( BPoint( r.right, r.top + 1.0 ),
1189
BPoint( r.right, r.bottom ), softLight );
1190
AddLine( BPoint( r.right - 1.0, r.bottom ),
1191
BPoint( r.left + 1.0, r.bottom ), softLight );
1192
r.InsetBy( 1.0, 1.0 );
1193
AddLine( BPoint( r.left, r.bottom ),
1194
BPoint( r.left, r.top ), darkShadow );
1195
AddLine( BPoint( r.left + 1.0, r.top ),
1196
BPoint( r.right, r.top ), darkShadow );
1197
AddLine( BPoint( r.right, r.top + 1.0 ),
1198
BPoint( r.right, r.bottom ), light );
1199
AddLine( BPoint( r.right - 1.0, r.bottom ),
1200
BPoint( r.left + 1.0, r.bottom ), light );
1203
r.InsetBy( 1.0, 1.0 );
1204
FillRect( r, B_SOLID_LOW );
1207
GetFontHeight( &fh );
1212
float width = StringWidth( fTimeString.String() );
1213
DrawString( fTimeString.String(),
1214
BPoint( r.left + r.Width() / 2.0 - width / 2.0,
1215
r.top + r.Height() / 2.0 + fh.ascent / 2.0 - 1.0 ) );
1222
BFont smallFont = font;
1223
BFont bigFont = font;
1224
BFont tinyFont = font;
1225
smallFont.SetSize( r.Height() / 5.0 );
1226
bigFont.SetSize( r.Height() / 3.0 );
1227
tinyFont.SetSize( r.Height() / 7.0 );
1228
float timeHeight = r.Height() / 2.5;
1229
float height = ( r.Height() - timeHeight ) / 3.0;
1230
SetFont( &tinyFont );
1231
SetHighColor( 0, 180, 0, 255 );
1232
DrawString( _("File"), BPoint( r.left + 3.0, r.top + height ) );
1233
DrawString( _("Title"), BPoint( r.left + 3.0, r.top + 2.0 * height ) );
1234
DrawString( _("Chapter"), BPoint( r.left + 3.0, r.top + 3.0 * height ) );
1235
SetFont( &smallFont );
1237
SetHighColor( 0, 255, 0, 255 );
1239
_MakeString( helper, fCurrentFileIndex, fCurrentFileSize );
1240
float width = StringWidth( helper.String() );
1241
DrawString( helper.String(), BPoint( r.right - 3.0 - width, r.top + height ) );
1243
_MakeString( helper, fCurrentTitleIndex, fCurrentTitleSize );
1244
width = StringWidth( helper.String() );
1245
DrawString( helper.String(), BPoint( r.right - 3.0 - width, r.top + 2.0 * height ) );
1247
_MakeString( helper, fCurrentChapterIndex, fCurrentChapterSize );
1248
width = StringWidth( helper.String() );
1249
DrawString( helper.String(), BPoint( r.right - 3.0 - width, r.top + 3.0 * height ) );
1251
SetFont( &bigFont );
1252
width = StringWidth( fTimeString.String() );
1253
DrawString( fTimeString.String(),
1254
BPoint( r.left + r.Width() / 2.0 - width / 2.0,
1180
rgb_color background = ui_color( B_PANEL_BACKGROUND_COLOR );
1181
rgb_color shadow = tint_color( background, B_DARKEN_1_TINT );
1182
rgb_color darkShadow = tint_color( background, B_DARKEN_4_TINT );
1183
rgb_color light = tint_color( background, B_LIGHTEN_MAX_TINT );
1184
rgb_color softLight = tint_color( background, B_LIGHTEN_1_TINT );
1186
BRect r( Bounds() );
1187
BeginLineArray( 8 );
1188
AddLine( BPoint( r.left, r.bottom ),
1189
BPoint( r.left, r.top ), shadow );
1190
AddLine( BPoint( r.left + 1.0, r.top ),
1191
BPoint( r.right, r.top ), shadow );
1192
AddLine( BPoint( r.right, r.top + 1.0 ),
1193
BPoint( r.right, r.bottom ), softLight );
1194
AddLine( BPoint( r.right - 1.0, r.bottom ),
1195
BPoint( r.left + 1.0, r.bottom ), softLight );
1196
r.InsetBy( 1.0, 1.0 );
1197
AddLine( BPoint( r.left, r.bottom ),
1198
BPoint( r.left, r.top ), darkShadow );
1199
AddLine( BPoint( r.left + 1.0, r.top ),
1200
BPoint( r.right, r.top ), darkShadow );
1201
AddLine( BPoint( r.right, r.top + 1.0 ),
1202
BPoint( r.right, r.bottom ), light );
1203
AddLine( BPoint( r.right - 1.0, r.bottom ),
1204
BPoint( r.left + 1.0, r.bottom ), light );
1207
r.InsetBy( 1.0, 1.0 );
1208
FillRect( r, B_SOLID_LOW );
1211
GetFontHeight( &fh );
1216
float width = StringWidth( fTimeString.String() );
1217
DrawString( fTimeString.String(),
1218
BPoint( r.left + r.Width() / 2.0 - width / 2.0,
1219
r.top + r.Height() / 2.0 + fh.ascent / 2.0 - 1.0 ) );
1226
BFont smallFont = font;
1227
BFont bigFont = font;
1228
BFont tinyFont = font;
1229
smallFont.SetSize( r.Height() / 5.0 );
1230
bigFont.SetSize( r.Height() / 3.0 );
1231
tinyFont.SetSize( r.Height() / 7.0 );
1232
float timeHeight = r.Height() / 2.5;
1233
float height = ( r.Height() - timeHeight ) / 3.0;
1234
SetFont( &tinyFont );
1235
SetHighColor( 0, 180, 0, 255 );
1236
DrawString( _("File"), BPoint( r.left + 3.0, r.top + height ) );
1237
DrawString( _("Title"), BPoint( r.left + 3.0, r.top + 2.0 * height ) );
1238
DrawString( _("Chapter"), BPoint( r.left + 3.0, r.top + 3.0 * height ) );
1239
SetFont( &smallFont );
1241
SetHighColor( 0, 255, 0, 255 );
1243
_MakeString( helper, fCurrentFileIndex, fCurrentFileSize );
1244
float width = StringWidth( helper.String() );
1245
DrawString( helper.String(), BPoint( r.right - 3.0 - width, r.top + height ) );
1247
_MakeString( helper, fCurrentTitleIndex, fCurrentTitleSize );
1248
width = StringWidth( helper.String() );
1249
DrawString( helper.String(), BPoint( r.right - 3.0 - width, r.top + 2.0 * height ) );
1251
_MakeString( helper, fCurrentChapterIndex, fCurrentChapterSize );
1252
width = StringWidth( helper.String() );
1253
DrawString( helper.String(), BPoint( r.right - 3.0 - width, r.top + 3.0 * height ) );
1255
SetFont( &bigFont );
1256
width = StringWidth( fTimeString.String() );
1257
DrawString( fTimeString.String(),
1258
BPoint( r.left + r.Width() / 2.0 - width / 2.0,
1261
1265
/*****************************************************************************