Fixed the displaying of the FOURCC codes in _dump_pixelformat.
[wine] / dlls / ttydrv / objects.c
1 /*
2  * TTY DC objects
3  *
4  * Copyright 1999 Patrik Stridvall
5  */
6
7 #include "bitmap.h"
8 #include "brush.h"
9 #include "dc.h"
10 #include "font.h"
11 #include "gdi.h"
12 #include "pen.h"
13 #include "ttydrv.h"
14 #include "debugtools.h"
15
16 DEFAULT_DEBUG_CHANNEL(ttydrv);
17
18 /**********************************************************************/
19
20 extern HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap);
21 extern BOOL TTYDRV_DC_BITMAP_DeleteObject(HBITMAP hbitmap, BITMAPOBJ *bitmap);
22
23
24 /***********************************************************************
25  *              TTYDRV_DC_BRUSH_SelectObject
26  */
27 static HBRUSH TTYDRV_DC_BRUSH_SelectObject(DC *dc, HBRUSH hbrush, BRUSHOBJ *brush)
28 {
29   HBRUSH hPreviousBrush;
30
31   TRACE("(%p, 0x%04x, %p)\n", dc, hbrush, brush);
32
33   hPreviousBrush = dc->w.hBrush;
34   dc->w.hBrush = hbrush;
35
36   return hPreviousBrush;
37 }
38
39 /***********************************************************************
40  *              TTYDRV_DC_FONT_SelectObject
41  */
42 static HFONT TTYDRV_DC_FONT_SelectObject(DC* dc, HFONT hfont, FONTOBJ *font)
43 {
44   HFONT hPreviousFont;
45
46   TRACE("(%p, 0x%04x, %p)\n", dc, hfont, font);
47
48   hPreviousFont = dc->w.hFont;
49   dc->w.hFont = hfont;
50
51   return hPreviousFont;
52 }
53
54 /***********************************************************************
55  *              TTYDRV_DC_PEN_SelectObject
56  */
57 static HPEN TTYDRV_DC_PEN_SelectObject(DC *dc, HBRUSH hpen, PENOBJ *pen)
58 {
59   HPEN hPreviousPen;
60
61   TRACE("(%p, 0x%04x, %p)\n", dc, hpen, pen);
62
63   hPreviousPen = dc->w.hPen;
64   dc->w.hPen = hpen;
65
66   return hPreviousPen;
67 }
68
69 /***********************************************************************
70  *              TTYDRV_DC_SelectObject
71  */
72 HGDIOBJ TTYDRV_DC_SelectObject(DC *dc, HGDIOBJ handle)
73 {
74   GDIOBJHDR *ptr = GDI_GetObjPtr(handle, MAGIC_DONTCARE);
75   HGDIOBJ result = 0;
76
77   if(!ptr) return 0;
78
79   switch(ptr->wMagic) 
80   {
81     case BITMAP_MAGIC:
82       result = TTYDRV_DC_BITMAP_SelectObject(dc, handle, (BITMAPOBJ *) ptr);
83       break;
84     case BRUSH_MAGIC:
85       result = TTYDRV_DC_BRUSH_SelectObject(dc, handle, (BRUSHOBJ *) ptr);
86       break;
87     case FONT_MAGIC:
88       result = TTYDRV_DC_FONT_SelectObject(dc, handle, (FONTOBJ *) ptr);          
89       break;
90     case PEN_MAGIC:
91       result = TTYDRV_DC_PEN_SelectObject(dc, handle, (PENOBJ *) ptr);
92       break;
93     case REGION_MAGIC:
94       /* FIXME: Shouldn't be handled here */
95       result = (HGDIOBJ) SelectClipRgn(dc->hSelf, handle);
96       break;
97     default:
98       ERR("handle (0x%04x) has unknown magic (0x%04x)\n", handle, ptr->wMagic);
99   }
100
101   GDI_ReleaseObj(handle);
102     
103   return result;
104 }
105
106 /***********************************************************************
107  *           TTYDRV_DC_DeleteObject
108  */
109 BOOL TTYDRV_DC_DeleteObject(HGDIOBJ handle)
110 {
111   GDIOBJHDR *ptr = GDI_GetObjPtr(handle, MAGIC_DONTCARE);
112   BOOL result;
113   
114   if(!ptr) return FALSE;
115      
116   switch(ptr->wMagic)
117   {
118     case BITMAP_MAGIC:
119       result = TTYDRV_DC_BITMAP_DeleteObject(handle, (BITMAPOBJ *) ptr);
120       break;
121     case BRUSH_MAGIC:
122     case FONT_MAGIC:
123     case PEN_MAGIC:
124     case REGION_MAGIC:
125       result = TRUE;
126       break;
127     default:
128       ERR("handle (0x%04x) has unknown magic (0x%04x)\n", handle, ptr->wMagic);   
129       result = FALSE;
130   }
131
132   GDI_ReleaseObj(handle);
133
134   return result;
135 }