diff src/video/win32/SDL_win32shape.c @ 4785:ef8b32ef9793

Updated test code, updated win32 code a bit (still not complete, but hopefully tonight), and removed the last vestiges of ellipse and polygon drawing support.
author Eli Gottlieb <eligottlieb@gmail.com>
date Tue, 06 Jul 2010 22:05:22 -0400
parents 6e03d73054d7
children e25ad8d97027
line wrap: on
line diff
--- a/src/video/win32/SDL_win32shape.c	Fri Jul 02 12:05:47 2010 -0400
+++ b/src/video/win32/SDL_win32shape.c	Tue Jul 06 22:05:22 2010 -0400
@@ -20,6 +20,65 @@
     eligottlieb@gmail.com
 */
 
-#include "SDL_shape.h"
+#include <windows.h>
+#include "SDL_win32shape.h"
+
+SDL_WindowShaper* Win32_CreateShaper(SDL_Window * window) {
+	SDL_WindowShaper* result = malloc(sizeof(SDL_WindowShaper));
+	result->window = window;
+	result->alphacutoff = 0;
+	result->usershownflag = 0;
+	//Put some driver-data here.
+	window->shaper = result;
+	int resized_properly = X11ResizeWindowShape(window);
+	assert(resized_properly == 0);
+	return result;
+}
 
-/* Functions implementing shaped windows for Win32 will be implemented when the API is set. */
+int Win32_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode) {
+	assert(shaper != NULL && shape != NULL);
+	if(!SDL_ISPIXELFORMAT_ALPHA(SDL_MasksToPixelFormatEnum(shape->format->BitsPerPixel,shape->format->Rmask,shape->format->Gmask,shape->format->Bmask,shape->format->Amask)))
+		return -2;
+	if(shape->w != shaper->window->w || shape->h != shaper->window->h)
+		return -3;
+	
+	/* Assume that shaper->alphacutoff already has a value, because SDL_SetWindowShape() should have given it one. */
+	/*
+	 * Start with empty region 
+	 */
+	HRGN MaskRegion = CreateRectRgn(0, 0, 0, 0);
+	
+	unsigned int pitch = shape->pitch;
+	unsigned int width = shape->width;
+	unsigned int height = shape->height;
+	unsigned int dy = pitch - width;
+	
+	SDL_ShapeData *data = (SDL_ShapeData*)shaper->driverdata;
+	/*
+	 * Transfer binarized mask image into workbuffer 
+	 */
+	SDL_CalculateShapeBitmap(shaper->alphacutoff,shape,data->shapebuffer,1,0xff);
+	//Move code over to here from AW_windowShape.c
+	
+}
+
+int Win32_ResizeWindowShape(SDL_Window *window) {
+	SDL_ShapeData* data = window->shaper->driverdata;
+	assert(data != NULL);
+	
+	unsigned int buffersize = window->w * window->h;
+	if(data->buffersize != buffersize || data->shapebuffer == NULL) {
+		data->buffersize = buffersize;
+		if(data->shapebuffer != NULL)
+			free(data->shapebuffer);
+		data->shapebuffer = malloc(data->buffersize);
+		if(data->shapebuffer == NULL) {
+			SDL_SetError("Could not allocate memory for shaped-window bitmap.");
+			return -1;
+		}
+	}
+	
+	window->shaper->usershownflag = window->flags & SDL_WINDOW_SHOWN;
+	
+	return 0;
+}