From 8c41f09bcf1d14a36d84b18983ebe6d80aa3422a Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Wed, 15 Jun 2022 23:58:46 +0300 Subject: [PATCH] optimize named X11 colors lookup by using pre-generated colors table Signed-off-by: Ivailo Monev --- src/gui/CMakeLists.txt | 1 - src/gui/painting/qcolor.cpp | 36 ++++++++++++++---------------------- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 9d9079a17..107fb2ebc 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -964,7 +964,6 @@ katie_unity_exclude( ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qx11info_x11.cpp ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qt_x11.cpp ${CMAKE_CURRENT_SOURCE_DIR}/painting/qbackingstore.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/painting/qcolor.cpp ${CMAKE_CURRENT_SOURCE_DIR}/painting/qcolormap_x11.cpp ${CMAKE_CURRENT_SOURCE_DIR}/painting/qpaintengine_x11.cpp ${CMAKE_CURRENT_SOURCE_DIR}/painting/qregion.cpp diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp index 6cf201af5..9d58b01ce 100644 --- a/src/gui/painting/qcolor.cpp +++ b/src/gui/painting/qcolor.cpp @@ -24,18 +24,10 @@ #include "qnamespace.h" #include "qdatastream.h" #include "qvariant.h" +#include "qmath.h" #include "qdebug.h" #include "qcorecommon_p.h" -#ifdef Q_WS_X11 -# include "qapplication.h" -# include "qx11info_x11.h" -# include "qt_x11_p.h" - -#endif - -#include -#include #include QT_BEGIN_NAMESPACE @@ -537,13 +529,13 @@ bool QColor::setNamedColor(const QString &name) #endif #ifdef Q_WS_X11 - XColor result; - if (allowX11ColorNames() - && QApplication::instance() - && QX11Info::display() - && XParseColor(QX11Info::display(), QX11Info::appColormap(), latin.constData(), &result)) { - setRgb(result.red >> 8, result.green >> 8, result.blue >> 8); - return true; + if (qAllowX11ColorNames) { + for (qint16 i = 0; i < X11RGBTblSize; i++) { + if (qstricmp(X11RGBTbl[i].name, latin.constData()) == 0) { + setRgba(X11RGBTbl[i].value); + return true; + } + } } #endif @@ -592,12 +584,12 @@ bool QColor::isValidColor(const QString &name) #endif #ifdef Q_WS_X11 - XColor result; - if (allowX11ColorNames() - && QApplication::instance() - && QX11Info::display() - && XParseColor(QX11Info::display(), QX11Info::appColormap(), latin.constData(), &result)) { - return true; + if (qAllowX11ColorNames) { + for (qint16 i = 0; i < X11RGBTblSize; i++) { + if (qstricmp(X11RGBTbl[i].name, latin.constData()) == 0) { + return true; + } + } } #endif -- 2.11.0