source: trunk/src/kernel32/cvtcursorgrp.cpp@ 1570

Last change on this file since 1570 was 1040, checked in by sandervl, 26 years ago

Cursor(group) fixes

File size: 3.6 KB
Line 
1/* $Id: cvtcursorgrp.cpp,v 1.6 1999-09-25 14:11:31 sandervl Exp $ */
2
3/*
4 * PE2LX cursor group code
5 *
6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
7 *
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#define INCL_GPIBITMAPS
13#define INCL_BITMAPFILEFORMAT
14#define INCL_DOSFILEMGR /* File Manager values */
15#define INCL_DOSERRORS /* DOS Error values */
16#define INCL_DOSPROCESS /* DOS Process values */
17#define INCL_DOSMISC /* DOS Miscellanous values */
18#define INCL_WIN
19#include <os2.h>
20#include <stdio.h>
21#include <string.h>
22#include <stdlib.h>
23#include <string.h>
24#include <win32type.h>
25#include <wincursor.h>
26#include <winres.h>
27#include <misc.h>
28#include "cvtresource.h"
29
30HRSRC WIN32API FindResourceA(HINSTANCE hModule, LPCSTR lpszName, LPCSTR lpszType);
31
32//******************************************************************************
33//******************************************************************************
34void *ConvertCursorGroup(CursorHeader *chdr, int size, Win32ImageBase *module)
35{
36 CursorResDir *rdir = (CursorResDir *)(chdr + 1);
37 int i, groupsize = 0, os2cursorsize;
38 BITMAPARRAYFILEHEADER2 *bafh, *orgbafh;
39 CursorComponent *cursorhdr;
40 Win32Resource *winres;
41 void *os2cursor;
42
43 dprintf(("ConvertCursorGroup"));
44 dprintf(("Cursor Group type : %d", chdr->wType));
45 dprintf(("Cursor Group count: %d", chdr->cwCount));
46 for(i=0;i<chdr->cwCount;i++) {
47 dprintf(("Cursor : %d", rdir->wNameOrdinal));
48 dprintf(("Width : %d", (int)rdir->wWidth));
49 dprintf(("Height : %d", (int)rdir->wHeight));
50 dprintf(("Bits : %d", rdir->wBitCount));
51 dprintf(("ResBytes: %d", rdir->lBytesInRes));
52 winres = (Win32Resource *)FindResourceA(module->getInstanceHandle(),
53 (LPCSTR)rdir->wNameOrdinal,
54 (LPSTR)NTRT_CURSOR);
55 groupsize += winres->getOS2Size();
56 rdir++;
57 }
58 bafh = (BITMAPARRAYFILEHEADER2 *)malloc(groupsize+chdr->cwCount*sizeof(BITMAPARRAYFILEHEADER2));
59 orgbafh = bafh;
60
61 rdir = (CursorResDir *)(chdr + 1);
62 for(i=0;i<chdr->cwCount;i++) {
63 bafh->usType = BFT_BITMAPARRAY;
64 bafh->cbSize = sizeof(BITMAPARRAYFILEHEADER2);
65 bafh->cxDisplay = 0;
66 bafh->cyDisplay = 0;
67 winres = (Win32Resource *)FindResourceA(module->getInstanceHandle(),
68 (LPCSTR)rdir->wNameOrdinal,
69 (LPSTR)NTRT_CURSOR);
70 if(winres == NULL) {
71 dprintf(("Can't find cursor!"));
72 rdir++;
73 continue;
74 }
75
76 cursorhdr = (CursorComponent *)winres->lockResource();
77 os2cursor = ConvertCursor(cursorhdr, winres->getSize(), &os2cursorsize, (int)bafh - (int)orgbafh + sizeof(BITMAPARRAYFILEHEADER2)-sizeof(BITMAPFILEHEADER2));
78
79 if(os2cursor == NULL) {
80 dprintf(("Can't convert cursor!"));
81 delete winres;
82 rdir++;
83 continue;
84 }
85
86 if(i != chdr->cwCount -1) {
87 bafh->offNext = (int)&bafh->bfh2 - (int)orgbafh + os2cursorsize;
88 }
89 else bafh->offNext = 0;
90
91 memcpy((char *)&bafh->bfh2, os2cursor, os2cursorsize);
92 free(os2cursor);
93
94 bafh = (BITMAPARRAYFILEHEADER2 *)((int)&bafh->bfh2 + os2cursorsize);
95 delete winres;
96
97 rdir++;
98 }
99 return (void *)orgbafh;
100}
101//******************************************************************************
102//******************************************************************************
Note: See TracBrowser for help on using the repository browser.