From John Scipione <jscipione@xxxxxxxxx>:
John Scipione has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/2340 ;)
Change subject: App Server: Detect BeOS app and override font to 10pt SwisBT 720
......................................................................
App Server: Detect BeOS app and override font to 10pt SwisBT 720
and 12pt SwisBT 720 bold for bold font and 12pt Courier10 BT for fixed font.
Fall back to Noto Sans Display or Noto Mono if SwiBT 720 or Courier10 BT is
not found. Fall back to Noto Sans CJK JP for Haiku apps as that is what
we're already doing in GlyphLayoutEngine.h.
Put common code in a private _SetDefaultFonts() method which sets fPlainFont,
fBoldFont, fFixedFont variables. This is called from AS_GET_SYSTEM_FONTS.
---
M src/servers/app/DesktopSettings.cpp
M src/servers/app/DesktopSettings.h
M src/servers/app/DesktopSettingsPrivate.h
M src/servers/app/ServerApp.cpp
M src/servers/app/ServerApp.h
M src/servers/app/ServerConfig.h
M src/servers/app/font/FontManager.cpp
M src/servers/app/font/FontManager.h
8 files changed, 232 insertions(+), 40 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/40/2340/1
diff --git a/src/servers/app/DesktopSettings.cpp
b/src/servers/app/DesktopSettings.cpp
index 8226ed2..bd8d347 100644
--- a/src/servers/app/DesktopSettings.cpp
+++ b/src/servers/app/DesktopSettings.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2015, Haiku.
+ * Copyright 2005-2020 Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
@@ -7,6 +7,7 @@
* Axel Dörfler, axeld@xxxxxxxxxxxxxxxx
* Andrej Spielmann, <andrej.spielmann@xxxxxxxxxxxx>
* Joseph Groover <looncraz@xxxxxxxxxxxx>
+ * John Scipione <jscipione@xxxxxxxxx>
*/
@@ -52,6 +53,10 @@
fBoldFont = *gFontManager->DefaultBoldFont();
fFixedFont = *gFontManager->DefaultFixedFont();
+ fBeOSPlainFont = *gFontManager->BeOSPlainFont();
+ fBeOSBoldFont = *gFontManager->BeOSBoldFont();
+ fBeOSFixedFont = *gFontManager->BeOSFixedFont();
+
fMouseMode = B_NORMAL_MOUSE;
fFocusFollowsMouseMode = B_NORMAL_FOCUS_FOLLOWS_MOUSE;
fAcceptFirstClick = false;
@@ -513,6 +518,26 @@
return fFixedFont;
}
+const ServerFont &
+DesktopSettingsPrivate::BeOSPlainFont() const
+{
+ return fBeOSPlainFont;
+}
+
+
+const ServerFont &
+DesktopSettingsPrivate::BeOSBoldFont() const
+{
+ return fBeOSBoldFont;
+}
+
+
+const ServerFont &
+DesktopSettingsPrivate::BeOSFixedFont() const
+{
+ return fBeOSFixedFont;
+}
+
void
DesktopSettingsPrivate::SetScrollBarInfo(const scroll_bar_info& info)
@@ -857,6 +882,27 @@
void
+DesktopSettings::GetBeOSPlainFont(ServerFont &font) const
+{
+ font = fSettings->BeOSPlainFont();
+}
+
+
+void
+DesktopSettings::GetBeOSBoldFont(ServerFont &font) const
+{
+ font = fSettings->BeOSBoldFont();
+}
+
+
+void
+DesktopSettings::GetBeOSFixedFont(ServerFont &font) const
+{
+ font = fSettings->BeOSFixedFont();
+}
+
+
+void
DesktopSettings::GetScrollBarInfo(scroll_bar_info& info) const
{
info = fSettings->ScrollBarInfo();
diff --git a/src/servers/app/DesktopSettings.h
b/src/servers/app/DesktopSettings.h
index a87c694..1ca03cc 100644
--- a/src/servers/app/DesktopSettings.h
+++ b/src/servers/app/DesktopSettings.h
@@ -45,6 +45,10 @@
void
GetDefaultBoldFont(ServerFont& font) const;
void
GetDefaultFixedFont(ServerFont& font) const;
+ void
GetBeOSPlainFont(ServerFont& font) const;
+ void
GetBeOSBoldFont(ServerFont& font) const;
+ void
GetBeOSFixedFont(ServerFont& font) const;
+
void
GetScrollBarInfo(scroll_bar_info& info) const;
void GetMenuInfo(menu_info&
info) const;
diff --git a/src/servers/app/DesktopSettingsPrivate.h
b/src/servers/app/DesktopSettingsPrivate.h
index 0aae7a4..159d3b1 100644
--- a/src/servers/app/DesktopSettingsPrivate.h
+++ b/src/servers/app/DesktopSettingsPrivate.h
@@ -38,6 +38,10 @@
void
SetDefaultFixedFont(const ServerFont& font);
const ServerFont& DefaultFixedFont() const;
+ const ServerFont& BeOSPlainFont() const;
+ const ServerFont& BeOSBoldFont() const;
+ const ServerFont& BeOSFixedFont() const;
+
void SetScrollBarInfo(const
scroll_bar_info &info);
const scroll_bar_info& ScrollBarInfo() const;
@@ -106,6 +110,10 @@
ServerFont fBoldFont;
ServerFont fFixedFont;
+ ServerFont fBeOSPlainFont;
+ ServerFont fBeOSBoldFont;
+ ServerFont fBeOSFixedFont;
+
scroll_bar_info fScrollBarInfo;
menu_info fMenuInfo;
mode_mouse fMouseMode;
diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp
index e2092f6..66422d4 100644
--- a/src/servers/app/ServerApp.cpp
+++ b/src/servers/app/ServerApp.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2016, Haiku.
+ * Copyright 2001-2020 Haiku, Inc. All Rights Reserved
* Distributed under the terms of the MIT License.
*
* Authors:
@@ -13,6 +13,7 @@
* Philippe Saint-Pierre, stpere@xxxxxxxxx
* Wim van der Meer, <WPJvanderMeer@xxxxxxxxx>
* Joseph Groover <looncraz@xxxxxxxxxxxx>
+ * John Scipione, jscipione@xxxxxxxxx
*/
@@ -28,8 +29,11 @@
#include <string.h>
#include <syslog.h>
+#include <image.h>
+
#include <AppDefs.h>
#include <Autolock.h>
+#include <BeBuild.h>
#include <Debug.h>
#include <List.h>
#include <ScrollBar.h>
@@ -107,11 +111,11 @@
fIsActive(false),
fMemoryAllocator(new (std::nothrow) ClientMemoryAllocator(this))
{
- if (fSignature == "")
+ if (fSignature.Length() == 0)
fSignature = "application/no-signature";
char name[B_OS_NAME_LENGTH];
- snprintf(name, sizeof(name), "a<%" B_PRId32 ":%s", clientTeam,
+ snprintf(name, sizeof(name), "a<%" B_PRId32 ":%s", fClientTeam,
SignatureLeaf());
fMessagePort = create_port(DEFAULT_MONITOR_PORT_SIZE, name);
@@ -120,10 +124,10 @@
fLink.SetSenderPort(fClientReplyPort);
fLink.SetReceiverPort(fMessagePort);
- fLink.SetTargetTeam(clientTeam);
+ fLink.SetTargetTeam(fClientTeam);
// we let the application own the port, so that we get aware when it's
gone
- if (set_port_owner(fMessagePort, clientTeam) < B_OK) {
+ if (set_port_owner(fMessagePort, fClientTeam) < B_OK) {
delete_port(fMessagePort);
fMessagePort = -1;
return;
@@ -132,16 +136,13 @@
BMessenger::Private(fHandlerMessenger).SetTo(fClientTeam,
clientLooperPort, clientToken);
- fInitialWorkspace = desktop->CurrentWorkspace();
+ fInitialWorkspace = fDesktop->CurrentWorkspace();
// TODO: this should probably be retrieved when the app is
loaded!
// record the current system wide fonts..
- desktop->LockSingleWindow();
- DesktopSettings settings(desktop);
- settings.GetDefaultPlainFont(fPlainFont);
- settings.GetDefaultBoldFont(fBoldFont);
- settings.GetDefaultFixedFont(fFixedFont);
- desktop->UnlockSingleWindow();
+ fDesktop->LockSingleWindow();
+ _SetDefaultFonts();
+ fDesktop->UnlockSingleWindow();
STRACE(("ServerApp %s:\n", Signature()));
STRACE(("\tBApp port: %" B_PRId32 "\n", fClientReplyPort));
@@ -1589,11 +1590,11 @@
LockedDesktopSettings
settings(fDesktop);
// TODO: Should we also update our
internal copies now?
- if (!strcmp(type, "plain"))
+ if (strncmp(type, "plain", 5) == 0)
settings.SetDefaultPlainFont(font);
- else if (!strcmp(type, "bold"))
+ else if (strncmp(type, "bold", 4) == 0)
settings.SetDefaultBoldFont(font);
- else if (!strcmp(type, "fixed"))
+ else if (strncmp(type, "fixed", 5) == 0)
settings.SetDefaultFixedFont(font);
} else
gFontManager->Unlock();
@@ -1611,13 +1612,13 @@
char type[B_OS_NAME_LENGTH];
status_t status = link.ReadString(type, sizeof(type));
if (status == B_OK) {
- if (!strcmp(type, "plain")) {
+ if (strncmp(type, "plain", 5) == 0)
font =
*gFontManager->DefaultPlainFont();
- } else if (!strcmp(type, "bold")) {
+ else if (strncmp(type, "bold", 4) == 0)
font = *gFontManager->DefaultBoldFont();
- } else if (!strcmp(type, "fixed")) {
+ else if (strncmp(type, "fixed", 5) == 0)
font =
*gFontManager->DefaultFixedFont();
- } else
+ else
status = B_BAD_VALUE;
}
@@ -1655,15 +1656,11 @@
}
// The client is requesting the system fonts, this
- // could happend either at application start up, or
- // because the client is resyncing with the global
+ // could have happened either at application start up,
+ // or because the client is resyncing with the global
// fonts. So we record the current system wide fonts
// into our own copies at this point.
- DesktopSettings settings(fDesktop);
-
- settings.GetDefaultPlainFont(fPlainFont);
- settings.GetDefaultBoldFont(fBoldFont);
- settings.GetDefaultFixedFont(fFixedFont);
+ _SetDefaultFonts();
fLink.StartMessage(B_OK);
@@ -3553,3 +3550,30 @@
return iterator->second;
}
+
+
+void
+ServerApp::_SetDefaultFonts()
+{
+ bool isBeOSApp = false;
+ int32 cookie = 0;
+ image_info info;
+ if (get_next_image_info(fClientTeam, (int32*)&cookie, &info) == B_OK
+ && info.type == B_APP_IMAGE && (info.abi ==
B_HAIKU_ABI_GCC_2_BEOS
+ || info.abi == B_HAIKU_ABI_GCC_2_ANCIENT)) {
+ isBeOSApp = true;
+ }
+
+ // TODO Implement BeOS app signature exceptions list
+
+ DesktopSettings settings(fDesktop);
+ if (isBeOSApp) {
+ settings.GetBeOSPlainFont(fPlainFont);
+ settings.GetBeOSBoldFont(fBoldFont);
+ settings.GetBeOSFixedFont(fFixedFont);
+ } else {
+ settings.GetDefaultPlainFont(fPlainFont);
+ settings.GetDefaultBoldFont(fBoldFont);
+ settings.GetDefaultFixedFont(fFixedFont);
+ }
+}
diff --git a/src/servers/app/ServerApp.h b/src/servers/app/ServerApp.h
index 433ea47..6f9da97 100644
--- a/src/servers/app/ServerApp.h
+++ b/src/servers/app/ServerApp.h
@@ -114,6 +114,8 @@
ServerPicture* _FindPicture(int32 token) const;
+ void _SetDefaultFonts();
+
private:
typedef std::map<int32, ServerBitmap*> BitmapMap;
typedef std::map<int32, ServerPicture*> PictureMap;
diff --git a/src/servers/app/ServerConfig.h b/src/servers/app/ServerConfig.h
index 6d1dd65..3cd8bae 100644
--- a/src/servers/app/ServerConfig.h
+++ b/src/servers/app/ServerConfig.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2008, Haiku.
+ * Copyright 2001-2020 Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _APPSERVER_CONFIG_H
@@ -28,18 +28,53 @@
// These definitions provide the server something to use for default
// system fonts.
#define DEFAULT_PLAIN_FONT_FAMILY "Noto Sans Display"
-#define FALLBACK_PLAIN_FONT_FAMILY "Swis721 BT"
#define DEFAULT_PLAIN_FONT_STYLE "Book"
#define DEFAULT_PLAIN_FONT_SIZE 12.0f
+
+#define FALLBACK_PLAIN_FONT_FAMILY "Noto Sans CJK JP"
+#define FALLBACK_PLAIN_FONT_STYLE "Book"
+#define FALLBACK_PLAIN_FONT_SIZE 12.0f
+
#define DEFAULT_BOLD_FONT_FAMILY "Noto Sans Display"
-#define FALLBACK_BOLD_FONT_FAMILY "Swis721 BT"
#define DEFAULT_BOLD_FONT_STYLE "Bold"
#define DEFAULT_BOLD_FONT_SIZE 12.0f
+
+#define FALLBACK_BOLD_FONT_FAMILY "Noto Sans CJK JP"
+#define FALLBACK_BOLD_FONT_STYLE "Bold"
+#define FALLBACK_BOLD_FONT_SIZE 12.0f
+
#define DEFAULT_FIXED_FONT_FAMILY "Noto Mono"
-#define FALLBACK_FIXED_FONT_FAMILY "Courier10 BT"
#define DEFAULT_FIXED_FONT_STYLE "Regular"
#define DEFAULT_FIXED_FONT_SIZE 12.0f
+#define FALLBACK_FIXED_FONT_FAMILY "Noto Mono"
+#define FALLBACK_FIXED_FONT_STYLE "Regular"
+#define FALLBACK_FIXED_FONT_SIZE 12.0f
+
+#define BEOS_PLAIN_FONT_FAMILY "Swis721 BT"
+#define BEOS_PLAIN_FONT_STYLE "Roman"
+#define BEOS_PLAIN_FONT_SIZE 10.0f
+
+#define FALLBACK_BEOS_PLAIN_FONT_FAMILY "Noto Sans Display"
+#define FALLBACK_BEOS_PLAIN_FONT_STYLE "Book"
+#define FALLBACK_BEOS_PLAIN_FONT_SIZE 10.0f
+
+#define BEOS_BOLD_FONT_FAMILY "Swis721 BT"
+#define BEOS_BOLD_FONT_STYLE "Bold"
+#define BEOS_BOLD_FONT_SIZE 12.0f
+
+#define FALLBACK_BEOS_BOLD_FONT_FAMILY "Noto Sans Display"
+#define FALLBACK_BEOS_BOLD_FONT_STYLE "Bold"
+#define FALLBACK_BEOS_BOLD_FONT_SIZE 12.0f
+
+#define BEOS_FIXED_FONT_FAMILY "Courier10 BT"
+#define BEOS_FIXED_FONT_STYLE "Roman"
+#define BEOS_FIXED_FONT_SIZE 12.0f
+
+#define FALLBACK_BEOS_FIXED_FONT_FAMILY "Noto Mono"
+#define FALLBACK_BEOS_FIXED_FONT_STYLE "Regular"
+#define FALLBACK_BEOS_FIXED_FONT_SIZE 12.0f
+
// This is the port capacity for all monitoring objects - ServerApps
// and ServerWindows
#define DEFAULT_MONITOR_PORT_SIZE 50
diff --git a/src/servers/app/font/FontManager.cpp
b/src/servers/app/font/FontManager.cpp
index 7c3a2b3..bede1c7 100644
--- a/src/servers/app/font/FontManager.cpp
+++ b/src/servers/app/font/FontManager.cpp
@@ -111,6 +111,10 @@
fDefaultBoldFont(NULL),
fDefaultFixedFont(NULL),
+ fBeOSPlainFont(NULL),
+ fBeOSBoldFont(NULL),
+ fBeOSFixedFont(NULL),
+
fScanned(false),
fNextID(0)
{
@@ -138,11 +142,14 @@
delete fDefaultBoldFont;
delete fDefaultFixedFont;
+ delete fBeOSPlainFont;
+ delete fBeOSBoldFont;
+ delete fBeOSFixedFont;
+
// free families before we're done with FreeType
- for (int32 i = fFamilies.CountItems(); i-- > 0;) {
+ for (int32 i = fFamilies.CountItems(); i-- > 0;)
delete fFamilies.ItemAt(i);
- }
FT_Done_FreeType(gFreeTypeLibrary);
}
@@ -459,11 +466,12 @@
status_t
FontManager::_SetDefaultFonts()
{
+ FontStyle* style = NULL;
+
// plain font
- FontStyle* style = _GetDefaultStyle(DEFAULT_PLAIN_FONT_FAMILY,
- DEFAULT_PLAIN_FONT_STYLE, FALLBACK_PLAIN_FONT_FAMILY,
- DEFAULT_PLAIN_FONT_STYLE,
- B_REGULAR_FACE);
+ style = _GetDefaultStyle(
+ DEFAULT_PLAIN_FONT_FAMILY, DEFAULT_PLAIN_FONT_STYLE,
+ FALLBACK_PLAIN_FONT_FAMILY, FALLBACK_PLAIN_FONT_STYLE,
B_REGULAR_FACE);
if (style == NULL)
return B_ERROR;
@@ -474,7 +482,7 @@
// bold font
style = _GetDefaultStyle(DEFAULT_BOLD_FONT_FAMILY,
DEFAULT_BOLD_FONT_STYLE,
- FALLBACK_BOLD_FONT_FAMILY, DEFAULT_BOLD_FONT_STYLE,
B_BOLD_FACE);
+ FALLBACK_BOLD_FONT_FAMILY, FALLBACK_BOLD_FONT_STYLE,
B_BOLD_FACE);
fDefaultBoldFont = new (std::nothrow) ServerFont(*style,
DEFAULT_BOLD_FONT_SIZE);
@@ -482,7 +490,8 @@
return B_NO_MEMORY;
// fixed font
- style = _GetDefaultStyle(DEFAULT_FIXED_FONT_FAMILY,
DEFAULT_FIXED_FONT_STYLE,
+ style = _GetDefaultStyle(
+ DEFAULT_FIXED_FONT_FAMILY, DEFAULT_FIXED_FONT_STYLE,
FALLBACK_FIXED_FONT_FAMILY, DEFAULT_FIXED_FONT_STYLE,
B_REGULAR_FACE);
fDefaultFixedFont = new (std::nothrow) ServerFont(*style,
@@ -492,6 +501,39 @@
fDefaultFixedFont->SetSpacing(B_FIXED_SPACING);
+ // BeOS plain font
+ style = _GetDefaultStyle(BEOS_PLAIN_FONT_FAMILY, BEOS_PLAIN_FONT_STYLE,
+ FALLBACK_BEOS_PLAIN_FONT_FAMILY, FALLBACK_BEOS_PLAIN_FONT_STYLE,
+ B_REGULAR_FACE);
+ if (style == NULL)
+ return B_ERROR;
+
+ fBeOSPlainFont = new (std::nothrow) ServerFont(*style,
+ BEOS_PLAIN_FONT_SIZE);
+ if (fBeOSPlainFont == NULL)
+ return B_NO_MEMORY;
+
+ // BeOS bold font
+ style = _GetDefaultStyle(BEOS_BOLD_FONT_FAMILY, BEOS_BOLD_FONT_STYLE,
+ FALLBACK_BEOS_BOLD_FONT_FAMILY, FALLBACK_BEOS_BOLD_FONT_STYLE,
+ B_BOLD_FACE);
+
+ fBeOSBoldFont = new (std::nothrow) ServerFont(*style,
+ BEOS_BOLD_FONT_SIZE);
+ if (fBeOSBoldFont == NULL)
+ return B_NO_MEMORY;
+
+ // BeOS fixed font
+ style = _GetDefaultStyle(BEOS_FIXED_FONT_FAMILY, BEOS_FIXED_FONT_STYLE,
+ FALLBACK_BEOS_FIXED_FONT_FAMILY, FALLBACK_BEOS_FIXED_FONT_STYLE,
+ B_REGULAR_FACE);
+ fBeOSFixedFont = new (std::nothrow) ServerFont(*style,
+ BEOS_FIXED_FONT_SIZE);
+ if (fBeOSFixedFont == NULL)
+ return B_NO_MEMORY;
+
+ fBeOSFixedFont->SetSpacing(B_FIXED_SPACING);
+
return B_OK;
}
@@ -1139,6 +1181,27 @@
}
+const ServerFont*
+FontManager::BeOSPlainFont() const
+{
+ return fBeOSPlainFont;
+}
+
+
+const ServerFont*
+FontManager::BeOSBoldFont() const
+{
+ return fBeOSBoldFont;
+}
+
+
+const ServerFont*
+FontManager::BeOSFixedFont() const
+{
+ return fBeOSFixedFont;
+}
+
+
void
FontManager::AttachUser(uid_t userID)
{
diff --git a/src/servers/app/font/FontManager.h
b/src/servers/app/font/FontManager.h
index 74fdc38..190532f 100644
--- a/src/servers/app/font/FontManager.h
+++ b/src/servers/app/font/FontManager.h
@@ -1,10 +1,11 @@
/*
- * Copyright 2001-2009, Haiku.
+ * Copyright 2001-2020 Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* DarkWyrm <bpmagic@xxxxxxxxxxxxxxx>
* Axel Dörfler, axeld@xxxxxxxxxxxxxxxx
+ * John Scipione, jscipione@xxxxxxxxx
*/
#ifndef FONT_MANAGER_H
#define FONT_MANAGER_H
@@ -18,6 +19,7 @@
#include <ft2build.h>
#include FT_FREETYPE_H
+
class BEntry;
class BPath;
struct node_ref;
@@ -70,6 +72,10 @@
const ServerFont* DefaultBoldFont() const;
const ServerFont* DefaultFixedFont() const;
+ const ServerFont* BeOSPlainFont() const;
+ const ServerFont* BeOSBoldFont() const;
+ const ServerFont* BeOSFixedFont() const;
+
void AttachUser(uid_t
userID);
void DetachUser(uid_t
userID);
@@ -128,6 +134,10 @@
ServerFont* fDefaultBoldFont;
ServerFont* fDefaultFixedFont;
+ ServerFont* fBeOSPlainFont;
+ ServerFont* fBeOSBoldFont;
+ ServerFont* fBeOSFixedFont;
+
bool fScanned;
int32 fNextID;
};
--
To view, visit https://review.haiku-os.org/c/haiku/+/2340
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Ib6e137a74a086fb16f0c3c8b372211a139c00017
Gerrit-Change-Number: 2340
Gerrit-PatchSet: 1
Gerrit-Owner: John Scipione <jscipione@xxxxxxxxx>
Gerrit-MessageType: newchange