Merge pull request #5480 from MarcSabatella/297287-palette-scale

fix #297287: scale palettes with monitor resolution +collect_artifacts
This commit is contained in:
Dmitri Ovodok 2019-12-03 09:33:34 +02:00 committed by GitHub
commit acd6f78608
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 113 additions and 67 deletions

View file

@ -49,7 +49,7 @@ DrumTools::DrumTools(QWidget* parent)
QWidget* w = new QWidget(this);
w->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
w->setMaximumHeight(100);
w->setMaximumHeight(100 * Palette::guiMag());
QHBoxLayout* layout = new QHBoxLayout;
w->setLayout(layout);

View file

@ -106,6 +106,7 @@ EditStaffType::EditStaffType(QWidget* parent, Staff* st)
else {
Q_ASSERT_X(false, "EditStaffType::EditStaffType", "Error in opening sample tab file for preview");
}
tabPreview->adjustSize();
setValues();

View file

@ -34,6 +34,8 @@ extern bool useFactorySettings;
extern Palette* newAccidentalsPalette();
extern Palette* newKeySigPalette();
static const qreal editScale = 1.0;
//---------------------------------------------------------
// KeyCanvas
//---------------------------------------------------------
@ -42,7 +44,7 @@ KeyCanvas::KeyCanvas(QWidget* parent)
: QFrame(parent)
{
setAcceptDrops(true);
extraMag = 2.0;
extraMag = editScale * guiScaling;
qreal mag = PALETTE_SPATIUM * extraMag / gscore->spatium();
_matrix = QTransform(mag, 0.0, 0.0, mag, 0.0, 0.0);
imatrix = _matrix.inverted();
@ -290,6 +292,9 @@ KeyEditor::KeyEditor(QWidget* parent)
l->setContentsMargins(0, 0, 0, 0);
frame_3->setLayout(l);
sp1 = MuseScore::newAccidentalsPalette();
qreal adj = sp1->mag();
sp1->setGrid(sp1->gridWidth() * editScale / adj, sp1->gridHeight() * editScale / adj);
sp1->setMag(editScale);
PaletteScrollArea* accPalette = new PaletteScrollArea(sp1);
QSizePolicy policy1(QSizePolicy::Expanding, QSizePolicy::Expanding);
accPalette->setSizePolicy(policy1);

View file

@ -53,7 +53,7 @@ Score* NoteGroups::createScore(int n, TDuration::DurationType t, std::vector<Cho
chord->setStemDirection(Direction::UP);
chords->push_back(chord);
}
c.score()->style().set(Sid::pageOddTopMargin, 16.0/INCH);
//c.score()->style().set(Sid::pageOddTopMargin, 16.0/INCH);
c.score()->style().set(Sid::pageOddLeftMargin, 0.0);
c.score()->parts().front()->setLongName("");
@ -87,11 +87,15 @@ NoteGroups::NoteGroups(QWidget* parent)
};
iconPalette->setName(QT_TRANSLATE_NOOP("Palette", "Beam Properties"));
iconPalette->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
//iconPalette->setMag(.5);
iconPalette->setGrid(27, 40);
iconPalette->setMag(.5);
iconPalette->setMinimumWidth(27 * 4 * Palette::guiMag() + 1); // enough room for all icons, with roundoff
iconPalette->setDrawGrid(true);
populateIconPalette(iconPalette, bpa);
iconPalette->setReadOnly(true);
iconPalette->setFixedHeight(iconPalette->heightForWidth(iconPalette->width()));
iconPalette->updateGeometry();
connect(resetGroups, SIGNAL(clicked()), SLOT(resetClicked()));
connect(view8, SIGNAL(noteClicked(Note*)), SLOT(noteClicked(Note*)));

View file

@ -158,17 +158,11 @@
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>134</width>
<height>80</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
@ -178,28 +172,18 @@
<property name="title">
<string>Beam Properties</string>
</property>
<widget class="Ms::Palette" name="iconPalette" native="true">
<property name="geometry">
<rect>
<x>10</x>
<y>30</y>
<width>114</width>
<height>40</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="Ms::Palette" name="iconPalette" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>

View file

