Merge pull request #5480 from MarcSabatella/297287-palette-scale
fix #297287: scale palettes with monitor resolution +collect_artifacts
This commit is contained in:
commit
acd6f78608
11 changed files with 113 additions and 67 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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*)));
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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)},
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue