⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i_ugldsp.cpp

📁 zinc60t22.tar.gz:zinc在tornado2.2.x下的补丁
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	return (mode);}ZafLogicalColor ZafScreenDisplay::SetMonoBackground(ZafLogicalColor color){	if (color != ZAF_MONO_NULL && color < ZAF_MAXCOLORS)	{#if defined(ZAF_RTOS)        ZafScreenDisplay::classSem->Take(ZAF_WAIT_FOREVER_SEMAPHORE);#endif		palette.monoBackground = color;#if defined(ZAF_RTOS)    	ZafScreenDisplay::classSem->Give();#endif	}	return (palette.monoBackground);}ZafLogicalColor ZafScreenDisplay::SetMonoForeground(ZafLogicalColor color){	if (color != ZAF_MONO_NULL && color < ZAF_MAXCOLORS)	{#if defined(ZAF_RTOS)        ZafScreenDisplay::classSem->Take(ZAF_WAIT_FOREVER_SEMAPHORE);#endif		palette.monoBackground = color;#if defined(ZAF_RTOS)    	ZafScreenDisplay::classSem->Give();#endif	}	return (palette.monoBackground);}ZafPaletteStruct ZafScreenDisplay::SetPalette(ZafPaletteStruct palette){	SetLineStyle(palette.lineStyle);	SetFillPattern(palette.fillPattern);	SetForeground(palette.colorForeground);	SetBackground(palette.colorBackground);	SetMonoForeground(palette.monoForeground);	SetMonoBackground(palette.monoBackground);	SetFont(palette.font);	return (palette);}// --- Draw Setup -----------------------------------------------------------ZafError ZafScreenDisplay::BeginDraw(OSDisplayContext windowRegionType, OSDrawContext dc,	const ZafRegionStruct &, const ZafRegionStruct &clip){#if defined(ZAF_RTOS)    ZafScreenDisplay::classSem->Take(ZAF_WAIT_FOREVER_SEMAPHORE);#endif    ZafError retVal = ZAF_ERROR_NONE;	if (--virtualCount == -1)	{ 		stopDevice++;		UGL_RECT windowRect;		if (dc == ID_ZAF_SCREEN || dc == ID_ZAF_DIRECT || dc == ID_ZAF_OFFSCREEN)		{			viewPort.left = viewPort.top = 0;			viewPort.right = columns - 1;			viewPort.bottom = lines - 1;		}		else		{			winRectGet (dc, &windowRect);			UGL_WINDOW_ID parentId = winParent (dc);			while (parentId != UGL_NULL_ID)			{				UGL_RECT parentRect;				winRectGet (parentId, &parentRect);				UGL_RECT_MOVE (windowRect, parentRect.left, parentRect.top);				parentId = winParent (parentId);			}			viewPort.left = windowRect.left;			viewPort.top = windowRect.top;			viewPort.right = windowRect.right;			viewPort.bottom = windowRect.bottom;		}		masterClip.left = clip.left;		masterClip.top = clip.top;		masterClip.right = clip.right;		masterClip.bottom = clip.bottom;		clipRegion = masterClip;		if (dc == ID_ZAF_OFFSCREEN)		{			originalGC = gc;			gc = uglGcCreate(devID);			uglGcCopy(originalGC, gc);		}		uglViewPortSet(gc, viewPort.left, viewPort.top, viewPort.right, viewPort.bottom);		uglClipRectSet(gc, masterClip.left, masterClip.top, masterClip.right, masterClip.bottom);		uglClipRegionSet(gc, UGL_NULL);		currentDC = dc;        // Set the draw regions.   		if (dc == ID_ZAF_SCREEN)        {        	UGL_EVENT_ROUTER_ID evtRtrID;        	uglDriverFind(UGL_EVENT_ROUTER_TYPE, 0, (UGL_UINT32 *)&evtRtrID);            UGL_WINDOW_ID rootWinID = winRootGet(evtRtrID);            		                uglClipRegionSet (gc, winVisibleRegionGet(rootWinID));        }        else if (dc != ID_ZAF_DIRECT)		{		    winLock (dc);			oldWindowRegionType = windowRegionType;		    if (windowRegionType == ID_ZAF_DIRTY_REGION)		    {		    	UGL_REGION_ID clipRegionId = winDirtyRegionGet(dc);   		    	if (clipRegionId)		    		uglClipRegionSet (gc, clipRegionId);		    	else					{					masterClip.left = masterClip.top = 0;					masterClip.right = masterClip.bottom = -1;					clipRegion = masterClip;		    		uglClipRectSet (gc, 0, 0, -1, -1);				}		    }		    else		    	uglClipRegionSet (gc, winVisibleRegionGet(dc));		}		uglBatchStart(gc);	}	else if (oldWindowRegionType == ID_ZAF_DIRTY_REGION)	{		// Only set a clip rect if already set a clip region.  It's possible		// to have tried to set the clip region to the window's dirty region,		// but if the window didn't have a dirty region, then an empty clip rect		// was set.  Can't modify that or else could write over objects.		UGL_REGION_ID clipReg;        uglClipRegionGet(gc, &clipReg);        if (clipReg)		{			masterClip.left = clip.left;			masterClip.top = clip.top;			masterClip.right = clip.right;			masterClip.bottom = clip.bottom;			clipRegion = masterClip;			uglClipRectSet(gc, masterClip.left, masterClip.top, masterClip.right, masterClip.bottom);		}	}	return (retVal);}ZafError ZafScreenDisplay::EndDraw(void){	if (++virtualCount == 0)	{		masterClip.left = -viewPort.left;		masterClip.top = -viewPort.top;		masterClip.right = columns - viewPort.left - 1;		masterClip.bottom = lines - viewPort.top - 1;		clipRegion = masterClip;		oldWindowRegionType = 0xFFFF;		// Restore display.		coordinateType = ZAF_PIXEL;		SetMode(ZAF_MODE_COPY);		originX = originY = 0;		scaleNumerator = scaleDenominator = 1;		uglBatchEnd(gc);		stopDevice--;		bool finished;		do		{			finished = true;			for (int i = 0; i < ZAF_MAXIMAGES; i++)			{				if (devImage[i].movePending)				{					DeviceMove((ZafDeviceImageType)i, devImage[i].newX,						devImage[i].newY, devImage[i].clip);					devImage[i].movePending = false;					finished = false;				}			}		} while (!finished);		if (currentDC != ID_ZAF_DIRECT && currentDC != ID_ZAF_SCREEN)					winUnlock (currentDC);		if (originalGC)		{			uglGcDestroy(gc);			gc = originalGC;			originalGC = UGL_NULL;		}	}	else if (virtualCount > 0)		virtualCount = 0;#if defined(ZAF_RTOS)   	ZafScreenDisplay::classSem->Give();#endif	return (ZAF_ERROR_NONE);}OSDisplayContext ZafScreenDisplay::DisplayContext(void) const{	return (ZAF_NULLH(OSDisplayContext));}OSDisplayContext ZafScreenDisplay::RestoreDisplayContext(void){	return (ZAF_NULLH(OSDisplayContext));}OSDrawContext ZafScreenDisplay::DrawContext(void) const{	return (ZAF_NULLH(OSDrawContext));}OSDrawContext ZafScreenDisplay::RestoreDrawContext(void){	return (ZAF_NULLH(OSDrawContext));}OSDisplayContext ZafScreenDisplay::SetDisplayContext(OSDisplayContext){  	// Meaningless on MSDOS.	return (0);}OSDrawContext ZafScreenDisplay::SetDrawContext(OSDrawContext){	// Meaningless on MSDOS.	return (0);}////////////////////////////////////////////////////////////////////////////////// ZafScreenDisplay::SetDrawBitmap - sets the default bitmap associated with// the current UGL gc.//// ZafError ZafScreenDisplay::SetDrawBitmap(ZafBitmapStruct *bitmap){#if defined(ZAF_RTOS)    ZafScreenDisplay::classSem->Take(ZAF_WAIT_FOREVER_SEMAPHORE);#endif	if (!bitmap || !bitmap->handle)		uglDefaultBitmapSet(gc, UGL_DISPLAY_ID);	else		uglDefaultBitmapSet(gc, bitmap->handle);#if defined(ZAF_RTOS)	ZafScreenDisplay::classSem->Give();#endif	return (ZAF_ERROR_NONE);}// --- Devices --------------------------------------------------------------int ZafScreenDisplay::DeviceMove(ZafDeviceImageType imageType, int newColumn,	int newLine, ZafRegionStruct &clip){#if defined(ZAF_RTOS)    ZafScreenDisplay::classSem->Take(ZAF_WAIT_FOREVER_SEMAPHORE);#endif	if (stopDevice++ == 0)	{		if (devImage[imageType].devBitmapID)		{			BeginDraw(0, ID_ZAF_DIRECT, devImage[imageType].clip, devImage[imageType].clip);			int height = devImage[imageType].devRegion.Height();			int width = devImage[imageType].devRegion.Width();			// Replace screen image at old location.			uglBitmapBlt(gc, devImage[imageType].scrBitmapID, 0, 0, 				width - 1, height - 1, UGL_DEFAULT_ID, 				devImage[imageType].devRegion.left, 				devImage[imageType].devRegion.top);			EndDraw();			// Get new screen bitmap.			uglBitmapDestroy(devID, devImage[imageType].scrBitmapID);			UGL_DIB dib;			dib.height = height;			dib.width = dib.stride = width;			devImage[imageType].scrBitmapID = uglBitmapCreate(devID, &dib, 				UGL_DIB_INIT_NONE, 0, UGL_DEFAULT_MEM);			devImage[imageType].devRegion.left = newColumn;			devImage[imageType].devRegion.top = newLine;			devImage[imageType].devRegion.right = newColumn + width - 1;			devImage[imageType].devRegion.bottom = newLine + height - 1;			devImage[imageType].clip = clip;			BeginDraw(0, ID_ZAF_DIRECT, devImage[imageType].clip, devImage[imageType].clip);			uglBitmapBlt(gc, UGL_DEFAULT_ID, newColumn, newLine, 						 newColumn + width - 1, 						 newLine + height - 1,						 devImage[imageType].scrBitmapID, 0, 0);			// Put device image at new location.			uglBitmapBlt(gc, devImage[imageType].devBitmapID, 0, 0, 				width - 1, height - 1, UGL_DEFAULT_ID, newColumn, newLine);			EndDraw();		}	}	else	{		devImage[imageType].newX = newColumn;		devImage[imageType].newY = newLine;		devImage[imageType].clip = clip;		devImage[imageType].movePending = true;	}	stopDevice--;#if defined(ZAF_RTOS)   	ZafScreenDisplay::classSem->Give();#endif	return (true);}int ZafScreenDisplay::DeviceSet(ZafDeviceImageType imageType, int column,	int line, int width, int height, ZafLogicalColor *image,	ZafRegionStruct &clip, int hotSpotX, int hotSpotY){#if defined(ZAF_RTOS)    ZafScreenDisplay::classSem->Take(ZAF_WAIT_FOREVER_SEMAPHORE);#endif	stopDevice++;	// Replace old screen image, if any.	if (devImage[imageType].scrBitmapID)	{		BeginDraw(0, ID_ZAF_SCREEN, devImage[imageType].clip, devImage[imageType].clip);			int height = devImage[imageType].devRegion.Height();		int width = devImage[imageType].devRegion.Width();			// Replace screen image at old location.		uglBitmapBlt(gc, devImage[imageType].scrBitmapID, 0, 0, 			width - 1, height - 1, UGL_DEFAULT_ID, 			devImage[imageType].devRegion.left, 			devImage[imageType].devRegion.top);			EndDraw();	}	// Create an UGL bitmap from the device image array.	UGL_COLOR *bitmapData = new UGL_COLOR[width * height];	for (int index = 0; index < height * width; index++)		bitmapData[index] = colorTable[image[index]];	UGL_DIB dib;	dib.height = height;	dib.width = width;	dib.stride = width;	dib.colorFormat = UGL_DEVICE_COLOR_32;	dib.clutSize = 0;	dib.imageFormat = UGL_DIRECT;	dib.pClut = UGL_NULL;	dib.pImage = bitmapData;	// Delete old handle, if one existed.	if (devImage[imageType].devBitmapID)		uglBitmapDestroy(devID, devImage[imageType].devBitmapID);	devImage[imageType].devBitmapID = uglBitmapCreate(devID, &dib, UGL_DIB_INIT_DATA, 0, UGL_DEFAULT_MEM);	delete []bitmapData;	// Fill in rest of devImage.	devImage[imageType].devRegion.left = column;	devImage[imageType].devRegion.top = line;	devImage[imageType].devRegion.right = column + width - 1;	devImage[imageType].devRegion.bottom = line + height - 1;	devImage[imageType].devRegion.coordinateType = clip.coordinateType;	devImage[imageType].clip = clip;	// Get screen image at device image location.    if (devImage[imageType].scrBitmapID)		uglBitmapDestroy(devID, devImage[imageType].scrBitmapID);	dib.height = height;	dib.width = dib.stride = width;	dib.pImage = UGL_NULL;	devImage[imageType].scrBitmapID = uglBitmapCreate(devID, &dib, 		UGL_DIB_INIT_NONE, 0, UGL_DEFAULT_MEM);	BeginDraw(0, ID_ZAF_SCREEN, clip, clip);	uglBitmapBlt(gc, UGL_DEFAULT_ID, column, line, column + width - 1, line + height - 1,				 devImage[imageType].scrBitmapID, 0, 0);	// Put device image at new location.	uglBitmapBlt(gc, devImage[imageType].devBitmapID, 0, 0, 		devImage[imageType].devRegion.Width() - 1, devImage[imageType].devRegion.Height() - 1,		UGL_DEFAULT_ID, devImage[imageType].devRegion.left, devImage[imageType].devRegion.top);	EndDraw();	stopDevice--;#if defined(ZAF_RTOS)   	ZafScreenDisplay::classSem->Give();#endif	return (true);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -