BAlignment BAbstractSpinner::LayoutAlignment() { _ValidateLayoutData(); return BLayoutUtils::ComposeAlignment(ExplicitAlignment(), BAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_CENTER)); }
BSize BAbstractSpinner::PreferredSize() { _ValidateLayoutData(); return BLayoutUtils::ComposeSize(ExplicitPreferredSize(), fLayoutData->min); }
BSize BMenuField::PreferredSize() { CALLED(); _ValidateLayoutData(); return BLayoutUtils::ComposeSize(ExplicitPreferredSize(), fLayoutData->min); }
BSize BTextControl::PreferredSize() { CALLED(); _ValidateLayoutData(); return BLayoutUtils::ComposeSize(ExplicitPreferredSize(), fLayoutData->min); }
BSize BBox::MaxSize() { _ValidateLayoutData(); BSize size = (GetLayout() ? GetLayout()->MaxSize() : fLayoutData->max); return BLayoutUtils::ComposeSize(ExplicitMaxSize(), size); }
BSize BBox::PreferredSize() { _ValidateLayoutData(); BSize size = (GetLayout() ? GetLayout()->PreferredSize() : fLayoutData->preferred); return BLayoutUtils::ComposeSize(ExplicitPreferredSize(), size); }
BAlignment BTextControl::LayoutAlignment() { CALLED(); _ValidateLayoutData(); return BLayoutUtils::ComposeAlignment(ExplicitAlignment(), BAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_UNSET)); }
void BTextControl::DoLayout() { // Bail out, if we shan't do layout. if (!(Flags() & B_SUPPORTS_LAYOUT)) return; CALLED(); // If the user set a layout, we let the base class version call its // hook. if (GetLayout()) { BView::DoLayout(); return; } _ValidateLayoutData(); // validate current size BSize size(Bounds().Size()); if (size.width < fLayoutData->min.width) size.width = fLayoutData->min.width; if (size.height < fLayoutData->min.height) size.height = fLayoutData->min.height; BRect dirty(fText->Frame()); BRect textFrame; // divider float divider = 0; if (fLayoutData->text_view_layout_item != NULL) { if (fLayoutData->label_layout_item != NULL) { // We have layout items. They define the divider location. divider = fabs(fLayoutData->text_view_layout_item->Frame().left - fLayoutData->label_layout_item->Frame().left); } textFrame = fLayoutData->text_view_layout_item->FrameInParent(); } else { if (fLayoutData->label_width > 0) { divider = fLayoutData->label_width + be_control_look->DefaultLabelSpacing(); } textFrame.Set(divider, 0, size.width, size.height); } // place the text view and set the divider textFrame.InsetBy(kFrameMargin, kFrameMargin); BLayoutUtils::AlignInFrame(fText, textFrame); fDivider = divider; // invalidate dirty region dirty = dirty | fText->Frame(); dirty.InsetBy(-kFrameMargin, -kFrameMargin); Invalidate(dirty); }
//! This function is not part of the R5 API and is not yet finalized yet float BBox::TopBorderOffset() { _ValidateLayoutData(); if (fLabel != NULL || fLabelView != NULL) return fLayoutData->label_box.Height() / 2; return 0; }
// MaxSize BSize IconOptionsControl::MaxSize() { _ValidateLayoutData(); BSize max = fLayoutData->min; max.width = B_SIZE_UNLIMITED; return BLayoutUtils::ComposeSize(ExplicitMaxSize(), max); }
void BBox::GetPreferredSize(float *_width, float *_height) { _ValidateLayoutData(); if (_width) *_width = fLayoutData->preferred.width; if (_height) *_height = fLayoutData->preferred.height; }
BSize BAbstractSpinner::MaxSize() { _ValidateLayoutData(); BSize max = fLayoutData->min; max.width = B_SIZE_UNLIMITED; return BLayoutUtils::ComposeSize(ExplicitMaxSize(), max); }
void BTextControl::_ValidateLayout() { CALLED(); _ValidateLayoutData(); ResizeTo(Bounds().Width(), fLayoutData->min.height); _LayoutTextView(); }
// GetPreferredSize void IconOptionsControl::GetPreferredSize(float *_width, float *_height) { _ValidateLayoutData(); if (_width) *_width = fLayoutData->min.width; if (_height) *_height = fLayoutData->min.height; }
BSize BTextControl::MaxSize() { CALLED(); _ValidateLayoutData(); BSize max = fLayoutData->min; max.width = B_SIZE_UNLIMITED; return BLayoutUtils::ComposeSize(ExplicitMaxSize(), max); }
void BMenuField::DoLayout() { // Bail out, if we shan't do layout. if (!(Flags() & B_SUPPORTS_LAYOUT)) return; CALLED(); // If the user set a layout, we let the base class version call its // hook. if (GetLayout()) { BView::DoLayout(); return; } _ValidateLayoutData(); // validate current size BSize size(Bounds().Size()); if (size.width < fLayoutData->min.width) size.width = fLayoutData->min.width; if (size.height < fLayoutData->min.height) size.height = fLayoutData->min.height; // divider float divider = 0; if (fLayoutData->label_layout_item && fLayoutData->menu_bar_layout_item) { // We have layout items. They define the divider location. divider = fLayoutData->menu_bar_layout_item->Frame().left - fLayoutData->label_layout_item->Frame().left; } else { if (fLayoutData->label_width > 0) divider = fLayoutData->label_width + 5; } // menu bar BRect dirty(fMenuBar->Frame()); BRect menuBarFrame(divider + kVMargin, kVMargin, size.width - kVMargin, size.height - kVMargin); // place the menu bar and set the divider BLayoutUtils::AlignInFrame(fMenuBar, menuBarFrame); fDivider = divider; // invalidate dirty region dirty = dirty | fMenuBar->Frame(); dirty.InsetBy(-kVMargin, -kVMargin); Invalidate(dirty); }
//! This function is not part of the R5 API and is not yet finalized yet BRect BBox::InnerFrame() { _ValidateLayoutData(); BRect frame(Bounds()); frame.left += fLayoutData->insets.left; frame.top += fLayoutData->insets.top; frame.right -= fLayoutData->insets.right; frame.bottom -= fLayoutData->insets.bottom; return frame; }
void BMenuField::GetPreferredSize(float* _width, float* _height) { CALLED(); _ValidateLayoutData(); if (_width) *_width = fLayoutData->min.width; if (_height) *_height = fLayoutData->min.height; }
void BBox::DoLayout() { // Bail out, if we shan't do layout. if (!(Flags() & B_SUPPORTS_LAYOUT)) return; bool layouted = GetLayout() ? true : false; // If the user set a layout, let the base class version call its // hook. In case when we have BView as a label, remove it from child list // so it won't be layouted with the rest of views and add it again // after that. if (layouted) { if (fLabelView) RemoveChild(fLabelView); BView::DoLayout(); if (fLabelView) AddChild(fLabelView, ChildAt(0)); else return; } _ValidateLayoutData(); // Even if the user set a layout, restore label view to it's // desired position. // layout the label view if (fLabelView) { fLabelView->MoveTo(fLayoutData->label_box.LeftTop()); fLabelView->ResizeTo(fLayoutData->label_box.Size()); } // If we have layout return here and do not layout the child if (layouted) return; // layout the child if (BView* child = _Child()) { BRect frame(Bounds()); frame.left += fLayoutData->insets.left; frame.top += fLayoutData->insets.top; frame.right -= fLayoutData->insets.right; frame.bottom -= fLayoutData->insets.bottom; BLayoutUtils::AlignInFrame(child, frame); } }
void BAbstractSpinner::DoLayout() { if ((Flags() & B_SUPPORTS_LAYOUT) == 0) return; if (GetLayout()) { BControl::DoLayout(); return; } _ValidateLayoutData(); BSize size(Bounds().Size()); if (size.width < fLayoutData->min.width) size.width = fLayoutData->min.width; if (size.height < fLayoutData->min.height) size.height = fLayoutData->min.height; float divider = 0; if (fLayoutData->label_layout_item != NULL && fLayoutData->text_view_layout_item != NULL && fLayoutData->label_layout_item->Frame().IsValid() && fLayoutData->text_view_layout_item->Frame().IsValid()) { divider = fLayoutData->text_view_layout_item->Frame().left - fLayoutData->label_layout_item->Frame().left; } else if (fLayoutData->label_width > 0) { divider = fLayoutData->label_width + be_control_look->DefaultLabelSpacing(); } fDivider = divider; BRect dirty(fTextView->Frame()); _LayoutTextView(); // invalidate dirty region dirty = dirty | fTextView->Frame(); dirty = dirty | fIncrement->Frame(); dirty = dirty | fDecrement->Frame(); Invalidate(dirty); }
void BAbstractSpinner::_DrawLabel(BRect updateRect) { BRect rect(Bounds()); rect.right = fDivider; if (!rect.IsValid() || !rect.Intersects(updateRect)) return; _ValidateLayoutData(); const char* label = Label(); if (label == NULL) return; // horizontal position float x; switch (fAlignment) { case B_ALIGN_RIGHT: x = fDivider - fLayoutData->label_width - 3.0f; break; case B_ALIGN_CENTER: x = fDivider - roundf(fLayoutData->label_width / 2.0f); break; default: x = 0.0f; break; } // vertical position font_height& fontHeight = fLayoutData->font_info; float y = rect.top + roundf((rect.Height() + 1.0f - fontHeight.ascent - fontHeight.descent) / 2.0f) + fontHeight.ascent + kFrameMargin * 2; uint32 flags = 0; if (!IsEnabled()) flags |= BControlLook::B_DISABLED; be_control_look->DrawLabel(this, label, LowColor(), flags, BPoint(x, y)); }
void BBox::Draw(BRect updateRect) { _ValidateLayoutData(); PushState(); BRect labelBox = BRect(0, 0, 0, 0); if (fLabel != NULL) { labelBox = fLayoutData->label_box; BRegion update(updateRect); update.Exclude(labelBox); ConstrainClippingRegion(&update); } else if (fLabelView != NULL) labelBox = fLabelView->Bounds(); switch (fStyle) { case B_FANCY_BORDER: _DrawFancy(labelBox); break; case B_PLAIN_BORDER: _DrawPlain(labelBox); break; default: break; } if (fLabel) { ConstrainClippingRegion(NULL); font_height fontHeight; GetFontHeight(&fontHeight); SetHighColor(0, 0, 0); DrawString(fLabel, BPoint(10.0f, ceilf(fontHeight.ascent))); } PopState(); }
void BTextControl::GetPreferredSize(float *_width, float *_height) { CALLED(); _ValidateLayoutData(); if (_width) { float minWidth = fLayoutData->min.width; if (Label() == NULL && !(Flags() & B_SUPPORTS_LAYOUT)) { // Indeed, only if there is no label! BeOS backwards compatible // behavior: minWidth = max_c(minWidth, Bounds().Width()); } *_width = minWidth; } if (_height) *_height = fLayoutData->min.height; }
void BMenuField::DrawLabel(BRect bounds, BRect update) { CALLED(); _ValidateLayoutData(); font_height& fh = fLayoutData->font_info; if (Label()) { SetLowColor(ViewColor()); // horizontal alignment float x; switch (fAlign) { case B_ALIGN_RIGHT: x = fDivider - fLayoutData->label_width - 3.0; break; case B_ALIGN_CENTER: x = fDivider - fLayoutData->label_width / 2.0; break; default: x = 0.0; break; } // vertical alignment float y = Bounds().top + (Bounds().Height() + 1 - fh.ascent - fh.descent) / 2 + fh.ascent; y = floor(y + 0.5); SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), IsEnabled() ? B_DARKEN_MAX_TINT : B_DISABLED_LABEL_TINT)); DrawString(Label(), BPoint(x, y)); } }
// PreferredSize BSize IconOptionsControl::PreferredSize() { _ValidateLayoutData(); return BLayoutUtils::ComposeSize(ExplicitPreferredSize(), fLayoutData->min); }
void BTextControl::Draw(BRect updateRect) { bool enabled = IsEnabled(); bool active = fText->IsFocus() && Window()->IsActive(); BRect rect = fText->Frame(); rect.InsetBy(-2, -2); if (be_control_look != NULL) { rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR); uint32 flags = 0; if (!enabled) flags |= BControlLook::B_DISABLED; if (active) flags |= BControlLook::B_FOCUSED; be_control_look->DrawTextControlBorder(this, rect, updateRect, base, flags); rect = Bounds(); rect.right = fDivider - kLabelInputSpacing; // rect.right = fText->Frame().left - 2; // rect.right -= 3;//be_control_look->DefaultLabelSpacing(); be_control_look->DrawLabel(this, Label(), rect, updateRect, base, flags, BAlignment(fLabelAlign, B_ALIGN_MIDDLE)); return; } // outer bevel rgb_color noTint = ui_color(B_PANEL_BACKGROUND_COLOR); rgb_color lighten1 = tint_color(noTint, B_LIGHTEN_1_TINT); rgb_color lighten2 = tint_color(noTint, B_LIGHTEN_2_TINT); rgb_color lightenMax = tint_color(noTint, B_LIGHTEN_MAX_TINT); rgb_color darken1 = tint_color(noTint, B_DARKEN_1_TINT); rgb_color darken2 = tint_color(noTint, B_DARKEN_2_TINT); rgb_color darken4 = tint_color(noTint, B_DARKEN_4_TINT); rgb_color navigationColor = ui_color(B_KEYBOARD_NAVIGATION_COLOR); if (enabled) SetHighColor(darken1); else SetHighColor(noTint); StrokeLine(rect.LeftBottom(), rect.LeftTop()); StrokeLine(rect.RightTop()); if (enabled) SetHighColor(lighten2); else SetHighColor(lighten1); StrokeLine(BPoint(rect.left + 1.0f, rect.bottom), rect.RightBottom()); StrokeLine(BPoint(rect.right, rect.top + 1.0f), rect.RightBottom()); // inner bevel rect.InsetBy(1.0f, 1.0f); if (active) { SetHighColor(navigationColor); StrokeRect(rect); } else { if (enabled) SetHighColor(darken4); else SetHighColor(darken2); StrokeLine(rect.LeftTop(), rect.LeftBottom()); StrokeLine(rect.LeftTop(), rect.RightTop()); SetHighColor(noTint); StrokeLine(BPoint(rect.left + 1.0f, rect.bottom), rect.RightBottom()); StrokeLine(BPoint(rect.right, rect.top + 1.0f)); } // label if (Label()) { _ValidateLayoutData(); font_height& fontHeight = fLayoutData->font_info; float y = Bounds().top + (Bounds().Height() + 1 - fontHeight.ascent - fontHeight.descent) / 2 + fontHeight.ascent; float x; float labelWidth = StringWidth(Label()); switch (fLabelAlign) { case B_ALIGN_RIGHT: x = fDivider - labelWidth - kLabelInputSpacing; break; case B_ALIGN_CENTER: x = fDivider - labelWidth / 2.0; break; default: x = 0.0; break; } BRect labelArea(x, Bounds().top, x + labelWidth, Bounds().bottom); if (x < fDivider && updateRect.Intersects(labelArea)) { labelArea.right = fText->Frame().left - kLabelInputSpacing; BRegion clipRegion(labelArea); ConstrainClippingRegion(&clipRegion); SetHighColor(IsEnabled() ? ui_color(B_CONTROL_TEXT_COLOR) : tint_color(noTint, B_DISABLED_LABEL_TINT)); DrawString(Label(), BPoint(x, y)); } } }