CONTEXT SetContext (CONTEXT Context) { CONTEXT LastContext; LastContext = _pCurContext; if (Context != LastContext) { if (LastContext) { UnsetContextFlags ( MAKE_WORD (0, GRAPHICS_ACTIVE | DRAWABLE_ACTIVE)); SetContextFlags ( MAKE_WORD (0, _GraphicsStatusFlags & (GRAPHICS_ACTIVE | DRAWABLE_ACTIVE))); DeactivateContext (); } _pCurContext = Context; if (_pCurContext) { ActivateContext (); _GraphicsStatusFlags &= ~(GRAPHICS_ACTIVE | DRAWABLE_ACTIVE); _GraphicsStatusFlags |= HIBYTE (_get_context_flags ()); SetPrimColor (&_locPrim, _get_context_fg_color ()); _CurFramePtr = _get_context_fg_frame (); _CurFontPtr = _get_context_font (); } } return (LastContext); }
void DrawBatch (PPRIMITIVE lpBasePrim, PRIM_LINKS PrimLinks, BATCH_FLAGS BatchFlags) { RECT ValidRect; HOT_SPOT OldHot; if (GraphicsSystemActive () && GetFrameValidRect (&ValidRect, &OldHot)) { COUNT CurIndex; PRIM_LINKS OldLinks; PPRIMITIVE lpPrim; BatchFlags &= BATCH_SINGLE | BATCH_BUILD_PAGE | BATCH_XFORM; BatchFlags |= _get_context_flags () & BATCH_CLIP_GRAPHICS; BatchGraphics (); if (BatchFlags & BATCH_BUILD_PAGE) { ClearBackGround (&ValidRect); } CurIndex = GetPredLink (PrimLinks); if (BatchFlags & BATCH_SINGLE) { if (CurIndex == END_OF_LIST) BatchFlags &= ~BATCH_SINGLE; else { lpBasePrim += CurIndex; OldLinks = GetPrimLinks (lpBasePrim); SetPrimLinks (lpBasePrim, END_OF_LIST, END_OF_LIST); CurIndex = 0; } } for (; CurIndex != END_OF_LIST; CurIndex = GetSuccLink (GetPrimLinks (lpPrim))) { GRAPHICS_PRIM PrimType; PPRIMITIVE lpWorkPrim; RECT ClipRect; TFB_Palette color; lpPrim = &lpBasePrim[CurIndex]; PrimType = GetPrimType (lpPrim); if (!ValidPrimType (PrimType)) continue; lpWorkPrim = lpPrim; switch (PrimType) { case POINT_PRIM: COLORtoPalette (GetPrimColor (lpWorkPrim), &color); TFB_Prim_Point (&lpWorkPrim->Object.Point, &color); break; case STAMP_PRIM: TFB_Prim_Stamp (&lpWorkPrim->Object.Stamp); break; case STAMPFILL_PRIM: COLORtoPalette (GetPrimColor (lpWorkPrim), &color); TFB_Prim_StampFill (&lpWorkPrim->Object.Stamp, &color); break; case LINE_PRIM: COLORtoPalette (GetPrimColor (lpWorkPrim), &color); TFB_Prim_Line (&lpWorkPrim->Object.Line, &color); break; case TEXT_PRIM: if (!TextRect (&lpWorkPrim->Object.Text, &ClipRect, NULL_PTR)) continue; _save_stamp.origin = ClipRect.corner; _text_blt (&ClipRect, lpWorkPrim); break; case RECT_PRIM: COLORtoPalette (GetPrimColor (lpWorkPrim), &color); TFB_Prim_Rect (&lpWorkPrim->Object.Rect, &color); break; case RECTFILL_PRIM: COLORtoPalette (GetPrimColor (lpWorkPrim), &color); TFB_Prim_FillRect (&lpWorkPrim->Object.Rect, &color); break; } } UnbatchGraphics (); _CurFramePtr->HotSpot = OldHot; if (BatchFlags & BATCH_SINGLE) SetPrimLinks (lpBasePrim, GetPredLink (OldLinks), GetSuccLink (OldLinks)); } }