utils: Provide size hints in native pixels
This is mainly to make the Xcb utils api consistent.
This commit is contained in:
parent
95f56399b8
commit
ddfb26fc8e
3 changed files with 24 additions and 27 deletions
|
@ -187,12 +187,12 @@ void TestXcbSizeHints::testSizeHints()
|
||||||
QCOMPARE(geoHints.hasResizeIncrements(), resizeInc.isValid());
|
QCOMPARE(geoHints.hasResizeIncrements(), resizeInc.isValid());
|
||||||
QCOMPARE(geoHints.hasSize(), userSize.isValid());
|
QCOMPARE(geoHints.hasSize(), userSize.isValid());
|
||||||
QCOMPARE(geoHints.hasWindowGravity(), gravity != 0);
|
QCOMPARE(geoHints.hasWindowGravity(), gravity != 0);
|
||||||
QTEST(geoHints.baseSize().toSize(), "expectedBaseSize");
|
QTEST(geoHints.baseSize(), "expectedBaseSize");
|
||||||
QTEST(geoHints.maxAspect(), "expectedMaxAspect");
|
QTEST(geoHints.maxAspect(), "expectedMaxAspect");
|
||||||
QTEST(geoHints.maxSize().toSize(), "expectedMaxSize");
|
QTEST(geoHints.maxSize(), "expectedMaxSize");
|
||||||
QTEST(geoHints.minAspect(), "expectedMinAspect");
|
QTEST(geoHints.minAspect(), "expectedMinAspect");
|
||||||
QTEST(geoHints.minSize().toSize(), "expectedMinSize");
|
QTEST(geoHints.minSize(), "expectedMinSize");
|
||||||
QTEST(geoHints.resizeIncrements().toSize(), "expectedResizeIncrements");
|
QTEST(geoHints.resizeIncrements(), "expectedResizeIncrements");
|
||||||
QTEST(qint32(geoHints.windowGravity()), "expectedGravity");
|
QTEST(qint32(geoHints.windowGravity()), "expectedGravity");
|
||||||
|
|
||||||
auto sizeHints = geoHints.m_sizeHints;
|
auto sizeHints = geoHints.m_sizeHints;
|
||||||
|
|
|
@ -1012,38 +1012,35 @@ public:
|
||||||
{
|
{
|
||||||
return testFlag(NormalHints::SizeHints::WindowGravity);
|
return testFlag(NormalHints::SizeHints::WindowGravity);
|
||||||
}
|
}
|
||||||
QSizeF maxSize() const
|
QSize maxSize() const
|
||||||
{
|
{
|
||||||
if (!hasMaxSize()) {
|
if (!hasMaxSize()) {
|
||||||
return QSize(INT_MAX, INT_MAX);
|
return QSize(INT_MAX, INT_MAX);
|
||||||
}
|
}
|
||||||
const QSize size(std::max(m_sizeHints->maxWidth, 1), std::max(m_sizeHints->maxHeight, 1));
|
return QSize(std::max(m_sizeHints->maxWidth, 1), std::max(m_sizeHints->maxHeight, 1));
|
||||||
return fromXNative(size);
|
|
||||||
}
|
}
|
||||||
QSizeF minSize() const
|
QSize minSize() const
|
||||||
{
|
{
|
||||||
if (!hasMinSize()) {
|
if (!hasMinSize()) {
|
||||||
// according to ICCCM 4.1.23 base size should be used as a fallback
|
// according to ICCCM 4.1.23 base size should be used as a fallback
|
||||||
return baseSize();
|
return baseSize();
|
||||||
}
|
}
|
||||||
const QSize size(m_sizeHints->minWidth, m_sizeHints->minHeight);
|
return QSize(m_sizeHints->minWidth, m_sizeHints->minHeight);
|
||||||
return fromXNative(size);
|
|
||||||
}
|
}
|
||||||
QSizeF baseSize() const
|
QSize baseSize() const
|
||||||
{
|
{
|
||||||
// Note: not using minSize as fallback
|
// Note: not using minSize as fallback
|
||||||
if (!hasBaseSize()) {
|
if (!hasBaseSize()) {
|
||||||
return QSize(0, 0);
|
return QSize(0, 0);
|
||||||
}
|
}
|
||||||
const QSize size(m_sizeHints->baseWidth, m_sizeHints->baseHeight);
|
return QSize(m_sizeHints->baseWidth, m_sizeHints->baseHeight);
|
||||||
return fromXNative(size);
|
|
||||||
}
|
}
|
||||||
QSizeF resizeIncrements() const
|
QSize resizeIncrements() const
|
||||||
{
|
{
|
||||||
if (!hasResizeIncrements()) {
|
if (!hasResizeIncrements()) {
|
||||||
return fromXNative(QSize(1, 1));
|
return QSize(1, 1);
|
||||||
}
|
}
|
||||||
return Xcb::fromXNative(QSize(std::max(m_sizeHints->widthInc, 1), std::max(m_sizeHints->heightInc, 1)));
|
return QSize(std::max(m_sizeHints->widthInc, 1), std::max(m_sizeHints->heightInc, 1));
|
||||||
}
|
}
|
||||||
xcb_gravity_t windowGravity() const
|
xcb_gravity_t windowGravity() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -3003,7 +3003,7 @@ bool X11Window::belongsToSameApplication(const Window *other, SameApplicationChe
|
||||||
|
|
||||||
QSizeF X11Window::resizeIncrements() const
|
QSizeF X11Window::resizeIncrements() const
|
||||||
{
|
{
|
||||||
return m_geometryHints.resizeIncrements();
|
return Xcb::fromXNative(m_geometryHints.resizeIncrements());
|
||||||
}
|
}
|
||||||
|
|
||||||
Xcb::StringProperty X11Window::fetchApplicationMenuServiceName() const
|
Xcb::StringProperty X11Window::fetchApplicationMenuServiceName() const
|
||||||
|
@ -3711,13 +3711,13 @@ QSizeF X11Window::constrainClientSize(const QSizeF &size, SizeMode mode) const
|
||||||
return QSizeF(w, h);
|
return QSizeF(w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal width_inc = m_geometryHints.resizeIncrements().width();
|
qreal width_inc = Xcb::fromXNative(m_geometryHints.resizeIncrements()).width();
|
||||||
qreal height_inc = m_geometryHints.resizeIncrements().height();
|
qreal height_inc = Xcb::fromXNative(m_geometryHints.resizeIncrements()).height();
|
||||||
qreal basew_inc = m_geometryHints.baseSize().width();
|
qreal basew_inc = Xcb::fromXNative(m_geometryHints.baseSize()).width();
|
||||||
qreal baseh_inc = m_geometryHints.baseSize().height();
|
qreal baseh_inc = Xcb::fromXNative(m_geometryHints.baseSize()).height();
|
||||||
if (!m_geometryHints.hasBaseSize()) {
|
if (!m_geometryHints.hasBaseSize()) {
|
||||||
basew_inc = m_geometryHints.minSize().width();
|
basew_inc = Xcb::fromXNative(m_geometryHints.minSize()).width();
|
||||||
baseh_inc = m_geometryHints.minSize().height();
|
baseh_inc = Xcb::fromXNative(m_geometryHints.minSize()).height();
|
||||||
}
|
}
|
||||||
|
|
||||||
w = std::floor((w - basew_inc) / width_inc) * width_inc + basew_inc;
|
w = std::floor((w - basew_inc) / width_inc) * width_inc + basew_inc;
|
||||||
|
@ -3746,7 +3746,7 @@ QSizeF X11Window::constrainClientSize(const QSizeF &size, SizeMode mode) const
|
||||||
// According to ICCCM 4.1.2.3 PMinSize should be a fallback for PBaseSize for size increments,
|
// According to ICCCM 4.1.2.3 PMinSize should be a fallback for PBaseSize for size increments,
|
||||||
// but not for aspect ratio. Since this code comes from FVWM, handles both at the same time,
|
// but not for aspect ratio. Since this code comes from FVWM, handles both at the same time,
|
||||||
// and I have no idea how it works, let's hope nobody relies on that.
|
// and I have no idea how it works, let's hope nobody relies on that.
|
||||||
const QSizeF baseSize = m_geometryHints.baseSize();
|
const QSizeF baseSize = Xcb::fromXNative(m_geometryHints.baseSize());
|
||||||
w -= baseSize.width();
|
w -= baseSize.width();
|
||||||
h -= baseSize.height();
|
h -= baseSize.height();
|
||||||
qreal max_width = max_size.width() - baseSize.width();
|
qreal max_width = max_size.width() - baseSize.width();
|
||||||
|
@ -3881,12 +3881,12 @@ void X11Window::getWmNormalHints()
|
||||||
|
|
||||||
QSizeF X11Window::minSize() const
|
QSizeF X11Window::minSize() const
|
||||||
{
|
{
|
||||||
return rules()->checkMinSize(m_geometryHints.minSize());
|
return rules()->checkMinSize(Xcb::fromXNative(m_geometryHints.minSize()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QSizeF X11Window::maxSize() const
|
QSizeF X11Window::maxSize() const
|
||||||
{
|
{
|
||||||
return rules()->checkMaxSize(m_geometryHints.maxSize());
|
return rules()->checkMaxSize(Xcb::fromXNative(m_geometryHints.maxSize()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QSizeF X11Window::basicUnit() const
|
QSizeF X11Window::basicUnit() const
|
||||||
|
@ -3895,7 +3895,7 @@ QSizeF X11Window::basicUnit() const
|
||||||
if (!isX11Mode) {
|
if (!isX11Mode) {
|
||||||
return QSize(1, 1);
|
return QSize(1, 1);
|
||||||
}
|
}
|
||||||
return m_geometryHints.resizeIncrements();
|
return Xcb::fromXNative(m_geometryHints.resizeIncrements());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue