template<typename Element>
class AllocatedMatrix : public Matrix<Element>
{
- std::size_t m_x, m_y;
- Element* m_data;
+ //std::size_t m_x, m_y;
+ //Element* m_data;
public: // public methods
/**
* @param x Matrix x dimension.
* @param y Matrix y dimension.
*/
- AllocatedMatrix(std::size_t x, std::size_t y) : m_x(x), m_y(y), m_data(_allocated = new Element[x*y]){}
-// Matrix(x, y, (_allocated = new Element[x*y])) {}
+ //AllocatedMatrix(std::size_t x, std::size_t y) : m_x(x), m_y(y), m_data(_allocated = new Element[x*y]){} //doesnt work.
+ //AllocatedMatrix(std::size_t x, std::size_t y) : Matrix(x, y, (_allocated = new Element[x*y])) {} //msvc
+ typedef Matrix<Element> matrix_type;
+ AllocatedMatrix(std::size_t x, std::size_t y) : matrix_type(x, y, (_allocated = new Element[x*y])) {}
+
/**
* Destructor. Deallocates the data array.
Element *_allocated;
};
-#endif // #if !defined(INCLUDED_ALLOCATEDMATRIX_H)
\ No newline at end of file
+#endif // #if !defined(INCLUDED_ALLOCATEDMATRIX_H)
*/
PluginUI::PluginUI()
{
+ PluginUI::singleton = this;
// Instantiate and register the Set S/T Scale dialog. We need a non-generic
// handle on this one too, because it will be used as input to the Get Info
// dialog constructor below.
{
}
+PluginUI* PluginUI::singleton = 0;
/**
* Get the singleton instance of the UI manager. Note that callers should
* almost certainly invoke the UIInstance global function instead of using
PluginUI&
PluginUI::Instance()
{
- static PluginUI singleton;
- return singleton;
+ //static PluginUI singleton;
+ //return singleton;
+ if(!singleton)
+ singleton = new PluginUI();
+ return *singleton;
}
/**
PluginUI();
~PluginUI();
//@}
+ // C++ 03
+ // ========
+ // Dont forget to declare these two. You want to make sure they
+ // are unacceptable otherwise you may accidentally get copies of
+ // your singleton appearing.
+ PluginUI(PluginUI const&); // Don't Implement
+ void operator=(PluginUI const&); // Don't implement
+
+ static PluginUI* singleton;
public: // public methods
static PluginUI& Instance();
};
-#endif // #if !defined(INCLUDED_PLUGINUI_H)
\ No newline at end of file
+#endif // #if !defined(INCLUDED_PLUGINUI_H)
Image* LoadTGA( ArchiveFile& file ){
ScopedArchiveBuffer buffer( file );
return LoadTGABuff( buffer.buffer );
-}
+}
\ No newline at end of file
QuantiseFunc Face::m_quantise;
EBrushType Face::m_type;
EBrushType FacePlane::m_type;
-bool g_brush_texturelock_enabled = true;
+bool g_brush_texturelock_enabled = false;
EBrushType Brush::m_type;
double Brush::m_maxWorldCoord = 0;
bool isModel = ( string_compare_nocase_n( name, "misc_", 5 ) == 0 && string_equal_nocase( name + string_length( name ) - 5, "model" ) ) // misc_*model (also misc_model)
|| string_equal_nocase( name, "model_static" )
- || ( GlobalSelectionSystem().countSelected() == 0 && string_equal_nocase( name, "func_static" ) );
+ || ( GlobalSelectionSystem().countSelected() == 0 && string_equal_nocase( name, "func_static" ) && g_pGameDescription->mGameType == "doom3" );
bool brushesSelected = Scene_countSelectedBrushes( GlobalSceneGraph() ) != 0;
create_menu_item_with_mnemonic( menu, "_Duplicate", "CloneSelection" );
create_menu_item_with_mnemonic( menu, "Duplicate, make uni_que", "CloneSelectionAndMakeUnique" );
create_menu_item_with_mnemonic( menu, "D_elete", "DeleteSelection" );
- menu_separator( menu );
- create_menu_item_with_mnemonic( menu, "Snap To Grid", "SnapToGrid" );
//create_menu_item_with_mnemonic( menu, "Pa_rent", "ParentSelection" );
menu_separator( menu );
create_menu_item_with_mnemonic( menu, "C_lear Selection", "UnSelectSelection" );
create_check_menu_item_with_mnemonic( menu_in_menu, "_Faces", "DragFaces" );
}
+ menu_separator( menu );
+ create_menu_item_with_mnemonic( menu, "Snap To Grid", "SnapToGrid" );
+
menu_separator( menu );
{
void Patch_registerShortcuts(){
// command_connect_accelerator( "InvertCurveTextureX" );
// command_connect_accelerator( "InvertCurveTextureY" );
- command_connect_accelerator( "PatchInsertInsertColumn" );
- command_connect_accelerator( "PatchInsertInsertRow" );
- command_connect_accelerator( "PatchDeleteLastColumn" );
- command_connect_accelerator( "PatchDeleteLastRow" );
+// command_connect_accelerator( "PatchInsertInsertColumn" );
+// command_connect_accelerator( "PatchInsertInsertRow" );
+// command_connect_accelerator( "PatchDeleteLastColumn" );
+// command_connect_accelerator( "PatchDeleteLastRow" );
// command_connect_accelerator( "NaturalizePatch" );
//command_connect_accelerator("CapCurrentCurve");
}
DoPatchThickenDlg();
}
+
+
#include "ifilter.h"
if ( g_Layout_enableDetachableMenus.m_value ) {
menu_tearoff( menu_in_menu );
}
- create_menu_item_with_mnemonic( menu_in_menu, "Insert (2) Columns", "PatchInsertInsertColumn" );
create_menu_item_with_mnemonic( menu_in_menu, "Add (2) Columns", "PatchInsertAddColumn" );
+ create_menu_item_with_mnemonic( menu_in_menu, "Insert (2) Columns", "PatchInsertInsertColumn" );
menu_separator( menu_in_menu );
- create_menu_item_with_mnemonic( menu_in_menu, "Insert (2) Rows", "PatchInsertInsertRow" );
create_menu_item_with_mnemonic( menu_in_menu, "Add (2) Rows", "PatchInsertAddRow" );
+ create_menu_item_with_mnemonic( menu_in_menu, "Insert (2) Rows", "PatchInsertInsertRow" );
}
{
auto menu_in_menu = create_sub_menu_with_mnemonic( menu, "Delete" );
void Patch_FlipTextureY();
void Patch_AutoCapTexture();
+void Patch_NaturalTexture();
+void Patch_CapTexture();
+void Patch_ResetTexture();
+void Patch_FitTexture();
+void Patch_FlipTextureX();
+void Patch_FlipTextureY();
+
class PatchCreator;
extern PatchCreator* g_patchCreator;
// Don't use uniform size
W = (int)( tex->width * ( (float)m_textureScale / 100 ) );
H = (int)( tex->height * ( (float)m_textureScale / 100 ) );
+ if ( W < 1 ) W = 1;
+ if ( H < 1 ) H = 1;
if ( g_TextureBrowser_fixedSize ){
if ( W >= H ) {
textureBrowser.getTextureWH( q, nWidth, nHeight );
if ( layout.current_x + nWidth > textureBrowser.width - 8 && layout.current_row ) { // go to the next row unless the texture is the first on the row
layout.current_x = 8;
- layout.current_y -= layout.current_row + TextureBrowser_fontHeight( textureBrowser ) + 4;
+ layout.current_y -= layout.current_row + TextureBrowser_fontHeight( textureBrowser ) + 4;//+4
layout.current_row = 0;
}
// we have found when texdef->name and the shader name match
// NOTE: as everywhere else for our comparisons, we are not case sensitive
if ( shader_equal( name, shader->getName() ) ) {
- int textureHeight = (int)( q->height * ( (float)textureBrowser.m_textureScale / 100 ) )
- + 2 * TextureBrowser_fontHeight( textureBrowser );
+ //int textureHeight = (int)( q->height * ( (float)textureBrowser.m_textureScale / 100 ) ) + 2 * TextureBrowser_fontHeight( textureBrowser );
+ int textureWidth, textureHeight;
+ textureBrowser.getTextureWH( q, textureWidth, textureHeight );
+ textureHeight += 2 * TextureBrowser_fontHeight( textureBrowser );
+
int originy = TextureBrowser_getOriginY( textureBrowser );
if ( y > originy ) {
- originy = y;
+ originy = y + 4;
}
if ( y - textureHeight < originy - textureBrowser.height ) {
// if !texture_showinuse: (some textures displayed may not be in use)
// draw an additional square around with 0.5 1 0.5 color
glLineWidth( 1 );
- // shader border:
- if ( !shader->IsDefault() ) {
- //real 1px white/black stipple
- glColor3f( 0, 0, 0 );
- glDisable( GL_TEXTURE_2D );
-
- float xf = (float)x;
- float yf = (float)( y - TextureBrowser_fontHeight( textureBrowser ) );
- glBegin( GL_LINE_LOOP );
- glVertex2f( xf - 1.5,yf + 1.5 );
- glVertex2f( xf - 1.5,yf - nHeight - 1.5 );
- glVertex2f( xf + 1.5 + nWidth,yf - nHeight - 1.5 );
- glVertex2f( xf + 1.5 + nWidth,yf + 1.5 );
-
- glEnd();
-
- glEnable( GL_LINE_STIPPLE );
- glLineStipple( 1, 0x0FFF );
-
- glBegin( GL_LINE_LOOP );
- glColor3f( 1, 1, 1 );
-
- glVertex2f( xf - 1.5,yf + 1.5 );
- glVertex2f( xf - 1.5,yf - nHeight - 1.5 );
- glVertex2f( xf + 1.5 + nWidth,yf - nHeight - 1.5 );
- glVertex2f( xf + 1.5 + nWidth,yf + 1.5 );
-
- glEnd();
- glDisable( GL_LINE_STIPPLE );
- glEnable( GL_TEXTURE_2D );
-
- }
+ const float xf = (float)x;
+ const float yf = (float)( y - TextureBrowser_fontHeight( textureBrowser ) );
+ float xfMax = xf + 1.5 + nWidth;
+ float xfMin = xf - 1.5;
+ float yfMax = yf + 1.5;
+ float yfMin = yf - nHeight - 1.5;
+
+ //selected texture
if ( shader_equal( TextureBrowser_GetSelectedShader( textureBrowser ), shader->getName() ) ) {
glLineWidth( 2 );
if ( textureBrowser.m_rmbSelected ) {
else {
glColor3f( 1,0,0 );
}
+ xfMax += .5;
+ xfMin -= .5;
+ yfMax += .5;
+ yfMin -= .5;
glDisable( GL_TEXTURE_2D );
-
glBegin( GL_LINE_LOOP );
- glVertex2i( x - 4,y - TextureBrowser_fontHeight( textureBrowser ) + 4 );
- glVertex2i( x - 4,y - TextureBrowser_fontHeight( textureBrowser ) - nHeight - 4 );
- glVertex2i( x + 4 + nWidth,y - TextureBrowser_fontHeight( textureBrowser ) - nHeight - 4 );
- glVertex2i( x + 4 + nWidth,y - TextureBrowser_fontHeight( textureBrowser ) + 4 );
+ glVertex2f( xfMin ,yfMax );
+ glVertex2f( xfMin ,yfMin );
+ glVertex2f( xfMax ,yfMin );
+ glVertex2f( xfMax ,yfMax );
glEnd();
-
glEnable( GL_TEXTURE_2D );
- glLineWidth( 1 );
}
// highlight in-use textures
else if ( !textureBrowser.m_hideUnused && shader->IsInUse() ) {
- //1px with float
- float xf = (float)x;
- float yf = (float)( y - TextureBrowser_fontHeight( textureBrowser ) );
glColor3f( 0.5,1,0.5 );
glDisable( GL_TEXTURE_2D );
glBegin( GL_LINE_LOOP );
- glVertex2f( xf - 3.5,yf + 3.5 );
- glVertex2f( xf - 3.5,yf - nHeight - 3.5 );
- glVertex2f( xf + 3.5 + nWidth,yf - nHeight - 3.5 );
- glVertex2f( xf + 3.5 + nWidth,yf + 3.5 );
+ glVertex2f( xfMin ,yfMax );
+ glVertex2f( xfMin ,yfMin );
+ glVertex2f( xfMax ,yfMin );
+ glVertex2f( xfMax ,yfMax );
+ glEnd();
+ glEnable( GL_TEXTURE_2D );
+ }
+ // shader white border:
+ else if ( !shader->IsDefault() ) {
+ glColor3f( 1, 1, 1 );
+ glDisable( GL_TEXTURE_2D );
+ glBegin( GL_LINE_LOOP );
+ glVertex2f( xfMin ,yfMax );
+ glVertex2f( xfMin ,yfMin );
+ glVertex2f( xfMax ,yfMin );
+ glVertex2f( xfMax ,yfMax );
glEnd();
+ }
+
+ // shader stipple:
+ if ( !shader->IsDefault() ) {
+ glEnable( GL_LINE_STIPPLE );
+ glLineStipple( 1, 0xF000 );
+ glBegin( GL_LINE_LOOP );
+ glColor3f( 0, 0, 0 );
+ glVertex2f( xfMin ,yfMax );
+ glVertex2f( xfMin ,yfMin );
+ glVertex2f( xfMax ,yfMin );
+ glVertex2f( xfMax ,yfMax );
+ glEnd();
+ glDisable( GL_LINE_STIPPLE );
glEnable( GL_TEXTURE_2D );
}
glDisable( GL_TEXTURE_2D );
glColor3f( 1,1,1 );
- glRasterPos2i( x, y - TextureBrowser_fontHeight( textureBrowser ) + 5 );
+ glRasterPos2i( x, y - TextureBrowser_fontHeight( textureBrowser ) + 2 );//+5
// don't draw the directory name
const char* name = shader->getName();
<item name="NetRadiant website" url="https://gitlab.com/xonotic/netradiant"/>
<item name="q3map2 handbook" url="http://q3map2.everyonelookbusy.net/shader_manual/"/>
<item name="q3map2 wikibook" url="https://en.wikibooks.org/wiki/Q3Map2"/>
+<item name="Blendmodes cheatsheet" url="docs/Blendmodes_cheatsheet.jpg"/>
</links>