#include #include "evas_common.h" #include "evas_engine.h" Gdi_Output_Buffer * evas_software_gdi_output_buffer_new(HDC dc, BITMAPINFO_GDI *bitmap_info, int depth, int width, int height, void *data) { Gdi_Output_Buffer *gdiob; gdiob = calloc(1, sizeof(Gdi_Output_Buffer)); if (!gdiob) return NULL; if (!data) { bitmap_info->bih.biWidth = width; bitmap_info->bih.biHeight = -height; bitmap_info->bih.biSizeImage = (depth >> 3) * width * height; gdiob->bitmap = CreateDIBSection(dc, (const BITMAPINFO *)bitmap_info, DIB_RGB_COLORS, (void **)(&data), NULL, 0); if (!gdiob->bitmap) { free(gdiob); return NULL; } } gdiob->bitmap_info = bitmap_info; gdiob->dc = dc; gdiob->data = data; gdiob->width = width; gdiob->height = height; gdiob->depth = depth; gdiob->pitch = width * (depth >> 3); /* gdiob->psize = gdiob->pitch * height; */ return gdiob; } void evas_software_gdi_output_buffer_free(Gdi_Output_Buffer *gdiob) { DeleteObject(gdiob->bitmap); free(gdiob); } void evas_software_gdi_output_buffer_paste(Gdi_Output_Buffer *gdiob, int x, int y) { HDC dc; dc = CreateCompatibleDC(gdiob->dc); if (!dc) return; SelectObject(dc, gdiob->bitmap); BitBlt(gdiob->dc, x, y, gdiob->width, gdiob->height, dc, 0, 0, SRCCOPY); DeleteDC(dc); } DATA8 * evas_software_gdi_output_buffer_data(Gdi_Output_Buffer *gdiob, int *pitch) { if (pitch) *pitch = gdiob->pitch; return gdiob->data; } int evas_software_gdi_output_buffer_depth(Gdi_Output_Buffer *gdiob) { return gdiob->depth; }