From 18a2f50c7dc3092716fbdc99a3339a0330918302 Mon Sep 17 00:00:00 2001 From: avolkov Date: Wed, 7 Jun 2006 04:11:01 +0000 Subject: [PATCH] Removed ugly manual bit-packing; other cleanups git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2383 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/src/sc2code/libs/graphics/display.h | 7 ---- sc2/src/sc2code/libs/graphics/drawable.c | 22 +++++------- sc2/src/sc2code/libs/graphics/drawable.h | 36 +++++++++---------- sc2/src/sc2code/libs/graphics/pixmap.c | 21 +++++------ sc2/src/sc2code/libs/graphics/sdl/3do_blt.c | 9 +++-- .../sc2code/libs/graphics/sdl/3do_getbody.c | 24 ++++++------- sc2/src/sc2code/libs/graphics/sdl/dcqueue.c | 2 +- sc2/src/sc2code/libs/graphics/sdl/rndzoom.c | 11 +++--- sc2/src/sc2code/libs/graphics/tfb_prim.c | 12 +++---- 9 files changed, 61 insertions(+), 83 deletions(-) diff --git a/sc2/src/sc2code/libs/graphics/display.h b/sc2/src/sc2code/libs/graphics/display.h index 0b701a8d5..2f0a970ca 100644 --- a/sc2/src/sc2code/libs/graphics/display.h +++ b/sc2/src/sc2code/libs/graphics/display.h @@ -19,13 +19,6 @@ #ifndef _DISPLAY_H #define _DISPLAY_H -/* -#define WANT_MASK (CREATE_FLAGS)(1 << 0) -#define WANT_PIXMAP (CREATE_FLAGS)(1 << 1) -*/ -#define WANT_COMPRESSED (CREATE_FLAGS)(1 << 2) -#define DOUBLE_RES (CREATE_FLAGS)(1 << 3) - typedef struct { CREATE_FLAGS DisplayFlags; diff --git a/sc2/src/sc2code/libs/graphics/drawable.c b/sc2/src/sc2code/libs/graphics/drawable.c index 3638b56fb..812bf9ec4 100644 --- a/sc2/src/sc2code/libs/graphics/drawable.c +++ b/sc2/src/sc2code/libs/graphics/drawable.c @@ -56,12 +56,9 @@ CreateDisplay (CREATE_FLAGS CreateFlags, PSIZE pwidth, PSIZE pheight) if (!DisplayActive ()) return (0); - Drawable = _request_drawable ( - (COUNT)1, (DRAWABLE_TYPE)SCREEN_DRAWABLE, - (CREATE_FLAGS)(CreateFlags & (WANT_PIXMAP | (GetDisplayFlags () & WANT_MASK))), - (SIZE)GetDisplayWidth (), - (SIZE)GetDisplayHeight () - ); + Drawable = _request_drawable (1, SCREEN_DRAWABLE, + (CreateFlags & (WANT_PIXMAP | (GetDisplayFlags () & WANT_MASK))), + GetDisplayWidth (), GetDisplayHeight ()); if (Drawable) { FRAMEPTR F; @@ -101,9 +98,10 @@ AllocDrawable (COUNT n) FRAMEPTR F; F = &DrawablePtr->Frame[i]; F->parent = DrawablePtr; - F->TypeIndexAndFlags = 0; + F->Type = 0; + F->Index = 0; F->image = 0; - F->Bounds = 0; + F->Bounds.width = F->Bounds.height = 0; F->HotSpot.x = F->HotSpot.y = 0; } @@ -121,12 +119,10 @@ CreateDrawable (CREATE_FLAGS CreateFlags, SIZE width, SIZE height, COUNT if (!DisplayActive ()) return (0); - Drawable = _request_drawable ( - (COUNT)num_frames, (DRAWABLE_TYPE)RAM_DRAWABLE, - (CREATE_FLAGS)(CreateFlags & (WANT_MASK | WANT_PIXMAP + Drawable = _request_drawable (num_frames, RAM_DRAWABLE, + (CreateFlags & (WANT_MASK | WANT_PIXMAP | WANT_ALPHA | MAPPED_TO_DISPLAY)), - (SIZE)width, (SIZE)height - ); + width, height); if (Drawable) { FRAMEPTR F; diff --git a/sc2/src/sc2code/libs/graphics/drawable.h b/sc2/src/sc2code/libs/graphics/drawable.h index 3a167119a..0c8432b79 100644 --- a/sc2/src/sc2code/libs/graphics/drawable.h +++ b/sc2/src/sc2code/libs/graphics/drawable.h @@ -48,46 +48,42 @@ typedef BRESENHAM_LINE *PBRESENHAM_LINE; #define PAD_WIDTH(w) (w) #endif /* MSDOS */ -#define FTYPE_SHIFT 12 -#define FINDEX_MASK ((1 << FTYPE_SHIFT) - 1) -#define FTYPE_MASK (0xFFFF & ~FINDEX_MASK) - -#define ROM_DRAWABLE (0 << FTYPE_SHIFT) -#define RAM_DRAWABLE (1 << FTYPE_SHIFT) -#define SCREEN_DRAWABLE (2 << FTYPE_SHIFT) - typedef UWORD DRAWABLE_TYPE; +#define ROM_DRAWABLE 0 +#define RAM_DRAWABLE 1 +#define SCREEN_DRAWABLE 2 #define DATA_HARDWARE (1 << 12) #define DATA_COPY (1 << 13) #define DATA_PACKED (1 << 14) #define X_FLIP (1 << 15) -typedef struct +typedef struct frame_desc { - DWORD TypeIndexAndFlags; + DRAWABLE_TYPE Type; + UWORD Index; HOT_SPOT HotSpot; - DWORD Bounds; + EXTENT Bounds; TFB_Image *image; - struct _drawable_desc *parent; + struct drawable_desc *parent; } FRAME_DESC; typedef FRAME_DESC *PFRAME_DESC; -typedef struct _drawable_desc +typedef struct drawable_desc { MEM_HANDLE hDrawable; - UWORD FlagsAndIndex; + CREATE_FLAGS Flags; + UWORD MaxIndex; FRAME_DESC *Frame; } DRAWABLE_DESC; typedef DRAWABLE_DESC *PDRAWABLE_DESC; -#define GetFrameWidth(f) LOWORD (((FRAMEPTR)(f))->Bounds) -#define GetFrameHeight(f) HIWORD (((FRAMEPTR)(f))->Bounds) -#define SetFrameBounds(f,w,h) (((FRAMEPTR)(f))->Bounds=MAKE_DWORD(w,h)) -#define GetFrameFlags(f) HIWORD(((FRAMEPTR)(f))->TypeIndexAndFlags) -#define AddFrameFlags(f,v) (((FRAMEPTR)(f))->TypeIndexAndFlags|=((DWORD)(v)<<16)) -#define SubFrameFlags(f,v) (((FRAMEPTR)(f))->TypeIndexAndFlags&=~((DWORD)(v)<<16)) +#define GetFrameWidth(f) (((PFRAME_DESC)(f))->Bounds.width) +#define GetFrameHeight(f) (((PFRAME_DESC)(f))->Bounds.height) +#define SetFrameBounds(f,w,h) \ + (((PFRAME_DESC)(f))->Bounds.width=(w), \ + ((PFRAME_DESC)(f))->Bounds.height=(h)) #define DRAWABLE_PRIORITY DEFAULT_MEM_PRIORITY diff --git a/sc2/src/sc2code/libs/graphics/pixmap.c b/sc2/src/sc2code/libs/graphics/pixmap.c index 30140bdeb..a3a482453 100644 --- a/sc2/src/sc2code/libs/graphics/pixmap.c +++ b/sc2/src/sc2code/libs/graphics/pixmap.c @@ -44,9 +44,7 @@ ReleaseDrawable (FRAMEPTR FramePtr) DRAWABLEPTR DrawablePtr; DrawablePtr = GetFrameParentDrawable (FramePtr); - Drawable = BUILD_DRAWABLE ( - DrawablePtr->hDrawable, INDEX_GET (FramePtr->TypeIndexAndFlags) - ); + Drawable = BUILD_DRAWABLE (DrawablePtr->hDrawable, FramePtr->Index); UnlockDrawable (Drawable); return (Drawable); @@ -76,7 +74,7 @@ GetFrameCount (FRAMEPTR FramePtr) return (0); DrawablePtr = GetFrameParentDrawable (FramePtr); - return (INDEX_GET (DrawablePtr->FlagsAndIndex) + 1); + return DrawablePtr->MaxIndex + 1; } COUNT @@ -85,7 +83,7 @@ GetFrameIndex (FRAMEPTR FramePtr) if (FramePtr == 0) return (0); - return ((UWORD)INDEX_GET (FramePtr->TypeIndexAndFlags)); + return FramePtr->Index; } FRAME @@ -97,8 +95,7 @@ SetAbsFrameIndex (FRAMEPTR FramePtr, COUNT FrameIndex) DrawablePtr = GetFrameParentDrawable (FramePtr); - FrameIndex = FrameIndex - % (INDEX_GET (DrawablePtr->FlagsAndIndex) + 1); + FrameIndex = FrameIndex % (DrawablePtr->MaxIndex + 1); FramePtr = (FRAMEPTR)&DrawablePtr->Frame[FrameIndex]; } @@ -114,14 +111,14 @@ SetRelFrameIndex (FRAMEPTR FramePtr, SIZE FrameOffs) DRAWABLEPTR DrawablePtr; DrawablePtr = GetFrameParentDrawable (FramePtr); - num_frames = INDEX_GET (DrawablePtr->FlagsAndIndex) + 1; + num_frames = DrawablePtr->MaxIndex + 1; if (FrameOffs < 0) { while ((FrameOffs += num_frames) < 0) ; } - FrameOffs = ((SWORD)INDEX_GET (FramePtr->TypeIndexAndFlags) + FrameOffs) % num_frames; + FrameOffs = ((SWORD)FramePtr->Index + FrameOffs) % num_frames; FramePtr = (FRAMEPTR)&DrawablePtr->Frame[FrameOffs]; } @@ -150,7 +147,7 @@ IncFrameIndex (FRAMEPTR FramePtr) return (0); DrawablePtr = GetFrameParentDrawable (FramePtr); - if (INDEX_GET (FramePtr->TypeIndexAndFlags) < (DWORD)INDEX_GET (DrawablePtr->FlagsAndIndex)) + if (FramePtr->Index < DrawablePtr->MaxIndex) return ((FRAME)++FramePtr); else return ((FRAME)DrawablePtr->Frame); @@ -162,13 +159,13 @@ DecFrameIndex (FRAMEPTR FramePtr) if (FramePtr == 0) return (0); - if (INDEX_GET (FramePtr->TypeIndexAndFlags)) + if (FramePtr->Index > 0) return ((FRAME)--FramePtr); else { DRAWABLEPTR DrawablePtr; DrawablePtr = GetFrameParentDrawable (FramePtr); - return ((FRAME)&DrawablePtr->Frame[INDEX_GET (DrawablePtr->FlagsAndIndex)]); + return ((FRAME)&DrawablePtr->Frame[DrawablePtr->MaxIndex]); } } diff --git a/sc2/src/sc2code/libs/graphics/sdl/3do_blt.c b/sc2/src/sc2code/libs/graphics/sdl/3do_blt.c index 9c6e895e7..ff9399c42 100644 --- a/sc2/src/sc2code/libs/graphics/sdl/3do_blt.c +++ b/sc2/src/sc2code/libs/graphics/sdl/3do_blt.c @@ -39,11 +39,10 @@ GetGraphicScale () static void read_screen (PRECT lpRect, FRAMEPTR DstFramePtr) { - if (TYPE_GET (_CurFramePtr->TypeIndexAndFlags) != SCREEN_DRAWABLE - || TYPE_GET (DstFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE - || !(TYPE_GET (GetFrameParentDrawable (DstFramePtr) - ->FlagsAndIndex) - & ((DWORD) MAPPED_TO_DISPLAY << FTYPE_SHIFT))) + if (_CurFramePtr->Type != SCREEN_DRAWABLE + || DstFramePtr->Type == SCREEN_DRAWABLE + || !(GetFrameParentDrawable (DstFramePtr)->Flags + & MAPPED_TO_DISPLAY)) { log_add (log_Warning, "Unimplemented function activated: read_screen()"); } diff --git a/sc2/src/sc2code/libs/graphics/sdl/3do_getbody.c b/sc2/src/sc2code/libs/graphics/sdl/3do_getbody.c index 5384a2e16..deff2164a 100644 --- a/sc2/src/sc2code/libs/graphics/sdl/3do_getbody.c +++ b/sc2/src/sc2code/libs/graphics/sdl/3do_getbody.c @@ -49,8 +49,8 @@ process_image (FRAMEPTR FramePtr, SDL_Surface *img[], AniData *ani, int cel_ct) TFB_Image *tfbimg; int hx, hy; - TYPE_SET (FramePtr->TypeIndexAndFlags, ROM_DRAWABLE); - INDEX_SET (FramePtr->TypeIndexAndFlags, cel_ct); + FramePtr->Type = ROM_DRAWABLE; + FramePtr->Index = cel_ct; // handle transparency cases if (img[cel_ct]->format->palette) @@ -193,8 +193,7 @@ FRAMEPTR stretch_frame (FRAMEPTR FramePtr, int neww, int newh, int destroy) TFB_Canvas src, dst; EXTENT ext; - flags = TYPE_GET (GetFrameParentDrawable (FramePtr) - ->FlagsAndIndex) >> FTYPE_SHIFT; + flags = GetFrameParentDrawable (FramePtr)->Flags; NewFrame = CaptureDrawable ( CreateDrawable (flags, (SIZE)neww, (SIZE)newh, 1)); tfbImg = FramePtr->image; @@ -454,9 +453,8 @@ _GetCelData (uio_Stream *fp, DWORD length) FRAMEPTR FramePtr; DrawablePtr->hDrawable = GetDrawableHandle (Drawable); - TYPE_SET (DrawablePtr->FlagsAndIndex, - (DRAWABLE_TYPE)WANT_PIXMAP << FTYPE_SHIFT); - INDEX_SET (DrawablePtr->FlagsAndIndex, cel_ct - 1); + DrawablePtr->Flags = WANT_PIXMAP; + DrawablePtr->MaxIndex = cel_ct - 1; FramePtr = &DrawablePtr->Frame[cel_ct]; while (--FramePtr, cel_ct--) @@ -482,12 +480,12 @@ _ReleaseCelData (MEM_HANDLE handle) if ((DrawablePtr = LockDrawable (handle)) == 0) return (FALSE); - cel_ct = INDEX_GET (DrawablePtr->FlagsAndIndex)+1; + cel_ct = DrawablePtr->MaxIndex + 1; if (DrawablePtr->Frame) { FramePtr = DrawablePtr->Frame; - if (TYPE_GET (FramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE) + if (FramePtr->Type == SCREEN_DRAWABLE) { FramePtr = NULL; } @@ -753,8 +751,8 @@ _request_drawable (COUNT NumFrames, DRAWABLE_TYPE DrawableType, FRAMEPTR FramePtr; DrawablePtr->hDrawable = GetDrawableHandle (Drawable); - TYPE_SET (DrawablePtr->FlagsAndIndex, flags << FTYPE_SHIFT); - INDEX_SET (DrawablePtr->FlagsAndIndex, NumFrames - 1); + DrawablePtr->Flags = flags; + DrawablePtr->MaxIndex = NumFrames - 1; imgw = width; imgh = height; @@ -771,8 +769,8 @@ _request_drawable (COUNT NumFrames, DRAWABLE_TYPE DrawableType, FramePtr->image = Image; } - TYPE_SET (FramePtr->TypeIndexAndFlags, DrawableType); - INDEX_SET (FramePtr->TypeIndexAndFlags, NumFrames); + FramePtr->Type = DrawableType; + FramePtr->Index = NumFrames; SetFrameBounds (FramePtr, width, height); --FramePtr; } diff --git a/sc2/src/sc2code/libs/graphics/sdl/dcqueue.c b/sc2/src/sc2code/libs/graphics/sdl/dcqueue.c index 39ffa3239..fb386d4f6 100644 --- a/sc2/src/sc2code/libs/graphics/sdl/dcqueue.c +++ b/sc2/src/sc2code/libs/graphics/sdl/dcqueue.c @@ -213,7 +213,7 @@ TFB_EnqueueDrawCommand (TFB_DrawCommand* DrawCommand) } if (DrawCommand->Type <= TFB_DRAWCOMMANDTYPE_COPYTOIMAGE - && TYPE_GET (_CurFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE) + && _CurFramePtr->Type == SCREEN_DRAWABLE) { static RECT scissor_rect; diff --git a/sc2/src/sc2code/libs/graphics/sdl/rndzoom.c b/sc2/src/sc2code/libs/graphics/sdl/rndzoom.c index f6261b2d1..02acff6ce 100644 --- a/sc2/src/sc2code/libs/graphics/sdl/rndzoom.c +++ b/sc2/src/sc2code/libs/graphics/sdl/rndzoom.c @@ -534,16 +534,15 @@ void random16xZoomSurfaceRGBA (SDL_Surface *src, SDL_Surface *dst) FRAMEPTR scale16xRandomizeFrame (FRAMEPTR NewFrame, FRAMEPTR FramePtr) { TFB_Image *origImg, *newImg; - UBYTE type; + CREATE_FLAGS flags; if (NewFrame == NULL) { - type = (UBYTE)TYPE_GET (GetFrameParentDrawable (FramePtr) - ->FlagsAndIndex) >> FTYPE_SHIFT; + flags = GetFrameParentDrawable (FramePtr)->Flags; NewFrame = CaptureDrawable ( - CreateDrawable (type, - (SIZE)((GetFrameWidth (FramePtr)) << 2), - (SIZE)((GetFrameHeight (FramePtr)) << 2), 1)); + CreateDrawable (flags, + GetFrameWidth (FramePtr) << 2, + GetFrameHeight (FramePtr) << 2, 1)); } newImg = NewFrame->image; diff --git a/sc2/src/sc2code/libs/graphics/tfb_prim.c b/sc2/src/sc2code/libs/graphics/tfb_prim.c index d65714434..69f337f9f 100644 --- a/sc2/src/sc2code/libs/graphics/tfb_prim.c +++ b/sc2/src/sc2code/libs/graphics/tfb_prim.c @@ -37,7 +37,7 @@ TFB_Prim_Point (PPOINT p, TFB_Palette *color) r.corner.y = p->y - _CurFramePtr->HotSpot.y; r.extent.width = r.extent.height = 1; - if (TYPE_GET (_CurFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE) + if (_CurFramePtr->Type == SCREEN_DRAWABLE) TFB_DrawScreen_Rect (&r, color->r, color->g, color->b, TFB_SCREEN_MAIN); else TFB_DrawImage_Rect (&r, color->r, color->g, color->b, _CurFramePtr->image); @@ -92,7 +92,7 @@ TFB_Prim_FillRect (PRECT r, TFB_Palette *color) rect.extent.height) >> 1; } - if (TYPE_GET (_CurFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE) + if (_CurFramePtr->Type == SCREEN_DRAWABLE) TFB_DrawScreen_Rect (&rect, color->r, color->g, color->b, TFB_SCREEN_MAIN); else TFB_DrawImage_Rect (&rect, color->r, color->g, color->b, _CurFramePtr->image); @@ -108,7 +108,7 @@ TFB_Prim_Line (PLINE line, TFB_Palette *color) x2=line->second.x - _CurFramePtr->HotSpot.x; y2=line->second.y - _CurFramePtr->HotSpot.y; - if (TYPE_GET (_CurFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE) + if (_CurFramePtr->Type == SCREEN_DRAWABLE) TFB_DrawScreen_Line (x1, y1, x2, y2, color->r, color->g, color->b, TFB_SCREEN_MAIN); else TFB_DrawImage_Line (x1, y1, x2, y2, color->r, color->g, color->b, _CurFramePtr->image); @@ -153,7 +153,7 @@ TFB_Prim_Stamp (PSTAMP stmp) UnlockMutex (img->mutex); - if (TYPE_GET (_CurFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE) + if (_CurFramePtr->Type == SCREEN_DRAWABLE) { TFB_DrawScreen_Image (img, x, y, gscale, cmap, TFB_SCREEN_MAIN); } @@ -200,7 +200,7 @@ TFB_Prim_StampFill (PSTAMP stmp, TFB_Palette *color) UnlockMutex (img->mutex); - if (TYPE_GET (_CurFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE) + if (_CurFramePtr->Type == SCREEN_DRAWABLE) { TFB_DrawScreen_FilledImage (img, x, y, gscale, r, g, b, TFB_SCREEN_MAIN); @@ -220,7 +220,7 @@ TFB_Prim_FontChar (PPOINT origin, TFB_Char *fontChar, TFB_Image *backing) x = origin->x - _CurFramePtr->HotSpot.x; y = origin->y - _CurFramePtr->HotSpot.y; - if (TYPE_GET (_CurFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE) + if (_CurFramePtr->Type == SCREEN_DRAWABLE) { TFB_DrawScreen_FontChar (fontChar, backing, x, y, TFB_SCREEN_MAIN);