105b261ecSmrg/* 205b261ecSmrg *Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved. 305b261ecSmrg * 405b261ecSmrg *Permission is hereby granted, free of charge, to any person obtaining 505b261ecSmrg * a copy of this software and associated documentation files (the 605b261ecSmrg *"Software"), to deal in the Software without restriction, including 705b261ecSmrg *without limitation the rights to use, copy, modify, merge, publish, 805b261ecSmrg *distribute, sublicense, and/or sell copies of the Software, and to 905b261ecSmrg *permit persons to whom the Software is furnished to do so, subject to 1005b261ecSmrg *the following conditions: 1105b261ecSmrg * 1205b261ecSmrg *The above copyright notice and this permission notice shall be 1305b261ecSmrg *included in all copies or substantial portions of the Software. 1405b261ecSmrg * 1505b261ecSmrg *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 1605b261ecSmrg *EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1705b261ecSmrg *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1805b261ecSmrg *NONINFRINGEMENT. IN NO EVENT SHALL HAROLD L HUNT II BE LIABLE FOR 1905b261ecSmrg *ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 2005b261ecSmrg *CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 2105b261ecSmrg *WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2205b261ecSmrg * 2305b261ecSmrg *Except as contained in this notice, the name of Harold L Hunt II 2405b261ecSmrg *shall not be used in advertising or otherwise to promote the sale, use 2505b261ecSmrg *or other dealings in this Software without prior written authorization 2605b261ecSmrg *from Harold L Hunt II. 2705b261ecSmrg * 2805b261ecSmrg * Authors: Harold L Hunt II 2905b261ecSmrg */ 3005b261ecSmrg 3105b261ecSmrg#ifdef HAVE_XWIN_CONFIG_H 3205b261ecSmrg#include <xwin-config.h> 3305b261ecSmrg#endif 3405b261ecSmrg#include "win.h" 3505b261ecSmrg 3605b261ecSmrg/* 3705b261ecSmrg * Count the number of one bits in a color mask. 3805b261ecSmrg */ 3905b261ecSmrg 4005b261ecSmrgCARD8 4135c4bbdfSmrgwinCountBits(DWORD dw) 4205b261ecSmrg{ 4335c4bbdfSmrg DWORD dwBits = 0; 4405b261ecSmrg 4535c4bbdfSmrg while (dw) { 4635c4bbdfSmrg dwBits += (dw & 1); 4735c4bbdfSmrg dw >>= 1; 4805b261ecSmrg } 4905b261ecSmrg 5035c4bbdfSmrg return dwBits; 5105b261ecSmrg} 5205b261ecSmrg 5305b261ecSmrg/* 5405b261ecSmrg * Modify the screen pixmap to point to the new framebuffer address 5505b261ecSmrg */ 5605b261ecSmrg 5705b261ecSmrgBool 5835c4bbdfSmrgwinUpdateFBPointer(ScreenPtr pScreen, void *pbits) 5905b261ecSmrg{ 6035c4bbdfSmrg winScreenPriv(pScreen); 6135c4bbdfSmrg winScreenInfo *pScreenInfo = pScreenPriv->pScreenInfo; 6235c4bbdfSmrg 6335c4bbdfSmrg /* Location of shadow framebuffer has changed */ 6435c4bbdfSmrg pScreenInfo->pfb = pbits; 6535c4bbdfSmrg 6635c4bbdfSmrg /* Update the screen pixmap */ 6735c4bbdfSmrg if (!(*pScreen->ModifyPixmapHeader) (pScreen->devPrivate, 6835c4bbdfSmrg pScreen->width, 6935c4bbdfSmrg pScreen->height, 7035c4bbdfSmrg pScreen->rootDepth, 7135c4bbdfSmrg BitsPerPixel(pScreen->rootDepth), 7235c4bbdfSmrg PixmapBytePad(pScreenInfo->dwStride, 7335c4bbdfSmrg pScreenInfo->dwBPP), 7435c4bbdfSmrg pScreenInfo->pfb)) { 7535c4bbdfSmrg FatalError("winUpdateFramebufferPointer - Failed modifying " 7635c4bbdfSmrg "screen pixmap\n"); 7705b261ecSmrg } 7805b261ecSmrg 7935c4bbdfSmrg return TRUE; 8005b261ecSmrg} 81