/** Creates an empty text * @return orxTEXT / orxNULL */ orxTEXT *orxFASTCALL orxText_Create() { orxTEXT *pstResult; /* Checks */ orxASSERT(sstText.u32Flags & orxTEXT_KU32_STATIC_FLAG_READY); /* Creates text */ pstResult = orxTEXT(orxStructure_Create(orxSTRUCTURE_ID_TEXT)); /* Created? */ if(pstResult != orxNULL) { /* Inits it */ pstResult->zString = orxNULL; pstResult->pstFont = orxNULL; /* Inits flags */ orxStructure_SetFlags(pstResult, orxTEXT_KU32_FLAG_NONE, orxTEXT_KU32_MASK_ALL); /* Increases counter */ orxStructure_IncreaseCounter(pstResult); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Failed to create structure for text."); } /* Done! */ return pstResult; }
/** Deletes all texts */ static orxINLINE void orxText_DeleteAll() { orxTEXT *pstText; /* Gets first text */ pstText = orxTEXT(orxStructure_GetFirst(orxSTRUCTURE_ID_TEXT)); /* Non empty? */ while(pstText != orxNULL) { /* Deletes text */ orxText_Delete(pstText); /* Gets first text */ pstText = orxTEXT(orxStructure_GetFirst(orxSTRUCTURE_ID_TEXT)); } return; }
/** Updates graphic size (recompute) * @param[in] _pstGraphic Concerned graphic * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxGraphic_UpdateSize(orxGRAPHIC *_pstGraphic) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); /* Is data a texture? */ if(orxTEXTURE(_pstGraphic->pstData) != orxNULL) { /* Updates coordinates */ orxTexture_GetSize(orxTEXTURE(_pstGraphic->pstData), &(_pstGraphic->fWidth), &(_pstGraphic->fHeight)); } /* Is data a text? */ else if(orxTEXT(_pstGraphic->pstData) != orxNULL) { /* Inits full coordinates */ orxText_GetSize(orxTEXT(_pstGraphic->pstData), &(_pstGraphic->fWidth), &(_pstGraphic->fHeight)); } else { /* Failure */ eResult = orxSTATUS_FAILURE; } /* Valid and has a relative pivot? */ if((eResult != orxSTATUS_FAILURE) && (orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_RELATIVE_PIVOT))) { /* Updates relative pivot */ orxGraphic_SetRelativePivot(_pstGraphic, orxStructure_GetFlags(_pstGraphic, orxGRAPHIC_KU32_MASK_ALIGN)); } /* Done! */ return eResult; }
/** Event handler * @param[in] _pstEvent Sent event * @return orxSTATUS_SUCCESS if handled / orxSTATUS_FAILURE otherwise */ static orxSTATUS orxFASTCALL orxText_EventHandler(const orxEVENT *_pstEvent) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Locale? */ if(_pstEvent->eType == orxEVENT_TYPE_LOCALE) { /* Select language event? */ if(_pstEvent->eID == orxLOCALE_EVENT_SELECT_LANGUAGE) { orxTEXT *pstText; /* For all texts */ for(pstText = orxTEXT(orxStructure_GetFirst(orxSTRUCTURE_ID_TEXT)); pstText != orxNULL; pstText = orxTEXT(orxStructure_GetNext(pstText))) { const orxSTRING zLocaleKey; /* Gets its corresponding locale string */ zLocaleKey = orxText_GetLocaleKey(pstText, orxTEXT_KZ_CONFIG_STRING); /* Valid? */ if(zLocaleKey != orxNULL) { const orxSTRING zText; /* Gets its localized value */ zText = orxLocale_GetString(zLocaleKey); /* Valid? */ if(*zText != orxCHAR_NULL) { /* Updates text */ orxText_SetString(pstText, zText); } } /* Gets its corresponding locale font */ zLocaleKey = orxText_GetLocaleKey(pstText, orxTEXT_KZ_CONFIG_FONT); /* Valid? */ if(zLocaleKey != orxNULL) { orxFONT *pstFont; /* Creates font */ pstFont = orxFont_CreateFromConfig(orxLocale_GetString(zLocaleKey)); /* Valid? */ if(pstFont != orxNULL) { /* Updates text */ if(orxText_SetFont(pstText, pstFont) != orxSTATUS_FAILURE) { /* Sets its owner */ orxStructure_SetOwner(pstFont, pstText); /* Updates flags */ orxStructure_SetFlags(pstText, orxTEXT_KU32_FLAG_INTERNAL, orxTEXT_KU32_FLAG_NONE); } else { /* Sets default font */ orxText_SetFont(pstText, orxFONT(orxFont_GetDefaultFont())); } } } } } } /* Resource */ else { /* Checks */ orxASSERT(_pstEvent->eType == orxEVENT_TYPE_RESOURCE); /* Add or update? */ if((_pstEvent->eID == orxRESOURCE_EVENT_ADD) || (_pstEvent->eID == orxRESOURCE_EVENT_UPDATE)) { orxRESOURCE_EVENT_PAYLOAD *pstPayload; /* Gets payload */ pstPayload = (orxRESOURCE_EVENT_PAYLOAD *)_pstEvent->pstPayload; /* Is config group? */ if(pstPayload->u32GroupID == orxString_ToCRC(orxCONFIG_KZ_RESOURCE_GROUP)) { orxTEXT *pstText; /* For all texts */ for(pstText = orxTEXT(orxStructure_GetFirst(orxSTRUCTURE_ID_TEXT)); pstText != orxNULL; pstText = orxTEXT(orxStructure_GetNext(pstText))) { /* Match origin? */ if(orxConfig_GetOriginID(pstText->zReference) == pstPayload->u32NameID) { /* Re-processes its config data */ orxText_ProcessConfigData(pstText); } } } } } /* Done! */ return eResult; }
/** Sets graphic data * @param[in] _pstGraphic Graphic concerned * @param[in] _pstData Data structure to set / orxNULL * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE */ orxSTATUS orxFASTCALL orxGraphic_SetData(orxGRAPHIC *_pstGraphic, orxSTRUCTURE *_pstData) { orxSTATUS eResult = orxSTATUS_SUCCESS; /* Checks */ orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY); orxSTRUCTURE_ASSERT(_pstGraphic); /* Had previous data? */ if(_pstGraphic->pstData != orxNULL) { /* Updates structure reference counter */ orxStructure_DecreaseCounter(_pstGraphic->pstData); /* Internally handled? */ if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_INTERNAL)) { /* Removes its owner */ orxStructure_SetOwner(_pstGraphic->pstData, orxNULL); /* 2D data? */ if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_2D)) { /* Deletes it */ orxTexture_Delete(orxTEXTURE(_pstGraphic->pstData)); } /* Text data? */ else if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_TEXT)) { /* Deletes it */ orxText_Delete(orxTEXT(_pstGraphic->pstData)); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Non-2d (texture/text) graphics not supported yet."); /* Updates result */ eResult = orxSTATUS_FAILURE; } /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_NONE, orxGRAPHIC_KU32_FLAG_INTERNAL); } /* Cleans reference */ _pstGraphic->pstData = orxNULL; } /* Valid & sets new data? */ if((eResult != orxSTATUS_FAILURE) && (_pstData != orxNULL)) { /* Stores it */ _pstGraphic->pstData = _pstData; /* Updates structure reference counter */ orxStructure_IncreaseCounter(_pstData); /* Is data a texture? */ if(orxTEXTURE(_pstData) != orxNULL) { /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_2D, orxGRAPHIC_KU32_MASK_TYPE); } /* Is data a text? */ else if(orxTEXT(_pstData) != orxNULL) { /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_TEXT, orxGRAPHIC_KU32_MASK_TYPE); } else { /* Logs message */ orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Data given is not a texture nor a text."); /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_NONE, orxGRAPHIC_KU32_MASK_TYPE); /* Updates result */ eResult = orxSTATUS_FAILURE; } } else { /* Updates flags */ orxStructure_SetFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_NONE, orxGRAPHIC_KU32_MASK_TYPE); } /* Done! */ return eResult; }