Fixed issue #624. Icon resulotion issues with some display setups.

--HG--
branch : develop
This commit is contained in:
Roman Telezhynskyi 2017-02-09 15:43:17 +02:00
parent 0ff63c57e4
commit 9c27e7bfed
15 changed files with 136 additions and 20 deletions

View File

@ -28,6 +28,8 @@ Open with the base size. Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 4
Set pattern file unit: cm, mm, inch. Set pattern file unit: cm, mm, inch.
.IP "--test" .IP "--test"
Use for unit testing. Run the program and open a file without showing the main window. Use for unit testing. Run the program and open a file without showing the main window.
.IP "--no-scaling"
Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). Alternatively you can use the QT_AUTO_SCREEN_SCALE_FACTOR=0 environment variable.
.IP Arguments: .IP Arguments:
.I filename .I filename
\- the measurement file. \- the measurement file.

View File

@ -131,6 +131,8 @@ The path to output destination folder. By default the directory at which the app
.RE .RE
.IP "-t, --test" .IP "-t, --test"
Run the program in a test mode. The program in this mode loads a single pattern file and silently quit without showing the main window. The key have priority before key \*(lqbasename\*(rq. Run the program in a test mode. The program in this mode loads a single pattern file and silently quit without showing the main window. The key have priority before key \*(lqbasename\*(rq.
.IP "--no-scaling"
.RB "Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). Alternatively you can use the QT_AUTO_SCREEN_SCALE_FACTOR=0 environment variable."
.IP Arguments: .IP Arguments:
.I filename .I filename
\- a pattern file. \- a pattern file.

2
dist/debian/tape.1 vendored
View File

@ -28,6 +28,8 @@ Open with the base size. Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 4
Set pattern file unit: cm, mm, inch. Set pattern file unit: cm, mm, inch.
.IP "--test" .IP "--test"
Use for unit testing. Run the program and open a file without showing the main window. Use for unit testing. Run the program and open a file without showing the main window.
.IP "--no-scaling"
Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). Alternatively you can use the QT_AUTO_SCREEN_SCALE_FACTOR=0 environment variable.
.IP Arguments: .IP Arguments:
.I filename .I filename
\- the measurement file. \- the measurement file.

View File

@ -131,6 +131,8 @@ The path to output destination folder. By default the directory at which the app
.RE .RE
.IP "-t, --test" .IP "-t, --test"
Run the program in a test mode. The program in this mode loads a single pattern file and silently quit without showing the main window. The key have priority before key \*(lqbasename\*(rq. Run the program in a test mode. The program in this mode loads a single pattern file and silently quit without showing the main window. The key have priority before key \*(lqbasename\*(rq.
.IP "--no-scaling"
.RB "Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). Alternatively you can use the QT_AUTO_SCREEN_SCALE_FACTOR=0 environment variable."
.IP Arguments: .IP Arguments:
.I filename .I filename
\- a pattern file. \- a pattern file.

View File

@ -49,9 +49,9 @@ int main(int argc, char *argv[])
qt_qhash_seed.store(0); // Lock producing random attribute order in XML qt_qhash_seed.store(0); // Lock producing random attribute order in XML
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) #ifndef Q_OS_MAC // supports natively
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support InitHighDpiScaling(argc, argv);
#endif #endif //Q_OS_MAC
MApplication app(argc, argv); MApplication app(argc, argv);
app.InitOptions(); app.InitOptions();

View File

@ -581,6 +581,11 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS
tr("Use for unit testing. Run the program and open a file without showing the main window.")); tr("Use for unit testing. Run the program and open a file without showing the main window."));
parser.addOption(testOption); parser.addOption(testOption);
//----- //-----
QCommandLineOption scalingOption(QStringList() << LONG_OPTION_NO_HDPI_SCALING,
tr("Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). "
"Alternatively you can use the QT_AUTO_SCREEN_SCALE_FACTOR=0 environment variable."));
parser.addOption(scalingOption);
//-----
parser.process(arguments); parser.process(arguments);
bool flagHeight = false; bool flagHeight = false;

View File

@ -249,6 +249,14 @@ void VCommandLine::InitOptions(VCommandLineOptions &options, QMap<QString, int>
"this mode loads a single pattern file and silently quit without " "this mode loads a single pattern file and silently quit without "
"showing the main window. The key have priority before key '%1'.") "showing the main window. The key have priority before key '%1'.")
.arg(LONG_OPTION_BASENAME))); .arg(LONG_OPTION_BASENAME)));
optionsIndex.insert(LONG_OPTION_NO_HDPI_SCALING, index++);
options.append(new QCommandLineOption(QStringList() << LONG_OPTION_NO_HDPI_SCALING,
translate("VCommandLine", "Disable high dpi scaling. Call this option if has "
"problem with scaling (by default scaling "
"enabled). Alternatively you can use the "
"QT_AUTO_SCREEN_SCALE_FACTOR=0 environment "
"variable.")));
} }
//------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------
@ -500,7 +508,13 @@ bool VCommandLine::IsTestModeEnabled() const
return r; return r;
} }
//------------------------------------------------------------------------------------------------------ //---------------------------------------------------------------------------------------------------------------------
bool VCommandLine::IsNoScalingEnabled() const
{
return parser.isSet(*optionsUsed.value(optionsIndex.value(LONG_OPTION_NO_HDPI_SCALING)));
}
//---------------------------------------------------------------------------------------------------------------------
bool VCommandLine::IsExportEnabled() const bool VCommandLine::IsExportEnabled() const
{ {
const bool r = parser.isSet(*optionsUsed.value(optionsIndex.value(LONG_OPTION_BASENAME))); const bool r = parser.isSet(*optionsUsed.value(optionsIndex.value(LONG_OPTION_BASENAME)));

View File

@ -56,10 +56,14 @@ public:
//@brief creates object and applies export related options to parser //@brief creates object and applies export related options to parser
//@brief tests if user enabled test mode from cmd, throws exception if not exactly 1 input VAL file supplied in case test mode enabled //@brief tests if user enabled test mode from cmd, throws exception if not exactly 1 input VAL file supplied in
//case test mode enabled
bool IsTestModeEnabled() const; bool IsTestModeEnabled() const;
//@brief tests if user enabled export from cmd, throws exception if not exactly 1 input VAL file supplied in case export enabled bool IsNoScalingEnabled() const;
//@brief tests if user enabled export from cmd, throws exception if not exactly 1 input VAL file supplied in case
//export enabled
bool IsExportEnabled() const; bool IsExportEnabled() const;
//@brief returns path to custom measure file or empty string //@brief returns path to custom measure file or empty string
@ -68,7 +72,8 @@ public:
//@brief returns the base name of layout files or empty string if not set //@brief returns the base name of layout files or empty string if not set
QString OptBaseName() const; QString OptBaseName() const;
//@brief returns the absolute path to output destination directory or path to application's current directory if not set //@brief returns the absolute path to output destination directory or path to application's current directory if
//not set
QString OptDestinationPath() const; QString OptDestinationPath() const;
//@brief returns export type set, defaults 0 - svg //@brief returns export type set, defaults 0 - svg

View File

@ -56,9 +56,9 @@ int main(int argc, char *argv[])
qRegisterMetaTypeStreamOperators<VPieceNode>("VPieceNode"); qRegisterMetaTypeStreamOperators<VPieceNode>("VPieceNode");
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) #ifndef Q_OS_MAC // supports natively
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support InitHighDpiScaling(argc, argv);
#endif #endif //Q_OS_MAC
VApplication app(argc, argv); VApplication app(argc, argv);

View File

@ -1506,6 +1506,12 @@ void MainWindow::ShowMeasurements()
<< "-u" << "-u"
<< VDomDocument::UnitsToStr(qApp->patternUnit()); << VDomDocument::UnitsToStr(qApp->patternUnit());
} }
if (isNoScaling)
{
arguments.append(QLatin1String("--") + LONG_OPTION_NO_HDPI_SCALING);
}
const QString tape = qApp->TapeFilePath(); const QString tape = qApp->TapeFilePath();
const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath(); const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath();
QProcess::startDetached(tape, arguments, workingDirectory); QProcess::startDetached(tape, arguments, workingDirectory);
@ -3779,7 +3785,14 @@ void MainWindow::CreateActions()
{ {
const QString tape = qApp->TapeFilePath(); const QString tape = qApp->TapeFilePath();
const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath(); const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath();
QProcess::startDetached(tape, QStringList(), workingDirectory);
QStringList arguments;
if (isNoScaling)
{
arguments.append(QLatin1String("--") + LONG_OPTION_NO_HDPI_SCALING);
}
QProcess::startDetached(tape, arguments, workingDirectory);
}); });
connect(ui->actionShowM, &QAction::triggered, this, &MainWindow::ShowMeasurements); connect(ui->actionShowM, &QAction::triggered, this, &MainWindow::ShowMeasurements);
@ -3906,7 +3919,14 @@ bool MainWindow::LoadPattern(const QString &fileName, const QString& customMeasu
{ {
const QString tape = qApp->TapeFilePath(); const QString tape = qApp->TapeFilePath();
const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath(); const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath();
QProcess::startDetached(tape, QStringList(fileName), workingDirectory);
QStringList arguments = QStringList() << fileName;
if (isNoScaling)
{
arguments.append(QLatin1String("--") + LONG_OPTION_NO_HDPI_SCALING);
}
QProcess::startDetached(tape, arguments, workingDirectory);
qApp->exit(V_EX_OK); qApp->exit(V_EX_OK);
return false; // stop continue processing return false; // stop continue processing
} }
@ -4134,7 +4154,14 @@ void MainWindow::CreateMeasurements()
{ {
const QString tape = qApp->TapeFilePath(); const QString tape = qApp->TapeFilePath();
const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath(); const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath();
QProcess::startDetached(tape, QStringList(), workingDirectory);
QStringList arguments;
if (isNoScaling)
{
arguments.append(QLatin1String("--") + LONG_OPTION_NO_HDPI_SCALING);
}
QProcess::startDetached(tape, arguments, workingDirectory);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -4547,6 +4574,8 @@ void MainWindow::ProcessCMD()
const VCommandLinePtr cmd = qApp->CommandLine(); const VCommandLinePtr cmd = qApp->CommandLine();
auto args = cmd->OptInputFileNames(); auto args = cmd->OptInputFileNames();
isNoScaling = cmd->IsNoScalingEnabled();
if (VApplication::IsGUIMode()) if (VApplication::IsGUIMode())
{ {
ReopenFilesAfterCrash(args); ReopenFilesAfterCrash(args);

View File

@ -61,11 +61,22 @@
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
MainWindowsNoGUI::MainWindowsNoGUI(QWidget *parent) MainWindowsNoGUI::MainWindowsNoGUI(QWidget *parent)
: VAbstractMainWindow(parent), listDetails(QVector<VLayoutPiece>()), currentScene(nullptr), tempSceneLayout(nullptr), : VAbstractMainWindow(parent),
pattern(new VContainer(qApp->TrVars(), qApp->patternUnitP())), doc(nullptr), papers(QList<QGraphicsItem *>()), listDetails(),
shadows(QList<QGraphicsItem *>()), scenes(QList<QGraphicsScene *>()), details(QList<QList<QGraphicsItem *> >()), currentScene(nullptr),
undoAction(nullptr), redoAction(nullptr), actionDockWidgetToolOptions(nullptr), actionDockWidgetGroups(nullptr), tempSceneLayout(nullptr),
curFile(QString()), pattern(new VContainer(qApp->TrVars(), qApp->patternUnitP())),
doc(nullptr),
papers(),
shadows(),
scenes(),
details(),
undoAction(nullptr),
redoAction(nullptr),
actionDockWidgetToolOptions(nullptr),
actionDockWidgetGroups(nullptr),
curFile(),
isNoScaling(false),
isLayoutStale(true), isLayoutStale(true),
ignorePrinterFields(false), ignorePrinterFields(false),
margins(), margins(),

View File

@ -84,6 +84,7 @@ protected:
/** @brief fileName name current pattern file. */ /** @brief fileName name current pattern file. */
QString curFile; QString curFile;
bool isNoScaling;
bool isLayoutStale; bool isLayoutStale;
bool ignorePrinterFields; bool ignorePrinterFields;
QMarginsF margins; QMarginsF margins;

View File

@ -27,6 +27,7 @@
*************************************************************************/ *************************************************************************/
#include "commandoptions.h" #include "commandoptions.h"
#include "def.h"
#include <QStaticStringData> #include <QStaticStringData>
#include <QStringData> #include <QStringData>
@ -132,7 +133,8 @@ QStringList AllKeys()
<< LONG_OPTION_LEFT_MARGIN << SINGLE_OPTION_LEFT_MARGIN << LONG_OPTION_LEFT_MARGIN << SINGLE_OPTION_LEFT_MARGIN
<< LONG_OPTION_RIGHT_MARGIN << SINGLE_OPTION_RIGHT_MARGIN << LONG_OPTION_RIGHT_MARGIN << SINGLE_OPTION_RIGHT_MARGIN
<< LONG_OPTION_TOP_MARGIN << SINGLE_OPTION_TOP_MARGIN << LONG_OPTION_TOP_MARGIN << SINGLE_OPTION_TOP_MARGIN
<< LONG_OPTION_BOTTOM_MARGIN << SINGLE_OPTION_BOTTOM_MARGIN; << LONG_OPTION_BOTTOM_MARGIN << SINGLE_OPTION_BOTTOM_MARGIN
<< LONG_OPTION_NO_HDPI_SCALING;
return list; return list;
} }

View File

@ -1919,7 +1919,6 @@ QPixmap darkenPixmap(const QPixmap &pixmap)
return QPixmap::fromImage(img); return QPixmap::fromImage(img);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void ShowInGraphicalShell(const QString &filePath) void ShowInGraphicalShell(const QString &filePath)
{ {
@ -1968,3 +1967,41 @@ void ShowInGraphicalShell(const QString &filePath)
#endif #endif
} }
const QString LONG_OPTION_NO_HDPI_SCALING = QStringLiteral("no-scaling");
//---------------------------------------------------------------------------------------------------------------------
bool IsOptionSet(int argc, char *argv[], const char *option)
{
for (int i = 1; i < argc; ++i)
{
if (!qstrcmp(argv[i], option))
{
return true;
}
}
return false;
}
//---------------------------------------------------------------------------------------------------------------------
// See issue #624. https://bitbucket.org/dismine/valentina/issues/624
void InitHighDpiScaling(int argc, char *argv[])
{
/* For more info see: http://doc.qt.io/qt-5/highdpi.html */
if (IsOptionSet(argc, argv, qPrintable(QLatin1String("--") + LONG_OPTION_NO_HDPI_SCALING)))
{
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
#else
qputenv("QT_DEVICE_PIXEL_RATIO", QByteArray("1"));
#endif
}
else
{
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support
#else
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", QByteArray("1"));
#endif
}
}

View File

@ -255,6 +255,10 @@ enum class GSizes : unsigned char { ALL,
#define V_FALLTHROUGH #define V_FALLTHROUGH
#endif #endif
extern const QString LONG_OPTION_NO_HDPI_SCALING;
bool IsOptionSet(int argc, char *argv[], const char *option);
void InitHighDpiScaling(int argc, char *argv[]);
// measurements // measurements
// A // A
extern const QString height_M; // A01 extern const QString height_M; // A01