1 #include "evas_common.h"
2 #include "evas_engine.h"
6 evas_software_ddraw_output_buffer_new(HWND window,
8 LPDIRECTDRAWSURFACE surface_primary,
9 LPDIRECTDRAWSURFACE surface_back,
10 LPDIRECTDRAWSURFACE surface_source,
14 DDSURFACEDESC surface_desc;
15 DDraw_Output_Buffer *ddob;
17 ddob = (DDraw_Output_Buffer *)calloc(1, sizeof(DDraw_Output_Buffer));
18 if (!ddob) return NULL;
20 ddob->dd.window = window;
21 ddob->dd.object = object;
22 ddob->dd.surface_primary = surface_primary;
23 ddob->dd.surface_back = surface_back;
24 ddob->dd.surface_source = surface_source;
26 ddob->height = height;
27 ddob->pitch = width * 2;
29 ZeroMemory(&surface_desc, sizeof(surface_desc));
30 surface_desc.dwSize = sizeof(surface_desc);
32 if (FAILED(ddob->dd.surface_source->Lock(NULL,
34 DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR,
41 ddob->im.pixels = (DATA16 *)surface_desc.lpSurface;
44 ddob->im.stride = width;
45 ddob->im.references = 1;
47 if (FAILED(ddob->dd.surface_source->Unlock(NULL)))
57 evas_software_ddraw_output_buffer_free(DDraw_Output_Buffer *ddob, int sync)
63 evas_software_ddraw_output_buffer_paste(DDraw_Output_Buffer *ddob)
69 SetRect(&src_rect, 0, 0, ddob->width, ddob->height);
71 if (FAILED(ddob->dd.surface_back->BltFast(0, 0,
72 ddob->dd.surface_source,
74 DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT)))
79 ClientToScreen(ddob->dd.window, &p);
80 GetClientRect(ddob->dd.window, &dst_rect);
81 OffsetRect(&dst_rect, p.x, p.y);
82 ddob->dd.surface_primary->Blt(&dst_rect,
83 ddob->dd.surface_back, &src_rect,