diff options
Diffstat (limited to 'src/platformsupport')
54 files changed, 3336 insertions, 516 deletions
diff --git a/src/platformsupport/cglconvenience/cglconvenience.mm b/src/platformsupport/cglconvenience/cglconvenience.mm deleted file mode 100644 index 85add35879..0000000000 --- a/src/platformsupport/cglconvenience/cglconvenience.mm +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "cglconvenience_p.h" -#include <QtCore/qglobal.h> -#include <QtCore/private/qcore_mac_p.h> -#include <AppKit/AppKit.h> -#include <QVector> -#include <qdebug.h> - -// Match up with createNSOpenGLPixelFormat below! -QSurfaceFormat qcgl_surfaceFormat() -{ - QSurfaceFormat format; - format.setRenderableType(QSurfaceFormat::OpenGL); - format.setRedBufferSize(8); - format.setGreenBufferSize(8); - format.setBlueBufferSize(8); - format.setAlphaBufferSize(8); -/* - format.setDepthBufferSize(24); - format.setAccumBufferSize(0); - format.setStencilBufferSize(8); - format.setSampleBuffers(false); - format.setSamples(1); - format.setDepth(true); - format.setRgba(true); - format.setAlpha(true); - format.setAccum(false); - format.setStencil(true); - format.setStereo(false); - format.setDirectRendering(false); -*/ - return format; -} - -void *qcgl_createNSOpenGLPixelFormat(const QSurfaceFormat &format) -{ - - QVector<NSOpenGLPixelFormatAttribute> attrs; - - if (format.swapBehavior() == QSurfaceFormat::DoubleBuffer - || format.swapBehavior() == QSurfaceFormat::DefaultSwapBehavior) - attrs.append(NSOpenGLPFADoubleBuffer); - else if (format.swapBehavior() == QSurfaceFormat::TripleBuffer) - attrs.append(NSOpenGLPFATripleBuffer); - - if (format.profile() == QSurfaceFormat::CoreProfile - && ((format.majorVersion() == 3 && format.minorVersion() >= 2) - || format.majorVersion() > 3)) { - attrs << NSOpenGLPFAOpenGLProfile; - attrs << NSOpenGLProfileVersion3_2Core; - } else { - attrs << NSOpenGLPFAOpenGLProfile; - attrs << NSOpenGLProfileVersionLegacy; - } - - if (format.depthBufferSize() > 0) - attrs << NSOpenGLPFADepthSize << format.depthBufferSize(); - if (format.stencilBufferSize() > 0) - attrs << NSOpenGLPFAStencilSize << format.stencilBufferSize(); - if (format.alphaBufferSize() > 0) - attrs << NSOpenGLPFAAlphaSize << format.alphaBufferSize(); - if ((format.redBufferSize() > 0) && - (format.greenBufferSize() > 0) && - (format.blueBufferSize() > 0)) { - const int colorSize = format.redBufferSize() + - format.greenBufferSize() + - format.blueBufferSize(); - attrs << NSOpenGLPFAColorSize << colorSize << NSOpenGLPFAMinimumPolicy; - } - - if (format.samples() > 0) { - attrs << NSOpenGLPFAMultisample - << NSOpenGLPFASampleBuffers << (NSOpenGLPixelFormatAttribute) 1 - << NSOpenGLPFASamples << (NSOpenGLPixelFormatAttribute) format.samples(); - } - - if (format.stereo()) - attrs << NSOpenGLPFAStereo; - - attrs << NSOpenGLPFAAllowOfflineRenderers; - - QByteArray useLayer = qgetenv("QT_MAC_WANTS_LAYER"); - if (!useLayer.isEmpty() && useLayer.toInt() > 0) { - // Disable the software rendering fallback. This makes compositing - // OpenGL and raster NSViews using Core Animation layers possible. - attrs << NSOpenGLPFANoRecovery; - } - - attrs << 0; - - NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs.constData()]; - return pixelFormat; -} diff --git a/src/platformsupport/cglconvenience/cglconvenience.pro b/src/platformsupport/cglconvenience/cglconvenience.pro deleted file mode 100644 index 89d1fc4643..0000000000 --- a/src/platformsupport/cglconvenience/cglconvenience.pro +++ /dev/null @@ -1,17 +0,0 @@ -TARGET = QtCglSupport -MODULE = cgl_support - -QT = core-private gui -CONFIG += static internal_module - -DEFINES += QT_NO_CAST_FROM_ASCII - -HEADERS += \ - cglconvenience_p.h - -OBJECTIVE_SOURCES += \ - cglconvenience.mm - -LIBS_PRIVATE += -framework AppKit -framework OpenGL - -load(qt_module) diff --git a/src/platformsupport/clipboard/clipboard.pro b/src/platformsupport/clipboard/clipboard.pro index def2a061a0..916f6b0c06 100644 --- a/src/platformsupport/clipboard/clipboard.pro +++ b/src/platformsupport/clipboard/clipboard.pro @@ -9,6 +9,7 @@ DEFINES += QT_NO_CAST_FROM_ASCII HEADERS += qmacmime_p.h SOURCES += qmacmime.mm +LIBS += -framework ImageIO macos: LIBS_PRIVATE += -framework AppKit load(qt_module) diff --git a/src/platformsupport/clipboard/qmacmime.mm b/src/platformsupport/clipboard/qmacmime.mm index 6a6e033bec..09901ba0a5 100644 --- a/src/platformsupport/clipboard/qmacmime.mm +++ b/src/platformsupport/clipboard/qmacmime.mm @@ -37,10 +37,15 @@ ** ****************************************************************************/ +#include <ImageIO/ImageIO.h> + #include <QtCore/qsystemdetection.h> +#include <QtGui/qimage.h> #if defined(Q_OS_OSX) #import <AppKit/AppKit.h> +#else +#include <MobileCoreServices/MobileCoreServices.h> #endif #if defined(QT_PLATFORM_UIKIT) @@ -779,6 +784,85 @@ QList<QByteArray> QMacPasteboardMimeVCard::convertFromMime(const QString &mime, return ret; } +extern QImage qt_mac_toQImage(CGImageRef image); +extern CGImageRef qt_mac_toCGImage(const QImage &qImage); + +class QMacPasteboardMimeTiff : public QMacInternalPasteboardMime { +public: + QMacPasteboardMimeTiff() : QMacInternalPasteboardMime(MIME_ALL) { } + QString convertorName(); + + QString flavorFor(const QString &mime); + QString mimeFor(QString flav); + bool canConvert(const QString &mime, QString flav); + QVariant convertToMime(const QString &mime, QList<QByteArray> data, QString flav); + QList<QByteArray> convertFromMime(const QString &mime, QVariant data, QString flav); +}; + +QString QMacPasteboardMimeTiff::convertorName() +{ + return QLatin1String("Tiff"); +} + +QString QMacPasteboardMimeTiff::flavorFor(const QString &mime) +{ + if (mime.startsWith(QLatin1String("application/x-qt-image"))) + return QLatin1String("public.tiff"); + return QString(); +} + +QString QMacPasteboardMimeTiff::mimeFor(QString flav) +{ + if (flav == QLatin1String("public.tiff")) + return QLatin1String("application/x-qt-image"); + return QString(); +} + +bool QMacPasteboardMimeTiff::canConvert(const QString &mime, QString flav) +{ + return flav == QLatin1String("public.tiff") && mime == QLatin1String("application/x-qt-image"); +} + +QVariant QMacPasteboardMimeTiff::convertToMime(const QString &mime, QList<QByteArray> data, QString flav) +{ + if (data.count() > 1) + qWarning("QMacPasteboardMimeTiff: Cannot handle multiple member data"); + + if (!canConvert(mime, flav)) + return QVariant(); + + QCFType<CFDataRef> tiffData = data.first().toRawCFData(); + QCFType<CGImageSourceRef> imageSource = CGImageSourceCreateWithData(tiffData, 0); + + if (QCFType<CGImageRef> image = CGImageSourceCreateImageAtIndex(imageSource, 0, 0)) + return QVariant(qt_mac_toQImage(image)); + + return QVariant(); +} + +QList<QByteArray> QMacPasteboardMimeTiff::convertFromMime(const QString &mime, QVariant variant, QString flav) +{ + if (!canConvert(mime, flav)) + return QList<QByteArray>(); + + QCFType<CFMutableDataRef> data = CFDataCreateMutable(0, 0); + QCFType<CGImageDestinationRef> imageDestination = CGImageDestinationCreateWithData(data, kUTTypeTIFF, 1, 0); + + if (!imageDestination) + return QList<QByteArray>(); + + QImage img = qvariant_cast<QImage>(variant); + NSDictionary *props = @{ + static_cast<NSString *>(kCGImagePropertyPixelWidth) : [NSNumber numberWithInt:img.width()], + static_cast<NSString *>(kCGImagePropertyPixelHeight) : [NSNumber numberWithInt:img.height()] + }; + + CGImageDestinationAddImage(imageDestination, qt_mac_toCGImage(img), static_cast<CFDictionaryRef>(props)); + CGImageDestinationFinalize(imageDestination); + + return QList<QByteArray>() << QByteArray::fromCFData(data); +} + /*! \internal @@ -792,6 +876,7 @@ void QMacInternalPasteboardMime::initializeMimeTypes() new QMacPasteboardMimeAny; //standard types that we wrap + new QMacPasteboardMimeTiff; new QMacPasteboardMimePlainTextFallback; new QMacPasteboardMimeUnicodeText; new QMacPasteboardMimeRtfText; diff --git a/src/platformsupport/edid/edid.pro b/src/platformsupport/edid/edid.pro new file mode 100644 index 0000000000..842a91170e --- /dev/null +++ b/src/platformsupport/edid/edid.pro @@ -0,0 +1,13 @@ +TARGET = QtEdidSupport +MODULE = edid_support + +QT = core-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += qedidparser_p.h +SOURCES += qedidparser.cpp + +load(qt_module) diff --git a/src/platformsupport/edid/qedidparser.cpp b/src/platformsupport/edid/qedidparser.cpp new file mode 100644 index 0000000000..ccf12e9eb3 --- /dev/null +++ b/src/platformsupport/edid/qedidparser.cpp @@ -0,0 +1,177 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtCore/QFile> + +#include "qedidparser_p.h" +#include "qedidvendortable_p.h" + +#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0]) + +#define EDID_DESCRIPTOR_ALPHANUMERIC_STRING 0xfe +#define EDID_DESCRIPTOR_PRODUCT_NAME 0xfc +#define EDID_DESCRIPTOR_SERIAL_NUMBER 0xff + +#define EDID_OFFSET_DATA_BLOCKS 0x36 +#define EDID_OFFSET_LAST_BLOCK 0x6c +#define EDID_OFFSET_PNP_ID 0x08 +#define EDID_OFFSET_SERIAL 0x0c +#define EDID_PHYSICAL_WIDTH 0x15 +#define EDID_OFFSET_PHYSICAL_HEIGHT 0x16 + +QT_BEGIN_NAMESPACE + +QEdidParser::QEdidParser() +{ + // Cache vendors list from pnp.ids + const QString fileName = QLatin1String("/usr/share/hwdata/pnp.ids"); + if (QFile::exists(fileName)) { + QFile file(fileName); + + if (file.open(QFile::ReadOnly)) { + while (!file.atEnd()) { + QString line = QString::fromUtf8(file.readLine()).trimmed(); + + if (line.startsWith(QLatin1Char('#'))) + continue; + + QStringList parts = line.split(QLatin1Char('\t')); + if (parts.count() > 1) { + QString pnpId = parts.at(0); + parts.removeFirst(); + m_vendorCache[pnpId] = parts.join(QLatin1Char(' ')); + } + } + + file.close(); + } + } +} + +bool QEdidParser::parse(const QByteArray &blob) +{ + const quint8 *data = reinterpret_cast<const quint8 *>(blob.constData()); + const size_t length = blob.length(); + + // Verify header + if (length < 128) + return false; + if (data[0] != 0x00 || data[1] != 0xff) + return false; + + /* Decode the PNP ID from three 5 bit words packed into 2 bytes + * /--08--\/--09--\ + * 7654321076543210 + * |\---/\---/\---/ + * R C1 C2 C3 */ + char id[3]; + id[0] = 'A' + ((data[EDID_OFFSET_PNP_ID] & 0x7c) / 4) - 1; + id[1] = 'A' + ((data[EDID_OFFSET_PNP_ID] & 0x3) * 8) + ((data[EDID_OFFSET_PNP_ID + 1] & 0xe0) / 32) - 1; + id[2] = 'A' + (data[EDID_OFFSET_PNP_ID + 1] & 0x1f) - 1; + identifier = QString::fromLatin1(id, 3); + + // Clear manufacturer + manufacturer = QString(); + + // Serial number, will be overwritten by an ASCII descriptor + // when and if it will be found + quint32 serial = data[EDID_OFFSET_SERIAL] + + (data[EDID_OFFSET_SERIAL + 1] << 8) + + (data[EDID_OFFSET_SERIAL + 2] << 16) + + (data[EDID_OFFSET_SERIAL + 3] << 24); + if (serial > 0) + serialNumber = QString::number(serial); + else + serialNumber = QString(); + + // Parse EDID data + for (int i = 0; i < 5; ++i) { + const uint offset = EDID_OFFSET_DATA_BLOCKS + i * 18; + + if (data[offset] != 0 || data[offset + 1] != 0 || data[offset + 2] != 0) + continue; + + if (data[offset + 3] == EDID_DESCRIPTOR_PRODUCT_NAME) + model = parseEdidString(&data[offset + 5]); + else if (data[offset + 3] == EDID_DESCRIPTOR_ALPHANUMERIC_STRING) + identifier = parseEdidString(&data[offset + 5]); + else if (data[offset + 3] == EDID_DESCRIPTOR_SERIAL_NUMBER) + serialNumber = parseEdidString(&data[offset + 5]); + } + + // Try to use cache first because it is potentially more updated + if (m_vendorCache.contains(identifier)) { + manufacturer = m_vendorCache[identifier]; + } else { + // Find the manufacturer from the vendor lookup table + for (size_t i = 0; i < ARRAY_LENGTH(q_edidVendorTable); i++) { + if (strcmp(q_edidVendorTable[i].id, identifier.toLatin1().constData()) == 0) { + manufacturer = QString::fromUtf8(q_edidVendorTable[i].name); + break; + } + } + } + + // If we don't know the manufacturer, fallback to PNP ID + if (manufacturer.isEmpty()) + manufacturer = identifier; + + // Physical size + physicalSize = QSizeF(data[EDID_PHYSICAL_WIDTH], data[EDID_OFFSET_PHYSICAL_HEIGHT]) * 10; + + return true; +} + +QString QEdidParser::parseEdidString(const quint8 *data) +{ + QByteArray buffer(reinterpret_cast<const char *>(data), 12); + + // Erase carriage return and line feed + buffer = buffer.replace('\r', '\0').replace('\n', '\0'); + + // Replace non-printable characters with dash + for (int i = 0; i < buffer.count(); ++i) { + if (buffer[i] < '\040' && buffer[i] > '\176') + buffer[i] = '-'; + } + + return QString::fromLatin1(buffer.trimmed()); +} + +QT_END_NAMESPACE diff --git a/src/platformsupport/cglconvenience/cglconvenience_p.h b/src/platformsupport/edid/qedidparser_p.h index e531e73549..c5888dc5d7 100644 --- a/src/platformsupport/cglconvenience/cglconvenience_p.h +++ b/src/platformsupport/edid/qedidparser_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2017 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -37,8 +37,11 @@ ** ****************************************************************************/ -#ifndef QMACGLCONVENIENCE_H -#define QMACGLCONVENIENCE_H +#ifndef QEDIDPARSER_P_H +#define QEDIDPARSER_P_H + +#include <QtCore/QSize> +#include <QtCore/QMap> // // W A R N I N G @@ -48,14 +51,28 @@ // implementation detail. This header file may change from version to // version without notice, or even be removed. // -// We mean it. -// -#include <QSurfaceFormat> -#include <QString> -#include <OpenGL/OpenGL.h> +QT_BEGIN_NAMESPACE + +class QEdidParser +{ +public: + QEdidParser(); + + bool parse(const QByteArray &blob); + + QString identifier; + QString manufacturer; + QString model; + QString serialNumber; + QSizeF physicalSize; + +private: + QMap<QString, QString> m_vendorCache; + + QString parseEdidString(const quint8 *data); +}; -QSurfaceFormat qcgl_surfaceFormat(); -void *qcgl_createNSOpenGLPixelFormat(const QSurfaceFormat &format); +QT_END_NAMESPACE -#endif // QMACGLCONVENIENCE_H +#endif // QEDIDPARSER_P_H diff --git a/src/platformsupport/edid/qedidvendortable_p.h b/src/platformsupport/edid/qedidvendortable_p.h new file mode 100644 index 0000000000..d09642d649 --- /dev/null +++ b/src/platformsupport/edid/qedidvendortable_p.h @@ -0,0 +1,2296 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + * This lookup table was generated from https://git.fedorahosted.org/cgit/hwdata.git/plain/pnp.ids + * + * Do not change directly this file, instead edit the + * qtbase/util/edid/qedidvendortable.py script and regenerate this file. + */ + +#ifndef QEDIDVENDORTABLE_P_H +#define QEDIDVENDORTABLE_P_H + +QT_BEGIN_NAMESPACE + +typedef struct VendorTable { + const char id[4]; + const char name[78]; +} VendorTable; + +static const struct VendorTable q_edidVendorTable[] = { + { "LLL", "L-3 Communications" }, + { "GMX", "GMX Inc" }, + { "FOS", "Foss Tecator" }, + { "PHI", "DO NOT USE - PHI" }, + { "DNV", "DiCon" }, + { "KZN", "K-Zone International" }, + { "TIC", "Trigem KinfoComm" }, + { "FNC", "Fanuc LTD" }, + { "ESY", "E-Systems Inc" }, + { "TGM", "TriGem Computer,Inc." }, + { "DBN", "DB Networks Inc" }, + { "GCS", "Grey Cell Systems Ltd" }, + { "AVR", "AVer Information Inc." }, + { "OKI", "OKI Electric Industrial Company Ltd" }, + { "GDI", "G. Diehl ISDN GmbH" }, + { "SPC", "SpinCore Technologies, Inc" }, + { "ICV", "Inside Contactless" }, + { "UNY", "Unicate" }, + { "NMP", "Nokia Mobile Phones" }, + { "HMC", "Hualon Microelectric Corporation" }, + { "OPT", "OPTi Inc" }, + { "TSG", "The Software Group Ltd" }, + { "IMN", "Impossible Production" }, + { "DHQ", "Quadram" }, + { "UFG", "UNIGRAF-USA" }, + { "CLA", "Clarion Company Ltd" }, + { "IOM", "Iomega" }, + { "MTS", "Multi-Tech Systems" }, + { "TXN", "Texas Insturments" }, + { "SDH", "Communications Specialies, Inc." }, + { "DCC", "Dale Computer Corporation" }, + { "PAK", "Many CNC System Co., Ltd." }, + { "TDC", "Teradici" }, + { "XAC", "XAC Automation Corp" }, + { "DRI", "Data Race Inc" }, + { "HAN", "Hanchang System Corporation" }, + { "NTR", "N-trig Innovative Technologies, Inc." }, + { "PDR", "Pure Data Inc" }, + { "BNS", "Boulder Nonlinear Systems" }, + { "EGO", "Ergo Electronics" }, + { "ETS", "Electronic Trade Solutions Ltd" }, + { "CNN", "Canon Inc" }, + { "CSB", "Transtex SA" }, + { "NAK", "Nakano Engineering Co.,Ltd." }, + { "IME", "Imagraph" }, + { "CYT", "Cytechinfo Inc" }, + { "ADM", "Ad Lib MultiMedia Inc" }, + { "IBC", "Integrated Business Systems" }, + { "TMT", "T-Metrics Inc." }, + { "ALP", "Alps Electric Company Ltd" }, + { "TWX", "TEKWorx Limited" }, + { "CDP", "CalComp" }, + { "KSX", "King Tester Corporation" }, + { "AMI", "American Megatrends Inc" }, + { "KBI", "Kidboard Inc" }, + { "COO", "coolux GmbH" }, + { "CBR", "Cebra Tech A/S" }, + { "ANA", "Anakron" }, + { "ACT", "Applied Creative Technology" }, + { "PGS", "Princeton Graphic Systems" }, + { "DCL", "Dynamic Controls Ltd" }, + { "TCH", "Interaction Systems, Inc" }, + { "STP", "StreamPlay Ltd" }, + { "PCG", "First Industrial Computer Inc" }, + { "SSE", "Samsung Electronic Co." }, + { "TXT", "Textron Defense System" }, + { "XRO", "XORO ELECTRONICS (CHENGDU) LIMITED" }, + { "MTU", "Mark of the Unicorn Inc" }, + { "ERG", "Ergo System" }, + { "GFN", "Gefen Inc." }, + { "UNE", "Unisys Corporation" }, + { "DDD", "Danka Data Devices" }, + { "ZGT", "Zenith Data Systems" }, + { "NAL", "Network Alchemy" }, + { "FVX", "C-C-C Group Plc" }, + { "AJA", "AJA Video Systems, Inc." }, + { "AZT", "Aztech Systems Ltd" }, + { "CIS", "Cisco Systems Inc" }, + { "DUA", "Dosch & Amand GmbH & Company KG" }, + { "INP", "Interphase Corporation" }, + { "DMS", "DOME imaging systems" }, + { "COW", "Polycow Productions" }, + { "PTC", "PS Technology Corporation" }, + { "PRD", "Praim S.R.L." }, + { "DEC", "Digital Equipment Corporation" }, + { "SMT", "Silcom Manufacturing Tech Inc" }, + { "MII", "Mitec Inc" }, + { "QLC", "Q-Logic" }, + { "PRG", "The Phoenix Research Group Inc" }, + { "LNV", "Lenovo" }, + { "IND", "ILC" }, + { "MXL", "Hitachi Maxell, Ltd." }, + { "DAU", "Daou Tech Inc" }, + { "SNK", "S&K Electronics" }, + { "SYE", "SY Electronics Ltd" }, + { "BCC", "Beaver Computer Corporaton" }, + { "LPI", "Design Technology" }, + { "CLO", "Clone Computers" }, + { "CMI", "C-Media Electronics" }, + { "ESK", "ES&S" }, + { "HCW", "Hauppauge Computer Works Inc" }, + { "KPC", "King Phoenix Company" }, + { "DXS", "Signet" }, + { "OLY", "OLYMPUS CORPORATION" }, + { "OOS", "OSRAM" }, + { "NOE", "NordicEye AB" }, + { "DXP", "Data Expert Corporation" }, + { "ITP", "IT-PRO Consulting und Systemhaus GmbH" }, + { "MMS", "MMS Electronics" }, + { "FDC", "Future Domain" }, + { "ASM", "ASEM S.p.A." }, + { "AIC", "Arnos Insturments & Computer Systems" }, + { "ANC", "Ancot" }, + { "SEE", "SeeColor Corporation" }, + { "JAS", "Janz Automationssysteme AG" }, + { "TGV", "Grass Valley Germany GmbH" }, + { "LTI", "Jongshine Tech Inc" }, + { "JVC", "JVC" }, + { "TLV", "S3 Inc" }, + { "MGC", "Mentor Graphics Corporation" }, + { "NBS", "National Key Lab. on ISN" }, + { "GTI", "Goldtouch" }, + { "SPI", "SPACE-I Co., Ltd." }, + { "ZNX", "Znyx Adv. Systems" }, + { "EMC", "eMicro Corporation" }, + { "WDE", "Westinghouse Digital Electronics" }, + { "CEN", "Centurion Technologies P/L" }, + { "BFE", "B.F. Engineering Corporation" }, + { "DTL", "e-Net Inc" }, + { "FTL", "FUJITSU TEN LIMITED" }, + { "HSC", "Hagiwara Sys-Com Company Ltd" }, + { "ECP", "Elecom Company Ltd" }, + { "LJX", "Datalogic Corporation" }, + { "DRC", "Data Ray Corp." }, + { "STM", "SGS Thomson Microelectronics" }, + { "GDT", "Vortex Computersysteme GmbH" }, + { "JSK", "SANKEN ELECTRIC CO., LTD" }, + { "TMC", "Techmedia Computer Systems Corporation" }, + { "CFG", "Atlantis" }, + { "DCO", "Dialogue Technology Corporation" }, + { "NEC", "NEC Corporation" }, + { "SAE", "Saab Aerotech" }, + { "STA", "ST Electronics Systems Assembly Pte Ltd" }, + { "GEO", "GEO Sense" }, + { "SLH", "Silicon Library Inc." }, + { "SAG", "Sedlbauer" }, + { "VEK", "Vektrex" }, + { "ADA", "Addi-Data GmbH" }, + { "NCT", "NEC CustomTechnica, Ltd." }, + { "STX", "ST-Ericsson" }, + { "PRM", "Prometheus" }, + { "DPA", "DigiTalk Pro AV" }, + { "SLF", "StarLeaf" }, + { "AXY", "AXYZ Automation Services, Inc" }, + { "CPX", "Powermatic Data Systems" }, + { "DLL", "Dell Inc" }, + { "PLF", "Panasonic Avionics Corporation" }, + { "FRI", "Fibernet Research Inc" }, + { "BRM", "Braemar Inc" }, + { "MSK", "Megasoft Inc" }, + { "ECT", "Enciris Technologies" }, + { "TKO", "TouchKo, Inc." }, + { "CYC", "Cylink Corporation" }, + { "SMR", "B.& V. s.r.l." }, + { "SRT", "SeeReal Technologies GmbH" }, + { "GES", "GES Singapore Pte Ltd" }, + { "DHT", "Projectavision Inc" }, + { "ESC", "Eden Sistemas de Computacao S/A" }, + { "BYD", "byd:sign corporation" }, + { "BMI", "Benson Medical Instruments Company" }, + { "XSY", "XSYS" }, + { "MYX", "Micronyx Inc" }, + { "OUK", "OUK Company Ltd" }, + { "MPI", "Mediatrix Peripherals Inc" }, + { "BUS", "BusTek" }, + { "LCN", "LEXICON" }, + { "ADS", "Analog Devices Inc" }, + { "XTL", "Crystal Computer" }, + { "CEF", "Cefar Digital Vision" }, + { "IPP", "IP Power Technologies GmbH" }, + { "CDV", "Convergent Design Inc." }, + { "OLD", "Olidata S.p.A." }, + { "GNN", "GN Nettest Inc" }, + { "ADH", "Aerodata Holdings Ltd" }, + { "IMM", "Immersion Corporation" }, + { "CBT", "Cabletime Ltd" }, + { "RVI", "Realvision Inc" }, + { "HNS", "Hughes Network Systems" }, + { "HAR", "Harris Corporation" }, + { "ACV", "ActivCard S.A" }, + { "RUN", "RUNCO International" }, + { "WDC", "Western Digital" }, + { "SIG", "Sigma Designs Inc" }, + { "PNR", "Planar Systems, Inc." }, + { "PRS", "Leutron Vision" }, + { "KEM", "Kontron Embedded Modules GmbH" }, + { "LAN", "Sodeman Lancom Inc" }, + { "CEM", "MEC Electronics GmbH" }, + { "RHD", "RightHand Technologies" }, + { "CHE", "Acer Inc" }, + { "POL", "PolyComp (PTY) Ltd." }, + { "MST", "MS Telematica" }, + { "ALA", "Alacron Inc" }, + { "EDI", "Edimax Tech. Company Ltd" }, + { "EGN", "Egenera, Inc." }, + { "PIX", "Pixie Tech Inc" }, + { "AVN", "Advance Computer Corporation" }, + { "CTN", "Computone Products" }, + { "SFM", "TORNADO Company" }, + { "ATA", "Allied Telesyn International (Asia) Pte Ltd" }, + { "SIA", "SIEMENS AG" }, + { "NAV", "Navigation Corporation" }, + { "PRF", "Digital Electronics Corporation" }, + { "HRE", "Qingdao Haier Electronics Co., Ltd." }, + { "NAC", "Ncast Corporation" }, + { "ELM", "Elmic Systems Inc" }, + { "HYR", "Hypertec Pty Ltd" }, + { "EMB", "Embedded computing inc ltd" }, + { "MWR", "mware" }, + { "KGL", "KEISOKU GIKEN Co.,Ltd." }, + { "NRL", "U.S. Naval Research Lab" }, + { "TNM", "TECNIMAGEN SA" }, + { "GTT", "General Touch Technology Co., Ltd." }, + { "BTE", "Brilliant Technology" }, + { "KDS", "KDS USA" }, + { "EEP", "E.E.P.D. GmbH" }, + { "NCI", "NewCom Inc" }, + { "CIP", "Ciprico Inc" }, + { "RTL", "Realtek Semiconductor Company Ltd" }, + { "MUK", "mainpine limited" }, + { "SLX", "Specialix" }, + { "HCM", "HCL Peripherals" }, + { "CHA", "Chase Research PLC" }, + { "VOB", "MaxData Computer AG" }, + { "ANK", "Anko Electronic Company Ltd" }, + { "FWR", "Flat Connections Inc" }, + { "DXL", "Dextera Labs Inc" }, + { "QVU", "Quartics" }, + { "MPS", "mps Software GmbH" }, + { "AVM", "AVM GmbH" }, + { "TDY", "Tandy Electronics" }, + { "MJS", "MJS Designs" }, + { "SNC", "Sentronic International Corp." }, + { "IPT", "International Power Technologies" }, + { "API", "A Plus Info Corporation" }, + { "TLT", "Dai Telecom S.p.A." }, + { "PCC", "PowerCom Technology Company Ltd" }, + { "TRM", "Tekram Technology Company Ltd" }, + { "DEL", "Dell Inc." }, + { "CYW", "Cyberware" }, + { "TDS", "Tri-Data Systems Inc" }, + { "FPE", "Fujitsu Peripherals Ltd" }, + { "SPN", "Sapience Corporation" }, + { "COX", "Comrex" }, + { "STE", "SII Ido-Tsushin Inc" }, + { "RVC", "RSI Systems Inc" }, + { "HMK", "hmk Daten-System-Technik BmbH" }, + { "TTA", "Topson Technology Co., Ltd." }, + { "CSM", "Cosmic Engineering Inc." }, + { "PTL", "Pantel Inc" }, + { "EQX", "Equinox Systems Inc" }, + { "HEL", "Hitachi Micro Systems Europe Ltd" }, + { "TIX", "Tixi.Com GmbH" }, + { "CMD", "Colorado MicroDisplay, Inc." }, + { "VIS", "Visioneer" }, + { "MTH", "Micro-Tech Hearing Instruments" }, + { "ISR", "INSIS Co., LTD." }, + { "EME", "EMiNE TECHNOLOGY COMPANY, LTD." }, + { "DMT", "Distributed Management Task Force, Inc. (DMTF)" }, + { "JFX", "Jones Futurex Inc" }, + { "SMB", "Schlumberger" }, + { "GTM", "Garnet System Company Ltd" }, + { "DBK", "Databook Inc" }, + { "IQT", "IMAGEQUEST Co., Ltd" }, + { "DTX", "Data Translation" }, + { "QSI", "Quantum Solutions, Inc." }, + { "BEL", "Beltronic Industrieelektronik GmbH" }, + { "PJT", "Pan Jit International Inc." }, + { "WST", "Wistron Corporation" }, + { "ASN", "Asante Tech Inc" }, + { "ROS", "Rohde & Schwarz" }, + { "NWP", "NovaWeb Technologies Inc" }, + { "CLG", "CoreLogic" }, + { "ECS", "Elitegroup Computer Systems Company Ltd" }, + { "PER", "Perceptive Signal Technologies" }, + { "SPR", "pmns GmbH" }, + { "DLB", "Dolby Laboratories Inc." }, + { "SRF", "Surf Communication Solutions Ltd" }, + { "ATM", "ATM Ltd" }, + { "MED", "Messeltronik Dresden GmbH" }, + { "SGD", "Sigma Designs, Inc." }, + { "RJA", "Roland Corporation" }, + { "EDC", "e.Digital Corporation" }, + { "CON", "Contec Company Ltd" }, + { "CCJ", "CONTEC CO.,LTD." }, + { "GVC", "GVC Corporation" }, + { "TRI", "Tricord Systems" }, + { "SLB", "Shlumberger Ltd" }, + { "PRO", "Proteon" }, + { "DSI", "Digitan Systems Inc" }, + { "SDF", "SODIFF E&T CO., Ltd." }, + { "VDC", "VDC Display Systems" }, + { "PSL", "Perle Systems Limited" }, + { "SCR", "Systran Corporation" }, + { "DEX", "idex displays" }, + { "CDS", "Computer Diagnostic Systems" }, + { "RAY", "Raylar Design, Inc." }, + { "MMF", "Minnesota Mining and Manufacturing" }, + { "MMA", "Micromedia AG" }, + { "FUS", "Fujitsu Siemens Computers GmbH" }, + { "ESS", "ESS Technology Inc" }, + { "SIX", "Zuniq Data Corporation" }, + { "ISS", "ISS Inc" }, + { "PFT", "Telia ProSoft AB" }, + { "SOL", "Solitron Technologies Inc" }, + { "ZTM", "ZT Group Int'l Inc." }, + { "GZE", "GUNZE Limited" }, + { "CHS", "Agentur Chairos" }, + { "CBI", "ComputerBoards Inc" }, + { "DTA", "DELTATEC" }, + { "CSC", "Crystal Semiconductor" }, + { "MPC", "M-Pact Inc" }, + { "HHI", "Fraunhofer Heinrich-Hertz-Institute" }, + { "BIT", "Bit 3 Computer" }, + { "ICP", "ICP Electronics, Inc./iEi Technology Corp." }, + { "FOA", "FOR-A Company Limited" }, + { "NWC", "NW Computer Engineering" }, + { "MRO", "Medikro Oy" }, + { "IDT", "International Display Technology" }, + { "NMV", "NEC-Mitsubishi Electric Visual Systems Corporation" }, + { "COT", "Core Technology Inc" }, + { "PEL", "Primax Electric Ltd" }, + { "ZMZ", "Z Microsystems" }, + { "TYN", "Tyan Computer Corporation" }, + { "DIN", "Daintelecom Co., Ltd" }, + { "QTH", "Questech Ltd" }, + { "CYL", "Cyberlabs" }, + { "DGC", "Data General Corporation" }, + { "PPM", "Clinton Electronics Corp." }, + { "ITD", "Internet Technology Corporation" }, + { "MMM", "Electronic Measurements" }, + { "CMM", "Comtime GmbH" }, + { "NDC", "National DataComm Corporaiton" }, + { "TAS", "Taskit Rechnertechnik GmbH" }, + { "MFR", "MediaFire Corp." }, + { "HIC", "Hitachi Information Technology Co., Ltd." }, + { "CMC", "CMC Ltd" }, + { "TSE", "Tottori Sanyo Electric" }, + { "TMR", "Taicom International Inc" }, + { "SIE", "Siemens" }, + { "IMD", "ImasDe Canarias S.A." }, + { "SCE", "Sun Corporation" }, + { "PJD", "Projectiondesign AS" }, + { "VML", "Vine Micros Limited" }, + { "ETL", "Evertz Microsystems Ltd." }, + { "MAZ", "MAZeT GmbH" }, + { "UNC", "Unisys Corporation" }, + { "MEG", "Abeam Tech Ltd" }, + { "FCS", "Focus Enhancements, Inc." }, + { "MDV", "MET Development Inc" }, + { "GLD", "Goldmund - Digital Audio SA" }, + { "MRC", "Marconi Simulation & Ty-Coch Way Training" }, + { "FEC", "FURUNO ELECTRIC CO., LTD." }, + { "ALR", "Advanced Logic" }, + { "AEJ", "Alpha Electronics Company" }, + { "QCC", "QuakeCom Company Ltd" }, + { "TDK", "TDK USA Corporation" }, + { "TKN", "Teknor Microsystem Inc" }, + { "FMC", "Ford Microelectronics Inc" }, + { "KTI", "Konica Technical Inc" }, + { "AEI", "Actiontec Electric Inc" }, + { "TGI", "TriGem Computer Inc" }, + { "HIL", "Hilevel Technology" }, + { "WNI", "WillNet Inc." }, + { "FTI", "FastPoint Technologies, Inc." }, + { "ASU", "Asuscom Network Inc" }, + { "MEJ", "Mac-Eight Co., LTD." }, + { "SLS", "Schnick-Schnack-Systems GmbH" }, + { "SXG", "SELEX GALILEO" }, + { "EXP", "Data Export Corporation" }, + { "TPR", "Topro Technology Inc" }, + { "RCE", "Parc d'Activite des Bellevues" }, + { "VIK", "Viking Connectors" }, + { "TGS", "Torus Systems Ltd" }, + { "IDO", "IDEO Product Development" }, + { "MCE", "Metz-Werke GmbH & Co KG" }, + { "PHC", "Pijnenburg Beheer N.V." }, + { "BTF", "Bitfield Oy" }, + { "MCD", "McDATA Corporation" }, + { "EXY", "Exterity Ltd" }, + { "ZTI", "Zoom Telephonics Inc" }, + { "MTI", "Motorola Inc." }, + { "ONK", "ONKYO Corporation" }, + { "SEC", "Seiko Epson Corporation" }, + { "TTB", "National Semiconductor Japan Ltd" }, + { "SNO", "SINOSUN TECHNOLOGY CO., LTD" }, + { "SHG", "Soft & Hardware development Goldammer GmbH" }, + { "GEM", "Gem Plus" }, + { "BOS", "BOS" }, + { "SAK", "Saitek Ltd" }, + { "CNE", "Cine-tal" }, + { "BOB", "Rainy Orchard" }, + { "UNF", "Unisys Corporation" }, + { "MCG", "Motorola Computer Group" }, + { "RTC", "Relia Technologies" }, + { "ASD", "USC Information Sciences Institute" }, + { "BMS", "BIOMEDISYS" }, + { "LPE", "El-PUSK Co., Ltd." }, + { "CTA", "CoSystems Inc" }, + { "SVI", "Sun Microsystems" }, + { "PCS", "TOSHIBA PERSONAL COMPUTER SYSTEM CORPRATION" }, + { "GEN", "Genesys ATE Inc" }, + { "CRI", "Crio Inc." }, + { "TOG", "The OPEN Group" }, + { "SYT", "Seyeon Tech Company Ltd" }, + { "CRE", "Creative Labs Inc" }, + { "ALK", "Acrolink Inc" }, + { "TNC", "TNC Industrial Company Ltd" }, + { "PLV", "PLUS Vision Corp." }, + { "CCL", "CCL/ITRI" }, + { "PLY", "Polycom Inc." }, + { "RMC", "Raritan Computer, Inc" }, + { "XRC", "Xircom Inc" }, + { "BRC", "BARC" }, + { "CUK", "Calibre UK Ltd" }, + { "KME", "KIMIN Electronics Co., Ltd." }, + { "TBS", "Turtle Beach System" }, + { "ASY", "Rockwell Collins / Airshow Systems" }, + { "ALV", "AlphaView LCD" }, + { "VSD", "3M" }, + { "MTN", "Mtron Storage Technology Co., Ltd." }, + { "LMG", "Lucent Technologies" }, + { "HWP", "Hewlett Packard" }, + { "UEG", "Elitegroup Computer Systems Company Ltd" }, + { "FIC", "Formosa Industrial Computing Inc" }, + { "CRV", "Cerevo Inc." }, + { "AIL", "Altos India Ltd" }, + { "EMI", "Ex Machina Inc" }, + { "DPC", "Delta Electronics Inc" }, + { "ADN", "Analog & Digital Devices Tel. Inc" }, + { "LGC", "Logic Ltd" }, + { "DMP", "D&M Holdings Inc, Professional Business Company" }, + { "CEC", "Chicony Electronics Company Ltd" }, + { "BTC", "Bit 3 Computer" }, + { "IWX", "Intelliworxx, Inc." }, + { "SML", "Sumitomo Metal Industries, Ltd." }, + { "JWY", "Jetway Information Co., Ltd" }, + { "OMC", "OBJIX Multimedia Corporation" }, + { "CIT", "Citifax Limited" }, + { "AOE", "Advanced Optics Electronics, Inc." }, + { "SYC", "Sysmic" }, + { "ZTT", "Z3 Technology" }, + { "LCS", "Longshine Electronics Company" }, + { "NXQ", "Nexiq Technologies, Inc." }, + { "PSY", "Prodea Systems Inc." }, + { "CUB", "Cubix Corporation" }, + { "JWL", "Jewell Instruments, LLC" }, + { "SUB", "Subspace Comm. Inc" }, + { "PTG", "Cipher Systems Inc" }, + { "TON", "TONNA" }, + { "VBR", "VBrick Systems Inc." }, + { "RTI", "Rancho Tech Inc" }, + { "IMG", "IMAGENICS Co., Ltd." }, + { "AEP", "Aetas Peripheral International" }, + { "PTH", "Pathlight Technology Inc" }, + { "ZYX", "Zyxel" }, + { "NXP", "NXP Semiconductors bv." }, + { "OYO", "Shadow Systems" }, + { "PVM", "Penta Studiotechnik GmbH" }, + { "AVC", "Auravision Corporation" }, + { "SYM", "Symicron Computer Communications Ltd." }, + { "AVI", "Nippon Avionics Co.,Ltd" }, + { "EYE", "eyevis GmbH" }, + { "PLM", "PROLINK Microsystems Corp." }, + { "NFC", "BTC Korea Co., Ltd" }, + { "PIE", "Pacific Image Electronics Company Ltd" }, + { "SRC", "Integrated Tech Express Inc" }, + { "CMX", "Comex Electronics AB" }, + { "OPP", "OPPO Digital, Inc." }, + { "GAL", "Galil Motion Control" }, + { "YHW", "Exacom SA" }, + { "SSD", "FlightSafety International" }, + { "FSC", "Future Systems Consulting KK" }, + { "HRI", "Hall Research" }, + { "PSA", "Advanced Signal Processing Technologies" }, + { "MSI", "Microstep" }, + { "IMI", "International Microsystems Inc" }, + { "IDX", "IDEXX Labs" }, + { "SCO", "SORCUS Computer GmbH" }, + { "DIS", "Diseda S.A." }, + { "SVA", "SGEG" }, + { "SMA", "SMART Modular Technologies" }, + { "SXL", "SolutionInside" }, + { "WRC", "WiNRADiO Communications" }, + { "NIT", "Network Info Technology" }, + { "EKS", "EKSEN YAZILIM" }, + { "GEF", "GE Fanuc Embedded Systems" }, + { "DEI", "Deico Electronics" }, + { "DCD", "Datacast LLC" }, + { "MEE", "Mitsubishi Electric Engineering Co., Ltd." }, + { "LSC", "LifeSize Communications" }, + { "PDV", "Prodrive B.V." }, + { "HIB", "Hibino Corporation" }, + { "SKT", "Samsung Electro-Mechanics Company Ltd" }, + { "SAN", "Sanyo Electric Co.,Ltd." }, + { "RCO", "Rockwell Collins" }, + { "SNY", "Sony" }, + { "ANR", "ANR Ltd" }, + { "DKY", "Datakey Inc" }, + { "OPC", "Opcode Inc" }, + { "TBC", "Turbo Communication, Inc" }, + { "CNT", "COINT Multimedia Systems" }, + { "HDC", "HardCom Elektronik & Datateknik" }, + { "UNB", "Unisys Corporation" }, + { "IOD", "I-O Data Device Inc" }, + { "APR", "Aprilia s.p.a." }, + { "AXX", "Axxon Computer Corporation" }, + { "AED", "Advanced Electronic Designs, Inc." }, + { "MTX", "Matrox" }, + { "TAX", "Taxan (Europe) Ltd" }, + { "TVS", "TVS Electronics Limited" }, + { "CZE", "Carl Zeiss AG" }, + { "SMI", "SpaceLabs Medical Inc" }, + { "FCB", "Furukawa Electric Company Ltd" }, + { "AXP", "American Express" }, + { "FST", "Modesto PC Inc" }, + { "PSI", "PSI-Perceptive Solutions Inc" }, + { "MCR", "Marina Communicaitons" }, + { "JCE", "Jace Tech Inc" }, + { "GRE", "GOLD RAIN ENTERPRISES CORP." }, + { "SYN", "Synaptics Inc" }, + { "MBC", "MBC" }, + { "SIB", "Sanyo Electric Company Ltd" }, + { "TCT", "Telecom Technology Centre Co. Ltd." }, + { "BIC", "Big Island Communications" }, + { "UNI", "Unisys Corporation" }, + { "ELX", "Elonex PLC" }, + { "ZDS", "Zenith Data Systems" }, + { "XLX", "Xilinx, Inc." }, + { "MIC", "Micom Communications Inc" }, + { "SEB", "system elektronik GmbH" }, + { "WIN", "Wintop Technology Inc" }, + { "CDG", "Christie Digital Systems Inc" }, + { "HUB", "GAI-Tronics, A Hubbell Company" }, + { "CSE", "Concept Solutions & Engineering" }, + { "SUR", "Surenam Computer Corporation" }, + { "VTM", "Miltope Corporation" }, + { "ATK", "Allied Telesyn Int'l" }, + { "MGT", "Megatech R & D Company" }, + { "SLK", "Silitek Corporation" }, + { "DYN", "Askey Computer Corporation" }, + { "KEY", "Key Tech Inc" }, + { "DVD", "Dictaphone Corporation" }, + { "OTT", "OPTO22, Inc." }, + { "TCI", "Tulip Computers Int'l B.V." }, + { "ACB", "Aculab Ltd" }, + { "PAD", "Promotion and Display Technology Ltd." }, + { "CMG", "Chenming Mold Ind. Corp." }, + { "UJR", "Ueda Japan Radio Co., Ltd." }, + { "LHA", "Lars Haagh ApS" }, + { "SIM", "S3 Inc" }, + { "TPC", "Touch Panel Systems Corporation" }, + { "TVD", "Tecnovision" }, + { "FZI", "FZI Forschungszentrum Informatik" }, + { "AIW", "Aiwa Company Ltd" }, + { "LTW", "Lightware, Inc" }, + { "DSP", "Domain Technology Inc" }, + { "ILS", "Innotech Corporation" }, + { "VDM", "Vadem" }, + { "KYK", "Samsung Electronics America Inc" }, + { "NTW", "Networth Inc" }, + { "SID", "Seiko Instruments Information Devices Inc" }, + { "MRT", "Merging Technologies" }, + { "MGL", "M-G Technology Ltd" }, + { "UBL", "Ubinetics Ltd." }, + { "PSM", "Prosum" }, + { "MDR", "Medar Inc" }, + { "STN", "Samsung Electronics America" }, + { "NCR", "NCR Electronics" }, + { "INU", "Inovatec S.p.A." }, + { "WAL", "Wave Access" }, + { "BLN", "BioLink Technologies" }, + { "RXT", "Tectona SoftSolutions (P) Ltd.," }, + { "MRL", "Miratel" }, + { "ZAZ", "Zazzle Technologies" }, + { "NIC", "National Instruments Corporation" }, + { "FMZ", "Formoza-Altair" }, + { "MDG", "Madge Networks" }, + { "VIA", "VIA Tech Inc" }, + { "KOD", "Eastman Kodak Company" }, + { "SAI", "Sage Inc" }, + { "FEL", "Fellowes & Questec" }, + { "SLI", "Symbios Logic Inc" }, + { "ELE", "Elecom Company Ltd" }, + { "FRE", "Forvus Research Inc" }, + { "TTL", "2-Tel B.V." }, + { "PPX", "Perceptive Pixel Inc." }, + { "NAT", "NaturalPoint Inc." }, + { "SLC", "Syslogic Datentechnik AG" }, + { "PAM", "Peter Antesberger Messtechnik" }, + { "JPW", "Wallis Hamilton Industries" }, + { "AVA", "Avaya Communication" }, + { "EEH", "EEH Datalink GmbH" }, + { "WMT", "Winmate Communication Inc" }, + { "LWC", "Labway Corporation" }, + { "HYO", "HYC CO., LTD." }, + { "MCC", "Micro Industries" }, + { "IOA", "CRE Technology Corporation" }, + { "AGI", "Artish Graphics Inc" }, + { "TDT", "TDT" }, + { "UNO", "Unisys Corporation" }, + { "LIN", "Lenovo Beijing Co. Ltd." }, + { "MAG", "MAG InnoVision" }, + { "HCL", "HCL America Inc" }, + { "BWK", "Bitworks Inc." }, + { "BSN", "BRIGHTSIGN, LLC" }, + { "INM", "InnoMedia Inc" }, + { "MIN", "Minicom Digital Signage" }, + { "ARE", "ICET S.p.A." }, + { "TPZ", "Ypoaz Systems Inc" }, + { "BRO", "BROTHER INDUSTRIES,LTD." }, + { "MEX", "MSC Vertriebs GmbH" }, + { "FJC", "Fujitsu Takamisawa Component Limited" }, + { "HRT", "HERCULES" }, + { "MOM", "Momentum Data Systems" }, + { "RSV", "Ross Video Ltd" }, + { "RAN", "Rancho Tech Inc" }, + { "HOL", "Holoeye Photonics AG" }, + { "SOT", "Sotec Company Ltd" }, + { "AAE", "Anatek Electronics Inc." }, + { "ZYT", "Zytex Computers" }, + { "APP", "Apple Computer Inc" }, + { "MCM", "Metricom Inc" }, + { "NXC", "NextCom K.K." }, + { "CBX", "Cybex Computer Products Corporation" }, + { "FJS", "Fujitsu Spain" }, + { "SNI", "Siemens Microdesign GmbH" }, + { "MPL", "Maple Research Inst. Company Ltd" }, + { "PLX", "Parallax Graphics" }, + { "EAS", "Evans and Sutherland Computer" }, + { "ZBR", "Zebra Technologies International, LLC" }, + { "MSL", "MicroSlate Inc." }, + { "XOC", "DO NOT USE - XOC" }, + { "EMG", "EMG Consultants Inc" }, + { "SMC", "Standard Microsystems Corporation" }, + { "RAD", "Radisys Corporation" }, + { "NMS", "Natural Micro System" }, + { "APT", "Audio Processing Technology Ltd" }, + { "MLI", "McIntosh Laboratory Inc." }, + { "ISI", "Interface Solutions" }, + { "RAT", "Rent-A-Tech" }, + { "BAN", "Banyan" }, + { "PCL", "pentel.co.,ltd" }, + { "CSI", "Cabletron System Inc" }, + { "IVS", "Intevac Photonics Inc." }, + { "MAT", "Matsushita Electric Ind. Company Ltd" }, + { "LWR", "Lightware Visual Engineering" }, + { "FWA", "Attero Tech, LLC" }, + { "ORI", "OSR Open Systems Resources, Inc." }, + { "ARG", "Argus Electronics Co., LTD" }, + { "CAS", "CASIO COMPUTER CO.,LTD" }, + { "DHP", "DH Print" }, + { "TTS", "TechnoTrend Systemtechnik GmbH" }, + { "HHC", "HIRAKAWA HEWTECH CORP." }, + { "GRM", "Garmin International" }, + { "BUL", "Bull" }, + { "AFA", "Alfa Inc" }, + { "OVR", "Oculus VR, Inc." }, + { "EPI", "Envision Peripherals, Inc" }, + { "GSC", "General Standards Corporation" }, + { "DNG", "Apache Micro Peripherals Inc" }, + { "VIN", "Vine Micros Ltd" }, + { "PTW", "DO NOT USE - PTW" }, + { "MFI", "Micro Firmware" }, + { "SMP", "Simple Computing" }, + { "HCA", "DAT" }, + { "PHL", "Philips Consumer Electronics Company" }, + { "ADC", "Acnhor Datacomm" }, + { "VBT", "Valley Board Ltda" }, + { "MPX", "Micropix Technologies, Ltd." }, + { "VSP", "Vision Systems GmbH" }, + { "PJA", "Projecta" }, + { "AMT", "AMT International Industry" }, + { "VCI", "VistaCom Inc" }, + { "XIR", "Xirocm Inc" }, + { "MBV", "Moreton Bay" }, + { "NSC", "National Semiconductor Corporation" }, + { "TPV", "Top Victory Electronics ( Fujian ) Company Ltd" }, + { "HAE", "Haider electronics" }, + { "PKA", "Acco UK ltd." }, + { "PXC", "Phoenix Contact" }, + { "BXE", "Buxco Electronics" }, + { "OZC", "OZ Corporation" }, + { "TXL", "Trixel Ltd" }, + { "MXD", "MaxData Computer GmbH & Co.KG" }, + { "ASK", "Ask A/S" }, + { "KSC", "Kinetic Systems Corporation" }, + { "XAD", "Alpha Data" }, + { "MVI", "Media Vision Inc" }, + { "BPU", "Best Power" }, + { "LAF", "Microline" }, + { "SPS", "Synopsys Inc" }, + { "WXT", "Woxter Technology Co. Ltd" }, + { "NIX", "Seanix Technology Inc" }, + { "HPA", "Zytor Communications" }, + { "SPK", "SpeakerCraft" }, + { "CHP", "CH Products" }, + { "SNX", "Sonix Comm. Ltd" }, + { "LZX", "Lightwell Company Ltd" }, + { "ART", "Corion Industrial Corporation" }, + { "IFS", "In Focus Systems Inc" }, + { "DAL", "Digital Audio Labs Inc" }, + { "STR", "Starlight Networks Inc" }, + { "PRT", "Parade Technologies, Ltd." }, + { "VRC", "Virtual Resources Corporation" }, + { "IIC", "ISIC Innoscan Industrial Computers A/S" }, + { "AUR", "Aureal Semiconductor" }, + { "ATC", "Ably-Tech Corporation" }, + { "ODR", "Odrac" }, + { "LIP", "Linked IP GmbH" }, + { "FLI", "Faroudja Laboratories" }, + { "AVV", "SBS Technologies (Canada), Inc. (was Avvida Systems, Inc.)" }, + { "ECM", "E-Cmos Tech Corporation" }, + { "LAG", "Laguna Systems" }, + { "FFC", "FUJIFILM Corporation" }, + { "MAX", "Rogen Tech Distribution Inc" }, + { "HUM", "IMP Electronics Ltd." }, + { "VTX", "Vestax Corporation" }, + { "NST", "Network Security Technology Co" }, + { "FLY", "Butterfly Communications" }, + { "ETT", "E-Tech Inc" }, + { "NXS", "Technology Nexus Secure Open Systems AB" }, + { "VES", "Vestel Elektronik Sanayi ve Ticaret A. S." }, + { "EBT", "HUALONG TECHNOLOGY CO., LTD" }, + { "HPK", "HAMAMATSU PHOTONICS K.K." }, + { "RGB", "RGB Spectrum" }, + { "AUI", "Alps Electric Inc" }, + { "ICI", "Infotek Communication Inc" }, + { "NTS", "Nits Technology Inc." }, + { "EVI", "eviateg GmbH" }, + { "CRD", "Cardinal Technical Inc" }, + { "MOD", "Modular Technology" }, + { "CCP", "Capetronic USA Inc" }, + { "DGS", "Diagsoft Inc" }, + { "IFT", "Informtech" }, + { "LWW", "Lanier Worldwide" }, + { "SDK", "SAIT-Devlonics" }, + { "UWC", "Uniwill Computer Corp." }, + { "MXV", "MaxVision Corporation" }, + { "HOE", "Hosiden Corporation" }, + { "SGE", "Kansai Electric Company Ltd" }, + { "URD", "Video Computer S.p.A." }, + { "TSV", "TRANSVIDEO" }, + { "MBM", "Marshall Electronics" }, + { "TLA", "Ferrari Electronic GmbH" }, + { "GLM", "Genesys Logic" }, + { "LEN", "Lenovo Group Limited" }, + { "SAM", "Samsung Electric Company" }, + { "VTL", "Vivid Technology Pte Ltd" }, + { "UTD", "Up to Date Tech" }, + { "ITC", "Intercom Inc" }, + { "ENI", "Efficient Networks" }, + { "GDC", "General Datacom" }, + { "XIT", "Xitel Pty ltd" }, + { "CMN", "Chimei Innolux Corporation" }, + { "AVE", "Add Value Enterpises (Asia) Pte Ltd" }, + { "WEC", "Winbond Electronics Corporation" }, + { "OAK", "Oak Tech Inc" }, + { "DON", "DENON, Ltd." }, + { "ITR", "Infotronic America, Inc." }, + { "CAC", "CA & F Elettronica" }, + { "VIM", "Via Mons Ltd." }, + { "DGP", "Digicorp European sales S.A." }, + { "HPD", "Hewlett Packard" }, + { "USD", "U.S. Digital Corporation" }, + { "TAM", "Tamura Seisakusyo Ltd" }, + { "SGZ", "Systec Computer GmbH" }, + { "NGS", "A D S Exports" }, + { "FSI", "Fore Systems Inc" }, + { "SIL", "Silicon Laboratories, Inc" }, + { "QCP", "Qualcomm Inc" }, + { "SDA", "SAT (Societe Anonyme)" }, + { "SEI", "Seitz & Associates Inc" }, + { "RSI", "Rampage Systems Inc" }, + { "VIZ", "VIZIO, Inc" }, + { "EPN", "EPiCON Inc." }, + { "OIC", "Option Industrial Computers" }, + { "KDE", "KDE" }, + { "CLV", "Clevo Company" }, + { "GRA", "Graphica Computer" }, + { "HIK", "Hikom Co., Ltd." }, + { "LCE", "La Commande Electronique" }, + { "MNP", "Microcom" }, + { "ERI", "Ericsson Mobile Communications AB" }, + { "REX", "RATOC Systems, Inc." }, + { "PPP", "Purup Prepress AS" }, + { "JAT", "Jaton Corporation" }, + { "GLE", "AD electronics" }, + { "VAL", "Valence Computing Corporation" }, + { "CDN", "Codenoll Technical Corporation" }, + { "SDT", "Siemens AG" }, + { "RSC", "PhotoTelesis" }, + { "FFI", "Fairfield Industries" }, + { "VPR", "Best Buy" }, + { "IPM", "IPM Industria Politecnica Meridionale SpA" }, + { "HSM", "AT&T Microelectronics" }, + { "YHQ", "Yokogawa Electric Corporation" }, + { "UEC", "Ultima Electronics Corporation" }, + { "NME", "Navico, Inc." }, + { "GVL", "Global Village Communication" }, + { "TEK", "Tektronix Inc" }, + { "SBD", "Softbed - Consulting & Development Ltd" }, + { "PSD", "Peus-Systems GmbH" }, + { "DCA", "Digital Communications Association" }, + { "HWC", "DBA Hans Wedemeyer" }, + { "DFK", "SharkTec A/S" }, + { "DMB", "Digicom Systems Inc" }, + { "IPW", "IPWireless, Inc" }, + { "ACC", "Accton Technology Corporation" }, + { "CPM", "Capella Microsystems Inc." }, + { "AAT", "Ann Arbor Technologies" }, + { "LAS", "LASAT Comm. A/S" }, + { "TWI", "Easytel oy" }, + { "HJI", "Harris & Jeffries Inc" }, + { "SGX", "Silicon Graphics Inc" }, + { "TSL", "Tottori SANYO Electric Co., Ltd." }, + { "SVD", "SVD Computer" }, + { "CLT", "automated computer control systems" }, + { "WLD", "Wildfire Communications Inc" }, + { "LCI", "Lite-On Communication Inc" }, + { "AEC", "Antex Electronics Corporation" }, + { "ACA", "Ariel Corporation" }, + { "KML", "Kensington Microware Ltd" }, + { "KDT", "KDDI Technology Corporation" }, + { "BSE", "Bose Corporation" }, + { "WSP", "Wireless And Smart Products Inc." }, + { "GNZ", "Gunze Ltd" }, + { "PMM", "Point Multimedia System" }, + { "ASC", "Ascom Strategic Technology Unit" }, + { "EVX", "Everex" }, + { "WBN", "MicroSoftWare" }, + { "FGL", "Fujitsu General Limited." }, + { "JSI", "Jupiter Systems, Inc." }, + { "SII", "Silicon Image, Inc." }, + { "SMM", "Shark Multimedia Inc" }, + { "XYC", "Xycotec Computer GmbH" }, + { "PEC", "POTRANS Electrical Corp." }, + { "TSD", "TechniSat Digital GmbH" }, + { "ZSE", "Zenith Data Systems" }, + { "ENC", "Eizo Nanao Corporation" }, + { "MWY", "Microway Inc" }, + { "OLI", "Olivetti" }, + { "WIL", "WIPRO Information Technology Ltd" }, + { "LKM", "Likom Technology Sdn. Bhd." }, + { "KOU", "KOUZIRO Co.,Ltd." }, + { "VHI", "Macrocad Development Inc." }, + { "FIT", "Feature Integration Technology Inc." }, + { "MXP", "Maxpeed Corporation" }, + { "SCD", "Sanyo Electric Company Ltd" }, + { "NBL", "N*Able Technologies Inc" }, + { "SPT", "Sceptre Tech Inc" }, + { "IPN", "Performance Technologies" }, + { "BMD", "Blackmagic Design" }, + { "MDK", "Mediatek Corporation" }, + { "DCS", "Diamond Computer Systems Inc" }, + { "ICE", "IC Ensemble" }, + { "LSY", "LSI Systems Inc" }, + { "AMC", "Attachmate Corporation" }, + { "TCO", "Thomas-Conrad Corporation" }, + { "NOK", "Nokia Display Products" }, + { "VFI", "VeriFone Inc" }, + { "OPV", "Optivision Inc" }, + { "LCM", "Latitude Comm." }, + { "LSL", "Logical Solutions" }, + { "TVO", "TV One Ltd" }, + { "KVA", "Kvaser AB" }, + { "PMT", "Promate Electronic Co., Ltd." }, + { "ZZZ", "Boca Research Inc" }, + { "ELC", "Electro Scientific Ind" }, + { "SIR", "Sirius Technologies Pty Ltd" }, + { "DCE", "dSPACE GmbH" }, + { "WAN", "DO NOT USE - WAN" }, + { "PCT", "PC-Tel Inc" }, + { "BEO", "Baug & Olufsen" }, + { "LUM", "Lumagen, Inc." }, + { "DNA", "DNA Enterprises, Inc." }, + { "WEY", "WEY Design AG" }, + { "IAF", "Institut f r angewandte Funksystemtechnik GmbH" }, + { "QFF", "Padix Co., Inc." }, + { "JIC", "Jaeik Information & Communication Co., Ltd." }, + { "VIT", "Visitech AS" }, + { "QUA", "Quatographic AG" }, + { "BNK", "Banksia Tech Pty Ltd" }, + { "TME", "AT&T Microelectronics" }, + { "DRB", "Dr. Bott KG" }, + { "NET", "Mettler Toledo" }, + { "CDE", "Colin.de" }, + { "ATI", "Allied Telesis KK" }, + { "PMD", "TDK USA Corporation" }, + { "SKY", "SKYDATA S.P.A." }, + { "FTN", "Fountain Technologies Inc" }, + { "DBD", "Diebold Inc." }, + { "ECA", "Electro Cam Corp." }, + { "TLI", "TOSHIBA TELI CORPORATION" }, + { "CTC", "CTC Communication Development Company Ltd" }, + { "NVT", "Navatek Engineering Corporation" }, + { "CKC", "The Concept Keyboard Company Ltd" }, + { "FIR", "Chaplet Systems Inc" }, + { "HYD", "Hydis Technologies.Co.,LTD" }, + { "TTY", "TRIDELITY Display Solutions GmbH" }, + { "DAE", "Digatron Industrie Elektronik GmbH" }, + { "AUT", "Autotime Corporation" }, + { "GTC", "Graphtec Corporation" }, + { "MYR", "Myriad Solutions Ltd" }, + { "DLT", "Digitelec Informatique Park Cadera" }, + { "SDR", "SDR Systems" }, + { "ACS", "Altos Computer Systems" }, + { "SVC", "Intellix Corp." }, + { "ZTE", "ZTE Corporation" }, + { "ERT", "Escort Insturments Corporation" }, + { "WII", "Innoware Inc" }, + { "DOL", "Dolman Technologies Group Inc" }, + { "RLD", "MEPCO" }, + { "HRL", "Herolab GmbH" }, + { "IRD", "IRdata" }, + { "IVI", "Intervoice Inc" }, + { "ICS", "Integrated Circuit Systems" }, + { "ASE", "AseV Display Labs" }, + { "SYX", "Prime Systems, Inc." }, + { "SOI", "Silicon Optix Corporation" }, + { "OCS", "Open Connect Solutions" }, + { "HON", "Sonitronix" }, + { "TAG", "Teles AG" }, + { "PEP", "Peppercon AG" }, + { "INT", "Interphase Corporation" }, + { "IBR", "IBR GmbH" }, + { "WYS", "Wyse Technology" }, + { "TRE", "Tremetrics" }, + { "RKC", "Reakin Technolohy Corporation" }, + { "SEG", "DO NOT USE - SEG" }, + { "CAV", "Cavium Networks, Inc" }, + { "ELA", "ELAD srl" }, + { "MMD", "Micromed Biotecnologia Ltd" }, + { "SGL", "Super Gate Technology Company Ltd" }, + { "SIS", "Silicon Integrated Systems Corporation" }, + { "XFO", "EXFO Electro Optical Engineering" }, + { "ING", "Integraph Corporation" }, + { "NEU", "NEUROTEC - EMPRESA DE PESQUISA E DESENVOLVIMENTO EM BIOMEDICINA" }, + { "ZIC", "Nationz Technologies Inc." }, + { "CVI", "Colorado Video, Inc." }, + { "VCC", "Virtual Computer Corporation" }, + { "INZ", "Best Buy" }, + { "ELO", "Tyco Electronics" }, + { "EPH", "Epiphan Systems Inc." }, + { "SYL", "Sylvania Computer Products" }, + { "MXI", "Macronix Inc" }, + { "GEH", "GE Intelligent Platforms - Huntsville" }, + { "BBB", "an-najah university" }, + { "ARK", "Ark Logic Inc" }, + { "IVM", "Iiyama North America" }, + { "XTE", "X2E GmbH" }, + { "DMV", "NDS Ltd" }, + { "CPD", "CompuAdd" }, + { "CYD", "Cyclades Corporation" }, + { "ALX", "ALEXON Co.,Ltd." }, + { "COB", "COBY Electronics Co., Ltd" }, + { "HCE", "Hitachi Consumer Electronics Co., Ltd" }, + { "EXX", "Exxact GmbH" }, + { "TAB", "Todos Data System AB" }, + { "MPN", "Mainpine Limited" }, + { "ATH", "Athena Informatica S.R.L." }, + { "AWL", "Aironet Wireless Communications, Inc" }, + { "FNI", "Funai Electric Co., Ltd." }, + { "PLT", "PT Hartono Istana Teknologi" }, + { "DEN", "Densitron Computers Ltd" }, + { "MIM", "Mimio – A Newell Rubbermaid Company" }, + { "GER", "GERMANEERS GmbH" }, + { "CAI", "Canon Inc." }, + { "DNI", "Deterministic Networks Inc." }, + { "DOT", "Dotronic Mikroelektronik GmbH" }, + { "MVX", "COM 1" }, + { "WTC", "ACC Microelectronics" }, + { "HIT", "Hitachi America Ltd" }, + { "ALM", "Acutec Ltd." }, + { "TIP", "TIPTEL AG" }, + { "END", "ENIDAN Technologies Ltd" }, + { "PAR", "Parallan Comp Inc" }, + { "DVL", "Devolo AG" }, + { "ADV", "Advanced Micro Devices Inc" }, + { "TKS", "TimeKeeping Systems, Inc." }, + { "MLD", "Deep Video Imaging Ltd" }, + { "IUC", "ICSL" }, + { "MNL", "Monorail Inc" }, + { "HRC", "Hercules" }, + { "ANS", "Ansel Communication Company" }, + { "UAS", "Ultima Associates Pte Ltd" }, + { "SBS", "SBS-or Industrial Computers GmbH" }, + { "DVT", "Data Video" }, + { "PTS", "Plain Tree Systems Inc" }, + { "CSD", "Cresta Systems Inc" }, + { "LDT", "LogiDataTech Electronic GmbH" }, + { "AGM", "Advan Int'l Corporation" }, + { "TLD", "Telindus" }, + { "SPU", "SIM2 Multimedia S.P.A." }, + { "BCS", "Booria CAD/CAM systems" }, + { "CRQ", "Cirque Corporation" }, + { "MIL", "Marconi Instruments Ltd" }, + { "FTE", "Frontline Test Equipment Inc." }, + { "RWC", "Red Wing Corporation" }, + { "TLS", "Teleste Educational OY" }, + { "DAT", "Datel Inc" }, + { "SIT", "Sitintel" }, + { "QTI", "Quicknet Technologies Inc" }, + { "EBH", "Data Price Informatica" }, + { "PCK", "PCBANK21" }, + { "VSC", "ViewSonic Corporation" }, + { "BBL", "Brain Boxes Limited" }, + { "UFO", "UFO Systems Inc" }, + { "NTI", "New Tech Int'l Company" }, + { "WAV", "Wavephore" }, + { "NOT", "Not Limited Inc" }, + { "GRH", "Granch Ltd" }, + { "VTC", "VTel Corporation" }, + { "UNA", "Unisys DSD" }, + { "LAB", "ACT Labs Ltd" }, + { "UIC", "Uniform Industrial Corporation" }, + { "IDK", "IDK Corporation" }, + { "CHI", "Chrontel Inc" }, + { "QCH", "Metronics Inc" }, + { "CER", "Ceronix" }, + { "PCB", "OCTAL S.A." }, + { "VTV", "VATIV Technologies" }, + { "BTI", "BusTech Inc" }, + { "RVL", "Reveal Computer Prod" }, + { "CHC", "Chic Technology Corp." }, + { "QDS", "Quanta Display Inc." }, + { "DAW", "DA2 Technologies Inc" }, + { "MTR", "Mitron computer Inc" }, + { "PCP", "Procomp USA Inc" }, + { "AZM", "AZ Middelheim - Radiotherapy" }, + { "NHT", "Vinci Labs" }, + { "ROB", "Robust Electronics GmbH" }, + { "RIC", "RICOH COMPANY, LTD." }, + { "PCI", "Pioneer Computer Inc" }, + { "EKA", "MagTek Inc." }, + { "SWL", "Sharedware Ltd" }, + { "GSM", "Goldstar Company Ltd" }, + { "IDP", "Integrated Device Technology, Inc." }, + { "BPD", "Micro Solutions, Inc." }, + { "UNS", "Unisys Corporation" }, + { "PBN", "Packard Bell NEC" }, + { "KRM", "Kroma Telecom" }, + { "ENT", "Enterprise Comm. & Computing Inc" }, + { "ATL", "Arcus Technology Ltd" }, + { "VDT", "Viditec, Inc." }, + { "JUK", "Janich & Klass Computertechnik GmbH" }, + { "PVG", "Proview Global Co., Ltd" }, + { "INX", "Communications Supply Corporation (A division of WESCO)" }, + { "GDS", "GDS" }, + { "UHB", "XOCECO" }, + { "MEI", "Panasonic Industry Company" }, + { "OXU", "Oxus Research S.A." }, + { "SGO", "Logos Design A/S" }, + { "STU", "Sentelic Corporation" }, + { "PUL", "Pulse-Eight Ltd" }, + { "BRA", "Braemac Pty Ltd" }, + { "MBD", "Microbus PLC" }, + { "OAS", "Oasys Technology Company" }, + { "MDS", "Micro Display Systems Inc" }, + { "SCS", "Nanomach Anstalt" }, + { "DAS", "DAVIS AS" }, + { "NLC", "Next Level Communications" }, + { "MSU", "motorola" }, + { "MAD", "Xedia Corporation" }, + { "LOE", "Loewe Opta GmbH" }, + { "EEE", "ET&T Technology Company Ltd" }, + { "ANX", "Acer Netxus Inc" }, + { "IEE", "IEE" }, + { "ALL", "Alliance Semiconductor Corporation" }, + { "DCT", "Dancall Telecom A/S" }, + { "AII", "Amptron International Inc." }, + { "DPT", "DPT" }, + { "TNJ", "DO NOT USE - TNJ" }, + { "FTC", "Futuretouch Corporation" }, + { "ESG", "ELCON Systemtechnik GmbH" }, + { "SYV", "SYVAX Inc" }, + { "RAC", "Racore Computer Products Inc" }, + { "IBM", "IBM France" }, + { "LTV", "Leitch Technology International Inc." }, + { "AKE", "AKAMI Electric Co.,Ltd" }, + { "VDO", "Video & Display Oriented Corporation" }, + { "MEN", "MEN Mikroelectronik Nueruberg GmbH" }, + { "UNT", "Unisys Corporation" }, + { "TTK", "Totoku Electric Company Ltd" }, + { "DII", "Dataq Instruments Inc" }, + { "AMO", "Amino Technologies PLC and Amino Communications Limited" }, + { "IMC", "IMC Networks" }, + { "STG", "StereoGraphics Corp." }, + { "RRI", "Radicom Research Inc" }, + { "HTI", "Hampshire Company, Inc." }, + { "SOR", "Sorcus Computer GmbH" }, + { "AXL", "Axel" }, + { "SNS", "Cirtech (UK) Ltd" }, + { "IPD", "Industrial Products Design, Inc." }, + { "FMI", "Fujitsu Microelect Inc" }, + { "FMA", "Fast Multimedia AG" }, + { "MIT", "MCM Industrial Technology GmbH" }, + { "RII", "Racal Interlan Inc" }, + { "PDN", "AT&T Paradyne" }, + { "TRU", "Aashima Technology B.V." }, + { "BEI", "Beckworth Enterprises Inc" }, + { "RSS", "Rockwell Semiconductor Systems" }, + { "SHR", "Digital Discovery" }, + { "CDT", "IBM Corporation" }, + { "TKC", "Taiko Electric Works.LTD" }, + { "ITM", "ITM inc." }, + { "QUE", "Questra Consulting" }, + { "CMR", "Cambridge Research Systems Ltd" }, + { "LCC", "LCI" }, + { "MDO", "Panasonic" }, + { "IEC", "Interlace Engineering Corporation" }, + { "DPL", "Digital Projection Limited" }, + { "INV", "Inviso, Inc." }, + { "JSD", "JS DigiTech, Inc" }, + { "TOE", "TOEI Electronics Co., Ltd." }, + { "HAY", "Hayes Microcomputer Products Inc" }, + { "SSJ", "Sankyo Seiki Mfg.co., Ltd" }, + { "NNC", "NNC" }, + { "PHE", "Philips Medical Systems Boeblingen GmbH" }, + { "MWI", "Multiwave Innovation Pte Ltd" }, + { "WYT", "Wooyoung Image & Information Co.,Ltd." }, + { "AIM", "AIMS Lab Inc" }, + { "CSS", "CSS Laboratories" }, + { "TRS", "Torus Systems Ltd" }, + { "ROK", "Rockwell International" }, + { "SXD", "Silex technology, Inc." }, + { "PHS", "Philips Communication Systems" }, + { "CLM", "CrystaLake Multimedia" }, + { "ALO", "Algolith Inc." }, + { "SIU", "Seiko Instruments USA Inc" }, + { "TUA", "T+A elektroakustik GmbH" }, + { "CTE", "Chunghwa Telecom Co., Ltd." }, + { "SDD", "Intrada-SDD Ltd" }, + { "RMT", "Roper Mobile" }, + { "SSP", "Spectrum Signal Proecessing Inc" }, + { "VTN", "VIDEOTRON CORP." }, + { "VAD", "Vaddio, LLC" }, + { "SFT", "Mikroforum Ring 3" }, + { "DGK", "DugoTech Co., LTD" }, + { "ACH", "Archtek Telecom Corporation" }, + { "ABT", "Anchor Bay Technologies, Inc." }, + { "STC", "STAC Electronics" }, + { "DRS", "DRS Defense Solutions, LLC" }, + { "OQI", "Oksori Company Ltd" }, + { "IMT", "Inmax Technology Corporation" }, + { "ENE", "ENE Technology Inc." }, + { "WBS", "WB Systemtechnik GmbH" }, + { "PRC", "PerComm" }, + { "PSC", "Philips Semiconductors" }, + { "RJS", "Advanced Engineering" }, + { "STS", "SITECSYSTEM CO., LTD." }, + { "LAV", "Lava Computer MFG Inc" }, + { "RCH", "Reach Technology Inc" }, + { "DWE", "Daewoo Electronics Company Ltd" }, + { "KTC", "Kingston Tech Corporation" }, + { "GLS", "Gadget Labs LLC" }, + { "COS", "CoStar Corporation" }, + { "SBI", "SMART Technologies Inc." }, + { "ATP", "Alpha-Top Corporation" }, + { "DQB", "Datacube Inc" }, + { "INN", "Innovent Systems, Inc." }, + { "DNT", "Dr. Neuhous Telekommunikation GmbH" }, + { "KFX", "Kofax Image Products" }, + { "APE", "Alpine Electronics, Inc." }, + { "DSM", "DSM Digital Services GmbH" }, + { "RES", "ResMed Pty Ltd" }, + { "HMX", "HUMAX Co., Ltd." }, + { "PCW", "Pacific CommWare Inc" }, + { "KYC", "Kyocera Corporation" }, + { "VSN", "Ingram Macrotron" }, + { "SNT", "SuperNet Inc" }, + { "TEL", "Promotion and Display Technology Ltd." }, + { "IFX", "Infineon Technologies AG" }, + { "PVC", "DO NOT USE - PVC" }, + { "JKC", "JVC KENWOOD Corporation" }, + { "MSV", "Mosgi Corporation" }, + { "BUR", "Bernecker & Rainer Ind-Eletronik GmbH" }, + { "PTA", "PAR Tech Inc." }, + { "GGL", "Google Inc." }, + { "COM", "Comtrol Corporation" }, + { "JEN", "N-Vision" }, + { "AMP", "AMP Inc" }, + { "HDI", "HD-INFO d.o.o." }, + { "BOE", "BOE" }, + { "ICM", "Intracom SA" }, + { "ADD", "Advanced Peripheral Devices Inc" }, + { "PRI", "Priva Hortimation BV" }, + { "ANL", "Analogix Semiconductor, Inc" }, + { "AVO", "Avocent Corporation" }, + { "LEG", "Legerity, Inc" }, + { "DTE", "Dimension Technologies, Inc." }, + { "WPA", "Matsushita Communication Industrial Co., Ltd." }, + { "OLV", "Olitec S.A." }, + { "RNB", "Rainbow Technologies" }, + { "LVI", "LVI Low Vision International AB" }, + { "LOC", "Locamation B.V." }, + { "TGC", "Toshiba Global Commerce Solutions, Inc." }, + { "STI", "Smart Tech Inc" }, + { "TLF", "Teleforce.,co,ltd" }, + { "PLC", "Pro-Log Corporation" }, + { "HSD", "HannStar Display Corp" }, + { "ONE", "Oneac Corporation" }, + { "CLE", "Classe Audio" }, + { "MCI", "Micronics Computers" }, + { "VTG", "Voice Technologies Group Inc" }, + { "VTI", "VLSI Tech Inc" }, + { "DAI", "DAIS SET Ltd." }, + { "UNM", "Unisys Corporation" }, + { "MCQ", "Mat's Computers" }, + { "IPC", "IPC Corporation" }, + { "ADE", "Arithmos, Inc." }, + { "PON", "Perpetual Technologies, LLC" }, + { "EXA", "Exabyte" }, + { "CHD", "ChangHong Electric Co.,Ltd" }, + { "FDT", "Fujitsu Display Technologies Corp." }, + { "DBL", "Doble Engineering Company" }, + { "CTP", "Computer Technology Corporation" }, + { "CLD", "COMMAT L.t.d." }, + { "BLI", "Busicom" }, + { "FRS", "South Mountain Technologies, LTD" }, + { "CDD", "Convergent Data Devices" }, + { "SHT", "Shin Ho Tech" }, + { "EPC", "Empac" }, + { "RDS", "Radius Inc" }, + { "NEX", "Nexgen Mediatech Inc.," }, + { "AGC", "Beijing Aerospace Golden Card Electronic Engineering Co.,Ltd." }, + { "MCP", "Magni Systems Inc" }, + { "WMO", "Westermo Teleindustri AB" }, + { "NMX", "Neomagic" }, + { "BDS", "Barco Display Systems" }, + { "RIV", "Rivulet Communications" }, + { "TRA", "TriTech Microelectronics International" }, + { "CYX", "Cyrix Corporation" }, + { "TCM", "3Com Corporation" }, + { "ZYP", "Zypcom Inc" }, + { "VIB", "Tatung UK Ltd" }, + { "IEI", "Interlink Electronics" }, + { "BGB", "Barco Graphics N.V" }, + { "ISP", "IntreSource Systems Pte Ltd" }, + { "BGT", "Budzetron Inc" }, + { "DPS", "Digital Processing Systems" }, + { "SSS", "S3 Inc" }, + { "AXB", "Adrienne Electronics Corporation" }, + { "HKA", "HONKO MFG. CO., LTD." }, + { "TPK", "TOPRE CORPORATION" }, + { "NPI", "Network Peripherals Inc" }, + { "LMP", "Leda Media Products" }, + { "MAI", "Mutoh America Inc" }, + { "ATX", "Athenix Corporation" }, + { "MVM", "SOBO VISION" }, + { "ALI", "Acer Labs" }, + { "HPR", "H.P.R. Electronics GmbH" }, + { "BIL", "Billion Electric Company Ltd" }, + { "CRO", "Extraordinary Technologies PTY Limited" }, + { "KTG", "Kayser-Threde GmbH" }, + { "SCI", "System Craft" }, + { "MVD", "Microvitec PLC" }, + { "IST", "Intersolve Technologies" }, + { "ICD", "ICD Inc" }, + { "PDS", "PD Systems International Ltd" }, + { "CPQ", "Compaq Computer Company" }, + { "QCL", "Quadrant Components Inc" }, + { "PRA", "PRO/AUTOMATION" }, + { "MAC", "MAC System Company Ltd" }, + { "TOP", "Orion Communications Co., Ltd." }, + { "AGT", "Agilent Technologies" }, + { "SWI", "Sierra Wireless Inc." }, + { "ATT", "AT&T" }, + { "MCL", "Motorola Communications Israel" }, + { "NCS", "Northgate Computer Systems" }, + { "RSX", "Rapid Tech Corporation" }, + { "ATV", "Office Depot, Inc." }, + { "MRD", "MicroDisplay Corporation" }, + { "SCH", "Schlumberger Cards" }, + { "ONW", "OPEN Networks Ltd" }, + { "DTC", "DTC Tech Corporation" }, + { "HYV", "Hynix Semiconductor" }, + { "WEL", "W-DEV" }, + { "AND", "Adtran Inc" }, + { "AMN", "Amimon LTD." }, + { "PXL", "The Moving Pixel Company" }, + { "ZCT", "ZeitControl cardsystems GmbH" }, + { "ALH", "AL Systems" }, + { "VCJ", "Victor Company of Japan, Limited" }, + { "COD", "CODAN Pty. Ltd." }, + { "TMM", "Time Management, Inc." }, + { "PPR", "PicPro" }, + { "INL", "InnoLux Display Corporation" }, + { "LTC", "Labtec Inc" }, + { "PNP", "Microsoft" }, + { "FIL", "Forefront Int'l Ltd" }, + { "OSR", "Oksori Company Ltd" }, + { "PEI", "PEI Electronics Inc" }, + { "EZP", "Storm Technology" }, + { "TCE", "Century Corporation" }, + { "KAR", "Karna" }, + { "ALS", "Texas Advanced optoelectronics Solutions, Inc" }, + { "COI", "Codec Inc." }, + { "NRT", "Beijing Northern Radiantelecom Co." }, + { "FTR", "Mediasonic" }, + { "SUN", "Sun Electronics Corporation" }, + { "OZO", "Tribe Computer Works Inc" }, + { "MCO", "Motion Computing Inc." }, + { "UBI", "Ungermann-Bass Inc" }, + { "ZNI", "Zetinet Inc" }, + { "FUN", "sisel muhendislik" }, + { "RMP", "Research Machines" }, + { "DGT", "The Dearborn Group" }, + { "SPX", "Simplex Time Recorder Co." }, + { "COR", "Corollary Inc" }, + { "AMX", "AMX LLC" }, + { "AKY", "Askey Computer Corporation" }, + { "RAR", "Raritan, Inc." }, + { "VDS", "Vidisys GmbH & Company" }, + { "SCL", "Sigmacom Co., Ltd." }, + { "KSL", "Karn Solutions Ltd." }, + { "ACK", "Acksys" }, + { "NWS", "Newisys, Inc." }, + { "TRX", "Trex Enterprises" }, + { "BOI", "NINGBO BOIGLE DIGITAL TECHNOLOGY CO.,LTD" }, + { "NTT", "NTT Advanced Technology Corporation" }, + { "GUZ", "Guzik Technical Enterprises" }, + { "MDY", "Microdyne Inc" }, + { "EDM", "EDMI" }, + { "DTI", "Diversified Technology, Inc." }, + { "MMI", "Multimax" }, + { "SCB", "SeeCubic B.V." }, + { "UPS", "Systems Enhancement" }, + { "AKB", "Akebia Ltd" }, + { "NBT", "NingBo Bestwinning Technology CO., Ltd" }, + { "TCD", "Taicom Data Systems Co., Ltd." }, + { "XMM", "C3PO S.L." }, + { "OIM", "Option International" }, + { "DAV", "Davicom Semiconductor Inc" }, + { "CKJ", "Carina System Co., Ltd." }, + { "ATD", "Alpha Telecom Inc" }, + { "XQU", "SHANGHAI SVA-DAV ELECTRONICS CO., LTD" }, + { "KOL", "Kollmorgen Motion Technologies Group" }, + { "HWA", "Harris Canada Inc" }, + { "INE", "Inventec Electronics (M) Sdn. Bhd." }, + { "ORN", "ORION ELECTRIC CO., LTD." }, + { "KES", "Kesa Corporation" }, + { "CRC", "CONRAC GmbH" }, + { "AXT", "Axtend Technologies Inc" }, + { "NAX", "Naxos Tecnologia" }, + { "DAN", "Danelec Marine A/S" }, + { "ADP", "Adaptec Inc" }, + { "ICA", "ICA Inc" }, + { "AGL", "Argolis" }, + { "ECC", "ESSential Comm. Corporation" }, + { "AWS", "Wave Systems" }, + { "APN", "Appian Tech Inc" }, + { "DGI", "DIGI International" }, + { "MCS", "Micro Computer Systems" }, + { "ITA", "Itausa Export North America" }, + { "CII", "Cromack Industries Inc" }, + { "IPS", "IPS, Inc. (Intellectual Property Solutions, Inc.)" }, + { "KOE", "KOLTER ELECTRONIC" }, + { "MEP", "Meld Technology" }, + { "IMA", "Imagraph" }, + { "DDV", "Delta Information Systems, Inc" }, + { "GML", "General Information Systems" }, + { "SSC", "Sierra Semiconductor Inc" }, + { "WNX", "Wincor Nixdorf International GmbH" }, + { "ABD", "Allen Bradley Company" }, + { "CMS", "CompuMaster Srl" }, + { "INK", "Indtek Co., Ltd." }, + { "DTT", "Design & Test Technology, Inc." }, + { "MGA", "Mega System Technologies, Inc." }, + { "SMO", "STMicroelectronics" }, + { "SSI", "S-S Technology Inc" }, + { "CIR", "Cirrus Logic Inc" }, + { "EKC", "Eastman Kodak Company" }, + { "LNR", "Linear Systems Ltd." }, + { "VCM", "Vector Magnetics, LLC" }, + { "HKG", "Josef Heim KG" }, + { "ORG", "ORGA Kartensysteme GmbH" }, + { "ELG", "Elmeg GmbH Kommunikationstechnik" }, + { "NSI", "NISSEI ELECTRIC CO.,LTD" }, + { "RDM", "Tremon Enterprises Company Ltd" }, + { "HAI", "Haivision Systems Inc." }, + { "CIC", "Comm. Intelligence Corporation" }, + { "LTS", "LTS Scale LLC" }, + { "SAS", "Stores Automated Systems Inc" }, + { "OEC", "ORION ELECTRIC CO.,LTD" }, + { "BRG", "Bridge Information Co., Ltd" }, + { "SQT", "Sequent Computer Systems Inc" }, + { "CCI", "Cache" }, + { "PRX", "Proxima Corporation" }, + { "ADR", "Nasa Ames Research Center" }, + { "SNW", "Snell & Wilcox" }, + { "CDI", "Concept Development Inc" }, + { "SEA", "Seanix Technology Inc." }, + { "STY", "SDS Technologies" }, + { "PCA", "Philips BU Add On Card" }, + { "NYC", "nakayo telecommunications,inc." }, + { "JMT", "Micro Technical Company Ltd" }, + { "MTD", "MindTech Display Co. Ltd" }, + { "NSP", "Nspire System Inc." }, + { "DSD", "DS Multimedia Pte Ltd" }, + { "PBI", "Pitney Bowes" }, + { "ARO", "Poso International B.V." }, + { "TTE", "TTE, Inc." }, + { "DDA", "DA2 Technologies Corporation" }, + { "MAS", "Mass Inc." }, + { "LAC", "LaCie" }, + { "CRX", "Cyrix Corporation" }, + { "EMO", "ELMO COMPANY, LIMITED" }, + { "OSP", "OPTI-UPS Corporation" }, + { "GED", "General Dynamics C4 Systems" }, + { "PPI", "Practical Peripherals" }, + { "VPI", "Video Products Inc" }, + { "TOS", "Toshiba Corporation" }, + { "ASL", "AccuScene Corporation Ltd" }, + { "ANT", "Ace CAD Enterprise Company Ltd" }, + { "GRV", "Advanced Gravis" }, + { "ANO", "Anorad Corporation" }, + { "LNK", "Link Tech Inc" }, + { "DIG", "Digicom S.p.A." }, + { "ALC", "Altec Corporation" }, + { "IAI", "Integration Associates, Inc." }, + { "APG", "Horner Electric Inc" }, + { "TWK", "TOWITOKO electronics GmbH" }, + { "BRI", "Boca Research Inc" }, + { "SVS", "SVSI" }, + { "QCI", "Quanta Computer Inc" }, + { "MDD", "MODIS" }, + { "PDT", "PDTS - Prozessdatentechnik und Systeme" }, + { "IMP", "Impression Products Incorporated" }, + { "EXI", "Exide Electronics" }, + { "WNV", "Winnov L.P." }, + { "ALG", "Realtek Semiconductor Corp." }, + { "ESA", "Elbit Systems of America" }, + { "OLC", "Olicom A/S" }, + { "DPX", "DpiX, Inc." }, + { "GSB", "NIPPONDENCHI CO,.LTD" }, + { "MCA", "American Nuclear Systems Inc" }, + { "EST", "Embedded Solution Technology" }, + { "ADX", "Adax Inc" }, + { "MSA", "Micro Systemation AB" }, + { "HDV", "Holografika kft." }, + { "GIP", "GI Provision Ltd" }, + { "XTN", "X-10 (USA) Inc" }, + { "VEC", "Vector Informatik GmbH" }, + { "DTN", "Datang Telephone Co" }, + { "CST", "CSTI Inc" }, + { "ECO", "Echo Speech Corporation" }, + { "TDD", "Tandberg Data Display AS" }, + { "NVL", "Novell Inc" }, + { "CHT", "Chunghwa Picture Tubes,LTD." }, + { "SCP", "Scriptel Corporation" }, + { "TMS", "Trident Microsystems Ltd" }, + { "ABO", "D-Link Systems Inc" }, + { "JTY", "jetway security micro,inc" }, + { "LSD", "Intersil Corporation" }, + { "SEP", "SEP Eletronica Ltda." }, + { "SHI", "Jiangsu Shinco Electronic Group Co., Ltd" }, + { "FTG", "FTG Data Systems" }, + { "ESN", "eSATURNUS" }, + { "DJE", "Capstone Visual Product Development" }, + { "BEC", "Elektro Beckhoff GmbH" }, + { "FVC", "First Virtual Corporation" }, + { "JUP", "Jupiter Systems" }, + { "XNT", "XN Technologies, Inc." }, + { "RTK", "DO NOT USE - RTK" }, + { "ACL", "Apricot Computers" }, + { "TAA", "Tandberg" }, + { "WIP", "Wipro Infotech" }, + { "KRL", "Krell Industries Inc." }, + { "INO", "Innolab Pte Ltd" }, + { "ELT", "Element Labs, Inc." }, + { "KTE", "K-Tech" }, + { "CVA", "Covia Inc." }, + { "SIC", "Sysmate Corporation" }, + { "STH", "Semtech Corporation" }, + { "ACD", "AWETA BV" }, + { "EHN", "Enhansoft" }, + { "VMI", "Vermont Microsystems" }, + { "TTC", "Telecommunications Techniques Corporation" }, + { "KYE", "KYE Syst Corporation" }, + { "QDI", "Quantum Data Incorporated" }, + { "ELL", "Electrosonic Ltd" }, + { "FLE", "ADTI Media, Inc" }, + { "KTD", "Takahata Electronics Co.,Ltd." }, + { "MAL", "Meridian Audio Ltd" }, + { "TRV", "Trivisio Prototyping GmbH" }, + { "TWH", "Twinhead International Corporation" }, + { "SYP", "SYPRO Co Ltd" }, + { "GCC", "GCC Technologies Inc" }, + { "POR", "Portalis LC" }, + { "PIM", "Prism, LLC" }, + { "MLX", "Mylex Corporation" }, + { "ONL", "OnLive, Inc" }, + { "NIS", "Nissei Electric Company" }, + { "ISM", "Image Stream Medical" }, + { "EPS", "KEPS" }, + { "PAC", "Pacific Avionics Corporation" }, + { "AXC", "AXIOMTEK CO., LTD." }, + { "DYX", "Dynax Electronics (HK) Ltd" }, + { "WEB", "WebGear Inc" }, + { "RIT", "Ritech Inc" }, + { "INI", "Initio Corporation" }, + { "LBO", "Lubosoft" }, + { "PGM", "Paradigm Advanced Research Centre" }, + { "OSA", "OSAKA Micro Computer, Inc." }, + { "SIN", "Singular Technology Co., Ltd." }, + { "CIN", "Citron GmbH" }, + { "OTB", "outsidetheboxstuff.com" }, + { "ARL", "Arlotto Comnet Inc" }, + { "HOB", "HOB Electronic GmbH" }, + { "QQQ", "Chuomusen Co., Ltd." }, + { "AXE", "D-Link Systems Inc" }, + { "CCC", "C-Cube Microsystems" }, + { "CPT", "cPATH" }, + { "SEM", "Samsung Electronics Company Ltd" }, + { "PVI", "Prime view international Co., Ltd" }, + { "TAT", "Teleliaison Inc" }, + { "SON", "Sony" }, + { "ITT", "I&T Telecom." }, + { "SLM", "Solomon Technology Corporation" }, + { "MAN", "LGIC" }, + { "AIX", "ALTINEX, INC." }, + { "ASP", "ASP Microelectronics Ltd" }, + { "VUT", "Vutrix (UK) Ltd" }, + { "MTE", "MediaTec GmbH" }, + { "UPP", "UPPI" }, + { "DCM", "DCM Data Products" }, + { "DYC", "Dycam Inc" }, + { "DAK", "Daktronics" }, + { "JAZ", "Carrera Computer Inc" }, + { "FOX", "HON HAI PRECISON IND.CO.,LTD." }, + { "UEI", "Universal Electronics Inc" }, + { "OPI", "D.N.S. Corporation" }, + { "CXT", "Conexant Systems" }, + { "VTK", "Viewteck Co., Ltd." }, + { "AVL", "Avalue Technology Inc." }, + { "TSI", "TeleVideo Systems" }, + { "PAN", "The Panda Project" }, + { "CED", "Cambridge Electronic Design Ltd" }, + { "RUP", "Ups Manufactoring s.r.l." }, + { "MIP", "micronpc.com" }, + { "REM", "SCI Systems Inc." }, + { "NSS", "Newport Systems Solutions" }, + { "FBI", "Interface Corporation" }, + { "FER", "Ferranti Int'L" }, + { "DLG", "Digital-Logic GmbH" }, + { "TSY", "TouchSystems" }, + { "PIO", "Pioneer Electronic Corporation" }, + { "PNG", "P.I. Engineering Inc" }, + { "OIN", "Option International" }, + { "RED", "Research Electronics Development Inc" }, + { "NOI", "North Invent A/S" }, + { "MAY", "Maynard Electronics" }, + { "BTO", "BioTao Ltd" }, + { "ZYD", "Zydacron Inc" }, + { "KCD", "Chunichi Denshi Co.,LTD." }, + { "TTI", "Trenton Terminals Inc" }, + { "TRD", "Trident Microsystem Inc" }, + { "TDP", "3D Perception" }, + { "TER", "TerraTec Electronic GmbH" }, + { "AEM", "ASEM S.p.A." }, + { "IBI", "INBINE.CO.LTD" }, + { "ECK", "Eugene Chukhlomin Sole Proprietorship, d.b.a." }, + { "AVT", "Avtek (Electronics) Pty Ltd" }, + { "PST", "Global Data SA" }, + { "FPS", "Deltec Corporation" }, + { "SHP", "Sharp Corporation" }, + { "RDN", "RADIODATA GmbH" }, + { "TRC", "Trioc AB" }, + { "ABE", "Alcatel Bell" }, + { "VCX", "VCONEX" }, + { "PBL", "Packard Bell Electronics" }, + { "TLK", "Telelink AG" }, + { "DMM", "Dimond Multimedia Systems Inc" }, + { "IGM", "IGM Communi" }, + { "KFC", "SCD Tech" }, + { "GUD", "Guntermann & Drunck GmbH" }, + { "MDA", "Media4 Inc" }, + { "VWB", "Vweb Corp." }, + { "ISG", "Insignia Solutions Inc" }, + { "AMS", "ARMSTEL, Inc." }, + { "NTL", "National Transcomm. Ltd" }, + { "LSJ", "LSI Japan Company Ltd" }, + { "NDL", "Network Designers" }, + { "DIA", "Diadem" }, + { "SDX", "SDX Business Systems Ltd" }, + { "LPL", "LG Philips" }, + { "CAG", "CalComp" }, + { "FZC", "Founder Group Shenzhen Co." }, + { "PCX", "PC Xperten" }, + { "TSF", "Racal-Airtech Software Forge Ltd" }, + { "RGL", "Robertson Geologging Ltd" }, + { "MSD", "Datenerfassungs- und Informationssysteme" }, + { "NVC", "NetVision Corporation" }, + { "SKD", "Schneider & Koch" }, + { "CRS", "Crescendo Communication Inc" }, + { "AXI", "American Magnetics" }, + { "HRS", "Harris Semiconductor" }, + { "AEN", "Avencall" }, + { "TCL", "Technical Concepts Ltd" }, + { "SST", "SystemSoft Corporation" }, + { "OMN", "Omnitel" }, + { "GCI", "Gateway Comm. Inc" }, + { "SEN", "Sencore" }, + { "MDT", "Magus Data Tech" }, + { "ALN", "Alana Technologies" }, + { "AVD", "Avid Electronics Corporation" }, + { "DOM", "Dome Imaging Systems" }, + { "KBL", "Kobil Systems GmbH" }, + { "ITS", "IDTECH" }, + { "CGS", "Chyron Corp" }, + { "CYV", "Cyviz AS" }, + { "CSO", "California Institute of Technology" }, + { "ADT", "Aved Display Technologies" }, + { "ACP", "Aspen Tech Inc" }, + { "AKI", "AKIA Corporation" }, + { "LCT", "Labcal Technologies" }, + { "NDS", "Nokia Data" }, + { "WCS", "Woodwind Communications Systems Inc" }, + { "XFG", "Jan Strapko - FOTO" }, + { "CPI", "Computer Peripherals Inc" }, + { "FCG", "First International Computer Ltd" }, + { "EVE", "Advanced Micro Peripherals Ltd" }, + { "ATO", "ASTRO DESIGN, INC." }, + { "SGW", "Shanghai Guowei Science and Technology Co., Ltd." }, + { "CNB", "American Power Conversion" }, + { "TCX", "FREEMARS Heavy Industries" }, + { "ITN", "The NTI Group" }, + { "HWD", "Highwater Designs Ltd" }, + { "NUG", "NU Technology, Inc." }, + { "ISL", "Isolation Systems" }, + { "CIL", "Citicom Infotech Private Limited" }, + { "IOT", "I/OTech Inc" }, + { "GET", "Getac Technology Corporation" }, + { "ULT", "Ultra Network Tech" }, + { "TVV", "TV1 GmbH" }, + { "OWL", "Mediacom Technologies Pte Ltd" }, + { "TMX", "Thermotrex Corporation" }, + { "ARC", "Alta Research Corporation" }, + { "SEL", "Way2Call Communications" }, + { "ELS", "ELSA GmbH" }, + { "STD", "STD Computer Inc" }, + { "GST", "Graphic SystemTechnology" }, + { "SME", "Sysmate Company" }, + { "ARS", "Arescom Inc" }, + { "SCN", "Scanport, Inc." }, + { "CTX", "Creatix Polymedia GmbH" }, + { "DIM", "dPict Imaging, Inc." }, + { "MDI", "Micro Design Inc" }, + { "SCM", "SCM Microsystems Inc" }, + { "CEA", "Consumer Electronics Association" }, + { "OTI", "Orchid Technology" }, + { "ADK", "Adtek System Science Company Ltd" }, + { "ETC", "Everton Technology Company Ltd" }, + { "PCO", "Performance Concepts Inc.," }, + { "DMC", "Dune Microsystems Corporation" }, + { "SGM", "SAGEM" }, + { "OBS", "Optibase Technologies" }, + { "PMX", "Photomatrix" }, + { "SDI", "Samtron Displays Inc" }, + { "GMM", "GMM Research Inc" }, + { "DUN", "NCR Corporation" }, + { "CAL", "Acon" }, + { "MIR", "Miro Computer Prod." }, + { "PEN", "Interactive Computer Products Inc" }, + { "CRL", "Creative Logic" }, + { "SBT", "Senseboard Technologies AB" }, + { "AST", "AST Research Inc" }, + { "INS", "Ines GmbH" }, + { "SGC", "Spectragraphics Corporation" }, + { "DBI", "DigiBoard Inc" }, + { "LEO", "First International Computer Inc" }, + { "TSP", "U.S. Navy" }, + { "MTK", "Microtek International Inc." }, + { "TCN", "Tecnetics (PTY) Ltd" }, + { "DPM", "ADPM Synthesis sas" }, + { "LGS", "LG Semicom Company Ltd" }, + { "LGI", "Logitech Inc" }, + { "PBV", "Pitney Bowes" }, + { "ELI", "Edsun Laboratories" }, + { "HPQ", "HP" }, + { "RPT", "R.P.T.Intergroups" }, + { "BDO", "Brahler ICS" }, + { "ARM", "Arima" }, + { "JTS", "JS Motorsports" }, + { "TNY", "Tennyson Tech Pty Ltd" }, + { "UDN", "Uniden Corporation" }, + { "KNC", "Konica corporation" }, + { "GND", "Gennum Corporation" }, + { "MSG", "MSI GmbH" }, + { "REH", "Rehan Electronics Ltd." }, + { "COL", "Rockwell Collins, Inc." }, + { "MDC", "Midori Electronics" }, + { "TRN", "Datacommunicatie Tron B.V." }, + { "VDA", "Victor Data Systems" }, + { "TOU", "Touchstone Technology" }, + { "ETD", "ELAN MICROELECTRONICS CORPORATION" }, + { "CYB", "CyberVision" }, + { "SWC", "Software Café" }, + { "EXN", "RGB Systems, Inc. dba Extron Electronics" }, + { "HSP", "HannStar Display Corp" }, + { "WTK", "Wearnes Thakral Pte" }, + { "GFM", "GFMesstechnik GmbH" }, + { "INC", "Home Row Inc" }, + { "LEC", "Lectron Company Ltd" }, + { "WTS", "Restek Electric Company Ltd" }, + { "ACE", "Actek Engineering Pty Ltd" }, + { "MSH", "Microsoft" }, + { "CHL", "Chloride-R&D" }, + { "ALT", "Altra" }, + { "EES", "EE Solutions, Inc." }, + { "ASX", "AudioScience" }, + { "DAC", "Digital Acoustics Corporation" }, + { "HAL", "Halberthal" }, + { "HPC", "Hewlett Packard Co." }, + { "GRY", "Robert Gray Company" }, + { "AXO", "Axonic Labs LLC" }, + { "ALJ", "Altec Lansing" }, + { "SMS", "Silicom Multimedia Systems Inc" }, + { "HPI", "Headplay, Inc." }, + { "FRO", "FARO Technologies" }, + { "GAU", "Gaudi Co., Ltd." }, + { "SRS", "SR-Systems e.K." }, + { "APL", "Aplicom Oy" }, + { "JGD", "University College" }, + { "NVD", "Nvidia" }, + { "CEP", "C-DAC" }, + { "BDR", "Blonder Tongue Labs, Inc." }, + { "AUO", "AU Optronics" }, + { "DCR", "Decros Ltd" }, + { "DLK", "D-Link Systems Inc" }, + { "SWS", "Static" }, + { "WSC", "CIS Technology Inc" }, + { "ESL", "Esterline Technologies" }, + { "ISC", "Id3 Semiconductors" }, + { "XSN", "Xscreen AS" }, + { "FML", "Fujitsu Microelect Ltd" }, + { "WPI", "Wearnes Peripherals International (Pte) Ltd" }, + { "EGL", "Eagle Technology" }, + { "EGA", "Elgato Systems LLC" }, + { "GAG", "Gage Applied Sciences Inc" }, + { "HCP", "Hitachi Computer Products Inc" }, + { "UET", "Universal Empowering Technologies" }, + { "ITL", "Inter-Tel" }, + { "SDE", "Sherwood Digital Electronics Corporation" }, + { "CAA", "Castles Automation Co., Ltd" }, + { "ZRN", "Zoran Corporation" }, + { "VLT", "VideoLan Technologies" }, + { "EUT", "Ericsson Mobile Networks B.V." }, + { "REA", "Real D" }, + { "BUT", "21ST CENTURY ENTERTAINMENT" }, + { "THN", "Thundercom Holdings Sdn. Bhd." }, + { "CHO", "Sichuang Changhong Corporation" }, + { "SCC", "SORD Computer Corporation" }, + { "MSY", "MicroTouch Systems Inc" }, + { "ERP", "Euraplan GmbH" }, + { "CPL", "Compal Electronics Inc" }, + { "ACM", "Acroloop Motion Control Systems Inc" }, + { "VTS", "VTech Computers Ltd" }, + { "ETH", "Etherboot Project" }, + { "CGT", "congatec AG" }, + { "FEN", "Fen Systems Ltd." }, + { "MLN", "Mark Levinson" }, + { "UMC", "United Microelectr Corporation" }, + { "CAR", "Cardinal Company Ltd" }, + { "LIT", "Lithics Silicon Technology" }, + { "AWC", "Access Works Comm Inc" }, + { "PPC", "Phoenixtec Power Company Ltd" }, + { "SVT", "SEVIT Co., Ltd." }, + { "MDX", "MicroDatec GmbH" }, + { "XIN", "Xinex Networks Inc" }, + { "KTN", "Katron Tech Inc" }, + { "MJI", "MARANTZ JAPAN, INC." }, + { "CTM", "Computerm Corporation" }, + { "PDM", "Psion Dacom Plc." }, + { "AKM", "Asahi Kasei Microsystems Company Ltd" }, + { "GSY", "Grossenbacher Systeme AG" }, + { "OMR", "Omron Corporation" }, + { "RSH", "ADC-Centre" }, + { "MTM", "Motium" }, + { "XDM", "XDM Ltd." }, + { "MSX", "Micomsoft Co., Ltd." }, + { "VNC", "Vinca Corporation" }, + { "STK", "SANTAK CORP." }, + { "JET", "JET POWER TECHNOLOGY CO., LTD." }, + { "SLR", "Schlumberger Technology Corporate" }, + { "GWI", "GW Instruments" }, + { "TMI", "Texas Microsystem" }, + { "EXT", "Exatech Computadores & Servicos Ltda" }, + { "SXB", "Syntax-Brillian" }, + { "HYT", "Heng Yu Technology (HK) Limited" }, + { "TST", "Transtream Inc" }, + { "FIS", "FLY-IT Simulators" }, + { "VMW", "VMware Inc.," }, + { "PET", "Practical Electronic Tools" }, + { "BLP", "Bloomberg L.P." }, + { "MVS", "Microvision" }, + { "ZMT", "Zalman Tech Co., Ltd." }, + { "QTD", "Quantum 3D Inc" }, + { "ITE", "Integrated Tech Express Inc" }, + { "MIS", "Modular Industrial Solutions Inc" }, + { "KOB", "Kobil Systems GmbH" }, + { "KOW", "KOWA Company,LTD." }, + { "SHC", "ShibaSoku Co., Ltd." }, + { "IKS", "Ikos Systems Inc" }, + { "PGP", "propagamma kommunikation" }, + { "AYD", "Aydin Displays" }, + { "MFG", "MicroField Graphics Inc" }, + { "APS", "Autologic Inc" }, + { "APM", "Applied Memory Tech" }, + { "ACO", "Allion Computer Inc." }, + { "IWR", "Icuiti Corporation" }, + { "RCI", "RC International" }, + { "YMH", "Yamaha Corporation" }, + { "SPE", "SPEA Software AG" }, + { "ADL", "ASTRA Security Products Ltd" }, + { "QFI", "Quickflex, Inc" }, + { "FRD", "Freedom Scientific BLV" }, + { "PCM", "PCM Systems Corporation" }, + { "RHM", "Rohm Company Ltd" }, + { "EQP", "Equipe Electronics Ltd." }, + { "UND", "Unisys Corporation" }, + { "ITX", "integrated Technology Express Inc" }, + { "WML", "Wolfson Microelectronics Ltd" }, + { "IPR", "Ithaca Peripherals" }, + { "NCE", "Norcent Technology, Inc." }, + { "GWY", "Gateway 2000" }, + { "DAX", "Data Apex Ltd" }, + { "MKT", "MICROTEK Inc." }, + { "AOL", "America OnLine" }, + { "BIO", "BioLink Technologies International, Inc." }, + { "DCI", "Concepts Inc" }, + { "LOL", "Litelogic Operations Ltd" }, + { "ADI", "ADI Systems Inc" }, + { "TPJ", "Junnila" }, + { "JDL", "Japan Digital Laboratory Co.,Ltd." }, + { "MMN", "MiniMan Inc" }, + { "MNC", "Mini Micro Methods Ltd" }, + { "SUM", "Summagraphics Corporation" }, + { "SXT", "SHARP TAKAYA ELECTRONIC INDUSTRY CO.,LTD." }, + { "CAT", "Consultancy in Advanced Technology" }, + { "MSM", "Advanced Digital Systems" }, + { "CHY", "Cherry GmbH" }, + { "VLB", "ValleyBoard Ltda." }, + { "DDS", "Barco, n.v." }, + { "STL", "SigmaTel Inc" }, + { "AIE", "Altmann Industrieelektronik" }, + { "CHM", "CHIC TECHNOLOGY CORP." }, + { "KTK", "Key Tronic Corporation" }, + { "LTN", "Litronic Inc" }, + { "IDC", "International Datacasting Corporation" }, + { "TWA", "Tidewater Association" }, + { "ARI", "Argosy Research Inc" }, + { "STT", "Star Paging Telecom Tech (Shenzhen) Co. Ltd." }, + { "MYA", "Monydata" }, + { "JAE", "Japan Aviation Electronics Industry, Limited" }, + { "BBH", "B&Bh" }, + { "GIC", "General Inst. Corporation" }, + { "TIV", "OOO Technoinvest" }, + { "ION", "Inside Out Networks" }, + { "KZI", "K-Zone International co. Ltd." }, + { "IDE", "IDE Associates" }, + { "IQI", "IneoQuest Technologies, Inc" }, + { "NDI", "National Display Systems" }, + { "REL", "Reliance Electric Ind Corporation" }, + { "SPH", "G&W Instruments GmbH" }, + { "RPI", "RoomPro Technologies" }, + { "LUC", "Lucent Technologies" }, + { "CTL", "Creative Technology Ltd" }, + { "SDS", "SunRiver Data System" }, + { "USR", "U.S. Robotics Inc" }, + { "GJN", "Grand Junction Networks" }, + { "YED", "Y-E Data Inc" }, + { "RHT", "Red Hat, Inc." }, + { "AOT", "Alcatel" }, + { "TCR", "Thomson Consumer Electronics" }, + { "ILC", "Image Logic Corporation" }, + { "IGC", "Intergate Pty Ltd" }, + { "HYC", "Hypercope Gmbh Aachen" }, + { "SPL", "Smart Silicon Systems Pty Ltd" }, + { "DLC", "Diamond Lane Comm. Corporation" }, + { "TBB", "Triple S Engineering Inc" }, + { "MLS", "Milestone EPE" }, + { "QDM", "Quadram" }, + { "AIR", "Advanced Integ. Research Inc" }, + { "SLA", "Systeme Lauer GmbH&Co KG" }, + { "IBP", "IBP Instruments GmbH" }, + { "DDI", "Data Display AG" }, + { "LED", "Long Engineering Design Inc" }, + { "MSC", "Mouse Systems Corporation" }, + { "LXS", "ELEA CardWare" }, + { "ATE", "Innovate Ltd" }, + { "APV", "A+V Link" }, + { "FRC", "Force Computers" }, + { "ZTC", "ZyDAS Technology Corporation" }, + { "ANP", "Andrew Network Production" }, + { "LOG", "Logicode Technology Inc" }, + { "RAI", "Rockwell Automation/Intecolor" }, + { "MPJ", "Microlab" }, + { "CMO", "Chi Mei Optoelectronics corp." }, + { "ROH", "Rohm Co., Ltd." }, + { "HYP", "Hyphen Ltd" }, + { "ICO", "Intel Corp" }, + { "ACI", "Ancor Communications Inc" }, + { "SLT", "Salt Internatioinal Corp." }, + { "TSC", "Sanyo Electric Company Ltd" }, + { "APC", "American Power Conversion" }, + { "PSE", "Practical Solutions Pte., Ltd." }, + { "MET", "Metheus Corporation" }, + { "SAT", "Shuttle Tech" }, + { "SYK", "Stryker Communications" }, + { "BCQ", "Deutsche Telekom Berkom GmbH" }, + { "DPI", "DocuPoint" }, + { "FAR", "Farallon Computing" }, + { "ROP", "Roper International Ltd" }, + { "STB", "STB Systems Inc" }, + { "CNC", "Alvedon Computers Ltd" }, + { "DGA", "Digiital Arts Inc" }, + { "EDT", "Emerging Display Technologies Corp" }, + { "IPI", "Intelligent Platform Management Interface (IPMI) forum (Intel, HP, NEC, Dell)" }, + { "VQ@", "Vision Quest" }, + { "EMK", "Emcore Corporation" }, + { "XTD", "Icuiti Corporation" }, + { "KNX", "Nutech Marketing PTL" }, + { "WHI", "Whistle Communications" }, + { "KDM", "Korea Data Systems Co., Ltd." }, + { "QCK", "Quick Corporation" }, + { "QTR", "Qtronix Corporation" }, + { "NFS", "Number Five Software" }, + { "HTK", "Holtek Microelectronics Inc" }, + { "TRL", "Royal Information" }, + { "LXN", "Luxeon" }, + { "VLK", "Vislink International Ltd" }, + { "TWE", "Kontron Electronik" }, + { "DFI", "DFI" }, + { "JWS", "JWSpencer & Co." }, + { "FTW", "MindTribe Product Engineering, Inc." }, + { "TDM", "Tandem Computer Europe Inc" }, + { "RAS", "RAScom Inc" }, + { "KVX", "KeyView" }, + { "MOS", "Moses Corporation" }, + { "ONX", "SOMELEC Z.I. Du Vert Galanta" }, + { "STF", "Starflight Electronics" }, + { "HER", "Ascom Business Systems" }, + { "GTS", "Geotest Marvin Test Systems Inc" }, + { "KEC", "Kyushu Electronics Systems Inc" }, + { "MQP", "MultiQ Products AB" }, + { "LUX", "Luxxell Research Inc" }, + { "HEC", "Hitachi Engineering Company Ltd" }, + { "NXG", "Nexgen" }, + { "CNI", "Connect Int'l A/S" }, + { "FUJ", "Fujitsu Ltd" }, + { "APD", "AppliAdata" }, + { "LHE", "Lung Hwa Electronics Company Ltd" }, + { "SCT", "Smart Card Technology" }, + { "SOY", "SOYO Group, Inc" }, + { "ICN", "Sanyo Icon" }, + { "TDV", "TDVision Systems, Inc." }, + { "AHC", "Advantech Co., Ltd." }, + { "GTK", "G-Tech Corporation" }, + { "BII", "Boeckeler Instruments Inc" }, + { "TCC", "Tandon Corporation" }, + { "BUJ", "ATI Tech Inc" }, + { "SAA", "Sanritz Automation Co.,Ltd." }, + { "DTK", "Dynax Electronics (HK) Ltd" }, + { "HXM", "Hexium Ltd." }, + { "EGD", "EIZO GmbH Display Technologies" }, + { "NDK", "Naitoh Densei CO., LTD." }, + { "TVR", "TV Interactive Corporation" }, + { "PNL", "Panelview, Inc." }, + { "AET", "Aethra Telecomunicazioni S.r.l." }, + { "REC", "ReCom" }, + { "HET", "HETEC Datensysteme GmbH" }, + { "ZOW", "Zowie Intertainment, Inc" }, + { "MEQ", "Matelect Ltd." }, + { "DRD", "DIGITAL REFLECTION INC." }, + { "MRA", "Miranda Technologies Inc" }, + { "QTM", "Quantum" }, + { "REN", "Renesas Technology Corp." }, + { "XIO", "Xiotech Corporation" }, + { "GIS", "AT&T Global Info Solutions" }, + { "TEA", "TEAC System Corporation" }, + { "EMU", "Emulex Corporation" }, + { "VIC", "Victron B.V." }, + { "ATN", "Athena Smartcard Solutions Ltd." }, + { "SYS", "Sysgration Ltd" }, + { "CVS", "Clarity Visual Systems" }, + { "CWR", "Connectware Inc" }, + { "TVI", "Truevision" }, + { "AMB", "Ambient Technologies, Inc." }, + { "USA", "Utimaco Safeware AG" }, + { "LNT", "LANETCO International" }, + { "EDG", "Electronic-Design GmbH" }, + { "MKV", "Trtheim Technology" }, + { "SGT", "Stargate Technology" }, + { "RTS", "Raintree Systems" }, + { "PXM", "Proxim Inc" }, + { "ACG", "A&R Cambridge Ltd" }, + { "FJT", "F.J. Tieman BV" }, + { "LCD", "Toshiba Matsushita Display Technology Co., Ltd" }, + { "IDS", "Interdigital Sistemas de Informacao" }, + { "AOA", "AOpen Inc." }, + { "ACR", "Acer Technologies" }, + { "AKL", "AMiT Ltd" }, + { "IOS", "i-O Display System" }, + { "NOR", "Norand Corporation" }, + { "XST", "XS Technologies Inc" }, + { "BUG", "B.U.G., Inc." }, + { "RCN", "Radio Consult SRL" }, + { "ESI", "Extended Systems, Inc." }, + { "TUT", "Tut Systems" }, + { "VAR", "Varian Australia Pty Ltd" }, + { "DIT", "Dragon Information Technology" }, + { "CET", "TEC CORPORATION" }, + { "WKH", "Uni-Take Int'l Inc." }, + { "BHZ", "BitHeadz, Inc." }, + { "PTI", "Promise Technology Inc" }, + { "HIQ", "Kaohsiung Opto Electronics Americas, Inc." }, + { "SET", "SendTek Corporation" }, + { "KCL", "Keycorp Ltd" }, + { "EIC", "Eicon Technology Corporation" }, + { "TRT", "Tritec Electronic AG" }, + { "ZAN", "Zandar Technologies plc" }, + { "NTN", "Nuvoton Technology Corporation" }, + { "MTC", "Mars-Tech Corporation" }, + { "JQE", "CNet Technical Inc" }, + { "SRG", "Intuitive Surgical, Inc." }, + { "VIR", "Visual Interface, Inc" }, + { "HTX", "Hitex Systementwicklung GmbH" }, + { "TLX", "Telxon Corporation" }, + { "NGC", "Network General" }, + { "TSB", "Toshiba America Info Systems Inc" }, + { "SGI", "Scan Group Ltd" }, + { "AIS", "Alien Internet Services" }, + { "MUD", "Multi-Dimension Institute" }, + { "PNS", "PanaScope" }, + { "NEO", "NEO TELECOM CO.,LTD." }, + { "IMB", "ART s.r.l." }, + { "SRD", "Setred" }, + { "LEX", "Lexical Ltd" }, + { "LMI", "Lexmark Int'l Inc" }, + { "ECL", "Excel Company Ltd" }, + { "EXC", "Excession Audio" }, + { "ABA", "ABBAHOME INC." }, + { "CLI", "Cirrus Logic Inc" }, + { "DYM", "Dymo-CoStar Corporation" }, + { "MEL", "Mitsubishi Electric Corporation" }, + { "ZAX", "Zefiro Acoustics" }, + { "TEC", "Tecmar Inc" }, + { "WTI", "WorkStation Tech" }, + { "APX", "AP Designs Ltd" }, + { "MLM", "Millennium Engineering Inc" }, + { "BAC", "Biometric Access Corporation" }, + { "DDE", "Datasat Digital Entertainment" }, + { "GIM", "Guillemont International" }, + { "TVM", "Taiwan Video & Monitor Corporation" }, + { "KWD", "Kenwood Corporation" }, + { "STW", "Starwin Inc." }, + { "NRV", "Taugagreining hf" }, + { "SUP", "Supra Corporation" }, + { "MTB", "Media Technologies Ltd." }, + { "INF", "Inframetrics Inc" }, + { "OTM", "Optoma Corporation" }, + { "NTX", "Netaccess Inc" }, + { "LXC", "LXCO Technologies AG" }, + { "CRN", "Cornerstone Imaging" }, + { "PVP", "Klos Technologies, Inc." }, + { "TCJ", "TEAC America Inc" }, + { "WVM", "Wave Systems Corporation" }, + { "ERN", "Ericsson, Inc." }, + { "PVN", "Pixel Vision" }, + { "LMT", "Laser Master" }, + { "MID", "miro Displays" }, + { "VID", "Ingram Macrotron Germany" }, + { "IFZ", "Infinite Z" }, + { "ODM", "ODME Inc." }, + { "ASI", "Ahead Systems" }, + { "ISY", "International Integrated Systems,Inc.(IISI)" }, + { "NCL", "NetComm Ltd" }, + { "ITK", "ITK Telekommunikation AG" }, + { "EZE", "EzE Technologies" }, + { "VSR", "V-Star Electronics Inc." }, + { "CPC", "Ciprico Inc" }, + { "JWD", "Video International Inc." }, + { "MEC", "Mega System Technologies Inc" }, + { "NVI", "NuVision US, Inc." }, + { "MRK", "Maruko & Company Ltd" }, + { "AAA", "Avolites Ltd" }, + { "CHG", "Sichuan Changhong Electric CO, LTD." }, + { "WWV", "World Wide Video, Inc." }, + { "SEO", "SEOS Ltd" }, + { "XER", "DO NOT USE - XER" }, + { "MCN", "Micron Electronics Inc" }, + { "DXC", "Digipronix Control Systems" }, + { "RSN", "Radiospire Networks, Inc." }, + { "FGD", "Lisa Draexlmaier GmbH" }, + { "SES", "Session Control LLC" }, + { "IIN", "IINFRA Co., Ltd" }, + { "ETI", "Eclipse Tech Inc" }, + { "DXD", "DECIMATOR DESIGN PTY LTD" }, + { "BST", "BodySound Technologies, Inc." }, + { "MTL", "Mitel Corporation" }, + { "LGX", "Lasergraphics, Inc." }, + { "MSP", "Mistral Solutions [P] Ltd." }, + { "SER", "Sony Ericsson Mobile Communications Inc." }, + { "IHE", "InHand Electronics" }, + { "STO", "Stollmann E+V GmbH" }, + { "RET", "Resonance Technology, Inc." }, + { "PXE", "PIXELA CORPORATION" }, + { "USI", "Universal Scientific Industrial Co., Ltd." }, + { "JAC", "Astec Inc" }, + { "WAC", "Wacom Tech" }, + { "BUF", "Yasuhiko Shirai Melco Inc" }, + { "LSI", "Loughborough Sound Images" }, + { "AMA", "Asia Microelectronic Development Inc" }, + { "DJP", "Maygay Machines, Ltd" }, + { "CAN", "CORNEA" }, + { "UMM", "Universal Multimedia" }, + { "ECI", "Enciris Technologies" }, + { "DDT", "Datadesk Technologies Inc" }, + { "MLG", "Micrologica AG" }, + { "NCA", "Nixdorf Company" }, + { "ENS", "Ensoniq Corporation" }, + { "MOT", "Motorola UDS" }, + { "WCI", "Wisecom Inc" }, + { "MXT", "Maxtech Corporation" }, + { "EHJ", "Epson Research" }, + { "KUR", "Kurta Corporation" }, + { "DFT", "DEI Holdings dba Definitive Technology" }, + { "NAD", "NAD Electronics" }, + { "GMK", "GMK Electronic Design GmbH" }, + { "TAI", "Toshiba America Info Systems Inc" }, + { "SNP", "Siemens Nixdorf Info Systems" }, + { "KFE", "Komatsu Forest" }, + { "PPD", "MEPhI" }, + { "UMG", "Umezawa Giken Co.,Ltd" }, + { "PMC", "PMC Consumer Electronics Ltd" }, + { "KIS", "KiSS Technology A/S" }, + { "ABV", "Advanced Research Technology" }, + { "ISA", "Symbol Technologies" }, + { "GMN", "GEMINI 2000 Ltd" }, + { "VSI", "VideoServer" }, + { "DTO", "Deutsche Thomson OHG" }, + { "OCN", "Olfan" }, + { "LTK", "Lucidity Technology Company Ltd" }, + { "CLX", "CardLogix" }, + { "TPT", "Thruput Ltd" }, + { "IXD", "Intertex Data AB" }, + { "ICX", "ICCC A/S" }, + { "REF", "Reflectivity, Inc." }, + { "CDK", "Cray Communications" }, + { "PNX", "Phoenix Technologies, Ltd." }, + { "MCT", "Microtec" }, + { "ESD", "Ensemble Designs, Inc" }, + { "CTS", "Comtec Systems Co., Ltd." }, + { "ADB", "Aldebbaron" }, + { "AML", "Anderson Multimedia Communications (HK) Limited" }, + { "FIN", "Finecom Co., Ltd." }, + { "NCC", "NCR Corporation" }, + { "ONS", "On Systems Inc" }, + { "CGA", "Chunghwa Picture Tubes, LTD" }, + { "NTC", "NeoTech S.R.L" }, + { "AMD", "Amdek Corporation" }, + { "WVV", "WolfVision GmbH" }, + { "PHO", "Photonics Systems Inc." }, + { "AVX", "AVerMedia Technologies, Inc." }, + { "SJE", "Sejin Electron Inc" }, + { "BCM", "Broadcom" }, + { "RLN", "RadioLAN Inc" }, + { "CAM", "Cambridge Audio" }, + { "TCS", "Tatung Company of America Inc" }, + { "RIO", "Rios Systems Company Ltd" }, + { "SWT", "Software Technologies Group,Inc." }, + { "BSL", "Biomedical Systems Laboratory" }, + { "DCV", "Datatronics Technology Inc" }, + { "JPC", "JPC Technology Limited" }, + { "ICC", "BICC Data Networks Ltd" }, + { "CEI", "Crestron Electronics, Inc." }, + { "NUI", "NU Inc." }, + { "MAE", "Maestro Pty Ltd" }, + { "AYR", "Airlib, Inc" }, + { "TPS", "Teleprocessing Systeme GmbH" }, + { "SMK", "SMK CORPORATION" }, + { "IAT", "IAT Germany GmbH" }, + { "BNO", "Bang & Olufsen" }, + { "KRY", "Kroy LLC" }, + { "OLT", "Olitec S.A." }, + { "ABC", "AboCom System Inc" }, + { "FXX", "Fuji Xerox" }, + { "ANI", "Anigma Inc" }, + { "OEI", "Optum Engineering Inc." }, + { "TPE", "Technology Power Enterprises Inc" }, + { "RDI", "Rainbow Displays, Inc." }, + { "KDK", "Kodiak Tech" }, + { "LHT", "Lighthouse Technologies Limited" }, + { "BEK", "Beko Elektronik A.S." }, + { "LND", "Land Computer Company Ltd" }, + { "CDC", "Core Dynamics Corporation" }, + { "FHL", "FHLP" }, + { "UNP", "Unitop" }, + { "MSR", "MASPRO DENKOH Corp." }, + { "MKC", "Media Tek Inc." }, + { "BCD", "Barco GmbH" }, + { "PQI", "Pixel Qi" }, + { "ALD", "In4S Inc" }, + { "HTC", "Hitachi Ltd" }, + { "OCD", "Macraigor Systems Inc" }, + { "PHY", "Phylon Communications" }, + { "MSF", "M-Systems Flash Disk Pioneers" }, + { "ETK", "eTEK Labs Inc." }, + { "DVS", "Digital Video System" }, + { "ACU", "Acculogic" }, + { "YOW", "American Biometric Company" }, + { "MGE", "Schneider Electric S.A." }, + { "AKP", "Atom Komplex Prylad" }, + { "PGI", "PACSGEAR, Inc." }, + { "III", "Intelligent Instrumentation" }, + { "BML", "BIOMED Lab" }, + { "KMC", "Mitsumi Company Ltd" }, + { "RSQ", "R Squared" }, + { "SBC", "Shanghai Bell Telephone Equip Mfg Co" }, + { "FPX", "Cirel Systemes" }, + { "IDN", "Idneo Technologies" }, + { "BNE", "Bull AB" }, +}; + +QT_END_NAMESPACE + +#endif // QEDIDVENDORTABLE_P_H diff --git a/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp b/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp index dc4785071f..06f0aa6747 100644 --- a/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp +++ b/src/platformsupport/eventdispatchers/qeventdispatcher_glib.cpp @@ -48,78 +48,26 @@ QT_BEGIN_NAMESPACE -struct GUserEventSource -{ - GSource source; - QPAEventDispatcherGlib *q; -}; - -static gboolean userEventSourcePrepare(GSource *source, gint *timeout) -{ - Q_UNUSED(timeout) - GUserEventSource *userEventSource = reinterpret_cast<GUserEventSource *>(source); - QPAEventDispatcherGlib *dispatcher = userEventSource->q; - if (dispatcher->m_flags & QEventLoop::ExcludeUserInputEvents) - return QWindowSystemInterface::nonUserInputEventsQueued(); - else - return QWindowSystemInterface::windowSystemEventsQueued() > 0; -} - -static gboolean userEventSourceCheck(GSource *source) -{ - return userEventSourcePrepare(source, 0); -} - -static gboolean userEventSourceDispatch(GSource *source, GSourceFunc, gpointer) -{ - GUserEventSource *userEventSource = reinterpret_cast<GUserEventSource *>(source); - QPAEventDispatcherGlib *dispatcher = userEventSource->q; - QWindowSystemInterface::sendWindowSystemEvents(dispatcher->m_flags); - return true; -} - -static GSourceFuncs userEventSourceFuncs = { - userEventSourcePrepare, - userEventSourceCheck, - userEventSourceDispatch, - NULL, - NULL, - NULL -}; - QPAEventDispatcherGlibPrivate::QPAEventDispatcherGlibPrivate(GMainContext *context) : QEventDispatcherGlibPrivate(context) { - Q_Q(QPAEventDispatcherGlib); - userEventSource = reinterpret_cast<GUserEventSource *>(g_source_new(&userEventSourceFuncs, - sizeof(GUserEventSource))); - userEventSource->q = q; - g_source_set_can_recurse(&userEventSource->source, true); - g_source_attach(&userEventSource->source, mainContext); } - QPAEventDispatcherGlib::QPAEventDispatcherGlib(QObject *parent) : QEventDispatcherGlib(*new QPAEventDispatcherGlibPrivate, parent) , m_flags(QEventLoop::AllEvents) { - Q_D(QPAEventDispatcherGlib); - d->userEventSource->q = this; } QPAEventDispatcherGlib::~QPAEventDispatcherGlib() { - Q_D(QPAEventDispatcherGlib); - - g_source_destroy(&d->userEventSource->source); - g_source_unref(&d->userEventSource->source); - d->userEventSource = 0; } bool QPAEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) { m_flags = flags; - return QEventDispatcherGlib::processEvents(m_flags); + const bool didSendEvents = QEventDispatcherGlib::processEvents(m_flags); + return QWindowSystemInterface::sendWindowSystemEvents(m_flags) || didSendEvents; } QT_END_NAMESPACE diff --git a/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h b/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h index 6d148753bf..bed2532856 100644 --- a/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h +++ b/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h @@ -71,14 +71,11 @@ public: QEventLoop::ProcessEventsFlags m_flags; }; -struct GUserEventSource; - class QPAEventDispatcherGlibPrivate : public QEventDispatcherGlibPrivate { Q_DECLARE_PUBLIC(QPAEventDispatcherGlib) public: QPAEventDispatcherGlibPrivate(GMainContext *context = 0); - GUserEventSource *userEventSource; }; diff --git a/src/platformsupport/fbconvenience/qfbwindow.cpp b/src/platformsupport/fbconvenience/qfbwindow.cpp index 7e016f2f49..36f92b8cea 100644 --- a/src/platformsupport/fbconvenience/qfbwindow.cpp +++ b/src/platformsupport/fbconvenience/qfbwindow.cpp @@ -106,7 +106,7 @@ void QFbWindow::setVisible(bool visible) } } -void QFbWindow::setWindowState(Qt::WindowState state) +void QFbWindow::setWindowState(Qt::WindowStates state) { QPlatformWindow::setWindowState(state); mWindowState = state; diff --git a/src/platformsupport/fbconvenience/qfbwindow_p.h b/src/platformsupport/fbconvenience/qfbwindow_p.h index c201302a50..20bac46c69 100644 --- a/src/platformsupport/fbconvenience/qfbwindow_p.h +++ b/src/platformsupport/fbconvenience/qfbwindow_p.h @@ -70,7 +70,7 @@ public: void setGeometry(const QRect &rect) Q_DECL_OVERRIDE; void setVisible(bool visible) Q_DECL_OVERRIDE; - void setWindowState(Qt::WindowState state) Q_DECL_OVERRIDE; + void setWindowState(Qt::WindowStates state) Q_DECL_OVERRIDE; void setWindowFlags(Qt::WindowFlags type) Q_DECL_OVERRIDE; Qt::WindowFlags windowFlags() const; @@ -93,7 +93,7 @@ protected: QFbBackingStore *mBackingStore; QRect mOldGeometry; Qt::WindowFlags mWindowFlags; - Qt::WindowState mWindowState; + Qt::WindowStates mWindowState; WId mWindowId; }; diff --git a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp index 85bedff5e6..73def00017 100644 --- a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp +++ b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp @@ -66,11 +66,7 @@ #include FT_TYPE1_TABLES_H #include FT_GLYPH_H #include FT_MODULE_H - -#if defined(FT_LCD_FILTER_H) #include FT_LCD_FILTER_H -#define QT_USE_FREETYPE_LCDFILTER -#endif #if defined(FT_CONFIG_OPTIONS_H) #include FT_CONFIG_OPTIONS_H @@ -125,12 +121,13 @@ class QtFreetypeData { public: QtFreetypeData() - : library(0) + : library(0), hasPatentFreeLcdRendering(false) { } ~QtFreetypeData(); FT_Library library; QHash<QFontEngine::FaceId, QFreetypeFace *> faces; + bool hasPatentFreeLcdRendering; }; QtFreetypeData::~QtFreetypeData() @@ -164,6 +161,11 @@ QtFreetypeData *qt_getFreetypeData() FT_Bool no_darkening = false; FT_Property_Set(freetypeData->library, "cff", "no-stem-darkening", &no_darkening); #endif + // FreeType has since 2.8.1 a patent free alternative to LCD-filtering. + FT_Int amajor, aminor = 0, apatch = 0; + FT_Library_Version(freetypeData->library, &amajor, &aminor, &apatch); + if (QT_VERSION_CHECK(amajor, aminor, apatch) >= QT_VERSION_CHECK(2, 8, 1)) + freetypeData->hasPatentFreeLcdRendering = true; } return freetypeData; } @@ -775,10 +777,7 @@ QFontEngineFT::QFontEngineFT(const QFontDef &fd) default_load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH; default_hint_style = ftInitialDefaultHintStyle; subpixelType = Subpixel_None; - lcdFilterType = 0; -#if defined(FT_LCD_FILTER_H) lcdFilterType = (int)((quintptr) FT_LCD_FILTER_DEFAULT); -#endif defaultFormat = Format_None; embeddedbitmap = false; const QByteArray env = qgetenv("QT_NO_FT_CACHE"); @@ -1165,14 +1164,14 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph, int glyph_buffer_size = 0; QScopedArrayPointer<uchar> glyph_buffer; -#if defined(QT_USE_FREETYPE_LCDFILTER) bool useFreetypeRenderGlyph = false; if (slot->format == FT_GLYPH_FORMAT_OUTLINE && (hsubpixel || vfactor != 1)) { err = FT_Library_SetLcdFilter(slot->library, (FT_LcdFilter)lcdFilterType); - if (err == FT_Err_Ok) + // We use FT_Render_Glyph if freetype has support for lcd-filtering + // or is version 2.8.1 or higher and can do without. + if (err == FT_Err_Ok || qt_getFreetypeData()->hasPatentFreeLcdRendering) useFreetypeRenderGlyph = true; } - if (useFreetypeRenderGlyph) { err = FT_Render_Glyph(slot, hsubpixel ? FT_RENDER_MODE_LCD : FT_RENDER_MODE_LCD_V); @@ -1193,9 +1192,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph, convertRGBToARGB(slot->bitmap.buffer, (uint *)glyph_buffer.data(), info.width, info.height, slot->bitmap.pitch, subpixelType != Subpixel_RGB, false); else if (vfactor != 1) convertRGBToARGB_V(slot->bitmap.buffer, (uint *)glyph_buffer.data(), info.width, info.height, slot->bitmap.pitch, subpixelType != Subpixel_VRGB, false); - } else -#endif - { + } else { int left = slot->metrics.horiBearingX; int right = slot->metrics.horiBearingX + slot->metrics.width; int top = slot->metrics.horiBearingY; @@ -1262,9 +1259,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph, Q_ASSERT(antialias); uchar *convoluted = new uchar[bitmap_buffer_size]; bool useLegacyLcdFilter = false; -#if defined(FC_LCD_FILTER) && defined(FT_LCD_FILTER_H) useLegacyLcdFilter = (lcdFilterType == FT_LCD_FILTER_LEGACY); -#endif uchar *buffer = bitmap.buffer; if (!useLegacyLcdFilter) { convoluteBitmap(bitmap.buffer, convoluted, bitmap.width, info.height, bitmap.pitch); diff --git a/src/platformsupport/fontdatabases/mac/coretext.pri b/src/platformsupport/fontdatabases/mac/coretext.pri index 2a9b32f65a..af75aa3281 100644 --- a/src/platformsupport/fontdatabases/mac/coretext.pri +++ b/src/platformsupport/fontdatabases/mac/coretext.pri @@ -18,18 +18,4 @@ macos: \ else: \ LIBS_PRIVATE += -framework UIKit -# CoreText is documented to be available on watchOS, but the headers aren't present -# in the watchOS Simulator SDK like they are supposed to be. Work around the problem -# by adding the device SDK's headers to the search path as a fallback. -# rdar://25314492, rdar://27844864 -watchos:simulator { - simulator_system_frameworks = $$xcodeSDKInfo(Path, $${simulator.sdk})/System/Library/Frameworks - device_system_frameworks = $$xcodeSDKInfo(Path, $${device.sdk})/System/Library/Frameworks - for (arch, QMAKE_APPLE_SIMULATOR_ARCHS) { - QMAKE_CXXFLAGS += \ - -Xarch_$${arch} \ - -F$$simulator_system_frameworks \ - -Xarch_$${arch} \ - -F$$device_system_frameworks - } -} +CONFIG += watchos_coretext diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h index 9612b909f1..2b4c4e3ceb 100644 --- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h @@ -57,12 +57,8 @@ #include <qpa/qplatformtheme.h> #include <private/qcore_mac_p.h> -#ifdef Q_OS_OSX -#include <ApplicationServices/ApplicationServices.h> -#else -#include <CoreText/CoreText.h> -#include <CoreGraphics/CoreGraphics.h> -#endif +Q_FORWARD_DECLARE_CF_TYPE(CTFontDescriptor); +Q_FORWARD_DECLARE_CF_TYPE(CTFont); Q_DECLARE_METATYPE(QCFType<CGFontRef>); Q_DECLARE_METATYPE(QCFType<CFURLRef>); diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp index 1389b497d5..a337332b53 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp @@ -132,20 +132,6 @@ bool QWindowsFontEngine::hasCMapTable() const return GetFontData(hdc, MAKE_LITTLE_ENDIAN_TAG('c', 'm', 'a', 'p'), 0, 0, 0) != GDI_ERROR; } -bool QWindowsFontEngine::hasGlyfTable() const -{ - HDC hdc = m_fontEngineData->hdc; - SelectObject(hdc, hfont); - return GetFontData(hdc, MAKE_LITTLE_ENDIAN_TAG('g', 'l', 'y', 'f'), 0, 0, 0) != GDI_ERROR; -} - -bool QWindowsFontEngine::hasEbdtTable() const -{ - HDC hdc = m_fontEngineData->hdc; - SelectObject(hdc, hfont); - return GetFontData(hdc, MAKE_LITTLE_ENDIAN_TAG('E', 'B', 'D', 'T'), 0, 0, 0) != GDI_ERROR; -} - static inline QString stringFromOutLineTextMetric(const OUTLINETEXTMETRIC *otm, PSTR offset) { const uchar *p = reinterpret_cast<const uchar *>(otm) + quintptr(offset); @@ -276,7 +262,7 @@ QWindowsFontEngine::QWindowsFontEngine(const QString &name, userData.insert(QStringLiteral("trueType"), QVariant(bool(ttf))); setUserData(userData); - hasUnreliableOutline = hasGlyfTable() && hasEbdtTable(); + hasUnreliableOutline = (tm.tmPitchAndFamily & (TMPF_TRUETYPE | TMPF_VECTOR)) == 0; } QWindowsFontEngine::~QWindowsFontEngine() diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h index 5119adc0eb..76b45d7a7b 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h @@ -138,8 +138,6 @@ private: QImage::Format mask_format); bool hasCFFTable() const; bool hasCMapTable() const; - bool hasGlyfTable() const; - bool hasEbdtTable() const; const QSharedPointer<QWindowsFontEngineData> m_fontEngineData; diff --git a/src/platformsupport/glxconvenience/qglxconvenience.cpp b/src/platformsupport/glxconvenience/qglxconvenience.cpp index 74b7c63473..8d2e58b57b 100644 --- a/src/platformsupport/glxconvenience/qglxconvenience.cpp +++ b/src/platformsupport/glxconvenience/qglxconvenience.cpp @@ -72,7 +72,11 @@ enum { #undef FontChange #endif -QVector<int> qglx_buildSpec(const QSurfaceFormat &format, int drawableBit) +#ifndef GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 +#endif + +QVector<int> qglx_buildSpec(const QSurfaceFormat &format, int drawableBit, int flags) { QVector<int> spec; @@ -116,6 +120,10 @@ QVector<int> qglx_buildSpec(const QSurfaceFormat &format, int drawableBit) << GLX_SAMPLES_ARB << format.samples(); + if ((flags & QGLX_SUPPORTS_SRGB) && format.colorSpace() == QSurfaceFormat::sRGBColorSpace) + spec << GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB + << True; + spec << GLX_DRAWABLE_TYPE << drawableBit @@ -176,14 +184,14 @@ template <class T> using QXlibArrayPointer = QScopedArrayPointer<T, QXlibScopedPointerDeleter<T>>; } -GLXFBConfig qglx_findConfig(Display *display, int screen , QSurfaceFormat format, bool highestPixelFormat, int drawableBit) +GLXFBConfig qglx_findConfig(Display *display, int screen , QSurfaceFormat format, bool highestPixelFormat, int drawableBit, int flags) { QXcbSoftwareOpenGLEnforcer softwareOpenGLEnforcer; GLXFBConfig config = 0; do { - const QVector<int> spec = qglx_buildSpec(format, drawableBit); + const QVector<int> spec = qglx_buildSpec(format, drawableBit, flags); int confcount = 0; QXlibArrayPointer<GLXFBConfig> configs(glXChooseFBConfig(display, screen, spec.constData(), &confcount)); @@ -202,6 +210,13 @@ GLXFBConfig qglx_findConfig(Display *display, int screen , QSurfaceFormat format for (int i = 0; i < confcount; i++) { GLXFBConfig candidate = configs[i]; + if ((flags & QGLX_SUPPORTS_SRGB) && format.colorSpace() == QSurfaceFormat::sRGBColorSpace) { + int srgbCapable = 0; + glXGetFBConfigAttrib(display, candidate, GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB, &srgbCapable); + if (!srgbCapable) + continue; + } + QXlibPointer<XVisualInfo> visual(glXGetVisualFromFBConfig(display, candidate)); if (visual.isNull()) continue; @@ -227,28 +242,28 @@ GLXFBConfig qglx_findConfig(Display *display, int screen , QSurfaceFormat format return config; } -XVisualInfo *qglx_findVisualInfo(Display *display, int screen, QSurfaceFormat *format, int drawableBit) +XVisualInfo *qglx_findVisualInfo(Display *display, int screen, QSurfaceFormat *format, int drawableBit, int flags) { Q_ASSERT(format); XVisualInfo *visualInfo = 0; - GLXFBConfig config = qglx_findConfig(display, screen, *format, false, drawableBit); + GLXFBConfig config = qglx_findConfig(display, screen, *format, false, drawableBit, flags); if (config) visualInfo = glXGetVisualFromFBConfig(display, config); if (visualInfo) { - qglx_surfaceFormatFromGLXFBConfig(format, display, config); + qglx_surfaceFormatFromGLXFBConfig(format, display, config, flags); return visualInfo; } // attempt to fall back to glXChooseVisual do { - QVector<int> attribs = qglx_buildSpec(*format, drawableBit); + QVector<int> attribs = qglx_buildSpec(*format, drawableBit, flags); visualInfo = glXChooseVisual(display, screen, attribs.data()); if (visualInfo) { - qglx_surfaceFormatFromVisualInfo(format, display, visualInfo); + qglx_surfaceFormatFromVisualInfo(format, display, visualInfo, flags); return visualInfo; } } while (qglx_reduceFormat(format)); @@ -256,7 +271,7 @@ XVisualInfo *qglx_findVisualInfo(Display *display, int screen, QSurfaceFormat *f return visualInfo; } -void qglx_surfaceFormatFromGLXFBConfig(QSurfaceFormat *format, Display *display, GLXFBConfig config) +void qglx_surfaceFormatFromGLXFBConfig(QSurfaceFormat *format, Display *display, GLXFBConfig config, int flags) { int redSize = 0; int greenSize = 0; @@ -267,6 +282,7 @@ void qglx_surfaceFormatFromGLXFBConfig(QSurfaceFormat *format, Display *display, int sampleBuffers = 0; int sampleCount = 0; int stereo = 0; + int srgbCapable = 0; glXGetFBConfigAttrib(display, config, GLX_RED_SIZE, &redSize); glXGetFBConfigAttrib(display, config, GLX_GREEN_SIZE, &greenSize); @@ -276,6 +292,8 @@ void qglx_surfaceFormatFromGLXFBConfig(QSurfaceFormat *format, Display *display, glXGetFBConfigAttrib(display, config, GLX_STENCIL_SIZE, &stencilSize); glXGetFBConfigAttrib(display, config, GLX_SAMPLES_ARB, &sampleBuffers); glXGetFBConfigAttrib(display, config, GLX_STEREO, &stereo); + if (flags & QGLX_SUPPORTS_SRGB) + glXGetFBConfigAttrib(display, config, GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB, &srgbCapable); format->setRedBufferSize(redSize); format->setGreenBufferSize(greenSize); @@ -287,11 +305,12 @@ void qglx_surfaceFormatFromGLXFBConfig(QSurfaceFormat *format, Display *display, glXGetFBConfigAttrib(display, config, GLX_SAMPLES_ARB, &sampleCount); format->setSamples(sampleCount); } + format->setColorSpace(srgbCapable ? QSurfaceFormat::sRGBColorSpace : QSurfaceFormat::DefaultColorSpace); format->setStereo(stereo); } -void qglx_surfaceFormatFromVisualInfo(QSurfaceFormat *format, Display *display, XVisualInfo *visualInfo) +void qglx_surfaceFormatFromVisualInfo(QSurfaceFormat *format, Display *display, XVisualInfo *visualInfo, int flags) { int redSize = 0; int greenSize = 0; @@ -302,6 +321,7 @@ void qglx_surfaceFormatFromVisualInfo(QSurfaceFormat *format, Display *display, int sampleBuffers = 0; int sampleCount = 0; int stereo = 0; + int srgbCapable = 0; glXGetConfig(display, visualInfo, GLX_RED_SIZE, &redSize); glXGetConfig(display, visualInfo, GLX_GREEN_SIZE, &greenSize); @@ -311,6 +331,8 @@ void qglx_surfaceFormatFromVisualInfo(QSurfaceFormat *format, Display *display, glXGetConfig(display, visualInfo, GLX_STENCIL_SIZE, &stencilSize); glXGetConfig(display, visualInfo, GLX_SAMPLES_ARB, &sampleBuffers); glXGetConfig(display, visualInfo, GLX_STEREO, &stereo); + if (flags & QGLX_SUPPORTS_SRGB) + glXGetConfig(display, visualInfo, GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB, &srgbCapable); format->setRedBufferSize(redSize); format->setGreenBufferSize(greenSize); @@ -322,6 +344,7 @@ void qglx_surfaceFormatFromVisualInfo(QSurfaceFormat *format, Display *display, glXGetConfig(display, visualInfo, GLX_SAMPLES_ARB, &sampleCount); format->setSamples(sampleCount); } + format->setColorSpace(srgbCapable ? QSurfaceFormat::sRGBColorSpace : QSurfaceFormat::DefaultColorSpace); format->setStereo(stereo); } @@ -390,5 +413,10 @@ bool qglx_reduceFormat(QSurfaceFormat *format) return true; } + if (format->colorSpace() == QSurfaceFormat::sRGBColorSpace) { + format->setColorSpace(QSurfaceFormat::DefaultColorSpace); + return true; + } + return false; } diff --git a/src/platformsupport/glxconvenience/qglxconvenience_p.h b/src/platformsupport/glxconvenience/qglxconvenience_p.h index d422668584..f9647bfd9a 100644 --- a/src/platformsupport/glxconvenience/qglxconvenience_p.h +++ b/src/platformsupport/glxconvenience/qglxconvenience_p.h @@ -57,11 +57,16 @@ #include <X11/Xlib.h> #include <GL/glx.h> -QVector<int> qglx_buildSpec(const QSurfaceFormat &format, int drawableBit = GLX_WINDOW_BIT); -XVisualInfo *qglx_findVisualInfo(Display *display, int screen, QSurfaceFormat *format, int drawableBit = GLX_WINDOW_BIT); -GLXFBConfig qglx_findConfig(Display *display, int screen, QSurfaceFormat format, bool highestPixelFormat = false, int drawableBit = GLX_WINDOW_BIT); -void qglx_surfaceFormatFromGLXFBConfig(QSurfaceFormat *format, Display *display, GLXFBConfig config); -void qglx_surfaceFormatFromVisualInfo(QSurfaceFormat *format, Display *display, XVisualInfo *visualInfo); +enum QGlxFlags +{ + QGLX_SUPPORTS_SRGB = 0x01 +}; + +QVector<int> qglx_buildSpec(const QSurfaceFormat &format, int drawableBit = GLX_WINDOW_BIT, int flags = 0); +XVisualInfo *qglx_findVisualInfo(Display *display, int screen, QSurfaceFormat *format, int drawableBit = GLX_WINDOW_BIT, int flags = 0); +GLXFBConfig qglx_findConfig(Display *display, int screen, QSurfaceFormat format, bool highestPixelFormat = false, int drawableBit = GLX_WINDOW_BIT, int flags = 0); +void qglx_surfaceFormatFromGLXFBConfig(QSurfaceFormat *format, Display *display, GLXFBConfig config, int flags = 0); +void qglx_surfaceFormatFromVisualInfo(QSurfaceFormat *format, Display *display, XVisualInfo *visualInfo, int flags = 0); bool qglx_reduceFormat(QSurfaceFormat *format); #endif // QGLXCONVENIENCE_H diff --git a/src/platformsupport/graphics/qrasterbackingstore.cpp b/src/platformsupport/graphics/qrasterbackingstore.cpp index b8d393844c..a3ffe11d19 100644 --- a/src/platformsupport/graphics/qrasterbackingstore.cpp +++ b/src/platformsupport/graphics/qrasterbackingstore.cpp @@ -59,20 +59,7 @@ QRasterBackingStore::~QRasterBackingStore() void QRasterBackingStore::resize(const QSize &size, const QRegion &staticContents) { Q_UNUSED(staticContents); - - // We can't guarantee that we have a platform-window at this point, so we have - // to pull out the DPR using QWindow and its QScreen fallback, and then remove - // the Qt scaling factor. - qreal nativeWindowDevicePixelRatio = window()->devicePixelRatio() / QHighDpiScaling::factor(window()); - QSize effectiveBufferSize = size * nativeWindowDevicePixelRatio; - - if (m_image.size() == effectiveBufferSize) - return; - - m_image = QImage(effectiveBufferSize, format()); - m_image.setDevicePixelRatio(nativeWindowDevicePixelRatio); - if (m_image.format() == QImage::Format_ARGB32_Premultiplied) - m_image.fill(Qt::transparent); + m_requestedSize = size; } QImage::Format QRasterBackingStore::format() const @@ -111,11 +98,13 @@ bool QRasterBackingStore::scroll(const QRegion ®ion, int dx, int dy) void QRasterBackingStore::beginPaint(const QRegion ®ion) { - // Keep backing store device pixel ratio in sync with window qreal nativeWindowDevicePixelRatio = window()->handle()->devicePixelRatio(); - if (m_image.devicePixelRatio() != nativeWindowDevicePixelRatio) { - const QSize nativeSize = QHighDpi::toNativePixels(backingStore()->size(), window()); - resize(nativeSize, backingStore()->staticContents()); + QSize effectiveBufferSize = m_requestedSize * nativeWindowDevicePixelRatio; + if (m_image.devicePixelRatio() != nativeWindowDevicePixelRatio || m_image.size() != effectiveBufferSize) { + m_image = QImage(effectiveBufferSize, format()); + m_image.setDevicePixelRatio(nativeWindowDevicePixelRatio); + if (m_image.format() == QImage::Format_ARGB32_Premultiplied) + m_image.fill(Qt::transparent); } if (!m_image.hasAlphaChannel()) @@ -123,9 +112,8 @@ void QRasterBackingStore::beginPaint(const QRegion ®ion) QPainter painter(&m_image); painter.setCompositionMode(QPainter::CompositionMode_Source); - const QColor blank = Qt::transparent; for (const QRect &rect : region) - painter.fillRect(rect, blank); + painter.fillRect(rect, Qt::transparent); } QT_END_NAMESPACE diff --git a/src/platformsupport/graphics/qrasterbackingstore_p.h b/src/platformsupport/graphics/qrasterbackingstore_p.h index 55976d2ceb..2764fd6432 100644 --- a/src/platformsupport/graphics/qrasterbackingstore_p.h +++ b/src/platformsupport/graphics/qrasterbackingstore_p.h @@ -73,6 +73,7 @@ protected: virtual QImage::Format format() const; QImage m_image; + QSize m_requestedSize; }; QT_END_NAMESPACE diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp index 5c87cb7c9c..960f1d2f12 100644 --- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp +++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp @@ -87,7 +87,7 @@ QEvdevKeyboardHandler::QEvdevKeyboardHandler(const QString &device, QFdContainer // socket notifier for events on the keyboard device m_notify = new QSocketNotifier(m_fd.get(), QSocketNotifier::Read, this); - connect(m_notify, SIGNAL(activated(int)), this, SLOT(readKeycode())); + connect(m_notify, &QSocketNotifier::activated, this, &QEvdevKeyboardHandler::readKeycode); } QEvdevKeyboardHandler::~QEvdevKeyboardHandler() diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler_p.h b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler_p.h index 1ec4915855..7c64c4febb 100644 --- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler_p.h +++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler_p.h @@ -145,7 +145,6 @@ public: class QEvdevKeyboardHandler : public QObject { - Q_OBJECT public: QEvdevKeyboardHandler(const QString &device, QFdContainer &fd, bool disableZap, bool enableCompose, const QString &keymapFile); ~QEvdevKeyboardHandler(); @@ -190,7 +189,6 @@ public: bool loadKeymap(const QString &file); void unloadKeymap(); -private slots: void readKeycode(); KeycodeAction processKeycode(quint16 keycode, bool pressed, bool autorepeat); diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp index 94ebae8f42..85e6a80879 100644 --- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp +++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp @@ -88,8 +88,10 @@ QEvdevKeyboardManager::QEvdevKeyboardManager(const QString &key, const QString & for (const QString &device : devices) addKeyboard(device); - connect(m_deviceDiscovery, SIGNAL(deviceDetected(QString)), this, SLOT(addKeyboard(QString))); - connect(m_deviceDiscovery, SIGNAL(deviceRemoved(QString)), this, SLOT(removeKeyboard(QString))); + connect(m_deviceDiscovery, &QDeviceDiscovery::deviceDetected, + this, &QEvdevKeyboardManager::addKeyboard); + connect(m_deviceDiscovery, &QDeviceDiscovery::deviceRemoved, + this, &QEvdevKeyboardManager::removeKeyboard); } } } diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h index d2e34fead3..27ea7e468e 100644 --- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h +++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h @@ -63,14 +63,12 @@ QT_BEGIN_NAMESPACE class QEvdevKeyboardManager : public QObject { - Q_OBJECT public: QEvdevKeyboardManager(const QString &key, const QString &specification, QObject *parent = 0); ~QEvdevKeyboardManager(); void loadKeymap(const QString &file); -private slots: void addKeyboard(const QString &deviceNode = QString()); void removeKeyboard(const QString &deviceNode); diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp index 9b4bcf1575..8614de066f 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp +++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp @@ -116,7 +116,8 @@ QEvdevMouseHandler::QEvdevMouseHandler(const QString &device, int fd, bool abs, // socket notifier for events on the mouse device m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); - connect(m_notify, SIGNAL(activated(int)), this, SLOT(readMouseData())); + connect(m_notify, &QSocketNotifier::activated, + this, &QEvdevMouseHandler::readMouseData); } QEvdevMouseHandler::~QEvdevMouseHandler() @@ -236,6 +237,7 @@ void QEvdevMouseHandler::readMouseData() posChanged = true; } } else if (data->type == EV_REL) { + QPoint delta; if (data->code == REL_X) { m_x += data->value; posChanged = true; @@ -244,12 +246,18 @@ void QEvdevMouseHandler::readMouseData() posChanged = true; } else if (data->code == ABS_WHEEL) { // vertical scroll // data->value: 1 == up, -1 == down - const int delta = 120 * data->value; - emit handleWheelEvent(delta, Qt::Vertical); + if (data->value == 1) + delta.setY(120); + else + delta.setY(-120); + emit handleWheelEvent(delta); } else if (data->code == ABS_THROTTLE) { // horizontal scroll // data->value: 1 == right, -1 == left - const int delta = 120 * -data->value; - emit handleWheelEvent(delta, Qt::Horizontal); + if (data->value == 1) + delta.setX(-120); + else + delta.setX(120); + emit handleWheelEvent(delta); } } else if (data->type == EV_KEY && data->code == BTN_TOUCH) { // We care about touchpads only, not touchscreens -> don't map to button press. diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h b/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h index eb34334b12..6cad4b9173 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h +++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h @@ -53,6 +53,7 @@ #include <QObject> #include <QString> +#include <QPoint> QT_BEGIN_NAMESPACE @@ -65,12 +66,11 @@ public: static QEvdevMouseHandler *create(const QString &device, const QString &specification); ~QEvdevMouseHandler(); + void readMouseData(); + signals: void handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons); - void handleWheelEvent(int delta, Qt::Orientation orientation); - -private slots: - void readMouseData(); + void handleWheelEvent(QPoint delta); private: QEvdevMouseHandler(const QString &device, int fd, bool abs, bool compression, int jitterLimit); diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp index b2f3fe5787..ba94bcd460 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp +++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp @@ -94,13 +94,19 @@ QEvdevMouseManager::QEvdevMouseManager(const QString &key, const QString &specif for (const QString &device : devices) addMouse(device); - connect(m_deviceDiscovery, SIGNAL(deviceDetected(QString)), this, SLOT(addMouse(QString))); - connect(m_deviceDiscovery, SIGNAL(deviceRemoved(QString)), this, SLOT(removeMouse(QString))); + connect(m_deviceDiscovery, &QDeviceDiscovery::deviceDetected, + this, &QEvdevMouseManager::addMouse); + connect(m_deviceDiscovery, &QDeviceDiscovery::deviceRemoved, + this, &QEvdevMouseManager::removeMouse); } } - connect(QGuiApplicationPrivate::inputDeviceManager(), SIGNAL(cursorPositionChangeRequested(QPoint)), - this, SLOT(handleCursorPositionChange(QPoint))); + QInputDeviceManager *manager = QGuiApplicationPrivate::inputDeviceManager(); + connect(manager, &QInputDeviceManager::cursorPositionChangeRequested, [=](const QPoint &pos) { + m_x = pos.x(); + m_y = pos.y(); + clampPosition(); + }); } QEvdevMouseManager::~QEvdevMouseManager() @@ -144,20 +150,21 @@ void QEvdevMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseButto QWindowSystemInterface::handleMouseEvent(0, pos, pos, buttons, QGuiApplication::keyboardModifiers()); } -void QEvdevMouseManager::handleWheelEvent(int delta, Qt::Orientation orientation) +void QEvdevMouseManager::handleWheelEvent(QPoint delta) { QPoint pos(m_x + m_xoffset, m_y + m_yoffset); - QWindowSystemInterface::handleWheelEvent(0, pos, pos, delta, orientation, QGuiApplication::keyboardModifiers()); + QWindowSystemInterface::handleWheelEvent(0, pos, pos, QPoint(), delta, QGuiApplication::keyboardModifiers()); } void QEvdevMouseManager::addMouse(const QString &deviceNode) { qCDebug(qLcEvdevMouse) << "Adding mouse at" << deviceNode; - QEvdevMouseHandler *handler; - handler = QEvdevMouseHandler::create(deviceNode, m_spec); + QEvdevMouseHandler *handler = QEvdevMouseHandler::create(deviceNode, m_spec); if (handler) { - connect(handler, SIGNAL(handleMouseEvent(int,int,bool,Qt::MouseButtons)), this, SLOT(handleMouseEvent(int,int,bool,Qt::MouseButtons))); - connect(handler, SIGNAL(handleWheelEvent(int,Qt::Orientation)), this, SLOT(handleWheelEvent(int,Qt::Orientation))); + connect(handler, &QEvdevMouseHandler::handleMouseEvent, + this, &QEvdevMouseManager::handleMouseEvent); + connect(handler, &QEvdevMouseHandler::handleWheelEvent, + this, &QEvdevMouseManager::handleWheelEvent); m_mice.insert(deviceNode, handler); QInputDeviceManagerPrivate::get(QGuiApplicationPrivate::inputDeviceManager())->setDeviceCount( QInputDeviceManager::DeviceTypePointer, m_mice.count()); @@ -178,11 +185,4 @@ void QEvdevMouseManager::removeMouse(const QString &deviceNode) } } -void QEvdevMouseManager::handleCursorPositionChange(const QPoint &pos) -{ - m_x = pos.x(); - m_y = pos.y(); - clampPosition(); -} - QT_END_NAMESPACE diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h b/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h index 08b5409d31..10703655b3 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h +++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h @@ -56,6 +56,7 @@ #include <QObject> #include <QHash> #include <QSocketNotifier> +#include <QPoint> QT_BEGIN_NAMESPACE @@ -63,19 +64,15 @@ class QDeviceDiscovery; class QEvdevMouseManager : public QObject { - Q_OBJECT public: QEvdevMouseManager(const QString &key, const QString &specification, QObject *parent = 0); ~QEvdevMouseManager(); -public slots: void handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons); - void handleWheelEvent(int delta, Qt::Orientation orientation); + void handleWheelEvent(QPoint delta); -private slots: void addMouse(const QString &deviceNode = QString()); void removeMouse(const QString &deviceNode); - void handleCursorPositionChange(const QPoint &pos); private: void clampPosition(); diff --git a/src/platformsupport/input/evdevtablet/qevdevtablethandler.cpp b/src/platformsupport/input/evdevtablet/qevdevtablethandler.cpp index cfc17a79c3..dbab2f6a24 100644 --- a/src/platformsupport/input/evdevtablet/qevdevtablethandler.cpp +++ b/src/platformsupport/input/evdevtablet/qevdevtablethandler.cpp @@ -149,9 +149,11 @@ void QEvdevTabletData::report() qreal pressure = pressureRange ? (state.p - minValues.p) / qreal(pressureRange) : qreal(1); if (state.down || state.lastReportDown) { - QWindowSystemInterface::handleTabletEvent(0, state.down, QPointF(), globalPos, + QWindowSystemInterface::handleTabletEvent(0, QPointF(), globalPos, QTabletEvent::Stylus, pointer, - pressure, 0, 0, 0, 0, 0, q->deviceId(), qGuiApp->keyboardModifiers()); + state.down ? Qt::LeftButton : Qt::NoButton, + pressure, 0, 0, 0, 0, 0, q->deviceId(), + qGuiApp->keyboardModifiers()); } if (state.lastReportTool && !state.tool) diff --git a/src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h b/src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h index 20dfda89f7..8d848d6ebb 100644 --- a/src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h +++ b/src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h @@ -63,15 +63,12 @@ class QEvdevTabletData; class QEvdevTabletHandler : public QObject { - Q_OBJECT - public: explicit QEvdevTabletHandler(const QString &device, const QString &spec = QString(), QObject *parent = 0); ~QEvdevTabletHandler(); qint64 deviceId() const; -private slots: void readData(); private: diff --git a/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp b/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp index 4b00424e92..90949408ac 100644 --- a/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp +++ b/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp @@ -88,8 +88,11 @@ QEvdevTabletManager::QEvdevTabletManager(const QString &key, const QString &spec const QStringList devices = m_deviceDiscovery->scanConnectedDevices(); for (const QString &device : devices) addDevice(device); - connect(m_deviceDiscovery, SIGNAL(deviceDetected(QString)), this, SLOT(addDevice(QString))); - connect(m_deviceDiscovery, SIGNAL(deviceRemoved(QString)), this, SLOT(removeDevice(QString))); + + connect(m_deviceDiscovery, &QDeviceDiscovery::deviceDetected, + this, &QEvdevTabletManager::addDevice); + connect(m_deviceDiscovery, &QDeviceDiscovery::deviceRemoved, + this, &QEvdevTabletManager::removeDevice); } } } diff --git a/src/platformsupport/input/evdevtablet/qevdevtabletmanager_p.h b/src/platformsupport/input/evdevtablet/qevdevtabletmanager_p.h index d166c06cf3..cde91c55aa 100644 --- a/src/platformsupport/input/evdevtablet/qevdevtabletmanager_p.h +++ b/src/platformsupport/input/evdevtablet/qevdevtabletmanager_p.h @@ -62,12 +62,10 @@ class QEvdevTabletHandlerThread; class QEvdevTabletManager : public QObject { - Q_OBJECT public: QEvdevTabletManager(const QString &key, const QString &spec, QObject *parent = 0); ~QEvdevTabletManager(); -private slots: void addDevice(const QString &deviceNode); void removeDevice(const QString &deviceNode); diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp index 5d839cced7..c7595cf2b3 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp +++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp @@ -231,7 +231,7 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &device, const if (m_fd >= 0) { m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); - connect(m_notify, SIGNAL(activated(int)), this, SLOT(readData())); + connect(m_notify, &QSocketNotifier::activated, this, &QEvdevTouchScreenHandler::readData); } else { qErrnoWarning(errno, "evdevtouch: Cannot open input device %s", qPrintable(device)); return; @@ -885,7 +885,7 @@ void QEvdevTouchScreenHandlerThread::filterAndSendTouchPoints() } QList<QWindowSystemInterface::TouchPoint> points = m_handler->d->m_touchPoints; - const QList<QWindowSystemInterface::TouchPoint> &lastPoints = m_handler->d->m_lastTouchPoints; + QList<QWindowSystemInterface::TouchPoint> lastPoints = m_handler->d->m_lastTouchPoints; m_handler->d->m_mutex.unlock(); diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h b/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h index d22aca3266..a0b689a89e 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h +++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h @@ -82,7 +82,6 @@ public: bool isFiltered() const; -private slots: void readData(); signals: @@ -116,7 +115,6 @@ public: bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE; -public slots: void scheduleTouchPointUpdate(); signals: diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp index ab71d08fb1..4cacbf03e5 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp +++ b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp @@ -88,8 +88,11 @@ QEvdevTouchManager::QEvdevTouchManager(const QString &key, const QString &specif const QStringList devices = m_deviceDiscovery->scanConnectedDevices(); for (const QString &device : devices) addDevice(device); - connect(m_deviceDiscovery, SIGNAL(deviceDetected(QString)), this, SLOT(addDevice(QString))); - connect(m_deviceDiscovery, SIGNAL(deviceRemoved(QString)), this, SLOT(removeDevice(QString))); + + connect(m_deviceDiscovery, &QDeviceDiscovery::deviceDetected, + this, &QEvdevTouchManager::addDevice); + connect(m_deviceDiscovery, &QDeviceDiscovery::deviceRemoved, + this, &QEvdevTouchManager::removeDevice); } } } diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchmanager_p.h b/src/platformsupport/input/evdevtouch/qevdevtouchmanager_p.h index 84e857ca57..e524c516f1 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchmanager_p.h +++ b/src/platformsupport/input/evdevtouch/qevdevtouchmanager_p.h @@ -62,12 +62,10 @@ class QEvdevTouchScreenHandlerThread; class QEvdevTouchManager : public QObject { - Q_OBJECT public: QEvdevTouchManager(const QString &key, const QString &spec, QObject *parent = 0); ~QEvdevTouchManager(); -private slots: void addDevice(const QString &deviceNode); void removeDevice(const QString &deviceNode); diff --git a/src/platformsupport/input/libinput/qlibinputhandler.cpp b/src/platformsupport/input/libinput/qlibinputhandler.cpp index 961eb3539f..733cf7d409 100644 --- a/src/platformsupport/input/libinput/qlibinputhandler.cpp +++ b/src/platformsupport/input/libinput/qlibinputhandler.cpp @@ -107,14 +107,17 @@ QLibInputHandler::QLibInputHandler(const QString &key, const QString &spec) m_liFd = libinput_get_fd(m_li); m_notifier.reset(new QSocketNotifier(m_liFd, QSocketNotifier::Read)); - connect(m_notifier.data(), SIGNAL(activated(int)), SLOT(onReadyRead())); + + connect(m_notifier.data(), &QSocketNotifier::activated, this, &QLibInputHandler::onReadyRead); m_pointer.reset(new QLibInputPointer); m_keyboard.reset(new QLibInputKeyboard); m_touch.reset(new QLibInputTouch); - connect(QGuiApplicationPrivate::inputDeviceManager(), SIGNAL(cursorPositionChangeRequested(QPoint)), - this, SLOT(onCursorPositionChangeRequested(QPoint))); + QInputDeviceManager *manager = QGuiApplicationPrivate::inputDeviceManager(); + connect(manager, &QInputDeviceManager::cursorPositionChangeRequested, [=](const QPoint &pos) { + m_pointer->setPos(pos); + }); // Process the initial burst of DEVICE_ADDED events. onReadyRead(); @@ -154,10 +157,6 @@ void QLibInputHandler::processEvent(libinput_event *ev) // This is not just for hotplugging, it is also called for each input // device libinput reads from on startup. Hence it is suitable for doing // touch device registration. - const char *sysname = libinput_device_get_sysname(dev); // node name without path - const char *name = libinput_device_get_name(dev); - emit deviceAdded(QString::fromUtf8(sysname), QString::fromUtf8(name)); - QInputDeviceManagerPrivate *inputManagerPriv = QInputDeviceManagerPrivate::get( QGuiApplicationPrivate::inputDeviceManager()); if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_TOUCH)) { @@ -180,10 +179,6 @@ void QLibInputHandler::processEvent(libinput_event *ev) } case LIBINPUT_EVENT_DEVICE_REMOVED: { - const char *sysname = libinput_device_get_sysname(dev); - const char *name = libinput_device_get_name(dev); - emit deviceRemoved(QString::fromUtf8(sysname), QString::fromUtf8(name)); - QInputDeviceManagerPrivate *inputManagerPriv = QInputDeviceManagerPrivate::get( QGuiApplicationPrivate::inputDeviceManager()); if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_TOUCH)) { @@ -236,9 +231,4 @@ void QLibInputHandler::processEvent(libinput_event *ev) } } -void QLibInputHandler::onCursorPositionChangeRequested(const QPoint &pos) -{ - m_pointer->setPos(pos); -} - QT_END_NAMESPACE diff --git a/src/platformsupport/input/libinput/qlibinputhandler_p.h b/src/platformsupport/input/libinput/qlibinputhandler_p.h index f3dcf0f0be..ac7a267a4d 100644 --- a/src/platformsupport/input/libinput/qlibinputhandler_p.h +++ b/src/platformsupport/input/libinput/qlibinputhandler_p.h @@ -68,19 +68,11 @@ class QLibInputTouch; class QLibInputHandler : public QObject { - Q_OBJECT - public: QLibInputHandler(const QString &key, const QString &spec); ~QLibInputHandler(); -signals: - void deviceAdded(const QString &sysname, const QString &name); - void deviceRemoved(const QString &sysname, const QString &name); - -private slots: void onReadyRead(); - void onCursorPositionChangeRequested(const QPoint &pos); private: void processEvent(libinput_event *ev); diff --git a/src/platformsupport/input/libinput/qlibinputkeyboard_p.h b/src/platformsupport/input/libinput/qlibinputkeyboard_p.h index 12a3eb06eb..b7ee8a363f 100644 --- a/src/platformsupport/input/libinput/qlibinputkeyboard_p.h +++ b/src/platformsupport/input/libinput/qlibinputkeyboard_p.h @@ -64,8 +64,6 @@ QT_BEGIN_NAMESPACE class QLibInputKeyboard : public QObject { - Q_OBJECT - public: QLibInputKeyboard(); ~QLibInputKeyboard(); @@ -73,7 +71,6 @@ public: void processKey(libinput_event_keyboard *e); #ifndef QT_NO_XKBCOMMON_EVDEV -private slots: void handleRepeat(); private: diff --git a/src/platformsupport/input/libinput/qlibinputpointer.cpp b/src/platformsupport/input/libinput/qlibinputpointer.cpp index bdeac8db7e..6879d0cd83 100644 --- a/src/platformsupport/input/libinput/qlibinputpointer.cpp +++ b/src/platformsupport/input/libinput/qlibinputpointer.cpp @@ -96,21 +96,28 @@ void QLibInputPointer::processMotion(libinput_event_pointer *e) void QLibInputPointer::processAxis(libinput_event_pointer *e) { + double value; // default axis value is 15 degrees per wheel click + QPoint angleDelta; #if !QT_CONFIG(libinput_axis_api) - const double v = libinput_event_pointer_get_axis_value(e) * 120; - const Qt::Orientation ori = libinput_event_pointer_get_axis(e) == LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL - ? Qt::Vertical : Qt::Horizontal; - QWindowSystemInterface::handleWheelEvent(Q_NULLPTR, m_pos, m_pos, qRound(-v), ori, QGuiApplication::keyboardModifiers()); + value = libinput_event_pointer_get_axis_value(e); + if (libinput_event_pointer_get_axis(e) == LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL) + angleDelta.setY(qRound(value)); + else + angleDelta.setX(qRound(value)); #else if (libinput_event_pointer_has_axis(e, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL)) { - const double v = libinput_event_pointer_get_axis_value(e, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL) * 120; - QWindowSystemInterface::handleWheelEvent(Q_NULLPTR, m_pos, m_pos, qRound(-v), Qt::Vertical, QGuiApplication::keyboardModifiers()); + value = libinput_event_pointer_get_axis_value(e, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL); + angleDelta.setY(qRound(value)); } if (libinput_event_pointer_has_axis(e, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL)) { - const double v = libinput_event_pointer_get_axis_value(e, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL) * 120; - QWindowSystemInterface::handleWheelEvent(Q_NULLPTR, m_pos, m_pos, qRound(-v), Qt::Horizontal, QGuiApplication::keyboardModifiers()); + value = libinput_event_pointer_get_axis_value(e, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL); + angleDelta.setX(qRound(value)); } #endif + const int factor = 8; + angleDelta *= -factor; + Qt::KeyboardModifiers mods = QGuiApplication::keyboardModifiers(); + QWindowSystemInterface::handleWheelEvent(nullptr, m_pos, m_pos, QPoint(), angleDelta, mods); } void QLibInputPointer::setPos(const QPoint &pos) diff --git a/src/platformsupport/kmsconvenience/qkmsdevice.cpp b/src/platformsupport/kmsconvenience/qkmsdevice.cpp index a8eefe65ed..a25a1e582f 100644 --- a/src/platformsupport/kmsconvenience/qkmsdevice.cpp +++ b/src/platformsupport/kmsconvenience/qkmsdevice.cpp @@ -330,11 +330,13 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources, crtc_id, physSize, selected_mode, + selected_mode, false, drmModeGetCrtc(m_dri_fd, crtc_id), modes, connector->subpixel, connectorProperty(connector, QByteArrayLiteral("DPMS")), + connectorPropertyBlob(connector, QByteArrayLiteral("EDID")), false, 0, false @@ -382,6 +384,23 @@ drmModePropertyPtr QKmsDevice::connectorProperty(drmModeConnectorPtr connector, return Q_NULLPTR; } +drmModePropertyBlobPtr QKmsDevice::connectorPropertyBlob(drmModeConnectorPtr connector, const QByteArray &name) +{ + drmModePropertyPtr prop; + drmModePropertyBlobPtr blob = nullptr; + + for (int i = 0; i < connector->count_props && !blob; i++) { + prop = drmModeGetProperty(m_dri_fd, connector->props[i]); + if (!prop) + continue; + if ((prop->flags & DRM_MODE_PROP_BLOB) && (strcmp(prop->name, name.constData()) == 0)) + blob = drmModeGetPropertyBlob(m_dri_fd, connector->prop_values[i]); + drmModeFreeProperty(prop); + } + + return blob; +} + QKmsDevice::QKmsDevice(QKmsScreenConfig *screenConfig, const QString &path) : m_screenConfig(screenConfig) , m_path(path) @@ -626,6 +645,11 @@ void QKmsOutput::cleanup(QKmsDevice *device) dpms_prop = nullptr; } + if (edid_blob) { + drmModeFreePropertyBlob(edid_blob); + edid_blob = nullptr; + } + restoreMode(device); if (saved_crtc) { diff --git a/src/platformsupport/kmsconvenience/qkmsdevice_p.h b/src/platformsupport/kmsconvenience/qkmsdevice_p.h index 35a51c18b1..964a0b1775 100644 --- a/src/platformsupport/kmsconvenience/qkmsdevice_p.h +++ b/src/platformsupport/kmsconvenience/qkmsdevice_p.h @@ -100,12 +100,14 @@ struct QKmsOutput uint32_t connector_id; uint32_t crtc_id; QSizeF physical_size; + int preferred_mode; // index of preferred mode in list below int mode; // index of selected mode in list below bool mode_set; drmModeCrtcPtr saved_crtc; QList<drmModeModeInfo> modes; int subpixel; drmModePropertyPtr dpms_prop; + drmModePropertyBlobPtr edid_blob; bool wants_plane; uint32_t plane_id; bool plane_set; @@ -153,6 +155,7 @@ protected: drmModeConnectorPtr connector, VirtualDesktopInfo *vinfo); drmModePropertyPtr connectorProperty(drmModeConnectorPtr connector, const QByteArray &name); + drmModePropertyBlobPtr connectorPropertyBlob(drmModeConnectorPtr connector, const QByteArray &name); QKmsScreenConfig *m_screenConfig; QString m_path; diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp index 6561e95a0d..a936ec7aad 100644 --- a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp +++ b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp @@ -45,7 +45,7 @@ #include <qdbusreply.h> #include <qclipboard.h> -#include <qdebug.h> +#include <QtCore/qloggingcategory.h> #ifndef QT_NO_ACCESSIBILITY #include "socket_interface.h" @@ -65,8 +65,8 @@ QT_BEGIN_NAMESPACE -static bool isDebugging = false; -#define qAtspiDebug if (!::isDebugging); else qDebug +Q_LOGGING_CATEGORY(lcAccessibilityAtspi, "qt.accessibility.atspi") +Q_LOGGING_CATEGORY(lcAccessibilityAtspiCreation, "qt.accessibility.atspi.creation") AtSpiAdaptor::AtSpiAdaptor(DBusConnection *connection, QObject *parent) : QDBusVirtualObject(parent), m_dbus(connection) @@ -128,8 +128,6 @@ AtSpiAdaptor::AtSpiAdaptor(DBusConnection *connection, QObject *parent) , sendWindow_shade(0) , sendWindow_unshade(0) { - ::isDebugging = qEnvironmentVariableIsSet("QT_DEBUG_ACCESSIBILITY"); - m_applicationAdaptor = new QSpiApplicationAdaptor(m_dbus->connection(), this); connect(m_applicationAdaptor, SIGNAL(windowActivated(QObject*,bool)), this, SLOT(windowActivated(QObject*,bool))); @@ -140,9 +138,6 @@ AtSpiAdaptor::AtSpiAdaptor(DBusConnection *connection, QObject *parent) success = success && m_dbus->connection().connect(QLatin1String("org.a11y.atspi.Registry"), QLatin1String("/org/a11y/atspi/registry"), QLatin1String("org.a11y.atspi.Registry"), QLatin1String("EventListenerDeregistered"), this, SLOT(eventListenerDeregistered(QString,QString))); -#ifdef QT_ATSPI_DEBUG - qAtspiDebug() << "Registered event listener change listener: " << success; -#endif } AtSpiAdaptor::~AtSpiAdaptor() @@ -589,7 +584,7 @@ QString AtSpiAdaptor::introspect(const QString &path) const QAccessibleInterface * interface = interfaceFromPath(path); if (!interface) { - qAtspiDebug() << "WARNING Qt AtSpiAdaptor: Could not find accessible on path: " << path; + qCDebug(lcAccessibilityAtspi) << "WARNING Qt AtSpiAdaptor: Could not find accessible on path: " << path; return QString(); } @@ -698,7 +693,7 @@ void AtSpiAdaptor::setBitFlag(const QString &flag) || right.startsWith(QLatin1String("VisibledataChanged"))) { // typo in libatspi sendObject_visible_data_changed = 1; } else { - qAtspiDebug() << "WARNING: subscription string not handled:" << flag; + qCDebug(lcAccessibilityAtspi) << "WARNING: subscription string not handled:" << flag; } } break; @@ -744,7 +739,7 @@ void AtSpiAdaptor::setBitFlag(const QString &flag) } else if (right.startsWith(QLatin1String("DesktopDestroy"))) { // ignore this one } else { - qAtspiDebug() << "WARNING: subscription string not handled:" << flag; + qCDebug(lcAccessibilityAtspi) << "WARNING: subscription string not handled:" << flag; } } break; @@ -763,7 +758,7 @@ void AtSpiAdaptor::setBitFlag(const QString &flag) break; } default: - qAtspiDebug() << "WARNING: subscription string not handled:" << flag; + qCDebug(lcAccessibilityAtspi) << "WARNING: subscription string not handled:" << flag; } } @@ -782,19 +777,19 @@ void AtSpiAdaptor::updateEventListeners() setBitFlag(ev.eventName); m_applicationAdaptor->sendEvents(!evList.isEmpty()); } else { - qAtspiDebug("Could not query active accessibility event listeners."); + qCDebug(lcAccessibilityAtspi) << "Could not query active accessibility event listeners."; } } void AtSpiAdaptor::eventListenerDeregistered(const QString &/*bus*/, const QString &/*path*/) { -// qAtspiDebug() << "AtSpiAdaptor::eventListenerDeregistered: " << bus << path; +// qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::eventListenerDeregistered: " << bus << path; updateEventListeners(); } void AtSpiAdaptor::eventListenerRegistered(const QString &/*bus*/, const QString &/*path*/) { -// qAtspiDebug() << "AtSpiAdaptor::eventListenerRegistered: " << bus << path; +// qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::eventListenerRegistered: " << bus << path; updateEventListeners(); } @@ -859,7 +854,7 @@ QAccessibleInterface *AtSpiAdaptor::interfaceFromPath(const QString& dbusPath) c QStringList parts = dbusPath.split(QLatin1Char('/')); if (parts.size() != 6) { - qAtspiDebug() << "invalid path: " << dbusPath; + qCDebug(lcAccessibilityAtspi) << "invalid path: " << dbusPath; return 0; } @@ -868,7 +863,7 @@ QAccessibleInterface *AtSpiAdaptor::interfaceFromPath(const QString& dbusPath) c // The id is always in the range [INT_MAX+1, UINT_MAX] if ((int)id >= 0) - qWarning() << "No accessible object found for id: " << id; + qCWarning(lcAccessibilityAtspi) << "No accessible object found for id: " << id; return QAccessible::accessibleInterface(id); } @@ -943,7 +938,7 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) if (sendObject || sendObject_text_changed) { QAccessibleInterface * iface = event->accessibleInterface(); if (!iface || !iface->textInterface()) { - qAtspiDebug("Received text event for invalid interface."); + qCDebug(lcAccessibilityAtspi) << "Received text event for invalid interface."; return; } QString path = pathForInterface(iface); @@ -1001,7 +996,7 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) if (sendObject || sendObject_text_caret_moved) { QAccessibleInterface * iface = event->accessibleInterface(); if (!iface || !iface->textInterface()) { - qWarning() << "Sending TextCaretMoved from object that does not implement text interface: " << iface; + qCWarning(lcAccessibilityAtspi) << "Sending TextCaretMoved from object that does not implement text interface: " << iface; return; } @@ -1029,7 +1024,7 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) if (sendObject || sendObject_value_changed || sendObject_property_change_accessible_value) { QAccessibleInterface * iface = event->accessibleInterface(); if (!iface) { - qWarning("ValueChanged event from invalid accessible."); + qCWarning(lcAccessibilityAtspi) << "ValueChanged event from invalid accessible."; return; } if (iface->valueInterface()) { @@ -1048,7 +1043,7 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) sendDBusSignal(path, QLatin1String(ATSPI_DBUS_INTERFACE_EVENT_OBJECT), QLatin1String("SelectionChanged"), args2); } else { - qWarning() << "ValueChanged event and no ValueInterface or ComboBox: " << iface; + qCWarning(lcAccessibilityAtspi) << "ValueChanged event and no ValueInterface or ComboBox: " << iface; } } break; @@ -1058,7 +1053,7 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) case QAccessible::Selection: { QAccessibleInterface * iface = event->accessibleInterface(); if (!iface) { - qWarning("Selection event from invalid accessible."); + qCWarning(lcAccessibilityAtspi) << "Selection event from invalid accessible."; return; } QString path = pathForInterface(iface); @@ -1075,7 +1070,7 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) if (stateChange.checked) { QAccessibleInterface * iface = event->accessibleInterface(); if (!iface) { - qWarning("StateChanged event from invalid accessible."); + qCWarning(lcAccessibilityAtspi) << "StateChanged event from invalid accessible."; return; } int checked = iface->state().checked; @@ -1206,7 +1201,7 @@ void AtSpiAdaptor::notifyAboutCreation(QAccessibleInterface *interface) const // notify about the new child of our parent QAccessibleInterface * parent = interface->parent(); if (!parent) { - qAtspiDebug() << "AtSpiAdaptor::notifyAboutCreation: Could not find parent for " << interface->object(); + qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::notifyAboutCreation: Could not find parent for " << interface->object(); return; } QString path = pathForInterface(interface); @@ -1223,7 +1218,7 @@ void AtSpiAdaptor::notifyAboutDestruction(QAccessibleInterface *interface) const QAccessibleInterface * parent = interface->parent(); if (!parent) { - qAtspiDebug() << "AtSpiAdaptor::notifyAboutDestruction: Could not find parent for " << interface->object(); + qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::notifyAboutDestruction: Could not find parent for " << interface->object(); return; } QString path = pathForInterface(interface); @@ -1251,18 +1246,18 @@ bool AtSpiAdaptor::handleMessage(const QDBusMessage &message, const QDBusConnect // get accessible interface QAccessibleInterface * accessible = interfaceFromPath(message.path()); if (!accessible) { - qAtspiDebug() << "WARNING Qt AtSpiAdaptor: Could not find accessible on path: " << message.path(); + qCDebug(lcAccessibilityAtspi) << "WARNING Qt AtSpiAdaptor: Could not find accessible on path: " << message.path(); return false; } if (!accessible->isValid()) { - qWarning() << "WARNING Qt AtSpiAdaptor: Accessible invalid: " << accessible << message.path(); + qCWarning(lcAccessibilityAtspi) << "WARNING Qt AtSpiAdaptor: Accessible invalid: " << accessible << message.path(); return false; } QString interface = message.interface(); QString function = message.member(); - // qAtspiDebug() << "AtSpiAdaptor::handleMessage: " << interface << function; + // qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::handleMessage: " << interface << function; if (function == QLatin1String("Introspect")) { //introspect(message.path()); @@ -1294,7 +1289,7 @@ bool AtSpiAdaptor::handleMessage(const QDBusMessage &message, const QDBusConnect if (interface == QLatin1String(ATSPI_DBUS_INTERFACE_TABLE)) return tableInterface(accessible, function, message, connection); - qAtspiDebug() << "AtSpiAdaptor::handleMessage with unknown interface: " << message.path() << interface << function; + qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::handleMessage with unknown interface: " << message.path() << interface << function; return false; } @@ -1302,7 +1297,7 @@ bool AtSpiAdaptor::handleMessage(const QDBusMessage &message, const QDBusConnect bool AtSpiAdaptor::applicationInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection) { if (message.path() != QLatin1String(ATSPI_DBUS_PATH_ROOT)) { - qAtspiDebug() << "WARNING Qt AtSpiAdaptor: Could not find application interface for: " << message.path() << interface; + qCDebug(lcAccessibilityAtspi) << "WARNING Qt AtSpiAdaptor: Could not find application interface for: " << message.path() << interface; return false; } @@ -1333,7 +1328,7 @@ bool AtSpiAdaptor::applicationInterface(QAccessibleInterface *interface, const Q QDBusMessage reply = message.createReply(QVariant::fromValue(QLocale().name())); return connection.send(reply); } - qAtspiDebug() << "AtSpiAdaptor::applicationInterface " << message.path() << interface << function; + qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::applicationInterface " << message.path() << interface << function; return false; } @@ -1354,7 +1349,7 @@ void AtSpiAdaptor::registerApplication() const QSpiObjectReference &socket = reply.value(); accessibilityRegistry = QSpiObjectReference(socket); } else { - qAtspiDebug() << "Error in contacting registry: " + qCDebug(lcAccessibilityAtspi) << "Error in contacting registry: " << reply.error().name() << reply.error().message(); } @@ -1380,7 +1375,7 @@ bool AtSpiAdaptor::accessibleInterface(QAccessibleInterface *interface, const QS if (parent) { childIndex = parent->indexOfChild(interface); if (childIndex < 0) { - qAtspiDebug() << "GetIndexInParent get invalid index: " << childIndex << interface; + qCDebug(lcAccessibilityAtspi) << "GetIndexInParent get invalid index: " << childIndex << interface; } } sendReply(connection, message, childIndex); @@ -1445,7 +1440,7 @@ bool AtSpiAdaptor::accessibleInterface(QAccessibleInterface *interface, const QS } connection.send(message.createReply(QVariant::fromValue(children))); } else { - qAtspiDebug() << "WARNING: AtSpiAdaptor::accessibleInterface does not implement " << function << message.path(); + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::accessibleInterface does not implement " << function << message.path(); return false; } return true; @@ -1458,14 +1453,10 @@ AtspiRole AtSpiAdaptor::getRole(QAccessibleInterface *interface) const return qSpiRoleMapping[interface->role()].spiRole(); } -//#define ACCESSIBLE_CREATION_DEBUG - QStringList AtSpiAdaptor::accessibleInterfaces(QAccessibleInterface *interface) const { QStringList ifaces; -#ifdef ACCESSIBLE_CREATION_DEBUG - qAtspiDebug() << "AtSpiAdaptor::accessibleInterfaces create: " << interface->object(); -#endif + qCDebug(lcAccessibilityAtspiCreation) << "AtSpiAdaptor::accessibleInterfaces create: " << interface->object(); ifaces << QLatin1String(ATSPI_DBUS_INTERFACE_ACCESSIBLE); if ( (!interface->rect().isEmpty()) || @@ -1477,12 +1468,9 @@ QStringList AtSpiAdaptor::accessibleInterfaces(QAccessibleInterface *interface) (interface->object() && interface->object()->inherits("QSGItem")) ) { ifaces << QLatin1String(ATSPI_DBUS_INTERFACE_COMPONENT); - } -#ifdef ACCESSIBLE_CREATION_DEBUG - else { - qAtspiDebug(" IS NOT a component"); + } else { + qCDebug(lcAccessibilityAtspiCreation) << " IS NOT a component"; } -#endif if (interface->role() == QAccessible::Application) ifaces << QLatin1String(ATSPI_DBUS_INTERFACE_APPLICATION); @@ -1536,7 +1524,7 @@ QString AtSpiAdaptor::pathForObject(QObject *object) const Q_ASSERT(object); if (inheritsQAction(object)) { - qAtspiDebug("AtSpiAdaptor::pathForObject: warning: creating path with QAction as object."); + qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::pathForObject: warning: creating path with QAction as object."; } QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(object); @@ -1667,21 +1655,21 @@ bool AtSpiAdaptor::componentInterface(QAccessibleInterface *interface, const QSt // int width = message.arguments().at(2).toInt(); // int height = message.arguments().at(3).toInt(); // uint coordinateType = message.arguments().at(4).toUInt(); - qAtspiDebug("SetExtents is not implemented."); + qCDebug(lcAccessibilityAtspi) << "SetExtents is not implemented."; sendReply(connection, message, false); } else if (function == QLatin1String("SetPosition")) { // int x = message.arguments().at(0).toInt(); // int y = message.arguments().at(1).toInt(); // uint coordinateType = message.arguments().at(2).toUInt(); - qAtspiDebug("SetPosition is not implemented."); + qCDebug(lcAccessibilityAtspi) << "SetPosition is not implemented."; sendReply(connection, message, false); } else if (function == QLatin1String("SetSize")) { // int width = message.arguments().at(0).toInt(); // int height = message.arguments().at(1).toInt(); - qAtspiDebug("SetSize is not implemented."); + qCDebug(lcAccessibilityAtspi) << "SetSize is not implemented."; sendReply(connection, message, false); } else { - qAtspiDebug() << "WARNING: AtSpiAdaptor::componentInterface does not implement " << function << message.path(); + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::componentInterface does not implement " << function << message.path(); return false; } return true; @@ -1743,7 +1731,7 @@ bool AtSpiAdaptor::actionInterface(QAccessibleInterface *interface, const QStrin else sendReply(connection, message, QString()); } else { - qAtspiDebug() << "WARNING: AtSpiAdaptor::actionInterface does not implement " << function << message.path(); + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::actionInterface does not implement " << function << message.path(); return false; } return true; @@ -1815,7 +1803,7 @@ bool AtSpiAdaptor::textInterface(QAccessibleInterface *interface, const QString Q_UNUSED(x) Q_UNUSED (y) Q_UNUSED(width) Q_UNUSED(height) Q_UNUSED(coordType) Q_UNUSED(xClipType) Q_UNUSED(yClipType) - qAtspiDebug("Not implemented: QSpiAdaptor::GetBoundedRanges"); + qCDebug(lcAccessibilityAtspi) << "Not implemented: QSpiAdaptor::GetBoundedRanges"; sendReply(connection, message, QVariant::fromValue(QSpiTextRangeList())); } else if (function == QLatin1String("GetCharacterAtOffset")) { int offset = message.arguments().at(0).toInt(); @@ -1834,7 +1822,7 @@ bool AtSpiAdaptor::textInterface(QAccessibleInterface *interface, const QString } else if (function == QLatin1String("GetNSelections")) { sendReply(connection, message, interface->textInterface()->selectionCount()); } else if (function == QLatin1String("GetOffsetAtPoint")) { - qAtspiDebug() << message.signature(); + qCDebug(lcAccessibilityAtspi) << message.signature(); Q_ASSERT(!message.signature().isEmpty()); QPoint point(message.arguments().at(0).toInt(), message.arguments().at(1).toInt()); uint coordType = message.arguments().at(2).toUInt(); @@ -1903,7 +1891,7 @@ bool AtSpiAdaptor::textInterface(QAccessibleInterface *interface, const QString interface->textInterface()->setSelection(selectionNum, startOffset, endOffset); sendReply(connection, message, true); } else { - qAtspiDebug() << "WARNING: AtSpiAdaptor::textInterface does not implement " << function << message.path(); + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::textInterface does not implement " << function << message.path(); return false; } return true; @@ -1979,7 +1967,7 @@ namespace value != QLatin1String("center") ) { value = QString(); - qAtspiDebug() << "Unknown text-align attribute value \"" << value << "\" cannot be translated to AT-SPI."; + qCDebug(lcAccessibilityAtspi) << "Unknown text-align attribute value \"" << value << "\" cannot be translated to AT-SPI."; } } } else if (ia2Name == QLatin1String("font-size")) { @@ -1992,7 +1980,7 @@ namespace value != QLatin1String("oblique") ) { value = QString(); - qAtspiDebug() << "Unknown font-style attribute value \"" << value << "\" cannot be translated to AT-SPI."; + qCDebug(lcAccessibilityAtspi) << "Unknown font-style attribute value \"" << value << "\" cannot be translated to AT-SPI."; } } else if (ia2Name == QLatin1String("text-underline-type")) { name = QStringLiteral("underline"); @@ -2001,7 +1989,7 @@ namespace value != QLatin1String("double") ) { value = QString(); - qAtspiDebug() << "Unknown text-underline-type attribute value \"" << value << "\" cannot be translated to AT-SPI."; + qCDebug(lcAccessibilityAtspi) << "Unknown text-underline-type attribute value \"" << value << "\" cannot be translated to AT-SPI."; } } else if (ia2Name == QLatin1String("font-weight")) { name = QStringLiteral("weight"); @@ -2017,7 +2005,7 @@ namespace value != QLatin1String("sub") ) { value = QString(); - qAtspiDebug() << "Unknown text-position attribute value \"" << value << "\" cannot be translated to AT-SPI."; + qCDebug(lcAccessibilityAtspi) << "Unknown text-position attribute value \"" << value << "\" cannot be translated to AT-SPI."; } } else if (ia2Name == QLatin1String("writing-mode")) { name = QStringLiteral("direction"); @@ -2028,10 +2016,10 @@ namespace else if (value == QLatin1String("tb")) { // IAccessible2 docs refer to XSL, which specifies "tb" is shorthand for "tb-rl"; so at least give a hint about the horizontal direction (ATK does not support vertical direction in this attribute (yet)) value = QStringLiteral("rtl"); - qAtspiDebug() << "writing-mode attribute value \"tb\" translated only w.r.t. horizontal direction; vertical direction ignored"; + qCDebug(lcAccessibilityAtspi) << "writing-mode attribute value \"tb\" translated only w.r.t. horizontal direction; vertical direction ignored"; } else { value = QString(); - qAtspiDebug() << "Unknown writing-mode attribute value \"" << value << "\" cannot be translated to AT-SPI."; + qCDebug(lcAccessibilityAtspi) << "Unknown writing-mode attribute value \"" << value << "\" cannot be translated to AT-SPI."; } } else if (ia2Name == QLatin1String("language")) { // OK - ATK has no docs on the format of the value, IAccessible2 has reasonable format - leave it at that now @@ -2223,7 +2211,7 @@ bool AtSpiAdaptor::editableTextInterface(QAccessibleInterface *interface, const } else if (function == QLatin1String("")) { connection.send(message.createReply()); } else { - qAtspiDebug() << "WARNING: AtSpiAdaptor::editableTextInterface does not implement " << function << message.path(); + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::editableTextInterface does not implement " << function << message.path(); return false; } return true; @@ -2254,11 +2242,11 @@ bool AtSpiAdaptor::valueInterface(QAccessibleInterface *interface, const QString else if (function == QLatin1String("GetMinimumValue")) value = valueIface->minimumValue(); else { - qAtspiDebug() << "WARNING: AtSpiAdaptor::valueInterface does not implement " << function << message.path(); + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::valueInterface does not implement " << function << message.path(); return false; } if (!value.canConvert(QVariant::Double)) { - qAtspiDebug() << "AtSpiAdaptor::valueInterface: Could not convert to double: " << function; + qCDebug(lcAccessibilityAtspi) << "AtSpiAdaptor::valueInterface: Could not convert to double: " << function; } // explicitly convert to dbus-variant containing one double since atspi expects that @@ -2273,7 +2261,7 @@ bool AtSpiAdaptor::valueInterface(QAccessibleInterface *interface, const QString bool AtSpiAdaptor::tableInterface(QAccessibleInterface *interface, const QString &function, const QDBusMessage &message, const QDBusConnection &connection) { if (!(interface->tableInterface() || interface->tableCellInterface())) { - qAtspiDebug() << "WARNING Qt AtSpiAdaptor: Could not find table interface for: " << message.path() << interface; + qCDebug(lcAccessibilityAtspi) << "WARNING Qt AtSpiAdaptor: Could not find table interface for: " << message.path() << interface; return false; } @@ -2311,7 +2299,7 @@ bool AtSpiAdaptor::tableInterface(QAccessibleInterface *interface, const QString (column < 0) || (row >= interface->tableInterface()->rowCount()) || (column >= interface->tableInterface()->columnCount())) { - qAtspiDebug() << "WARNING: invalid index for tableInterface GetAccessibleAt (" << row << ", " << column << ')'; + qCDebug(lcAccessibilityAtspi) << "WARNING: invalid index for tableInterface GetAccessibleAt (" << row << ", " << column << ')'; return false; } @@ -2320,7 +2308,7 @@ bool AtSpiAdaptor::tableInterface(QAccessibleInterface *interface, const QString if (cell) { ref = QSpiObjectReference(connection, QDBusObjectPath(pathForInterface(cell))); } else { - qAtspiDebug() << "WARNING: no cell interface returned for " << interface->object() << row << column; + qCDebug(lcAccessibilityAtspi) << "WARNING: no cell interface returned for " << interface->object() << row << column; ref = QSpiObjectReference(); } connection.send(message.createReply(QVariant::fromValue(ref))); @@ -2330,11 +2318,11 @@ bool AtSpiAdaptor::tableInterface(QAccessibleInterface *interface, const QString int column = message.arguments().at(1).toInt(); QAccessibleInterface *cell = interface->tableInterface()->cellAt(row, column); if (!cell) { - qAtspiDebug() << "WARNING: AtSpiAdaptor::GetIndexAt(" << row << ',' << column << ") did not find a cell. " << interface; + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::GetIndexAt(" << row << ',' << column << ") did not find a cell. " << interface; return false; } int index = interface->indexOfChild(cell); - qAtspiDebug() << "QSpiAdaptor::GetIndexAt row:" << row << " col:" << column << " logical index:" << index; + qCDebug(lcAccessibilityAtspi) << "QSpiAdaptor::GetIndexAt row:" << row << " col:" << column << " logical index:" << index; Q_ASSERT(index > 0); connection.send(message.createReply(index)); } else if ((function == QLatin1String("GetColumnAtIndex")) || (function == QLatin1String("GetRowAtIndex"))) { @@ -2350,7 +2338,7 @@ bool AtSpiAdaptor::tableInterface(QAccessibleInterface *interface, const QString ret = -1; } else { if (!cell->tableCellInterface()) { - qAtspiDebug() << "WARNING: AtSpiAdaptor::" << function << " No table cell interface: " << cell; + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::" << function << " No table cell interface: " << cell; return false; } ret = cell->tableCellInterface()->columnIndex(); @@ -2362,14 +2350,14 @@ bool AtSpiAdaptor::tableInterface(QAccessibleInterface *interface, const QString ret = index % interface->tableInterface()->columnCount(); } else { if (!cell->tableCellInterface()) { - qAtspiDebug() << "WARNING: AtSpiAdaptor::" << function << " No table cell interface: " << cell; + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::" << function << " No table cell interface: " << cell; return false; } ret = cell->tableCellInterface()->rowIndex(); } } } else { - qAtspiDebug() << "WARNING: AtSpiAdaptor::" << function << " No cell at index: " << index << interface; + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::" << function << " No cell at index: " << index << interface; return false; } } @@ -2475,7 +2463,7 @@ bool AtSpiAdaptor::tableInterface(QAccessibleInterface *interface, const QString int row = message.arguments().at(0).toInt(); connection.send(message.createReply(interface->tableInterface()->unselectRow(row))); } else { - qAtspiDebug() << "WARNING: AtSpiAdaptor::tableInterface does not implement " << function << message.path(); + qCDebug(lcAccessibilityAtspi) << "WARNING: AtSpiAdaptor::tableInterface does not implement " << function << message.path(); return false; } return true; diff --git a/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp index dbaaf524e8..e938020437 100644 --- a/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp +++ b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -101,7 +101,7 @@ QOpenGLCompositorBackingStore::~QOpenGLCompositorBackingStore() ctx->makeCurrent(tempSurface.data()); } - if (ctx && m_bsTextureContext && ctx->shareGroup() == m_bsTextureContext->shareGroup()) + if (m_bsTextureContext && ctx->shareGroup() == m_bsTextureContext->shareGroup()) glDeleteTextures(1, &m_bsTexture); else qWarning("QOpenGLCompositorBackingStore: Texture is not valid in the current context"); @@ -202,14 +202,13 @@ void QOpenGLCompositorBackingStore::flush(QWindow *window, const QRegion ®ion } void QOpenGLCompositorBackingStore::composeAndFlush(QWindow *window, const QRegion ®ion, const QPoint &offset, - QPlatformTextureList *textures, QOpenGLContext *context, + QPlatformTextureList *textures, bool translucentBackground) { // QOpenGLWidget/QQuickWidget content provided as textures. The raster content goes on top. Q_UNUSED(region); Q_UNUSED(offset); - Q_UNUSED(context); Q_UNUSED(translucentBackground); QOpenGLCompositor *compositor = QOpenGLCompositor::instance(); @@ -218,7 +217,7 @@ void QOpenGLCompositorBackingStore::composeAndFlush(QWindow *window, const QRegi // The compositor's context and the context to which QOpenGLWidget/QQuickWidget // textures belong are not the same. They share resources, though. - Q_ASSERT(context->shareGroup() == dstCtx->shareGroup()); + Q_ASSERT(qt_window_private(window)->shareContext()->shareGroup() == dstCtx->shareGroup()); QWindow *dstWin = compositor->targetWindow(); if (!dstWin) diff --git a/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h index 0b025e4304..da68b90e92 100644 --- a/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h +++ b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h @@ -75,7 +75,7 @@ public: QImage toImage() const Q_DECL_OVERRIDE; void composeAndFlush(QWindow *window, const QRegion ®ion, const QPoint &offset, - QPlatformTextureList *textures, QOpenGLContext *context, + QPlatformTextureList *textures, bool translucentBackground) Q_DECL_OVERRIDE; const QPlatformTextureList *textures() const { return m_textures; } diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro index 7db6de78b4..5549984d6a 100644 --- a/src/platformsupport/platformsupport.pro +++ b/src/platformsupport/platformsupport.pro @@ -2,6 +2,7 @@ TEMPLATE = subdirs QT_FOR_CONFIG += gui-private SUBDIRS = \ + edid \ eventdispatchers \ devicediscovery \ fbconvenience \ @@ -39,6 +40,7 @@ darwin { SUBDIRS += \ clipboard \ graphics - macos: \ - SUBDIRS += cglconvenience } + +qtConfig(vulkan): \ + SUBDIRS += vkconvenience diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp b/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp index 4b099e5c0e..51c690d43a 100644 --- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp +++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp @@ -50,9 +50,8 @@ Q_LOGGING_CATEGORY(qLcMenu, "qt.qpa.menu") static int nextDBusID = 1; QHash<int, QDBusPlatformMenuItem *> menuItemsByID; -QDBusPlatformMenuItem::QDBusPlatformMenuItem(quintptr tag) - : m_tag(tag ? tag : reinterpret_cast<quintptr>(this)) // QMenu will overwrite this later - , m_subMenu(Q_NULLPTR) +QDBusPlatformMenuItem::QDBusPlatformMenuItem() + : m_subMenu(nullptr) , m_role(NoRole) , m_isEnabled(true) , m_isVisible(true) @@ -72,11 +71,6 @@ QDBusPlatformMenuItem::~QDBusPlatformMenuItem() static_cast<QDBusPlatformMenu *>(m_subMenu)->setContainingMenuItem(Q_NULLPTR); } -void QDBusPlatformMenuItem::setTag(quintptr tag) -{ - m_tag = tag; -} - void QDBusPlatformMenuItem::setText(const QString &text) { qCDebug(qLcMenu) << m_dbusID << text; @@ -167,9 +161,8 @@ QList<const QDBusPlatformMenuItem *> QDBusPlatformMenuItem::byIds(const QList<in } -QDBusPlatformMenu::QDBusPlatformMenu(quintptr tag) - : m_tag(tag ? tag : reinterpret_cast<quintptr>(this)) - , m_isEnabled(true) +QDBusPlatformMenu::QDBusPlatformMenu() + : m_isEnabled(true) , m_isVisible(true) , m_revision(1) , m_containingMenuItem(Q_NULLPTR) @@ -252,11 +245,6 @@ void QDBusPlatformMenu::emitUpdated() emit updated(++m_revision, 0); } -void QDBusPlatformMenu::setTag(quintptr tag) -{ - m_tag = tag; -} - void QDBusPlatformMenu::setText(const QString &text) { m_text = text; diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h b/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h index 49b7316d11..5458e2fdd5 100644 --- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h +++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h @@ -73,12 +73,9 @@ class QDBusPlatformMenuItem : public QPlatformMenuItem Q_OBJECT public: - QDBusPlatformMenuItem(quintptr tag = 0LL); + QDBusPlatformMenuItem(); ~QDBusPlatformMenuItem(); - quintptr tag()const Q_DECL_OVERRIDE { return m_tag; } - void setTag(quintptr tag) Q_DECL_OVERRIDE; - const QString text() const { return m_text; } void setText(const QString &text) Q_DECL_OVERRIDE; QIcon icon() const { return m_icon; } @@ -110,13 +107,10 @@ public: void trigger(); - bool operator==(const QDBusPlatformMenuItem& other) { return m_tag == other.m_tag; } - static QDBusPlatformMenuItem *byId(int id); static QList<const QDBusPlatformMenuItem *> byIds(const QList<int> &ids); private: - quintptr m_tag; QString m_text; QIcon m_icon; QPlatformMenu *m_subMenu; @@ -137,7 +131,7 @@ class QDBusPlatformMenu : public QPlatformMenu Q_OBJECT public: - QDBusPlatformMenu(quintptr tag = 0LL); + QDBusPlatformMenu(); ~QDBusPlatformMenu(); void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) Q_DECL_OVERRIDE; void removeMenuItem(QPlatformMenuItem *menuItem) Q_DECL_OVERRIDE; @@ -145,9 +139,6 @@ public: void syncMenuItem(QPlatformMenuItem *menuItem) Q_DECL_OVERRIDE; void syncSeparatorsCollapsible(bool enable) Q_DECL_OVERRIDE { Q_UNUSED(enable); } - quintptr tag()const Q_DECL_OVERRIDE { return m_tag; } - void setTag(quintptr tag) Q_DECL_OVERRIDE; - const QString text() const { return m_text; } void setText(const QString &text) Q_DECL_OVERRIDE; QIcon icon() const { return m_icon; } @@ -172,8 +163,6 @@ public: QPlatformMenuItem *createMenuItem() const Q_DECL_OVERRIDE; QPlatformMenu *createSubMenu() const Q_DECL_OVERRIDE; - bool operator==(const QDBusPlatformMenu& other) { return m_tag == other.m_tag; } - uint revision() const { return m_revision; } void emitUpdated(); @@ -184,7 +173,6 @@ signals: void popupRequested(int id, uint timestamp); private: - quintptr m_tag; QString m_text; QIcon m_icon; bool m_isEnabled; diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp index fc0fa00655..fc49fcbea9 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes.cpp @@ -104,7 +104,7 @@ QXdgDBusImageVector iconToQXdgDBusImageVector(const QIcon &icon) } // copy and endian-convert QXdgDBusImageStruct kim(im.width(), im.height()); - const uchar *end = im.constBits() + im.byteCount(); + const uchar *end = im.constBits() + im.sizeInBytes(); uchar *dest = reinterpret_cast<uchar *>(kim.data.data()); for (const uchar *src = im.constBits(); src < end; src += 4, dest += 4) qToUnaligned(qToBigEndian<quint32>(qFromUnaligned<quint32>(src)), dest); diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp index 323e8fd13b..be0fac4b55 100644 --- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp @@ -87,14 +87,6 @@ void ResourceHelper::clear() std::fill(fonts, fonts + QPlatformTheme::NFonts, static_cast<QFont *>(0)); } -/*! - \class QGenericX11ThemeQKdeTheme - \brief QGenericX11Theme is a generic theme implementation for X11. - \since 5.0 - \internal - \ingroup qpa -*/ - const char *QGenericUnixTheme::name = "generic"; // Default system font, corresponding to the value returned by 4.8 for diff --git a/src/platformsupport/vkconvenience/qbasicvulkanplatforminstance.cpp b/src/platformsupport/vkconvenience/qbasicvulkanplatforminstance.cpp new file mode 100644 index 0000000000..382d142334 --- /dev/null +++ b/src/platformsupport/vkconvenience/qbasicvulkanplatforminstance.cpp @@ -0,0 +1,357 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qbasicvulkanplatforminstance_p.h" +#include <QLibrary> +#include <QCoreApplication> +#include <QVector> +#include <QLoggingCategory> + +QT_BEGIN_NAMESPACE + +Q_LOGGING_CATEGORY(lcPlatVk, "qt.vulkan") + +/*! + \class QBasicPlatformVulkanInstance + \brief A generic platform Vulkan instance implementation. + \since 5.10 + \internal + \ingroup qpa + + Implements QPlatformVulkanInstance, serving as a base for platform-specific + implementations. The library loading and any WSI-specifics are excluded. + + Subclasses are expected to call init() from their constructor and + initInstance() from their createOrAdoptInstance() implementation. + */ + +QBasicPlatformVulkanInstance::QBasicPlatformVulkanInstance() + : m_vkInst(VK_NULL_HANDLE), + m_vkGetInstanceProcAddr(nullptr), + m_ownsVkInst(false), + m_errorCode(VK_SUCCESS), + m_debugCallback(0) +{ +} + +QBasicPlatformVulkanInstance::~QBasicPlatformVulkanInstance() +{ + if (!m_vkInst) + return; + + if (m_debugCallback && m_vkDestroyDebugReportCallbackEXT) + m_vkDestroyDebugReportCallbackEXT(m_vkInst, m_debugCallback, nullptr); + + if (m_ownsVkInst) + m_vkDestroyInstance(m_vkInst, nullptr); +} + +void QBasicPlatformVulkanInstance::init(QLibrary *lib) +{ + if (m_vkGetInstanceProcAddr) + return; + + qCDebug(lcPlatVk, "Vulkan init (%s)", qPrintable(lib->fileName())); + + // While not strictly required with every implementation, try to follow the spec + // and do not rely on core functions being exported. + // + // 1. dlsym vkGetInstanceProcAddr + // 2. with a special null instance resolve vkCreateInstance and vkEnumerateInstance* + // 3. all other core functions are resolved with the created instance + + m_vkGetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(lib->resolve("vkGetInstanceProcAddr")); + if (!m_vkGetInstanceProcAddr) { + qWarning("Failed to find vkGetInstanceProcAddr"); + return; + } + + m_vkCreateInstance = reinterpret_cast<PFN_vkCreateInstance>(m_vkGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance")); + if (!m_vkCreateInstance) { + qWarning("Failed to find vkCreateInstance"); + return; + } + m_vkEnumerateInstanceLayerProperties = reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties>( + m_vkGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceLayerProperties")); + if (!m_vkEnumerateInstanceLayerProperties) { + qWarning("Failed to find vkEnumerateInstanceLayerProperties"); + return; + } + m_vkEnumerateInstanceExtensionProperties = reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties>( + m_vkGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceExtensionProperties")); + if (!m_vkEnumerateInstanceExtensionProperties) { + qWarning("Failed to find vkEnumerateInstanceExtensionProperties"); + return; + } + + uint32_t layerCount = 0; + m_vkEnumerateInstanceLayerProperties(&layerCount, nullptr); + if (layerCount) { + QVector<VkLayerProperties> layerProps(layerCount); + m_vkEnumerateInstanceLayerProperties(&layerCount, layerProps.data()); + m_supportedLayers.reserve(layerCount); + for (const VkLayerProperties &p : qAsConst(layerProps)) { + QVulkanLayer layer; + layer.name = p.layerName; + layer.version = p.implementationVersion; + layer.specVersion = QVersionNumber(VK_VERSION_MAJOR(p.specVersion), + VK_VERSION_MINOR(p.specVersion), + VK_VERSION_PATCH(p.specVersion)); + layer.description = p.description; + m_supportedLayers.append(layer); + } + } + qCDebug(lcPlatVk) << "Supported Vulkan instance layers:" << m_supportedLayers; + + uint32_t extCount = 0; + m_vkEnumerateInstanceExtensionProperties(nullptr, &extCount, nullptr); + if (extCount) { + QVector<VkExtensionProperties> extProps(extCount); + m_vkEnumerateInstanceExtensionProperties(nullptr, &extCount, extProps.data()); + m_supportedExtensions.reserve(extCount); + for (const VkExtensionProperties &p : qAsConst(extProps)) { + QVulkanExtension ext; + ext.name = p.extensionName; + ext.version = p.specVersion; + m_supportedExtensions.append(ext); + } + } + qDebug(lcPlatVk) << "Supported Vulkan instance extensions:" << m_supportedExtensions; +} + +QVulkanInfoVector<QVulkanLayer> QBasicPlatformVulkanInstance::supportedLayers() const +{ + return m_supportedLayers; +} + +QVulkanInfoVector<QVulkanExtension> QBasicPlatformVulkanInstance::supportedExtensions() const +{ + return m_supportedExtensions; +} + +void QBasicPlatformVulkanInstance::initInstance(QVulkanInstance *instance, const QByteArrayList &extraExts) +{ + if (!m_vkGetInstanceProcAddr) { + qWarning("initInstance: No Vulkan library available"); + return; + } + + m_vkInst = instance->vkInstance(); // when non-null we are adopting an existing instance + + QVulkanInstance::Flags flags = instance->flags(); + m_enabledLayers = instance->layers(); + m_enabledExtensions = instance->extensions(); + + if (!m_vkInst) { + VkApplicationInfo appInfo; + memset(&appInfo, 0, sizeof(appInfo)); + appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + QByteArray appName = QCoreApplication::applicationName().toUtf8(); + appInfo.pApplicationName = appName.constData(); + const QVersionNumber apiVersion = instance->apiVersion(); + if (!apiVersion.isNull()) { + appInfo.apiVersion = VK_MAKE_VERSION(apiVersion.majorVersion(), + apiVersion.minorVersion(), + apiVersion.microVersion()); + } + + if (!flags.testFlag(QVulkanInstance::NoDebugOutputRedirect)) + m_enabledExtensions.append("VK_EXT_debug_report"); + + m_enabledExtensions.append("VK_KHR_surface"); + + for (const QByteArray &ext : extraExts) + m_enabledExtensions.append(ext); + + // No clever stuff with QSet and friends: the order for layers matters + // and the user-provided order must be kept. + for (int i = 0; i < m_enabledLayers.count(); ++i) { + const QByteArray &layerName(m_enabledLayers[i]); + if (!m_supportedLayers.contains(layerName)) + m_enabledLayers.removeAt(i--); + } + qDebug(lcPlatVk) << "Enabling Vulkan instance layers:" << m_enabledLayers; + for (int i = 0; i < m_enabledExtensions.count(); ++i) { + const QByteArray &extName(m_enabledExtensions[i]); + if (!m_supportedExtensions.contains(extName)) + m_enabledExtensions.removeAt(i--); + } + qDebug(lcPlatVk) << "Enabling Vulkan instance extensions:" << m_enabledExtensions; + + VkInstanceCreateInfo instInfo; + memset(&instInfo, 0, sizeof(instInfo)); + instInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + instInfo.pApplicationInfo = &appInfo; + + QVector<const char *> layerNameVec; + for (const QByteArray &ba : qAsConst(m_enabledLayers)) + layerNameVec.append(ba.constData()); + if (!layerNameVec.isEmpty()) { + instInfo.enabledLayerCount = layerNameVec.count(); + instInfo.ppEnabledLayerNames = layerNameVec.constData(); + } + + QVector<const char *> extNameVec; + for (const QByteArray &ba : qAsConst(m_enabledExtensions)) + extNameVec.append(ba.constData()); + if (!extNameVec.isEmpty()) { + instInfo.enabledExtensionCount = extNameVec.count(); + instInfo.ppEnabledExtensionNames = extNameVec.constData(); + } + + m_errorCode = m_vkCreateInstance(&instInfo, nullptr, &m_vkInst); + if (m_errorCode != VK_SUCCESS || !m_vkInst) { + qWarning("Failed to create Vulkan instance: %d", m_errorCode); + return; + } + + m_vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(m_vkGetInstanceProcAddr(m_vkInst, "vkDestroyInstance")); + if (!m_vkDestroyInstance) { + qWarning("Failed to find vkDestroyInstance"); + m_vkInst = VK_NULL_HANDLE; + return; + } + + m_ownsVkInst = true; + } + + m_getPhysDevSurfaceSupport = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>( + m_vkGetInstanceProcAddr(m_vkInst, "vkGetPhysicalDeviceSurfaceSupportKHR")); + if (!m_getPhysDevSurfaceSupport) + qWarning("Failed to find vkGetPhysicalDeviceSurfaceSupportKHR"); + + if (!flags.testFlag(QVulkanInstance::NoDebugOutputRedirect)) + setupDebugOutput(); +} + +bool QBasicPlatformVulkanInstance::isValid() const +{ + return m_vkInst != VK_NULL_HANDLE; +} + +VkResult QBasicPlatformVulkanInstance::errorCode() const +{ + return m_errorCode; +} + +VkInstance QBasicPlatformVulkanInstance::vkInstance() const +{ + return m_vkInst; +} + +QByteArrayList QBasicPlatformVulkanInstance::enabledLayers() const +{ + return m_enabledLayers; +} + +QByteArrayList QBasicPlatformVulkanInstance::enabledExtensions() const +{ + return m_enabledExtensions; +} + +PFN_vkVoidFunction QBasicPlatformVulkanInstance::getInstanceProcAddr(const char *name) +{ + if (!name) + return nullptr; + + const bool needsNullInstance = !strcmp(name, "vkEnumerateInstanceLayerProperties") + || !strcmp(name, "vkEnumerateInstanceExtensionProperties"); + + return m_vkGetInstanceProcAddr(needsNullInstance ? 0 : m_vkInst, name); +} + +bool QBasicPlatformVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + QWindow *window) +{ + if (!m_getPhysDevSurfaceSupport) + return true; + + VkSurfaceKHR surface = QVulkanInstance::surfaceForWindow(window); + VkBool32 supported = false; + m_getPhysDevSurfaceSupport(physicalDevice, queueFamilyIndex, surface, &supported); + + return supported; +} + +static VKAPI_ATTR VkBool32 VKAPI_CALL defaultDebugCallbackFunc(VkDebugReportFlagsEXT flags, + VkDebugReportObjectTypeEXT objectType, + uint64_t object, + size_t location, + int32_t messageCode, + const char *pLayerPrefix, + const char *pMessage, + void *pUserData) +{ + Q_UNUSED(flags); + Q_UNUSED(objectType); + Q_UNUSED(object); + Q_UNUSED(location); + Q_UNUSED(pUserData); + + // not categorized, just route to plain old qDebug + qDebug("vkDebug: %s: %d: %s", pLayerPrefix, messageCode, pMessage); + + return VK_FALSE; +} + +void QBasicPlatformVulkanInstance::setupDebugOutput() +{ + if (!m_enabledExtensions.contains("VK_EXT_debug_report")) + return; + + PFN_vkCreateDebugReportCallbackEXT createDebugReportCallback = reinterpret_cast<PFN_vkCreateDebugReportCallbackEXT>( + m_vkGetInstanceProcAddr(m_vkInst, "vkCreateDebugReportCallbackEXT")); + m_vkDestroyDebugReportCallbackEXT = reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>( + m_vkGetInstanceProcAddr(m_vkInst, "vkDestroyDebugReportCallbackEXT")); + + VkDebugReportCallbackCreateInfoEXT dbgCallbackInfo; + memset(&dbgCallbackInfo, 0, sizeof(dbgCallbackInfo)); + dbgCallbackInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT; + dbgCallbackInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT + | VK_DEBUG_REPORT_WARNING_BIT_EXT + | VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT; + dbgCallbackInfo.pfnCallback = defaultDebugCallbackFunc; + + VkResult err = createDebugReportCallback(m_vkInst, &dbgCallbackInfo, nullptr, &m_debugCallback); + if (err != VK_SUCCESS) + qWarning("Failed to create debug report callback: %d", err); +} + +QT_END_NAMESPACE diff --git a/src/platformsupport/vkconvenience/qbasicvulkanplatforminstance_p.h b/src/platformsupport/vkconvenience/qbasicvulkanplatforminstance_p.h new file mode 100644 index 0000000000..748b138f01 --- /dev/null +++ b/src/platformsupport/vkconvenience/qbasicvulkanplatforminstance_p.h @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QBASICVULKANPLATFORMINSTANCE_P_H +#define QBASICVULKANPLATFORMINSTANCE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <qpa/qplatformvulkaninstance.h> + +QT_BEGIN_NAMESPACE + +class QLibrary; + +class QBasicPlatformVulkanInstance : public QPlatformVulkanInstance +{ +public: + QBasicPlatformVulkanInstance(); + ~QBasicPlatformVulkanInstance(); + + QVulkanInfoVector<QVulkanLayer> supportedLayers() const override; + QVulkanInfoVector<QVulkanExtension> supportedExtensions() const override; + bool isValid() const override; + VkResult errorCode() const override; + VkInstance vkInstance() const override; + QByteArrayList enabledLayers() const override; + QByteArrayList enabledExtensions() const override; + PFN_vkVoidFunction getInstanceProcAddr(const char *name) override; + bool supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window) override; + +protected: + void init(QLibrary *lib); + void initInstance(QVulkanInstance *instance, const QByteArrayList &extraExts); + + VkInstance m_vkInst; + PFN_vkGetInstanceProcAddr m_vkGetInstanceProcAddr; + PFN_vkGetPhysicalDeviceSurfaceSupportKHR m_getPhysDevSurfaceSupport; + +private: + void setupDebugOutput(); + + bool m_ownsVkInst; + VkResult m_errorCode; + QVulkanInfoVector<QVulkanLayer> m_supportedLayers; + QVulkanInfoVector<QVulkanExtension> m_supportedExtensions; + QByteArrayList m_enabledLayers; + QByteArrayList m_enabledExtensions; + + PFN_vkCreateInstance m_vkCreateInstance; + PFN_vkEnumerateInstanceLayerProperties m_vkEnumerateInstanceLayerProperties; + PFN_vkEnumerateInstanceExtensionProperties m_vkEnumerateInstanceExtensionProperties; + + PFN_vkDestroyInstance m_vkDestroyInstance; + + VkDebugReportCallbackEXT m_debugCallback; + PFN_vkDestroyDebugReportCallbackEXT m_vkDestroyDebugReportCallbackEXT; +}; + +QT_END_NAMESPACE + +#endif // QBASICVULKANPLATFORMINSTANCE_P_H diff --git a/src/platformsupport/vkconvenience/vkconvenience.pro b/src/platformsupport/vkconvenience/vkconvenience.pro new file mode 100644 index 0000000000..7a4cdb041d --- /dev/null +++ b/src/platformsupport/vkconvenience/vkconvenience.pro @@ -0,0 +1,16 @@ +TARGET = QtVulkanSupport +MODULE = vulkan_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +SOURCES += \ + qbasicvulkanplatforminstance.cpp + +HEADERS += \ + qbasicvulkanplatforminstance_p.h + +load(qt_module) |