]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - include/isurfaceplugin.h
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / include / isurfaceplugin.h
1 /*\r
2 Copyright (C) 1999-2007 id Software, Inc. and contributors.\r
3 For a list of contributors, see the accompanying CONTRIBUTORS file.\r
4 \r
5 This file is part of GtkRadiant.\r
6 \r
7 GtkRadiant is free software; you can redistribute it and/or modify\r
8 it under the terms of the GNU General Public License as published by\r
9 the Free Software Foundation; either version 2 of the License, or\r
10 (at your option) any later version.\r
11 \r
12 GtkRadiant is distributed in the hope that it will be useful,\r
13 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15 GNU General Public License for more details.\r
16 \r
17 You should have received a copy of the GNU General Public License\r
18 along with GtkRadiant; if not, write to the Free Software\r
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
20 */\r
21 \r
22 //-----------------------------------------------------------------------------\r
23 //\r
24 // DESCRIPTION:\r
25 // \r
26 //\r
27 \r
28 #ifndef __ISURFACEPLUGIN_H_\r
29 #define __ISURFACEPLUGIN_H_\r
30 \r
31 typedef struct _GtkWidget GtkWidget;\r
32 typedef struct _GtkWindow GtkWindow;\r
33 \r
34 #define SURFACEDIALOG_MAJOR "surfdialog"\r
35 \r
36 // there's a void* in each qtexture_t, must be casted to a IPluginTexdef*\r
37 // there's a void* in each face_t, must be casted to a IPluginTexdef*\r
38 // NOTE: IPluginTexdef stores a pointer to the qtexture_t or face_t it's stored in\r
39 // members of IPluginTexdef often access the qtexture_t or face_t they are connected to\r
40 \r
41 // Write texdef needs a function pointer, because Radiant either writes into a FILE or a CMemFile\r
42 typedef void (* PFN_QERAPP_MAPPRINTF) ( char *text, ... );\r
43 \r
44 class IPluginTexdef\r
45 {\r
46 public:\r
47         // Increment the number of references to this object\r
48         virtual void IncRef () = 0;\r
49         // Decrement the reference count\r
50         virtual void DecRef () = 0;\r
51 };\r
52 \r
53 \r
54 \r
55 // Nurail: For SI module\r
56 class texdef_to_face_t\r
57 {\r
58 public:\r
59   texdef_to_face_t* next;\r
60   brush_t *brush;   // Brush faces belong to (for Undo)\r
61   face_t *face;     // Face of Texdef\r
62   texdef_t texdef;  // Working texdef\r
63   texdef_t orig_texdef;  // Original, for baselining changes\r
64 };\r
65 \r
66 \r
67 typedef void (* PFN_QERPLUG_DOSURFACE)                  ();\r
68 typedef void (* PFN_QERPLUG_TOGGLESURFACE)      ();\r
69 typedef void (* PFN_QERPLUG_UPDATESURFACEDIALOG)        ();\r
70 typedef void (* PFN_QERPLUG_SURFACEDLGFITALL)   ();\r
71 typedef GtkWidget* (* PFN_GET_SI_MODULE_WIDGET) ();\r
72 \r
73 struct _QERPlugSurfaceTable\r
74 {\r
75         int m_nSize;\r
76         PFN_QERPLUG_TOGGLESURFACE               m_pfnToggleSurface;\r
77         PFN_QERPLUG_DOSURFACE                           m_pfnDoSurface;\r
78         PFN_QERPLUG_UPDATESURFACEDIALOG         m_pfnUpdateSurfaceDialog;\r
79         PFN_QERPLUG_SURFACEDLGFITALL            m_pfnSurfaceDlgFitAll;\r
80         PFN_GET_SI_MODULE_WIDGET                m_pfnGet_SI_Module_Widget;\r
81 };\r
82 \r
83 // this one is used by the plugin to access some Radiant stuff\r
84 \r
85 #define APPSURFACEDIALOG_MAJOR "appsurfdialog"\r
86 \r
87 // {42BAE4C0-9787-11d3-8EF3-0000E8E8657B}\r
88 static const GUID QERAppSurfaceTable_GUID = \r
89 { 0x42bae4c0, 0x9787, 0x11d3, { 0x8e, 0xf3, 0x0, 0x0, 0xe8, 0xe8, 0x65, 0x7b } };\r
90 \r
91 typedef bool (* PFN_PATCHESSELECTED)    ();\r
92 // retrieve g_qeglobals.texturewin_t\r
93 //++timo FIXME: this should move in a dedicated table for all g_qeglobals stuff\r
94 typedef texturewin_t* (* PFN_QEGLOBALSTEXTUREWIN) ();\r
95 // look for the first selected patch mesh\r
96 //++timo FIXME: this is a convenient func since there's no way to scan patches ( yet )\r
97 typedef patchMesh_t* (* PFN_GETSELECTEDPATCH) ();\r
98 //++timo FIXME: this one in particular is a hack\r
99 typedef void (* PFN_GETTWOSELECTEDPATCH) (patchMesh_t **p1, patchMesh_t **p2);\r
100 \r
101 \r
102 // leo FIXME: hacks uglier than the ones above\r
103 typedef void (* PFN_TEXMATTOFAKETEXCOORDS) (vec_t texMat[2][3], float shift[2], float *rot, float scale[2]);\r
104 typedef void (* PFN_CONVERTTEXMATWITHQTEXTURE) (brushprimit_texdef_t *texMat1, qtexture_t *qtex1, brushprimit_texdef_t *texMat2, qtexture_t *qtex2);\r
105 typedef void (* PFN_FAKETEXCOORDSTOTEXMAT) (float shift[2], float rot, float scale[2], vec_t texMat[2][3]);\r
106 typedef void (* PFN_PATCH_RESETTEXTURING) (float fx, float fy);\r
107 typedef void (* PFN_PATCH_FITTEXTURING) ();\r
108 typedef void (* PFN_PATCH_NATURALIZESELECTED) (bool bCap);\r
109 typedef const char* (* PFN_PATCH_GETTEXTURENAME) (); \r
110 typedef qboolean (* PFN_QE_SINGLEBRUSH) (bool bQuiet);\r
111 typedef qboolean (* PFN_ISBRUSHPRIMITMODE) ();\r
112 typedef void (* PFN_SELECT_FITTEXTURE)(int nHeight, int nWidth);\r
113 typedef void (*PFN_COMPUTEAXISBASE)(vec3_t normal,vec3_t texS,vec3_t texT );\r
114 typedef void (*PFN_BPMATMUL)(vec_t A[2][3], vec_t B[2][3], vec_t C[2][3]);\r
115 typedef void (*PFN_EMITBRUSHPRIMITTEXCOORDS)(face_t * f, winding_t * w);\r
116 typedef texdef_t* (*PFN_QEGLOBALSSAVEDINFO_SIINC) ();\r
117 typedef float (* PFN_QEGLOBALSGETGRIDSIZE) ();\r
118 typedef void (* PFN_FACELIST_FITTEXTURE) (texdef_to_face_t* texdef_face_list, int nHeight, int nWidth);\r
119 typedef GtkWindow* (* PFN_GETMAINWINDOW)();\r
120 typedef void (* PFN_SETWINPOS_FROM_PREFS) (GtkWidget *win);\r
121 typedef int (* PFN_GETSELECTEDFACECOUNT_BRUSH) ();\r
122 typedef void (* PFN_GETSELFACESTEXDEF) (texdef_to_face_t *);\r
123 typedef void (* PFN_SETTEXDEF_FACELIST) (texdef_to_face_t* texdef_face_list, bool b_SetUndoPoint, bool bFit_to_Scale);\r
124 typedef void (* PFN_SETACTIVEINRADIANT) ();\r
125 \r
126 \r
127 struct _QERAppSurfaceTable\r
128 {\r
129   int m_nSize;\r
130   PFN_PATCHESSELECTED           m_pfnOnlyPatchesSelected;\r
131   PFN_PATCHESSELECTED           m_pfnAnyPatchesSelected;\r
132   PFN_GETSELECTEDPATCH          m_pfnGetSelectedPatch;\r
133   PFN_GETTWOSELECTEDPATCH               m_pfnGetTwoSelectedPatch;\r
134   PFN_TEXMATTOFAKETEXCOORDS     m_pfnTexMatToFakeTexCoords;\r
135   PFN_CONVERTTEXMATWITHQTEXTURE m_pfnConvertTexMatWithQTexture;\r
136   PFN_FAKETEXCOORDSTOTEXMAT     m_pfnFakeTexCoordsToTexMat;\r
137   PFN_PATCH_RESETTEXTURING      m_pfnPatch_ResetTexturing;\r
138   PFN_PATCH_FITTEXTURING                m_pfnPatch_FitTexturing;\r
139   PFN_PATCH_NATURALIZESELECTED  m_pfnPatch_NaturalizeSelected;\r
140   PFN_PATCH_GETTEXTURENAME      m_pfnPatch_GetTextureName;\r
141   PFN_QE_SINGLEBRUSH            m_pfnQE_SingleBrush;\r
142   PFN_ISBRUSHPRIMITMODE         m_pfnIsBrushPrimitMode;\r
143   PFN_COMPUTEAXISBASE           m_pfnComputeAxisBase;\r
144   PFN_BPMATMUL                  m_pfnBPMatMul;\r
145   PFN_EMITBRUSHPRIMITTEXCOORDS  m_pfnEmitBrushPrimitTextureCoordinates;\r
146   PFN_QEGLOBALSTEXTUREWIN               m_pfnQeglobalsTexturewin;\r
147   PFN_SELECT_FITTEXTURE         m_pfnSelect_FitTexture;\r
148   PFN_QEGLOBALSSAVEDINFO_SIINC          m_pfnQERApp_QeglobalsSavedinfo_SIInc;\r
149   PFN_QEGLOBALSGETGRIDSIZE      m_pfnQeglobalsGetGridSize;\r
150   PFN_FACELIST_FITTEXTURE               m_pfnFaceList_FitTexture;\r
151   PFN_GETMAINWINDOW             m_pfnGetMainWindow;\r
152   PFN_SETWINPOS_FROM_PREFS      m_pfnSetWinPos_From_Prefs;\r
153   PFN_GETSELECTEDFACECOUNT_BRUSH  m_pfnGetSelectedFaceCountfromBrushes;\r
154   PFN_GETSELFACESTEXDEF         m_pfnGetSelFacesTexdef;\r
155   PFN_SETTEXDEF_FACELIST                m_pfnSetTexdef_FaceList;\r
156 };\r
157 \r
158 #endif\r