reman3/Rayman_X/cpa/tempgrp/TDE/tde_init.c

988 lines
34 KiB
C

/**************************************************************************************
File : INIT.CPP
Author : Delattre Franck & Valérie Cluzel
Last update : 21 / 02 / 97
Three types of functions:
- Initialization functions
- functions used to change a field
- liberation functions
***************************************************************************************/
#define TDE_GLOBALS
#include <stdio.h>
#define __DeclareGlobalVariableErrTde_h__
#include "TDE\errtde.h"
#undef __DeclareGlobalVariableErrTde_h__
#define __DeclareGlobalVariableMmgTde_h__
#include "TDE\mmgtde.h"
#undef __DeclareGlobalVariableMmgTde_h__
#include "TDE.h"
/*********************************************************************
TDE_INIT.C
First part : INITIALIZATION FUNCTIONS
- TDE_vInitPictureAttributes
- TDE_vInitCamera
- TDE_vInitSuperObject
- TDE_vInitSuperObjectWithSprite
- TDE_vInitLine
- TDE_vInitSprite
- TDE_vInitMemSprite
- TDE_vInitMemSpriteWithoutSO
- TDE_vInitTextBox
- TDE_vCreateBitmapFont
- TDE_vCreateTrueTypeFont
- TDE_vInitTransparencyTable
**********************************************************************/
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitPictureAttributes
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Fills a TDE_tdsPictureAttributes structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitPictureAttributes(TDE_tdsPictureAttributes **h_stPicture,
TDE_tdxValue xWidth,
TDE_tdxValue xHeight,
TDE_tdxValue xSrcPitch,
TDE_tdLP_SOURCE lp_Data,
TDE_tdLP_SURF lp_DDS)
{
M_TdeAlloc( (*h_stPicture), TDE_tdsPictureAttributes *, (sizeof(TDE_tdsPictureAttributes)) );
if ((*h_stPicture) == NULL)
return;
(*h_stPicture)->xWidth = xWidth;
(*h_stPicture)->xHeight = xHeight;
(*h_stPicture)->xSrcPitch = xSrcPitch;
(*h_stPicture)->lp_Data = lp_Data;
(*h_stPicture)->lp_DDS = lp_DDS;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitCamera
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Initialize the camera
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitCamera(TDE_tdsCamera *stCamera)
{
stCamera->xAngle = 0;
stCamera->stScale.xX = 1;
stCamera->stScale.xY = 1;
stCamera->stTranslateVertex.xX = 0;
stCamera->stTranslateVertex.xY = 0;
TDE_vCreateSuperObjectMatrix(stCamera);
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitSuperObject
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Fills a TDE_tdsSuperObject structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitSuperObject(TDE_tdsSuperObject **h_stSuperObject,
short sPriority,
TDE_tdsSuperObject *p_stChild,
TDE_tdsSuperObject *p_stLeftBrother,
TDE_tdsSuperObject *p_stRightBrother,
TDE_tdsSuperObject *p_stFather,
TDE_tdeType eType,
TDE_tdxAngle xAngle,
TDE_tdxValue xZX,
TDE_tdxValue xZY,
TDE_tdxValue xCenterX,
TDE_tdxValue xCenterY,
long lArea,
long lObject)
{
M_TdeAlloc( (*h_stSuperObject), TDE_tdsSuperObject *, (sizeof(TDE_tdsSuperObject)));
if ((*h_stSuperObject) == NULL)
return;
(*h_stSuperObject)->sPriority = sPriority;
(*h_stSuperObject)->p_stChild = p_stChild;
(*h_stSuperObject)->p_stLeftBrother = p_stLeftBrother;
(*h_stSuperObject)->p_stRightBrother = p_stRightBrother;
(*h_stSuperObject)->p_stFather = p_stFather;
(*h_stSuperObject)->eType = eType;
(*h_stSuperObject)->stMatrix.xAngle = xAngle;
(*h_stSuperObject)->stMatrix.stScale.xX = xZX;
(*h_stSuperObject)->stMatrix.stScale.xY = xZY;
(*h_stSuperObject)->p_stSOClipRect = NULL;
(*h_stSuperObject)->stMatrix.stTranslateVertex.xX = xCenterX;
(*h_stSuperObject)->stMatrix.stTranslateVertex.xY = xCenterY;
(*h_stSuperObject)->lArea = lArea;
(*h_stSuperObject)->lObject = lObject;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitSuperObject
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Fills a TDE_tdsSuperObject structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitSuperObjectWithSprite(TDE_tdsSuperObject **h_stSuperObject,
TDE_tdsSprite *p_stSprite,
short sPriority,
TDE_tdsSuperObject *p_stChild,
TDE_tdsSuperObject *p_stLeftBrother,
TDE_tdsSuperObject *p_stRightBrother,
TDE_tdsSuperObject *p_stFather,
TDE_tdxAngle xAngle,
TDE_tdxValue xZX,
TDE_tdxValue xZY,
TDE_tdxValue xCenterX,
TDE_tdxValue xCenterY,
long lArea,
long lObject)
{
M_TdeAlloc( (*h_stSuperObject), TDE_tdsSuperObject *, (sizeof(TDE_tdsSuperObject)));
if ((*h_stSuperObject) == NULL)
return;
(*h_stSuperObject)->p_stSprite = p_stSprite;
(*h_stSuperObject)->sPriority = sPriority;
(*h_stSuperObject)->p_stChild = p_stChild;
(*h_stSuperObject)->p_stLeftBrother = p_stLeftBrother;
(*h_stSuperObject)->p_stRightBrother = p_stRightBrother;
(*h_stSuperObject)->p_stFather = p_stFather;
(*h_stSuperObject)->eType = TDE_eOT_SPRITE;
(*h_stSuperObject)->stMatrix.xAngle = xAngle;
(*h_stSuperObject)->stMatrix.stScale.xX = xZX;
(*h_stSuperObject)->stMatrix.stScale.xY = xZY;
(*h_stSuperObject)->p_stSOClipRect = NULL;
(*h_stSuperObject)->stMatrix.stTranslateVertex.xX = xCenterX;
(*h_stSuperObject)->stMatrix.stTranslateVertex.xY = xCenterY;
(*h_stSuperObject)->lArea = lArea;
(*h_stSuperObject)->lObject = lObject;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitLine
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Fills a tdsLine structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitLine(TDE_tdsSuperObject *p_SuperObject,
TDE_tdxValue xLength,
long lColor)
{
M_TdeAlloc( p_SuperObject->p_stLine, TDE_tdsLine *, (sizeof(TDE_tdsLine)) );
if (p_SuperObject->p_stLine == NULL)
{
p_SuperObject->eType = TDE_eOT_EMPTY;
return;
}
p_SuperObject->eType = TDE_eOT_LINE;
p_SuperObject->p_stLine->xLength = xLength;
p_SuperObject->p_stLine->lColor = lColor;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitSprite
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Fills a tdsSprite structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitSprite(TDE_tdsSuperObject *p_SuperObject,
TDE_tdxValue xWidth,
TDE_tdxValue xHeight,
TDE_tdxValue xXs,
TDE_tdxValue xYs,
TDE_tdxPixel *v_pData,
CHAR cFlip,
CHAR c_NZ,
CHAR cSemiTransparent,
TDE_tdsPictureAttributes *p_stPicture)
{
M_TdeAlloc( p_SuperObject->p_stSprite, TDE_tdsSprite *, (sizeof(TDE_tdsSprite)) );
if (p_SuperObject->p_stSprite == NULL)
{
p_SuperObject->eType = TDE_eOT_EMPTY;
return;
}
p_SuperObject->p_stSprite->stDim.xX = xWidth;
p_SuperObject->p_stSprite->stDim.xY = xHeight;
p_SuperObject->p_stSprite->stSourceOrigin.xX = xXs;
p_SuperObject->p_stSprite->stSourceOrigin.xY = xYs;
p_SuperObject->p_stSprite->v_pData = v_pData;
p_SuperObject->p_stSprite->cFlip = cFlip;
p_SuperObject->p_stSprite->c_NZ = c_NZ;
p_SuperObject->p_stSprite->cSemiTransparent = cSemiTransparent;
p_SuperObject->p_stSprite->stPicture = *p_stPicture;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitMemSprite
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Fills a tdsSprite structure for memory sprite
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitMemSprite(TDE_tdsSuperObject *p_SuperObject,
TDE_tdxPixel *v_pData,
CHAR c_NZ)
{
M_TdeAlloc( p_SuperObject->p_stSprite, TDE_tdsSprite *, (sizeof(TDE_tdsSprite)) );
if (p_SuperObject->p_stSprite == NULL)
{
p_SuperObject->eType = TDE_eOT_EMPTY;
return;
}
p_SuperObject->eType = TDE_eOT_SPRITE;
p_SuperObject->p_stSprite->v_pData = v_pData;
p_SuperObject->p_stSprite->c_NZ = c_NZ;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitMemSpriteWithoutSO
VERSION : 2.0 / Yan
1.0 / Franck
AIM : Fills a tdsSprite structure for memory sprite non attached
to a super object
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitMemSpriteWithoutSO(TDE_tdsSprite **p_stSprite,
TDE_tdxPixel *v_pData,
CHAR c_NZ)
{
M_TdeAlloc( *p_stSprite, TDE_tdsSprite *, (sizeof(TDE_tdsSprite)) );
if ((*p_stSprite) == NULL)
return;
(*p_stSprite)->v_pData = v_pData;
(*p_stSprite)->c_NZ = c_NZ;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitTextBox
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Fills a tdsTextBox structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitTextBox (TDE_tdsSuperObject *p_SuperObject,
TDE_tdeFontType eFontType,
void *p_stFont,
unsigned long ulStyle)
{
// Allocate memory for text box
M_TdeAlloc( p_SuperObject->p_stTextBox, TDE_tdsTextBox *, (sizeof(TDE_tdsTextBox)) );
if (p_SuperObject->p_stTextBox == NULL)
return;
// Allocate memory for format rectangle
M_TdeAlloc(p_SuperObject->p_stTextBox->p_stFormatRect, TDE_tdsRect*, sizeof(TDE_tdsLRect));
if (p_SuperObject->p_stTextBox->p_stFormatRect == NULL)
{
M_TdeFree (p_SuperObject->p_stTextBox);
p_SuperObject->p_stTextBox = NULL;
p_SuperObject->eType = TDE_eOT_EMPTY;
return;
}
// Allocate memory for clipping
M_TdeAlloc(p_SuperObject->p_stTextBox->p_stClipRect, TDE_tdsRect*, sizeof(TDE_tdsLRect));
if (p_SuperObject->p_stTextBox->p_stClipRect == NULL)
{
M_TdeFree (p_SuperObject->p_stTextBox->p_stFormatRect);
M_TdeFree (p_SuperObject->p_stTextBox);
p_SuperObject->p_stTextBox = NULL;
p_SuperObject->eType = TDE_eOT_EMPTY;
return;
}
// Set font type and pointer to font
p_SuperObject->p_stTextBox->eFontType = eFontType;
switch (eFontType)
{
case TDE_eFT_BITMAP:
p_SuperObject->p_stTextBox->p_stBFont = (TDE_tdsBitmapFont*)p_stFont;
break;
case TDE_eFT_TRUETYPE:
p_SuperObject->p_stTextBox->p_stTFont = (TDE_tdsTrueTypeFont*)p_stFont;
break;
}
// Set style
p_SuperObject->p_stTextBox->ulStyle = ulStyle;
// Set default values
p_SuperObject->p_stTextBox->eCursorType = TDE_eCT_NOCURSOR;
p_SuperObject->p_stTextBox->lCursorPosition = 0;
p_SuperObject->p_stTextBox->p_cText = NULL;
p_SuperObject->p_stTextBox->cColorMode = 0;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vCreateBitmapFont
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Allocation of a bitmap font structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vCreateBitmapFont(TDE_tdsBitmapFont **BFont)
{
long i;
M_TdeAlloc( *BFont, TDE_tdsBitmapFont *, (sizeof(TDE_tdsBitmapFont)) );
if ((*BFont) == NULL)
return;
// initialize every characters to NULL
for ( i=0; i<TDE_kNBLETTERS; i++ )
{
(*BFont)->p_stMBLetter[i] = NULL;
}
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vCreateTrueTypeFont
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Allocation of a true type font structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vCreateTrueTypeFont(TDE_tdsTrueTypeFont **TFont)
{
M_TdeAlloc( *TFont, TDE_tdsTrueTypeFont *, (sizeof(TDE_tdsTrueTypeFont)) );
if ((*TFont) == NULL)
return;
(*TFont)->hFont = NULL;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vInitTransparencyTable()
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Init tables for semi-transparency
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vInitTransparencyTable()
{
char i, j;
for (i=0; i<64; i++)
{
for (j=0; j<64; j++)
{
a_cTransparencyTable6[i][j] = (unsigned char) ((i*j)/63);
}
for (j=0; j<32; j++)
{
a_cTransparencyTable5[i][j] = (unsigned char) ((i*j)/63);
}
}
}
/*********************************************************************
TDE_INIT.C
Second part : FUNCTIONS USED TO CHANGE A STRUCTURE FIELD
- TDE_vSetSourcePointer
- TDE_vSetSuperObjectDescendantsSourcePointer
- TDE_vSetSourcePitch
- TDE_vSetSuperObjectDescendantsSourcePitch
- TDE_vChangeTextInTheBox
- TDE_vChangeCursorType
- TDE_vChangeCursorPosition
- TDE_vChangeFormatRectangle
- TDE_vChangeClipRectangle
- TDE_vMoveFormatRectangle
- TDE_vMoveClipRectangle
- TDE_vChangeSuperObjetCoordinates
- TDE_vChangeSuperObjetScale
- TDE_vChangeSuperObjetAngle
- TDE_vChangeSuperObjectFlip
- TDE_vChangeSuperObjectAlpha
- TDE_vChangeSuperObjectDescendantsAlpha
- TDE_vChangeSuperObjectSemiTransparency
- TDE_vChangeSuperObjectDescendantsSemiTransparency
- TDE_vChangeSourceCoordinates
**********************************************************************/
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vSetSourcePointer
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Changes the pointer of a picture definition
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vSetSourcePointer(TDE_tdsSuperObject *p_stSuperObject,
TDE_tdLP_SOURCE lp_Data)
{
p_stSuperObject->p_stSprite->stPicture.lp_Data = lp_Data;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vSetSuperObjectDescendantsSourcePointer
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Set the source pointer (has to be called when the source is locked)
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vSetSuperObjectDescendantsSourcePointer(TDE_tdsSuperObject *p_stSuperObject, TDE_tdLP_SOURCE lp_Data)
{
TDE_tdsSuperObject *p_stSuperObjectTemp;
TDE_vSetSourcePointer(p_stSuperObject, lp_Data);
for ( p_stSuperObjectTemp = p_stSuperObject->p_stChild; p_stSuperObjectTemp != NULL; p_stSuperObjectTemp = p_stSuperObjectTemp->p_stRightBrother)
{
TDE_vSetSuperObjectDescendantsSourcePointer(p_stSuperObjectTemp, lp_Data);
}
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vSetSourcePitch
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Changes the pitch of a picture definition
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vSetSourcePitch(TDE_tdsSuperObject *p_stSuperObject,
TDE_tdxValue xSrcPitch)
{
p_stSuperObject->p_stSprite->stPicture.xSrcPitch = xSrcPitch;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vSetSuperObjectDescendantsSourcePitch
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Set the source pitch (has to be called when the source is locked)
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vSetSuperObjectDescendantsSourcePitch(TDE_tdsSuperObject *p_stSuperObject, TDE_tdxValue xSrcPitch)
{
TDE_tdsSuperObject *p_stSuperObjectTemp;
TDE_vSetSourcePitch(p_stSuperObject, xSrcPitch);
for ( p_stSuperObjectTemp = p_stSuperObject->p_stChild; p_stSuperObjectTemp != NULL; p_stSuperObjectTemp = p_stSuperObjectTemp->p_stRightBrother)
{
TDE_vSetSuperObjectDescendantsSourcePitch(p_stSuperObjectTemp, xSrcPitch);
}
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeFormatRectangle
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Change the format rectangle of a text box
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeFormatRectangle(TDE_tdsTextBox *Box, TDE_tdxValue xCornerX, TDE_tdxValue xCornerY, TDE_tdxValue xWidth, TDE_tdxValue xHeight)
{
Box->p_stFormatRect->tdsSommet[0].xX = xCornerX;
Box->p_stFormatRect->tdsSommet[0].xY = xCornerY;
Box->p_stFormatRect->tdsSommet[1].xX = xCornerX + xWidth-1;
Box->p_stFormatRect->tdsSommet[1].xY = xCornerY;
Box->p_stFormatRect->tdsSommet[2].xX = xCornerX + xWidth-1;
Box->p_stFormatRect->tdsSommet[2].xY = xCornerY + xHeight-1;
Box->p_stFormatRect->tdsSommet[3].xX = xCornerX;
Box->p_stFormatRect->tdsSommet[3].xY = xCornerY + xHeight-1;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeClipRectangle
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Change the clipping rectangle of a text box
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeClipRectangle(TDE_tdsTextBox *Box, TDE_tdxValue xCornerX, TDE_tdxValue xCornerY, TDE_tdxValue xWidth, TDE_tdxValue xHeight)
{
Box->p_stClipRect->tdsSommet[0].xX = xCornerX;
Box->p_stClipRect->tdsSommet[0].xY = xCornerY;
Box->p_stClipRect->tdsSommet[1].xX = xCornerX + xWidth-1;
Box->p_stClipRect->tdsSommet[1].xY = xCornerY;
Box->p_stClipRect->tdsSommet[2].xX = xCornerX + xWidth-1;
Box->p_stClipRect->tdsSommet[2].xY = xCornerY + xHeight-1;
Box->p_stClipRect->tdsSommet[3].xX = xCornerX;
Box->p_stClipRect->tdsSommet[3].xY = xCornerY + xHeight-1;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vMoveFormatRectangle
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Translate the format rectangle of a text box
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vMoveFormatRectangle(TDE_tdsTextBox *Box, TDE_tdxValue xDx, TDE_tdxValue xDy)
{
Box->p_stFormatRect->tdsSommet[0].xX += xDx;
Box->p_stFormatRect->tdsSommet[0].xY += xDy;
Box->p_stFormatRect->tdsSommet[1].xX += xDx;
Box->p_stFormatRect->tdsSommet[1].xY += xDy;
Box->p_stFormatRect->tdsSommet[2].xX += xDx;
Box->p_stFormatRect->tdsSommet[2].xY += xDy;
Box->p_stFormatRect->tdsSommet[3].xX += xDx;
Box->p_stFormatRect->tdsSommet[3].xY += xDy;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vMoveClipRectangle
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Translate the clipping rectangle of a text box
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vMoveClipRectangle(TDE_tdsTextBox *Box, TDE_tdxValue xDx, TDE_tdxValue xDy)
{
Box->p_stClipRect->tdsSommet[0].xX += xDx;
Box->p_stClipRect->tdsSommet[0].xY += xDy;
Box->p_stClipRect->tdsSommet[1].xX += xDx;
Box->p_stClipRect->tdsSommet[1].xY += xDy;
Box->p_stClipRect->tdsSommet[2].xX += xDx;
Box->p_stClipRect->tdsSommet[2].xY += xDy;
Box->p_stClipRect->tdsSommet[3].xX += xDx;
Box->p_stClipRect->tdsSommet[3].xY += xDy;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeTextInTheBox
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Change the pointer to the text in a TextBox
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeTextInTheBox (TDE_tdsSuperObject *p_SuperObject,
char *p_cText)
{
p_SuperObject->p_stTextBox->p_cText = p_cText;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeCursorType
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Change the cursor type in a TextBox
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeCursorType (TDE_tdsSuperObject *p_SuperObject,
TDE_tdeCursorType eType)
{
p_SuperObject->p_stTextBox->eCursorType = eType;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeCursorPosition
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Change the cursor position in a TextBox
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeCursorPosition (TDE_tdsSuperObject *p_SuperObject,
long lPosition)
{
p_SuperObject->p_stTextBox->lCursorPosition = lPosition;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeColorModeInTextBox
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Change the color mode in a TextBox
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeColorModeInTextBox (TDE_tdsSuperObject *p_SuperObject,
char cColorMode)
{
p_SuperObject->p_stTextBox->cColorMode = cColorMode;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSuperObjetCoordinates
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Changes the super object center coordinates
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSuperObjetCoordinates(TDE_tdsSuperObject *p_stSuperObject,
TDE_tdxValue xX,
TDE_tdxValue xY)
{
p_stSuperObject->stMatrix.stTranslateVertex.xX = xX;
p_stSuperObject->stMatrix.stTranslateVertex.xY = xY;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSuperObjetScale
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Changes the super object X and Y scale factors
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSuperObjetScale(TDE_tdsSuperObject *p_stSuperObject,
TDE_tdxValue xZX,
TDE_tdxValue xZY)
{
p_stSuperObject->stMatrix.stScale.xX = xZX;
p_stSuperObject->stMatrix.stScale.xY = xZY;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSuperObjetAngle
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Changes the super object angle
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSuperObjetAngle(TDE_tdsSuperObject *p_stSuperObjet,
TDE_tdxAngle xAngle)
{
p_stSuperObjet->stMatrix.xAngle = xAngle;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSuperObjectFlip
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Changes the super object flip parameter
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSuperObjectFlip(TDE_tdsSuperObject *p_stSuperObjet,
char cFlip)
{
p_stSuperObjet->p_stSprite->cFlip = cFlip&3;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSuperObjectAlpha
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Modify alpha channel for a superobject
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSuperObjectAlpha(TDE_tdsSuperObject *p_stSuperObjet,
TDE_tdxValue xAlpha)
{
p_stSuperObjet->p_stSprite->alpha = xAlpha;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSuperObjectSemiTransparency
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Enables or disables semi-transparency property
1 -> enable
0 -> disable
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSuperObjectSemiTransparency(TDE_tdsSuperObject *p_stSuperObjet,
char cSemiTransparent)
{
p_stSuperObjet->p_stSprite->cSemiTransparent = cSemiTransparent;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSuperObjectDescendantsSemiTransparency
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Enables or disables semi-transparency property for a SuperObject and
his descendants
1 -> enable
0 -> disable
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSuperObjectDescendantsSemiTransparency(TDE_tdsSuperObject *p_stSuperObject, char cSemiTransparent)
{
TDE_tdsSuperObject *p_stSuperObjectTemp;
TDE_vChangeSuperObjectSemiTransparency(p_stSuperObject, cSemiTransparent);
for ( p_stSuperObjectTemp = p_stSuperObject->p_stChild; p_stSuperObjectTemp != NULL; p_stSuperObjectTemp = p_stSuperObjectTemp->p_stRightBrother)
{
TDE_vChangeSuperObjectDescendantsSemiTransparency(p_stSuperObjectTemp, cSemiTransparent);
}
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSuperObjectDescendantsAlpha
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Modify alpha channel for a superobject and its descendants
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSuperObjectDescendantsAlpha(TDE_tdsSuperObject *p_stSuperObject, TDE_tdxValue xAlpha)
{
TDE_tdsSuperObject *p_stSuperObjectTemp;
TDE_vChangeSuperObjectAlpha(p_stSuperObject, xAlpha);
for ( p_stSuperObjectTemp = p_stSuperObject->p_stChild; p_stSuperObjectTemp != NULL; p_stSuperObjectTemp = p_stSuperObjectTemp->p_stRightBrother)
{
TDE_vChangeSuperObjectDescendantsAlpha(p_stSuperObjectTemp, xAlpha);
}
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vChangeSourceCoordinates
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Changes the source picture coordinates of a sprite
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vChangeSourceCoordinates(TDE_tdsSprite *p_stSprite,
TDE_tdxValue xXs,
TDE_tdxValue xYs)
{
p_stSprite->stSourceOrigin.xX = xXs;
p_stSprite->stSourceOrigin.xY = xYs;
}
/************************************************************************
TDE_INIT.C
Third part : Get Functions
- TDE_eGetCursorType
- TDE_lGetCursorPosition
*************************************************************************/
TDE_tdeCursorType TDE_eGetCursorType ( TDE_tdsSuperObject *p_SuperObject )
{
return p_SuperObject->p_stTextBox->eCursorType;
}
long TDE_lGetCursorPosition ( TDE_tdsSuperObject *p_SuperObject )
{
return p_SuperObject->p_stTextBox->lCursorPosition;
}
/*********************************************************************
TDE_INIT.C
fourth part : LIBERATION FUNCTIONS
- TDE_vReleaseMenuBitmapFont
- TDE_vReleaseTrueTypeFont
- TDE_vReleaseMemSprite
- TDE_vDestroyPictureAttributes
- TDE_vDestroyTextBox
- TDE_vDestroySuperObject
- TDE_vDestroySuperObjectDescendants
**********************************************************************/
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vReleaseBitmapFont
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Destroy a bitmap font structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vReleaseBitmapFont(TDE_tdsBitmapFont *BFont)
{
short i;
if (BFont == NULL)
return;
for ( i=0; i<TDE_kNBLETTERS; i++ )
{
if (BFont->p_stMBLetter[i] != NULL)
{
if (BFont->p_stMBLetter[i]->stBLetter.p_stSprite != NULL)
{
if (BFont->p_stMBLetter[i]->stBLetter.p_stSprite->v_pData != NULL)
{
// sprite data
M_TdeFree( BFont->p_stMBLetter[i]->stBLetter.p_stSprite->v_pData );
}
// sprite
M_TdeFree( BFont->p_stMBLetter[i]->stBLetter.p_stSprite );
}
// Letter
M_TdeFree( BFont->p_stMBLetter[i]);
}
}
M_TdeFree(BFont);
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vReleaseTrueTypeFont
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Destroy a true type font structure
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vReleaseTrueTypeFont(TDE_tdsTrueTypeFont *TFont)
{
if (TFont == NULL)
return;
if (TFont->hFont != NULL)
DeleteObject ((HGDIOBJ)TFont->hFont);
M_TdeFree(TFont);
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vReleaseMemSprite
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Frees a memory sprite
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vReleaseMemSprite(TDE_tdsSprite *p_stSprite)
{
if (p_stSprite)
{
if (p_stSprite->v_pData)
M_TdeFree(p_stSprite->v_pData);
M_TdeFree(p_stSprite);
}
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vDestroyPictureAttributes
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Free a TDE_tdsPictureAttributes object
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vDestroyPictureAttributes(TDE_tdsPictureAttributes **h_stPicture)
{
M_TdeFree(*h_stPicture);
*h_stPicture = NULL;
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vDestroyTextBox
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Free a tdsTextBox object
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vDestroyTextBox(TDE_tdsTextBox **h_stTextBox)
{
if (*h_stTextBox)
{
if ((*h_stTextBox)->p_stFormatRect)
M_TdeFree ((*h_stTextBox)->p_stFormatRect);
if ((*h_stTextBox)->p_stClipRect)
M_TdeFree ((*h_stTextBox)->p_stClipRect);
M_TdeFree(*h_stTextBox);
*h_stTextBox = NULL;
}
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vDestroySuperObject
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Free a tdsSuperObject object
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vDestroySuperObject(TDE_tdsSuperObject **h_stSuperObject)
{
if (*h_stSuperObject)
{
M_TdeFree(*h_stSuperObject);
*h_stSuperObject = NULL;
}
}
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
NAME : TDE_vDestroySuperObjectDescendants
VERSION : 2.0 / Valérie
1.0 / Franck
AIM : Free a tdsSuperObject object
**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
void TDE_vDestroySuperObjectDescendants(TDE_tdsSuperObject **h_stSuperObject)
{
char NotFinished = 1;
TDE_tdsSuperObject *p_stSuperObjectTemp, *p_stSuperObject = *h_stSuperObject;
while (NotFinished)
{
if (p_stSuperObject->p_stChild) p_stSuperObject = p_stSuperObject->p_stChild;
else
{
if (p_stSuperObject->p_stRightBrother)
{
p_stSuperObjectTemp = p_stSuperObject;
p_stSuperObject = p_stSuperObject->p_stRightBrother;
if (p_stSuperObjectTemp->p_stFather)
{
p_stSuperObject->p_stFather = p_stSuperObjectTemp->p_stFather;
p_stSuperObject->p_stFather->p_stChild = p_stSuperObject;
}
//free(p_stSuperObjectTemp);
M_TdeFree(p_stSuperObjectTemp);
}
else
{
if (p_stSuperObject->p_stFather)
{
p_stSuperObject = p_stSuperObject->p_stFather;
//free(p_stSuperObject->p_stChild);
M_TdeFree(p_stSuperObject->p_stChild);
p_stSuperObject->p_stChild = NULL;
}
else
{
//free(p_stSuperObject);
M_TdeFree(p_stSuperObject);
NotFinished = 0;
(*h_stSuperObject) = NULL;
}
}
}
}
}