Commit 8ffdf90c authored by Peter Zhigalov's avatar Peter Zhigalov

Исправил отображение шрифтов в Win98 и Wine

parent 0c71596d
......@@ -18,6 +18,9 @@ greaterThan(QT_MAJOR_VERSION, 4) {
lessThan(QT_VERSION, 4.5.0) {
DEFINES += HAVE_LESS_THAN_QT45
win32-g++*|win32-msvc|win32-msvc.net|win32-msvc200* {
DEFINES += USE_WIN98_WORKAROUNDS
}
}
SOURCES += \
......
......@@ -17,10 +17,17 @@
#include <QSettings>
#include <QLocale>
#include <QResizeEvent>
#include <QObject>
#include <QFont>
#include <QFontDatabase>
#include <algorithm>
#include <cmath>
#include "libs/jo_images.h"
#if defined (Q_OS_WIN) && defined (USE_WIN98_WORKAROUNDS)
#include <windows.h>
#endif
// Конструктор
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
......@@ -130,6 +137,60 @@ void MainWindow::show()
QApplication::postEvent(this, new QResizeEvent(size(), size()));
}
// Исправить отображение локаизованных шрифтов под Windows
void MainWindow::fonts_fix(const QString & language)
{
#if defined (Q_OS_WIN)
// Отображение название языка -> соответствующая ему WritingSystem
static QList<QPair<QString, QFontDatabase::WritingSystem> > writingsystem_map =
QList<QPair<QString, QFontDatabase::WritingSystem> >()
<< qMakePair(QString("en"), QFontDatabase::Latin)
<< qMakePair(QString("ru"), QFontDatabase::Cyrillic);
// Найдем WritingSystem для текущего языка
QFontDatabase::WritingSystem current_writingsystem = QFontDatabase::Any;
for(QList<QPair<QString, QFontDatabase::WritingSystem> >::Iterator it = writingsystem_map.begin(); it != writingsystem_map.end(); ++it)
{
if(it->first == language)
{
current_writingsystem = it->second;
break;
}
}
// Шрифт стандартный, по умолчанию
static QFont default_font = qApp->font();
// Шрифт Tahoma, если стандартный не поддерживает выбранный язык
QFont fallback_font = default_font;
fallback_font.setFamily("Tahoma");
// Проверим, умеет ли стандартный шрифт писать на новом языке
static QFontDatabase qfd;
if(!qfd.families(current_writingsystem).contains(default_font.family(), Qt::CaseInsensitive))
qApp->setFont(fallback_font); // Если не умеет - заменим на Tahoma
else
qApp->setFont(default_font); // Если умеет, то вернем его обратно
#if defined (USE_WIN98_WORKAROUNDS)
// Для Win98 форсированно заменяем шрифты на Tahoma для всех не-английских локалей
static DWORD dwVersion = (DWORD)(LOBYTE(LOWORD(GetVersion())));
if(dwVersion <= 4)
{
if(language != "en")
qApp->setFont(fallback_font);
else
qApp->setFont(default_font);
}
#endif
#else
Q_UNUSED(language);
#endif
}
// Открытие файла по имени
void MainWindow::open_file(const QString & filename)
{
......@@ -615,6 +676,9 @@ void MainWindow::update_translations(QString language)
qApp->installTranslator(&translator);
ui->retranslateUi(this);
// Пофиксим шрифты
fonts_fix(language);
// Пробежим по меню и проставим галочку на нужном нам языке и снимем с остальных
for(QList<QPair<QString, QAction *> >::Iterator it = languages_map.begin(); it != languages_map.end(); ++it)
it->second->setChecked(it->first == language);
......
......@@ -37,6 +37,8 @@ public:
void dropEvent(QDropEvent * event);
// Показать окно
void show();
// Исправить отображение локаизованных шрифтов под Windows
void fonts_fix(const QString & language);
public slots:
// Открытие файла по имени
void open_file(const QString & filename);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment