85 lines
2.1 KiB
C
85 lines
2.1 KiB
C
/*
|
|
* GDI bitmap objects
|
|
*
|
|
* Copyright 1993 Alexandre Julliard
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "ts_xlib.h"
|
|
#include "ts_xutil.h"
|
|
#include "gdi.h"
|
|
#include "callback.h"
|
|
#include "dc.h"
|
|
#include "bitmap.h"
|
|
#include "heap.h"
|
|
#include "stddebug.h"
|
|
#include "debug.h"
|
|
|
|
extern void CLIPPING_UpdateGCRegion(DC* );
|
|
|
|
/***********************************************************************
|
|
* X11DRV_BITMAP_Init
|
|
*/
|
|
BOOL32 X11DRV_BITMAP_Init(void)
|
|
{
|
|
Pixmap tmpPixmap;
|
|
|
|
/* Create the necessary GCs */
|
|
|
|
if ((tmpPixmap = TSXCreatePixmap( display, rootWindow, 1, 1, 1 )))
|
|
{
|
|
BITMAP_monoGC = TSXCreateGC( display, tmpPixmap, 0, NULL );
|
|
TSXSetGraphicsExposures( display, BITMAP_monoGC, False );
|
|
TSXFreePixmap( display, tmpPixmap );
|
|
}
|
|
|
|
if (screenDepth != 1)
|
|
{
|
|
if ((tmpPixmap = TSXCreatePixmap(display, rootWindow, 1,1,screenDepth)))
|
|
{
|
|
BITMAP_colorGC = TSXCreateGC( display, tmpPixmap, 0, NULL );
|
|
TSXSetGraphicsExposures( display, BITMAP_colorGC, False );
|
|
TSXFreePixmap( display, tmpPixmap );
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/***********************************************************************
|
|
* X11DRV_BITMAP_SelectObject
|
|
*/
|
|
HBITMAP32 X11DRV_BITMAP_SelectObject( DC * dc, HBITMAP32 hbitmap,
|
|
BITMAPOBJ * bmp )
|
|
{
|
|
HRGN32 hrgn;
|
|
HBITMAP32 prevHandle = dc->w.hBitmap;
|
|
|
|
if (!(dc->w.flags & DC_MEMORY)) return 0;
|
|
|
|
if (dc->w.hVisRgn)
|
|
SetRectRgn32( dc->w.hVisRgn, 0, 0,
|
|
bmp->bitmap.bmWidth, bmp->bitmap.bmHeight );
|
|
else
|
|
{
|
|
hrgn = CreateRectRgn32(0, 0, bmp->bitmap.bmWidth, bmp->bitmap.bmHeight);
|
|
if (!hrgn) return 0;
|
|
dc->w.hVisRgn = hrgn;
|
|
}
|
|
|
|
dc->u.x.drawable = bmp->pixmap;
|
|
dc->w.hBitmap = hbitmap;
|
|
|
|
/* Change GC depth if needed */
|
|
|
|
if (dc->w.bitsPerPixel != bmp->bitmap.bmBitsPixel)
|
|
{
|
|
TSXFreeGC( display, dc->u.x.gc );
|
|
dc->u.x.gc = TSXCreateGC( display, dc->u.x.drawable, 0, NULL );
|
|
dc->w.bitsPerPixel = bmp->bitmap.bmBitsPixel;
|
|
DC_InitDC( dc );
|
|
}
|
|
else CLIPPING_UpdateGCRegion( dc ); /* Just update GC clip region */
|
|
return prevHandle;
|
|
}
|