void FontSelectionView::SetDefaults() { font_family family; font_style style; float size; const char* fontName; if (strcmp(Name(), "menu") == 0) fontName = "plain"; else fontName = Name(); if (_get_system_default_font_(fontName, family, style, &size) != B_OK) { Revert(); return; } BFont defaultFont; defaultFont.SetFamilyAndStyle(family, style); defaultFont.SetSize(size); if (defaultFont == fCurrentFont) return; _SelectCurrentFont(false); fCurrentFont = defaultFont; _UpdateFontPreview(); _SelectCurrentFont(true); _SelectCurrentSize(); }
FontSelectionView::FontSelectionView(const char* name, const char* label, const BFont* currentFont) : BView(name, B_WILL_DRAW), fMessageTarget(this) { if (currentFont == NULL) { if (!strcmp(Name(), "plain")) fCurrentFont = *be_plain_font; else if (!strcmp(Name(), "bold")) fCurrentFont = *be_bold_font; else if (!strcmp(Name(), "fixed")) fCurrentFont = *be_fixed_font; else if (!strcmp(Name(), "menu")) { menu_info info; get_menu_info(&info); fCurrentFont.SetFamilyAndStyle(info.f_family, info.f_style); fCurrentFont.SetSize(info.font_size); } } else fCurrentFont = *currentFont; fSavedFont = fCurrentFont; fFontsMenu = new BPopUpMenu("font menu"); // font menu fFontsMenuField = new BMenuField("fonts", label, fFontsMenu); fFontsMenuField->SetAlignment(B_ALIGN_RIGHT); // font size BMessage* fontSizeMessage = new BMessage(kMsgSetSize); fontSizeMessage->AddString("name", Name()); fFontSizeSpinner = new BSpinner("font size", B_TRANSLATE("Size:"), fontSizeMessage); fFontSizeSpinner->SetRange(kMinSize, kMaxSize); fFontSizeSpinner->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); // preview fPreviewTextView = new BStringView("preview text", kPreviewText); fPreviewTextView->SetFont(&fCurrentFont); fPreviewTextView->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); // box around preview fPreviewBox = new BBox("preview box", B_WILL_DRAW | B_FRAME_EVENTS); fPreviewBox->AddChild(BGroupLayoutBuilder(B_HORIZONTAL) .Add(fPreviewTextView) .SetInsets(B_USE_SMALL_SPACING, B_USE_SMALL_SPACING, B_USE_SMALL_SPACING, B_USE_SMALL_SPACING) .TopView() ); _SelectCurrentSize(); }
void FontSelectionView::SetFont(const BFont& font) { if (font == fCurrentFont && font == fSavedFont) return; _SelectCurrentFont(false); fSavedFont = fCurrentFont = font; _UpdateFontPreview(); _SelectCurrentFont(true); _SelectCurrentSize(true); }
void FontSelectionView::Revert() { if (!IsRevertable()) return; _SelectCurrentFont(false); fCurrentFont = fSavedFont; _UpdateFontPreview(); _SelectCurrentFont(true); _SelectCurrentSize(true); }
void FontSelectionView::SetDefaults() { BFont defaultFont = _DefaultFont(); if (defaultFont == fCurrentFont) return; _SelectCurrentFont(false); fCurrentFont = defaultFont; _UpdateFontPreview(); _SelectCurrentFont(true); _SelectCurrentSize(true); }