@ -237,6 +237,21 @@ void Palette::setMag(qreal val)
extraMag = val;
}
//---------------------------------------------------------
// guiMag
//---------------------------------------------------------
qreal Palette::guiMag()
{
qreal pref = preferences.getDouble(PREF_APP_PALETTESCALE);
if (guiScaling <= 1.0) // low DPI: target is 100% life size
return pref * guiScaling;
else if (guiScaling > 1.33) // high DPI: target is 75% life size
return pref * guiScaling * 0.75;
else // medium high DPI: no target, scaling dependent on resolution
return pref; // (will be 75-100% range)
}
//---------------------------------------------------------
// contextMenuEvent
//---------------------------------------------------------
@ -326,6 +341,7 @@ void Palette::setGrid(int hh, int vv)
hgrid = hh;
vgrid = vv;
QSize s(hgrid, vgrid);
s *= guiMag();
setSizeIncrement(s);
setBaseSize(s);
setMinimumSize(s);
@ -806,15 +822,17 @@ void Palette::mouseDoubleClickEvent(QMouseEvent* ev)
int Palette::idx(const QPoint& p) const
{
int hgridM = gridWidthM();
int vgridM = gridHeightM();
if (columns() == 0)
return -1;
int rightBorder = width() % hgrid;
int hhgrid = hgrid + (rightBorder / columns());
int rightBorder = width() % hgridM;
int hhgrid = hgridM + (rightBorder / columns());
int x = p.x();
int y = p.y();
int row = y / vgrid;
int row = y / vgridM;
int col = x / hhgrid;
int nc = columns();
@ -834,15 +852,17 @@ int Palette::idx(const QPoint& p) const
int Palette::idx2(const QPoint& p) const
{
int hgridM = gridWidthM();
int vgridM = gridHeightM();
if (columns() == 0)
return -1;
int rightBorder = width() % hgrid;
int hhgrid = hgrid + (rightBorder / columns());
int rightBorder = width() % hgridM;
int hhgrid = hgridM + (rightBorder / columns());
int x = p.x();
int y = p.y();
int row = y / vgrid;
int row = y / vgridM;
int col = x / hhgrid;
int nc = columns();
@ -861,17 +881,19 @@ int Palette::idx2(const QPoint& p) const
QRect Palette::idxRect(int i) const
{
int hgridM = gridWidthM();
int vgridM = gridHeightM();
if (i == -1)
return QRect();
if (columns() == 0)
return QRect();
int rightBorder = width() % hgrid;
int hhgrid = hgrid + (rightBorder / columns());
int rightBorder = width() % hgridM;
int hhgrid = hgridM + (rightBorder / columns());
int cc = i % columns();
int cr = i / columns();
return QRect(cc * hhgrid, cr * vgrid, hhgrid, vgrid);
return QRect(cc * hhgrid, cr * vgridM, hhgrid, vgridM);
}
//---------------------------------------------------------
@ -1031,8 +1053,9 @@ static void paintPaletteElement(void* data, Element* e)
void Palette::paintEvent(QPaintEvent* /*event*/)
{
qreal _spatium = gscore->spatium();
// qreal mag = PALETTE_SPATIUM * extraMag * guiScaling / _spatium;
qreal mag = PALETTE_SPATIUM * extraMag / _spatium;
qreal magS = PALETTE_SPATIUM * extraMag * guiMag();
qreal mag = magS / _spatium;
// qreal mag = PALETTE_SPATIUM * extraMag / _spatium;
gscore->setSpatium(SPATIUM20);
QPainter p(this);
@ -1050,25 +1073,28 @@ void Palette::paintEvent(QPaintEvent* /*event*/)
//
// draw grid
//
int hgridM = gridWidthM();
int vgridM = gridHeightM();
if (columns() == 0)
return;
int rightBorder = width() % hgrid;
int hhgrid = hgrid + (rightBorder / columns());
int rightBorder = width() % hgridM;
int hhgrid = hgridM + (rightBorder / columns());
if (_drawGrid) {
p.setPen(Qt::gray);
for (int row = 1; row < rows(); ++row) {
int x2 = row < rows()-1 ? columns() * hhgrid : width();
int y = row * vgrid;
int y = row * vgridM;
p.drawLine(0, y, x2, y);
}
for (int column = 1; column < columns(); ++column) {
int x = hhgrid * column;
p.drawLine(x, 0, x, rows() * vgrid);
p.drawLine(x, 0, x, rows() * vgridM);
}
}
qreal dy = lrint(2 * PALETTE_SPATIUM * extraMag);
qreal dy = lrint(2 * magS);
//
// draw symbols
@ -1076,7 +1102,7 @@ void Palette::paintEvent(QPaintEvent* /*event*/)
// QPen pen(palette().color(QPalette::Normal, QPalette::Text));
QPen pen(Qt::black);
pen.setWidthF(MScore::defaultStyle().value(Sid::staffLineWidth).toDouble() * PALETTE_SPATIUM * extraMag);
pen.setWidthF(MScore::defaultStyle().value(Sid::staffLineWidth).toDouble() * magS);
for (int idx = 0; idx < ccp()->size(); ++idx) {
int yoffset = gscore->spatium() * _yOffset;
@ -1119,17 +1145,17 @@ void Palette::paintEvent(QPaintEvent* /*event*/)
qreal cellMag = cc->mag * mag;
if (el->isIcon()) {
toIcon(el)->setExtent((hhgrid < vgrid ? hhgrid : vgrid) - 4);
toIcon(el)->setExtent((hhgrid < vgridM ? hhgrid : vgridM) - 4);
cellMag = 1.0;
}
el->layout();
if (drawStaff) {
qreal y = r.y() + vgrid * .5 - dy + _yOffset * _spatium * cellMag;
qreal y = r.y() + vgridM * .5 - dy + _yOffset * _spatium * cellMag;
qreal x = r.x() + 3;
qreal w = hhgrid - 6;
for (int i = 0; i < 5; ++i) {
qreal yy = y + PALETTE_SPATIUM * i * extraMag;
qreal yy = y + i * magS;
p.drawLine(QLineF(x, yy, x + w, yy));
}
}
@ -1137,7 +1163,7 @@ void Palette::paintEvent(QPaintEvent* /*event*/)
p.scale(cellMag, cellMag);
double gw = hhgrid / cellMag;
double gh = vgrid / cellMag;
double gh = vgridM / cellMag;
double gx = column * gw + cc->xoffset * _spatium;
double gy = row * gh + cc->yoffset * _spatium;
@ -1181,7 +1207,10 @@ void Palette::paintEvent(QPaintEvent* /*event*/)
QPixmap Palette::pixmap(int paletteIdx) const
{
qreal _spatium = gscore->spatium();
qreal mag = PALETTE_SPATIUM * extraMag / _spatium;
qreal magS = PALETTE_SPATIUM * extraMag * guiMag();
qreal mag = magS / _spatium;
// qreal guiMag = guiScaling * preferences.getDouble(PREF_APP_PALETTESCALE);
// qreal mag = PALETTE_SPATIUM * extraMag * guiMag / _spatium;
PaletteCell* c = cellAt(paletteIdx);
if (!c || !c->element)
return QPixmap();
@ -1234,19 +1263,21 @@ QPixmap Palette::pixmap(int paletteIdx) const
bool Palette::event(QEvent* ev)
{
int hgridM = gridWidthM();
int vgridM = gridHeightM();
// disable mouse hover when keyboard navigation is enabled
if (filterActive && (ev->type() == QEvent::MouseMove || ev->type() == QEvent::ToolTip
|| ev->type() == QEvent::WindowDeactivate)) {
return true;
}
else if (columns() && (ev->type() == QEvent::ToolTip)) {
int rightBorder = width() % hgrid;
int hhgrid = hgrid + (rightBorder / columns());
int rightBorder = width() % hgridM;
int hhgrid = hgridM + (rightBorder / columns());
QHelpEvent* he = (QHelpEvent*)ev;
int x = he->pos().x();
int y = he->pos().y();
int row = y / vgrid;
int row = y / vgridM;
int col = x / hhgrid;
if (row < 0 || row >= rows())
@ -1563,6 +1594,15 @@ void Palette::clear()
cells.clear();
}
//---------------------------------------------------------
// columns
//---------------------------------------------------------
int Palette::columns() const
{
return width() / gridWidthM();
}
//---------------------------------------------------------
// rows
//---------------------------------------------------------
@ -1581,7 +1621,9 @@ int Palette::rows() const
int Palette::heightForWidth(int w) const
{
int c = w / hgrid;
int hgridM = gridWidthM();
int vgridM = gridHeightM();
int c = w / hgridM;
if (c <= 0)
c = 1;
int s = size();
@ -1590,9 +1632,9 @@ int Palette::heightForWidth(int w) const
int rows = (s + c - 1) / c;
if (rows <= 0)
rows = 1;
qreal mag = PALETTE_SPATIUM * extraMag;
int h = lrint(_yOffset * 2 * mag);
return rows * vgrid + h;
qreal magS = PALETTE_SPATIUM * extraMag * guiMag();
int h = lrint(_yOffset * 2 * magS);
return rows * vgridM + h;
}
//---------------------------------------------------------
@ -1602,7 +1644,8 @@ int Palette::heightForWidth(int w) const
QSize Palette::sizeHint() const
{
int h = heightForWidth(width());
return QSize((width() / hgrid) * hgrid, h);
int hgridM = gridWidthM();
return QSize((width() / hgridM) * hgridM, h);
}
//---------------------------------------------------------

View file

@ -161,8 +161,8 @@ class Palette : public QWidget {
void setMag(qreal val);
qreal mag() const { return extraMag; }
void setYOffset(qreal val) { _yOffset = val; }
qreal yOffset() const { return _yOffset; }
int columns() const { return width() / hgrid; }
qreal yOffset() const { return _yOffset; }
int columns() const;
int rows() const;
int size() const { return filterActive ? dragCells.size() : cells.size(); }
PaletteCell* cellAt(int index) const { return ccp()->value(index); }
@ -176,6 +176,10 @@ class Palette : public QWidget {
bool filter(const QString& text);
void setShowContextMenu(bool val) { _showContextMenu = val; }
static qreal guiMag();
int gridWidthM() const { return hgrid * guiMag(); }
int gridHeightM() const { return vgrid * guiMag(); }
int getCurrentIdx() { return currentIdx; }
void setCurrentIdx(int i) { currentIdx = i; }
bool isFilterActive() { return filterActive == true; }

View file

@ -24,6 +24,7 @@
#include "libmscore/icon.h"
#include "libmscore/select.h"
#include "palettetree.h"
#include "palette.h"
#include "preferences.h"
#include "scoreaccessibility.h"
@ -261,7 +262,7 @@ QVariant PaletteTreeModel::data(const QModelIndex& index, int role) const
case EditableRole:
return pp->editable();
case GridSizeRole:
return pp->gridSize();
return pp->gridSize() * Palette::guiMag();
case DrawGridRole:
return pp->drawGrid();
case PaletteExpandedRole:
@ -289,7 +290,7 @@ QVariant PaletteTreeModel::data(const QModelIndex& index, int role) const
qreal extraMag = 1.0;
if (const PalettePanel* pp = iptrToPalettePanel(index.internalPointer()))
extraMag = pp->mag();
return QIcon(new PaletteCellIconEngine(cell, extraMag));
return QIcon(new PaletteCellIconEngine(cell, extraMag * Palette::guiMag()));
}
case PaletteCellRole:
return QVariant::fromValue(cell.get());

View file

@ -99,6 +99,7 @@ void Preferences::init(bool storeInMemoryOnly)
{PREF_APP_PLAYBACK_PLAYREPEATS, new BoolPreference(true)},
{PREF_APP_PLAYBACK_LOOPTOSELECTIONONPLAY, new BoolPreference(true)},
{PREF_APP_USESINGLEPALETTE, new BoolPreference(false)},
{PREF_APP_PALETTESCALE, new DoublePreference(1.0)},
{PREF_APP_STARTUP_FIRSTSTART, new BoolPreference(true)},
{PREF_APP_STARTUP_SESSIONSTART, new EnumPreference(QVariant::fromValue(SessionStart::SCORE), false)},
{PREF_APP_STARTUP_STARTSCORE, new StringPreference(":/data/My_First_Score.mscx", false)},

View file

@ -96,6 +96,7 @@ enum class MusicxmlExportBreaks : char {
#define PREF_APP_PLAYBACK_PLAYREPEATS "application/playback/playRepeats"
#define PREF_APP_PLAYBACK_LOOPTOSELECTIONONPLAY "application/playback/setLoopToSelectionOnPlay"
#define PREF_APP_USESINGLEPALETTE "application/useSinglePalette"
#define PREF_APP_PALETTESCALE "application/paletteScale"
#define PREF_APP_STARTUP_FIRSTSTART "application/startup/firstStart"
#define PREF_APP_STARTUP_SESSIONSTART "application/startup/sessionStart"
#define PREF_APP_STARTUP_STARTSCORE "application/startup/startScore"

View file

@ -214,6 +214,8 @@ DoublePreferenceItem::DoublePreferenceItem(QString name)
_editor->setMaximum(DBL_MAX);
_editor->setMinimum(DBL_MIN);
_editor->setValue(_initialValue);
if (qAbs(_initialValue) < 2.0)
_editor->setSingleStep(0.1);
}
void DoublePreferenceItem::save()