Browse Source

Merge pull request #4643

292cc07 qt: fix unicode character display on osx when building with 10.7 sdk (Cory Fields)
0.10
Wladimir J. van der Laan 10 years ago
parent
commit
2260c99f38
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
  1. 3
      src/qt/bitcoin.cpp
  2. 27
      src/qt/guiutil.cpp
  3. 4
      src/qt/guiutil.h

3
src/qt/bitcoin.cpp

@ -489,6 +489,9 @@ int main(int argc, char *argv[]) @@ -489,6 +489,9 @@ int main(int argc, char *argv[])
Q_INIT_RESOURCE(bitcoin);
Q_INIT_RESOURCE(bitcoin_locale);
GUIUtil::SubstituteFonts();
BitcoinApplication app(argc, argv);
#if QT_VERSION > 0x050100
// Generate high-dpi pixmaps

27
src/qt/guiutil.cpp

@ -63,6 +63,13 @@ @@ -63,6 +63,13 @@
static boost::filesystem::detail::utf8_codecvt_facet utf8;
#endif
#if defined(Q_OS_MAC)
extern double NSAppKitVersionNumber;
#if !defined(NSAppKitVersionNumber10_9)
#define NSAppKitVersionNumber10_9 1265
#endif
#endif
namespace GUIUtil {
QString dateTimeStr(const QDateTime &date)
@ -376,6 +383,26 @@ ToolTipToRichTextFilter::ToolTipToRichTextFilter(int size_threshold, QObject *pa @@ -376,6 +383,26 @@ ToolTipToRichTextFilter::ToolTipToRichTextFilter(int size_threshold, QObject *pa
}
void SubstituteFonts()
{
#if defined(Q_OS_MAC)
// Background:
// OSX's default font changed in 10.9 and QT is unable to find it with its
// usual fallback methods when building against the 10.7 sdk or lower.
// The 10.8 SDK added a function to let it find the correct fallback font.
// If this fallback is not properly loaded, some characters may fail to
// render correctly.
//
// Solution: If building with the 10.7 SDK or lower and the user's platform
// is 10.9 or higher at runtime, substitute the correct font. This needs to
// happen before the QApplication is created.
#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_8
if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_9)
QFont::insertSubstitution(".Lucida Grande UI", "Lucida Grande");
#endif
#endif
}
bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt)
{
if(evt->type() == QEvent::ToolTipChange)

4
src/qt/guiutil.h

@ -106,6 +106,10 @@ namespace GUIUtil @@ -106,6 +106,10 @@ namespace GUIUtil
representation if needed. This assures that Qt can word-wrap long tooltip messages.
Tooltips longer than the provided size threshold (in characters) are wrapped.
*/
// Replace invalid default fonts with known good ones
void SubstituteFonts();
class ToolTipToRichTextFilter : public QObject
{
Q_OBJECT

Loading…
Cancel
Save