changeset 28608:966193fa1037

make change in 562902dc1bb6 conditional (bug #58867) * TerminalView.cpp (TerminalView::paintEvent): Use Qt foreach loop if QRegion does not have C++ standard iterators. * acinclude.m4 (OCTAVE_CHECK_QREGION_ITERATORS): New macro. (OCTAVE_CHECK_QT_VERSION): Use it.
author John W. Eaton <jwe@octave.org>
date Mon, 03 Aug 2020 09:07:11 -0400
parents b9bf7a6bb8de
children 57b9588b4d3c
files libgui/qterminal/libqterminal/unix/TerminalView.cpp m4/acinclude.m4
diffstat 2 files changed, 45 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Thu Jul 30 00:22:26 2020 -0400
+++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Mon Aug 03 09:07:11 2020 -0400
@@ -963,8 +963,12 @@
   QPainter paint(this);
   //qDebug("%s %d paintEvent %d %d", __FILE__, __LINE__, paint.window().top(), paint.window().right());
 
+#if defined (HAVE_QREGION_ITERATORS)
   for (QRect rect : (pe->region() & contentsRect()))
-    {
+#else
+  foreach (QRect rect, (pe->region() & contentsRect()).rects())
+#endif
+  {
       drawBackground(paint,rect,palette().window().color());
       drawContents(paint, rect);
     }
--- a/m4/acinclude.m4	Thu Jul 30 00:22:26 2020 -0400
+++ b/m4/acinclude.m4	Mon Aug 03 09:07:11 2020 -0400
@@ -523,6 +523,44 @@
   fi
 ])
 dnl
+dnl Check whether the Qt class QRegion has the iterators and related
+dnl functions introduced in Qt 5.8.
+dnl
+AC_DEFUN([OCTAVE_CHECK_QREGION_ITERATORS], [
+  AC_CACHE_CHECK([for QRegion iterators and related functions],
+    [octave_cv_qregion_iterators],
+    [AC_LANG_PUSH(C++)
+    ac_octave_save_CPPFLAGS="$CPPFLAGS"
+    ac_octave_save_CXXFLAGS="$CXXFLAGS"
+    CPPFLAGS="$QT_CPPFLAGS $CXXPICFLAG $CPPFLAGS"
+    CXXFLAGS="$CXXPICFLAG $CXXFLAGS"
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <QRegion>
+        ]], [[
+        QRegion region;
+        QRegion::const_iterator it;
+        it = region.begin ();
+        it = region.end ();
+        it = region.cbegin ();
+        it = region.cend ();
+        QRegion::const_reverse_iterator rit;
+        rit = region.rbegin ();
+        rit = region.rend ();
+        rit = region.crbegin ();
+        rit = region.crend ();
+        ]])],
+      octave_cv_qregion_iterators=yes,
+      octave_cv_qregion_iterators=no)
+    CPPFLAGS="$ac_octave_save_CPPFLAGS"
+    CXXFLAGS="$ac_octave_save_CXXFLAGS"
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_qregion_iterators = yes; then
+    AC_DEFINE(HAVE_QREGION_ITERATORS, 1,
+      [Define to 1 if you have the `QFontMetrics::horizontalAdvance' function.])
+  fi
+])
+dnl
 dnl Check whether HDF5 library has version 1.6 API functions.
 dnl
 AC_DEFUN([OCTAVE_CHECK_HDF5_HAS_VER_16_API], [
@@ -1828,6 +1866,8 @@
     OCTAVE_CHECK_FUNC_QLIST_ITERATOR_CONSTRUCTOR
     OCTAVE_CHECK_FUNC_QSCREEN_DEVICEPIXELRATIO
 
+    OCTAVE_CHECK_QREGION_ITERATORS
+
     if test -n "$OPENGL_LIBS"; then
       OCTAVE_CHECK_QT_OPENGL_OK([build_qt_graphics=yes],
         [warn_qt_opengl="Qt does not work with the OpenGL libs (GL and GLU); disabling OpenGL graphics with Qt GUI"])