void CCrossHairView::Draw(BRect updateRect) { BRect bounds = Bounds(); SetHighColor(CColor::Transparent); FillRect(bounds); BRect bigCircle, smallCircle; float width = bounds.Width(); float height = bounds.Height(); bigCircle = bounds.InsetByCopy(5, 5); smallCircle = bounds.InsetByCopy(10, 10); SetHighColor(CColor::White); StrokeEllipse(bigCircle.OffsetByCopy(1, 1)); StrokeEllipse(smallCircle.OffsetByCopy(1, 1)); StrokeLine(BPoint(2, height/2+1), BPoint(width, height/2+1)); StrokeLine(BPoint(width/2+1, 2), BPoint(width/2+1, height)); SetHighColor(CColor::Black); StrokeEllipse(bigCircle); StrokeEllipse(smallCircle); StrokeLine(BPoint(1, height/2), BPoint(width-1, height/2)); StrokeLine(BPoint(width/2, 1), BPoint(width/2, height-1)); Sync(); }
void AppGroupView::_DrawCloseButton(const BRect& updateRect) { PushState(); BRect closeRect = fCloseRect; rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR); float tint = B_DARKEN_2_TINT; if (fCloseClicked) { BRect buttonRect(closeRect.InsetByCopy(-4, -4)); be_control_look->DrawButtonFrame(this, buttonRect, updateRect, base, base, BControlLook::B_ACTIVATED | BControlLook::B_BLEND_FRAME); be_control_look->DrawButtonBackground(this, buttonRect, updateRect, base, BControlLook::B_ACTIVATED); tint *= 1.2; closeRect.OffsetBy(1, 1); } base = tint_color(base, tint); SetHighColor(base); SetPenSize(2); StrokeLine(closeRect.LeftTop(), closeRect.RightBottom()); StrokeLine(closeRect.LeftBottom(), closeRect.RightTop()); PopState(); }
void BScrollView::Draw(BRect updateRect) { if (fBorder == B_PLAIN_BORDER) { SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_2_TINT)); StrokeRect(Bounds()); return; } else if (fBorder != B_FANCY_BORDER) return; BRect bounds = Bounds(); SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_2_TINT)); StrokeRect(bounds.InsetByCopy(1, 1)); if (fHighlighted) { SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR)); StrokeRect(bounds); } else { SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_DARKEN_1_TINT)); StrokeLine(bounds.LeftBottom(), bounds.LeftTop()); bounds.left++; StrokeLine(bounds.LeftTop(), bounds.RightTop()); SetHighColor(ui_color(B_SHINE_COLOR)); StrokeLine(bounds.LeftBottom(), bounds.RightBottom()); bounds.top++; bounds.bottom--; StrokeLine(bounds.RightBottom(), bounds.RightTop()); } }
void MonitorView::Draw(BRect updateRect) { rgb_color darkColor = {160, 160, 160, 255}; rgb_color blackColor = {0, 0, 0, 255}; rgb_color redColor = {228, 0, 0, 255}; rgb_color whiteColor = {255, 255, 255, 255}; BRect outerRect = _MonitorBounds(); SetHighColor(fBackgroundColor); FillRect(updateRect); SetDrawingMode(B_OP_OVER); // frame & background SetHighColor(darkColor); FillRoundRect(outerRect, 3.0, 3.0); SetHighColor(blackColor); StrokeRoundRect(outerRect, 3.0, 3.0); SetHighColor(fDesktopColor); BRect innerRect(outerRect.InsetByCopy(4, 4)); FillRoundRect(innerRect, 2.0, 2.0); SetHighColor(blackColor); StrokeRoundRect(innerRect, 2.0, 2.0); SetDrawingMode(B_OP_COPY); // power light SetHighColor(redColor); BPoint powerPos(outerRect.left + 5, outerRect.bottom - 2); StrokeLine(powerPos, BPoint(powerPos.x + 2, powerPos.y)); // DPI if (fDPI == 0) return; font_height fontHeight; GetFontHeight(&fontHeight); float height = ceilf(fontHeight.ascent + fontHeight.descent); char text[64]; snprintf(text, sizeof(text), B_TRANSLATE("%ld dpi"), fDPI); float width = StringWidth(text); if (width > innerRect.Width() || height > innerRect.Height()) return; SetLowColor(fDesktopColor); SetHighColor(whiteColor); DrawString(text, BPoint(innerRect.left + (innerRect.Width() - width) / 2, innerRect.top + fontHeight.ascent + (innerRect.Height() - height) / 2)); }
// constructor PopupTextView::PopupTextView(BRect frame, const BString& text, TextViewPopup* popup) : BTextView(frame, "popup text view", frame.InsetByCopy(2, 1), B_FOLLOW_ALL, B_WILL_DRAW) , fPopup(popup) { SetText(text.String()); }
/*------------------------------------------------------------------------------*\ ( ) - \*------------------------------------------------------------------------------*/ void BmCaption::Draw( BRect updateRect) { BRect r = Bounds(); if (mHighlight) { if (BeamOnDano) SetLowColor( keyboard_navigation_color()); else { rgb_color highlightCol = {255, 217, 121, 255}; SetLowColor( highlightCol); } } else SetLowColor( ui_color( B_PANEL_BACKGROUND_COLOR)); #ifndef __HAIKU__ FillRect( r.InsetByCopy(1.0, 1.0), B_SOLID_LOW); #else FillRect( BRect(r.top + 1, r.left + 1, r.right, r.bottom - 1), B_SOLID_LOW); #endif SetHighColor( ui_color( B_SHINE_COLOR)); StrokeLine( BPoint(0.0,1.0), BPoint(r.right,1.0)); StrokeLine( BPoint(0.0,1.0), r.LeftBottom()); SetHighColor( BmWeakenColor( B_SHADOW_COLOR, BeShadowMod)); if (BeamOnDano) StrokeLine( r.RightTop(), r.RightBottom()); #ifndef __HAIKU__ else // looks better on R5, as it blends with scrollbar: StrokeLine( r.RightTop(), r.RightBottom(), B_SOLID_LOW); #endif StrokeLine( r.LeftTop(), r.RightTop()); StrokeLine( r.LeftBottom(), r.RightBottom()); SetHighColor( ui_color( B_PANEL_TEXT_COLOR)); font_height fInfo; BFont captionFont; GetFont(&captionFont); captionFont.GetHeight( &fInfo); float offset = (1.0f+r.Height()-(fInfo.ascent+fInfo.descent))/2.0f; float freeWidth = r.Width(); if (mHighlight && mHighlightLabel.Length()) { freeWidth -= StringWidth(mHighlightLabel.String())+2; BPoint pos( 2.0, fInfo.ascent+offset); DrawString( mHighlightLabel.String(), pos); } const char* text = mText.String(); float width; while(1) { width = StringWidth(text); if (width+4.0 < freeWidth) break; text++; while((*text & 0xc0) == 0x80) text++; // skip UTF8 subsequence chars if (!*text) break; } BPoint pos( r.Width()-width-2.0f, fInfo.ascent+offset); DrawString( text, pos); }
NumberEditor::NumberEditor(BRect rect, DataEditor &editor) : TypeEditorView(rect, B_TRANSLATE("Number editor"), B_FOLLOW_LEFT_RIGHT, 0, editor) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fTextControl = new BTextControl(rect.InsetByCopy(5, 5), B_EMPTY_STRING, _TypeLabel(), NULL, new BMessage(kMsgValueChanged), B_FOLLOW_ALL); fTextControl->SetDivider(StringWidth(fTextControl->Label()) + 8); fTextControl->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_RIGHT); ResizeTo(rect.Width(), 30); AddChild(fTextControl); }
void TTimeWindow::_InitWindow() { SetPulseRate(500000); fDateTimeView = new DateTimeView(Bounds()); BRect bounds = fDateTimeView->Bounds(); fTimeZoneView = new TimeZoneView(bounds); fBaseView = new TTimeBaseView(bounds, "baseView"); AddChild(fBaseView); fBaseView->StartWatchingAll(fDateTimeView); fBaseView->StartWatchingAll(fTimeZoneView); bounds.OffsetBy(10.0, 10.0); BTabView *tabView = new BTabView(bounds.InsetByCopy(-5.0, -5.0), "tabView" , B_WIDTH_AS_USUAL, B_FOLLOW_NONE); BTab *tab = new BTab(); tabView->AddTab(fDateTimeView, tab); tab->SetLabel("Date & Time"); tab = new BTab(); tabView->AddTab(fTimeZoneView, tab); tab->SetLabel("Time zone"); fBaseView->AddChild(tabView); tabView->ResizeBy(0.0, tabView->TabHeight()); BRect rect = Bounds(); rect.left = 10; rect.top = rect.bottom - 10; fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW); fRevertButton->ResizeToPreferred(); fRevertButton->SetEnabled(false); float buttonHeight = fRevertButton->Bounds().Height(); fRevertButton->MoveBy(0, -buttonHeight); fBaseView->AddChild(fRevertButton); fRevertButton->SetTarget(this); fBaseView->ResizeTo(tabView->Bounds().Width() + 10.0, tabView->Bounds().Height() + buttonHeight + 30.0); ResizeTo(fBaseView->Bounds().Width(), fBaseView->Bounds().Height()); }
void TTimeWindow::_AlignWindow() { BPoint pt = TimeSettings().LeftTop(); MoveTo(pt); BRect frame = Frame(); BRect screen = BScreen().Frame(); if (!frame.Intersects(screen.InsetByCopy(50.0, 50.0))) { BRect bounds(Bounds()); BPoint leftTop((screen.Width() - bounds.Width()) / 2.0, (screen.Height() - bounds.Height()) / 2.0); MoveTo(leftTop); } }
void Test::SetupClipping(BView* view) { BRect bounds = view->Bounds(); fClippingRegion.Set(bounds); BRect grid(bounds.InsetByCopy(40, 40)); for (float y = grid.top; y < grid.bottom + 5; y += grid.Height() / 2) { for (float x = grid.left; x < grid.right + 5; x += grid.Width() / 2) { BRect r(x, y, x, y); r.InsetBy(-30, -30); fClippingRegion.Exclude(r); } } view->ConstrainClippingRegion(&fClippingRegion); }
MimeTypeEditor::MimeTypeEditor(BRect rect, DataEditor& editor) : TypeEditorView(rect, B_TRANSLATE("MIME type editor"), B_FOLLOW_LEFT_RIGHT, 0, editor) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fTextControl = new BTextControl(rect.InsetByCopy(5, 5), B_EMPTY_STRING, B_TRANSLATE("MIME type:"), NULL, new BMessage(kMsgValueChanged), B_FOLLOW_ALL); fTextControl->SetDivider(StringWidth(fTextControl->Label()) + 8); float width, height; fTextControl->GetPreferredSize(&width, &height); fTextControl->ResizeTo(rect.Width() - 10, height); ResizeTo(rect.Width(), height + 10); AddChild(fTextControl); }
void PictureView::Draw(BRect updateRect) { BRect rect = Bounds(); // Draw the outer frame rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR); if (IsFocus() && Window() && Window()->IsActive()) SetHighColor(ui_color(B_KEYBOARD_NAVIGATION_COLOR)); else SetHighColor(tint_color(base, B_DARKEN_3_TINT)); StrokeRect(rect); if (fFocusChanging) { // focus frame is already redraw, stop here return; } BBitmap* picture = fPicture ? fPicture : fDefaultPicture; if (picture != NULL) { // scale to fit and center picture in frame BRect frame = rect.InsetByCopy(kPictureMargin, kPictureMargin); BRect srcRect = picture->Bounds(); BSize size = frame.Size(); if (srcRect.Width() > srcRect.Height()) size.height = srcRect.Height() * size.width / srcRect.Width(); else size.width = srcRect.Width() * size.height / srcRect.Height(); fPictureRect = BLayoutUtils::AlignInFrame(frame, size, BAlignment(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER)); SetDrawingMode(B_OP_ALPHA); if (picture == fDefaultPicture) { SetBlendingMode(B_CONSTANT_ALPHA, B_ALPHA_OVERLAY); SetHighColor(0, 0, 0, 24); } DrawBitmapAsync(picture, srcRect, fPictureRect, B_FILTER_BITMAP_BILINEAR); SetDrawingMode(B_OP_OVER); } }
void WebTabView::_DrawCloseButton(BView* owner, BRect& frame, const BRect& updateRect, bool isFirst, bool isLast, bool isFront) { BRect closeRect = _CloseRectFrame(frame); frame.right = closeRect.left - be_control_look->DefaultLabelSpacing(); closeRect.left = (closeRect.left + closeRect.right) / 2 - 3; closeRect.right = closeRect.left + 6; closeRect.top = (closeRect.top + closeRect.bottom) / 2 - 3; closeRect.bottom = closeRect.top + 6; rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR); float tint = B_DARKEN_1_TINT; if (!IsFront()) { base = tint_color(base, tint); tint *= 1.02; } if (fOverCloseRect) tint *= 1.4; else tint *= 1.2; if (fClicked && fOverCloseRect) { // Draw the button frame BRect buttonRect(closeRect.InsetByCopy(-4, -4)); be_control_look->DrawButtonFrame(owner, buttonRect, updateRect, base, base, BControlLook::B_ACTIVATED | BControlLook::B_BLEND_FRAME); be_control_look->DrawButtonBackground(owner, buttonRect, updateRect, base, BControlLook::B_ACTIVATED); closeRect.OffsetBy(1, 1); tint *= 1.2; } // Draw the × base = tint_color(base, tint); owner->SetHighColor(base); owner->SetPenSize(2); owner->StrokeLine(closeRect.LeftTop(), closeRect.RightBottom()); owner->StrokeLine(closeRect.LeftBottom(), closeRect.RightTop()); owner->SetPenSize(1); }
LiveTextControl::LiveTextControl(BRect frame, const char *name, const char *label, const char *initial_text, BMessage *message, uint32 rmask, uint32 flags) : BControl(frame, name, label, message, rmask, flags) { // initial_text zuweisen! font_height hoehe; GetFontHeight(&hoehe); ResizeTo( Bounds().Width(), hoehe.ascent + hoehe.descent + hoehe.leading + 6.0 ); frame = Bounds(); frame.left = 50.0; fTextView = new LiveTextView(frame, 0, frame.InsetByCopy(6.0, 3.0).OffsetToCopy( 3.0, 3.0 ), B_FOLLOW_LEFT|B_FOLLOW_TOP ); AddChild( fTextView ); }
BooleanEditor::BooleanEditor(BRect rect, DataEditor &editor) : TypeEditorView(rect, B_TRANSLATE("Boolean editor"), B_FOLLOW_NONE, 0, editor) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); BPopUpMenu *menu = new BPopUpMenu("bool"); BMessage *message; menu->AddItem(fFalseMenuItem = new BMenuItem("false", new BMessage(kMsgValueChanged))); menu->AddItem(fTrueMenuItem = new BMenuItem("true", message = new BMessage(kMsgValueChanged))); message->AddInt8("value", 1); BMenuField *menuField = new BMenuField(rect.InsetByCopy(5, 5), B_EMPTY_STRING, B_TRANSLATE("Boolean value:"), menu, B_FOLLOW_LEFT_RIGHT); menuField->SetDivider(StringWidth(menuField->Label()) + 8); menuField->ResizeToPreferred(); ResizeTo(menuField->Bounds().Width() + 10, menuField->Bounds().Height() + 10); _UpdateMenuField(); AddChild(menuField); }
void ActivityView::_DrawHistory(bool drawBackground) { _UpdateOffscreenBitmap(); BView* view = this; if (fOffscreen != NULL) { fOffscreen->Lock(); view = _OffscreenView(); } BRect frame = _HistoryFrame(); BRect outerFrame = frame.InsetByCopy(-2, -2); // draw the outer frame uint32 flags = 0; if (!drawBackground) flags |= BControlLook::B_BLEND_FRAME; be_control_look->DrawTextControlBorder(this, outerFrame, outerFrame, fLegendBackgroundColor, flags); // convert to offscreen view if necessary if (view != this) frame.OffsetTo(B_ORIGIN); view->SetLowColor(fHistoryBackgroundColor); view->FillRect(frame, B_SOLID_LOW); uint32 step = 2; uint32 resolution = fDrawResolution; if (fDrawResolution > 1) { step = 1; resolution--; } // We would get a negative number of steps which isn't a good idea. if (frame.IntegerWidth() <= 10) return; uint32 width = frame.IntegerWidth() - 10; uint32 steps = width / step; bigtime_t timeStep = RefreshInterval() * resolution; bigtime_t now = system_time(); // Draw scale // TODO: add second markers? view->SetPenSize(1); rgb_color scaleColor = view->LowColor(); uint32 average = (scaleColor.red + scaleColor.green + scaleColor.blue) / 3; if (average < 96) scaleColor = tint_color(scaleColor, B_LIGHTEN_2_TINT); else scaleColor = tint_color(scaleColor, B_DARKEN_2_TINT); view->SetHighColor(scaleColor); view->StrokeLine(BPoint(frame.left, frame.top + frame.Height() / 2), BPoint(frame.right, frame.top + frame.Height() / 2)); // Draw values view->SetPenSize(1.5); BAutolock _(fSourcesLock); for (uint32 i = fSources.CountItems(); i-- > 0;) { ViewHistory* viewValues = fViewValues.ItemAt(i); DataSource* source = fSources.ItemAt(i); DataHistory* values = fValues.ItemAt(i); viewValues->Update(values, steps, fDrawResolution, now, timeStep, RefreshInterval()); if (viewValues->Start() >= (int32)steps - 1) continue; uint32 x = viewValues->Start() * step; bool first = true; view->SetHighColor(source->Color()); view->SetLineMode(B_BUTT_CAP, B_ROUND_JOIN); view->MovePenTo(B_ORIGIN); try { view->BeginLineArray(steps - viewValues->Start() - 1); BPoint prev; for (uint32 j = viewValues->Start(); j < steps; x += step, j++) { float y = _PositionForValue(source, values, viewValues->ValueAt(j)); if (first) { first = false; } else view->AddLine(prev, BPoint(x, y), source->Color()); prev.Set(x, y); } } catch (std::bad_alloc) { // Not enough memory to allocate the line array. // TODO we could try to draw using the slower but less memory // consuming solution using StrokeLine. } view->EndLineArray(); } // TODO: add marks when an app started or quit view->Sync(); if (fOffscreen != NULL) { fOffscreen->Unlock(); DrawBitmap(fOffscreen, outerFrame.LeftTop()); } }
void ActivityView::_DrawHistory(bool drawBackground) { _UpdateOffscreenBitmap(); BView* view = this; if (fOffscreen != NULL) { fOffscreen->Lock(); view = _OffscreenView(); } BRect frame = _HistoryFrame(); BRect outerFrame = frame.InsetByCopy(-2, -2); // draw the outer frame uint32 flags = 0; if (!drawBackground) flags |= BControlLook::B_BLEND_FRAME; be_control_look->DrawTextControlBorder(this, outerFrame, outerFrame, fLegendBackgroundColor, flags); // convert to offscreen view if necessary if (view != this) frame.OffsetTo(B_ORIGIN); view->SetLowColor(fHistoryBackgroundColor); view->FillRect(frame, B_SOLID_LOW); uint32 step = 2; uint32 resolution = fDrawResolution; if (fDrawResolution > 1) { step = 1; resolution--; } uint32 width = frame.IntegerWidth() - 10; uint32 steps = width / step; bigtime_t timeStep = RefreshInterval() * resolution; bigtime_t now = system_time(); // Draw scale // TODO: add second markers? view->SetPenSize(1); rgb_color scaleColor = view->LowColor(); uint32 average = (scaleColor.red + scaleColor.green + scaleColor.blue) / 3; if (average < 96) scaleColor = tint_color(scaleColor, B_LIGHTEN_2_TINT); else scaleColor = tint_color(scaleColor, B_DARKEN_2_TINT); view->SetHighColor(scaleColor); view->StrokeLine(BPoint(frame.left, frame.top + frame.Height() / 2), BPoint(frame.right, frame.top + frame.Height() / 2)); // Draw values view->SetPenSize(1.5); BAutolock _(fSourcesLock); for (uint32 i = fSources.CountItems(); i-- > 0;) { ViewHistory* viewValues = fViewValues.ItemAt(i); DataSource* source = fSources.ItemAt(i); DataHistory* values = fValues.ItemAt(i); viewValues->Update(values, steps, fDrawResolution, now, timeStep, RefreshInterval()); uint32 x = viewValues->Start() * step; BShape shape; bool first = true; for (uint32 i = viewValues->Start(); i < steps; x += step, i++) { float y = _PositionForValue(source, values, viewValues->ValueAt(i)); if (first) { shape.MoveTo(BPoint(x, y)); first = false; } else shape.LineTo(BPoint(x, y)); } view->SetHighColor(source->Color()); view->SetLineMode(B_BUTT_CAP, B_ROUND_JOIN); view->MovePenTo(B_ORIGIN); view->StrokeShape(&shape); } // TODO: add marks when an app started or quit view->Sync(); if (fOffscreen != NULL) { fOffscreen->Unlock(); DrawBitmap(fOffscreen, outerFrame.LeftTop()); } }
void KeyboardLayoutView::_DrawKey(BView* view, BRect updateRect, const Key* key, BRect rect, bool pressed) { rgb_color base = key->dark ? kDarkColor : kBrightColor; rgb_color background = ui_color(B_PANEL_BACKGROUND_COLOR); key_kind keyKind = kNormalKey; int32 deadKey = 0; bool secondDeadKey = false; bool isDeadKeyEnabled = true; char text[32]; if (fKeymap != NULL) { _GetKeyLabel(key, text, sizeof(text), keyKind); deadKey = fKeymap->DeadKey(key->code, fModifiers, &isDeadKeyEnabled); secondDeadKey = fKeymap->IsDeadSecondKey(key->code, fModifiers, fDeadKey); } else { // Show the key code if there is no keymap snprintf(text, sizeof(text), "%02" B_PRIx32, key->code); } _SetFontSize(view, keyKind); if (secondDeadKey) base = kSecondDeadKeyColor; else if (deadKey > 0 && isDeadKeyEnabled) base = kDeadKeyColor; if (key->shape == kRectangleKeyShape) { _DrawKeyButton(view, rect, updateRect, base, background, pressed); rect.InsetBy(1, 1); _GetAbbreviatedKeyLabelIfNeeded(view, rect, key, text, sizeof(text)); be_control_look->DrawLabel(view, text, rect, updateRect, base, 0, BAlignment(B_ALIGN_CENTER, B_ALIGN_MIDDLE)); } else if (key->shape == kEnterKeyShape) { BRect topLeft = rect; BRect topRight = rect; BRect bottomLeft = rect; BRect bottomRight = rect; // TODO: for some reason, this does not always equal the bottom of // the other keys... bottomLeft.top = floorf(rect.top + fLayout->DefaultKeySize().height * fFactor - fGap - 1); bottomLeft.right = floorf(rect.left + (key->frame.Width() - key->second_row) * fFactor - fGap - 2); topLeft.bottom = bottomLeft.top; topLeft.right = bottomLeft.right + 1; // add one to make the borders meet topRight.bottom = topLeft.bottom; topRight.left = topLeft.right; bottomRight.top = bottomLeft.top; bottomRight.left = bottomLeft.right; // draw top left corner be_control_look->DrawButtonFrame(view, topLeft, updateRect, 4.0f, 0.0f, 4.0f, 0.0f, base, background, pressed ? BControlLook::B_ACTIVATED : 0, BControlLook::B_LEFT_BORDER | BControlLook::B_TOP_BORDER | BControlLook::B_BOTTOM_BORDER); be_control_look->DrawButtonBackground(view, topLeft, updateRect, 4.0f, 0.0f, 4.0f, 0.0f, base, pressed ? BControlLook::B_ACTIVATED : 0, BControlLook::B_LEFT_BORDER | BControlLook::B_TOP_BORDER | BControlLook::B_BOTTOM_BORDER); // draw top right corner be_control_look->DrawButtonFrame(view, topRight, updateRect, 0.0f, 4.0f, 0.0f, 0.0f, base, background, pressed ? BControlLook::B_ACTIVATED : 0, BControlLook::B_TOP_BORDER | BControlLook::B_RIGHT_BORDER); be_control_look->DrawButtonBackground(view, topRight, updateRect, 0.0f, 4.0f, 0.0f, 0.0f, base, pressed ? BControlLook::B_ACTIVATED : 0, BControlLook::B_TOP_BORDER | BControlLook::B_RIGHT_BORDER); // draw bottom right corner be_control_look->DrawButtonFrame(view, bottomRight, updateRect, 0.0f, 0.0f, 4.0f, 4.0f, base, background, pressed ? BControlLook::B_ACTIVATED : 0, BControlLook::B_LEFT_BORDER | BControlLook::B_RIGHT_BORDER | BControlLook::B_BOTTOM_BORDER); be_control_look->DrawButtonBackground(view, bottomRight, updateRect, 0.0f, 0.0f, 4.0f, 4.0f, base, pressed ? BControlLook::B_ACTIVATED : 0, BControlLook::B_LEFT_BORDER | BControlLook::B_RIGHT_BORDER | BControlLook::B_BOTTOM_BORDER); // clip out the bottom left corner bottomLeft.right += 1; bottomLeft.top -= 2; BRegion region(rect); region.Exclude(bottomLeft); view->ConstrainClippingRegion(®ion); // Fill in the rect with the background color SetHighColor(background); FillRect(rect); // draw the button background BRect bgRect = rect.InsetByCopy(2, 2); be_control_look->DrawButtonBackground(view, bgRect, updateRect, 4.0f, 4.0f, 0.0f, 4.0f, base, pressed ? BControlLook::B_ACTIVATED : 0); rect.left = bottomLeft.right; _GetAbbreviatedKeyLabelIfNeeded(view, rect, key, text, sizeof(text)); // draw the button label be_control_look->DrawLabel(view, text, rect, updateRect, base, 0, BAlignment(B_ALIGN_CENTER, B_ALIGN_MIDDLE)); // reset the clipping region view->ConstrainClippingRegion(NULL); } }
void BStatusBar::Draw(BRect updateRect) { rgb_color backgroundColor = LowColor(); font_height fontHeight; GetFontHeight(&fontHeight); BRect barFrame = _BarFrame(&fontHeight); BRect outerFrame = barFrame.InsetByCopy(-2, -2); BRegion background(updateRect); background.Exclude(outerFrame); FillRegion(&background, B_SOLID_LOW); // Draw labels/texts BRect rect = outerFrame; rect.top = 0; rect.bottom = outerFrame.top - 1; if (updateRect.Intersects(rect)) { // update labels BString leftText; leftText << fLabel << fText; BString rightText; rightText << fTrailingText << fTrailingLabel; float baseLine = ceilf(fontHeight.ascent) + 1; fTextDivider = rect.right; BFont font; GetFont(&font); if (rightText.Length()) { font.TruncateString(&rightText, B_TRUNCATE_BEGINNING, rect.Width()); fTextDivider -= StringWidth(rightText.String()); } if (leftText.Length()) { float width = max_c(0.0, fTextDivider - rect.left); font.TruncateString(&leftText, B_TRUNCATE_END, width); } rgb_color textColor = ui_color(B_PANEL_TEXT_COLOR); if (backgroundColor != ui_color(B_PANEL_BACKGROUND_COLOR)) { if (backgroundColor.Brightness() > 100) textColor = make_color(0, 0, 0, 255); else textColor = make_color(255, 255, 255, 255); } SetHighColor(textColor); if (leftText.Length()) DrawString(leftText.String(), BPoint(rect.left, baseLine)); if (rightText.Length()) DrawString(rightText.String(), BPoint(fTextDivider, baseLine)); } // Draw bar if (!updateRect.Intersects(outerFrame)) return; rect = outerFrame; be_control_look->DrawStatusBar(this, rect, updateRect, backgroundColor, fBarColor, _BarPosition(barFrame)); }
void BSlider::DrawBar() { BRect frame = BarFrame(); BView *view = OffscreenView(); if (be_control_look != NULL) { uint32 flags = be_control_look->Flags(this); rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR); rgb_color rightFillColor = fBarColor; rgb_color leftFillColor = fUseFillColor ? fFillColor : fBarColor; be_control_look->DrawSliderBar(view, frame, frame, base, leftFillColor, rightFillColor, Position(), flags, fOrientation); return; } rgb_color no_tint = ui_color(B_PANEL_BACKGROUND_COLOR); rgb_color lightenmax; rgb_color darken1; rgb_color darken2; rgb_color darkenmax; rgb_color barColor; rgb_color fillColor; if (IsEnabled()) { lightenmax = tint_color(no_tint, B_LIGHTEN_MAX_TINT); darken1 = tint_color(no_tint, B_DARKEN_1_TINT); darken2 = tint_color(no_tint, B_DARKEN_2_TINT); darkenmax = tint_color(no_tint, B_DARKEN_MAX_TINT); barColor = fBarColor; fillColor = fFillColor; } else { lightenmax = tint_color(no_tint, B_LIGHTEN_MAX_TINT); darken1 = no_tint; darken2 = tint_color(no_tint, B_DARKEN_1_TINT); darkenmax = tint_color(no_tint, B_DARKEN_3_TINT); barColor.red = (fBarColor.red + no_tint.red) / 2; barColor.green = (fBarColor.green + no_tint.green) / 2; barColor.blue = (fBarColor.blue + no_tint.blue) / 2; barColor.alpha = 255; fillColor.red = (fFillColor.red + no_tint.red) / 2; fillColor.green = (fFillColor.green + no_tint.green) / 2; fillColor.blue = (fFillColor.blue + no_tint.blue) / 2; fillColor.alpha = 255; } // exclude the block thumb from the bar filling BRect lowerFrame = frame.InsetByCopy(1, 1); lowerFrame.top++; lowerFrame.left++; BRect upperFrame = lowerFrame; BRect thumbFrame; if (Style() == B_BLOCK_THUMB) { thumbFrame = ThumbFrame(); if (fOrientation == B_HORIZONTAL) { lowerFrame.right = thumbFrame.left; upperFrame.left = thumbFrame.right; } else { lowerFrame.top = thumbFrame.bottom; upperFrame.bottom = thumbFrame.top; } } else if (fUseFillColor) { if (fOrientation == B_HORIZONTAL) { lowerFrame.right = floor(lowerFrame.left - 1 + Position() * (lowerFrame.Width() + 1)); upperFrame.left = lowerFrame.right; } else { lowerFrame.top = floor(lowerFrame.bottom + 1 - Position() * (lowerFrame.Height() + 1)); upperFrame.bottom = lowerFrame.top; } } view->SetHighColor(barColor); view->FillRect(upperFrame); if (Style() == B_BLOCK_THUMB || fUseFillColor) { if (fUseFillColor) view->SetHighColor(fillColor); view->FillRect(lowerFrame); } if (Style() == B_BLOCK_THUMB) { // We don't want to stroke the lines over the thumb PushState(); BRegion region; GetClippingRegion(®ion); region.Exclude(thumbFrame); ConstrainClippingRegion(®ion); } view->SetHighColor(darken1); view->StrokeLine(BPoint(frame.left, frame.top), BPoint(frame.left + 1.0f, frame.top)); view->StrokeLine(BPoint(frame.left, frame.bottom), BPoint(frame.left + 1.0f, frame.bottom)); view->StrokeLine(BPoint(frame.right - 1.0f, frame.top), BPoint(frame.right, frame.top)); view->SetHighColor(darken2); view->StrokeLine(BPoint(frame.left + 1.0f, frame.top), BPoint(frame.right - 1.0f, frame.top)); view->StrokeLine(BPoint(frame.left, frame.bottom - 1.0f), BPoint(frame.left, frame.top + 1.0f)); view->SetHighColor(lightenmax); view->StrokeLine(BPoint(frame.left + 1.0f, frame.bottom), BPoint(frame.right, frame.bottom)); view->StrokeLine(BPoint(frame.right, frame.bottom - 1.0f), BPoint(frame.right, frame.top + 1.0f)); frame.InsetBy(1.0f, 1.0f); view->SetHighColor(darkenmax); view->StrokeLine(BPoint(frame.left, frame.bottom), BPoint(frame.left, frame.top)); view->StrokeLine(BPoint(frame.left + 1.0f, frame.top), BPoint(frame.right, frame.top)); if (Style() == B_BLOCK_THUMB) PopState(); }
void NotificationView::Draw(BRect updateRect) { BRect progRect; // Draw progress background if (fType == B_PROGRESS_NOTIFICATION) { PushState(); font_height fh; be_plain_font->GetHeight(&fh); float fontHeight = fh.ascent + fh.descent + fh.leading; progRect = Bounds(); progRect.InsetBy(kEdgePadding, kEdgePadding); progRect.top = progRect.bottom - (kSmallPadding * 2) - fontHeight; StrokeRect(progRect); BRect barRect = progRect; barRect.InsetBy(1.0, 1.0); barRect.right *= fProgress; SetHighColor(ui_color(B_CONTROL_HIGHLIGHT_COLOR)); FillRect(barRect); SetHighColor(ui_color(B_PANEL_TEXT_COLOR)); BString label = ""; label << (int)(fProgress * 100) << " %"; float labelWidth = be_plain_font->StringWidth(label.String()); float labelX = progRect.left + (progRect.IntegerWidth() / 2) - (labelWidth / 2); SetLowColor(B_TRANSPARENT_COLOR); SetDrawingMode(B_OP_ALPHA); DrawString(label.String(), label.Length(), BPoint(labelX, progRect.top + fh.ascent + fh.leading + kSmallPadding)); PopState(); } SetDrawingMode(B_OP_ALPHA); SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); // Icon size float iconSize = (float)fParent->IconSize(); // Rectangle for icon and overlay icon BRect iconRect(0, 0, 0, 0); // Draw icon if (fBitmap) { LineInfo* appLine = fLines.back(); font_height fh; appLine->font.GetHeight(&fh); float title_bottom = appLine->location.y + fh.descent; float ix = kEdgePadding; float iy = 0; if (fParent->Layout() == TitleAboveIcon) iy = title_bottom + kEdgePadding + (Bounds().Height() - title_bottom - kEdgePadding * 2 - iconSize) / 2; else iy = (Bounds().Height() - iconSize) / 2.0; if (fType == B_PROGRESS_NOTIFICATION) // Move icon up by half progress bar height if it's present iy -= (progRect.Height() + kEdgePadding) / 2.0; iconRect.left = ix; iconRect.top = iy; iconRect.right = ix + iconSize; iconRect.bottom = iy + iconSize; DrawBitmapAsync(fBitmap, fBitmap->Bounds(), iconRect, B_FILTER_BITMAP_BILINEAR); } // Draw content LineInfoList::iterator lIt; for (lIt = fLines.begin(); lIt != fLines.end(); lIt++) { LineInfo *l = (*lIt); SetFont(&l->font); DrawString(l->text.String(), l->text.Length(), l->location); } rgb_color detailCol = ui_color(B_CONTROL_BORDER_COLOR); detailCol = tint_color(detailCol, B_LIGHTEN_2_TINT); // Draw the close widget BRect closeRect = Bounds(); closeRect.InsetBy(kEdgePadding, kEdgePadding); closeRect.left = closeRect.right - kCloseSize; closeRect.bottom = closeRect.top + kCloseSize; PushState(); SetHighColor(detailCol); StrokeRoundRect(closeRect, kSmallPadding, kSmallPadding); BRect closeCross = closeRect.InsetByCopy(kSmallPadding, kSmallPadding); StrokeLine(closeCross.LeftTop(), closeCross.RightBottom()); StrokeLine(closeCross.LeftBottom(), closeCross.RightTop()); PopState(); Sync(); }
void BStatusBar::Draw(BRect updateRect) { rgb_color backgroundColor = LowColor(); font_height fontHeight; GetFontHeight(&fontHeight); BRect barFrame = _BarFrame(&fontHeight); BRect outerFrame = barFrame.InsetByCopy(-2, -2); BRegion background(updateRect); background.Exclude(outerFrame); FillRegion(&background, B_SOLID_LOW); // Draw labels/texts BRect rect = outerFrame; rect.top = 0; rect.bottom = outerFrame.top - 1; if (updateRect.Intersects(rect)) { // update labels BString leftText; leftText << fLabel << fText; BString rightText; rightText << fTrailingText << fTrailingLabel; float baseLine = ceilf(fontHeight.ascent) + 1; fTextDivider = rect.right; BFont font; GetFont(&font); if (rightText.Length()) { font.TruncateString(&rightText, B_TRUNCATE_BEGINNING, rect.Width()); fTextDivider -= StringWidth(rightText.String()); } if (leftText.Length()) { float width = max_c(0.0, fTextDivider - rect.left); font.TruncateString(&leftText, B_TRUNCATE_END, width); } rgb_color textColor = ui_color(B_PANEL_TEXT_COLOR); if (backgroundColor != ui_color(B_PANEL_BACKGROUND_COLOR)) { if (backgroundColor.Brightness() > 100) textColor = make_color(0, 0, 0, 255); else textColor = make_color(255, 255, 255, 255); } SetHighColor(textColor); if (leftText.Length()) DrawString(leftText.String(), BPoint(rect.left, baseLine)); if (rightText.Length()) DrawString(rightText.String(), BPoint(fTextDivider, baseLine)); } // Draw bar if (!updateRect.Intersects(outerFrame)) return; rect = outerFrame; if (be_control_look != NULL) { be_control_look->DrawStatusBar(this, rect, updateRect, backgroundColor, fBarColor, _BarPosition(barFrame)); return; } // First bevel SetHighColor(tint_color(backgroundColor, B_DARKEN_1_TINT)); StrokeLine(rect.LeftBottom(), rect.LeftTop()); StrokeLine(rect.RightTop()); SetHighColor(tint_color(backgroundColor, B_LIGHTEN_2_TINT)); StrokeLine(BPoint(rect.left + 1, rect.bottom), rect.RightBottom()); StrokeLine(BPoint(rect.right, rect.top + 1)); rect.InsetBy(1, 1); // Second bevel SetHighColor(tint_color(backgroundColor, B_DARKEN_4_TINT)); StrokeLine(rect.LeftBottom(), rect.LeftTop()); StrokeLine(rect.RightTop()); SetHighColor(backgroundColor); StrokeLine(BPoint(rect.left + 1, rect.bottom), rect.RightBottom()); StrokeLine(BPoint(rect.right, rect.top + 1)); rect = barFrame; rect.right = _BarPosition(barFrame); // draw bar itself if (rect.right >= rect.left) { // Bevel SetHighColor(tint_color(fBarColor, B_LIGHTEN_2_TINT)); StrokeLine(rect.LeftBottom(), rect.LeftTop()); StrokeLine(rect.RightTop()); SetHighColor(tint_color(fBarColor, B_DARKEN_2_TINT)); StrokeLine(BPoint(rect.left + 1, rect.bottom), rect.RightBottom()); StrokeLine(BPoint(rect.right, rect.top + 1)); // filling SetHighColor(fBarColor); FillRect(rect.InsetByCopy(1, 1)); } if (rect.right < barFrame.right) { // empty space rect.left = rect.right + 1; rect.right = barFrame.right; SetHighColor(tint_color(backgroundColor, B_LIGHTEN_MAX_TINT)); FillRect(rect); } }
void WorkspacesView::_DrawWindow(DrawingEngine* drawingEngine, const BRect& workspaceFrame, const BRect& screenFrame, ::Window* window, BPoint windowPosition, BRegion& backgroundRegion, bool active) { if (window->Feel() == kDesktopWindowFeel || window->IsHidden()) return; BPoint offset = window->Frame().LeftTop() - windowPosition; BRect frame = _WindowFrame(workspaceFrame, screenFrame, window->Frame(), windowPosition); Decorator *decorator = window->Decorator(); BRect tabFrame(0, 0, 0, 0); if (decorator != NULL) tabFrame = decorator->TabRect(); tabFrame = _WindowFrame(workspaceFrame, screenFrame, tabFrame, tabFrame.LeftTop() - offset); if (!workspaceFrame.Intersects(frame) && !workspaceFrame.Intersects(tabFrame)) return; rgb_color activeTabColor = (rgb_color){ 255, 203, 0, 255 }; rgb_color inactiveTabColor = (rgb_color){ 232, 232, 232, 255 }; rgb_color navColor = (rgb_color){ 0, 0, 229, 255 }; if (decorator != NULL) { activeTabColor = decorator->UIColor(B_WINDOW_TAB_COLOR); inactiveTabColor = decorator->UIColor(B_WINDOW_INACTIVE_TAB_COLOR); navColor = decorator->UIColor(B_NAVIGATION_BASE_COLOR); } // TODO: let decorator do this! rgb_color frameColor = (rgb_color){ 180, 180, 180, 255 }; rgb_color white = (rgb_color){ 255, 255, 255, 255 }; rgb_color tabColor = inactiveTabColor; if (window->IsFocus()) tabColor = activeTabColor; if (!active) { _DarkenColor(tabColor); _DarkenColor(frameColor); _DarkenColor(white); } if (window == fSelectedWindow) { frameColor = navColor; } if (tabFrame.left < frame.left) tabFrame.left = frame.left; if (tabFrame.right >= frame.right) tabFrame.right = frame.right - 1; tabFrame.bottom = frame.top - 1; tabFrame.top = min_c(tabFrame.top, tabFrame.bottom); tabFrame = tabFrame & workspaceFrame; if (decorator != NULL && tabFrame.IsValid()) { drawingEngine->FillRect(tabFrame, tabColor); backgroundRegion.Exclude(tabFrame); } drawingEngine->StrokeRect(frame, frameColor); BRect fillFrame = frame.InsetByCopy(1, 1) & workspaceFrame; frame = frame & workspaceFrame; if (!frame.IsValid()) return; // fill the window itself drawingEngine->FillRect(fillFrame, white); // draw title // TODO: the mini-window functionality should probably be moved into the // Window class, so that it has only to be recalculated on demand. With // double buffered windows, this would also open up the door to have a // more detailed preview. BString title(window->Title()); const ServerFont& font = fDrawState->Font(); font.TruncateString(&title, B_TRUNCATE_END, fillFrame.Width() - 4); font_height fontHeight; font.GetHeight(fontHeight); float height = ceilf(fontHeight.ascent) + ceilf(fontHeight.descent); if (title.Length() > 0 && height < frame.Height() - 2) { rgb_color textColor = tint_color(white, B_DARKEN_4_TINT); drawingEngine->SetHighColor(textColor); drawingEngine->SetLowColor(white); float width = font.StringWidth(title.String(), title.Length()); BPoint textOffset; textOffset.x = rintf(frame.left + (frame.Width() - width) / 2); textOffset.y = rintf(frame.top + (frame.Height() - height) / 2 + fontHeight.ascent); drawingEngine->DrawString(title.String(), title.Length(), textOffset); } // prevent the next window down from drawing over this window backgroundRegion.Exclude(frame); }
NetPrefsServerView::NetPrefsServerView (BRect bounds, const char *name, BMessenger target) : BView ( bounds, name, B_FOLLOW_ALL_SIDES, B_WILL_DRAW), fEntryWin (NULL), fNetWin (target) { SetViewColor (ui_color (B_PANEL_BACKGROUND_COLOR)); BRect boundsRect (Bounds ()); BBox *mainBox (new BBox (bounds.InsetByCopy (-1, -1), NULL, B_FOLLOW_ALL_SIDES)); AddChild (mainBox); fSelectTitleString = new BStringView (BRect (0, 0, 0, 0), NULL, "Select servers for"); fSelectTitleString->ResizeToPreferred (); mainBox->AddChild (fSelectTitleString); fSelectTitleString->MoveTo (11, 11); fServerList = new BColumnListView (BRect (0, 0, boundsRect.Width () - 10, boundsRect.Height () / 2), "fServerList", B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW, B_PLAIN_BORDER); fServerList->SetSelectionMessage (new BMessage (M_SERVER_ITEM_SELECTED)); mainBox->AddChild (fServerList); fServerList->MoveTo (5, fSelectTitleString->Frame ().bottom + 3); BStringColumn *status (new BStringColumn (S_PREFSERVER_STATUS_COLUMN, be_plain_font->StringWidth ("Status") * 2, 0, bounds.Width (), 0, B_ALIGN_CENTER)); fServerList->AddColumn (status, 0); BStringColumn *data (new BStringColumn (S_PREFSERVER_SERVER_COLUMN, be_plain_font->StringWidth ("Server") * 2, 0, bounds.Width (), 0)); fServerList->AddColumn (data, 1); BStringColumn *port (new BStringColumn (S_PREFSERVER_PORT_COLUMN, be_plain_font->StringWidth ("Port") * 2, 0, bounds.Width (), 0)); fServerList->AddColumn (port, 2); fAddButton = new BButton (BRect (0, 0, 0, 0), NULL, S_PREFSERVER_ADD_BUTTON B_UTF8_ELLIPSIS, new BMessage (M_SERVER_ADD_ITEM)); fRemoveButton = new BButton (BRect (0, 0, 0, 0), NULL, S_PREFSERVER_REMOVE_BUTTON, new BMessage (M_SERVER_REMOVE_ITEM)); fEditButton = new BButton (BRect (0, 0, 0, 0), NULL, S_PREFSERVER_EDIT_BUTTON B_UTF8_ELLIPSIS, new BMessage (M_SERVER_EDIT_ITEM)); fAddButton->ResizeToPreferred (); fRemoveButton->ResizeToPreferred (); fEditButton->ResizeToPreferred (); fRemoveButton->MoveTo (fServerList->Frame ().right - fRemoveButton->Frame ().Width (), fServerList->Frame ().bottom + 5); mainBox->AddChild (fRemoveButton); fAddButton->MoveTo (fRemoveButton->Frame ().left - (fAddButton->Frame ().Width () + 5), fRemoveButton->Frame ().top); mainBox->AddChild (fAddButton); fEditButton->MoveTo (fAddButton->Frame ().left - (fEditButton->Frame ().Width () + 15), fAddButton->Frame ().top); mainBox->AddChild (fEditButton); BStringView *legend1 = new BStringView (BRect (0, 0, 0, 0), "str1", S_PREFSERVER_DESC1); legend1->ResizeToPreferred (); mainBox->AddChild (legend1); legend1->MoveTo (fServerList->Frame ().left + 5, fAddButton->Frame ().bottom + 5); BStringView *legend2 = new BStringView (BRect (0, 0, 0, 0), "str1", S_PREFSERVER_DESC2); legend2->ResizeToPreferred (); mainBox->AddChild (legend2); legend2->MoveTo (legend1->Frame ().left, legend1->Frame ().bottom); BStringView *legend3 = new BStringView (BRect (0, 0, 0, 0), "str1", S_PREFSERVER_DESC3); legend3->ResizeToPreferred (); mainBox->AddChild (legend3); legend3->MoveTo (legend2->Frame ().left, legend2->Frame ().bottom); fLegend4 = new BStringView (BRect (0, 0, 0, 0), "str1", S_PREFSERVER_DESC4); fLegend4->ResizeToPreferred (); mainBox->AddChild (fLegend4); fLegend4->MoveTo (legend3->Frame ().left, legend3->Frame ().bottom); fOkButton = new BButton (BRect (0, 0, 0, 0), NULL, S_PREFSERVER_OK_BUTTON, new BMessage (B_QUIT_REQUESTED)); fOkButton->ResizeToPreferred (); mainBox->AddChild (fOkButton); fOkButton->MoveTo (fServerList->Frame ().right - fOkButton->Frame ().Width (), fLegend4->Frame ().bottom + 5); }
/*! \brief Init user interface regardless of the parameter of constructor. */ void EventEditorMainWindow::InitUI() { ClearUI(); MainView = new BView( BWindow::Bounds(), "Event Editor Main View", B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS ); if ( MainView != NULL ) { MainView->SetViewColor( ui_color(B_PANEL_BACKGROUND_COLOR ) ); BWindow::AddChild( MainView ); } else { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } BGridLayout* layout = new BGridLayout( B_VERTICAL ); if ( !layout ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } MainView->SetLayout( layout ); layout->SetInsets( 0, 0, 0, 5 ); layout->SetSpacing( 0, 2 ); menuBar = CreateMenuBar(); layout->AddView( menuBar, 0, 0 ); BTabView* tabView = new BTabView( Bounds().InsetBySelf( 5, 30 ), "Tab view" ); if ( !tabView ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } BLayoutItem* layoutItem = layout->AddView( tabView, 0, 1 ); if ( layoutItem ) { layoutItem->SetExplicitAlignment( BAlignment( B_ALIGN_USE_FULL_WIDTH, B_ALIGN_USE_FULL_HEIGHT ) ); } BRect individualTab = tabView->Bounds(); individualTab.bottom -= ( tabView->TabHeight() + 20 + menuBar->Bounds().Height() ); // Enable firing the activity in any case fData.SetEventActivityFired( false ); // General view genView = new EventEditor_GeneralView( individualTab, &fData ); if ( !genView || genView->InitCheck() != B_OK ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } BTab* tab = new BTab(); tabView->AddTab( genView, tab ); tab->SetLabel( "General" ); // Reminder view remView = new EventEditor_ReminderView( individualTab, &fData ); if ( !remView || remView->InitCheck() != B_OK ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } tab = new BTab(); tabView->AddTab( remView, tab ); tab->SetLabel( "Reminder" ); // Event activity actView = new ActivityView( individualTab.InsetByCopy( 5, 5 ), "Event activity", fData.GetEventActivity() ); if ( !actView || actView->InitCheck() != B_OK ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } tab = new BTab(); tabView->AddTab( actView, tab ); tab->SetLabel( "Activity" ); // Note view noteView = new EventEditor_NoteView( individualTab.InsetByCopy( 5, 5 ), &fData ); if ( !noteView || noteView->InitCheck() != B_OK ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } tab = new BTab(); tabView->AddTab( noteView, tab ); tab->SetLabel( "Note" ); menuBar->SetTargetForItems( this ); // Save button saveAndClose = new BButton( BRect( 0, 0, 1, 1 ), "Save", "Save", new BMessage( kFileSave ) ); if ( !saveAndClose ) { global_toReturn = B_NO_MEMORY; be_app->PostMessage( B_QUIT_REQUESTED ); } BLayoutItem* layoutItem2 = layout->AddView( saveAndClose, 0, 2 ); if ( layoutItem ) { layoutItem->SetExplicitAlignment( BAlignment( B_ALIGN_RIGHT, B_ALIGN_BOTTOM ) ); } saveAndClose->SetTarget( this ); layout->SetMaxRowHeight( 1, 520 ); layout->SetMinRowHeight( 2, 25 ); // Refresh view InvalidateLayout(); MainView->Invalidate(); } // <-- end of UI initialization for MainWindow
void BRadioButton::Draw(BRect updateRect) { if (Window() == NULL) return; BFont font; GetFont(&font); font_height fontHeight; font.GetHeight(&fontHeight); float sHeight = fontHeight.ascent + fontHeight.descent; BRect rect = Frame().OffsetToSelf(B_ORIGIN); rect.InsetBy(5, (rect.Height() - sHeight) / 2); if (rect.IsValid() == false) return; if ((IsFocus() || IsFocusChanging()) && IsEnabled() && Label() != NULL) { BPoint penLocation; penLocation.Set(rect.left + rect.Height() + 5, rect.Center().y + sHeight / 2 + 1); SetHighColor((IsFocus() && Window()->IsActivate()) ? ui_color(B_NAVIGATION_BASE_COLOR) : ViewColor()); StrokeLine(penLocation, penLocation + BPoint(font.StringWidth(Label()), 0)); } if (IsFocusChanging()) return; rgb_color shineColor = ui_color(B_SHINE_COLOR); rgb_color shadowColor = ui_color(B_SHADOW_COLOR); if (!IsEnabled()) { shineColor.disable(ViewColor()); shadowColor.disable(ViewColor()); } rect.right = rect.left + rect.Height(); SetHighColor(shineColor.mix_copy(0, 0, 0, 5)); FillEllipse(rect); SetHighColor(shineColor); StrokeArc(rect, 225, 180); SetHighColor(shadowColor); StrokeArc(rect, 45, 180); if (Value() == B_CONTROL_ON) { SetHighColor(shadowColor.mix_copy(255, 255, 255, 50)); BRect r = rect.InsetByCopy(3, 3); FillEllipse(r); } if (Label() != NULL) { BPoint penLocation; penLocation.x = rect.right + 5; penLocation.y = rect.Center().y - sHeight / 2.f; penLocation.y += fontHeight.ascent + 1; SetHighColor(IsEnabled() ? ui_color(B_PANEL_TEXT_COLOR) : ui_color(B_SHINE_COLOR).disable(ViewColor())); SetLowColor(ViewColor()); DrawString(Label(), penLocation); if (!IsEnabled()) { SetHighColor(ui_color(B_SHADOW_COLOR).disable(ViewColor())); DrawString(Label(), penLocation - BPoint(1, 1)); } } }