Henri Verbeet : d2d1: Implement d2d_d3d_render_target_DrawBitmap().

Alexandre Julliard julliard at wine.codeweavers.com
Fri Feb 6 10:41:39 CST 2015


Module: wine
Branch: master
Commit: 2f2e1b98fd285e76352a4d9b922d1eeb17535fcb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2f2e1b98fd285e76352a4d9b922d1eeb17535fcb

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Fri Feb  6 09:57:02 2015 +0100

d2d1: Implement d2d_d3d_render_target_DrawBitmap().

---

 dlls/d2d1/render_target.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 55 insertions(+), 1 deletion(-)

diff --git a/dlls/d2d1/render_target.c b/dlls/d2d1/render_target.c
index 3d9abb8..f109849 100644
--- a/dlls/d2d1/render_target.c
+++ b/dlls/d2d1/render_target.c
@@ -709,8 +709,62 @@ static void STDMETHODCALLTYPE d2d_d3d_render_target_DrawBitmap(ID2D1RenderTarget
         ID2D1Bitmap *bitmap, const D2D1_RECT_F *dst_rect, float opacity,
         D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode, const D2D1_RECT_F *src_rect)
 {
-    FIXME("iface %p, bitmap %p, dst_rect %p, opacity %.8e, interpolation_mode %#x, src_rect %p stub!\n",
+    D2D1_BITMAP_BRUSH_PROPERTIES bitmap_brush_desc;
+    D2D1_BRUSH_PROPERTIES brush_desc;
+    ID2D1BitmapBrush *brush;
+    D2D1_RECT_F s, d;
+    HRESULT hr;
+
+    TRACE("iface %p, bitmap %p, dst_rect %p, opacity %.8e, interpolation_mode %#x, src_rect %p.\n",
             iface, bitmap, dst_rect, opacity, interpolation_mode, src_rect);
+
+    if (src_rect)
+    {
+        s = *src_rect;
+    }
+    else
+    {
+        D2D1_SIZE_F size;
+
+        size = ID2D1Bitmap_GetSize(bitmap);
+        s.left = 0.0f;
+        s.top = 0.0f;
+        s.right = size.width;
+        s.bottom = size.height;
+    }
+
+    if (dst_rect)
+    {
+        d = *dst_rect;
+    }
+    else
+    {
+        d.left = 0.0f;
+        d.top = 0.0f;
+        d.right = s.right - s.left;
+        d.bottom = s.bottom - s.top;
+    }
+
+    bitmap_brush_desc.extendModeX = D2D1_EXTEND_MODE_CLAMP;
+    bitmap_brush_desc.extendModeY = D2D1_EXTEND_MODE_CLAMP;
+    bitmap_brush_desc.interpolationMode = interpolation_mode;
+
+    brush_desc.opacity = opacity;
+    brush_desc.transform._11 = (d.right - d.left) / (s.right - s.left);
+    brush_desc.transform._21 = 0.0f;
+    brush_desc.transform._31 = d.left;
+    brush_desc.transform._12 = 0.0f;
+    brush_desc.transform._22 = (d.bottom - d.top) / (s.bottom - s.top);
+    brush_desc.transform._32 = d.top;
+
+    if (FAILED(hr = ID2D1RenderTarget_CreateBitmapBrush(iface, bitmap, &bitmap_brush_desc, &brush_desc, &brush)))
+    {
+        ERR("Failed to create bitmap brush, hr %#x.\n", hr);
+        return;
+    }
+
+    ID2D1RenderTarget_FillRectangle(iface, &d, (ID2D1Brush *)brush);
+    ID2D1BitmapBrush_Release(brush);
 }
 
 static void STDMETHODCALLTYPE d2d_d3d_render_target_DrawText(ID2D1RenderTarget *iface,




More information about the wine-cvs mailing list