diff options
Diffstat (limited to 'src/plugins/platforms/direct2d')
10 files changed, 139 insertions, 153 deletions
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dbitmap.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dbitmap.cpp index b5065ba380..38425f8fa1 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dbitmap.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dbitmap.cpp @@ -55,8 +55,9 @@ class QWindowsDirect2DBitmapPrivate { public: QWindowsDirect2DBitmapPrivate(ID2D1DeviceContext *dc = 0, ID2D1Bitmap1 *bm = 0) - : bitmap(bm) - , deviceContext(new QWindowsDirect2DDeviceContext(dc)) + : deviceContext(new QWindowsDirect2DDeviceContext(dc)) + , bitmap(bm) + { deviceContext->get()->SetTarget(bm); } @@ -83,13 +84,13 @@ public: UINT32(width), UINT32(height) }; - HRESULT hr = deviceContext->get()->CreateBitmap(size, data, pitch, + HRESULT hr = deviceContext->get()->CreateBitmap(size, data, UINT32(pitch), bitmapProperties(), bitmap.ReleaseAndGetAddressOf()); if (SUCCEEDED(hr)) deviceContext->get()->SetTarget(bitmap.Get()); else - qWarning("%s: Could not create bitmap: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create bitmap: %#lx", __FUNCTION__, hr); return SUCCEEDED(hr); } @@ -107,28 +108,28 @@ public: D2D1_BITMAP_PROPERTIES1 properties = bitmapProperties(); properties.bitmapOptions = D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_CPU_READ; - hr = deviceContext->get()->CreateBitmap(size, NULL, NULL, + hr = deviceContext->get()->CreateBitmap(size, NULL, 0, properties, &mappingCopy); if (FAILED(hr)) { - qWarning("%s: Could not create bitmap: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create bitmap: %#lx", __FUNCTION__, hr); return QImage(); } hr = mappingCopy->CopyFromBitmap(NULL, bitmap.Get(), NULL); if (FAILED(hr)) { - qWarning("%s: Could not copy from bitmap: %#x", __FUNCTION__, hr); + qWarning("%s: Could not copy from bitmap: %#lx", __FUNCTION__, hr); return QImage(); } D2D1_MAPPED_RECT mappedRect; hr = mappingCopy->Map(D2D1_MAP_OPTIONS_READ, &mappedRect); if (FAILED(hr)) { - qWarning("%s: Could not map: %#x", __FUNCTION__, hr); + qWarning("%s: Could not map: %#lx", __FUNCTION__, hr); return QImage(); } return QImage(static_cast<const uchar *>(mappedRect.bits), - size.width, size.height, mappedRect.pitch, + int(size.width), int(size.height), int(mappedRect.pitch), QImage::Format_ARGB32_Premultiplied).copy(rect); } @@ -197,7 +198,7 @@ QSize QWindowsDirect2DBitmap::size() const Q_D(const QWindowsDirect2DBitmap); D2D1_SIZE_U size = d->bitmap->GetPixelSize(); - return QSize(size.width, size.height); + return QSize(int(size.width), int(size.height)); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dcontext.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dcontext.cpp index fb5bb43d17..a5817016e6 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dcontext.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dcontext.cpp @@ -84,7 +84,7 @@ public: } if (FAILED(hr)) { - qWarning("%s: Could not create Direct3D Device: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create Direct3D Device: %#lx", __FUNCTION__, hr); return false; } @@ -93,7 +93,7 @@ public: hr = d3dDevice.As(&dxgiDevice); if (FAILED(hr)) { - qWarning("%s: DXGI Device interface query failed on D3D Device: %#x", __FUNCTION__, hr); + qWarning("%s: DXGI Device interface query failed on D3D Device: %#lx", __FUNCTION__, hr); return false; } @@ -102,13 +102,13 @@ public: hr = dxgiDevice->GetAdapter(&dxgiAdapter); if (FAILED(hr)) { - qWarning("%s: Failed to probe DXGI Device for parent DXGI Adapter: %#x", __FUNCTION__, hr); + qWarning("%s: Failed to probe DXGI Device for parent DXGI Adapter: %#lx", __FUNCTION__, hr); return false; } hr = dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory)); if (FAILED(hr)) { - qWarning("%s: Failed to probe DXGI Adapter for parent DXGI Factory: %#x", __FUNCTION__, hr); + qWarning("%s: Failed to probe DXGI Adapter for parent DXGI Factory: %#lx", __FUNCTION__, hr); return false; } @@ -121,26 +121,26 @@ public: hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, options, d2dFactory.GetAddressOf()); if (FAILED(hr)) { - qWarning("%s: Could not create Direct2D Factory: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create Direct2D Factory: %#lx", __FUNCTION__, hr); return false; } hr = d2dFactory->CreateDevice(dxgiDevice.Get(), &d2dDevice); if (FAILED(hr)) { - qWarning("%s: Could not create D2D Device: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create D2D Device: %#lx", __FUNCTION__, hr); return false; } hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), static_cast<IUnknown **>(&directWriteFactory)); if (FAILED(hr)) { - qWarning("%s: Could not create DirectWrite factory: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create DirectWrite factory: %#lx", __FUNCTION__, hr); return false; } hr = directWriteFactory->GetGdiInterop(&directWriteGdiInterop); if (FAILED(hr)) { - qWarning("%s: Could not create DirectWrite GDI Interop: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create DirectWrite GDI Interop: %#lx", __FUNCTION__, hr); return false; } @@ -161,7 +161,7 @@ QWindowsDirect2DContext::QWindowsDirect2DContext() { } -QWindowsDirect2DContext::~QWindowsDirect2DContext() {} +QWindowsDirect2DContext::~QWindowsDirect2DContext() = default; bool QWindowsDirect2DContext::init() { diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dcontext.h b/src/plugins/platforms/direct2d/qwindowsdirect2dcontext.h index a3478d2d4e..0d42c65964 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dcontext.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dcontext.h @@ -59,7 +59,7 @@ class QWindowsDirect2DContext public: QWindowsDirect2DContext(); - virtual ~QWindowsDirect2DContext(); + ~QWindowsDirect2DContext(); bool init(); diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp index 30238217dd..8a34f6974f 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp @@ -51,14 +51,13 @@ class QWindowsDirect2DDeviceContextPrivate { public: QWindowsDirect2DDeviceContextPrivate(ID2D1DeviceContext *dc) : deviceContext(dc) - , refCount(0) { if (!dc) { HRESULT hr = QWindowsDirect2DContext::instance()->d2dDevice()->CreateDeviceContext( D2D1_DEVICE_CONTEXT_OPTIONS_NONE, &deviceContext); if (Q_UNLIKELY(FAILED(hr))) - qFatal("%s: Couldn't create Direct2D Device Context: %#x", __FUNCTION__, hr); + qFatal("%s: Couldn't create Direct2D Device Context: %#lx", __FUNCTION__, hr); } Q_ASSERT(deviceContext); @@ -98,7 +97,7 @@ public: } ComPtr<ID2D1DeviceContext> deviceContext; - int refCount; + int refCount = 0; }; QWindowsDirect2DDeviceContext::QWindowsDirect2DDeviceContext(ID2D1DeviceContext *dc) diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp index da4a4e6ce6..ea51135583 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp @@ -76,12 +76,7 @@ public: class Direct2DVersion { private: - Direct2DVersion() - : partOne(0) - , partTwo(0) - , partThree(0) - , partFour(0) - {} + Direct2DVersion() = default; Direct2DVersion(int one, int two, int three, int four) : partOne(one) @@ -108,13 +103,14 @@ public: if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) { DWORD versionInfoSize = GetFileVersionInfoSize(filename, NULL); if (versionInfoSize) { - QVarLengthArray<BYTE> info(versionInfoSize); - if (GetFileVersionInfo(filename, NULL, versionInfoSize, info.data())) { + QVarLengthArray<BYTE> info(static_cast<int>(versionInfoSize)); + if (GetFileVersionInfo(filename, 0, versionInfoSize, info.data())) { UINT size; DWORD *fi; - if (VerQueryValue(info.constData(), __TEXT("\\"), (LPVOID *) &fi, &size) && size) { - VS_FIXEDFILEINFO *verInfo = (VS_FIXEDFILEINFO *) fi; + if (VerQueryValue(info.constData(), __TEXT("\\"), + reinterpret_cast<void **>(&fi), &size) && size) { + const VS_FIXEDFILEINFO *verInfo = reinterpret_cast<const VS_FIXEDFILEINFO *>(fi); return Direct2DVersion(HIWORD(verInfo->dwFileVersionMS), LOWORD(verInfo->dwFileVersionMS), HIWORD(verInfo->dwFileVersionLS), @@ -171,7 +167,10 @@ public: return a - b; } - int partOne, partTwo, partThree, partFour; + int partOne = 0; + int partTwo = 0; + int partThree = 0; + int partFour = 0; }; QWindowsDirect2DIntegration *QWindowsDirect2DIntegration::create(const QStringList ¶mList) diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.cpp index 29b01391e2..3c86168a74 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.cpp @@ -93,42 +93,33 @@ int QWindowsDirect2DPaintDevice::metric(QPaintDevice::PaintDeviceMetric metric) switch (metric) { case QPaintDevice::PdmWidth: - return d->bitmap->bitmap()->GetPixelSize().width; - break; + return int(d->bitmap->bitmap()->GetPixelSize().width); case QPaintDevice::PdmHeight: - return d->bitmap->bitmap()->GetPixelSize().height; - break; + return int(d->bitmap->bitmap()->GetPixelSize().height); case QPaintDevice::PdmNumColors: return INT_MAX; - break; case QPaintDevice::PdmDepth: return 32; - break; case QPaintDevice::PdmDpiX: case QPaintDevice::PdmPhysicalDpiX: { FLOAT x, y; QWindowsDirect2DContext::instance()->d2dFactory()->GetDesktopDpi(&x, &y); - return x; + return qRound(x); } - break; case QPaintDevice::PdmDpiY: case QPaintDevice::PdmPhysicalDpiY: { FLOAT x, y; QWindowsDirect2DContext::instance()->d2dFactory()->GetDesktopDpi(&x, &y); - return y; + return qRound(y); } - break; case QPaintDevice::PdmDevicePixelRatio: return 1; - break; case QPaintDevice::PdmDevicePixelRatioScaled: - return 1 * devicePixelRatioFScale(); - break; + return qRound(devicePixelRatioFScale()); case QPaintDevice::PdmWidthMM: case QPaintDevice::PdmHeightMM: - return -1; break; } diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp index c4ff937a0b..164429ba30 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp @@ -87,7 +87,7 @@ enum { }; //Clipping flags -enum { +enum : unsigned { SimpleSystemClip = 0x1 }; @@ -125,28 +125,30 @@ static inline D2D1_MATRIX_3X2_F transformFromLine(const QLineF &line, qreal penW static void adjustLine(QPointF *p1, QPointF *p2); static bool isLinePositivelySloped(const QPointF &p1, const QPointF &p2); -class Direct2DPathGeometryWriter +static QVector<D2D1_GRADIENT_STOP> qGradientStopsToD2DStops(const QGradientStops &qstops) { -public: - Direct2DPathGeometryWriter() - : m_inFigure(false) - , m_roundCoordinates(false) - , m_adjustPositivelySlopedLines(false) - { - + QVector<D2D1_GRADIENT_STOP> stops(qstops.count()); + for (int i = 0, count = stops.size(); i < count; ++i) { + stops[i].position = FLOAT(qstops.at(i).first); + stops[i].color = to_d2d_color_f(qstops.at(i).second); } + return stops; +} +class Direct2DPathGeometryWriter +{ +public: bool begin() { HRESULT hr = factory()->CreatePathGeometry(&m_geometry); if (FAILED(hr)) { - qWarning("%s: Could not create path geometry: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create path geometry: %#lx", __FUNCTION__, hr); return false; } hr = m_geometry->Open(&m_sink); if (FAILED(hr)) { - qWarning("%s: Could not create geometry sink: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create geometry sink: %#lx", __FUNCTION__, hr); return false; } @@ -239,9 +241,9 @@ private: ComPtr<ID2D1PathGeometry1> m_geometry; ComPtr<ID2D1GeometrySink> m_sink; - bool m_inFigure; - bool m_roundCoordinates; - bool m_adjustPositivelySlopedLines; + bool m_inFigure = false; + bool m_roundCoordinates = false; + bool m_adjustPositivelySlopedLines = false; QPointF m_previousPoint; }; @@ -262,7 +264,6 @@ class QWindowsDirect2DPaintEnginePrivate : public QPaintEngineExPrivate public: QWindowsDirect2DPaintEnginePrivate(QWindowsDirect2DBitmap *bm, QWindowsDirect2DPaintEngine::Flags flags) : bitmap(bm) - , clipFlags(0) , flags(flags) { pen.reset(); @@ -274,7 +275,7 @@ public: QWindowsDirect2DBitmap *bitmap; QImage fallbackImage; - unsigned int clipFlags; + unsigned int clipFlags = 0; QStack<ClipType> pushedClips; QWindowsDirect2DPaintEngine::Flags flags; @@ -348,9 +349,9 @@ public: void updateOpacity(qreal opacity) { if (brush.brush) - brush.brush->SetOpacity(opacity); + brush.brush->SetOpacity(FLOAT(opacity)); if (pen.brush) - pen.brush->SetOpacity(opacity); + pen.brush->SetOpacity(FLOAT(opacity)); } void pushClip(const QVectorPath &path) @@ -459,7 +460,7 @@ public: brush.qbrush = newBrush; if (brush.brush) { - brush.brush->SetOpacity(q->state()->opacity); + brush.brush->SetOpacity(FLOAT(q->state()->opacity)); applyBrushOrigin(currentBrushOrigin); } } @@ -477,8 +478,8 @@ public: brush.brush->GetTransform(&transform); brush.brush->SetTransform(*(D2D1::Matrix3x2F::ReinterpretBaseType(&transform)) - * D2D1::Matrix3x2F::Translation(-currentBrushOrigin.x(), - -currentBrushOrigin.y())); + * D2D1::Matrix3x2F::Translation(FLOAT(-currentBrushOrigin.x()), + FLOAT(-currentBrushOrigin.y()))); } } @@ -489,7 +490,7 @@ public: brush.brush->GetTransform(&transform); brush.brush->SetTransform(*(D2D1::Matrix3x2F::ReinterpretBaseType(&transform)) - * D2D1::Matrix3x2F::Translation(origin.x(), origin.y())); + * D2D1::Matrix3x2F::Translation(FLOAT(origin.x()), FLOAT(origin.y()))); } currentBrushOrigin = origin; @@ -511,7 +512,7 @@ public: if (!pen.brush) return; - pen.brush->SetOpacity(q->state()->opacity); + pen.brush->SetOpacity(FLOAT(q->state()->opacity)); D2D1_STROKE_STYLE_PROPERTIES1 props = {}; @@ -541,8 +542,8 @@ public: break; } - props.miterLimit = newPen.miterLimit() * qreal(2.0); // D2D and Qt miter specs differ - props.dashOffset = newPen.dashOffset(); + props.miterLimit = FLOAT(newPen.miterLimit() * qreal(2.0)); // D2D and Qt miter specs differ + props.dashOffset = FLOAT(newPen.dashOffset()); if (newPen.widthF() == 0) props.transformType = D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE; @@ -577,24 +578,24 @@ public: qreal penWidth = pen.qpen.widthF(); qreal brushWidth = 0; for (int i = 0; i < dashes.size(); i++) { - converted[i] = dashes[i]; + converted[i] = FLOAT(dashes[i]); brushWidth += penWidth * dashes[i]; } - hr = factory()->CreateStrokeStyle(props, converted.constData(), converted.size(), &pen.strokeStyle); + hr = factory()->CreateStrokeStyle(props, converted.constData(), UINT32(converted.size()), &pen.strokeStyle); // Create a combined brush/dash pattern for optimized line drawing QWindowsDirect2DBitmap bitmap; - bitmap.resize(ceil(brushWidth), ceil(penWidth)); + bitmap.resize(int(ceil(brushWidth)), int(ceil(penWidth))); bitmap.deviceContext()->begin(); bitmap.deviceContext()->get()->SetAntialiasMode(antialiasMode()); bitmap.deviceContext()->get()->SetTransform(D2D1::IdentityMatrix()); bitmap.deviceContext()->get()->Clear(); const qreal offsetX = (qreal(bitmap.size().width()) - brushWidth) / 2; const qreal offsetY = qreal(bitmap.size().height()) / 2; - bitmap.deviceContext()->get()->DrawLine(D2D1::Point2F(offsetX, offsetY), - D2D1::Point2F(brushWidth, offsetY), - pen.brush.Get(), penWidth, pen.strokeStyle.Get()); + bitmap.deviceContext()->get()->DrawLine(D2D1::Point2F(FLOAT(offsetX), FLOAT(offsetY)), + D2D1::Point2F(FLOAT(brushWidth), FLOAT(offsetY)), + pen.brush.Get(), FLOAT(penWidth), pen.strokeStyle.Get()); bitmap.deviceContext()->end(); D2D1_BITMAP_BRUSH_PROPERTIES1 bitmapBrushProperties = D2D1::BitmapBrushProperties1( D2D1_EXTEND_MODE_WRAP, D2D1_EXTEND_MODE_CLAMP, D2D1_INTERPOLATION_MODE_LINEAR); @@ -605,7 +606,7 @@ public: } if (FAILED(hr)) - qWarning("%s: Could not create stroke style: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create stroke style: %#lx", __FUNCTION__, hr); } ComPtr<ID2D1Brush> to_d2d_brush(const QBrush &newBrush, bool *needsEmulation) @@ -627,13 +628,13 @@ public: hr = dc()->CreateSolidColorBrush(to_d2d_color_f(newBrush.color()), &solid); if (FAILED(hr)) { - qWarning("%s: Could not create solid color brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create solid color brush: %#lx", __FUNCTION__, hr); break; } hr = solid.As(&result); if (FAILED(hr)) - qWarning("%s: Could not convert solid color brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not convert solid color brush: %#lx", __FUNCTION__, hr); } break; @@ -673,13 +674,13 @@ public: bitmapBrushProperties, &bitmapBrush); if (FAILED(hr)) { - qWarning("%s: Could not create Direct2D bitmap brush for Qt pattern brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create Direct2D bitmap brush for Qt pattern brush: %#lx", __FUNCTION__, hr); break; } hr = bitmapBrush.As(&result); if (FAILED(hr)) - qWarning("%s: Could not convert Direct2D bitmap brush for Qt pattern brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not convert Direct2D bitmap brush for Qt pattern brush: %#lx", __FUNCTION__, hr); } break; @@ -693,33 +694,29 @@ public: D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES linearGradientBrushProperties; ComPtr<ID2D1GradientStopCollection> gradientStopCollection; - const QGradientStops &qstops = qlinear->stops(); - QVector<D2D1_GRADIENT_STOP> stops(qstops.count()); - linearGradientBrushProperties.startPoint = to_d2d_point_2f(qlinear->start()); linearGradientBrushProperties.endPoint = to_d2d_point_2f(qlinear->finalStop()); - for (int i = 0; i < stops.size(); i++) { - stops[i].position = qstops[i].first; - stops[i].color = to_d2d_color_f(qstops[i].second); - } + const QVector<D2D1_GRADIENT_STOP> stops = qGradientStopsToD2DStops(qlinear->stops()); - hr = dc()->CreateGradientStopCollection(stops.constData(), stops.size(), &gradientStopCollection); + hr = dc()->CreateGradientStopCollection(stops.constData(), + UINT32(stops.size()), + &gradientStopCollection); if (FAILED(hr)) { - qWarning("%s: Could not create gradient stop collection for linear gradient: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create gradient stop collection for linear gradient: %#lx", __FUNCTION__, hr); break; } hr = dc()->CreateLinearGradientBrush(linearGradientBrushProperties, gradientStopCollection.Get(), &linear); if (FAILED(hr)) { - qWarning("%s: Could not create Direct2D linear gradient brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create Direct2D linear gradient brush: %#lx", __FUNCTION__, hr); break; } hr = linear.As(&result); if (FAILED(hr)) { - qWarning("%s: Could not convert Direct2D linear gradient brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not convert Direct2D linear gradient brush: %#lx", __FUNCTION__, hr); break; } } @@ -735,35 +732,29 @@ public: D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES radialGradientBrushProperties; ComPtr<ID2D1GradientStopCollection> gradientStopCollection; - const QGradientStops &qstops = qradial->stops(); - QVector<D2D1_GRADIENT_STOP> stops(qstops.count()); - radialGradientBrushProperties.center = to_d2d_point_2f(qradial->center()); radialGradientBrushProperties.gradientOriginOffset = to_d2d_point_2f(qradial->focalPoint() - qradial->center()); - radialGradientBrushProperties.radiusX = qradial->radius(); - radialGradientBrushProperties.radiusY = qradial->radius(); + radialGradientBrushProperties.radiusX = FLOAT(qradial->radius()); + radialGradientBrushProperties.radiusY = FLOAT(qradial->radius()); - for (int i = 0; i < stops.size(); i++) { - stops[i].position = qstops[i].first; - stops[i].color = to_d2d_color_f(qstops[i].second); - } + const QVector<D2D1_GRADIENT_STOP> stops = qGradientStopsToD2DStops(qradial->stops()); hr = dc()->CreateGradientStopCollection(stops.constData(), stops.size(), &gradientStopCollection); if (FAILED(hr)) { - qWarning("%s: Could not create gradient stop collection for radial gradient: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create gradient stop collection for radial gradient: %#lx", __FUNCTION__, hr); break; } hr = dc()->CreateRadialGradientBrush(radialGradientBrushProperties, gradientStopCollection.Get(), &radial); if (FAILED(hr)) { - qWarning("%s: Could not create Direct2D radial gradient brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create Direct2D radial gradient brush: %#lx", __FUNCTION__, hr); break; } radial.As(&result); if (FAILED(hr)) { - qWarning("%s: Could not convert Direct2D radial gradient brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not convert Direct2D radial gradient brush: %#lx", __FUNCTION__, hr); break; } } @@ -789,13 +780,13 @@ public: &bitmapBrush); if (FAILED(hr)) { - qWarning("%s: Could not create texture brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create texture brush: %#lx", __FUNCTION__, hr); break; } hr = bitmapBrush.As(&result); if (FAILED(hr)) - qWarning("%s: Could not convert texture brush: %#x", __FUNCTION__, hr); + qWarning("%s: Could not convert texture brush: %#lx", __FUNCTION__, hr); } break; } @@ -958,7 +949,8 @@ public: qWarning("%s: Could not convert path to d2d geometry", __FUNCTION__); return; } - dc()->DrawGeometry(geometry.Get(), pen.brush.Get(), pen.qpen.widthF(), pen.strokeStyle.Get()); + dc()->DrawGeometry(geometry.Get(), pen.brush.Get(), + FLOAT(pen.qpen.widthF()), pen.strokeStyle.Get()); return; } @@ -998,7 +990,7 @@ public: dashOffset = pen.dashLength - fmod(lineLength - dashOffset, pen.dashLength); } dc()->DrawLine(to_d2d_point_2f(p1), to_d2d_point_2f(p2), - brush, pen.qpen.widthF(), NULL); + brush, FLOAT(pen.qpen.widthF()), NULL); if (skipJoin) continue; @@ -1013,7 +1005,8 @@ public: writer.lineTo(p1); writer.lineTo(line.pointAt(patchSegment)); writer.close(); - dc()->DrawGeometry(writer.geometry().Get(), pen.brush.Get(), pen.qpen.widthF(), pen.strokeStyle.Get()); + dc()->DrawGeometry(writer.geometry().Get(), pen.brush.Get(), + FLOAT(pen.qpen.widthF()), pen.strokeStyle.Get()); } // Record the start position of the next joint jointStart = line.pointAt(1 - patchSegment); @@ -1025,7 +1018,8 @@ public: writer.lineTo(p2); writer.lineTo(QLineF(p2, QPointF(points[2], points[3])).pointAt(patchSegment)); writer.close(); - dc()->DrawGeometry(writer.geometry().Get(), pen.brush.Get(), pen.qpen.widthF(), pen.strokeStyle.Get()); + dc()->DrawGeometry(writer.geometry().Get(), pen.brush.Get(), + FLOAT(pen.qpen.widthF()), pen.strokeStyle.Get()); } } } @@ -1045,20 +1039,20 @@ public: const QString nameSubstitute = QSettings(QLatin1String(keyC), QSettings::NativeFormat).value(familyName, familyName).toString(); if (nameSubstitute != familyName) { const int nameSubstituteLength = qMin(nameSubstitute.length(), LF_FACESIZE - 1); - memcpy(lf.lfFaceName, nameSubstitute.utf16(), nameSubstituteLength * sizeof(wchar_t)); + memcpy(lf.lfFaceName, nameSubstitute.utf16(), size_t(nameSubstituteLength) * sizeof(wchar_t)); lf.lfFaceName[nameSubstituteLength] = 0; } ComPtr<IDWriteFont> dwriteFont; HRESULT hr = QWindowsDirect2DContext::instance()->dwriteGdiInterop()->CreateFontFromLOGFONT(&lf, &dwriteFont); if (FAILED(hr)) { - qDebug("%s: CreateFontFromLOGFONT failed: %#x", __FUNCTION__, hr); + qDebug("%s: CreateFontFromLOGFONT failed: %#lx", __FUNCTION__, hr); return fontFace; } hr = dwriteFont->CreateFontFace(&fontFace); if (FAILED(hr)) { - qDebug("%s: CreateFontFace failed: %#x", __FUNCTION__, hr); + qDebug("%s: CreateFontFace failed: %#lx", __FUNCTION__, hr); return fontFace; } @@ -1332,7 +1326,8 @@ void QWindowsDirect2DPaintEngine::drawRects(const QRect *rects, int rectCount) d->dc()->FillRectangle(d2d_rect, d->brush.brush.Get()); if (d->pen.brush) - d->dc()->DrawRectangle(d2d_rect, d->pen.brush.Get(), d->pen.qpen.widthF(), d->pen.strokeStyle.Get()); + d->dc()->DrawRectangle(d2d_rect, d->pen.brush.Get(), + FLOAT(d->pen.qpen.widthF()), d->pen.strokeStyle.Get()); } } } @@ -1359,7 +1354,8 @@ void QWindowsDirect2DPaintEngine::drawRects(const QRectF *rects, int rectCount) d->dc()->FillRectangle(d2d_rect, d->brush.brush.Get()); if (d->pen.brush) - d->dc()->DrawRectangle(d2d_rect, d->pen.brush.Get(), d->pen.qpen.widthF(), d->pen.strokeStyle.Get()); + d->dc()->DrawRectangle(d2d_rect, d->pen.brush.Get(), + FLOAT(d->pen.qpen.widthF()), d->pen.strokeStyle.Get()); } } } @@ -1407,7 +1403,9 @@ void QWindowsDirect2DPaintEngine::drawEllipse(const QRectF &r) d->dc()->FillEllipse(ellipse, d->brush.brush.Get()); if (d->pen.brush) - d->dc()->DrawEllipse(ellipse, d->pen.brush.Get(), d->pen.qpen.widthF(), d->pen.strokeStyle.Get()); + d->dc()->DrawEllipse(ellipse, d->pen.brush.Get(), + FLOAT(d->pen.qpen.widthF()), + d->pen.strokeStyle.Get()); } } @@ -1435,7 +1433,9 @@ void QWindowsDirect2DPaintEngine::drawEllipse(const QRect &r) d->dc()->FillEllipse(ellipse, d->brush.brush.Get()); if (d->pen.brush) - d->dc()->DrawEllipse(ellipse, d->pen.brush.Get(), d->pen.qpen.widthF(), d->pen.strokeStyle.Get()); + d->dc()->DrawEllipse(ellipse, d->pen.brush.Get(), + FLOAT(d->pen.qpen.widthF()), + d->pen.strokeStyle.Get()); } } @@ -1490,12 +1490,12 @@ void QWindowsDirect2DPaintEngine::drawPixmap(const QRectF &r, // Good, src bitmap != dst bitmap if (sr.isValid()) d->dc()->DrawBitmap(bitmap->bitmap(), - to_d2d_rect_f(r), state()->opacity, + to_d2d_rect_f(r), FLOAT(state()->opacity), d->interpolationMode(), to_d2d_rect_f(sr)); else d->dc()->DrawBitmap(bitmap->bitmap(), - to_d2d_rect_f(r), state()->opacity, + to_d2d_rect_f(r), FLOAT(state()->opacity), d->interpolationMode()); } else { // Ok, so the source pixmap and destination pixmap is the same. @@ -1504,7 +1504,7 @@ void QWindowsDirect2DPaintEngine::drawPixmap(const QRectF &r, QWindowsDirect2DBitmap intermediate; if (sr.isValid()) { - bool r = intermediate.resize(sr.width(), sr.height()); + bool r = intermediate.resize(int(sr.width()), int(sr.height())); if (!r) { qWarning("%s: Could not resize intermediate bitmap to source rect size", __FUNCTION__); return; @@ -1515,7 +1515,7 @@ void QWindowsDirect2DPaintEngine::drawPixmap(const QRectF &r, bitmap->bitmap(), &d2d_sr); if (FAILED(hr)) { - qWarning("%s: Could not copy source rect area from source bitmap to intermediate bitmap: %#x", __FUNCTION__, hr); + qWarning("%s: Could not copy source rect area from source bitmap to intermediate bitmap: %#lx", __FUNCTION__, hr); return; } } else { @@ -1530,13 +1530,13 @@ void QWindowsDirect2DPaintEngine::drawPixmap(const QRectF &r, bitmap->bitmap(), NULL); if (FAILED(hr)) { - qWarning("%s: Could not copy source bitmap to intermediate bitmap: %#x", __FUNCTION__, hr); + qWarning("%s: Could not copy source bitmap to intermediate bitmap: %#lx", __FUNCTION__, hr); return; } } d->dc()->DrawBitmap(intermediate.bitmap(), - to_d2d_rect_f(r), state()->opacity, + to_d2d_rect_f(r), FLOAT(state()->opacity), d->interpolationMode()); } } @@ -1573,9 +1573,9 @@ void QWindowsDirect2DPaintEngine::drawStaticTextItem(QStaticTextItem *staticText // This looks a little funky because the positions are precalculated glyphAdvances[i] = 0; - glyphOffsets[i].advanceOffset = staticTextItem->glyphPositions[i].x.toReal(); + glyphOffsets[i].advanceOffset = FLOAT(staticTextItem->glyphPositions[i].x.toReal()); // Qt and Direct2D seem to disagree on the direction of the ascender offset... - glyphOffsets[i].ascenderOffset = staticTextItem->glyphPositions[i].y.toReal() * -1; + glyphOffsets[i].ascenderOffset = FLOAT(staticTextItem->glyphPositions[i].y.toReal() * -1); } d->drawGlyphRun(D2D1::Point2F(0, 0), @@ -1618,11 +1618,11 @@ void QWindowsDirect2DPaintEngine::drawTextItem(const QPointF &p, const QTextItem for (int i = 0; i < ti.glyphs.numGlyphs; i++) { glyphIndices[i] = UINT16(ti.glyphs.glyphs[i]); // Imperfect conversion here - glyphAdvances[i] = ti.glyphs.effectiveAdvance(i).toReal(); - glyphOffsets[i].advanceOffset = ti.glyphs.offsets[i].x.toReal(); + glyphAdvances[i] = FLOAT(ti.glyphs.effectiveAdvance(i).toReal()); + glyphOffsets[i].advanceOffset = FLOAT(ti.glyphs.offsets[i].x.toReal()); // XXX Should we negate the y value like for static text items? - glyphOffsets[i].ascenderOffset = ti.glyphs.offsets[i].y.toReal(); + glyphOffsets[i].ascenderOffset = FLOAT(ti.glyphs.offsets[i].y.toReal()); } const bool rtl = (ti.flags & QTextItem::RightToLeft); diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.cpp index e7e2fa4ff7..65e056d312 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.cpp @@ -57,15 +57,12 @@ public: : owns_bitmap(true) , bitmap(new QWindowsDirect2DBitmap) , device(new QWindowsDirect2DPaintDevice(bitmap, QInternal::Pixmap)) - , devicePixelRatio(1.0) {} QWindowsDirect2DPlatformPixmapPrivate(QWindowsDirect2DBitmap *bitmap, QWindowsDirect2DPaintEngine::Flags flags) - : owns_bitmap(false) - , bitmap(bitmap) + : bitmap(bitmap) , device(new QWindowsDirect2DPaintDevice(bitmap, QInternal::Pixmap, flags)) - , devicePixelRatio(1.0) {} ~QWindowsDirect2DPlatformPixmapPrivate() @@ -74,10 +71,10 @@ public: delete bitmap; } - bool owns_bitmap; + bool owns_bitmap = false; QWindowsDirect2DBitmap *bitmap; QScopedPointer<QWindowsDirect2DPaintDevice> device; - qreal devicePixelRatio; + qreal devicePixelRatio = 1.0; }; static int qt_d2dpixmap_serno = 0; diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp index c750b02078..21294cfb15 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp @@ -54,7 +54,6 @@ QT_BEGIN_NAMESPACE QWindowsDirect2DWindow::QWindowsDirect2DWindow(QWindow *window, const QWindowsWindowData &data) : QWindowsWindow(window, data) - , m_needsFullFlush(true) , m_directRendering(!(data.flags & Qt::FramelessWindowHint && window->format().hasAlpha())) { if (window->type() == Qt::Desktop) @@ -67,7 +66,7 @@ QWindowsDirect2DWindow::QWindowsDirect2DWindow(QWindow *window, const QWindowsWi D2D1_DEVICE_CONTEXT_OPTIONS_NONE, m_deviceContext.GetAddressOf()); if (FAILED(hr)) - qWarning("%s: Couldn't create Direct2D Device context: %#x", __FUNCTION__, hr); + qWarning("%s: Couldn't create Direct2D Device context: %#lx", __FUNCTION__, hr); } QWindowsDirect2DWindow::~QWindowsDirect2DWindow() @@ -100,12 +99,12 @@ void QWindowsDirect2DWindow::flush(QWindowsDirect2DBitmap *bitmap, const QRegion HRESULT hr = m_swapChain->GetDesc1(&desc); QRect geom = geometry(); - if ((FAILED(hr) || (desc.Width != geom.width()) || (desc.Height != geom.height()))) { + if (FAILED(hr) || (desc.Width != UINT(geom.width()) || (desc.Height != UINT(geom.height())))) { resizeSwapChain(geom.size()); m_swapChain->GetDesc1(&desc); } - size.setWidth(desc.Width); - size.setHeight(desc.Height); + size.setWidth(int(desc.Width)); + size.setHeight(int(desc.Height)); } else { size = geometry().size(); } @@ -175,7 +174,7 @@ void QWindowsDirect2DWindow::present(const QRegion ®ion) UPDATELAYEREDWINDOWINFO info = { sizeof(UPDATELAYEREDWINDOWINFO), NULL, &ptDst, &size, hdc, &ptSrc, 0, &blend, ULW_ALPHA, &dirty }; if (!UpdateLayeredWindowIndirect(handle(), &info)) - qErrnoWarning(GetLastError(), "Failed to update the layered window"); + qErrnoWarning(int(GetLastError()), "Failed to update the layered window"); hr = dxgiSurface->ReleaseDC(NULL); if (FAILED(hr)) @@ -201,7 +200,7 @@ void QWindowsDirect2DWindow::setupSwapChain() m_swapChain.ReleaseAndGetAddressOf()); // [out] IDXGISwapChain1 **ppSwapChain if (FAILED(hr)) - qWarning("%s: Could not create swap chain: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create swap chain: %#lx", __FUNCTION__, hr); m_needsFullFlush = true; } @@ -217,11 +216,11 @@ void QWindowsDirect2DWindow::resizeSwapChain(const QSize &size) return; HRESULT hr = m_swapChain->ResizeBuffers(0, - size.width(), size.height(), + UINT(size.width()), UINT(size.height()), DXGI_FORMAT_UNKNOWN, 0); if (FAILED(hr)) - qWarning("%s: Could not resize swap chain: %#x", __FUNCTION__, hr); + qWarning("%s: Could not resize swap chain: %#lx", __FUNCTION__, hr); } QSharedPointer<QWindowsDirect2DBitmap> QWindowsDirect2DWindow::copyBackBuffer() const @@ -248,13 +247,13 @@ QSharedPointer<QWindowsDirect2DBitmap> QWindowsDirect2DWindow::copyBackBuffer() HRESULT hr = m_deviceContext.Get()->CreateBitmap(size, NULL, 0, properties, ©); if (FAILED(hr)) { - qWarning("%s: Could not create staging bitmap: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create staging bitmap: %#lx", __FUNCTION__, hr); return null_result; } hr = copy.Get()->CopyFromBitmap(NULL, m_bitmap->bitmap(), NULL); if (FAILED(hr)) { - qWarning("%s: Could not copy from bitmap! %#x", __FUNCTION__, hr); + qWarning("%s: Could not copy from bitmap! %#lx", __FUNCTION__, hr); return null_result; } @@ -277,12 +276,12 @@ void QWindowsDirect2DWindow::setupBitmap() if (m_directRendering) { hr = m_swapChain->GetBuffer(0, IID_PPV_ARGS(&backBufferSurface)); if (FAILED(hr)) { - qWarning("%s: Could not query backbuffer for DXGI Surface: %#x", __FUNCTION__, hr); + qWarning("%s: Could not query backbuffer for DXGI Surface: %#lx", __FUNCTION__, hr); return; } } else { const QRect rect = geometry(); - CD3D11_TEXTURE2D_DESC backBufferDesc(DXGI_FORMAT_B8G8R8A8_UNORM, rect.width(), rect.height(), 1, 1); + CD3D11_TEXTURE2D_DESC backBufferDesc(DXGI_FORMAT_B8G8R8A8_UNORM, UINT(rect.width()), UINT(rect.height()), 1, 1); backBufferDesc.BindFlags = D3D11_BIND_RENDER_TARGET; backBufferDesc.MiscFlags = D3D11_RESOURCE_MISC_GDI_COMPATIBLE; ComPtr<ID3D11Texture2D> backBufferTexture; @@ -302,7 +301,7 @@ void QWindowsDirect2DWindow::setupBitmap() ComPtr<ID2D1Bitmap1> backBufferBitmap; hr = m_deviceContext->CreateBitmapFromDxgiSurface(backBufferSurface.Get(), NULL, backBufferBitmap.GetAddressOf()); if (FAILED(hr)) { - qWarning("%s: Could not create Direct2D Bitmap from DXGI Surface: %#x", __FUNCTION__, hr); + qWarning("%s: Could not create Direct2D Bitmap from DXGI Surface: %#lx", __FUNCTION__, hr); return; } diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h index 2da0e5f507..156d4660d1 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h @@ -74,8 +74,8 @@ private: Microsoft::WRL::ComPtr<ID2D1DeviceContext> m_deviceContext; QScopedPointer<QWindowsDirect2DBitmap> m_bitmap; QScopedPointer<QPixmap> m_pixmap; - bool m_needsFullFlush; - bool m_directRendering; + bool m_needsFullFlush = true; + bool m_directRendering = false; }; QT_END_NAMESPACE |