diff --git a/include/wx/qt/private/compat.h b/include/wx/qt/private/compat.h new file mode 100644 index 0000000000..60f8a0ea23 --- /dev/null +++ b/include/wx/qt/private/compat.h @@ -0,0 +1,26 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/qt/private/compat.h +// Purpose: Helpers for dealing with various Qt versions +// Author: Vadim Zeitlin +// Created: 2022-10-21 +// Copyright: (c) 2022 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_QT_PRIVATE_COMPAT_H_ +#define _WX_QT_PRIVATE_COMPAT_H_ + +#include + +// Hide the difference in name of QFontMetrics::width() in various Qt versions. +inline int +wxQtGetWidthFromMetrics(const QFontMetrics& metrics, const QString& string) +{ +#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)) + return metrics.horizontalAdvance( string ); +#else + return metrics.width( string ); +#endif +} + +#endif // _WX_QT_PRIVATE_COMPAT_H_ diff --git a/src/qt/bitmap.cpp b/src/qt/bitmap.cpp index c8c3336d62..8ebc15c676 100644 --- a/src/qt/bitmap.cpp +++ b/src/qt/bitmap.cpp @@ -212,7 +212,7 @@ wxBitmap::wxBitmap(const wxString &filename, wxBitmapType type ) void wxBitmap::InitFromImage(const wxImage& image, int depth, double WXUNUSED(scale) ) { - Qt::ImageConversionFlags flags = nullptr; + Qt::ImageConversionFlags flags; if (depth == 1) flags = Qt::MonoOnly; m_refData = new wxBitmapRefData(QPixmap::fromImage(ConvertImage(image), flags)); diff --git a/src/qt/choice.cpp b/src/qt/choice.cpp index 2afbd74f88..aafaee9920 100644 --- a/src/qt/choice.cpp +++ b/src/qt/choice.cpp @@ -232,7 +232,7 @@ int wxChoice::DoInsertOneItem(const wxString& item, unsigned int pos) void wxChoice::DoSetItemClientData(unsigned int n, void *clientData) { - QVariant variant = qVariantFromValue(clientData); + QVariant variant = QVariant::fromValue(clientData); m_qtComboBox->setItemData(n, variant); } diff --git a/src/qt/dc.cpp b/src/qt/dc.cpp index 4a176a538c..7cbe3d62cd 100644 --- a/src/qt/dc.cpp +++ b/src/qt/dc.cpp @@ -23,6 +23,7 @@ #include "wx/qt/dc.h" #include "wx/qt/private/converter.h" #include "wx/qt/private/utils.h" +#include "wx/qt/private/compat.h" #include #include @@ -383,7 +384,7 @@ void wxQtDCImpl::DoGetTextExtent(const wxString& string, { // note that boundingRect doesn't return "advance width" for spaces if (x != nullptr) - *x = metrics.width( wxQtConvertString(string) ); + *x = wxQtGetWidthFromMetrics(metrics, wxQtConvertString(string)); if (y != nullptr) *y = metrics.height(); } diff --git a/src/qt/listbox.cpp b/src/qt/listbox.cpp index 4ebc993462..1d257a19c4 100644 --- a/src/qt/listbox.cpp +++ b/src/qt/listbox.cpp @@ -245,7 +245,7 @@ void wxListBox::DoSetSelection(int n, bool select) return; } - m_qtListWidget->setItemSelected( m_qtListWidget->item(n), select); + m_qtListWidget->item(n)->setSelected(select); } int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items, @@ -275,7 +275,7 @@ int wxListBox::DoInsertOneItem(const wxString& text, unsigned int pos) void wxListBox::DoSetItemClientData(unsigned int n, void *clientData) { QListWidgetItem* item = m_qtListWidget->item(n); - QVariant variant = qVariantFromValue(clientData); + QVariant variant = QVariant::fromValue(clientData); item->setData(Qt::UserRole, variant); } @@ -316,6 +316,6 @@ void wxListBox::UnSelectAll() { Q_FOREACH(QListWidgetItem* l, m_qtListWidget->selectedItems()) { - m_qtListWidget->setItemSelected( l, false ); + l->setSelected(false); } } diff --git a/src/qt/region.cpp b/src/qt/region.cpp index b835c56c47..21e67c46f5 100644 --- a/src/qt/region.cpp +++ b/src/qt/region.cpp @@ -334,8 +334,8 @@ wxRegionIterator::wxRegionIterator() wxRegionIterator::wxRegionIterator(const wxRegion& region) { - m_qtRects = new QVector< QRect >( region.GetHandle().rects() ); - m_pos = 0; + m_qtRects = nullptr; + Reset(region); } wxRegionIterator::wxRegionIterator(const wxRegionIterator& ri) @@ -369,7 +369,12 @@ void wxRegionIterator::Reset(const wxRegion& region) { delete m_qtRects; - m_qtRects = new QVector< QRect >( region.GetHandle().rects() ); + auto qtRegion = region.GetHandle(); + m_qtRects = new QVector< QRect >(); + m_qtRects->reserve(qtRegion.rectCount()); + for (const auto& r : qtRegion) + m_qtRects->push_back(r); + m_pos = 0; } diff --git a/src/qt/treectrl.cpp b/src/qt/treectrl.cpp index af65bc105a..b6fffa2404 100644 --- a/src/qt/treectrl.cpp +++ b/src/qt/treectrl.cpp @@ -671,7 +671,7 @@ wxColour wxTreeCtrl::GetItemTextColour(const wxTreeItemId& item) const wxCHECK_MSG(item.IsOk(), wxNullColour, "invalid tree item"); const QTreeWidgetItem* qTreeItem = wxQtConvertTreeItem(item); - return wxQtConvertColour(qTreeItem->textColor(0)); + return wxQtConvertColour(qTreeItem->foreground(0).color()); } wxColour wxTreeCtrl::GetItemBackgroundColour(const wxTreeItemId& item) const @@ -679,7 +679,7 @@ wxColour wxTreeCtrl::GetItemBackgroundColour(const wxTreeItemId& item) const wxCHECK_MSG(item.IsOk(), wxNullColour, "invalid tree item"); const QTreeWidgetItem* qTreeItem = wxQtConvertTreeItem(item); - return wxQtConvertColour(qTreeItem->backgroundColor(0)); + return wxQtConvertColour(qTreeItem->background(0).color()); } wxFont wxTreeCtrl::GetItemFont(const wxTreeItemId& item) const @@ -760,8 +760,8 @@ void wxTreeCtrl::SetItemDropHighlight(const wxTreeItemId& item, bool highlight) fg = GetForegroundColour(); } - qTreeItem->setBackgroundColor(0, wxQtConvertColour(bg)); - qTreeItem->setTextColor(0, wxQtConvertColour(fg)); + qTreeItem->setBackground(0, wxQtConvertColour(bg)); + qTreeItem->setForeground(0, wxQtConvertColour(fg)); } void wxTreeCtrl::SetItemTextColour( @@ -772,7 +772,7 @@ void wxTreeCtrl::SetItemTextColour( wxCHECK_RET(item.IsOk(), "invalid tree item"); QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); - qTreeItem->setTextColor(0, wxQtConvertColour(col)); + qTreeItem->setForeground(0, wxQtConvertColour(col)); } void wxTreeCtrl::SetItemBackgroundColour( @@ -783,7 +783,7 @@ void wxTreeCtrl::SetItemBackgroundColour( wxCHECK_RET(item.IsOk(), "invalid tree item"); QTreeWidgetItem *qTreeItem = wxQtConvertTreeItem(item); - qTreeItem->setBackgroundColor(0, wxQtConvertColour(col)); + qTreeItem->setBackground(0, wxQtConvertColour(col)); } void wxTreeCtrl::SetItemFont(const wxTreeItemId& item, const wxFont& font) diff --git a/src/qt/utils.cpp b/src/qt/utils.cpp index e723e4114c..d06077a203 100644 --- a/src/qt/utils.cpp +++ b/src/qt/utils.cpp @@ -38,7 +38,7 @@ void wxQtFillMouseButtons( Qt::MouseButtons buttons, wxMouseState *state ) { state->SetLeftDown( buttons.testFlag( Qt::LeftButton ) ); state->SetRightDown( buttons.testFlag( Qt::RightButton ) ); - state->SetMiddleDown( buttons.testFlag( Qt::MidButton ) ); + state->SetMiddleDown( buttons.testFlag( Qt::MiddleButton ) ); state->SetAux1Down( buttons.testFlag( Qt::XButton1 ) ); state->SetAux2Down( buttons.testFlag( Qt::XButton2 ) ); } diff --git a/src/qt/window.cpp b/src/qt/window.cpp index e774253d8f..a42919c38d 100644 --- a/src/qt/window.cpp +++ b/src/qt/window.cpp @@ -32,6 +32,7 @@ #include "wx/tooltip.h" #include "wx/qt/private/utils.h" #include "wx/qt/private/converter.h" +#include "wx/qt/private/compat.h" #include "wx/qt/private/winevent.h" #define VERT_SCROLLBAR_POSITION 0, 1 @@ -224,7 +225,7 @@ static const char WINDOW_POINTER_PROPERTY_NAME[] = "wxWindowPointer"; /* static */ void wxWindowQt::QtStoreWindowPointer( QWidget *widget, const wxWindowQt *window ) { QVariant variant; - qVariantSetValue( variant, window ); + variant.setValue( window ); widget->setProperty( WINDOW_POINTER_PROPERTY_NAME, variant ); } @@ -413,8 +414,8 @@ void wxWindowQt::PostCreation(bool generic) // // Set the default color so Paint Event default handler clears the DC: - wxWindowBase::SetBackgroundColour(wxColour(GetHandle()->palette().background().color())); - wxWindowBase::SetForegroundColour(wxColour(GetHandle()->palette().foreground().color())); + wxWindowBase::SetBackgroundColour(wxColour(GetHandle()->palette().window().color())); + wxWindowBase::SetForegroundColour(wxColour(GetHandle()->palette().windowText().color())); GetHandle()->setFont( wxWindowBase::GetFont().GetHandle() ); @@ -614,7 +615,7 @@ void wxWindowQt::DoGetTextExtent(const wxString& string, int *x, int *y, int *de QFontMetrics fontMetrics( font != nullptr ? font->GetHandle() : GetHandle()->font() ); if ( x != nullptr ) - *x = fontMetrics.width( wxQtConvertString( string )); + *x = wxQtGetWidthFromMetrics(fontMetrics, wxQtConvertString( string )); if ( y != nullptr ) *y = fontMetrics.height(); @@ -1341,7 +1342,12 @@ bool wxWindowQt::QtHandleResizeEvent ( QWidget *WXUNUSED( handler ), QResizeEven bool wxWindowQt::QtHandleWheelEvent ( QWidget *WXUNUSED( handler ), QWheelEvent *event ) { wxMouseEvent e( wxEVT_MOUSEWHEEL ); - e.SetPosition( wxQtConvertPoint( event->pos() ) ); +#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) + QPoint qPt = event->position().toPoint(); +#else + QPoint qPt = event->pos(); +#endif + e.SetPosition( wxQtConvertPoint( qPt ) ); e.SetEventObject(this); e.m_wheelAxis = ( event->orientation() == Qt::Vertical ) ? wxMOUSE_WHEEL_VERTICAL : wxMOUSE_WHEEL_HORIZONTAL; @@ -1451,7 +1457,7 @@ bool wxWindowQt::QtHandleMouseEvent ( QWidget *handler, QMouseEvent *event ) case Qt::RightButton: wxType = wxEVT_RIGHT_DCLICK; break; - case Qt::MidButton: + case Qt::MiddleButton: wxType = wxEVT_MIDDLE_DCLICK; break; case Qt::XButton1: @@ -1475,7 +1481,7 @@ bool wxWindowQt::QtHandleMouseEvent ( QWidget *handler, QMouseEvent *event ) case Qt::RightButton: wxType = wxEVT_RIGHT_DOWN; break; - case Qt::MidButton: + case Qt::MiddleButton: wxType = wxEVT_MIDDLE_DOWN; break; case Qt::XButton1: @@ -1499,7 +1505,7 @@ bool wxWindowQt::QtHandleMouseEvent ( QWidget *handler, QMouseEvent *event ) case Qt::RightButton: wxType = wxEVT_RIGHT_UP; break; - case Qt::MidButton: + case Qt::MiddleButton: wxType = wxEVT_MIDDLE_UP; break; case Qt::XButton1: