Patch by Andrej Spielmann (GSOC):
* Extend the Fonts preflet to offer the new subpixel rendering and hinting options in a new "Advanced Settings" tab. * Remove trailing white space. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26364 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,279 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2008, Haiku. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Andrej Spielmann, <[email protected]>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "AdvancedSettingsView.h"
|
||||||
|
#include "MainWindow.h"
|
||||||
|
|
||||||
|
#include <Box.h>
|
||||||
|
#include <MenuField.h>
|
||||||
|
#include <MenuItem.h>
|
||||||
|
#include <PopUpMenu.h>
|
||||||
|
#include <String.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define INSTANT_UPDATE
|
||||||
|
// if defined, the changes will take place immediately and not only on exit
|
||||||
|
#define DISABLE_HINTING_CONTROL
|
||||||
|
// if defined, the hinting menu is disabled (hinting not properly
|
||||||
|
// implemented)
|
||||||
|
|
||||||
|
static const int32 kMsgSetAntialiasing = 'anti';
|
||||||
|
static const int32 kMsgSetHinting = 'hint';
|
||||||
|
static const char* kSubpixelLabel = "Subpixel antialiasing";
|
||||||
|
static const char* kGrayscaleLabel = "Grayscale antialiasing";
|
||||||
|
static const char* kNoHintingLabel = "Off";
|
||||||
|
static const char* kFullHintingLabel = "On";
|
||||||
|
|
||||||
|
// private font API
|
||||||
|
extern void _set_font_subpixel_antialiasing_(bool subpix);
|
||||||
|
extern status_t _get_font_subpixel_antialiasing_(bool* subpix);
|
||||||
|
extern void _set_hinting_(bool subpix);
|
||||||
|
extern status_t _get_hinting_(bool* subpix);
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
|
AdvancedSettingsView::AdvancedSettingsView(BRect _rect, const char* name)
|
||||||
|
: BView(_rect, name, B_FOLLOW_LEFT_RIGHT, B_WILL_DRAW)
|
||||||
|
{
|
||||||
|
if (_get_font_subpixel_antialiasing_(&fCurrentSubpixelAntialiasing) != B_OK)
|
||||||
|
fCurrentSubpixelAntialiasing = false;
|
||||||
|
fSavedSubpixelAntialiasing = fCurrentSubpixelAntialiasing;
|
||||||
|
|
||||||
|
if (_get_hinting_(&fCurrentHinting) != B_OK)
|
||||||
|
fCurrentHinting = true;
|
||||||
|
fSavedHinting = fCurrentHinting;
|
||||||
|
|
||||||
|
fDivider = StringWidth("Character hinting:") + 5;
|
||||||
|
|
||||||
|
fAntialiasingMenu = new BPopUpMenu("Antialiasing menu");
|
||||||
|
fHintingMenu = new BPopUpMenu("Hinting menu");
|
||||||
|
|
||||||
|
// antialiasing menu
|
||||||
|
BRect rect(Bounds());
|
||||||
|
fAntialiasingMenuField = new BMenuField(rect, "antialiasing",
|
||||||
|
"Antialiasing type:", fAntialiasingMenu, false);
|
||||||
|
fAntialiasingMenuField->SetDivider(fDivider);
|
||||||
|
fAntialiasingMenuField->SetAlignment(B_ALIGN_RIGHT);
|
||||||
|
fAntialiasingMenuField->ResizeToPreferred();
|
||||||
|
AddChild(fAntialiasingMenuField);
|
||||||
|
_BuildAntialiasingMenu();
|
||||||
|
|
||||||
|
// hinting menu
|
||||||
|
float shift = fAntialiasingMenuField->Bounds().Height()+5;
|
||||||
|
rect.top += shift;
|
||||||
|
rect.bottom += shift;
|
||||||
|
fHintingMenuField = new BMenuField(rect, "hinting",
|
||||||
|
"Character hinting:", fHintingMenu, false);
|
||||||
|
fHintingMenuField->SetDivider(fDivider);
|
||||||
|
fHintingMenuField->SetAlignment(B_ALIGN_RIGHT);
|
||||||
|
fHintingMenuField->ResizeToPreferred();
|
||||||
|
AddChild(fHintingMenuField);
|
||||||
|
_BuildHintingMenu();
|
||||||
|
|
||||||
|
#ifdef DISABLE_HINTING_CONTROL
|
||||||
|
fHintingMenuField->SetEnabled(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_SetCurrentAntialiasing();
|
||||||
|
_SetCurrentHinting();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AdvancedSettingsView::~AdvancedSettingsView()
|
||||||
|
{
|
||||||
|
#ifndef INSTANT_UPDATE
|
||||||
|
_set_font_subpixel_antialiasing_(fCurrentSubpixelAntialiasing);
|
||||||
|
_set_hinting(fCurrentHinting);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::GetPreferredSize(float *_width, float *_height)
|
||||||
|
{
|
||||||
|
// don't change the width if it is large enough
|
||||||
|
if (_width) {
|
||||||
|
*_width = (StringWidth(kSubpixelLabel) > StringWidth(kGrayscaleLabel) ?
|
||||||
|
StringWidth(kSubpixelLabel) : StringWidth(kGrayscaleLabel))
|
||||||
|
+ fDivider + 30;
|
||||||
|
if (*_width < Bounds().Width())
|
||||||
|
*_width = Bounds().Width();
|
||||||
|
}
|
||||||
|
|
||||||
|
*_height = fHintingMenuField->Frame().bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::SetDivider(float divider)
|
||||||
|
{
|
||||||
|
fAntialiasingMenuField->SetDivider(divider);
|
||||||
|
fHintingMenuField->SetDivider(divider);
|
||||||
|
fDivider = divider;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::RelayoutIfNeeded()
|
||||||
|
{
|
||||||
|
float width, height;
|
||||||
|
GetPreferredSize(&width, &height);
|
||||||
|
|
||||||
|
if (width > Bounds().Width() || height > Bounds().Height()) {
|
||||||
|
ResizeTo(width, height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::AttachedToWindow()
|
||||||
|
{
|
||||||
|
if (Parent() != NULL)
|
||||||
|
SetViewColor(Parent()->ViewColor());
|
||||||
|
else
|
||||||
|
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||||
|
fAntialiasingMenu->SetTargetForItems(this);
|
||||||
|
fHintingMenu->SetTargetForItems(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::MessageReceived(BMessage *msg)
|
||||||
|
{
|
||||||
|
switch (msg->what) {
|
||||||
|
case kMsgSetAntialiasing:
|
||||||
|
{
|
||||||
|
bool subpixelAntialiasing;
|
||||||
|
if (msg->FindBool("antialiasing", &subpixelAntialiasing) != B_OK
|
||||||
|
|| subpixelAntialiasing == fCurrentSubpixelAntialiasing)
|
||||||
|
break;
|
||||||
|
fCurrentSubpixelAntialiasing = subpixelAntialiasing;
|
||||||
|
#ifdef INSTANT_UPDATE
|
||||||
|
_set_font_subpixel_antialiasing_(fCurrentSubpixelAntialiasing);
|
||||||
|
#endif
|
||||||
|
Window()->PostMessage(kMsgUpdate);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case kMsgSetHinting:
|
||||||
|
{
|
||||||
|
bool hinting;
|
||||||
|
if (msg->FindBool("hinting", &hinting) != B_OK
|
||||||
|
|| hinting == fCurrentHinting)
|
||||||
|
break;
|
||||||
|
fCurrentHinting = hinting;
|
||||||
|
#ifdef INSTANT_UPDATE
|
||||||
|
_set_hinting_(fCurrentHinting);
|
||||||
|
#endif
|
||||||
|
Window()->PostMessage(kMsgUpdate);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
BView::MessageReceived(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::_BuildAntialiasingMenu()
|
||||||
|
{
|
||||||
|
BMessage* message = new BMessage(kMsgSetAntialiasing);
|
||||||
|
message->AddBool("antialiasing", false);
|
||||||
|
|
||||||
|
BMenuItem* item = new BMenuItem(kGrayscaleLabel, message);
|
||||||
|
|
||||||
|
fAntialiasingMenu->AddItem(item);
|
||||||
|
|
||||||
|
BMessage* message2 = new BMessage(kMsgSetAntialiasing);
|
||||||
|
message2->AddBool("antialiasing", true);
|
||||||
|
|
||||||
|
BMenuItem* item2 = new BMenuItem(kSubpixelLabel, message2);
|
||||||
|
|
||||||
|
fAntialiasingMenu->AddItem(item2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::_BuildHintingMenu()
|
||||||
|
{
|
||||||
|
BMessage* message = new BMessage(kMsgSetHinting);
|
||||||
|
message->AddBool("hinting", false);
|
||||||
|
|
||||||
|
BMenuItem* item = new BMenuItem(kNoHintingLabel, message);
|
||||||
|
|
||||||
|
fHintingMenu->AddItem(item);
|
||||||
|
|
||||||
|
BMessage* message2 = new BMessage(kMsgSetHinting);
|
||||||
|
message2->AddBool("hinting", true);
|
||||||
|
|
||||||
|
BMenuItem* item2 = new BMenuItem(kFullHintingLabel, message2);
|
||||||
|
|
||||||
|
fHintingMenu->AddItem(item2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::_SetCurrentAntialiasing()
|
||||||
|
{
|
||||||
|
BMenuItem *item = fAntialiasingMenu->FindItem(
|
||||||
|
fCurrentSubpixelAntialiasing ? kSubpixelLabel : kGrayscaleLabel);
|
||||||
|
if (item != NULL)
|
||||||
|
item->SetMarked(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::_SetCurrentHinting()
|
||||||
|
{
|
||||||
|
BMenuItem *item = fHintingMenu->FindItem(
|
||||||
|
fCurrentHinting ? kFullHintingLabel : kNoHintingLabel);
|
||||||
|
if (item != NULL)
|
||||||
|
item->SetMarked(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::SetDefaults()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
AdvancedSettingsView::IsDefaultable()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
AdvancedSettingsView::IsRevertable()
|
||||||
|
{
|
||||||
|
return (fCurrentSubpixelAntialiasing != fSavedSubpixelAntialiasing)
|
||||||
|
|| (fCurrentHinting != fSavedHinting);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AdvancedSettingsView::Revert()
|
||||||
|
{
|
||||||
|
if (!IsRevertable())
|
||||||
|
return;
|
||||||
|
|
||||||
|
fCurrentSubpixelAntialiasing = fSavedSubpixelAntialiasing;
|
||||||
|
fCurrentHinting = fSavedHinting;
|
||||||
|
#ifdef INSTANT_UPDATE
|
||||||
|
_set_font_subpixel_antialiasing_(fCurrentSubpixelAntialiasing);
|
||||||
|
_set_hinting_(fCurrentHinting);
|
||||||
|
#endif
|
||||||
|
_SetCurrentAntialiasing();
|
||||||
|
_SetCurrentHinting();
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2001-2005, Haiku.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Andrej Spielmann, <[email protected]>
|
||||||
|
*/
|
||||||
|
#ifndef ADVANCED_SETTINGS_VIEW_H
|
||||||
|
#define ADVANCED_SETTINGS_VIEW_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <View.h>
|
||||||
|
|
||||||
|
class BBox;
|
||||||
|
class BMenuField;
|
||||||
|
class BPopUpMenu;
|
||||||
|
|
||||||
|
|
||||||
|
class AdvancedSettingsView : public BView {
|
||||||
|
public:
|
||||||
|
AdvancedSettingsView(BRect rect, const char* name);
|
||||||
|
virtual ~AdvancedSettingsView();
|
||||||
|
|
||||||
|
virtual void GetPreferredSize(float *_width, float *_height);
|
||||||
|
virtual void RelayoutIfNeeded();
|
||||||
|
virtual void AttachedToWindow();
|
||||||
|
virtual void MessageReceived(BMessage *msg);
|
||||||
|
|
||||||
|
void SetDivider(float divider);
|
||||||
|
|
||||||
|
void SetDefaults();
|
||||||
|
void Revert();
|
||||||
|
bool IsDefaultable();
|
||||||
|
bool IsRevertable();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _BuildAntialiasingMenu();
|
||||||
|
void _SetCurrentAntialiasing();
|
||||||
|
void _BuildHintingMenu();
|
||||||
|
void _SetCurrentHinting();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
float fDivider;
|
||||||
|
|
||||||
|
BMenuField* fAntialiasingMenuField;
|
||||||
|
BPopUpMenu* fAntialiasingMenu;
|
||||||
|
BMenuField* fHintingMenuField;
|
||||||
|
BPopUpMenu* fHintingMenu;
|
||||||
|
|
||||||
|
bool fSavedSubpixelAntialiasing;
|
||||||
|
bool fCurrentSubpixelAntialiasing;
|
||||||
|
bool fSavedHinting;
|
||||||
|
bool fCurrentHinting;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* ADVANCED_SETTINGS_VIEW_H */
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "FontSelectionView.h"
|
#include "FontSelectionView.h"
|
||||||
|
#include "AdvancedSettingsView.h"
|
||||||
|
|
||||||
|
|
||||||
class FontView : public BView {
|
class FontView : public BView {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ AddSubDirSupportedPlatforms libbe_test ;
|
|||||||
|
|
||||||
Preference Fonts :
|
Preference Fonts :
|
||||||
FontSelectionView.cpp
|
FontSelectionView.cpp
|
||||||
|
AdvancedSettingsView.cpp
|
||||||
FontsSettings.cpp
|
FontsSettings.cpp
|
||||||
FontView.cpp
|
FontView.cpp
|
||||||
main.cpp
|
main.cpp
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
* Mark Hogben
|
* Mark Hogben
|
||||||
* DarkWyrm <[email protected]>
|
* DarkWyrm <[email protected]>
|
||||||
* Axel Dörfler, [email protected]
|
* Axel Dörfler, [email protected]
|
||||||
|
* Andrej Spielmann, <[email protected]>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -25,7 +26,7 @@ static const uint32 kMsgCheckFonts = 'chkf';
|
|||||||
|
|
||||||
|
|
||||||
MainWindow::MainWindow()
|
MainWindow::MainWindow()
|
||||||
: BWindow(BRect(100, 100, 445, 340), "Fonts", B_TITLED_WINDOW,
|
: BWindow(BRect(100, 100, 445, 410), "Fonts", B_TITLED_WINDOW,
|
||||||
B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE)
|
B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE)
|
||||||
{
|
{
|
||||||
BRect rect = Bounds();
|
BRect rect = Bounds();
|
||||||
@@ -36,7 +37,8 @@ MainWindow::MainWindow()
|
|||||||
rect.left = 10;
|
rect.left = 10;
|
||||||
rect.top = rect.bottom - 10;
|
rect.top = rect.bottom - 10;
|
||||||
fDefaultsButton = new BButton(rect, "defaults", "Defaults",
|
fDefaultsButton = new BButton(rect, "defaults", "Defaults",
|
||||||
new BMessage(kMsgSetDefaults), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW);
|
new BMessage(kMsgSetDefaults), B_FOLLOW_LEFT
|
||||||
|
| B_FOLLOW_BOTTOM, B_WILL_DRAW);
|
||||||
fDefaultsButton->ResizeToPreferred();
|
fDefaultsButton->ResizeToPreferred();
|
||||||
fDefaultsButton->SetEnabled(false);
|
fDefaultsButton->SetEnabled(false);
|
||||||
float buttonHeight = fDefaultsButton->Bounds().Height();
|
float buttonHeight = fDefaultsButton->Bounds().Height();
|
||||||
@@ -61,6 +63,8 @@ MainWindow::MainWindow()
|
|||||||
rect = tabView->ContainerView()->Bounds().InsetByCopy(5, 8);
|
rect = tabView->ContainerView()->Bounds().InsetByCopy(5, 8);
|
||||||
fFontsView = new FontView(rect);
|
fFontsView = new FontView(rect);
|
||||||
|
|
||||||
|
fAdvancedSettings = new AdvancedSettingsView(rect, "Advanced");
|
||||||
|
|
||||||
tabView->AddTab(fFontsView);
|
tabView->AddTab(fFontsView);
|
||||||
|
|
||||||
fFontsView->UpdateFonts();
|
fFontsView->UpdateFonts();
|
||||||
@@ -83,7 +87,8 @@ MainWindow::MainWindow()
|
|||||||
tabView->ContainerView()->ResizeBy(0, heightDiff);
|
tabView->ContainerView()->ResizeBy(0, heightDiff);
|
||||||
}
|
}
|
||||||
|
|
||||||
ResizeTo(tabView->Bounds().Width() + 10, tabView->Frame().bottom + 20 + buttonHeight);
|
ResizeTo(tabView->Bounds().Width() + 10, tabView->Frame().bottom + 20
|
||||||
|
+ buttonHeight);
|
||||||
view->AddChild(tabView);
|
view->AddChild(tabView);
|
||||||
fFontsView->ResizeToPreferred();
|
fFontsView->ResizeToPreferred();
|
||||||
|
|
||||||
@@ -99,6 +104,23 @@ MainWindow::MainWindow()
|
|||||||
_Center();
|
_Center();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tabView->AddTab(fAdvancedSettings);
|
||||||
|
|
||||||
|
fAdvancedSettings->RelayoutIfNeeded();
|
||||||
|
fAdvancedSettings->GetPreferredSize(&width, &height);
|
||||||
|
|
||||||
|
widthDiff = width + 10 - tabView->ContainerView()->Bounds().Width();
|
||||||
|
if (widthDiff > 0) {
|
||||||
|
tabView->ResizeBy(widthDiff, 0);
|
||||||
|
tabView->ContainerView()->ResizeBy(widthDiff, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
heightDiff = height + 16 - tabView->ContainerView()->Bounds().Height();
|
||||||
|
if (heightDiff > 0) {
|
||||||
|
tabView->ResizeBy(0, heightDiff);
|
||||||
|
tabView->ContainerView()->ResizeBy(0, heightDiff);
|
||||||
|
}
|
||||||
|
|
||||||
fRunner = new BMessageRunner(this, new BMessage(kMsgCheckFonts), 3000000);
|
fRunner = new BMessageRunner(this, new BMessage(kMsgCheckFonts), 3000000);
|
||||||
// every 3 seconds
|
// every 3 seconds
|
||||||
|
|
||||||
@@ -127,19 +149,25 @@ MainWindow::MessageReceived(BMessage *message)
|
|||||||
{
|
{
|
||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
case kMsgUpdate:
|
case kMsgUpdate:
|
||||||
fDefaultsButton->SetEnabled(fFontsView->IsDefaultable());
|
fDefaultsButton->SetEnabled(fFontsView->IsDefaultable()
|
||||||
fRevertButton->SetEnabled(fFontsView->IsRevertable());
|
|| fAdvancedSettings->IsDefaultable());
|
||||||
|
fRevertButton->SetEnabled(fFontsView->IsRevertable()
|
||||||
|
|| fAdvancedSettings->IsRevertable());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kMsgSetDefaults:
|
case kMsgSetDefaults:
|
||||||
fFontsView->SetDefaults();
|
fFontsView->SetDefaults();
|
||||||
|
fAdvancedSettings->SetDefaults();
|
||||||
fDefaultsButton->SetEnabled(false);
|
fDefaultsButton->SetEnabled(false);
|
||||||
fRevertButton->SetEnabled(fFontsView->IsRevertable());
|
fRevertButton->SetEnabled(fFontsView->IsRevertable()
|
||||||
|
|| fAdvancedSettings->IsRevertable());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kMsgRevert:
|
case kMsgRevert:
|
||||||
fFontsView->Revert();
|
fFontsView->Revert();
|
||||||
fDefaultsButton->SetEnabled(fFontsView->IsDefaultable());
|
fAdvancedSettings->Revert();
|
||||||
|
fDefaultsButton->SetEnabled(fFontsView->IsDefaultable()
|
||||||
|
|| fAdvancedSettings->IsDefaultable());
|
||||||
fRevertButton->SetEnabled(false);
|
fRevertButton->SetEnabled(false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "FontsSettings.h"
|
#include "FontsSettings.h"
|
||||||
|
#include "AdvancedSettingsView.h"
|
||||||
|
|
||||||
#include <Window.h>
|
#include <Window.h>
|
||||||
|
|
||||||
@@ -37,6 +38,7 @@ class MainWindow : public BWindow {
|
|||||||
BButton* fRevertButton;
|
BButton* fRevertButton;
|
||||||
|
|
||||||
FontsSettings fSettings;
|
FontsSettings fSettings;
|
||||||
|
AdvancedSettingsView* fAdvancedSettings;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int32 kMsgUpdate = 'updt';
|
static const int32 kMsgUpdate = 'updt';
|
||||||
|
|||||||
Reference in New Issue
Block a user