void TWindowMenuItem::Draw() { if (!fExpanded) { BMenuItem::Draw(); return; } // TODO: Tint this smartly based on the low color, this does // nothing to black. rgb_color menuColor = tint_color(Menu()->LowColor(), 1.07); BRect frame(Frame()); BMenu* menu = Menu(); menu->PushState(); // if not selected or being tracked on, fill with gray TBarView* barview = (static_cast<TBarApp*>(be_app))->BarView(); if ((!IsSelected() && !menu->IsRedrawAfterSticky()) || barview->Dragging() || !IsEnabled()) { rgb_color shadow = tint_color(menuColor, 1.09); menu->SetHighColor(shadow); frame.right = frame.left + kHPad / 2; menu->FillRect(frame); menu->SetHighColor(menuColor); frame.left = frame.right + 1; frame.right = Frame().right; menu->FillRect(frame); } if (IsEnabled() && IsSelected() && !menu->IsRedrawAfterSticky()) { // fill rgb_color backColor = tint_color(menuColor, B_HIGHLIGHT_BACKGROUND_TINT); menu->SetLowColor(backColor); menu->SetHighColor(backColor); menu->FillRect(frame); } else { menu->SetLowColor(menuColor); menu->SetHighColor(menuColor); } DrawContent(); menu->PopState(); }
void ColorMenuItem::Draw /*Content*/() { float w, h; BPoint p; BMenu *m = Menu(); if (m == NULL) return; p = ContentLocation(); GetContentSize(&w, &h); rgb_color c = color; if (!IsEnabled()) { c.green = c.blue = c.red = (uint8) (0.4 * c.red + 0.2 * c.blue + 0.4 * c.green); } m->SetHighColor(c); m->FillRect(BRect(p.x+2, p.y+2, p.x+w-2, p.y+h-2)); if (IsMarked()) { rgb_color blue={0, 0, 255, 255}; m->SetHighColor(blue); m->StrokeRect(BRect(p.x, p.y, p.x+w, p.y+h)); } if (IsSelected()) { rgb_color red={0, 0, 255, 255}; m->SetHighColor(red); m->StrokeRect(BRect(p.x, p.y, p.x+w, p.y+h)); } }
void BitmapMenuItem::Draw(void) { BMenu* menu = Menu(); if (menu) { BRect itemFrame = Frame(); BRect bitmapFrame = itemFrame; bitmapFrame.InsetBy(2, 2); // account for 2-pixel margin menu->SetDrawingMode(B_OP_COPY); menu->SetHighColor(BKG_GREY); menu->FillRect(itemFrame); menu->DrawBitmap(&m_bitmap, bitmapFrame); if (IsSelected()) { // a nonstandard but simple way to draw highlights menu->SetDrawingMode(B_OP_INVERT); menu->SetHighColor(0,0,0); menu->FillRect(itemFrame); } } }
void TTeamMenuItem::Draw() { BRect frame(Frame()); BMenu* menu = Menu(); menu->PushState(); rgb_color menuColor = menu->LowColor(); TBarView* barView = (static_cast<TBarApp*>(be_app))->BarView(); bool canHandle = !barView->Dragging() || barView->AppCanHandleTypes(Signature()); if (be_control_look != NULL) { uint32 flags = 0; if (_IsSelected() && canHandle) flags |= BControlLook::B_ACTIVATED; uint32 borders = BControlLook::B_TOP_BORDER; if (fVertical) { menu->SetHighColor(tint_color(menuColor, B_DARKEN_1_TINT)); borders |= BControlLook::B_LEFT_BORDER | BControlLook::B_RIGHT_BORDER; menu->StrokeLine(frame.LeftBottom(), frame.RightBottom()); frame.bottom--; be_control_look->DrawMenuBarBackground(menu, frame, frame, menuColor, flags, borders); } else { if (flags & BControlLook::B_ACTIVATED) menu->SetHighColor(tint_color(menuColor, B_DARKEN_3_TINT)); else menu->SetHighColor(tint_color(menuColor, 1.22)); borders |= BControlLook::B_BOTTOM_BORDER; menu->StrokeLine(frame.LeftTop(), frame.LeftBottom()); frame.left++; be_control_look->DrawButtonBackground(menu, frame, frame, menuColor, flags, borders); } menu->MovePenTo(ContentLocation()); DrawContent(); menu->PopState(); return; } // if not selected or being tracked on, fill with gray if ((!_IsSelected() && !menu->IsRedrawAfterSticky()) || !canHandle || !IsEnabled()) { frame.InsetBy(1, 1); menu->SetHighColor(menuColor); menu->FillRect(frame); } // draw the gray, unselected item, border if (!_IsSelected() || !IsEnabled()) { rgb_color shadow = tint_color(menuColor, B_DARKEN_1_TINT); rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT); frame = Frame(); menu->SetHighColor(shadow); if (fVertical) menu->StrokeLine(frame.LeftBottom(), frame.RightBottom()); else menu->StrokeLine(frame.LeftBottom() + BPoint(1, 0), frame.RightBottom()); menu->StrokeLine(frame.RightBottom(), frame.RightTop()); menu->SetHighColor(light); menu->StrokeLine(frame.RightTop() + BPoint(-1, 0), frame.LeftTop()); if (fVertical) menu->StrokeLine(frame.LeftTop(), frame.LeftBottom() + BPoint(0, -1)); else menu->StrokeLine(frame.LeftTop(), frame.LeftBottom()); } // if selected or being tracked on, fill with the hilite gray color if (IsEnabled() && _IsSelected() && !menu->IsRedrawAfterSticky() && canHandle) { // fill menu->SetHighColor(tint_color(menuColor, B_HIGHLIGHT_BACKGROUND_TINT)); menu->FillRect(frame); // these continue the dark grey border on the left or top edge menu->SetHighColor(tint_color(menuColor, B_DARKEN_4_TINT)); if (fVertical) { // dark line at top menu->StrokeLine(frame.LeftTop(), frame.RightTop()); } else { // dark line on the left menu->StrokeLine(frame.LeftTop(), frame.LeftBottom()); } } else menu->SetLowColor(menuColor); menu->MovePenTo(ContentLocation()); DrawContent(); menu->PopState(); }
void MemoryBarMenuItem::DrawBar(bool force) { // only draw anything if something has changed if (!force && fWriteMemory == fLastWrite && fAllMemory == fLastAll && fCommittedMemory == fLastCommitted) return; bool selected = IsSelected(); BRect frame = Frame(); BMenu* menu = Menu(); // draw the bar itself BRect rect(frame.right - kMargin - kBarWidth, frame.top + 5, frame.right - kMargin, frame.top + 13); if (fWriteMemory < 0) return; if (fGrenze1 < 0) force = true; if (force) { if (selected) menu->SetHighColor(gFrameColorSelected); else menu->SetHighColor(gFrameColor); menu->StrokeRect(rect); } rect.InsetBy(1, 1); BRect r = rect; double grenze1 = rect.left + (rect.right - rect.left) * float(fWriteMemory) / fCommittedMemory; double grenze2 = rect.left + (rect.right - rect.left) * float(fAllMemory) / fCommittedMemory; if (grenze1 > rect.right) grenze1 = rect.right; if (grenze2 > rect.right) grenze2 = rect.right; r.right = grenze1; if (!force) r.left = fGrenze1; if (r.left < r.right) { if (selected) menu->SetHighColor(gKernelColorSelected); else menu->SetHighColor(gKernelColor); menu->FillRect(r); } r.left = grenze1; r.right = grenze2; if (!force) { if (fGrenze2 > r.left && r.left >= fGrenze1) r.left = fGrenze2; if (fGrenze1 < r.right && r.right <= fGrenze2) r.right = fGrenze1; } if (r.left < r.right) { if (selected) menu->SetHighColor(gUserColorSelected); else menu->SetHighColor(gUserColor); menu->FillRect(r); } r.left = grenze2; r.right = rect.right; if (!force) r.right = fGrenze2; if (r.left < r.right) { if (selected) menu->SetHighColor(gWhiteSelected); else menu->SetHighColor(kWhite); menu->FillRect(r); } menu->SetHighColor(kBlack); fGrenze1 = grenze1; fGrenze2 = grenze2; fLastCommitted = fCommittedMemory; // Draw the values if necessary; if only fCommitedMemory changes, only // the bar might have to be updated if (!force && fWriteMemory == fLastWrite && fAllMemory == fLastAll) return; if (selected) menu->SetLowColor(gMenuBackColorSelected); else menu->SetLowColor(gMenuBackColor); BRect textRect(rect.left - kMargin - gMemoryTextWidth, frame.top, rect.left - kMargin, frame.bottom); menu->FillRect(textRect, B_SOLID_LOW); fLastWrite = fWriteMemory; fLastAll = fAllMemory; menu->SetHighColor(kBlack); char infos[128]; string_for_size(fWriteMemory * 1024.0, infos, sizeof(infos)); BPoint loc(rect.left - kMargin - gMemoryTextWidth / 2 - menu->StringWidth(infos), rect.bottom + 1); menu->DrawString(infos, loc); string_for_size(fAllMemory * 1024.0, infos, sizeof(infos)); loc.x = rect.left - kMargin - menu->StringWidth(infos); menu->DrawString(infos, loc); }
virtual void DrawContent() { BRect b = Frame(); BMenu *parent = Menu(); BPoint loc = parent->PenLocation(); enum { W_CHAR = 0, A_CHAR = 1, OPEN_CHAR = 2, CLOSE_CHAR = 3, SPACE_CHAR = 4, NUM_CHARS = 5 }; float escapements[NUM_CHARS]; BFont font; parent->GetFont(&font); font.GetEscapements("WA() ", NUM_CHARS, escapements); for (int32 i=0; i<NUM_CHARS; i++) { escapements[i] *= font.Size(); } const float blockWidth = escapements[W_CHAR]+escapements[A_CHAR]; const rgb_color old_col = parent->HighColor(); font_height fh; const bool showInitial = !CompareColors(fInitialColor, fColor); b.InsetBy(1, 1); b.bottom -= 1; b.left = loc.x; if (showInitial) { parent->GetFontHeight(&fh); parent->DrawString("(", BPoint(b.left, loc.y+fh.ascent)); } b.left += escapements[OPEN_CHAR]; b.InsetBy(2, 2); b.right = b.left + escapements[W_CHAR]; if (showInitial) { parent->SetHighColor(fInitialColor); parent->FillRect(b); } b.InsetBy(-1, -1); if (showInitial) { parent->SetHighColor(old_col); parent->StrokeRect(b); } b.InsetBy(-1, -1); if (showInitial) { parent->DrawString(")", BPoint(b.right+1, loc.y+fh.ascent)); } b.right += escapements[CLOSE_CHAR] + 1; b.left = b.right + escapements[SPACE_CHAR]; b.right = b.left + blockWidth; parent->SetHighColor(fColor); parent->FillRect(b); parent->SetHighColor(old_col); b.InsetBy(-1, -1); parent->StrokeRect(b); parent->MovePenTo(b.right + escapements[SPACE_CHAR]*2 + 2, loc.y); BMenuItem::DrawContent(); }
void KernelMemoryBarMenuItem::DrawBar(bool force) { bool selected = IsSelected(); BRect frame = Frame(); BMenu* menu = Menu(); // draw the bar itself BRect cadre (frame.right - kMargin - kBarWidth, frame.top + 5, frame.right - kMargin, frame.top + 13); if (fLastSum < 0) force = true; if (force) { if (selected) menu->SetHighColor(gFrameColorSelected); else menu->SetHighColor(gFrameColor); menu->StrokeRect (cadre); } cadre.InsetBy(1, 1); BRect r = cadre; float grenze1 = cadre.left + (cadre.right - cadre.left) * fCachedMemory / fPhysicalMemory; float grenze2 = cadre.left + (cadre.right - cadre.left) * fCommittedMemory / fPhysicalMemory; if (grenze1 > cadre.right) grenze1 = cadre.right; if (grenze2 > cadre.right) grenze2 = cadre.right; r.right = grenze1; if (!force) r.left = fGrenze1; if (r.left < r.right) { if (selected) menu->SetHighColor(gKernelColorSelected); else menu->SetHighColor(gKernelColor); // menu->SetHighColor(gKernelColor); menu->FillRect (r); } r.left = grenze1; r.right = grenze2; if (!force) { if (fGrenze2 > r.left && r.left >= fGrenze1) r.left = fGrenze2; if (fGrenze1 < r.right && r.right <= fGrenze2) r.right = fGrenze1; } if (r.left < r.right) { if (selected) menu->SetHighColor(tint_color (kLavender, B_HIGHLIGHT_BACKGROUND_TINT)); else menu->SetHighColor(kLavender); // menu->SetHighColor(gUserColor); menu->FillRect (r); } r.left = grenze2; r.right = cadre.right; if (!force) r.right = fGrenze2; if (r.left < r.right) { if (selected) menu->SetHighColor(gWhiteSelected); else menu->SetHighColor(kWhite); menu->FillRect(r); } menu->SetHighColor(kBlack); fGrenze1 = grenze1; fGrenze2 = grenze2; // draw the value double sum = fCachedMemory * FLT_MAX + fCommittedMemory; if (force || sum != fLastSum) { if (selected) { menu->SetLowColor(gMenuBackColorSelected); menu->SetHighColor(gMenuBackColorSelected); } else { menu->SetLowColor(gMenuBackColor); menu->SetHighColor(gMenuBackColor); } BRect trect(cadre.left - kMargin - gMemoryTextWidth, frame.top, cadre.left - kMargin, frame.bottom); menu->FillRect(trect); menu->SetHighColor(kBlack); char infos[128]; string_for_size(fCachedMemory * 1024.0, infos, sizeof(infos)); BPoint loc(cadre.left, cadre.bottom + 1); loc.x -= kMargin + gMemoryTextWidth / 2 + menu->StringWidth(infos); menu->DrawString(infos, loc); string_for_size(fCommittedMemory * 1024.0, infos, sizeof(infos)); loc.x = cadre.left - kMargin - menu->StringWidth(infos); menu->DrawString(infos, loc); fLastSum = sum; } }
void TBarMenuTitle::DrawContent() { BMenu* menu = Menu(); BRect frame(Frame()); if (be_control_look != NULL) { menu->SetDrawingMode(B_OP_ALPHA); if (fIcon != NULL) { BRect dstRect(fIcon->Bounds()); dstRect.OffsetTo(frame.LeftTop()); dstRect.OffsetBy(rintf(((frame.Width() - dstRect.Width()) / 2) - 1.0f), rintf(((frame.Height() - dstRect.Height()) / 2) - 0.0f)); menu->DrawBitmapAsync(fIcon, dstRect); } return; } rgb_color menuColor = menu->ViewColor(); rgb_color dark = tint_color(menuColor, B_DARKEN_1_TINT); rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT); rgb_color black = {0, 0, 0, 255}; bool inExpandoMode = dynamic_cast<TExpandoMenuBar*>(menu) != NULL; BRect bounds(menu->Window()->Bounds()); if (bounds.right < frame.right) frame.right = bounds.right; menu->SetDrawingMode(B_OP_COPY); if (!IsSelected() && !menu->IsRedrawAfterSticky()) { menu->BeginLineArray(8); menu->AddLine(frame.RightTop(), frame.LeftTop(), light); menu->AddLine(frame.LeftBottom(), frame.RightBottom(), dark); menu->AddLine(frame.LeftTop(), frame.LeftBottom()+BPoint(0, inExpandoMode ? 0 : -1), light); menu->AddLine(frame.RightBottom(), frame.RightTop(), dark); if (inExpandoMode) { frame.top += 1; menu->AddLine(frame.LeftTop(), frame.RightTop() + BPoint(-1, 0), light); } menu->EndLineArray(); frame.InsetBy(1, 1); menu->SetHighColor(menuColor); menu->FillRect(frame); menu->SetHighColor(black); frame.InsetBy(-1, -1); if (inExpandoMode) frame.top -= 1; } ASSERT(IsEnabled()); if (IsSelected() && !menu->IsRedrawAfterSticky()) { menu->SetHighColor(tint_color(menuColor, B_HIGHLIGHT_BACKGROUND_TINT)); menu->FillRect(frame); if (menu->IndexOf(this) > 0) { menu->SetHighColor(tint_color(menuColor, B_DARKEN_4_TINT)); menu->StrokeLine(frame.LeftTop(), frame.LeftBottom()); } menu->SetHighColor(black); } menu->SetDrawingMode(B_OP_ALPHA); if (fIcon != NULL) { BRect dstRect(fIcon->Bounds()); dstRect.OffsetTo(frame.LeftTop()); dstRect.OffsetBy(rintf(((frame.Width() - dstRect.Width()) / 2) - 1.0f), rintf(((frame.Height() - dstRect.Height()) / 2) - 0.0f)); menu->DrawBitmapAsync(fIcon, dstRect); } }