Refactored font engine: fonts are loaded and treated as alpha-channel-only images; rendered through a per-context backing surface which unifies solid color and effects processing; new TFB_Prim_FontChar and underlying methods
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2047 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -39,7 +39,7 @@ DrawConfirmationWindow (BOOLEAN answer)
|
|||||||
COLOR oldfg = SetContextForeGroundColor (MENU_TEXT_COLOR);
|
COLOR oldfg = SetContextForeGroundColor (MENU_TEXT_COLOR);
|
||||||
COLOR dark, medium;
|
COLOR dark, medium;
|
||||||
FONT oldfont = SetContextFont (StarConFont);
|
FONT oldfont = SetContextFont (StarConFont);
|
||||||
FONTEFFECT oldFontEffect = SetContextFontEffect (0, 0, 0);
|
FRAME oldFontEffect = SetContextFontEffect (NULL);
|
||||||
RECT r;
|
RECT r;
|
||||||
TEXT t;
|
TEXT t;
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ DrawConfirmationWindow (BOOLEAN answer)
|
|||||||
|
|
||||||
UnbatchGraphics ();
|
UnbatchGraphics ();
|
||||||
|
|
||||||
SetContextFontEffect (oldFontEffect.type, oldFontEffect.from, oldFontEffect.to);
|
SetContextFontEffect (oldFontEffect);
|
||||||
SetContextFont (oldfont);
|
SetContextFont (oldfont);
|
||||||
SetContextForeGroundColor (oldfg);
|
SetContextForeGroundColor (oldfg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,6 +117,9 @@ LoadSC2Data (void)
|
|||||||
if (MiscDataFrame == NULL)
|
if (MiscDataFrame == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
FontGradFrame = CaptureDrawable (
|
||||||
|
LoadGraphic (FONTGRAD_PMAP_ANIM));
|
||||||
|
|
||||||
SetResourceIndex (hOldIndex);
|
SetResourceIndex (hOldIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,6 +314,8 @@ FreeSC2Data (void)
|
|||||||
{
|
{
|
||||||
DestroyContext (ReleaseContext (RadarContext));
|
DestroyContext (ReleaseContext (RadarContext));
|
||||||
RadarContext = 0;
|
RadarContext = 0;
|
||||||
|
DestroyDrawable (ReleaseDrawable (FontGradFrame));
|
||||||
|
FontGradFrame = 0;
|
||||||
DestroyDrawable (ReleaseDrawable (MiscDataFrame));
|
DestroyDrawable (ReleaseDrawable (MiscDataFrame));
|
||||||
MiscDataFrame = 0;
|
MiscDataFrame = 0;
|
||||||
DestroyDrawable (ReleaseDrawable (FlagStatFrame));
|
DestroyDrawable (ReleaseDrawable (FlagStatFrame));
|
||||||
|
|||||||
@@ -286,4 +286,6 @@
|
|||||||
#define SISSKEL_MASK_PMAP_ANIM 0x23611c02L
|
#define SISSKEL_MASK_PMAP_ANIM 0x23611c02L
|
||||||
#define ORBENTER_PMAP_ANIM 0x23811d02L
|
#define ORBENTER_PMAP_ANIM 0x23811d02L
|
||||||
#define MENUBKG_PMAP_ANIM 0x23a11e02L
|
#define MENUBKG_PMAP_ANIM 0x23a11e02L
|
||||||
|
#define FONTGRAD_PMAP_ANIM 0x03e11f02L
|
||||||
|
#define LANDER_FONTEFF_PMAP_ANIM 0x11412002L
|
||||||
|
|
||||||
|
|||||||
@@ -162,14 +162,6 @@ extern INTERSECT_CODE BoxIntersect (PRECT pr1, PRECT pr2, PRECT
|
|||||||
printer);
|
printer);
|
||||||
extern void BoxUnion (PRECT pr1, PRECT pr2, PRECT punion);
|
extern void BoxUnion (PRECT pr1, PRECT pr2, PRECT punion);
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
BOOLEAN Use;
|
|
||||||
DWORD from;
|
|
||||||
DWORD to;
|
|
||||||
BYTE type;
|
|
||||||
} FONTEFFECT;
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
FadeAllToWhite = 250,
|
FadeAllToWhite = 250,
|
||||||
@@ -232,13 +224,14 @@ extern DWORD LoadFontFile (PVOID pStr);
|
|||||||
extern DWORD LoadGraphicInstance (DWORD res);
|
extern DWORD LoadGraphicInstance (DWORD res);
|
||||||
extern DWORD LoadGraphic (DWORD res);
|
extern DWORD LoadGraphic (DWORD res);
|
||||||
extern DRAWABLE LoadDisplayPixmap (PRECT area, FRAME frame);
|
extern DRAWABLE LoadDisplayPixmap (PRECT area, FRAME frame);
|
||||||
extern FONTEFFECT SetContextFontEffect (BYTE type, DWORD from, DWORD to);
|
extern FRAME SetContextFontEffect (FRAME EffectFrame);
|
||||||
extern FONT SetContextFont (FONT Font);
|
extern FONT SetContextFont (FONT Font);
|
||||||
extern BOOLEAN DestroyFont (FONT_REF FontRef);
|
extern BOOLEAN DestroyFont (FONT_REF FontRef);
|
||||||
extern FONT CaptureFont (FONT_REF FontRef);
|
extern FONT CaptureFont (FONT_REF FontRef);
|
||||||
extern FONT_REF ReleaseFont (FONT Font);
|
extern FONT_REF ReleaseFont (FONT Font);
|
||||||
extern BOOLEAN TextRect (PTEXT pText, PRECT pRect, PBYTE pdelta);
|
extern BOOLEAN TextRect (PTEXT pText, PRECT pRect, PBYTE pdelta);
|
||||||
extern BOOLEAN GetContextFontLeading (PSIZE pheight);
|
extern BOOLEAN GetContextFontLeading (PSIZE pheight);
|
||||||
|
extern BOOLEAN GetContextFontLeadingWidth (PSIZE pwidth);
|
||||||
extern COUNT GetFrameCount (FRAME Frame);
|
extern COUNT GetFrameCount (FRAME Frame);
|
||||||
extern COUNT GetFrameIndex (FRAME Frame);
|
extern COUNT GetFrameIndex (FRAME Frame);
|
||||||
extern FRAME SetAbsFrameIndex (FRAME Frame, COUNT FrameIndex);
|
extern FRAME SetAbsFrameIndex (FRAME Frame, COUNT FrameIndex);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gfxintrn.h"
|
#include "gfxintrn.h"
|
||||||
|
#include "gfxother.h"
|
||||||
|
|
||||||
GRAPHICS_STATUS _GraphicsStatusFlags;
|
GRAPHICS_STATUS _GraphicsStatusFlags;
|
||||||
CONTEXTPTR _pCurContext;
|
CONTEXTPTR _pCurContext;
|
||||||
@@ -142,6 +143,11 @@ SetContextForeGroundColor (COLOR Color)
|
|||||||
if ((oldColor = _get_context_fg_color ()) != Color)
|
if ((oldColor = _get_context_fg_color ()) != Color)
|
||||||
{
|
{
|
||||||
SwitchContextForeGroundColor (Color);
|
SwitchContextForeGroundColor (Color);
|
||||||
|
|
||||||
|
if (!(_get_context_fbk_flags () & FBK_IMAGE))
|
||||||
|
{
|
||||||
|
SetContextFBkFlags (FBK_DIRTY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SetPrimColor (&_locPrim, Color);
|
SetPrimColor (&_locPrim, Color);
|
||||||
|
|
||||||
@@ -210,3 +216,67 @@ GetContextClipRect (PRECT lpRect)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FRAME
|
||||||
|
SetContextFontEffect (FRAME EffectFrame)
|
||||||
|
{
|
||||||
|
FRAME LastEffect;
|
||||||
|
|
||||||
|
if (!ContextActive ())
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
LastEffect = _get_context_fonteff ();
|
||||||
|
if (EffectFrame != LastEffect)
|
||||||
|
{
|
||||||
|
SwitchContextFontEffect (EffectFrame);
|
||||||
|
|
||||||
|
if (EffectFrame != 0)
|
||||||
|
{
|
||||||
|
SetContextFBkFlags (FBK_IMAGE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UnsetContextFBkFlags (FBK_IMAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return LastEffect;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
FixContextFontEffect (void)
|
||||||
|
{
|
||||||
|
SIZE w, h;
|
||||||
|
TFB_Image* img;
|
||||||
|
|
||||||
|
if (!ContextActive () || (_get_context_font_backing () != 0
|
||||||
|
&& !(_get_context_fbk_flags () & FBK_DIRTY)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!GetContextFontLeading (&h) || !GetContextFontLeadingWidth (&w))
|
||||||
|
return;
|
||||||
|
|
||||||
|
img = _pCurContext->FontBacking;
|
||||||
|
if (img)
|
||||||
|
TFB_DrawScreen_DeleteImage (img);
|
||||||
|
|
||||||
|
img = TFB_DrawImage_CreateForScreen (w, h, TRUE);
|
||||||
|
if (_get_context_fbk_flags () & FBK_IMAGE)
|
||||||
|
{ // image pattern backing
|
||||||
|
FRAMEPTR EffectFrame = (FRAMEPTR)_get_context_fonteff ();
|
||||||
|
|
||||||
|
TFB_DrawImage_Image (EffectFrame->image,
|
||||||
|
-EffectFrame->HotSpot.x, -EffectFrame->HotSpot.y,
|
||||||
|
0, NULL, img);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // solid color backing
|
||||||
|
TFB_Palette color;
|
||||||
|
RECT r = { {0, 0}, {w, h} };
|
||||||
|
|
||||||
|
COLORtoPalette (_get_context_fg_color (), &color);
|
||||||
|
TFB_DrawImage_Rect (&r, color.r, color.g, color.b, img);
|
||||||
|
}
|
||||||
|
|
||||||
|
_pCurContext->FontBacking = img;
|
||||||
|
UnsetContextFBkFlags (FBK_DIRTY);
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,6 +19,12 @@
|
|||||||
#ifndef _CONTEXT_H
|
#ifndef _CONTEXT_H
|
||||||
#define _CONTEXT_H
|
#define _CONTEXT_H
|
||||||
|
|
||||||
|
#include "tfb_draw.h"
|
||||||
|
|
||||||
|
typedef UWORD FBK_FLAGS;
|
||||||
|
#define FBK_DIRTY (1 << 0)
|
||||||
|
#define FBK_IMAGE (1 << 1)
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
CONTEXT_REF ContextRef;
|
CONTEXT_REF ContextRef;
|
||||||
@@ -29,6 +35,11 @@ typedef struct
|
|||||||
FONT Font;
|
FONT Font;
|
||||||
|
|
||||||
RECT ClipRect;
|
RECT ClipRect;
|
||||||
|
|
||||||
|
FRAME FontEffect;
|
||||||
|
TFB_Image *FontBacking;
|
||||||
|
FBK_FLAGS BackingFlags;
|
||||||
|
|
||||||
} CONTEXT_DESC;
|
} CONTEXT_DESC;
|
||||||
typedef CONTEXT_DESC *PCONTEXT_DESC;
|
typedef CONTEXT_DESC *PCONTEXT_DESC;
|
||||||
|
|
||||||
@@ -51,6 +62,9 @@ extern PRIMITIVE _locPrim;
|
|||||||
#define _get_context_flags() (_pCurContext->Flags)
|
#define _get_context_flags() (_pCurContext->Flags)
|
||||||
#define _get_context_fg_frame() (_pCurContext->ForeGroundFrame)
|
#define _get_context_fg_frame() (_pCurContext->ForeGroundFrame)
|
||||||
#define _get_context_font() (_pCurContext->Font)
|
#define _get_context_font() (_pCurContext->Font)
|
||||||
|
#define _get_context_fbk_flags() (_pCurContext->BackingFlags)
|
||||||
|
#define _get_context_fonteff() (_pCurContext->FontEffect)
|
||||||
|
#define _get_context_font_backing() (_pCurContext->FontBacking)
|
||||||
|
|
||||||
#define SwitchContextDrawState(s) \
|
#define SwitchContextDrawState(s) \
|
||||||
{ \
|
{ \
|
||||||
@@ -79,11 +93,25 @@ extern PRIMITIVE _locPrim;
|
|||||||
#define SwitchContextFont(f) \
|
#define SwitchContextFont(f) \
|
||||||
{ \
|
{ \
|
||||||
_pCurContext->Font = (f); \
|
_pCurContext->Font = (f); \
|
||||||
|
SetContextFBkFlags (FBK_DIRTY); \
|
||||||
}
|
}
|
||||||
#define SwitchContextBGFunc(f) \
|
#define SwitchContextBGFunc(f) \
|
||||||
{ \
|
{ \
|
||||||
_pCurContext->BackGroundFunc = (f); \
|
_pCurContext->BackGroundFunc = (f); \
|
||||||
}
|
}
|
||||||
|
#define SetContextFBkFlags(f) \
|
||||||
|
{ \
|
||||||
|
_pCurContext->BackingFlags |= (f); \
|
||||||
|
}
|
||||||
|
#define UnsetContextFBkFlags(f) \
|
||||||
|
{ \
|
||||||
|
_pCurContext->BackingFlags &= ~(f); \
|
||||||
|
}
|
||||||
|
#define SwitchContextFontEffect(f) \
|
||||||
|
{ \
|
||||||
|
_pCurContext->FontEffect = (f); \
|
||||||
|
SetContextFBkFlags (FBK_DIRTY); \
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
These seem to have been moved to gfxlib.h, but not in their
|
These seem to have been moved to gfxlib.h, but not in their
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ enum
|
|||||||
TFB_DRAWCOMMANDTYPE_RECTANGLE,
|
TFB_DRAWCOMMANDTYPE_RECTANGLE,
|
||||||
TFB_DRAWCOMMANDTYPE_IMAGE,
|
TFB_DRAWCOMMANDTYPE_IMAGE,
|
||||||
TFB_DRAWCOMMANDTYPE_FILLEDIMAGE,
|
TFB_DRAWCOMMANDTYPE_FILLEDIMAGE,
|
||||||
|
TFB_DRAWCOMMANDTYPE_FONTCHAR,
|
||||||
|
|
||||||
TFB_DRAWCOMMANDTYPE_COPY,
|
TFB_DRAWCOMMANDTYPE_COPY,
|
||||||
TFB_DRAWCOMMANDTYPE_COPYTOIMAGE,
|
TFB_DRAWCOMMANDTYPE_COPYTOIMAGE,
|
||||||
@@ -37,6 +38,7 @@ enum
|
|||||||
TFB_DRAWCOMMANDTYPE_SETPALETTE,
|
TFB_DRAWCOMMANDTYPE_SETPALETTE,
|
||||||
TFB_DRAWCOMMANDTYPE_SETMIPMAP,
|
TFB_DRAWCOMMANDTYPE_SETMIPMAP,
|
||||||
TFB_DRAWCOMMANDTYPE_DELETEIMAGE,
|
TFB_DRAWCOMMANDTYPE_DELETEIMAGE,
|
||||||
|
TFB_DRAWCOMMANDTYPE_DELETEDATA,
|
||||||
TFB_DRAWCOMMANDTYPE_SENDSIGNAL,
|
TFB_DRAWCOMMANDTYPE_SENDSIGNAL,
|
||||||
TFB_DRAWCOMMANDTYPE_REINITVIDEO,
|
TFB_DRAWCOMMANDTYPE_REINITVIDEO,
|
||||||
};
|
};
|
||||||
@@ -73,6 +75,14 @@ typedef struct tfb_dc_filledimg
|
|||||||
int scale;
|
int scale;
|
||||||
} TFB_DrawCommand_FilledImage;
|
} TFB_DrawCommand_FilledImage;
|
||||||
|
|
||||||
|
typedef struct tfb_dc_fontchar
|
||||||
|
{
|
||||||
|
TFB_Char *fontchar;
|
||||||
|
TFB_Image *backing;
|
||||||
|
int x, y;
|
||||||
|
SCREEN destBuffer;
|
||||||
|
} TFB_DrawCommand_FontChar;
|
||||||
|
|
||||||
typedef struct tfb_dc_copy
|
typedef struct tfb_dc_copy
|
||||||
{
|
{
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
@@ -109,6 +119,12 @@ typedef struct tfb_dc_delimg
|
|||||||
TFB_Image *image;
|
TFB_Image *image;
|
||||||
} TFB_DrawCommand_DeleteImage;
|
} TFB_DrawCommand_DeleteImage;
|
||||||
|
|
||||||
|
typedef struct tfb_dc_deldata
|
||||||
|
{
|
||||||
|
void *data;
|
||||||
|
// data must be a result of HXalloc() call
|
||||||
|
} TFB_DrawCommand_DeleteData;
|
||||||
|
|
||||||
typedef struct tfb_dc_signal
|
typedef struct tfb_dc_signal
|
||||||
{
|
{
|
||||||
Semaphore sem;
|
Semaphore sem;
|
||||||
@@ -127,12 +143,14 @@ typedef struct tfb_drawcommand
|
|||||||
TFB_DrawCommand_Rect rect;
|
TFB_DrawCommand_Rect rect;
|
||||||
TFB_DrawCommand_Image image;
|
TFB_DrawCommand_Image image;
|
||||||
TFB_DrawCommand_FilledImage filledimage;
|
TFB_DrawCommand_FilledImage filledimage;
|
||||||
|
TFB_DrawCommand_FontChar fontchar;
|
||||||
TFB_DrawCommand_Copy copy;
|
TFB_DrawCommand_Copy copy;
|
||||||
TFB_DrawCommand_CopyToImage copytoimage;
|
TFB_DrawCommand_CopyToImage copytoimage;
|
||||||
TFB_DrawCommand_Scissor scissor;
|
TFB_DrawCommand_Scissor scissor;
|
||||||
TFB_DrawCommand_SetPalette setpalette;
|
TFB_DrawCommand_SetPalette setpalette;
|
||||||
TFB_DrawCommand_SetMipmap setmipmap;
|
TFB_DrawCommand_SetMipmap setmipmap;
|
||||||
TFB_DrawCommand_DeleteImage deleteimage;
|
TFB_DrawCommand_DeleteImage deleteimage;
|
||||||
|
TFB_DrawCommand_DeleteData deletedata;
|
||||||
TFB_DrawCommand_SendSignal sendsignal;
|
TFB_DrawCommand_SendSignal sendsignal;
|
||||||
TFB_DrawCommand_ReinitVideo reinitvideo;
|
TFB_DrawCommand_ReinitVideo reinitvideo;
|
||||||
} data;
|
} data;
|
||||||
|
|||||||
@@ -21,38 +21,12 @@
|
|||||||
#include "gfxother.h"
|
#include "gfxother.h"
|
||||||
|
|
||||||
|
|
||||||
extern FRAME Build_Font_Effect (FRAME FramePtr, DWORD from, DWORD to,
|
extern void FixContextFontEffect (void);
|
||||||
BYTE type);
|
static inline TFB_Char *getCharFrame (FONT_DESC *fontPtr, wchar_t ch);
|
||||||
static inline FRAME_DESC *getCharFrame (FONT_DESC *fontPtr, wchar_t ch);
|
|
||||||
|
|
||||||
static BYTE char_delta_array[MAX_DELTAS];
|
static BYTE char_delta_array[MAX_DELTAS];
|
||||||
// XXX: This does not seem to be used.
|
// XXX: This does not seem to be used.
|
||||||
|
|
||||||
static FONTEFFECT FontEffect = {0,0,0,0};
|
|
||||||
|
|
||||||
FONTEFFECT
|
|
||||||
SetContextFontEffect (BYTE type, DWORD from, DWORD to)
|
|
||||||
{
|
|
||||||
FONTEFFECT oldFontEffect = FontEffect;
|
|
||||||
|
|
||||||
if (from == to)
|
|
||||||
FontEffect.Use = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FontEffect.Use = 1;
|
|
||||||
FontEffect.from = from;
|
|
||||||
FontEffect.to = to;
|
|
||||||
FontEffect.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!oldFontEffect.Use)
|
|
||||||
// reset fields so that when struct passed back
|
|
||||||
// the logic works correctly
|
|
||||||
oldFontEffect.to = oldFontEffect.from = 0;
|
|
||||||
|
|
||||||
return oldFontEffect;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FONT
|
FONT
|
||||||
SetContextFont (FONT Font)
|
SetContextFont (FONT Font)
|
||||||
@@ -113,6 +87,7 @@ ReleaseFont (FONT Font)
|
|||||||
void
|
void
|
||||||
font_DrawText (PTEXT lpText)
|
font_DrawText (PTEXT lpText)
|
||||||
{
|
{
|
||||||
|
FixContextFontEffect ();
|
||||||
SetPrimType (&_locPrim, TEXT_PRIM);
|
SetPrimType (&_locPrim, TEXT_PRIM);
|
||||||
_locPrim.Object.Text = *lpText;
|
_locPrim.Object.Text = *lpText;
|
||||||
DrawBatch (&_locPrim, 0, BATCH_SINGLE);
|
DrawBatch (&_locPrim, 0, BATCH_SINGLE);
|
||||||
@@ -131,6 +106,19 @@ GetContextFontLeading (PSIZE pheight)
|
|||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
GetContextFontLeadingWidth (PSIZE pwidth)
|
||||||
|
{
|
||||||
|
if (_CurFontPtr != 0)
|
||||||
|
{
|
||||||
|
*pwidth = (SIZE)_CurFontPtr->LeadingWidth;
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
*pwidth = 0;
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
TextRect (PTEXT lpText, PRECT pRect, PBYTE pdelta)
|
TextRect (PTEXT lpText, PRECT pRect, PBYTE pdelta)
|
||||||
{
|
{
|
||||||
@@ -174,7 +162,7 @@ TextRect (PTEXT lpText, PRECT pRect, PBYTE pdelta)
|
|||||||
{
|
{
|
||||||
wchar_t ch;
|
wchar_t ch;
|
||||||
SIZE last_width;
|
SIZE last_width;
|
||||||
FRAME_DESC *charFrame;
|
TFB_Char *charFrame;
|
||||||
|
|
||||||
last_width = width;
|
last_width = width;
|
||||||
|
|
||||||
@@ -190,18 +178,18 @@ TextRect (PTEXT lpText, PRECT pRect, PBYTE pdelta)
|
|||||||
}
|
}
|
||||||
|
|
||||||
charFrame = getCharFrame (FontPtr, ch);
|
charFrame = getCharFrame (FontPtr, ch);
|
||||||
if (charFrame != NULL && GetFrameWidth (charFrame))
|
if (charFrame != NULL && charFrame->disp.width)
|
||||||
{
|
{
|
||||||
COORD y;
|
COORD y;
|
||||||
|
|
||||||
y = -charFrame->HotSpot.y;
|
y = -charFrame->HotSpot.y;
|
||||||
if (y < top_y)
|
if (y < top_y)
|
||||||
top_y = y;
|
top_y = y;
|
||||||
y += GetFrameHeight (charFrame);
|
y += charFrame->disp.height;
|
||||||
if (y > bot_y)
|
if (y > bot_y)
|
||||||
bot_y = y;
|
bot_y = y;
|
||||||
|
|
||||||
width += GetFrameWidth (charFrame);
|
width += charFrame->disp.width;
|
||||||
#if 0
|
#if 0
|
||||||
if (num_chars && next_ch < (UNICODE) MAX_CHARS
|
if (num_chars && next_ch < (UNICODE) MAX_CHARS
|
||||||
&& !(FontPtr->KernTab[ch]
|
&& !(FontPtr->KernTab[ch]
|
||||||
@@ -252,18 +240,22 @@ _text_blt (PRECT pClipRect, PRIMITIVEPTR PrimPtr)
|
|||||||
wchar_t next_ch;
|
wchar_t next_ch;
|
||||||
const unsigned char *pStr;
|
const unsigned char *pStr;
|
||||||
TEXTPTR TextPtr;
|
TEXTPTR TextPtr;
|
||||||
STAMP s;
|
POINT origin;
|
||||||
TFB_Palette color;
|
TFB_Palette color;
|
||||||
|
TFB_Image *backing;
|
||||||
|
|
||||||
FontPtr = _CurFontPtr;
|
FontPtr = _CurFontPtr;
|
||||||
if (FontPtr == NULL)
|
if (FontPtr == NULL)
|
||||||
return;
|
return;
|
||||||
|
backing = _get_context_font_backing ();
|
||||||
|
if (!backing)
|
||||||
|
return;
|
||||||
|
|
||||||
COLORtoPalette (_get_context_fg_color (), &color);
|
COLORtoPalette (_get_context_fg_color (), &color);
|
||||||
|
|
||||||
TextPtr = &PrimPtr->Object.Text;
|
TextPtr = &PrimPtr->Object.Text;
|
||||||
s.origin.x = _save_stamp.origin.x;
|
origin.x = _save_stamp.origin.x;
|
||||||
s.origin.y = TextPtr->baseline.y;
|
origin.y = TextPtr->baseline.y;
|
||||||
num_chars = TextPtr->CharCount;
|
num_chars = TextPtr->CharCount;
|
||||||
if (num_chars == 0)
|
if (num_chars == 0)
|
||||||
return;
|
return;
|
||||||
@@ -276,6 +268,7 @@ _text_blt (PRECT pClipRect, PRIMITIVEPTR PrimPtr)
|
|||||||
while (num_chars--)
|
while (num_chars--)
|
||||||
{
|
{
|
||||||
wchar_t ch;
|
wchar_t ch;
|
||||||
|
TFB_Char* fontChar;
|
||||||
|
|
||||||
ch = next_ch;
|
ch = next_ch;
|
||||||
if (num_chars > 0)
|
if (num_chars > 0)
|
||||||
@@ -285,44 +278,33 @@ _text_blt (PRECT pClipRect, PRIMITIVEPTR PrimPtr)
|
|||||||
num_chars = 0;
|
num_chars = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
s.frame = getCharFrame (FontPtr, ch);
|
fontChar = getCharFrame (FontPtr, ch);
|
||||||
if (s.frame != NULL && GetFrameWidth (s.frame))
|
if (fontChar != NULL && fontChar->disp.width)
|
||||||
{
|
{
|
||||||
RECT r;
|
RECT r;
|
||||||
|
|
||||||
r.corner.x = s.origin.x - ((FRAMEPTR)s.frame)->HotSpot.x;
|
r.corner.x = origin.x - fontChar->HotSpot.x;
|
||||||
r.corner.y = s.origin.y - ((FRAMEPTR)s.frame)->HotSpot.y;
|
r.corner.y = origin.y - fontChar->HotSpot.y;
|
||||||
r.extent.width = GetFrameWidth (s.frame);
|
r.extent.width = fontChar->disp.width;
|
||||||
r.extent.height = GetFrameHeight (s.frame);
|
r.extent.height = fontChar->disp.height;
|
||||||
_save_stamp.origin = r.corner;
|
_save_stamp.origin = r.corner;
|
||||||
if (BoxIntersect (&r, pClipRect, &r))
|
if (BoxIntersect (&r, pClipRect, &r))
|
||||||
{
|
{
|
||||||
if (FontEffect.Use)
|
TFB_Prim_FontChar (&origin, fontChar, backing);
|
||||||
{
|
|
||||||
FRAME origFrame = s.frame;
|
|
||||||
s.frame = Build_Font_Effect(
|
|
||||||
s.frame, FontEffect.from,
|
|
||||||
FontEffect.to, FontEffect.type);
|
|
||||||
TFB_Prim_Stamp (&s);
|
|
||||||
DestroyDrawable (ReleaseDrawable (s.frame));
|
|
||||||
s.frame = origFrame;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
TFB_Prim_StampFill (&s, &color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s.origin.x += GetFrameWidth (s.frame);
|
origin.x += fontChar->disp.width;
|
||||||
#if 0
|
#if 0
|
||||||
if (num_chars && next_ch < (UNICODE) MAX_CHARS
|
if (num_chars && next_ch < (UNICODE) MAX_CHARS
|
||||||
&& !(FontPtr->KernTab[ch]
|
&& !(FontPtr->KernTab[ch]
|
||||||
& (FontPtr->KernTab[next_ch] >> 2)))
|
& (FontPtr->KernTab[next_ch] >> 2)))
|
||||||
s.origin.x -= FontPtr->KernAmount;
|
origin.x -= FontPtr->KernAmount;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline FRAME_DESC *
|
static inline TFB_Char *
|
||||||
getCharFrame (FONT_DESC *fontPtr, wchar_t ch)
|
getCharFrame (FONT_DESC *fontPtr, wchar_t ch)
|
||||||
{
|
{
|
||||||
wchar_t pageStart = ch & CHARACTER_PAGE_MASK;
|
wchar_t pageStart = ch & CHARACTER_PAGE_MASK;
|
||||||
@@ -342,7 +324,7 @@ getCharFrame (FONT_DESC *fontPtr, wchar_t ch)
|
|||||||
|
|
||||||
charIndex = ch - page->firstChar;
|
charIndex = ch - page->firstChar;
|
||||||
if (ch >= page->firstChar && charIndex < page->numChars
|
if (ch >= page->firstChar && charIndex < page->numChars
|
||||||
&& page->charDesc[charIndex].image)
|
&& page->charDesc[charIndex].data)
|
||||||
{
|
{
|
||||||
return &page->charDesc[charIndex];
|
return &page->charDesc[charIndex];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ typedef struct FontPage
|
|||||||
#define CHARACTER_PAGE_MASK 0xff800
|
#define CHARACTER_PAGE_MASK 0xff800
|
||||||
wchar_t firstChar;
|
wchar_t firstChar;
|
||||||
size_t numChars;
|
size_t numChars;
|
||||||
FRAME_DESC *charDesc;
|
TFB_Char *charDesc;
|
||||||
} FONT_PAGE;
|
} FONT_PAGE;
|
||||||
typedef FONT_PAGE *PFONT_PAGE;
|
typedef FONT_PAGE *PFONT_PAGE;
|
||||||
|
|
||||||
@@ -51,7 +51,8 @@ typedef struct
|
|||||||
{
|
{
|
||||||
FONT_REF FontRef;
|
FONT_REF FontRef;
|
||||||
|
|
||||||
BYTE Leading;
|
UWORD Leading;
|
||||||
|
UWORD LeadingWidth;
|
||||||
FONT_PAGE *fontPages;
|
FONT_PAGE *fontPages;
|
||||||
} FONT_DESC;
|
} FONT_DESC;
|
||||||
typedef FONT_DESC *PFONT_DESC;
|
typedef FONT_DESC *PFONT_DESC;
|
||||||
|
|||||||
@@ -106,102 +106,55 @@ process_image (FRAMEPTR FramePtr, SDL_Surface *img[], AniData *ani, int cel_ct)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
processFontChar (FRAMEPTR FramePtr, SDL_Surface *surf, int charInd)
|
processFontChar (TFB_Char* CharPtr, SDL_Surface *surf, int charInd)
|
||||||
{
|
{
|
||||||
int x,y;
|
int x,y;
|
||||||
Uint8 r,g,b,a;
|
Uint8 r,g,b,a;
|
||||||
Uint32 p;
|
Uint32 p;
|
||||||
Uint32 clear, opaque;
|
|
||||||
SDL_Color colors[256];
|
|
||||||
SDL_Surface *new_surf;
|
|
||||||
SDL_PixelFormat* srcfmt = surf->format;
|
SDL_PixelFormat* srcfmt = surf->format;
|
||||||
SDL_PixelFormat* dstfmt;
|
|
||||||
GetPixelFn getpix;
|
GetPixelFn getpix;
|
||||||
PutPixelFn putpix;
|
BYTE* newdata;
|
||||||
|
Uint32 dpitch;
|
||||||
|
|
||||||
TYPE_SET (FramePtr->TypeIndexAndFlags, ROM_DRAWABLE);
|
// Currently, each font char has its own separate data
|
||||||
INDEX_SET (FramePtr->TypeIndexAndFlags, charInd);
|
// but that can change to common mem area
|
||||||
// XXX: Is this still relevant?
|
newdata = HMalloc (surf->w * surf->h * sizeof(BYTE));
|
||||||
|
dpitch = surf->w;
|
||||||
//#define ALPHA_FONTS
|
|
||||||
//#define RGB_FONTS
|
|
||||||
|
|
||||||
SDL_LockSurface (surf);
|
SDL_LockSurface (surf);
|
||||||
|
|
||||||
clear = 0;
|
|
||||||
opaque = 1;
|
|
||||||
|
|
||||||
#if defined(ALPHA_FONTS)
|
|
||||||
// convert png font to truecolor + alpha
|
|
||||||
new_surf = TFB_DrawCanvas_New_TrueColor (surf->w, surf->h, TRUE);
|
|
||||||
|
|
||||||
#elif defined(RGB_FONTS)
|
|
||||||
// convert png font to truecolor w/ colorkey
|
|
||||||
new_surf = TFB_DrawCanvas_New_TrueColor (surf->w, surf->h, FALSE);
|
|
||||||
opaque = SDL_MapRGB (new_surf->format, 255, 255, 255);
|
|
||||||
|
|
||||||
#else // indexed fonts
|
|
||||||
// convert 32-bit png font to indexed
|
|
||||||
new_surf = SDL_CreateRGBSurface (SDL_SWSURFACE, surf->w, surf->h,
|
|
||||||
8, 0, 0, 0, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
dstfmt = new_surf->format;
|
|
||||||
getpix = getpixel_for (surf);
|
getpix = getpixel_for (surf);
|
||||||
putpix = putpixel_for (new_surf);
|
|
||||||
|
|
||||||
|
// produce an alpha-only image in internal BYTE[] format
|
||||||
|
// from the SDL surface
|
||||||
for (y = 0; y < surf->h; ++y)
|
for (y = 0; y < surf->h; ++y)
|
||||||
{
|
{
|
||||||
for (x = 0; x < surf->w; ++x)
|
BYTE* dst = newdata + dpitch * y;
|
||||||
|
|
||||||
|
for (x = 0; x < surf->w; ++x, ++dst)
|
||||||
{
|
{
|
||||||
p = getpix (surf, x, y);
|
p = getpix (surf, x, y);
|
||||||
SDL_GetRGBA (p, srcfmt, &r, &g, &b, &a);
|
SDL_GetRGBA (p, srcfmt, &r, &g, &b, &a);
|
||||||
|
|
||||||
#if defined(ALPHA_FONTS)
|
|
||||||
if (!srcfmt->Amask)
|
if (!srcfmt->Amask)
|
||||||
{ // produce alpha from intensity (Y component)
|
{ // produce alpha from intensity (Y component)
|
||||||
// using a fast approximation
|
// using a fast approximation
|
||||||
// contributions to Y are: R=2, G=4, B=1
|
// contributions to Y are: R=2, G=4, B=1
|
||||||
a = (((int)r << 1) + ((int)g << 2) + b) / 7;
|
a = (((int)r << 1) + ((int)g << 2) + b) / 7;
|
||||||
}
|
}
|
||||||
// normalize font pixel
|
|
||||||
putpix (new_surf, x, y, SDL_MapRGBA (dstfmt,
|
|
||||||
255, 255, 255, a));
|
|
||||||
|
|
||||||
#else // indexed/rgb colorkey fonts
|
*dst = a;
|
||||||
// normalize font pixel
|
|
||||||
if (r == 0 && g == 0 && b == 0)
|
|
||||||
putpix (new_surf, x, y, clear);
|
|
||||||
else
|
|
||||||
putpix (new_surf, x, y, opaque);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(ALPHA_FONTS)
|
|
||||||
#if !defined(RGB_FONTS)
|
|
||||||
colors[0].r = 0;
|
|
||||||
colors[0].g = 0;
|
|
||||||
colors[0].b = 0;
|
|
||||||
for (x = 1; x < 256; ++x)
|
|
||||||
{
|
|
||||||
colors[x].r = 255;
|
|
||||||
colors[x].g = 255;
|
|
||||||
colors[x].b = 255;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_SetColors (new_surf, colors, 0, 256);
|
|
||||||
#endif /* !RGB_FONTS */
|
|
||||||
SDL_SetColorKey (new_surf, SDL_SRCCOLORKEY, clear);
|
|
||||||
#endif /* !ALPHA_FONTS */
|
|
||||||
|
|
||||||
SDL_UnlockSurface (surf);
|
SDL_UnlockSurface (surf);
|
||||||
SDL_FreeSurface (surf);
|
|
||||||
|
|
||||||
FramePtr->image = TFB_DrawImage_New (new_surf);
|
CharPtr->data = newdata;
|
||||||
surf = FramePtr->image->NormalImg;
|
CharPtr->pitch = dpitch;
|
||||||
|
CharPtr->extent.width = surf->w;
|
||||||
SetFrameBounds (FramePtr, surf->w + 1, surf->h + 1);
|
CharPtr->extent.height = surf->h;
|
||||||
|
CharPtr->disp.width = surf->w + 1;
|
||||||
|
CharPtr->disp.height = surf->h + 1;
|
||||||
// XXX: why the +1?
|
// XXX: why the +1?
|
||||||
// I brought it into this function from the only calling
|
// I brought it into this function from the only calling
|
||||||
// function, but I don't know why it was there in the first
|
// function, but I don't know why it was there in the first
|
||||||
@@ -215,14 +168,15 @@ processFontChar (FRAMEPTR FramePtr, SDL_Surface *surf, int charInd)
|
|||||||
|
|
||||||
int tune_amount = 0;
|
int tune_amount = 0;
|
||||||
|
|
||||||
if (surf->h == 8)
|
if (CharPtr->extent.height == 8)
|
||||||
tune_amount = -1;
|
tune_amount = -1;
|
||||||
else if (surf->h == 9)
|
else if (CharPtr->extent.height == 9)
|
||||||
tune_amount = -2;
|
tune_amount = -2;
|
||||||
else if (surf->h > 9)
|
else if (CharPtr->extent.height > 9)
|
||||||
tune_amount = -3;
|
tune_amount = -3;
|
||||||
|
|
||||||
FramePtr->HotSpot = MAKE_HOT_SPOT (0, surf->h + tune_amount);
|
CharPtr->HotSpot = MAKE_HOT_SPOT (0,
|
||||||
|
CharPtr->extent.height + tune_amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -385,114 +339,6 @@ void getpixelarray(Uint32 *map, FRAMEPTR FramePtr, int width, int height)
|
|||||||
UnlockMutex (tfbImg->mutex);
|
UnlockMutex (tfbImg->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
FRAMEPTR Build_Font_Effect (FRAMEPTR FramePtr, Uint32 from, Uint32 to, BYTE type)
|
|
||||||
{
|
|
||||||
FRAMEPTR NewFrame;
|
|
||||||
int x, y;
|
|
||||||
int width, height;
|
|
||||||
Uint32 color, clear;
|
|
||||||
Uint32 srcmask, threshold;
|
|
||||||
BYTE from_r, from_g, from_b, from_a;
|
|
||||||
BYTE to_r, to_g, to_b, to_a;
|
|
||||||
TFB_Image *tfbImg, *tfbOrigImg;
|
|
||||||
SDL_Surface *img, *OrigImg;
|
|
||||||
PutPixelFn putpix;
|
|
||||||
GetPixelFn getpix;
|
|
||||||
|
|
||||||
tfbOrigImg = FramePtr->image;
|
|
||||||
OrigImg = (SDL_Surface *)tfbOrigImg->NormalImg;
|
|
||||||
SDL_LockSurface (OrigImg);
|
|
||||||
|
|
||||||
width = OrigImg->w;
|
|
||||||
height = OrigImg->h;
|
|
||||||
NewFrame = CaptureDrawable (CreateDrawable ((CREATE_FLAGS)RAM_DRAWABLE,
|
|
||||||
(SIZE)width, (SIZE)height, 1));
|
|
||||||
NewFrame->Bounds = FramePtr->Bounds;
|
|
||||||
NewFrame->HotSpot = FramePtr->HotSpot;
|
|
||||||
|
|
||||||
tfbImg = NewFrame->image;
|
|
||||||
img = (SDL_Surface *)tfbImg->NormalImg;
|
|
||||||
SDL_LockSurface (img);
|
|
||||||
|
|
||||||
putpix = putpixel_for (img);
|
|
||||||
getpix = getpixel_for (OrigImg);
|
|
||||||
|
|
||||||
from_r = (from >> 24);
|
|
||||||
from_g = (from >> 16) & 0xFF;
|
|
||||||
from_b = (from >> 8) & 0xFF;
|
|
||||||
from_a = from & 0xFF;
|
|
||||||
|
|
||||||
to_r = (to >> 24);
|
|
||||||
to_g = (to >> 16) & 0xFF;
|
|
||||||
to_b = (to >> 8) & 0xFF;
|
|
||||||
to_a = to & 0xFF;
|
|
||||||
|
|
||||||
clear = SDL_MapRGBA (img->format, 0, 0, 0, 0);
|
|
||||||
TFB_DrawCanvas_SetTransparentColor (img, 0, 0, 0, FALSE);
|
|
||||||
#if defined(ALPHA_FONTS)
|
|
||||||
srcmask = OrigImg->format->Amask;
|
|
||||||
threshold = (srcmask >> 1) & srcmask;
|
|
||||||
#else // indexed fonts
|
|
||||||
srcmask = 255;
|
|
||||||
threshold = 0; // any index != 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (type == GRADIENT_EFFECT)
|
|
||||||
{
|
|
||||||
int clrstep_r, clrstep_g, clrstep_b, clrstep_a;
|
|
||||||
|
|
||||||
clrstep_r = (to_r - from_r) / (height - 1);
|
|
||||||
clrstep_g = (to_g - from_g) / (height - 1);
|
|
||||||
clrstep_b = (to_b - from_b) / (height - 1);
|
|
||||||
clrstep_a = (to_a - from_a) / (height - 1);
|
|
||||||
|
|
||||||
for (y = 0; y < height; y++)
|
|
||||||
{
|
|
||||||
color = SDL_MapRGBA (img->format, from_r, from_g, from_b, from_a);
|
|
||||||
from_r += clrstep_r;
|
|
||||||
from_g += clrstep_g;
|
|
||||||
from_b += clrstep_b;
|
|
||||||
from_a += clrstep_a;
|
|
||||||
for (x = 0; x < width; x++)
|
|
||||||
{
|
|
||||||
Uint32 p = getpix (OrigImg, x, y);
|
|
||||||
|
|
||||||
if ((p & srcmask) > threshold)
|
|
||||||
putpix (img, x, y, color);
|
|
||||||
else
|
|
||||||
putpix (img, x, y, clear);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (type == ALTERNATE_EFFECT)
|
|
||||||
{
|
|
||||||
Uint32 color1, color2;
|
|
||||||
|
|
||||||
color1 = SDL_MapRGBA (img->format, from_r, from_g, from_b, from_a);
|
|
||||||
color2 = SDL_MapRGBA (img->format, to_r, to_g, to_b, to_a);
|
|
||||||
|
|
||||||
for (y = 0; y < height; y++)
|
|
||||||
{
|
|
||||||
for (x = 0; x < width; x++)
|
|
||||||
{
|
|
||||||
Uint32 p = getpix (OrigImg, x, y);
|
|
||||||
|
|
||||||
if ((p & srcmask) > threshold)
|
|
||||||
{
|
|
||||||
color = ((y & 0x01) ^ (x & 0x01)) ? color2 : color1;
|
|
||||||
putpix (img, x, y, color);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
putpix (img, x, y, clear);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_UnlockSurface (img);
|
|
||||||
SDL_UnlockSurface (OrigImg);
|
|
||||||
|
|
||||||
return (NewFrame);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate a pixel (in the correct format to be applied to FramePtr) from the
|
// Generate a pixel (in the correct format to be applied to FramePtr) from the
|
||||||
// r,g,b,a values supplied
|
// r,g,b,a values supplied
|
||||||
@@ -729,6 +575,7 @@ _GetFontData (uio_Stream *fp, DWORD length)
|
|||||||
|
|
||||||
fontPtr->FontRef = fontRef;
|
fontPtr->FontRef = fontRef;
|
||||||
fontPtr->Leading = 0;
|
fontPtr->Leading = 0;
|
||||||
|
fontPtr->LeadingWidth = 0;
|
||||||
|
|
||||||
{
|
{
|
||||||
size_t startBCD = 0;
|
size_t startBCD = 0;
|
||||||
@@ -760,10 +607,10 @@ _GetFontData (uio_Stream *fp, DWORD length)
|
|||||||
{
|
{
|
||||||
// Process one character.
|
// Process one character.
|
||||||
BuildCharDesc *bcd = &bcds[bcdI];
|
BuildCharDesc *bcd = &bcds[bcdI];
|
||||||
FRAME_DESC *destFrame =
|
TFB_Char *destChar =
|
||||||
&page->charDesc[bcd->index - page->firstChar];
|
&page->charDesc[bcd->index - page->firstChar];
|
||||||
|
|
||||||
if (destFrame->image != NULL)
|
if (destChar->data != NULL)
|
||||||
{
|
{
|
||||||
// There's already an image for this character.
|
// There's already an image for this character.
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@@ -775,14 +622,14 @@ _GetFontData (uio_Stream *fp, DWORD length)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
processFontChar (destFrame, bcd->surface,
|
processFontChar (destChar, bcd->surface,
|
||||||
bcd->index - page->firstChar);
|
bcd->index - page->firstChar);
|
||||||
// bcd->surface is handed over to destFrame.
|
SDL_FreeSurface (bcd->surface);
|
||||||
// Don't access it through bcd->surface any more.
|
|
||||||
// It may be freed from within ProcessFontChar().
|
|
||||||
|
|
||||||
if (GetFrameHeight (destFrame) > fontPtr->Leading)
|
if (destChar->disp.height > fontPtr->Leading)
|
||||||
fontPtr->Leading = GetFrameHeight (destFrame);
|
fontPtr->Leading = destChar->disp.height;
|
||||||
|
if (destChar->disp.width > fontPtr->LeadingWidth)
|
||||||
|
fontPtr->LeadingWidth = destChar->disp.width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -836,12 +683,14 @@ _ReleaseFontData (MEM_HANDLE handle)
|
|||||||
size_t charI;
|
size_t charI;
|
||||||
for (charI = 0; charI < page->numChars; charI++)
|
for (charI = 0; charI < page->numChars; charI++)
|
||||||
{
|
{
|
||||||
FRAME_DESC *frame = &page->charDesc[charI];
|
TFB_Char *c = &page->charDesc[charI];
|
||||||
|
|
||||||
if (frame->image == NULL)
|
if (c->data == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
TFB_DrawScreen_DeleteImage (frame->image);
|
// XXX: fix this if fonts get per-page data
|
||||||
|
// rather than per-char
|
||||||
|
TFB_DrawScreen_DeleteData (c->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
nextPage = page->next;
|
nextPage = page->next;
|
||||||
|
|||||||
@@ -300,6 +300,77 @@ TFB_DrawCanvas_FilledImage (TFB_Image *img, int x, int y, int scale, int r, int
|
|||||||
UnlockMutex (img->mutex);
|
UnlockMutex (img->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TFB_DrawCanvas_FontChar (TFB_Char *fontChar, TFB_Image *backing,
|
||||||
|
int x, int y, TFB_Canvas target)
|
||||||
|
{
|
||||||
|
SDL_Rect srcRect, targetRect;
|
||||||
|
SDL_Surface *surf;
|
||||||
|
int w, h;
|
||||||
|
|
||||||
|
if (fontChar == 0)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "ERROR: "
|
||||||
|
"TFB_DrawCanvas_FontChar passed null char ptr\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (backing == 0)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "ERROR: "
|
||||||
|
"TFB_DrawCanvas_FontChar passed null backing ptr\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
w = fontChar->extent.width;
|
||||||
|
h = fontChar->extent.height;
|
||||||
|
|
||||||
|
LockMutex (backing->mutex);
|
||||||
|
|
||||||
|
surf = backing->NormalImg;
|
||||||
|
if (surf->format->BytesPerPixel != 4
|
||||||
|
|| surf->w < w || surf->h < h)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "ERROR: "
|
||||||
|
"TFB_DrawCanvas_FontChar bad backing surface: %dx%dx%d; "
|
||||||
|
"char: %dx%d\n",
|
||||||
|
surf->w, surf->h, (int)surf->format->BytesPerPixel, w, h);
|
||||||
|
UnlockMutex (backing->mutex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
srcRect.x = 0;
|
||||||
|
srcRect.y = 0;
|
||||||
|
srcRect.w = fontChar->extent.width;
|
||||||
|
srcRect.h = fontChar->extent.height;
|
||||||
|
|
||||||
|
targetRect.x = x - fontChar->HotSpot.x;
|
||||||
|
targetRect.y = y - fontChar->HotSpot.y;
|
||||||
|
|
||||||
|
// transfer the alpha channel to the backing surface
|
||||||
|
SDL_LockSurface (surf);
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
const int sskip = fontChar->pitch - w;
|
||||||
|
const int dskip = (surf->pitch / 4) - w;
|
||||||
|
const Uint32 dmask = ~surf->format->Amask;
|
||||||
|
const int ashift = surf->format->Ashift;
|
||||||
|
Uint8 *src_p = fontChar->data;
|
||||||
|
Uint32 *dst_p = (Uint32 *)surf->pixels;
|
||||||
|
|
||||||
|
for (y = 0; y < h; ++y, src_p += sskip, dst_p += dskip)
|
||||||
|
{
|
||||||
|
for (x = 0; x < w; ++x, ++src_p, ++dst_p)
|
||||||
|
{
|
||||||
|
*dst_p = (*dst_p & dmask) | (((Uint32)*src_p) << ashift);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SDL_UnlockSurface (surf);
|
||||||
|
|
||||||
|
SDL_BlitSurface (surf, &srcRect, (NativeCanvas) target, &targetRect);
|
||||||
|
UnlockMutex (backing->mutex);
|
||||||
|
}
|
||||||
|
|
||||||
TFB_Canvas
|
TFB_Canvas
|
||||||
TFB_DrawCanvas_New_TrueColor (int w, int h, BOOLEAN hasalpha)
|
TFB_DrawCanvas_New_TrueColor (int w, int h, BOOLEAN hasalpha)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -669,6 +669,31 @@ TFB_FlushGraphics () // Only call from main thread!!
|
|||||||
UnlockMutex (DC_image->mutex);
|
UnlockMutex (DC_image->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TFB_DRAWCOMMANDTYPE_FONTCHAR:
|
||||||
|
{
|
||||||
|
TFB_Char *DC_char = DC.data.fontchar.fontchar;
|
||||||
|
int x = DC.data.fontchar.x;
|
||||||
|
int y = DC.data.fontchar.y;
|
||||||
|
|
||||||
|
TFB_DrawCanvas_FontChar (DC.data.fontchar.fontchar,
|
||||||
|
DC.data.fontchar.backing,
|
||||||
|
DC.data.fontchar.x, DC.data.fontchar.y,
|
||||||
|
SDL_Screens[DC.data.fontchar.destBuffer]);
|
||||||
|
|
||||||
|
if (DC.data.fontchar.destBuffer == 0)
|
||||||
|
{
|
||||||
|
RECT r;
|
||||||
|
|
||||||
|
r.corner.x = x - DC_char->HotSpot.x;
|
||||||
|
r.corner.y = y - DC_char->HotSpot.y;
|
||||||
|
r.extent.width = DC_char->extent.width;
|
||||||
|
r.extent.height = DC_char->extent.height;
|
||||||
|
|
||||||
|
TFB_BBox_RegisterRect (&r);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TFB_DRAWCOMMANDTYPE_LINE:
|
case TFB_DRAWCOMMANDTYPE_LINE:
|
||||||
@@ -760,6 +785,12 @@ TFB_FlushGraphics () // Only call from main thread!!
|
|||||||
TFB_DrawImage_Delete(DC_image);
|
TFB_DrawImage_Delete(DC_image);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case TFB_DRAWCOMMANDTYPE_DELETEDATA:
|
||||||
|
{
|
||||||
|
void *data = DC.data.deletedata.data;
|
||||||
|
HFree (data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case TFB_DRAWCOMMANDTYPE_SENDSIGNAL:
|
case TFB_DRAWCOMMANDTYPE_SENDSIGNAL:
|
||||||
ClearSemaphore (DC.data.sendsignal.sem);
|
ClearSemaphore (DC.data.sendsignal.sem);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -160,6 +160,22 @@ TFB_DrawScreen_FilledImage (TFB_Image *img, int x, int y, int scale,
|
|||||||
TFB_EnqueueDrawCommand (&DC);
|
TFB_EnqueueDrawCommand (&DC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TFB_DrawScreen_FontChar (TFB_Char *fontChar, TFB_Image *backing,
|
||||||
|
int x, int y, SCREEN dest)
|
||||||
|
{
|
||||||
|
TFB_DrawCommand DC;
|
||||||
|
|
||||||
|
DC.Type = TFB_DRAWCOMMANDTYPE_FONTCHAR;
|
||||||
|
DC.data.fontchar.fontchar = fontChar;
|
||||||
|
DC.data.fontchar.backing = backing;
|
||||||
|
DC.data.fontchar.x = x;
|
||||||
|
DC.data.fontchar.y = y;
|
||||||
|
DC.data.fontchar.destBuffer = dest;
|
||||||
|
|
||||||
|
TFB_EnqueueDrawCommand (&DC);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TFB_DrawScreen_CopyToImage (TFB_Image *img, PRECT lpRect, SCREEN src)
|
TFB_DrawScreen_CopyToImage (TFB_Image *img, PRECT lpRect, SCREEN src)
|
||||||
{
|
{
|
||||||
@@ -215,6 +231,21 @@ TFB_DrawScreen_DeleteImage (TFB_Image *img)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TFB_DrawScreen_DeleteData (void *data)
|
||||||
|
// data must be a result of HXalloc() call
|
||||||
|
{
|
||||||
|
if (data)
|
||||||
|
{
|
||||||
|
TFB_DrawCommand DC;
|
||||||
|
|
||||||
|
DC.Type = TFB_DRAWCOMMANDTYPE_DELETEDATA;
|
||||||
|
DC.data.deletedata.data = data;
|
||||||
|
|
||||||
|
TFB_EnqueueDrawCommand (&DC);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TFB_DrawScreen_WaitForSignal (void)
|
TFB_DrawScreen_WaitForSignal (void)
|
||||||
{
|
{
|
||||||
@@ -283,6 +314,17 @@ TFB_DrawImage_FilledImage (TFB_Image *img, int x, int y, int scale,
|
|||||||
UnlockMutex (target->mutex);
|
UnlockMutex (target->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TFB_DrawImage_FontChar (TFB_Char *fontChar, TFB_Image *backing,
|
||||||
|
int x, int y, TFB_Image *target)
|
||||||
|
{
|
||||||
|
LockMutex (target->mutex);
|
||||||
|
TFB_DrawCanvas_FontChar (fontChar, backing, x, y, target->NormalImg);
|
||||||
|
target->dirty = TRUE;
|
||||||
|
UnlockMutex (target->mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TFB_Image *
|
TFB_Image *
|
||||||
TFB_DrawImage_New (TFB_Canvas canvas)
|
TFB_DrawImage_New (TFB_Canvas canvas)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -66,6 +66,18 @@ typedef struct tfb_image
|
|||||||
BOOLEAN dirty;
|
BOOLEAN dirty;
|
||||||
} TFB_Image;
|
} TFB_Image;
|
||||||
|
|
||||||
|
typedef struct tfb_char
|
||||||
|
{
|
||||||
|
EXTENT extent;
|
||||||
|
EXTENT disp;
|
||||||
|
// Display extent
|
||||||
|
HOT_SPOT HotSpot;
|
||||||
|
BYTE* data;
|
||||||
|
DWORD pitch;
|
||||||
|
// Pitch is for storing all chars of a page
|
||||||
|
// in one rectangular pixel matrix
|
||||||
|
} TFB_Char;
|
||||||
|
|
||||||
// we do not support paletted format for now
|
// we do not support paletted format for now
|
||||||
typedef struct tfb_pixelformat
|
typedef struct tfb_pixelformat
|
||||||
{
|
{
|
||||||
@@ -83,8 +95,11 @@ void TFB_DrawScreen_Rect (PRECT rect, int r, int g, int b, SCREEN dest);
|
|||||||
void TFB_DrawScreen_Image (TFB_Image *img, int x, int y, int scale, TFB_Palette *palette, SCREEN dest);
|
void TFB_DrawScreen_Image (TFB_Image *img, int x, int y, int scale, TFB_Palette *palette, SCREEN dest);
|
||||||
void TFB_DrawScreen_Copy (PRECT r, SCREEN src, SCREEN dest);
|
void TFB_DrawScreen_Copy (PRECT r, SCREEN src, SCREEN dest);
|
||||||
void TFB_DrawScreen_FilledImage (TFB_Image *img, int x, int y, int scale, int r, int g, int b, SCREEN dest);
|
void TFB_DrawScreen_FilledImage (TFB_Image *img, int x, int y, int scale, int r, int g, int b, SCREEN dest);
|
||||||
|
void TFB_DrawScreen_FontChar (TFB_Char *, TFB_Image *backing, int x, int y, SCREEN dest);
|
||||||
|
|
||||||
void TFB_DrawScreen_CopyToImage (TFB_Image *img, PRECT lpRect, SCREEN src);
|
void TFB_DrawScreen_CopyToImage (TFB_Image *img, PRECT lpRect, SCREEN src);
|
||||||
void TFB_DrawScreen_DeleteImage (TFB_Image *img);
|
void TFB_DrawScreen_DeleteImage (TFB_Image *img);
|
||||||
|
void TFB_DrawScreen_DeleteData (void *);
|
||||||
void TFB_DrawScreen_WaitForSignal (void);
|
void TFB_DrawScreen_WaitForSignal (void);
|
||||||
void TFB_DrawScreen_ReinitVideo (int driver, int flags, int width, int height, int bpp);
|
void TFB_DrawScreen_ReinitVideo (int driver, int flags, int width, int height, int bpp);
|
||||||
void TFB_DrawScreen_SetPalette (int paletteIndex, int r, int g, int b);
|
void TFB_DrawScreen_SetPalette (int paletteIndex, int r, int g, int b);
|
||||||
@@ -100,6 +115,7 @@ void TFB_DrawImage_Line (int x1, int y1, int x2, int y2, int r, int g, int b, TF
|
|||||||
void TFB_DrawImage_Rect (PRECT rect, int r, int g, int b, TFB_Image *image);
|
void TFB_DrawImage_Rect (PRECT rect, int r, int g, int b, TFB_Image *image);
|
||||||
void TFB_DrawImage_Image (TFB_Image *img, int x, int y, int scale, TFB_Palette *palette, TFB_Image *target);
|
void TFB_DrawImage_Image (TFB_Image *img, int x, int y, int scale, TFB_Palette *palette, TFB_Image *target);
|
||||||
void TFB_DrawImage_FilledImage (TFB_Image *img, int x, int y, int scale, int r, int g, int b, TFB_Image *target);
|
void TFB_DrawImage_FilledImage (TFB_Image *img, int x, int y, int scale, int r, int g, int b, TFB_Image *target);
|
||||||
|
void TFB_DrawImage_FontChar (TFB_Char *, TFB_Image *backing, int x, int y, TFB_Image *target);
|
||||||
|
|
||||||
TFB_Canvas TFB_DrawCanvas_New_TrueColor (int w, int h, BOOLEAN hasalpha);
|
TFB_Canvas TFB_DrawCanvas_New_TrueColor (int w, int h, BOOLEAN hasalpha);
|
||||||
TFB_Canvas TFB_DrawCanvas_New_ForScreen (int w, int h, BOOLEAN withalpha);
|
TFB_Canvas TFB_DrawCanvas_New_ForScreen (int w, int h, BOOLEAN withalpha);
|
||||||
@@ -123,6 +139,7 @@ void TFB_DrawCanvas_Line (int x1, int y1, int x2, int y2, int r, int g, int b, T
|
|||||||
void TFB_DrawCanvas_Rect (PRECT rect, int r, int g, int b, TFB_Canvas image);
|
void TFB_DrawCanvas_Rect (PRECT rect, int r, int g, int b, TFB_Canvas image);
|
||||||
void TFB_DrawCanvas_Image (TFB_Image *img, int x, int y, int scale, TFB_Palette *palette, TFB_Canvas target);
|
void TFB_DrawCanvas_Image (TFB_Image *img, int x, int y, int scale, TFB_Palette *palette, TFB_Canvas target);
|
||||||
void TFB_DrawCanvas_FilledImage (TFB_Image *img, int x, int y, int scale, int r, int g, int b, TFB_Canvas target);
|
void TFB_DrawCanvas_FilledImage (TFB_Image *img, int x, int y, int scale, int r, int g, int b, TFB_Canvas target);
|
||||||
|
void TFB_DrawCanvas_FontChar (TFB_Char *, TFB_Image *backing, int x, int y, TFB_Canvas target);
|
||||||
|
|
||||||
TFB_Palette *TFB_DrawCanvas_ExtractPalette (TFB_Canvas canvas);
|
TFB_Palette *TFB_DrawCanvas_ExtractPalette (TFB_Canvas canvas);
|
||||||
void TFB_DrawCanvas_SetPalette (TFB_Canvas target, TFB_Palette *palette);
|
void TFB_DrawCanvas_SetPalette (TFB_Canvas target, TFB_Palette *palette);
|
||||||
|
|||||||
@@ -213,4 +213,24 @@ TFB_Prim_StampFill (PSTAMP stmp, TFB_Palette *color)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TFB_Prim_FontChar (PPOINT origin, TFB_Char *fontChar, TFB_Image *backing)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
x = origin->x - _CurFramePtr->HotSpot.x;
|
||||||
|
y = origin->y - _CurFramePtr->HotSpot.y;
|
||||||
|
|
||||||
|
if (TYPE_GET (_CurFramePtr->TypeIndexAndFlags) == SCREEN_DRAWABLE)
|
||||||
|
{
|
||||||
|
TFB_DrawScreen_FontChar (fontChar, backing, x, y,
|
||||||
|
TFB_SCREEN_MAIN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TFB_DrawImage_FontChar (fontChar, backing, x, y,
|
||||||
|
_CurFramePtr->image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Text rendering is in font.c, under the name _text_blt
|
// Text rendering is in font.c, under the name _text_blt
|
||||||
|
|||||||
@@ -26,3 +26,4 @@ void TFB_Prim_Rect (PRECT r, TFB_Palette *color);
|
|||||||
void TFB_Prim_FillRect (PRECT r, TFB_Palette *color);
|
void TFB_Prim_FillRect (PRECT r, TFB_Palette *color);
|
||||||
void TFB_Prim_Stamp (PSTAMP stamp);
|
void TFB_Prim_Stamp (PSTAMP stamp);
|
||||||
void TFB_Prim_StampFill (PSTAMP stamp, TFB_Palette *color);
|
void TFB_Prim_StampFill (PSTAMP stamp, TFB_Palette *color);
|
||||||
|
void TFB_Prim_FontChar (PPOINT origin, TFB_Char *, TFB_Image *backing);
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ Widget_DrawToolTips (int numlines, const char **tips)
|
|||||||
{
|
{
|
||||||
RECT r;
|
RECT r;
|
||||||
FONT oldfont = SetContextFont (StarConFont);
|
FONT oldfont = SetContextFont (StarConFont);
|
||||||
FONTEFFECT oldFontEffect = SetContextFontEffect (0, 0, 0);
|
FRAME oldFontEffect = SetContextFontEffect (NULL);
|
||||||
COLOR oldtext = SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F));
|
COLOR oldtext = SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F));
|
||||||
TEXT t;
|
TEXT t;
|
||||||
int i;
|
int i;
|
||||||
@@ -72,7 +72,7 @@ Widget_DrawToolTips (int numlines, const char **tips)
|
|||||||
t.baseline.y += 8;
|
t.baseline.y += 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetContextFontEffect (oldFontEffect.type, oldFontEffect.from, oldFontEffect.to);
|
SetContextFontEffect (oldFontEffect);
|
||||||
SetContextFont (oldfont);
|
SetContextFont (oldfont);
|
||||||
SetContextForeGroundColor (oldtext);
|
SetContextForeGroundColor (oldtext);
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ Widget_DrawMenuScreen (WIDGET *_self, int x, int y)
|
|||||||
COLOR title, oldtext;
|
COLOR title, oldtext;
|
||||||
COLOR inactive, default_color, selected;
|
COLOR inactive, default_color, selected;
|
||||||
FONT oldfont = SetContextFont (StarConFont);
|
FONT oldfont = SetContextFont (StarConFont);
|
||||||
FONTEFFECT oldFontEffect = SetContextFontEffect (0, 0, 0);
|
FRAME oldFontEffect = SetContextFontEffect (NULL);
|
||||||
TEXT t;
|
TEXT t;
|
||||||
int widget_index, height, widget_y;
|
int widget_index, height, widget_y;
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ Widget_DrawMenuScreen (WIDGET *_self, int x, int y)
|
|||||||
widget_y += (*c->height)(c) + 8;
|
widget_y += (*c->height)(c) + 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetContextFontEffect (oldFontEffect.type, oldFontEffect.from, oldFontEffect.to);
|
SetContextFontEffect (oldFontEffect);
|
||||||
SetContextFont (oldfont);
|
SetContextFont (oldfont);
|
||||||
SetContextForeGroundColor (oldtext);
|
SetContextForeGroundColor (oldtext);
|
||||||
|
|
||||||
@@ -147,7 +147,7 @@ Widget_DrawChoice (WIDGET *_self, int x, int y)
|
|||||||
COLOR oldtext;
|
COLOR oldtext;
|
||||||
COLOR inactive, default_color, selected;
|
COLOR inactive, default_color, selected;
|
||||||
FONT oldfont = SetContextFont (StarConFont);
|
FONT oldfont = SetContextFont (StarConFont);
|
||||||
FONTEFFECT oldFontEffect = SetContextFontEffect (0, 0, 0);
|
FRAME oldFontEffect = SetContextFontEffect (NULL);
|
||||||
TEXT t;
|
TEXT t;
|
||||||
int i, home_x, home_y;
|
int i, home_x, home_y;
|
||||||
|
|
||||||
@@ -195,7 +195,7 @@ Widget_DrawChoice (WIDGET *_self, int x, int y)
|
|||||||
}
|
}
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
}
|
}
|
||||||
SetContextFontEffect (oldFontEffect.type, oldFontEffect.from, oldFontEffect.to);
|
SetContextFontEffect (oldFontEffect);
|
||||||
SetContextFont (oldfont);
|
SetContextFont (oldfont);
|
||||||
SetContextForeGroundColor (oldtext);
|
SetContextForeGroundColor (oldtext);
|
||||||
}
|
}
|
||||||
@@ -207,7 +207,7 @@ Widget_DrawButton (WIDGET *_self, int x, int y)
|
|||||||
COLOR oldtext;
|
COLOR oldtext;
|
||||||
COLOR inactive, selected;
|
COLOR inactive, selected;
|
||||||
FONT oldfont = SetContextFont (StarConFont);
|
FONT oldfont = SetContextFont (StarConFont);
|
||||||
FONTEFFECT oldFontEffect = SetContextFontEffect (0, 0, 0);
|
FRAME oldFontEffect = SetContextFontEffect (NULL);
|
||||||
TEXT t;
|
TEXT t;
|
||||||
|
|
||||||
selected = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x00), 0x0E);
|
selected = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x00), 0x0E);
|
||||||
@@ -229,7 +229,7 @@ Widget_DrawButton (WIDGET *_self, int x, int y)
|
|||||||
oldtext = SetContextForeGroundColor (inactive);
|
oldtext = SetContextForeGroundColor (inactive);
|
||||||
}
|
}
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
SetContextFontEffect (oldFontEffect.type, oldFontEffect.from, oldFontEffect.to);
|
SetContextFontEffect (oldFontEffect);
|
||||||
SetContextFont (oldfont);
|
SetContextFont (oldfont);
|
||||||
SetContextForeGroundColor (oldtext);
|
SetContextForeGroundColor (oldtext);
|
||||||
(void) x;
|
(void) x;
|
||||||
@@ -242,7 +242,7 @@ Widget_DrawLabel (WIDGET *_self, int x, int y)
|
|||||||
COLOR oldtext = SetContextForeGroundColor (
|
COLOR oldtext = SetContextForeGroundColor (
|
||||||
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F));
|
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F));
|
||||||
FONT oldfont = SetContextFont (StarConFont);
|
FONT oldfont = SetContextFont (StarConFont);
|
||||||
FONTEFFECT oldFontEffect = SetContextFontEffect (0, 0, 0);
|
FRAME oldFontEffect = SetContextFontEffect (NULL);
|
||||||
TEXT t;
|
TEXT t;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -258,7 +258,7 @@ Widget_DrawLabel (WIDGET *_self, int x, int y)
|
|||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
t.baseline.y += 8;
|
t.baseline.y += 8;
|
||||||
}
|
}
|
||||||
SetContextFontEffect (oldFontEffect.type, oldFontEffect.from, oldFontEffect.to);
|
SetContextFontEffect (oldFontEffect);
|
||||||
SetContextFont (oldfont);
|
SetContextFont (oldfont);
|
||||||
SetContextForeGroundColor (oldtext);
|
SetContextForeGroundColor (oldtext);
|
||||||
(void) x;
|
(void) x;
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ DoMouseError (PMOUSE_ERROR_STATE pInputState)
|
|||||||
RECT r;
|
RECT r;
|
||||||
COLOR bg, dark, medium, text, oldtext;
|
COLOR bg, dark, medium, text, oldtext;
|
||||||
FONT oldfont = SetContextFont (StarConFont);
|
FONT oldfont = SetContextFont (StarConFont);
|
||||||
FONTEFFECT oldFontEffect = SetContextFontEffect (0, 0, 0);
|
FRAME oldFontEffect = SetContextFontEffect (NULL);
|
||||||
TEXT t;
|
TEXT t;
|
||||||
|
|
||||||
r.corner.x = 2;
|
r.corner.x = 2;
|
||||||
@@ -104,8 +104,7 @@ DoMouseError (PMOUSE_ERROR_STATE pInputState)
|
|||||||
t.baseline.y += 16;
|
t.baseline.y += 16;
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
|
|
||||||
SetContextFontEffect (oldFontEffect.type, oldFontEffect.from,
|
SetContextFontEffect (oldFontEffect);
|
||||||
oldFontEffect.to);
|
|
||||||
SetContextFont (oldfont);
|
SetContextFont (oldfont);
|
||||||
SetContextForeGroundColor (oldtext);
|
SetContextForeGroundColor (oldtext);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,8 +153,7 @@ GenerateBurvixes (BYTE control)
|
|||||||
pSolarSysState->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN] = rand_val;
|
pSolarSysState->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN] = rand_val;
|
||||||
if (pSolarSysState->pOrbitalDesc == &pSolarSysState->PlanetDesc[0])
|
if (pSolarSysState->pOrbitalDesc == &pSolarSysState->PlanetDesc[0])
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (LoadGraphic (LANDER_FONT));
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM));
|
LoadGraphic (RUINS_MASK_PMAP_ANIM));
|
||||||
@@ -168,8 +167,7 @@ GenerateBurvixes (BYTE control)
|
|||||||
&& pSolarSysState->pOrbitalDesc == &pSolarSysState->MoonDesc[0]
|
&& pSolarSysState->pOrbitalDesc == &pSolarSysState->MoonDesc[0]
|
||||||
&& !GET_GAME_STATE (BURVIXESE_BROADCASTERS))
|
&& !GET_GAME_STATE (BURVIXESE_BROADCASTERS))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (LoadGraphic (LANDER_FONT));
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (BURV_BCS_MASK_PMAP_ANIM));
|
LoadGraphic (BURV_BCS_MASK_PMAP_ANIM));
|
||||||
|
|||||||
@@ -107,10 +107,7 @@ GenerateChmmr (BYTE control)
|
|||||||
|
|
||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
|
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString =
|
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString =
|
||||||
CaptureStringTable (
|
CaptureStringTable (
|
||||||
LoadStringTable (CHMMR_BASE_STRTAB));
|
LoadStringTable (CHMMR_BASE_STRTAB));
|
||||||
@@ -134,9 +131,7 @@ GenerateChmmr (BYTE control)
|
|||||||
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString
|
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString
|
||||||
));
|
));
|
||||||
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString = 0;
|
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString = 0;
|
||||||
DestroyFont (ReleaseFont (
|
FreeLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont));
|
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont = 0;
|
|
||||||
|
|
||||||
UnlockMutex (GraphicsLock);
|
UnlockMutex (GraphicsLock);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -135,10 +135,7 @@ GenerateDruuge (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -109,10 +109,7 @@ GenerateIlwrath (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -193,10 +193,7 @@ GenerateMycon (BYTE control)
|
|||||||
case SUN_DEVICE_DEFINED:
|
case SUN_DEVICE_DEFINED:
|
||||||
if (!GET_GAME_STATE (SUN_DEVICE))
|
if (!GET_GAME_STATE (SUN_DEVICE))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (SUN_DEVICE_MASK_PMAP_ANIM)
|
LoadGraphic (SUN_DEVICE_MASK_PMAP_ANIM)
|
||||||
@@ -217,10 +214,7 @@ GenerateMycon (BYTE control)
|
|||||||
if (!(pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN]
|
if (!(pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN]
|
||||||
& (1L << 0)))
|
& (1L << 0)))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (EGG_CASE_MASK_PMAP_ANIM)
|
LoadGraphic (EGG_CASE_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -133,10 +133,7 @@ GenerateAndrosynth (BYTE control)
|
|||||||
{
|
{
|
||||||
UWORD retval;
|
UWORD retval;
|
||||||
|
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
@@ -352,10 +349,7 @@ GenerateOrz (BYTE control)
|
|||||||
SET_GAME_STATE (TAALO_UNPROTECTED, 1);
|
SET_GAME_STATE (TAALO_UNPROTECTED, 1);
|
||||||
if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED)
|
if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED)
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (TAALO_DEVICE_MASK_PMAP_ANIM)
|
LoadGraphic (TAALO_DEVICE_MASK_PMAP_ANIM)
|
||||||
@@ -367,10 +361,7 @@ GenerateOrz (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -230,10 +230,7 @@ GenerateTalkingPet (BYTE control)
|
|||||||
|
|
||||||
if (pSolarSysState->pOrbitalDesc == &pSolarSysState->PlanetDesc[0])
|
if (pSolarSysState->pOrbitalDesc == &pSolarSysState->PlanetDesc[0])
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -128,10 +128,7 @@ GeneratePkunk (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -297,10 +297,7 @@ generate_orbital (void)
|
|||||||
case 8: /* PLUTO */
|
case 8: /* PLUTO */
|
||||||
if (!GET_GAME_STATE (FOUND_PLUTO_SPATHI))
|
if (!GET_GAME_STATE (FOUND_PLUTO_SPATHI))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (SPAPLUTO_MASK_PMAP_ANIM)
|
LoadGraphic (SPAPLUTO_MASK_PMAP_ANIM)
|
||||||
@@ -342,10 +339,7 @@ generate_orbital (void)
|
|||||||
|
|
||||||
if (!GET_GAME_STATE (MOONBASE_DESTROYED))
|
if (!GET_GAME_STATE (MOONBASE_DESTROYED))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (MOONBASE_MASK_PMAP_ANIM)
|
LoadGraphic (MOONBASE_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -196,10 +196,7 @@ GenerateSpathi (BYTE control)
|
|||||||
pSolarSysState->SysInfo.PlanetInfo.SurfaceTemperature = 28;
|
pSolarSysState->SysInfo.PlanetInfo.SurfaceTemperature = 28;
|
||||||
if (!GET_GAME_STATE (UMGAH_BROADCASTERS))
|
if (!GET_GAME_STATE (UMGAH_BROADCASTERS))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (UMGAH_BCS_MASK_PMAP_ANIM)
|
LoadGraphic (UMGAH_BCS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -126,10 +126,7 @@ GenerateSupox (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -183,10 +183,7 @@ GenerateThradd (BYTE control)
|
|||||||
if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED
|
if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED
|
||||||
&& !GET_GAME_STATE (AQUA_HELIX))
|
&& !GET_GAME_STATE (AQUA_HELIX))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (AQUA_MASK_PMAP_ANIM)
|
LoadGraphic (AQUA_MASK_PMAP_ANIM)
|
||||||
@@ -198,10 +195,7 @@ GenerateThradd (BYTE control)
|
|||||||
}
|
}
|
||||||
else if (CurStarDescPtr->Index == THRADD_DEFINED)
|
else if (CurStarDescPtr->Index == THRADD_DEFINED)
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -217,10 +217,7 @@ GenerateUtwig (BYTE control)
|
|||||||
|
|
||||||
if (CurStarDescPtr->Index == BOMB_DEFINED)
|
if (CurStarDescPtr->Index == BOMB_DEFINED)
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (BOMB_MASK_PMAP_ANIM)
|
LoadGraphic (BOMB_MASK_PMAP_ANIM)
|
||||||
@@ -232,10 +229,7 @@ GenerateUtwig (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -81,10 +81,7 @@ GenerateShipVault (BYTE control)
|
|||||||
if (pSolarSysState->pOrbitalDesc->pPrevDesc == &pSolarSysState->PlanetDesc[0]
|
if (pSolarSysState->pOrbitalDesc->pPrevDesc == &pSolarSysState->PlanetDesc[0]
|
||||||
&& pSolarSysState->pOrbitalDesc == &pSolarSysState->MoonDesc[0])
|
&& pSolarSysState->pOrbitalDesc == &pSolarSysState->MoonDesc[0])
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (VAULT_MASK_PMAP_ANIM)
|
LoadGraphic (VAULT_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -202,10 +202,7 @@ GenerateVUX (BYTE control)
|
|||||||
{
|
{
|
||||||
if (!GET_GAME_STATE (SHOFIXTI_MAIDENS))
|
if (!GET_GAME_STATE (SHOFIXTI_MAIDENS))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (MAIDENS_MASK_PMAP_ANIM)
|
LoadGraphic (MAIDENS_MASK_PMAP_ANIM)
|
||||||
@@ -220,10 +217,7 @@ GenerateVUX (BYTE control)
|
|||||||
{
|
{
|
||||||
if (!GET_GAME_STATE (VUX_BEAST))
|
if (!GET_GAME_STATE (VUX_BEAST))
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] = 0;
|
pSolarSysState->PlanetSideFrame[1] = 0;
|
||||||
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString =
|
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString =
|
||||||
CaptureStringTable (
|
CaptureStringTable (
|
||||||
@@ -233,10 +227,7 @@ GenerateVUX (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -72,10 +72,7 @@ GenerateUrquanWreck (BYTE control)
|
|||||||
case GENERATE_ORBITAL:
|
case GENERATE_ORBITAL:
|
||||||
if (pSolarSysState->pOrbitalDesc == &pSolarSysState->PlanetDesc[6])
|
if (pSolarSysState->pOrbitalDesc == &pSolarSysState->PlanetDesc[6])
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (WRECK_MASK_PMAP_ANIM)
|
LoadGraphic (WRECK_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -110,10 +110,7 @@ GenerateYehat (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -218,10 +218,7 @@ GenerateZoqFotPik (BYTE control)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont =
|
LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
CaptureFont (
|
|
||||||
LoadGraphic (LANDER_FONT)
|
|
||||||
);
|
|
||||||
pSolarSysState->PlanetSideFrame[1] =
|
pSolarSysState->PlanetSideFrame[1] =
|
||||||
CaptureDrawable (
|
CaptureDrawable (
|
||||||
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
LoadGraphic (RUINS_MASK_PMAP_ANIM)
|
||||||
|
|||||||
@@ -298,6 +298,7 @@ typedef struct
|
|||||||
|
|
||||||
STRING DiscoveryString;
|
STRING DiscoveryString;
|
||||||
FONT LanderFont;
|
FONT LanderFont;
|
||||||
|
FRAME LanderFontEff;
|
||||||
} PLANET_INFO;
|
} PLANET_INFO;
|
||||||
typedef PLANET_INFO *PPLANET_INFO;
|
typedef PLANET_INFO *PPLANET_INFO;
|
||||||
|
|
||||||
|
|||||||
@@ -267,12 +267,25 @@ FreePlanet (void)
|
|||||||
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString
|
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString
|
||||||
));
|
));
|
||||||
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString = 0;
|
pSolarSysState->SysInfo.PlanetInfo.DiscoveryString = 0;
|
||||||
DestroyFont (ReleaseFont (
|
FreeLanderFont (&pSolarSysState->SysInfo.PlanetInfo);
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont
|
|
||||||
));
|
|
||||||
pSolarSysState->SysInfo.PlanetInfo.LanderFont = 0;
|
|
||||||
pSolarSysState->PauseRotate = 0;
|
pSolarSysState->PauseRotate = 0;
|
||||||
|
|
||||||
UnlockMutex (GraphicsLock);
|
UnlockMutex (GraphicsLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
LoadStdLanderFont (PLANET_INFO *info)
|
||||||
|
{
|
||||||
|
info->LanderFont = CaptureFont (LoadGraphic (LANDER_FONT));
|
||||||
|
info->LanderFontEff = CaptureDrawable (
|
||||||
|
LoadGraphic (LANDER_FONTEFF_PMAP_ANIM));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
FreeLanderFont (PLANET_INFO *info)
|
||||||
|
{
|
||||||
|
DestroyFont (ReleaseFont (info->LanderFont));
|
||||||
|
info->LanderFont = 0;
|
||||||
|
DestroyDrawable (ReleaseDrawable (info->LanderFontEff));
|
||||||
|
info->LanderFontEff = 0;
|
||||||
|
}
|
||||||
|
|||||||
@@ -205,8 +205,10 @@ typedef SOLARSYS_STATE *PSOLARSYS_STATE;
|
|||||||
extern PSOLARSYS_STATE pSolarSysState;
|
extern PSOLARSYS_STATE pSolarSysState;
|
||||||
|
|
||||||
extern void LoadPlanet (BOOLEAN IsDefined);
|
extern void LoadPlanet (BOOLEAN IsDefined);
|
||||||
void DrawPlanet(int x, int y, int dy, unsigned int rgb);
|
extern void DrawPlanet(int x, int y, int dy, unsigned int rgb);
|
||||||
extern void FreePlanet (void);
|
extern void FreePlanet (void);
|
||||||
|
extern void LoadStdLanderFont (PLANET_INFO *info);
|
||||||
|
extern void FreeLanderFont (PLANET_INFO *info);
|
||||||
|
|
||||||
extern void ExploreSolarSys (void);
|
extern void ExploreSolarSys (void);
|
||||||
extern void DrawStarBackGround (BOOLEAN ForPlanet);
|
extern void DrawStarBackGround (BOOLEAN ForPlanet);
|
||||||
|
|||||||
@@ -256,22 +256,21 @@ DoDiscoveryReport (SOUND ReadOutSounds)
|
|||||||
OldContext = SetContext (ScanContext);
|
OldContext = SetContext (ScanContext);
|
||||||
{
|
{
|
||||||
FONT OldFont;
|
FONT OldFont;
|
||||||
|
FRAME OldFontEffect;
|
||||||
|
|
||||||
OldFont = SetContextFont (pSolarSysState->SysInfo.PlanetInfo.LanderFont);
|
OldFont = SetContextFont (
|
||||||
|
pSolarSysState->SysInfo.PlanetInfo.LanderFont);
|
||||||
if (optWhichFonts == OPT_PC)
|
if (optWhichFonts == OPT_PC)
|
||||||
{
|
OldFontEffect = SetContextFontEffect (
|
||||||
SetContextFontEffect (ALTERNATE_EFFECT,
|
pSolarSysState->SysInfo.PlanetInfo.LanderFontEff);
|
||||||
BUILD_COLOR_RGBA (0x00, 0x00, 0xD6, 0xFF),
|
|
||||||
BUILD_COLOR_RGBA (0x00, 0x04, 0xFF, 0xFF));
|
|
||||||
MakeReport (ReadOutSounds,
|
|
||||||
(UNICODE *)GetStringAddress (pSolarSysState->SysInfo.PlanetInfo.DiscoveryString),
|
|
||||||
GetStringLength (pSolarSysState->SysInfo.PlanetInfo.DiscoveryString));
|
|
||||||
SetContextFontEffect (0, 0, 0);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
|
OldFontEffect = SetContextFontEffect (NULL);
|
||||||
|
|
||||||
MakeReport (ReadOutSounds,
|
MakeReport (ReadOutSounds,
|
||||||
(UNICODE *)GetStringAddress (pSolarSysState->SysInfo.PlanetInfo.DiscoveryString),
|
(UNICODE *)GetStringAddress (pSolarSysState->SysInfo.PlanetInfo.DiscoveryString),
|
||||||
GetStringLength (pSolarSysState->SysInfo.PlanetInfo.DiscoveryString));
|
GetStringLength (pSolarSysState->SysInfo.PlanetInfo.DiscoveryString));
|
||||||
|
|
||||||
|
SetContextFontEffect (OldFontEffect);
|
||||||
SetContextFont (OldFont);
|
SetContextFont (OldFont);
|
||||||
}
|
}
|
||||||
#ifdef OLD
|
#ifdef OLD
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ FRAME ActivityFrame;
|
|||||||
FRAME StatusFrame;
|
FRAME StatusFrame;
|
||||||
FRAME FlagStatFrame;
|
FRAME FlagStatFrame;
|
||||||
FRAME MiscDataFrame;
|
FRAME MiscDataFrame;
|
||||||
|
FRAME FontGradFrame;
|
||||||
Mutex GraphicsLock;
|
Mutex GraphicsLock;
|
||||||
STRING GameStrings;
|
STRING GameStrings;
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ extern FRAME ActivityFrame;
|
|||||||
extern FRAME StatusFrame;
|
extern FRAME StatusFrame;
|
||||||
extern FRAME FlagStatFrame;
|
extern FRAME FlagStatFrame;
|
||||||
extern FRAME MiscDataFrame;
|
extern FRAME MiscDataFrame;
|
||||||
|
extern FRAME FontGradFrame;
|
||||||
|
|
||||||
extern CONTEXT OffScreenContext;
|
extern CONTEXT OffScreenContext;
|
||||||
extern CONTEXT ScreenContext;
|
extern CONTEXT ScreenContext;
|
||||||
|
|||||||
+17
-27
@@ -339,6 +339,7 @@ DrawFlagshipName (BOOLEAN InStatusArea)
|
|||||||
FONT OldFont;
|
FONT OldFont;
|
||||||
COLOR OldColor;
|
COLOR OldColor;
|
||||||
CONTEXT OldContext;
|
CONTEXT OldContext;
|
||||||
|
FRAME OldFontEffect;
|
||||||
UNICODE buf[60];
|
UNICODE buf[60];
|
||||||
|
|
||||||
if (InStatusArea)
|
if (InStatusArea)
|
||||||
@@ -367,6 +368,7 @@ DrawFlagshipName (BOOLEAN InStatusArea)
|
|||||||
wsprintf (buf, "%s %s", GAME_STRING (NAMING_STRING_BASE + 1), GLOBAL_SIS (ShipName));
|
wsprintf (buf, "%s %s", GAME_STRING (NAMING_STRING_BASE + 1), GLOBAL_SIS (ShipName));
|
||||||
wstrupr (buf);
|
wstrupr (buf);
|
||||||
}
|
}
|
||||||
|
OldFontEffect = SetContextFontEffect (NULL);
|
||||||
OldColor = SetContextForeGroundColor (BLACK_COLOR);
|
OldColor = SetContextForeGroundColor (BLACK_COLOR);
|
||||||
DrawFilledRectangle (&r);
|
DrawFilledRectangle (&r);
|
||||||
|
|
||||||
@@ -374,22 +376,15 @@ DrawFlagshipName (BOOLEAN InStatusArea)
|
|||||||
t.baseline.y = r.corner.y + (SHIP_NAME_HEIGHT - InStatusArea);
|
t.baseline.y = r.corner.y + (SHIP_NAME_HEIGHT - InStatusArea);
|
||||||
t.align = ALIGN_CENTER;
|
t.align = ALIGN_CENTER;
|
||||||
t.CharCount = (COUNT)~0;
|
t.CharCount = (COUNT)~0;
|
||||||
if (optWhichFonts == OPT_PC) {
|
if (optWhichFonts == OPT_PC)
|
||||||
if (InStatusArea)
|
SetContextFontEffect (SetAbsFrameIndex (FontGradFrame,
|
||||||
SetContextFontEffect (GRADIENT_EFFECT,
|
InStatusArea ? 0 : 3));
|
||||||
BUILD_COLOR_RGBA (0xF7, 0x08, 0x00, 0xFF),
|
|
||||||
BUILD_COLOR_RGBA (0xF7, 0xCD, 0x00, 0xFF));
|
|
||||||
else
|
|
||||||
SetContextFontEffect (GRADIENT_EFFECT,
|
|
||||||
BUILD_COLOR_RGBA (0x00, 0x00, 0x80, 0xFF),
|
|
||||||
BUILD_COLOR_RGBA (0x0C, 0x18, 0xFF, 0xFF));
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x14, 0x0A, 0x00), 0x0C));
|
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x14, 0x0A, 0x00), 0x0C));
|
||||||
font_DrawText (&t);
|
|
||||||
if (optWhichFonts == OPT_PC)
|
|
||||||
SetContextFontEffect (0, 0, 0);
|
|
||||||
|
|
||||||
|
font_DrawText (&t);
|
||||||
|
|
||||||
|
SetContextFontEffect (OldFontEffect);
|
||||||
SetContextForeGroundColor (OldColor);
|
SetContextForeGroundColor (OldColor);
|
||||||
SetContextFont (OldFont);
|
SetContextFont (OldFont);
|
||||||
SetContext (OldContext);
|
SetContext (OldContext);
|
||||||
@@ -402,6 +397,7 @@ DrawFlagshipStats (void)
|
|||||||
TEXT t;
|
TEXT t;
|
||||||
FONT OldFont;
|
FONT OldFont;
|
||||||
COLOR OldColor;
|
COLOR OldColor;
|
||||||
|
FRAME OldFontEffect;
|
||||||
CONTEXT OldContext;
|
CONTEXT OldContext;
|
||||||
UNICODE buf[60];
|
UNICODE buf[60];
|
||||||
SIZE leading;
|
SIZE leading;
|
||||||
@@ -452,6 +448,7 @@ DrawFlagshipStats (void)
|
|||||||
|
|
||||||
OldContext = SetContext (SpaceContext);
|
OldContext = SetContext (SpaceContext);
|
||||||
OldFont = SetContextFont (StarConFont);
|
OldFont = SetContextFont (StarConFont);
|
||||||
|
OldFontEffect = SetContextFontEffect (NULL);
|
||||||
GetContextFontLeading (&leading);
|
GetContextFontLeading (&leading);
|
||||||
|
|
||||||
/* we need room to play. full screen width, 4 lines tall */
|
/* we need room to play. full screen width, 4 lines tall */
|
||||||
@@ -474,9 +471,7 @@ DrawFlagshipStats (void)
|
|||||||
t.align = ALIGN_RIGHT;
|
t.align = ALIGN_RIGHT;
|
||||||
t.CharCount = (COUNT)~0;
|
t.CharCount = (COUNT)~0;
|
||||||
|
|
||||||
SetContextFontEffect (GRADIENT_EFFECT,
|
SetContextFontEffect (SetAbsFrameIndex (FontGradFrame, 4));
|
||||||
BUILD_COLOR_RGBA (0x00, 0x00, 0xA0, 0xFF),
|
|
||||||
BUILD_COLOR_RGBA (0x70, 0x7C, 0xFF, 0xFF));
|
|
||||||
|
|
||||||
wsprintf (buf, "nose:");
|
wsprintf (buf, "nose:");
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
@@ -510,9 +505,7 @@ DrawFlagshipStats (void)
|
|||||||
t.baseline.y = r.corner.y + leading + 3;
|
t.baseline.y = r.corner.y + leading + 3;
|
||||||
t.align = ALIGN_RIGHT;
|
t.align = ALIGN_RIGHT;
|
||||||
|
|
||||||
SetContextFontEffect (GRADIENT_EFFECT,
|
SetContextFontEffect (SetAbsFrameIndex (FontGradFrame, 5));
|
||||||
BUILD_COLOR_RGBA (0x00, 0x30, 0x48, 0xFF),
|
|
||||||
BUILD_COLOR_RGBA (0x68, 0xAC, 0xCC, 0xFF));
|
|
||||||
|
|
||||||
wsprintf (buf, "maximum velocity:");
|
wsprintf (buf, "maximum velocity:");
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
@@ -548,7 +541,7 @@ DrawFlagshipStats (void)
|
|||||||
wsprintf (buf, "%4lu", (fuel / FUEL_TANK_SCALE));
|
wsprintf (buf, "%4lu", (fuel / FUEL_TANK_SCALE));
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
|
|
||||||
SetContextFontEffect (0, 0, 0);
|
SetContextFontEffect (OldFontEffect);
|
||||||
SetContextForeGroundColor (OldColor);
|
SetContextForeGroundColor (OldColor);
|
||||||
SetContextFont (OldFont);
|
SetContextFont (OldFont);
|
||||||
SetContext (OldContext);
|
SetContext (OldContext);
|
||||||
@@ -695,6 +688,7 @@ DrawPC_SIS (void)
|
|||||||
TEXT t;
|
TEXT t;
|
||||||
RECT r;
|
RECT r;
|
||||||
UNICODE buf[10];
|
UNICODE buf[10];
|
||||||
|
|
||||||
GetGaugeRect (&r, FALSE);
|
GetGaugeRect (&r, FALSE);
|
||||||
t.baseline.x = STATUS_WIDTH >> 1;
|
t.baseline.x = STATUS_WIDTH >> 1;
|
||||||
t.baseline.y = r.corner.y - 1;
|
t.baseline.y = r.corner.y - 1;
|
||||||
@@ -709,9 +703,7 @@ DrawPC_SIS (void)
|
|||||||
r.extent.width += 2;
|
r.extent.width += 2;
|
||||||
DrawFilledRectangle (&r);
|
DrawFilledRectangle (&r);
|
||||||
|
|
||||||
SetContextFontEffect (GRADIENT_EFFECT,
|
SetContextFontEffect (SetAbsFrameIndex (FontGradFrame, 1));
|
||||||
BUILD_COLOR_RGBA (0x40, 0x00, 0x00, 0xFF),
|
|
||||||
BUILD_COLOR_RGBA (0xFF, 0x00, 0x00, 0xFF));
|
|
||||||
wsprintf (buf, "FUEL");
|
wsprintf (buf, "FUEL");
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
|
|
||||||
@@ -719,12 +711,10 @@ DrawPC_SIS (void)
|
|||||||
t.baseline.y += 79;
|
t.baseline.y += 79;
|
||||||
DrawFilledRectangle (&r);
|
DrawFilledRectangle (&r);
|
||||||
|
|
||||||
SetContextFontEffect (GRADIENT_EFFECT,
|
SetContextFontEffect (SetAbsFrameIndex (FontGradFrame, 2));
|
||||||
BUILD_COLOR_RGBA (0x00, 0x28, 0x00, 0xFF),
|
|
||||||
BUILD_COLOR_RGBA (0x00, 0xC0, 0x00, 0xFF));
|
|
||||||
wsprintf (buf, "CREW");
|
wsprintf (buf, "CREW");
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
SetContextFontEffect (0, 0, 0);
|
SetContextFontEffect (NULL);
|
||||||
|
|
||||||
r.corner.x = 2 + 1;
|
r.corner.x = 2 + 1;
|
||||||
r.corner.y = 3;
|
r.corner.y = 3;
|
||||||
|
|||||||
Reference in New Issue
Block a user