diff --git a/gdk/win32/gdkimage.c b/gdk/win32/gdkimage.c deleted file mode 100644 index 0f2825e405..0000000000 --- a/gdk/win32/gdkimage.c +++ /dev/null @@ -1,759 +0,0 @@ -/* GDK - The GIMP Drawing Kit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#include "config.h" - -#include "gdk.h" /* For gdk_error_trap_* / gdk_flush_* */ -#include "gdkimage.h" -#include "gdkprivate.h" -#include "gdkx.h" - -static void gdk_image_put_normal (GdkDrawable *drawable, - GdkGC *gc, - GdkImage *image, - gint xsrc, - gint ysrc, - gint xdest, - gint ydest, - gint width, - gint height); -static GList *image_list = NULL; - -void -gdk_image_exit (void) -{ - GdkImage *image; - - while (image_list) - { - image = image_list->data; - gdk_image_destroy (image); - } -} - -GdkImage * -gdk_image_new_bitmap (GdkVisual *visual, gpointer data, gint w, gint h) -/* - * Desc: create a new bitmap image - */ -{ - Visual *xvisual; - GdkImage *image; - GdkImagePrivate *private; - struct { - BITMAPINFOHEADER bmiHeader; - union { - WORD bmiIndices[2]; - RGBQUAD bmiColors[2]; - } u; - } bmi; - char *bits; - int bpl = (w-1)/8 + 1; - int bpl32 = ((w-1)/32 + 1)*4; - - private = g_new(GdkImagePrivate, 1); - image = (GdkImage *) private; - private->image_put = gdk_image_put_normal; - image->type = GDK_IMAGE_SHARED; - image->visual = visual; - image->width = w; - image->height = h; - image->depth = 1; - xvisual = ((GdkVisualPrivate*) visual)->xvisual; - - GDK_NOTE (MISC, g_print ("gdk_image_new_bitmap: %dx%d\n", w, h)); - - bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER); - bmi.bmiHeader.biWidth = w; - bmi.bmiHeader.biHeight = -h; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = 1; - bmi.bmiHeader.biCompression = BI_RGB; - bmi.bmiHeader.biSizeImage = 0; - bmi.bmiHeader.biXPelsPerMeter = - bmi.bmiHeader.biYPelsPerMeter = 0; - bmi.bmiHeader.biClrUsed = 0; - bmi.bmiHeader.biClrImportant = 0; - - bmi.u.bmiColors[0].rgbBlue = - bmi.u.bmiColors[0].rgbGreen = - bmi.u.bmiColors[0].rgbRed = 0x00; - bmi.u.bmiColors[0].rgbReserved = 0x00; - - bmi.u.bmiColors[1].rgbBlue = - bmi.u.bmiColors[1].rgbGreen = - bmi.u.bmiColors[1].rgbRed = 0xFF; - bmi.u.bmiColors[1].rgbReserved = 0x00; - - private->ximage = CreateDIBSection (gdk_DC, (BITMAPINFO *) &bmi, - DIB_RGB_COLORS, &bits, NULL, 0); - if (bpl != bpl32) - { - /* Win32 expects scanlines in DIBs to be 32 bit aligned */ - int i; - for (i = 0; i < h; i++) - memmove (bits + i*bpl32, ((char *) data) + i*bpl, bpl); - } - else - memmove (bits, data, bpl*h); - image->mem = bits; - image->bpl = bpl32; - image->byte_order = GDK_MSB_FIRST; - - image->bpp = 1; - return(image); -} /* gdk_image_new_bitmap() */ - -void -gdk_image_init (void) -{ -} - -static GdkImage* -gdk_image_new_with_depth (GdkImageType type, - GdkVisual *visual, - gint width, - gint height, - gint depth) -{ - GdkImage *image; - GdkImagePrivate *private; - Visual *xvisual; - struct { - BITMAPINFOHEADER bmiHeader; - union { - WORD bmiIndices[256]; - DWORD bmiMasks[3]; - RGBQUAD bmiColors[256]; - } u; - } bmi; - UINT iUsage; - int i; - - if (type == GDK_IMAGE_FASTEST || type == GDK_IMAGE_NORMAL) - type = GDK_IMAGE_SHARED; - - GDK_NOTE (MISC, g_print ("gdk_image_new_with_depth: %dx%dx%d %s\n", - width, height, depth, - (type == GDK_IMAGE_SHARED ? "shared" : - (type == GDK_IMAGE_SHARED_PIXMAP ? "shared_pixmap" : - "???")))); - - private = g_new (GdkImagePrivate, 1); - image = (GdkImage*) private; - - private->image_put = NULL; - - image->type = type; - image->visual = visual; - image->width = width; - image->height = height; - image->depth = depth; - - xvisual = ((GdkVisualPrivate*) visual)->xvisual; - - private->image_put = gdk_image_put_normal; - - bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER); - bmi.bmiHeader.biWidth = width; - bmi.bmiHeader.biHeight = -height; - bmi.bmiHeader.biPlanes = 1; - if (depth == 15) - bmi.bmiHeader.biBitCount = 16; - else - bmi.bmiHeader.biBitCount = depth; -#if 1 - if (depth == 16) - bmi.bmiHeader.biCompression = BI_BITFIELDS; - else -#endif - bmi.bmiHeader.biCompression = BI_RGB; - bmi.bmiHeader.biSizeImage = 0; - bmi.bmiHeader.biXPelsPerMeter = - bmi.bmiHeader.biYPelsPerMeter = 0; - bmi.bmiHeader.biClrUsed = 0; - bmi.bmiHeader.biClrImportant = 0; - - if (image->visual->type == GDK_VISUAL_PSEUDO_COLOR) - { - iUsage = DIB_PAL_COLORS; - for (i = 0; i < 256; i++) - bmi.u.bmiIndices[i] = i; - } - else - { - if (depth == 1) - { - bmi.u.bmiColors[0].rgbBlue = - bmi.u.bmiColors[0].rgbGreen = - bmi.u.bmiColors[0].rgbRed = 0x00; - bmi.u.bmiColors[0].rgbReserved = 0x00; - - bmi.u.bmiColors[1].rgbBlue = - bmi.u.bmiColors[1].rgbGreen = - bmi.u.bmiColors[1].rgbRed = 0xFF; - bmi.u.bmiColors[1].rgbReserved = 0x00; - - } -#if 1 - else if (depth == 16) - { - bmi.u.bmiMasks[0] = visual->red_mask; - bmi.u.bmiMasks[1] = visual->green_mask; - bmi.u.bmiMasks[2] = visual->blue_mask; - } -#endif - iUsage = DIB_RGB_COLORS; - } - - private->ximage = - CreateDIBSection (gdk_DC, (BITMAPINFO *) &bmi, iUsage, - &image->mem, NULL, 0); - - if (private->ximage == NULL) - { - g_warning ("gdk_image_new_with_depth: CreateDIBSection failed"); - g_free (image); - return NULL; - } - - switch (depth) - { - case 1: - case 8: - image->bpp = 1; - break; - case 15: - case 16: - image->bpp = 2; - break; - case 24: - image->bpp = 3; - break; - case 32: - image->bpp = 4; - break; - default: - g_warning ("gdk_image_new_with_depth: depth = %d", depth); - g_assert_not_reached (); - } - image->byte_order = GDK_LSB_FIRST; - if (depth == 1) - image->bpl = ((width-1)/32 + 1)*4; - else - image->bpl = ((width*image->bpp - 1)/4 + 1)*4; - - GDK_NOTE (MISC, g_print ("... = %#x mem = %#x, bpl = %d\n", - private->ximage, image->mem, image->bpl)); - - return image; -} - -GdkImage* -gdk_image_new (GdkImageType type, - GdkVisual *visual, - gint width, - gint height) -{ - GdkVisualPrivate *visual_private = (GdkVisualPrivate *) visual; - return gdk_image_new_with_depth (type, visual, width, height, - visual_private->xvisual->bitspixel); -} - -GdkImage* -gdk_image_bitmap_new (GdkImageType type, - GdkVisual *visual, - gint width, - gint height) -{ - return gdk_image_new_with_depth (type, visual, width, height, 1); -} - -GdkImage* -gdk_image_get (GdkWindow *window, - gint x, - gint y, - gint width, - gint height) -{ - GdkImage *image; - GdkImagePrivate *private; - HDC hdc, memdc; - struct { - BITMAPINFOHEADER bmiHeader; - union { - WORD bmiIndices[256]; - DWORD bmiMasks[3]; - RGBQUAD bmiColors[256]; - } u; - } bmi; - HGDIOBJ oldbitmap1, oldbitmap2; - UINT iUsage; - BITMAP bm; - int i; - - g_return_val_if_fail (window != NULL, NULL); - - if (GDK_DRAWABLE_DESTROYED (window)) - return NULL; - - GDK_NOTE (MISC, g_print ("gdk_image_get: %#x %dx%d@+%d+%d\n", - GDK_DRAWABLE_XID (window), width, height, x, y)); - - private = g_new (GdkImagePrivate, 1); - image = (GdkImage*) private; - - private->image_put = gdk_image_put_normal; - - image->type = GDK_IMAGE_SHARED; - image->visual = gdk_window_get_visual (window); - image->width = width; - image->height = height; - - /* This function is called both to blit from a window and from - * a pixmap. - */ - if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP) - { - if ((hdc = CreateCompatibleDC (NULL)) == NULL) - { - g_warning ("gdk_image_get: CreateCompatibleDC #1 failed"); - g_free (image); - return NULL; - } - if ((oldbitmap1 = SelectObject (hdc, GDK_DRAWABLE_XID (window))) == NULL) - { - g_warning ("gdk_image_get: SelectObject #1 failed"); - DeleteDC (hdc); - g_free (image); - return NULL; - } - GetObject (GDK_DRAWABLE_XID (window), sizeof (BITMAP), &bm); - GDK_NOTE (MISC, - g_print ("gdk_image_get: bmWidth = %d, bmHeight = %d, bmWidthBytes = %d, bmBitsPixel = %d\n", - bm.bmWidth, bm.bmHeight, bm.bmWidthBytes, bm.bmBitsPixel)); - image->depth = bm.bmBitsPixel; - if (image->depth <= 8) - { - iUsage = DIB_PAL_COLORS; - for (i = 0; i < 256; i++) - bmi.u.bmiIndices[i] = i; - } - else - iUsage = DIB_RGB_COLORS; - } - else - { - if ((hdc = GetDC (GDK_DRAWABLE_XID (window))) == NULL) - { - g_warning ("gdk_image_get: GetDC failed"); - g_free (image); - return NULL; - } - image->depth = gdk_visual_get_system ()->depth; - if (image->visual->type == GDK_VISUAL_PSEUDO_COLOR) - { - iUsage = DIB_PAL_COLORS; - for (i = 0; i < 256; i++) - bmi.u.bmiIndices[i] = i; - } - else - iUsage = DIB_RGB_COLORS; - } - - if ((memdc = CreateCompatibleDC (hdc)) == NULL) - { - g_warning ("gdk_image_get: CreateCompatibleDC #2 failed"); - if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP) - { - SelectObject (hdc, oldbitmap1); - DeleteDC (hdc); - } - else - { - ReleaseDC (GDK_DRAWABLE_XID (window), hdc); - } - g_free (image); - return NULL; - } - - bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER); - bmi.bmiHeader.biWidth = width; - bmi.bmiHeader.biHeight = -height; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = image->depth; - if (image->depth == 16) - { - bmi.bmiHeader.biCompression = BI_BITFIELDS; - if (image->visual == NULL) - { - /* XXX ??? Is it always this if depth==16 and a pixmap? Guess so. */ - bmi.u.bmiMasks[0] = 0xf800; - bmi.u.bmiMasks[1] = 0x07e0; - bmi.u.bmiMasks[2] = 0x001f; - } - else - { - bmi.u.bmiMasks[0] = image->visual->red_mask; - bmi.u.bmiMasks[1] = image->visual->green_mask; - bmi.u.bmiMasks[2] = image->visual->blue_mask; - } - } - else - bmi.bmiHeader.biCompression = BI_RGB; - bmi.bmiHeader.biSizeImage = 0; - bmi.bmiHeader.biXPelsPerMeter = - bmi.bmiHeader.biYPelsPerMeter = 0; - bmi.bmiHeader.biClrUsed = 0; - bmi.bmiHeader.biClrImportant = 0; - - if ((private->ximage = - CreateDIBSection (hdc, (BITMAPINFO *) &bmi, iUsage, - &image->mem, NULL, 0)) == NULL) - { - g_warning ("gdk_image_get: CreateDIBSection failed"); - DeleteDC (memdc); - if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP) - { - SelectObject (hdc, oldbitmap1); - DeleteDC (hdc); - } - else - { - ReleaseDC (GDK_DRAWABLE_XID (window), hdc); - } - g_free (image); - return NULL; - } - - if ((oldbitmap2 = SelectObject (memdc, private->ximage)) == NULL) - { - g_warning ("gdk_image_get: SelectObject #2 failed"); - DeleteObject (private->ximage); - DeleteDC (memdc); - if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP) - { - SelectObject (hdc, oldbitmap1); - DeleteDC (hdc); - } - else - { - ReleaseDC (GDK_DRAWABLE_XID (window), hdc); - } - g_free (image); - return NULL; - } - - if (!BitBlt (memdc, 0, 0, width, height, hdc, x, y, SRCCOPY)) - { - g_warning ("gdk_image_get: BitBlt failed"); - SelectObject (memdc, oldbitmap2); - DeleteObject (private->ximage); - DeleteDC (memdc); - if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP) - { - SelectObject (hdc, oldbitmap1); - DeleteDC (hdc); - } - else - { - ReleaseDC (GDK_DRAWABLE_XID (window), hdc); - } - g_free (image); - return NULL; - } - - if (SelectObject (memdc, oldbitmap2) == NULL) - g_warning ("gdk_image_get: SelectObject #3 failed"); - - if (!DeleteDC (memdc)) - g_warning ("gdk_image_get: DeleteDC failed"); - - if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP) - { - SelectObject (hdc, oldbitmap1); - DeleteDC (hdc); - } - else - { - ReleaseDC (GDK_DRAWABLE_XID (window), hdc); - } - - switch (image->depth) - { - case 1: - case 8: - image->bpp = 1; - break; - case 15: - case 16: - image->bpp = 2; - break; - case 24: - image->bpp = 3; - break; - case 32: - image->bpp = 4; - break; - default: - g_warning ("gdk_image_get: image->depth = %d", image->depth); - g_assert_not_reached (); - } - image->byte_order = GDK_LSB_FIRST; - if (image->depth == 1) - image->bpl = ((width - 1)/32 + 1)*4; - else - image->bpl = ((width*image->bpp - 1)/4 + 1)*4; - - GDK_NOTE (MISC, g_print ("... = %#x mem = %#x, bpl = %d\n", - private->ximage, image->mem, image->bpl)); - - return image; -} - -guint32 -gdk_image_get_pixel (GdkImage *image, - gint x, - gint y) -{ - guint32 pixel; - GdkImagePrivate *private; - - g_return_val_if_fail (image != NULL, 0); - - private = (GdkImagePrivate *) image; - - g_return_val_if_fail (x >= 0 && x < image->width - && y >= 0 && y < image->height, 0); - - if (image->depth == 1) - pixel = (((char *) image->mem)[y * image->bpl + (x >> 3)] & (1 << (7 - (x & 0x7)))) != 0; - else - { - guchar *pixelp = (guchar *) image->mem + y * image->bpl + x * image->bpp; - - switch (image->bpp) - { - case 1: - pixel = *pixelp; - break; - - /* Windows is always LSB, no need to check image->byte_order. */ - case 2: - pixel = pixelp[0] | (pixelp[1] << 8); - break; - - case 3: - pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16); - break; - - case 4: - pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16); - break; - } - } - - return pixel; -} - -void -gdk_image_put_pixel (GdkImage *image, - gint x, - gint y, - guint32 pixel) -{ - GdkImagePrivate *private; - - g_return_if_fail (image != NULL); - - private = (GdkImagePrivate *) image; - - g_return_if_fail (x >= 0 && x < image->width && y >= 0 && y < image->height); - - if (image->depth == 1) - if (pixel & 1) - ((guchar *) image->mem)[y * image->bpl + (x >> 3)] |= (1 << (7 - (x & 0x7))); - else - ((guchar *) image->mem)[y * image->bpl + (x >> 3)] &= ~(1 << (7 - (x & 0x7))); - else - { - guchar *pixelp = (guchar *) image->mem + y * image->bpl + x * image->bpp; - - /* Windows is always LSB, no need to check image->byte_order. */ - switch (image->bpp) - { - case 4: - pixelp[3] = 0; - case 3: - pixelp[2] = ((pixel >> 16) & 0xFF); - case 2: - pixelp[1] = ((pixel >> 8) & 0xFF); - case 1: - pixelp[0] = (pixel & 0xFF); - } - } -} - -void -gdk_image_destroy (GdkImage *image) -{ - GdkImagePrivate *private; - - g_return_if_fail (image != NULL); - - private = (GdkImagePrivate*) image; - - GDK_NOTE (MISC, g_print ("gdk_image_destroy: %#x%s\n", - private->ximage, - (image->type == GDK_IMAGE_SHARED_PIXMAP ? - " (shared pixmap)" : ""))); - - switch (image->type) - { - case GDK_IMAGE_SHARED_PIXMAP: - break; /* The Windows bitmap has already been - * (or will be) deleted when freeing - * the corresponding pixmap. - */ - - case GDK_IMAGE_SHARED: - if (!DeleteObject (private->ximage)) - g_warning ("gdk_image_destroy: DeleteObject failed"); - break; - - default: - g_assert_not_reached (); - } - - g_free (image); -} - -static void -gdk_image_put_normal (GdkDrawable *drawable, - GdkGC *gc, - GdkImage *image, - gint xsrc, - gint ysrc, - gint xdest, - gint ydest, - gint width, - gint height) -{ - GdkDrawablePrivate *drawable_private; - GdkImagePrivate *image_private; - GdkGCPrivate *gc_private; - HDC hdc; - GdkColormapPrivate *colormap_private; - - g_return_if_fail (drawable != NULL); - g_return_if_fail (image != NULL); - g_return_if_fail (gc != NULL); - - if (GDK_DRAWABLE_DESTROYED (drawable)) - return; - image_private = (GdkImagePrivate*) image; - drawable_private = (GdkDrawablePrivate*) drawable; - gc_private = (GdkGCPrivate*) gc; - - /* The image can in fact be "shared", so don't test */ - - hdc = gdk_gc_predraw (drawable_private, gc_private); - colormap_private = (GdkColormapPrivate *) drawable_private->colormap; - if (colormap_private && colormap_private->xcolormap->rc_palette) - { - DIBSECTION ds; - static struct { - BITMAPINFOHEADER bmiHeader; - WORD bmiIndices[256]; - } bmi; - static gboolean bmi_inited = FALSE; - int i; - - if (!bmi_inited) - { - for (i = 0; i < 256; i++) - bmi.bmiIndices[i] = i; - bmi_inited = TRUE; - } - - if (GetObject (image_private->ximage, sizeof (DIBSECTION), - &ds) != sizeof (DIBSECTION)) - { - g_warning ("gdk_image_put_normal: GetObject failed"); - } -#if 0 - g_print("xdest = %d, ydest = %d, xsrc = %d, ysrc = %d, width = %d, height = %d\n", - xdest, ydest, xsrc, ysrc, width, height); - g_print("bmWidth = %d, bmHeight = %d, bmBitsPixel = %d, bmBits = %p\n", - ds.dsBm.bmWidth, ds.dsBm.bmHeight, ds.dsBm.bmBitsPixel, ds.dsBm.bmBits); - g_print("biWidth = %d, biHeight = %d, biBitCount = %d, biClrUsed = %d\n", - ds.dsBmih.biWidth, ds.dsBmih.biHeight, ds.dsBmih.biBitCount, ds.dsBmih.biClrUsed); -#endif - bmi.bmiHeader = ds.dsBmih; - /* I have spent hours on getting the parameters to - * SetDIBitsToDevice right. I wonder what drugs the guys in - * Redmond were on when they designed this API. - */ - if (SetDIBitsToDevice (hdc, - xdest, ydest, - width, height, - xsrc, (-ds.dsBmih.biHeight)-height-ysrc, - 0, -ds.dsBmih.biHeight, - ds.dsBm.bmBits, - (CONST BITMAPINFO *) &bmi, - DIB_PAL_COLORS) == 0) - g_warning ("SetDIBitsToDevice failed"); - } - else - { - HDC memdc; - HGDIOBJ oldbitmap; - - if ((memdc = CreateCompatibleDC (hdc)) == NULL) - { - g_warning ("gdk_image_put_normal: CreateCompatibleDC failed"); - gdk_gc_postdraw (drawable_private, gc_private); - return; - } - - if ((oldbitmap = SelectObject (memdc, image_private->ximage)) == NULL) - { - g_warning ("gdk_image_put_normal: SelectObject #1 failed"); - gdk_gc_postdraw (drawable_private, gc_private); - return; - } - if (!BitBlt (hdc, xdest, ydest, width, height, - memdc, xsrc, ysrc, SRCCOPY)) - g_warning ("gdk_image_put_normal: BitBlt failed"); - - if (SelectObject (memdc, oldbitmap) == NULL) - g_warning ("gdk_image_put_normal: SelectObject #2 failed"); - - if (!DeleteDC (memdc)) - g_warning ("gdk_image_put_normal: DeleteDC failed"); - } - gdk_gc_postdraw (drawable_private, gc_private); -} diff --git a/gdk/win32/gdkprivate.h b/gdk/win32/gdkprivate.h deleted file mode 100644 index 30b276d42b..0000000000 --- a/gdk/win32/gdkprivate.h +++ /dev/null @@ -1,459 +0,0 @@ -/* GDK - The GIMP Drawing Kit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GDK_PRIVATE_H__ -#define __GDK_PRIVATE_H__ - -#define STRICT /* We want strict type checks */ -#include -#include - -/* Make up for some minor mingw32 lossage */ - -/* PS_JOIN_MASK is missing from the mingw32 headers */ -#ifndef PS_JOIN_MASK -#define PS_JOIN_MASK (PS_JOIN_BEVEL|PS_JOIN_MITER|PS_JOIN_ROUND) -#endif - -/* CLR_INVALID is missing */ -#ifndef CLR_INVALID -#define CLR_INVALID CLR_NONE -#endif - -/* Some charsets are missing */ -#ifndef JOHAB_CHARSET -#define JOHAB_CHARSET 130 -#endif -#ifndef VIETNAMESE_CHARSET -#define VIETNAMESE_CHARSET 163 -#endif - -#ifndef VM_OEM_PLUS -#define VK_OEM_PLUS 0xBB -#endif - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define GDK_DRAWABLE_TYPE(d) (((GdkDrawablePrivate *)d)->window_type) -#define GDK_IS_WINDOW(d) (GDK_DRAWABLE_TYPE(d) <= GDK_WINDOW_TEMP || \ - GDK_DRAWABLE_TYPE(d) == GDK_WINDOW_FOREIGN) -#define GDK_IS_PIXMAP(d) (GDK_DRAWABLE_TYPE(d) == GDK_DRAWABLE_PIXMAP) -#define GDK_DRAWABLE_DESTROYED(d) (((GdkDrawablePrivate *)d)->destroyed) - -#define gdk_window_lookup(xid) ((GdkWindow*) gdk_xid_table_lookup (xid)) -#define gdk_pixmap_lookup(xid) ((GdkPixmap*) gdk_xid_table_lookup (xid)) - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Define corresponding Windows types for some X11 types, just for laziness. - */ - -typedef HANDLE XID; -typedef PALETTEENTRY XColor; -typedef HDC GC; -typedef ATOM Atom; -typedef HCURSOR Cursor; -typedef guint VisualID; -typedef DWORD KeySym; -typedef int Status; - -/* Define some of the X11 constants also here, again just for laziness */ - -/* Generic null resource */ -#define None 0 - -/* Error codes */ -#define Success 0 - -/* Grabbing status */ -#define GrabSuccess 0 -#define AlreadyGrabbed 2 - -/* For CreateColormap */ -#define AllocNone 0 -#define AllocAll 1 - -/* Some structs are somewhat useful to emulate internally, just to - keep the code less #ifdefed. */ -typedef struct { - HPALETTE palette; /* Palette handle used when drawing. */ - guint size; /* Number of entries in the palette. */ - gboolean stale; /* 1 if palette needs to be realized, - * otherwise 0. */ - gboolean *in_use; - gboolean rc_palette; /* If RC_PALETTE is on in the RASTERCAPS */ - gulong sizepalette; /* SIZEPALETTE if rc_palette */ -} ColormapStruct, *Colormap; - -typedef struct { - gint map_entries; - guint visualid; - guint bitspixel; -} Visual; - -typedef struct { - Colormap colormap; - unsigned long red_max; - unsigned long red_mult; - unsigned long green_max; - unsigned long green_mult; - unsigned long blue_max; - unsigned long blue_mult; - unsigned long base_pixel; -} XStandardColormap; - -typedef struct _GdkDrawablePrivate GdkDrawablePrivate; -/* typedef struct _GdkDrawablePrivate GdkPixmapPrivate; */ -typedef struct _GdkWindowPrivate GdkWindowPrivate; -typedef struct _GdkImagePrivate GdkImagePrivate; -typedef struct _GdkGCPrivate GdkGCPrivate; -typedef struct _GdkColormapPrivate GdkColormapPrivate; -typedef struct _GdkColorInfo GdkColorInfo; -typedef struct _GdkVisualPrivate GdkVisualPrivate; -typedef struct _GdkFontPrivate GdkFontPrivate; -typedef struct _GdkCursorPrivate GdkCursorPrivate; -typedef struct _GdkEventFilter GdkEventFilter; -typedef struct _GdkClientFilter GdkClientFilter; -typedef struct _GdkRegionPrivate GdkRegionPrivate; - -struct _GdkDrawablePrivate -{ - GdkDrawable drawable; - - guint8 window_type; - guint ref_count; - - guint16 width; - guint16 height; - - HANDLE xwindow; - GdkColormap *colormap; - - guint destroyed : 2; -}; - -struct _GdkWindowPrivate -{ - GdkDrawablePrivate drawable; - - GdkWindow *parent; - gint16 x; - gint16 y; - guint8 resize_count; - guint mapped : 1; - guint guffaw_gravity : 1; - - /* We must keep the event mask here to filter them ourselves */ - gint event_mask; - - /* Values for bg_type */ -#define GDK_WIN32_BG_NORMAL 0 -#define GDK_WIN32_BG_PIXEL 1 -#define GDK_WIN32_BG_PIXMAP 2 -#define GDK_WIN32_BG_PARENT_RELATIVE 3 -#define GDK_WIN32_BG_TRANSPARENT 4 - - /* We draw the background ourselves at WM_ERASEBKGND */ - guchar bg_type; - GdkColor bg_pixel; - GdkPixmap *bg_pixmap; - - HCURSOR xcursor; - - /* Window size hints */ - gint hint_flags; - gint hint_x, hint_y; - gint hint_min_width, hint_min_height; - gint hint_max_width, hint_max_height; - - gint extension_events; - gboolean extension_events_selected; - - GList *filters; - GList *children; - - HKL input_locale; - CHARSETINFO charset_info; -}; - -struct _GdkImagePrivate -{ - GdkImage image; - HBITMAP ximage; - gpointer x_shm_info; - - void (*image_put) (GdkDrawable *window, - GdkGC *gc, - GdkImage *image, - gint xsrc, - gint ysrc, - gint xdest, - gint ydest, - gint width, - gint height); -}; - -struct _GdkGCPrivate -{ - GdkGC gc; - GC xgc; - /* A Windows Device Context (DC) is not equivalent to an X11 - * GC. We can use a DC only in the window for which it was - * allocated, or (in the case of a memory DC) with the bitmap that - * has been selected into it. Thus, we have to release and - * reallocate a DC each time the GdkGC is used to paint into a new - * window or pixmap. We thus keep all the necessary values in the - * GdkGCPrivate struct. - */ - GdkGCValuesMask values_mask; - GdkColor foreground; - GdkColor background; - GdkFont *font; - gint rop2; - GdkFill fill_style; - GdkPixmap *tile; - GdkPixmap *stipple; - HRGN clip_region; - GdkSubwindowMode subwindow_mode; - gint ts_x_origin; - gint ts_y_origin; - gint clip_x_origin; - gint clip_y_origin; - gint graphics_exposures; - gint pen_width; - DWORD pen_style; - HANDLE hwnd; /* If a DC is allocated, for which window - or what bitmap is selected into it */ - int saved_dc; - guint ref_count; -}; - -typedef enum { - GDK_COLOR_WRITEABLE = 1 << 0 -} GdkColorInfoFlags; - -struct _GdkColorInfo -{ - GdkColorInfoFlags flags; - guint ref_count; -}; - -struct _GdkColormapPrivate -{ - GdkColormap colormap; - Colormap xcolormap; - GdkVisual *visual; - gint private_val; - - GHashTable *hash; - GdkColorInfo *info; - time_t last_sync_time; - - guint ref_count; -}; - -struct _GdkVisualPrivate -{ - GdkVisual visual; - Visual *xvisual; -}; - -typedef struct -{ - HFONT xfont; - DWORD charset; - UINT codepage; - CPINFO cpinfo; - FONTSIGNATURE fs; -} GdkWin32SingleFont; - -struct _GdkFontPrivate -{ - GdkFont font; - guint ref_count; - - GSList *fonts; - GSList *names; -}; - -struct _GdkCursorPrivate -{ - GdkCursor cursor; - Cursor xcursor; -}; - -struct _GdkEventFilter { - GdkFilterFunc function; - gpointer data; -}; - -struct _GdkClientFilter { - GdkAtom type; - GdkFilterFunc function; - gpointer data; -}; - -struct _GdkRegionPrivate -{ - GdkRegion region; - HRGN xregion; -}; - -typedef enum { - GDK_DEBUG_MISC = 1 << 0, - GDK_DEBUG_EVENTS = 1 << 1, - GDK_DEBUG_DND = 1 << 2, - GDK_DEBUG_COLOR_CONTEXT = 1 << 3, - GDK_DEBUG_XIM = 1 << 4, - GDK_DEBUG_SELECTION = 1 << 5 -} GdkDebugFlag; - -void gdk_events_init (void); -void gdk_window_init (void); -void gdk_visual_init (void); -void gdk_selection_init (void); -void gdk_dnd_init (void); -void gdk_dnd_exit (void); -void gdk_image_init (void); -void gdk_image_exit (void); - -GdkColormap* gdk_colormap_lookup (Colormap xcolormap); -GdkVisual* gdk_visual_lookup (Visual *xvisual); - -void gdk_window_add_colormap_windows (GdkWindow *window); -void gdk_window_destroy_notify (GdkWindow *window); - -void gdk_xid_table_insert (XID *xid, - gpointer data); -void gdk_xid_table_remove (XID xid); -gpointer gdk_xid_table_lookup (XID xid); - -/* Internal functions */ - -HDC gdk_gc_predraw (GdkDrawablePrivate *drawable_private, - GdkGCPrivate *gc_private); -void gdk_gc_postdraw (GdkDrawablePrivate *drawable_private, - GdkGCPrivate *gc_private); -HRGN BitmapToRegion (HBITMAP hBmp); - -void gdk_sel_prop_store (GdkWindow *owner, - GdkAtom type, - gint format, - guchar *data, - gint length); - -void gdk_event_queue_append (GdkEvent *event); - -gint gdk_nmbstowcs (GdkWChar *dest, - const gchar *src, - gint src_len, - gint dest_max); -gint gdk_nmbstowchar_ts (wchar_t *dest, - const gchar *src, - gint src_len, - gint dest_max); - -void gdk_wchar_text_handle (GdkFont *font, - const wchar_t *wcstr, - int wclen, - void (*handler)(GdkWin32SingleFont *, - const wchar_t *, - int, - void *), - void *arg); - -/* Please see gdkwindow.c for comments on how to use */ -HWND gdk_window_xid_at(HWND base, gint bx, gint by, gint x, gint y, GList *excludes, gboolean excl_child); -HWND gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child); - -extern gint gdk_debug_level; -extern gint gdk_show_events; -extern gint gdk_stack_trace; -extern HWND gdk_root_window; -extern HWND gdk_leader_window; -GDKVAR GdkWindowPrivate *gdk_root_parent; -GDKVAR Atom gdk_selection_property; -GDKVAR gchar *gdk_progclass; -GDKVAR gint gdk_error_code; -GDKVAR gint gdk_error_warnings; -GDKVAR gint gdk_null_window_warnings; -extern gint gdk_event_func_from_window_proc; - -extern HDC gdk_DC; -extern HINSTANCE gdk_DLLInstance; -extern HINSTANCE gdk_ProgInstance; - -extern UINT gdk_selection_notify_msg; -extern UINT gdk_selection_request_msg; -extern UINT gdk_selection_clear_msg; -extern GdkAtom gdk_clipboard_atom; -extern GdkAtom gdk_win32_dropfiles_atom; -extern GdkAtom gdk_ole2_dnd_atom; - -extern LRESULT CALLBACK gdk_WindowProc (HWND, UINT, WPARAM, LPARAM); - -extern DWORD windows_version; - -/* Debugging support */ - -#ifdef G_ENABLE_DEBUG - -#define GDK_NOTE(type,action) G_STMT_START { \ - if (gdk_debug_flags & GDK_DEBUG_##type) \ - { action; }; } G_STMT_END - -#else /* !G_ENABLE_DEBUG */ - -#define GDK_NOTE(type,action) - -#endif /* G_ENABLE_DEBUG */ - -GDKVAR guint gdk_debug_flags; - -/* Internal functions for debug output etc. */ - -char *gdk_color_to_string (GdkColor *); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __GDK_PRIVATE_H__ */ diff --git a/gdk/win32/gdkx.h b/gdk/win32/gdkx.h deleted file mode 100644 index 3eeacccd2c..0000000000 --- a/gdk/win32/gdkx.h +++ /dev/null @@ -1,56 +0,0 @@ -/* GDK - The GIMP Drawing Kit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GDK_WIN32_H__ -#define __GDK_WIN32_H__ - -#include - -#include -#include - -#define GDK_ROOT_WINDOW() ((guint32) HWND_DESKTOP) -#define GDK_ROOT_PARENT() ((GdkWindow *) gdk_root_parent) -#define GDK_DISPLAY() NULL -#define GDK_DRAWABLE_XDISPLAY(win) NULL -#define GDK_DRAWABLE_XID(win) (((GdkDrawablePrivate*) win)->xwindow) -#define GDK_WINDOW_XDISPLAY GDK_DRAWABLE_XDISPLAY -#define GDK_WINDOW_XWINDOW GDK_DRAWABLE_XID -#define GDK_IMAGE_XDISPLAY(image) NULL -#define GDK_IMAGE_XIMAGE(image) (((GdkImagePrivate*) image)->ximage) -#define GDK_GC_XDISPLAY(gc) NULL -#define GDK_GC_XGC(gc) (((GdkGCPrivate*) gc)->xgc) -#define GDK_COLORMAP_XDISPLAY(cmap) NULL -#define GDK_COLORMAP_XCOLORMAP(cmap) (((GdkColormapPrivate*) cmap)->xcolormap) -#define GDK_VISUAL_XVISUAL(vis) (((GdkVisualPrivate*) vis)->xvisual) - -GdkVisual* gdkx_visual_get (VisualID xvisualid); - -/* Functions to create GDK pixmaps and windows from their native equivalents */ -GdkPixmap *gdk_pixmap_foreign_new (guint32 anid); -GdkWindow *gdk_window_foreign_new (guint32 anid); - -#endif /* __GDK_WIN32_H__ */ diff --git a/gdk/win32/gdkxid.c b/gdk/win32/gdkxid.c deleted file mode 100644 index 4cba645459..0000000000 --- a/gdk/win32/gdkxid.c +++ /dev/null @@ -1,88 +0,0 @@ -/* GDK - The GIMP Drawing Kit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#include "config.h" - -#include -#include - -#include "gdkprivate.h" - -static guint gdk_xid_hash (XID *xid); -static gint gdk_xid_compare (XID *a, - XID *b); - - -static GHashTable *xid_ht = NULL; - - -void -gdk_xid_table_insert (XID *xid, - gpointer data) -{ - g_return_if_fail (xid != NULL); - - if (!xid_ht) - xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash, - (GCompareFunc) gdk_xid_compare); - - g_hash_table_insert (xid_ht, xid, data); -} - -void -gdk_xid_table_remove (XID xid) -{ - if (!xid_ht) - xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash, - (GCompareFunc) gdk_xid_compare); - - g_hash_table_remove (xid_ht, &xid); -} - -gpointer -gdk_xid_table_lookup (XID xid) -{ - gpointer data = NULL; - - if (xid_ht) - data = g_hash_table_lookup (xid_ht, &xid); - - return data; -} - - -static guint -gdk_xid_hash (XID *xid) -{ - return (guint) *xid; -} - -static gint -gdk_xid_compare (XID *a, - XID *b) -{ - return (*a == *b); -}