/* Copyright (C) 1999-2007 id Software, Inc. and contributors. For a list of contributors, see the accompanying CONTRIBUTORS file. This file is part of GtkRadiant. GtkRadiant is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GtkRadiant is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //----------------------------------------------------------------------------- // // DESCRIPTION: // // #ifndef __ISURFACEPLUGIN_H_ #define __ISURFACEPLUGIN_H_ typedef struct _GtkWidget GtkWidget; typedef struct _GtkWindow GtkWindow; #define SURFACEDIALOG_MAJOR "surfdialog" // there's a void* in each qtexture_t, must be casted to a IPluginTexdef* // there's a void* in each face_t, must be casted to a IPluginTexdef* // NOTE: IPluginTexdef stores a pointer to the qtexture_t or face_t it's stored in // members of IPluginTexdef often access the qtexture_t or face_t they are connected to // Write texdef needs a function pointer, because Radiant either writes into a FILE or a CMemFile typedef void ( *PFN_QERAPP_MAPPRINTF )( char *text, ... ); class IPluginTexdef { public: virtual ~IPluginTexdef() { } // Increment the number of references to this object virtual void IncRef() = 0; // Decrement the reference count virtual void DecRef() = 0; }; // Nurail: For SI module class texdef_to_face_t { public: texdef_to_face_t* next; brush_t *brush; // Brush faces belong to (for Undo) face_t *face; // Face of Texdef texdef_t texdef; // Working texdef texdef_t orig_texdef; // Original, for baselining changes brushprimit_texdef_t orig_bp_texdef; // Original, for undo }; typedef void ( *PFN_QERPLUG_DOSURFACE )(); typedef void ( *PFN_QERPLUG_TOGGLESURFACE )(); typedef void ( *PFN_QERPLUG_UPDATESURFACEDIALOG )(); typedef void ( *PFN_QERPLUG_SURFACEDLGFITALL )(); typedef GtkWidget* ( *PFN_GET_SI_MODULE_WIDGET )(); struct _QERPlugSurfaceTable { int m_nSize; PFN_QERPLUG_TOGGLESURFACE m_pfnToggleSurface; PFN_QERPLUG_DOSURFACE m_pfnDoSurface; PFN_QERPLUG_UPDATESURFACEDIALOG m_pfnUpdateSurfaceDialog; PFN_QERPLUG_SURFACEDLGFITALL m_pfnSurfaceDlgFitAll; PFN_GET_SI_MODULE_WIDGET m_pfnGet_SI_Module_Widget; }; // this one is used by the plugin to access some Radiant stuff #define APPSURFACEDIALOG_MAJOR "appsurfdialog" // {42BAE4C0-9787-11d3-8EF3-0000E8E8657B} static const GUID QERAppSurfaceTable_GUID = { 0x42bae4c0, 0x9787, 0x11d3, { 0x8e, 0xf3, 0x0, 0x0, 0xe8, 0xe8, 0x65, 0x7b } }; typedef bool ( *PFN_PATCHESSELECTED )(); // retrieve g_qeglobals.texturewin_t //++timo FIXME: this should move in a dedicated table for all g_qeglobals stuff typedef texturewin_t* ( *PFN_QEGLOBALSTEXTUREWIN )(); // look for the first selected patch mesh //++timo FIXME: this is a convenient func since there's no way to scan patches ( yet ) typedef patchMesh_t* ( *PFN_GETSELECTEDPATCH )(); //++timo FIXME: this one in particular is a hack typedef void ( *PFN_GETTWOSELECTEDPATCH )( patchMesh_t **p1, patchMesh_t **p2 ); // leo FIXME: hacks uglier than the ones above typedef void ( *PFN_TEXMATTOFAKETEXCOORDS )( vec_t texMat[2][3], float shift[2], float *rot, float scale[2] ); typedef void ( *PFN_CONVERTTEXMATWITHQTEXTURE )( brushprimit_texdef_t *texMat1, qtexture_t *qtex1, brushprimit_texdef_t *texMat2, qtexture_t *qtex2 ); typedef void ( *PFN_FAKETEXCOORDSTOTEXMAT )( float shift[2], float rot, float scale[2], vec_t texMat[2][3] ); typedef void ( *PFN_PATCH_RESETTEXTURING )( float fx, float fy ); typedef void ( *PFN_PATCH_FITTEXTURING )(); typedef void ( *PFN_PATCH_NATURALIZESELECTED )( bool bCap ); typedef const char* ( *PFN_PATCH_GETTEXTURENAME )(); typedef qboolean ( *PFN_QE_SINGLEBRUSH )( bool bQuiet ); typedef qboolean ( *PFN_ISBRUSHPRIMITMODE )(); typedef void ( *PFN_SELECT_FITTEXTURE )( int nHeight, int nWidth ); typedef void ( *PFN_COMPUTEAXISBASE )( vec3_t normal,vec3_t texS,vec3_t texT ); typedef void ( *PFN_BPMATMUL )( vec_t A[2][3], vec_t B[2][3], vec_t C[2][3] ); typedef void ( *PFN_EMITBRUSHPRIMITTEXCOORDS )( face_t * f, winding_t * w ); typedef texdef_t* ( *PFN_QEGLOBALSSAVEDINFO_SIINC )(); typedef float ( *PFN_QEGLOBALSGETGRIDSIZE )(); typedef void ( *PFN_FACELIST_FITTEXTURE )( texdef_to_face_t* texdef_face_list, int nHeight, int nWidth ); typedef GtkWindow* ( *PFN_GETMAINWINDOW )(); typedef void ( *PFN_SETWINPOS_FROM_PREFS )( GtkWidget *win ); typedef int ( *PFN_GETSELECTEDFACECOUNT_BRUSH )(); typedef void ( *PFN_GETSELFACESTEXDEF )( texdef_to_face_t * ); typedef void ( *PFN_SETTEXDEF_FACELIST )( texdef_to_face_t* texdef_face_list, bool b_SetUndoPoint, bool bFit_to_Scale ); typedef void ( *PFN_SETACTIVEINRADIANT )(); struct _QERAppSurfaceTable { int m_nSize; PFN_PATCHESSELECTED m_pfnOnlyPatchesSelected; PFN_PATCHESSELECTED m_pfnAnyPatchesSelected; PFN_GETSELECTEDPATCH m_pfnGetSelectedPatch; PFN_GETTWOSELECTEDPATCH m_pfnGetTwoSelectedPatch; PFN_TEXMATTOFAKETEXCOORDS m_pfnTexMatToFakeTexCoords; PFN_CONVERTTEXMATWITHQTEXTURE m_pfnConvertTexMatWithQTexture; PFN_FAKETEXCOORDSTOTEXMAT m_pfnFakeTexCoordsToTexMat; PFN_PATCH_RESETTEXTURING m_pfnPatch_ResetTexturing; PFN_PATCH_FITTEXTURING m_pfnPatch_FitTexturing; PFN_PATCH_NATURALIZESELECTED m_pfnPatch_NaturalizeSelected; PFN_PATCH_GETTEXTURENAME m_pfnPatch_GetTextureName; PFN_QE_SINGLEBRUSH m_pfnQE_SingleBrush; PFN_ISBRUSHPRIMITMODE m_pfnIsBrushPrimitMode; PFN_COMPUTEAXISBASE m_pfnComputeAxisBase; PFN_BPMATMUL m_pfnBPMatMul; PFN_EMITBRUSHPRIMITTEXCOORDS m_pfnEmitBrushPrimitTextureCoordinates; PFN_QEGLOBALSTEXTUREWIN m_pfnQeglobalsTexturewin; PFN_SELECT_FITTEXTURE m_pfnSelect_FitTexture; PFN_QEGLOBALSSAVEDINFO_SIINC m_pfnQERApp_QeglobalsSavedinfo_SIInc; PFN_QEGLOBALSGETGRIDSIZE m_pfnQeglobalsGetGridSize; PFN_FACELIST_FITTEXTURE m_pfnFaceList_FitTexture; PFN_GETMAINWINDOW m_pfnGetMainWindow; PFN_SETWINPOS_FROM_PREFS m_pfnSetWinPos_From_Prefs; PFN_GETSELECTEDFACECOUNT_BRUSH m_pfnGetSelectedFaceCountfromBrushes; PFN_GETSELFACESTEXDEF m_pfnGetSelFacesTexdef; PFN_SETTEXDEF_FACELIST m_pfnSetTexdef_FaceList; }; #endif