// Home Paths
+#ifdef WIN32
+#include <shlobj.h>
+#endif
void HomePaths_Realise()
{
#if defined(POSIX)
Q_mkdir(g_qeglobals.m_userEnginePath.c_str());
}
else
+#elif defined(WIN32)
+ if(!string_empty(prefix))
+ {
+ StringOutputStream path(256);
+ TCHAR mydocsdir[MAX_PATH + 1];
+ if(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, mydocsdir))
+ {
+ path << DirectoryCleaned(mydocsdir) << "My Games/" << prefix << "/";
+ // win32: only add it if it already exists
+ if(file_is_directory(path.c_str()))
+ g_qeglobals.m_userEnginePath = path.c_str();
+ else
+ g_qeglobals.m_userEnginePath = EnginePath_get();
+ }
+ else
+ {
+ g_qeglobals.m_userEnginePath = EnginePath_get();
+ }
+ }
+ else
#endif
{
g_qeglobals.m_userEnginePath = EnginePath_get();
// Work out the delta
Vector3 mid;
Select_GetMid(mid);
- Vector3 delta = vector3_subtracted(vector3_snapped(Camera_getOrigin(camwnd), GetGridSize()), mid);
+ Vector3 delta = vector3_subtracted(vector3_snapped(Camera_getOrigin(camwnd), GetSnapGridSize()), mid);
// Move to camera
GlobalSelectionSystem().translateSelected(delta);
// open the Q3Rad manual
void OpenHelpURL()
{
- // at least on win32, AppPath + "Q3Rad_Manual/index.htm"
+ // at least on win32, AppPath + "docs/index.html"
StringOutputStream help(256);
- help << AppPath_get() << "Q3Rad_Manual/index.htm";
+ help << AppPath_get() << "docs/index.html";
OpenURL(help.c_str());
}
class CloneSelected : public scene::Graph::Walker
{
bool doMakeUnique;
+ NodeSmartReference worldspawn;
public:
- CloneSelected(bool d): doMakeUnique(d) { }
+ CloneSelected(bool d): doMakeUnique(d), worldspawn(Map_FindOrInsertWorldspawn(g_map))
+ {
+ }
bool pre(const scene::Path& path, scene::Instance& instance) const
{
if(path.size() == 1)
return true;
+ // ignore worldspawn, but keep checking children
+ NodeSmartReference me(path.top().get());
+ if(me == worldspawn)
+ return true;
+
if(!path.top().get().isRoot())
{
Selectable* selectable = Instance_getSelectable(instance);
if(path.size() == 1)
return;
+ // ignore worldspawn, but keep checking children
+ NodeSmartReference me(path.top().get());
+ if(me == worldspawn)
+ return;
+
if(!path.top().get().isRoot())
{
Selectable* selectable = Instance_getSelectable(instance);
{
StringOutputStream status(64);
const char* lock = (GridStatus_getTextureLockEnabled()) ? "ON" : "OFF";
- status << "G:" << GridStatus_getGridSize()
+ status << (GetSnapGridSize() > 0 ? "G:" : "g:") << GridStatus_getGridSize()
<< " R:" << GridStatus_getRotateIncrement()
<< " C:" << GridStatus_getFarClipDistance()
<< " L:" << lock;
}
}
-namespace
-{
- GLFont g_font(0, 0, 0, 0);
-}
-
void GlobalGL_sharedContextCreated()
{
+ GLFont *g_font = NULL;
+
// report OpenGL information
globalOutputStream() << "GL_VENDOR: " << reinterpret_cast<const char*>(glGetString (GL_VENDOR)) << "\n";
globalOutputStream() << "GL_RENDERER: " << reinterpret_cast<const char*>(glGetString (GL_RENDERER)) << "\n";
GlobalShaderCache().realise();
Textures_Realise();
- /* use default font here (Sans 10 is gtk default) */
+#ifdef WIN32
+ /* win32 is dodgy here, just use courier new then */
+ g_font = glfont_create("arial 9");
+#else
GtkSettings *settings = gtk_settings_get_default();
gchar *fontname;
g_object_get(settings, "gtk-font-name", &fontname, NULL);
g_font = glfont_create(fontname);
+#endif
- GlobalOpenGL().m_font = g_font.getDisplayList();
- GlobalOpenGL().m_fontHeight = g_font.getPixelHeight();
- GlobalOpenGL().m_fontAscent = g_font.getPixelAscent();
- GlobalOpenGL().m_fontDescent = g_font.getPixelDescent();
+ GlobalOpenGL().m_font = g_font;
}
void GlobalGL_sharedContextDestroyed()