0N/A/*
2362N/A * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A#include "awt_IconCursor.h"
0N/A
0N/A/* common code used by awt_Frame.cpp and awt_Cursor.cpp */
0N/A
0N/AHBITMAP create_BMP(HWND hW,int* imageData,int nSS, int nW, int nH)
0N/A{
0N/A Bitmapheader bmhHeader;
0N/A HDC hDC;
0N/A char *ptrImageData;
0N/A HBITMAP hbmpBitmap;
0N/A HBITMAP hBitmap;
0N/A
0N/A int nNumChannels = 3;
0N/A
0N/A if (!hW) {
0N/A hW = ::GetDesktopWindow();
0N/A }
0N/A hDC = ::GetDC(hW);
0N/A if (!hDC) {
0N/A return NULL;
0N/A }
0N/A
0N/A memset(&bmhHeader, 0, sizeof(Bitmapheader));
0N/A bmhHeader.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
0N/A bmhHeader.bmiHeader.biWidth = nW;
0N/A bmhHeader.bmiHeader.biHeight = -nH;
0N/A bmhHeader.bmiHeader.biPlanes = 1;
0N/A
0N/A bmhHeader.bmiHeader.biBitCount = 24;
0N/A bmhHeader.bmiHeader.biCompression = BI_RGB;
0N/A
0N/A hbmpBitmap = ::CreateDIBSection(hDC, (BITMAPINFO*)&(bmhHeader),
0N/A DIB_RGB_COLORS,
0N/A (void**)&(ptrImageData),
0N/A NULL, 0);
0N/A int *srcPtr = imageData;
0N/A char *dstPtr = ptrImageData;
0N/A if (!dstPtr) {
0N/A ReleaseDC(hW, hDC);
0N/A return NULL;
0N/A }
0N/A for (int nOutern = 0; nOutern < nH; nOutern++ ) {
0N/A for (int nInner = 0; nInner < nSS; nInner++ ) {
0N/A dstPtr[2] = (*srcPtr >> 0x10) & 0xFF;
0N/A dstPtr[1] = (*srcPtr >> 0x08) & 0xFF;
0N/A dstPtr[0] = *srcPtr & 0xFF;
0N/A
0N/A srcPtr++;
0N/A dstPtr += nNumChannels;
0N/A }
0N/A }
0N/A
0N/A // convert it into DDB to make CustomCursor work on WIN95
0N/A hBitmap = CreateDIBitmap(hDC,
0N/A (BITMAPINFOHEADER*)&bmhHeader,
0N/A CBM_INIT,
0N/A (void *)ptrImageData,
0N/A (BITMAPINFO*)&bmhHeader,
0N/A DIB_RGB_COLORS);
0N/A
0N/A ::DeleteObject(hbmpBitmap);
0N/A ::ReleaseDC(hW, hDC);
0N/A ::GdiFlush();
0N/A return hBitmap;
0N/A}
0N/A
0N/Avoid destroy_BMP(HBITMAP hBMP)
0N/A{
0N/A if (hBMP) {
0N/A ::DeleteObject(hBMP);
0N/A }
0N/A}