2 Copyright © 1995-2008, The AROS Development Team. All rights reserved.
5 Desc: Class for VMWare.
10 #include <aros/debug.h>
12 #define __OOP_NOATTRBASES__
14 #include <proto/exec.h>
15 #include <proto/oop.h>
16 #include <proto/utility.h>
17 #include <aros/symbolsets.h>
18 #include <devices/inputevent.h>
19 #include <exec/alerts.h>
20 #include <exec/memory.h>
21 #include <hardware/custom.h>
22 #include <hidd/hidd.h>
23 #include <hidd/graphics.h>
25 #include <clib/alib_protos.h>
29 #include "vmwaresvgaclass.h"
30 #include "vmwaresvgabitmap.h"
31 #include "vmwaresvgahardware.h"
33 #include LC_LIBDEFS_FILE
35 static OOP_AttrBase HiddBitMapAttrBase
;
36 static OOP_AttrBase HiddPixFmtAttrBase
;
37 static OOP_AttrBase HiddGfxAttrBase
;
38 static OOP_AttrBase HiddSyncAttrBase
;
39 static OOP_AttrBase HiddVMWareSVGAAttrBase
;
40 static OOP_AttrBase HiddVMWareSVGABitMapAttrBase
;
42 static struct OOP_ABDescr attrbases
[] =
44 {IID_Hidd_BitMap
, &HiddBitMapAttrBase
},
45 {IID_Hidd_VMWareSVGABitMap
, &HiddVMWareSVGABitMapAttrBase
},
46 {IID_Hidd_VMWareSVGA
, &HiddVMWareSVGAAttrBase
},
47 {IID_Hidd_PixFmt
, &HiddPixFmtAttrBase
},
48 {IID_Hidd_Sync
, &HiddSyncAttrBase
},
49 {IID_Hidd_Gfx
, &HiddGfxAttrBase
},
53 STATIC ULONG
mask_to_shift(ULONG mask
)
57 for (i
= 32; mask
; i
--) {
68 OOP_Object
*VMWareSVGA__Root__New(OOP_Class
*cl
, OOP_Object
*o
, struct pRoot_New
*msg
)
70 unsigned int sync_count
, sync_modes
, sync_curr
, sync_displayid
, sync_modeid
;
72 struct TagItem pftags
[] =
74 {aHidd_PixFmt_RedShift
, 0 }, /* 0 */
75 {aHidd_PixFmt_GreenShift
, 0 }, /* 1 */
76 {aHidd_PixFmt_BlueShift
, 0 }, /* 2 */
77 {aHidd_PixFmt_AlphaShift
, 0 }, /* 3 */
78 {aHidd_PixFmt_RedMask
, 0 }, /* 4 */
79 {aHidd_PixFmt_GreenMask
, 0 }, /* 5 */
80 {aHidd_PixFmt_BlueMask
, 0 }, /* 6 */
81 {aHidd_PixFmt_AlphaMask
, 0 }, /* 7 */
82 {aHidd_PixFmt_ColorModel
, 0 }, /* 8 */
83 {aHidd_PixFmt_Depth
, 0 }, /* 9 */
84 {aHidd_PixFmt_BytesPerPixel
, 0 }, /* 10 */
85 {aHidd_PixFmt_BitsPerPixel
, 0 }, /* 11 */
86 {aHidd_PixFmt_StdPixFmt
, 0 }, /* 12 */
87 {aHidd_PixFmt_CLUTShift
, 0 }, /* 13 */
88 {aHidd_PixFmt_CLUTMask
, 0x0f }, /* 14 */
89 {aHidd_PixFmt_BitMapType
, 0 }, /* 15 */
92 #warning "TODO: Probe available sync modes"
93 #define VMWARESVGA_SYNCMODES 5
94 sync_modes
= VMWARESVGA_SYNCMODES
;
95 sync_count
= sync_modes
* XSD(cl
)->data
.displaycount
;
97 struct TagItem
*modetags
= AllocVec((sync_count
+ 2) * sizeof(struct TagItem
), MEMF_CLEAR
);
99 modetags
[0].ti_Tag
= aHidd_Gfx_PixFmtTags
;
100 modetags
[0].ti_Data
= (IPTR
)pftags
;
101 modetags
[sync_count
+ 1].ti_Tag
= TAG_DONE
;
105 while (sync_curr
< sync_count
)
107 sync_modeid
= sync_curr
% sync_modes
;
108 sync_displayid
= sync_curr
/sync_modes
;
112 D(bug("[VMWareSVGA] %s: Setting Sync Mode %d for Display %d\n", __PRETTY_FUNCTION__
, sync_modeid
, sync_displayid
));
114 char *sync_Description
= AllocVec(24 , MEMF_CLEAR
);
140 if (sync_displayid
== 0)
142 sprintf(sync_Description
, "VMWareSVGA:%dx%d", sync_Width
, sync_Height
);
146 sprintf(sync_Description
, "VMWareSVGA.%d:%dx%d", sync_displayid
, sync_Width
, sync_Height
);
148 D(bug("[VMWareSVGA] %s: Description '%s'\n", __PRETTY_FUNCTION__
, sync_Description
));
150 struct TagItem
*sync_mode
= AllocVec(11 * sizeof(struct TagItem
), MEMF_CLEAR
);
152 sync_mode
[0].ti_Tag
= aHidd_Sync_Description
;
153 sync_mode
[0].ti_Data
= (IPTR
)sync_Description
;
154 sync_mode
[1].ti_Tag
= aHidd_Sync_PixelClock
;
155 sync_mode
[2].ti_Tag
= aHidd_Sync_HDisp
;
156 sync_mode
[2].ti_Data
= sync_Width
;
157 sync_mode
[3].ti_Tag
= aHidd_Sync_VDisp
;
158 sync_mode
[3].ti_Data
= sync_Height
;
159 sync_mode
[4].ti_Tag
= aHidd_Sync_HSyncStart
;
160 sync_mode
[5].ti_Tag
= aHidd_Sync_HSyncEnd
;
161 sync_mode
[6].ti_Tag
= aHidd_Sync_HTotal
;
162 sync_mode
[7].ti_Tag
= aHidd_Sync_VSyncStart
;
163 sync_mode
[8].ti_Tag
= aHidd_Sync_VSyncEnd
;
164 sync_mode
[9].ti_Tag
= aHidd_Sync_VTotal
;
165 sync_mode
[10].ti_Tag
= TAG_DONE
;
167 modetags
[1 + sync_curr
].ti_Tag
= aHidd_Gfx_SyncTags
;
168 modetags
[1 + sync_curr
].ti_Data
= (IPTR
)sync_mode
;
173 struct TagItem yourtags
[] =
175 {aHidd_Gfx_ModeTags
, (IPTR
)modetags
},
178 struct pRoot_New yourmsg
;
181 if (!XSD(cl
)->data
.pseudocolor
)
183 pftags
[0].ti_Data
= mask_to_shift(XSD(cl
)->data
.redmask
);
184 pftags
[1].ti_Data
= mask_to_shift(XSD(cl
)->data
.greenmask
);
185 pftags
[2].ti_Data
= mask_to_shift(XSD(cl
)->data
.bluemask
);
189 pftags
[0].ti_Data
= 0;
190 pftags
[1].ti_Data
= 0;
191 pftags
[2].ti_Data
= 0;
193 pftags
[3].ti_Data
= 0;
194 pftags
[4].ti_Data
= XSD(cl
)->data
.redmask
;
195 pftags
[5].ti_Data
= XSD(cl
)->data
.greenmask
;
196 pftags
[6].ti_Data
= XSD(cl
)->data
.bluemask
;
197 pftags
[7].ti_Data
= 0;
198 D(bug("[VMWareSVGA] New: Masks red=%08x<<%d,green=%08x<<%d,blue%08x<<%d\n",
199 pftags
[4].ti_Data
, pftags
[0].ti_Data
,
200 pftags
[5].ti_Data
, pftags
[1].ti_Data
,
201 pftags
[6].ti_Data
, pftags
[2].ti_Data
));
203 if (XSD(cl
)->data
.pseudocolor
)
204 pftags
[8].ti_Data
= vHidd_ColorModel_Palette
;
206 pftags
[8].ti_Data
= vHidd_ColorModel_TrueColor
;
208 pftags
[9].ti_Data
= XSD(cl
)->data
.depth
;
209 pftags
[10].ti_Data
= XSD(cl
)->data
.bytesperpixel
;
210 pftags
[11].ti_Data
= XSD(cl
)->data
.bitsperpixel
;
211 pftags
[12].ti_Data
= vHidd_StdPixFmt_Native
;
212 pftags
[15].ti_Data
= vHidd_BitMapType_Chunky
;
214 yourtags
[1].ti_Data
= (IPTR
)msg
->attrList
;
216 yourmsg
.mID
= msg
->mID
;
217 yourmsg
.attrList
= yourtags
;
219 EnterFunc(bug("VMWareSVGA::New()\n"));
220 o
= (OOP_Object
*)OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
);
223 D(bug("[VMWareSVGA] Got object from super\n"));
224 XSD(cl
)->vmwaresvgahidd
= o
;
225 XSD(cl
)->mouse
.shape
= NULL
;
226 ReturnPtr("VMWareSVGA::New", OOP_Object
*, o
);
228 ReturnPtr("VMWareSVGA::New", OOP_Object
*, NULL
);
231 VOID
VMWareSVGA__Root__Dispose(OOP_Class
*cl
, OOP_Object
*o
, OOP_Msg msg
)
233 if (XSD(cl
)->mouse
.shape
!= NULL
)
234 FreeVec(XSD(cl
)->mouse
.shape
);
235 OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
);
238 VOID
VMWareSVGA__Root__Get(OOP_Class
*cl
, OOP_Object
*o
, struct pRoot_Get
*msg
)
243 if (IS_GFX_ATTR(msg
->attrID
, idx
))
247 case aoHidd_Gfx_SupportsHWCursor
:
248 *msg
->storage
= (IPTR
)TRUE
;
254 OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
);
257 OOP_Object
*VMWareSVGA__Hidd_Gfx__NewBitMap(OOP_Class
*cl
, OOP_Object
*o
, struct pHidd_Gfx_NewBitMap
*msg
)
261 OOP_Class
*classptr
= NULL
;
262 struct TagItem tags
[2];
263 struct pHidd_Gfx_NewBitMap yourmsg
;
265 EnterFunc(bug("VMWareSVGA::NewBitMap()\n"));
266 displayable
= GetTagData(aHidd_BitMap_Displayable
, FALSE
, msg
->attrList
);
267 framebuffer
= GetTagData(aHidd_BitMap_FrameBuffer
, FALSE
, msg
->attrList
);
269 classptr
= XSD(cl
)->vmwaresvgaonbmclass
;
270 else if (displayable
)
271 classptr
= XSD(cl
)->vmwaresvgaoffbmclass
;
275 modeid
= (HIDDT_ModeID
)GetTagData(aHidd_BitMap_ModeID
, vHidd_ModeID_Invalid
, msg
->attrList
);
276 if (modeid
!= vHidd_ModeID_Invalid
)
277 classptr
= XSD(cl
)->vmwaresvgaoffbmclass
;
280 HIDDT_StdPixFmt stdpf
;
281 stdpf
= (HIDDT_StdPixFmt
)GetTagData(aHidd_BitMap_StdPixFmt
, vHidd_StdPixFmt_Unknown
, msg
->attrList
);
282 if (stdpf
== vHidd_StdPixFmt_Unknown
)
285 friend = (OOP_Object
*)GetTagData(aHidd_BitMap_Friend
, NULL
, msg
->attrList
);
289 OOP_GetAttr(friend, aHidd_BitMap_GfxHidd
, (IPTR
*)&gfxhidd
);
292 classptr
= XSD(cl
)->vmwaresvgaoffbmclass
;
298 if (classptr
!= NULL
)
300 tags
[0].ti_Tag
= aHidd_BitMap_ClassPtr
;
301 tags
[0].ti_Data
= (IPTR
)classptr
;
302 tags
[1].ti_Tag
= TAG_MORE
;
303 tags
[1].ti_Data
= (IPTR
)msg
->attrList
;
304 yourmsg
.mID
= msg
->mID
;
305 yourmsg
.attrList
= tags
;
308 ReturnPtr("VMWareSVGA::NewBitMap", OOP_Object
*, (OOP_Object
*)OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
));
311 VOID
VMWareSVGA__Hidd_Gfx__CopyBox(OOP_Class
*cl
, OOP_Object
*o
, struct pHidd_Gfx_CopyBox
*msg
)
318 EnterFunc(bug("VMWareSVGA.BitMap::CopyBox\n"));
319 mode
= GC_DRMD(msg
->gc
);
320 OOP_GetAttr(msg
->src
, aHidd_VMWareSVGABitMap_Drawable
, (IPTR
*)&src
);
321 OOP_GetAttr(msg
->dest
, aHidd_VMWareSVGABitMap_Drawable
, (IPTR
*)&dst
);
322 if (((dst
== NULL
) || (src
== NULL
))) /* no vmwaregfx bitmap */
324 OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
);
328 struct BitmapData
*data
;
329 data
= OOP_INST_DATA(OOP_OCLASS(msg
->src
), msg
->src
);
332 case vHidd_GC_DrawMode_Clear
:
333 clearCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
335 case vHidd_GC_DrawMode_And
:
336 andCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
338 case vHidd_GC_DrawMode_AndReverse
:
339 andReverseCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
341 case vHidd_GC_DrawMode_Copy
:
342 copyCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
344 case vHidd_GC_DrawMode_AndInverted
:
345 andInvertedCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
347 case vHidd_GC_DrawMode_NoOp
:
348 noOpCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
350 case vHidd_GC_DrawMode_Xor
:
351 xorCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
353 case vHidd_GC_DrawMode_Or
:
354 orCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
356 case vHidd_GC_DrawMode_Nor
:
357 norCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
359 case vHidd_GC_DrawMode_Equiv
:
360 equivCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
362 case vHidd_GC_DrawMode_Invert
:
363 invertCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
365 case vHidd_GC_DrawMode_OrReverse
:
366 orReverseCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
368 case vHidd_GC_DrawMode_CopyInverted
:
369 copyInvertedCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
371 case vHidd_GC_DrawMode_OrInverted
:
372 orInvertedCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
374 case vHidd_GC_DrawMode_Nand
:
375 nandCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
377 case vHidd_GC_DrawMode_Set
:
378 setCopyVMWareSVGA(data
->data
, msg
->srcX
, msg
->srcY
, msg
->destX
, msg
->destY
, msg
->width
, msg
->height
);
381 OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
);
386 struct BitmapData
*srcbd
= OOP_INST_DATA(OOP_OCLASS(msg
->src
), msg
->src
);
387 struct BitmapData
*dstbd
= OOP_INST_DATA(OOP_OCLASS(msg
->dest
), msg
->dest
);
392 ULONG ycnt
= msg
->height
;
395 /* get src/dest video data start addresses and skip sizes */
396 if (srcbd
->VideoData
== srcbd
->data
->vrambase
)
398 offset
= (msg
->srcX
*srcbd
->bytesperpix
)+(msg
->srcY
*srcbd
->data
->bytesperline
);
399 srestadd
= (srcbd
->data
->bytesperline
- (msg
->width
*srcbd
->bytesperpix
));
400 displayCursorVMWareSVGA(&XSD(cl
)->data
, 0);
401 XSD(cl
)->mouse
.visible
= 0;
405 offset
= (msg
->srcX
+(msg
->srcY
*srcbd
->width
))*srcbd
->bytesperpix
;
406 srestadd
= (srcbd
->width
- msg
->width
)*srcbd
->bytesperpix
;
408 sbuffer
= srcbd
->VideoData
+offset
;
409 if (dstbd
->VideoData
== dstbd
->data
->vrambase
)
411 offset
= (msg
->destX
*dstbd
->bytesperpix
)+(msg
->destY
*dstbd
->data
->bytesperline
);
412 drestadd
= (dstbd
->data
->bytesperline
- (msg
->width
*dstbd
->bytesperpix
));
413 displayCursorVMWareSVGA(&XSD(cl
)->data
, 0);
414 XSD(cl
)->mouse
.visible
= 0;
418 offset
= (msg
->destX
+(msg
->destY
*dstbd
->width
))*dstbd
->bytesperpix
;
419 drestadd
= (dstbd
->width
- msg
->width
)*dstbd
->bytesperpix
;
421 dbuffer
= dstbd
->VideoData
+offset
;
424 case vHidd_GC_DrawMode_Copy
:
431 /* get pixel from source */
432 switch (srcbd
->bytesperpix
)
435 pixel
= (ULONG
)*((UBYTE
*)sbuffer
);
439 pixel
= (ULONG
)*((UWORD
*)sbuffer
);
443 pixel
= (ULONG
)*((ULONG
*)sbuffer
);
447 D(bug("[VMWareSVGA] Copy: Unknown number of bytes per pixel (%d) in source!\n",srcbd
->bytesperpix
));
451 /* write pixel to destination */
452 switch (dstbd
->bytesperpix
)
455 *((UBYTE
*)dbuffer
) = (UBYTE
)pixel
;
459 *((UWORD
*)dbuffer
) = (UWORD
)pixel
;
463 *((ULONG
*)dbuffer
) = (ULONG
)pixel
;
467 D(bug("[VMWareSVGA] Copy: Unknown number of bytes per pixel (%d) in destination!\n",dstbd
->bytesperpix
));
475 if (dstbd
->VideoData
== dstbd
->data
->vrambase
)
479 box
.x2
= box
.x1
+msg
->width
-1;
480 box
.y2
= box
.y1
+msg
->height
-1;
481 refreshAreaVMWareSVGA(dstbd
->data
, &box
);
485 kprintf("[VMWareSVGA] mode = %ld src=%lx dst=%lx\n", mode
, src
, dst
);
486 OOP_DoSuperMethod(cl
, o
, (OOP_Msg
)msg
);
488 if (XSD(cl
)->mouse
.visible
== 0)
490 displayCursorVMWareSVGA(&XSD(cl
)->data
, 1);
491 XSD(cl
)->mouse
.visible
= 1;
494 ReturnVoid("VMWareSVGA.BitMap::CopyBox");
497 BOOL
VMWareSVGA__Hidd_Gfx__SetCursorShape(OOP_Class
*cl
, OOP_Object
*o
, struct pHidd_Gfx_SetCursorShape
*msg
)
499 struct VMWareSVGA_staticdata
*data
= XSD(cl
);
501 if (msg
->shape
== NULL
)
503 displayCursorVMWareSVGA(&XSD(cl
)->data
, 0);
504 data
->mouse
.oopshape
= NULL
;
505 if (data
->mouse
.shape
!= NULL
)
506 FreeVec(data
->mouse
.shape
);
507 data
->mouse
.shape
= NULL
;
514 HIDDT_StdPixFmt pixfmt
;
516 OOP_GetAttr(msg
->shape
, aHidd_BitMap_Width
, &data
->mouse
.width
);
517 OOP_GetAttr(msg
->shape
, aHidd_BitMap_Height
, &data
->mouse
.height
);
518 OOP_GetAttr(msg
->shape
, aHidd_BitMap_PixFmt
, (IPTR
*)&pfmt
);
519 OOP_GetAttr(pfmt
, aHidd_PixFmt_StdPixFmt
, &pixfmt
);
520 OOP_GetAttr(msg
->shape
, aHidd_BitMap_ColorMap
, (IPTR
*)&colmap
);
521 data
->mouse
.oopshape
= msg
->shape
;
523 data
->mouse
.shape
= cursor_shape
;
524 data
->mouse
.width
= 11;
525 data
->mouse
.height
= 11;
526 defineCursorVMWareSVGA(&XSD(cl
)->data
, &data
->mouse
);
529 /* convert shape to vmware needs */
530 if (data
->mouse
.shape
!= NULL
)
531 FreeVec(data
->mouse
.shape
);
532 data
->mouse
.shape
= AllocVec(SVGA_PIXMAP_SIZE(data
->mouse
.width
, data
->mouse
.height
, data
->data
.bitsperpixel
)*4, MEMF_PUBLIC
);
533 if (data
->mouse
.shape
!= NULL
)
541 linebytes
= SVGA_PIXMAP_SCANLINE_SIZE(data
->mouse
.width
, data
->data
.bitsperpixel
)*4;
542 pixelbytes
= (data
->data
.bitsperpixel
+3)/8;
543 shape
= data
->mouse
.shape
;
544 for (ycnt
=0;ycnt
<data
->mouse
.height
;ycnt
++)
546 for (xcnt
=0;xcnt
<data
->mouse
.width
;xcnt
++)
549 pixel
= HIDD_BM_GetPixel(msg
->shape
, xcnt
, ycnt
);
550 if (pixfmt
== vHidd_StdPixFmt_LUT8
)
552 if (HIDD_CM_GetColor(colmap
, pixel
, &color
))
556 (((color
.red
<<16)>>mask_to_shift(data
->data
.redmask
)) & data
->data
.redmask
)+
557 (((color
.green
<<16)>>mask_to_shift(data
->data
.greenmask
)) & data
->data
.greenmask
)+
558 (((color
.blue
<<16)>>mask_to_shift(data
->data
.bluemask
)) & data
->data
.bluemask
)
564 *((UBYTE
*)shape
) = (UBYTE
)pixel
;
567 else if (pixelbytes
== 2)
569 *((UWORD
*)shape
) = (UWORD
)pixel
;
572 else if (pixelbytes
== 4)
574 *((ULONG
*)shape
) = (ULONG
)pixel
;
578 for (bytecnt
=linebytes
-(data
->mouse
.width
*pixelbytes
);bytecnt
;bytecnt
--)
580 *((UBYTE
*)shape
) = 0; /* fill up to long boundary */
584 defineCursorVMWareSVGA(&XSD(cl
)->data
, &data
->mouse
);
592 BOOL
VMWareSVGA__Hidd_Gfx__SetCursorPos(OOP_Class
*cl
, OOP_Object
*o
, struct pHidd_Gfx_SetCursorPos
*msg
)
596 XSD(cl
)->mouse
.x
= msg
->x
;
597 XSD(cl
)->mouse
.y
= msg
->y
;
598 if (XSD(cl
)->mouse
.x
<0)
600 if (XSD(cl
)->mouse
.y
<0)
602 #warning "check visible width/height"
603 moveCursorVMWareSVGA(&XSD(cl
)->data
, msg
->x
, msg
->y
);
607 VOID
VMWareSVGA__Hidd_Gfx__SetCursorVisible(OOP_Class
*cl
, OOP_Object
*o
, struct pHidd_Gfx_SetCursorVisible
*msg
)
609 XSD(cl
)->mouse
.visible
= msg
->visible
;
610 displayCursorVMWareSVGA(&XSD(cl
)->data
, msg
->visible
? 1 : 0);
614 static int VMWareSVGA_InitStatic(LIBBASETYPEPTR LIBBASE
)
616 EnterFunc(bug("[VMWareSVGA] VMWareSVGA_InitStatic()\n"));
618 LIBBASE
->vsd
.mouse
.x
=0;
619 LIBBASE
->vsd
.mouse
.y
=0;
620 LIBBASE
->vsd
.mouse
.shape
= NULL
;
622 if (!OOP_ObtainAttrBases(attrbases
))
624 D(bug("[VMWareSVGA] VMWareSVGA_InitStatic: attrbases init failed\n"));
628 D(bug("[VMWareSVGA] VMWareSVGA_InitStatic: ok\n"));
630 ReturnInt("VMWareSVGA_InitStatic", int, TRUE
);
633 static int VMWareSVGA_ExpungeStatic(LIBBASETYPEPTR LIBBASE
)
635 EnterFunc(bug("[VMWareSVGA] VMWareSVGA_ExpungeStatic()\n"));
637 OOP_ReleaseAttrBases(attrbases
);
638 ReturnInt("VMWareSVGA_ExpungeStatic", int, TRUE
);
641 ADD2INITLIB(VMWareSVGA_InitStatic
, 0)
642 ADD2EXPUNGELIB(VMWareSVGA_ExpungeStatic
, 0)