Merging r5975 through r6036 from trunk to ogl-es branch.

GLES drivers adapted, but only did make compile-tests.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6038 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien
2020-01-03 19:05:16 +00:00
commit 2ae2a551a6
2007 changed files with 635880 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="FileToHeader" />
<Option pch_mode="0" />
<Option compiler="gcc" />
<Build>
<Target title="Linux">
<Option platforms="Unix;" />
<Option output="..\..\bin\Linux\FileToHeader" prefix_auto="0" extension_auto="0" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
<Add option="-D_IRR_STATIC_LIB_" />
</Compiler>
<Linker>
<Add directory="..\..\lib\Linux" />
</Linker>
</Target>
<Target title="Windows">
<Option platforms="Windows;" />
<Option output="..\..\bin\Win32-gcc\FileToHeader" prefix_auto="0" extension_auto="1" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
<Linker>
<Add directory="..\..\lib\Win32-gcc" />
</Linker>
</Target>
</Build>
<VirtualTargets>
<Add alias="All" targets="Windows;Linux;" />
</VirtualTargets>
<Compiler>
<Add option="-g" />
</Compiler>
<Unit filename="main.cpp" />
<Extensions>
<code_completion />
<debugger />
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>

View File

@ -0,0 +1,35 @@
# Makefile for FileToHeader
Target = FileToHeader
Sources = main.cpp
# general compiler settings
CPPFLAGS = -I../../include
CXXFLAGS = -O3 -ffast-math -Wall
#CXXFLAGS = -g -Wall
#default target is Linux
all: all_linux
ifeq ($(HOSTTYPE), x86_64)
LIBSELECT=64
endif
# target specific settings
all_linux clean_linux: SYSTEM=Linux
all_win32: LDFLAGS = -L../../lib/Win32-gcc
all_win32 clean_win32: SYSTEM=Win32-gcc
all_win32 clean_win32: SUF=.exe
# name of the binary - only valid for targets which set SYSTEM
DESTPATH = ../../bin/$(SYSTEM)/$(Target)$(SUF)
all_linux all_win32:
$(warning Building...)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS)
clean: clean_linux clean_win32
$(warning Cleaning...)
clean_linux clean_win32:
@$(RM) $(DESTPATH)
.PHONY: all all_win32 clean clean_linux clean_win32

175
tools/FileToHeader/main.cpp Normal file
View File

@ -0,0 +1,175 @@
// Copyright (C) 2012 Gaz Davidson
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
/***
This tool creates a .h file from a given input file by encoding it into a C string,
allowing you to build your resources directly into your binaries, just like Irrlicht's
built-in font.
To distribute your app as a single executable file of minimal size:
1. Put all your resources into a single directory and add it to Irrlicht's filesystem
as a folder through IFileSystem::addArchive. Develop and test your app as usual.
2. Open IrrCompileConfig.h and comment out all the options that your app does not use.
This will reduce the size of the Irrlicht library considerably.
* You should remove the D3D video drivers, because they rely on external DLLs.
* You should keep either the TAR or ZIP archive loader, used in step 6.
* If you remove the JPEG loader, you don't have to say you use JPEG code in your
documentation.
3. Recompile Irrlicht as a static library, editing the IRR_STATIC_LIB line in
IrrCompileConfig.h.
The next time you compile your application it will take a while longer, but
Irrlicht will be built into your binary.
4. TAR or ZIP your resource directory using your favourite archiving tool (ie 7zip).
* If you chose ZIP but compiled without zlib, don't compress this archive or it
won't open.
5. Run this tool to convert your resource file into a .h file, like so:
FileToHeader res.zip > EmbeddedResources.h
6. Add the .h file to your project, create the embedded read file then mount as a
ZIP or TAR archive instead of the folder, like so:
io::IReadFile *f = io::createEmbeddedFile(device->getFileSystem(), "res.zip");
device->getFileSystem()->addFileArchive(f);
archive->drop();
7. Recompile your app.
* If you use Microsoft's compiler, make sure your CRT (common run-time) is
the static library version, otherwise you'll have a dependency on the CRT DLLs.
Your binary should now be completely portable; you can distribute just the exe file.
8. Optional: Use UPX (upx.sf.net) to compress your binary.
*/
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main(int argc, char* argv[])
{
if (argc < 2)
{
// print usage
cerr << "You must to specify at least one input file" << endl;
cerr << "usage: " << argv[0] << "<file1> [file2...]" << endl;
cerr << "outputs a header file to stdout, so for example use";
return 1;
}
int i = 1;
// write file header
cout << "// File made by FileToHeader, part of the Irrlicht Engine" << endl
<< endl
<< "#ifndef _EMBEDDED_FILES_H_INCLUDED_" << endl
<< "#define _EMBEDDED_FILES_H_INCLUDED_" << endl
<< endl
<< "#include \"irrTypes.h\"" << endl
<< "#include \"IReadFile.h\"" << endl
<< "#include \"IFileSystem.h\"" << endl
<< endl
<< "namespace irr" << endl
<< "{" << endl
<< "namespace io" << endl
<< "{" << endl
<< endl
<< " const c8* EmbeddedFileData[] = " << endl
<< " {" << endl;
// store sizes and file names
stringstream sizes;
stringstream names;
sizes << "const u32 EmbeddedFileSizes[] = {";
names << "const c8* EmbeddedFileNames[] = {";
int fileCount = 0;
// char to hex digit table, probably doesn't help for speed due to fstream. better than using sprintf though
char hextable[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
while (i < argc)
{
// open and seek to end of file
ifstream input;
input.open(argv[i], ios::in | ios::binary | ios::ate);
if (input.is_open())
{
int size = input.tellg();
input.seekg(0, ios::beg);
// read the file into RAM
char *entireFile = new char[size];
input.read(entireFile, size);
if (fileCount)
{
sizes << ", ";
names << ", ";
cout << "," << endl;
}
// save file size and name
sizes << size;
names << '"' << argv[i] << '"';
// write the file data
cout << " \"";
for (int count=0; count < size; ++count)
{
if (count && (count % 16) == 0)
cout << "\"" << endl << " \"";
cout << "\\x" << hextable[(entireFile[count] >> 4) & 0xF] << hextable[entireFile[count] & 0x0F];
}
cout << "\"";
delete [] entireFile;
//
input.close();
fileCount++;
}
else
{
cerr << "Failed to open file: " << argv[i] << endl;
}
++i;
}
// close binary file list and write file metadata
cout << endl
<< " , 0};" << endl
<< endl
<< " const u32 EmbeddedFileCount = " << fileCount << ";" << endl
<< " " << sizes.str() << "};" << endl
<< " " << names.str() << "};" << endl
<< endl;
// write functions to create embedded IReadFiles
cout << " IReadFile* createEmbeddedFile(IFileSystem *fs, u32 index)" << endl
<< " {" << endl
<< " if (EmbeddedFileCount < index)" << endl
<< " return 0;" << endl
<< endl
<< " return fs->createMemoryReadFile((void*)EmbeddedFileData[index], " << endl
<< " EmbeddedFileSizes[index], EmbeddedFileNames[index]);" << endl
<< " }" << endl
<< endl
<< " IReadFile* createEmbeddedFile(IFileSystem *fs, path filename)" << endl
<< " {" << endl
<< " for (u32 i=0; i < EmbeddedFileCount; ++i)" << endl
<< " if (filename == EmbeddedFileNames[i])" << endl
<< " return createEmbeddedFile(fs, i);" << endl
<< endl
<< " return 0;" << endl
<< " }" << endl
<< endl;
// write footer
cout << "} // namespace io" << endl
<< "} // namespace irr" << endl
<< endl
<< "#endif // _EMBEDDED_FILES_H_INCLUDED_" << endl;
return 0;
}

View File

@ -0,0 +1,169 @@
/*
This base class is used by the Attribute editor for making your own attribute types.
The attribute editor will try and create an attribute called "AttribType_attribute",
and if it fails, it will create a "string_attribute".
*/
#ifndef __C_GUI_ATTRIBUTE_H_INCLUDED__
#define __C_GUI_ATTRIBUTE_H_INCLUDED__
#include "IGUIElement.h"
#include "IGUIEnvironment.h"
#include "IGUIFont.h"
#include "IGUIStaticText.h"
#include "IAttributes.h"
#include "CGUIEditWorkspace.h"
namespace irr
{
namespace gui
{
const u32 ATTRIBEDIT_ATTRIB_CHANGED=MAKE_IRR_ID('A','T','T','R');
class CGUIAttribute : public IGUIElement
{
public:
//! constructor
CGUIAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) :
IGUIElement(EGUIET_ELEMENT, environment, parent, -1, core::rect<s32>(0, 0, 100, 100) ),
AttribName(0), Attribs(0), Index(0), MyParentID(myParentID)
{
#ifdef _DEBUG
setDebugName("CGUIAttribute");
#endif
AttribName = environment->addStaticText(0,
core::rect<s32>(0, 0,
100, Environment->getSkin()->getFont()->getDimension(L"A").Height),
false, false, this, -1, false);
AttribName->grab();
AttribName->setSubElement(true);
AttribName->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
}
virtual ~CGUIAttribute()
{
if (Attribs)
Attribs->drop();
if (AttribName)
AttribName->drop();
}
virtual bool OnEvent(const SEvent &e)
{
if (IsEnabled)
{
switch (e.EventType)
{
case EET_GUI_EVENT:
switch (e.GUIEvent.EventType)
{
case EGET_ELEMENT_FOCUSED:
if (Parent && isMyChild(e.GUIEvent.Caller))
Parent->bringToFront(this);
break;
case EGET_ELEMENT_HOVERED:
case EGET_ELEMENT_LEFT:
return IGUIElement::OnEvent(e);
case EGET_ELEMENT_FOCUS_LOST:
updateAttrib();
return IGUIElement::OnEvent(e);
default:
return updateAttrib();
}
break;
case EET_KEY_INPUT_EVENT:
return true;
default:
break;
}
}
return IGUIElement::OnEvent(e);
}
//! sets the attribute to use
virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex)
{
if (Attribs)
Attribs->drop();
Attribs = attribs;
if (Attribs)
Attribs->grab();
Index = attribIndex;
core::stringw name(attribs->getAttributeName(attribIndex));
name += L" (";
name += attribs->getAttributeTypeString(attribIndex);
name += L")";
AttribName->setText(name.c_str());
core::rect<s32> r = Parent->getAbsolutePosition();
core::rect<s32> r2(0, 5,
r.getWidth(), Environment->getSkin()->getFont()->getDimension(L"A").Height + 10 );
AttribName->setRelativePosition(r2);
// get minimum height
s32 y=0;
core::list<IGUIElement*>::Iterator it = Children.begin();
for (; it != Children.end(); ++it)
{
if (y < (*it)->getRelativePosition().LowerRightCorner.Y)
y = (*it)->getRelativePosition().LowerRightCorner.Y;
}
setMinSize( core::dimension2du(0, y+5));
updateAttrib(false);
}
//! sets the parent ID, for identifying where events came from
void setParentID(s32 parentID)
{
MyParentID = parentID;
}
//! save the attribute and possibly post the event to its parent
virtual bool updateAttrib(bool sendEvent=true)
{
if (Attribs && IsEnabled && sendEvent)
{
// build event and pass to parent
SEvent event;
event.EventType = (EEVENT_TYPE)ATTRIBEDIT_ATTRIB_CHANGED;
event.UserEvent.UserData1 = MyParentID;
event.UserEvent.UserData2 = Index;
return Parent->OnEvent(event);
}
return true;
}
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0)
{
IGUIElement::serializeAttributes(out, options);
}
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)
{
IGUIElement::deserializeAttributes(in, options);
if (AttribName)
AttribName->setText(Text.c_str());
}
protected:
IGUIStaticText* AttribName;
io::IAttributes* Attribs;
u32 Index;
s32 MyParentID;
};
} // namespace gui
} // namespace irr
#endif

View File

@ -0,0 +1,120 @@
#include "CGUIAttributeEditor.h"
#include "IGUIEnvironment.h"
#include "IFileSystem.h"
#include "IVideoDriver.h"
#include "IAttributes.h"
#include "IGUIFont.h"
#include "IGUIScrollBar.h"
#include "CGUIEditWorkspace.h"
#include "CGUIAttribute.h"
#include "CGUIStringAttribute.h"
namespace irr
{
namespace gui
{
using namespace core;
using namespace io;
CGUIAttributeEditor::CGUIAttributeEditor(IGUIEnvironment* environment, s32 id, IGUIElement *parent) :
CGUIPanel(environment, parent, id, rect<s32>(0, 0, 100, 100)),
Attribs(0), Panel(0)
{
#ifdef _DEBUG
setDebugName("CGUIAttributeEditor");
#endif
// create attributes
Attribs = environment->getFileSystem()->createEmptyAttributes(Environment->getVideoDriver());
calculateClientArea();
resizeInnerPane();
// refresh attrib list
refreshAttribs();
IGUIScrollBar* sb = getVScrollBar();
core::rect<s32> r = sb->getRelativePosition();
r.LowerRightCorner.Y -= 16;
sb->setRelativePosition(r);
}
CGUIAttributeEditor::~CGUIAttributeEditor()
{
for (u32 i=0; i<AttribList.size(); ++i)
{
AttribList[i]->remove();
AttribList[i]->drop();
}
AttribList.clear();
Attribs->drop();
}
IAttributes* CGUIAttributeEditor::getAttribs()
{
return Attribs;
}
void CGUIAttributeEditor::refreshAttribs()
{
// clear the attribute list
u32 i;
for (i=0; i<AttribList.size(); ++i)
{
AttribList[i]->remove();
AttribList[i]->drop();
}
AttribList.clear();
position2di top(10, 5);
rect<s32> r(top.X, top.Y,
getClientArea().getWidth() - 10,
5 + Environment->getSkin()->getFont()->getDimension(L"A").Height);
// add attribute elements
u32 c = Attribs->getAttributeCount();
for (i=0; i<c; ++i)
{
// try to create attribute
stringc str = Attribs->getAttributeTypeString(i);
str += "_attribute";
CGUIAttribute* n = (CGUIAttribute*)Environment->addGUIElement(str.c_str(), 0);
// if this doesn't exist, use a string editor
if (!n)
n = (CGUIAttribute*)Environment->addGUIElement("string_attribute", 0);
if (n)
{
AttribList.push_back(n);
n->setParentID(getID());
n->grab();
}
// We can't set "this" as parent above as we need functionality
// of the overloaded addChild which isn't called in the constructor.
// (that's a general Irrlicht messup with too fat constructors)
addChild(n);
AttribList[i]->setSubElement(true);
AttribList[i]->setRelativePosition(r);
AttribList[i]->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
AttribList[i]->setAttrib(Attribs, i);
r += position2di(0, AttribList[i]->getRelativePosition().getHeight() + 5);
}
}
void CGUIAttributeEditor::updateAttribs()
{
for (u32 i=0; i<AttribList.size(); ++i)
AttribList[i]->updateAttrib(false);
}
} // namespace gui
} // namespace irr

View File

@ -0,0 +1,54 @@
#ifndef __C_GUI_ATTRIBUTE_EDITOR_H_INCLUDED__
#define __C_GUI_ATTRIBUTE_EDITOR_H_INCLUDED__
#include "IGUIElement.h"
#include "CGUIPanel.h"
#include "irrArray.h"
#include "IAttributes.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
class CGUIAttribute;
class CGUIAttributeEditor : public CGUIPanel
{
public:
//! constructor
CGUIAttributeEditor(IGUIEnvironment* environment, s32 id, IGUIElement *parent=0);
//! destructor
~CGUIAttributeEditor();
// gets the current attributes list
virtual io::IAttributes* getAttribs();
// update the attribute list after making a change
void refreshAttribs();
// save the attributes
void updateAttribs();
//! Returns the type name of the gui element.
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_ATTRIBUTEEDITOR];
}
private:
core::array<CGUIAttribute*> AttribList; // attributes editing controls
io::IAttributes* Attribs; // current attributes
CGUIPanel* Panel;
};
} // end namespace gui
} // end namespace irr
#endif // __C_GUI_ATTRIBUTE_EDITOR_H_INCLUDED__

View File

@ -0,0 +1,68 @@
#ifndef __C_GUI_BOOL_ATTRIBUTE_H_INCLUDED__
#define __C_GUI_BOOL_ATTRIBUTE_H_INCLUDED__
#include "CGUIAttribute.h"
#include "IGUICheckBox.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
class CGUIBoolAttribute : public CGUIAttribute
{
public:
//
CGUIBoolAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) :
CGUIAttribute(environment, parent, myParentID), AttribCheckBox(0)
{
core::rect<s32> r = getAbsolutePosition();
core::rect<s32> r2(0, Environment->getSkin()->getFont()->getDimension(L"A").Height + 10,
r.getWidth() - 5,
Environment->getSkin()->getFont()->getDimension(L"A").Height*2 + 15 );
AttribCheckBox = environment->addCheckBox(false, r2, this);
AttribCheckBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
AttribCheckBox->setSubElement(true);
AttribCheckBox->grab();
}
virtual ~CGUIBoolAttribute()
{
if (AttribCheckBox)
AttribCheckBox->drop();
}
virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex)
{
AttribCheckBox->setChecked(attribs->getAttributeAsBool(attribIndex));
CGUIAttribute::setAttrib(attribs, attribIndex);
}
// save the attribute and possibly post the event to its parent
virtual bool updateAttrib(bool sendEvent=true)
{
if (!Attribs)
return true;
Attribs->setAttribute(Index, AttribCheckBox->isChecked());
return CGUIAttribute::updateAttrib(sendEvent);
}
//! Returns the type name of the gui element.
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_BOOLATTRIBUTE];
}
private:
IGUICheckBox* AttribCheckBox;
};
} // namespace gui
} // namespace irr
#endif

View File

@ -0,0 +1,179 @@
#ifndef __C_GUI_COLOR_ATTRIBUTE_H_INCLUDED__
#define __C_GUI_COLOR_ATTRIBUTE_H_INCLUDED__
#include "CGUIAttribute.h"
#include "IGUIStaticText.h"
#include "IGUIScrollBar.h"
#include "IGUITabControl.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
class CGUIColorAttribute : public CGUIAttribute
{
public:
//
CGUIColorAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) :
CGUIAttribute(environment, parent, myParentID),
AttribSliderA(0), AttribSliderR(0), AttribSliderG(0), AttribSliderB(0),
AttribEditBox(0), AttribColor(0)
{
s32 fh = Environment->getSkin()->getFont()->getDimension(L"A").Height;
core::rect<s32> r0(getAbsolutePosition()),
r2(0, fh + 5, r0.getWidth() - 5, fh*2 + 10 ),
r3(r2),
r4(r2.getWidth() - 20, 3, r2.getWidth() - 3, r2.getHeight()-3);
AttribColor = Environment->addTab(r4, this, 0);
AttribColor->grab();
AttribColor->setDrawBackground(true);
AttribColor->setSubElement(true);
AttribColor->setAlignment(EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
s32 h=2;
r2 += core::position2di(0, h*4 + Environment->getSkin()->getSize(EGDS_WINDOW_BUTTON_WIDTH)*2);
r3.LowerRightCorner.Y = r3.UpperLeftCorner.Y + Environment->getSkin()->getSize(EGDS_WINDOW_BUTTON_WIDTH)/2;
AttribSliderA = environment->addScrollBar(true, r3, this, -1);
AttribSliderA->setMax(255);
AttribSliderA->grab();
AttribSliderA->setSubElement(true);
AttribSliderA->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
r3 += core::position2di(0, r3.getHeight()+h);
AttribSliderR = environment->addScrollBar(true, r3, this, -1);
AttribSliderR->setMax(255);
AttribSliderR->grab();
AttribSliderR->setSubElement(true);
AttribSliderR->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
r3 += core::position2di(0, r3.getHeight()+h);
AttribSliderG = environment->addScrollBar(true, r3, this, -1);
AttribSliderG->setMax(255);
AttribSliderG->grab();
AttribSliderG->setSubElement(true);
AttribSliderG->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
r3 += core::position2di(0, r3.getHeight()+h);
AttribSliderB = environment->addScrollBar(true, r3, this, -1);
AttribSliderB->setMax(255);
AttribSliderB->grab();
AttribSliderB->setSubElement(true);
AttribSliderB->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
// add editbox
AttribEditBox = environment->addEditBox(
L"",
r2,
true, this, -1);
AttribEditBox->grab();
AttribEditBox->setSubElement(true);
AttribEditBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
}
virtual ~CGUIColorAttribute()
{
if (AttribSliderA)
AttribSliderA->drop();
if (AttribSliderR)
AttribSliderR->drop();
if (AttribSliderG)
AttribSliderG->drop();
if (AttribSliderB)
AttribSliderB->drop();
if (AttribEditBox)
AttribEditBox->drop();
if (AttribColor)
AttribColor->drop();
}
virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex)
{
video::SColor col = attribs->getAttributeAsColor(attribIndex);
AttribSliderA->setPos(col.getAlpha());
AttribSliderR->setPos(col.getRed());
AttribSliderG->setPos(col.getGreen());
AttribSliderB->setPos(col.getBlue());
AttribEditBox->setText( attribs->getAttributeAsStringW(attribIndex).c_str() );
AttribColor->setBackgroundColor(col);
CGUIAttribute::setAttrib(attribs, attribIndex);
}
virtual bool OnEvent(const SEvent &e)
{
switch (e.EventType)
{
case EET_GUI_EVENT:
switch (e.GUIEvent.EventType)
{
case EGET_EDITBOX_ENTER:
case EGET_ELEMENT_FOCUS_LOST:
if (e.GUIEvent.Caller == AttribEditBox)
{
// update scrollbars from textbox
Attribs->setAttribute(Index, AttribEditBox->getText());
video::SColor col = Attribs->getAttributeAsColor(Index);
AttribSliderA->setPos(col.getAlpha());
AttribSliderR->setPos(col.getRed());
AttribSliderG->setPos(col.getGreen());
AttribSliderB->setPos(col.getBlue());
// update colour
AttribColor->setBackgroundColor(col);
}
break;
case EGET_SCROLL_BAR_CHANGED:
{
// update editbox from scrollbars
video::SColor col( AttribSliderA->getPos(), AttribSliderR->getPos(),
AttribSliderG->getPos(), AttribSliderB->getPos());
Attribs->setAttribute(Index, col);
AttribEditBox->setText( Attribs->getAttributeAsStringW(Index).c_str());
// update colour
AttribColor->setBackgroundColor(col);
}
return updateAttrib();
default:
break;
}
break;
default:
break;
}
return CGUIAttribute::OnEvent(e);
}
// save the attribute and possibly post the event to its parent
virtual bool updateAttrib(bool sendEvent=true)
{
if (!Attribs)
return true;
Attribs->setAttribute(Index, AttribEditBox->getText());
AttribEditBox->setText(Attribs->getAttributeAsStringW(Index).c_str());
return CGUIAttribute::updateAttrib(sendEvent);
}
//! Returns the type name of the gui element.
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_COLORATTRIBUTE];
}
private:
IGUIScrollBar* AttribSliderA;
IGUIScrollBar* AttribSliderR;
IGUIScrollBar* AttribSliderG;
IGUIScrollBar* AttribSliderB;
IGUIEditBox* AttribEditBox;
IGUITab* AttribColor;
};
} // namespace gui
} // namespace irr
#endif

View File

@ -0,0 +1,59 @@
/*
This is a custom editor for stubbing problematic elements out,
for example elements which include modal screens
*/
#ifndef __C_GUI_DUMMY_EDITOR_STUB_H_INCLUDED__
#define __C_GUI_DUMMY_EDITOR_STUB_H_INCLUDED__
#include "IGUIElement.h"
#include "IGUIEnvironment.h"
#include "IGUIStaticText.h"
namespace irr
{
namespace gui
{
class CGUIDummyEditorStub : public IGUIElement
{
public:
//! constructor
CGUIDummyEditorStub(IGUIEnvironment* environment, IGUIElement *parent, const char *text) :
IGUIElement(EGUIET_ELEMENT, environment, parent, -1, core::rect<s32>(0, 0, 100, 100) ),
TextBox(0), TypeName(text)
{
#ifdef _DEBUG
setDebugName("CGUIDummyEditorStub");
#endif
core::dimension2du d = Environment->getSkin()->getFont()->getDimension(L"A");
s32 h = d.Height / 2;
s32 w = d.Width / 2;
TextBox = environment->addStaticText(core::stringw(text).c_str(),
core::rect<s32>(50-w, 50-h, 50+w, 50+h),
false, false, this, -1, false);
TextBox->grab();
TextBox->setSubElement(true);
TextBox->setAlignment(EGUIA_CENTER, EGUIA_CENTER, EGUIA_CENTER, EGUIA_CENTER);
}
virtual ~CGUIDummyEditorStub()
{
if (TextBox)
TextBox->drop();
}
virtual const c8* getTypeName() const { return TypeName.c_str(); }
protected:
IGUIStaticText* TextBox;
core::stringc TypeName;
};
} // namespace gui
} // namespace irr
#endif

View File

@ -0,0 +1,120 @@
#include "CGUIEditFactory.h"
#include "IGUIEnvironment.h"
#include "irrString.h"
#include "EGUIEditTypes.h"
#include "CGUIEditWorkspace.h"
#include "CGUIEditWindow.h"
#include "CGUIPanel.h"
#include "CGUITextureCacheBrowser.h"
#include "CGUIAttributeEditor.h"
#include "CGUIStringAttribute.h"
#include "CGUIBoolAttribute.h"
#include "CGUIEnumAttribute.h"
#include "CGUIColorAttribute.h"
#include "CGUITextureAttribute.h"
#include "CGUIDummyEditorStub.h"
namespace irr
{
namespace gui
{
CGUIEditFactory::CGUIEditFactory(IGUIEnvironment* env)
: Environment(env)
{
#ifdef _DEBUG
setDebugName("CGUIEditFactory");
#endif
// don't grab the gui environment here to prevent cyclic references
}
CGUIEditFactory::~CGUIEditFactory()
{
}
//! adds an element to the environment based on its type name
IGUIElement* CGUIEditFactory::addGUIElement(const c8* typeName, IGUIElement* parent)
{
/*
here we create elements, add them to the manager, and then drop them
*/
core::stringc elementType(typeName);
IGUIElement* ret=0;
if (!parent)
parent = Environment->getRootGUIElement();
// editor workspace
if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_GUIEDIT]))
ret = new CGUIEditWorkspace(Environment, -1, 0);
// editor window
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_GUIEDITWINDOW]))
ret = new CGUIEditWindow(Environment, core::rect<s32>(0,0,100,100), 0);
// Klasker's GUI Panel
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_GUIPANEL]))
ret = new CGUIPanel(Environment, 0);
// texture cache browser
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_TEXTUREBROWSER]))
ret = new CGUITextureCacheBrowser(Environment, -1, 0);
// block of attribute editors
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_ATTRIBUTEEDITOR]))
ret = new CGUIAttributeEditor(Environment, -1, 0);
//! single attribute editors
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_STRINGATTRIBUTE]))
ret = new CGUIStringAttribute(Environment, 0, -1);
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_BOOLATTRIBUTE]))
ret = new CGUIBoolAttribute(Environment, 0, -1);
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_ENUMATTRIBUTE]))
ret = new CGUIEnumAttribute(Environment, 0, -1);
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_COLORATTRIBUTE]))
ret = new CGUIColorAttribute(Environment, 0, -1);
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_COLORFATTRIBUTE]))
ret = new CGUIColorAttribute(Environment, 0, -1);
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_TEXTUREATTRIBUTE]))
ret = new CGUITextureAttribute(Environment, 0, -1);
// stubs and custom editors
else if (elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_CONTEXTMENUEDITOR]) ||
elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_MENUEDITOR]) ||
elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_FILEDIALOGEDITOR]) ||
elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_COLORDIALOGEDITOR]) ||
elementType == core::stringc(GUIEditElementTypeNames[EGUIEDIT_MODALSCREENEDITOR]) )
ret = new CGUIDummyEditorStub(Environment, 0, typeName);
// add the element to its parent
if (ret)
parent->addChild(ret);
// the environment now has the reference, so we can drop the element
if (ret)
ret->drop();
return ret;
}
//! returns amount of element types this factory is able to create
s32 CGUIEditFactory::getCreatableGUIElementTypeCount() const
{
return EGUIEDIT_COUNT;
}
//! returns type name of a creatable element type
const c8* CGUIEditFactory::getCreateableGUIElementTypeName(s32 idx) const
{
if (idx>=0 && idx<EGUIEDIT_COUNT)
return GUIEditElementTypeNames[idx];
return 0;
}
} // end namespace gui
} // end namespace irr

View File

@ -0,0 +1,53 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_GUIEDIT_FACTORY_H_INCLUDED__
#define __C_GUIEDIT_FACTORY_H_INCLUDED__
#include "IGUIElementFactory.h"
namespace irr
{
namespace gui
{
class IGUIElement;
class IGUIEnvironment;
//! Interface making it possible to dynamicly create gui elements
class CGUIEditFactory : public IGUIElementFactory
{
public:
CGUIEditFactory(IGUIEnvironment* env);
~CGUIEditFactory();
//! adds a GUI element to the GUI Environment based on its type name
/** \param typeName: Type name of the element to add.
\param parent: Parent scene node of the new element, can be null to add it to the root.
\return Returns pointer to the new element or null if not successful. */
virtual IGUIElement* addGUIElement(const c8* typeName, IGUIElement* parent=0);
//! returns amount of GUI element types this factory is able to create
virtual s32 getCreatableGUIElementTypeCount() const;
//! returns type name of a creatable GUI element type by index
/** \param idx: Index of the type in this factory. Must be a value between 0 and
getCreatableGUIElementTypeCount() */
virtual const c8* getCreateableGUIElementTypeName(s32 idx) const;
// not used:
virtual const c8* getCreateableGUIElementTypeName(EGUI_ELEMENT_TYPE type) const {return 0;} ;
virtual EGUI_ELEMENT_TYPE getCreateableGUIElementType(s32 idx) const { return EGUIET_ELEMENT;};
virtual IGUIElement* addGUIElement(EGUI_ELEMENT_TYPE type, IGUIElement* parent=0) {return 0;};
private:
IGUIEnvironment* Environment;
};
} // end namespace scene
} // end namespace irr
#endif

View File

@ -0,0 +1,358 @@
#include "CGUIEditWindow.h"
#include "IGUISkin.h"
#include "IGUIEnvironment.h"
#include "IGUIElementFactory.h"
#include "IAttributes.h"
#include "IGUIFont.h"
#include "IGUITabControl.h"
#include "IGUITreeView.h"
#include "CGUIEditWorkspace.h"
using namespace irr;
using namespace gui;
//! constructor
CGUIEditWindow::CGUIEditWindow(IGUIEnvironment* environment, core::rect<s32> rectangle, IGUIElement *parent)
: IGUIWindow(environment, parent, -1, rectangle),
Dragging(false), IsDraggable(true), Resizing(false), SelectedElement(0),
AttribEditor(0), OptionEditor(0), EnvEditor(0)
{
#ifdef _DEBUG
setDebugName("CGUIEditWindow");
#endif
// we can't tab out of this window
setTabGroup(true);
// we can ctrl+tab to it
setTabStop(true);
// the tab order number is auto-assigned
setTabOrder(-1);
// set window text
setText(L"GUI Editor");
// return if we have no skin.
IGUISkin *skin = environment->getSkin();
if (!skin)
return;
core::rect<s32> dlgRect(50,50,250,500);
setRelativePosition(dlgRect);
setMinSize(core::dimension2du(200,200));
s32 th = skin->getSize(EGDS_WINDOW_BUTTON_WIDTH);
IGUITabControl *TabControl = environment->addTabControl(core::rect<s32>(1,th+5,dlgRect.getWidth()-1,dlgRect.getHeight()-1), this, false, true);
TabControl->setSubElement(true);
TabControl->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
//TabControl->addTab(L"Tools");
//L"Texture Cache Browser"
//L"Font Browser"
//L"Font Generator"
//L"Sprite Editor"
//Environment->addGUIElement("textureCacheBrowser", this);
IGUITab* EditorTab = TabControl->addTab(L"Editor");
OptionEditor = (CGUIAttributeEditor*) environment->addGUIElement("attributeEditor", EditorTab);
OptionEditor->grab();
OptionEditor->setID(EGUIEDCE_OPTION_EDITOR);
OptionEditor->setRelativePositionProportional(core::rect<f32>(0.0f, 0.0f, 1.0f, 1.0f));
OptionEditor->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
if (Parent && Parent->getParent() == Environment->getRootGUIElement())
{
IGUITab* EnvTab = TabControl->addTab(L"Env");
EnvEditor = (CGUIAttributeEditor*) environment->addGUIElement("attributeEditor", EnvTab);
EnvEditor->grab();
EnvEditor->setID(EGUIEDCE_ENV_EDITOR);
EnvEditor->setRelativePositionProportional(core::rect<f32>(0.0f, 0.0f, 1.0f, 1.0f));
EnvEditor->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
}
IGUITab* ElementTab = TabControl->addTab(L"Element");
AttribEditor = (CGUIAttributeEditor*) environment->addGUIElement("attributeEditor", ElementTab);
AttribEditor->grab();
AttribEditor->setID(EGUIEDCE_ATTRIB_EDITOR);
AttribEditor->setRelativePositionProportional(core::rect<f32>(0.0f, 0.0f, 1.0f, 1.0f));
AttribEditor->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
IGUITab* TreeTab = TabControl->addTab(L"Tree");
TreeView = environment->addTreeView(core::rect<s32>(0,0,0,0), TreeTab);
TreeView->setRelativePositionProportional(core::rect<f32>(0.0f, 0.0f, 1.0f, 1.0f));
TreeView->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
IGUITreeViewNode* treenode = TreeView->getRoot();
//treenode->addChildFront(L"Elements");
ResizeButton = environment->addButton(core::rect<s32>(dlgRect.getWidth()-(th+1),dlgRect.getHeight()-(th+1),dlgRect.getWidth()-1,dlgRect.getHeight()-1), this);
ResizeButton->setDrawBorder(false);
ResizeButton->setEnabled(false);
ResizeButton->setSpriteBank(skin->getSpriteBank());
ResizeButton->setSprite(EGBS_BUTTON_UP, skin->getIcon(EGDI_WINDOW_RESIZE), skin->getColor(EGDC_WINDOW_SYMBOL));
ResizeButton->setSprite(EGBS_BUTTON_DOWN, skin->getIcon(EGDI_WINDOW_RESIZE), skin->getColor(EGDC_WINDOW_SYMBOL));
ResizeButton->grab();
ResizeButton->setSubElement(true);
ResizeButton->setAlignment(EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT);
updateTree();
}
//! destructor
CGUIEditWindow::~CGUIEditWindow()
{
// drop everything
if (AttribEditor)
AttribEditor->drop();
if (EnvEditor)
EnvEditor->drop();
if (OptionEditor)
OptionEditor->drop();
if (ResizeButton)
ResizeButton->drop();
}
IGUITreeView* CGUIEditWindow::getTreeView() const
{
return TreeView;
}
CGUIAttributeEditor* CGUIEditWindow::getEnvironmentEditor() const
{
return EnvEditor;
}
CGUIAttributeEditor* CGUIEditWindow::getAttributeEditor() const
{
return AttribEditor;
}
CGUIAttributeEditor* CGUIEditWindow::getOptionEditor() const
{
return OptionEditor;
}
IGUITreeViewNode* CGUIEditWindow::getTreeNode(IGUIElement* element, IGUITreeViewNode* searchnode)
{
IGUITreeViewNode* child = searchnode->getFirstChild();
while (child)
{
if (((IGUIElement*) child->getData()) == element)
return child;
if (child->hasChildren())
{
IGUITreeViewNode* foundnode = getTreeNode(element, child);
if (foundnode)
return foundnode;
}
child = child->getNextSibling();
}
return 0;
}
void CGUIEditWindow::addChildrenToTree(IGUIElement* parentElement, IGUITreeViewNode* treenode)
{
core::stringw name = core::stringw(parentElement->getTypeName());
if (parentElement->getID() != -1)
name += core::stringw(L" [") + core::stringw(parentElement->getID()) + core::stringw(L"]");
IGUITreeViewNode* newnode = treenode->addChildBack(name.c_str());
newnode->setData((void*)parentElement);
core::list<IGUIElement*> children = parentElement->getChildren();
for (core::list<IGUIElement*>::Iterator i = children.begin(); i != children.end(); i++ )
{
if(core::stringc((*i)->getTypeName()) != "GUIEditor" && !(*i)->isSubElement())
addChildrenToTree(*i, newnode);
}
}
void CGUIEditWindow::updateTree()
{
TreeView->getRoot()->clearChildren();
IGUIElement* root = Environment->getRootGUIElement();
addChildrenToTree(root, TreeView->getRoot());
TreeView->getRoot()->getFirstChild()->setExpanded(true);
}
void CGUIEditWindow::setSelectedElement(IGUIElement *sel)
{
// save changes
AttribEditor->updateAttribs();
IGUITreeViewNode* elementTreeNode = getTreeNode(sel, TreeView->getRoot());
if (elementTreeNode)
{
elementTreeNode->setSelected(true);
while (elementTreeNode)
{
elementTreeNode->setExpanded(true);
elementTreeNode = elementTreeNode->getParent();
}
}
io::IAttributes* Attribs = AttribEditor->getAttribs();
if (SelectedElement && sel != SelectedElement)
{
// deserialize attributes
SelectedElement->deserializeAttributes(Attribs);
}
// clear the attributes list
Attribs->clear();
SelectedElement = sel;
// get the new attributes
if (SelectedElement)
SelectedElement->serializeAttributes(Attribs);
AttribEditor->refreshAttribs();
}
//! draws the element and its children.
//! same code as for a window
void CGUIEditWindow::draw()
{
if (!IsVisible)
return;
IGUISkin* skin = Environment->getSkin();
core::rect<s32> rect = AbsoluteRect;
// draw body fast
rect = skin->draw3DWindowBackground(this, true, skin->getColor(EGDC_ACTIVE_BORDER),
AbsoluteRect, &AbsoluteClippingRect);
if (Text.size())
{
rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X);
rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y);
rect.LowerRightCorner.X -= skin->getSize(EGDS_WINDOW_BUTTON_WIDTH) + 5;
IGUIFont* font = skin->getFont();
if (font)
font->draw(Text.c_str(), rect, skin->getColor(EGDC_ACTIVE_CAPTION), false, true, &AbsoluteClippingRect);
}
IGUIElement::draw();
}
//! called if an event happened.
bool CGUIEditWindow::OnEvent(const SEvent &event)
{
switch(event.EventType)
{
case EET_GUI_EVENT:
switch(event.GUIEvent.EventType)
{
case EGET_ELEMENT_FOCUS_LOST:
if (event.GUIEvent.Caller == this ||
event.GUIEvent.Caller == ResizeButton)
{
Dragging = false;
Resizing = false;
}
break;
default:
break;
}
break;
case EET_MOUSE_INPUT_EVENT:
switch(event.MouseInput.Event)
{
case EMIE_LMOUSE_PRESSED_DOWN:
{
DragStart.X = event.MouseInput.X;
DragStart.Y = event.MouseInput.Y;
IGUIElement* clickedElement = getElementFromPoint(DragStart);
if (clickedElement == this)
{
Dragging = IsDraggable;
//Environment->setFocus(this);
if (Parent)
Parent->bringToFront(this);
return true;
}
else if (clickedElement == ResizeButton)
{
Resizing = true;
//Environment->setFocus(this);
if (Parent)
Parent->bringToFront(this);
return true;
}
break;
}
case EMIE_LMOUSE_LEFT_UP:
if (Dragging || Resizing)
{
Dragging = false;
Resizing = false;
return true;
}
break;
case EMIE_MOUSE_MOVED:
if (Dragging || Resizing)
{
// gui window should not be dragged outside of its parent
if (Parent)
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
return true;
core::position2di diff(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y);
if (Dragging)
{
move(diff);
DragStart.X = event.MouseInput.X;
DragStart.Y = event.MouseInput.Y;
}
else if (Resizing)
{
core::position2di dp = RelativeRect.LowerRightCorner + diff;
setRelativePosition(core::rect<s32>(RelativeRect.UpperLeftCorner, dp));
DragStart += dp - RelativeRect.LowerRightCorner + diff;
}
return true;
}
break;
default:
break;
}
default:
break;
}
return Parent ? Parent->OnEvent(event) : false;
}
bool CGUIEditWindow::isDraggable() const
{
return IsDraggable;
}
void CGUIEditWindow::setDraggable(bool draggable)
{
IsDraggable = draggable;
if (Dragging && !IsDraggable)
Dragging = false;
}
// we're supposed to supply these if we're creating an IGUIWindow
// but we don't need them so we'll just return null
//! Returns the rectangle of the drawable area (without border, without titlebar and without scrollbars)
core::rect<s32> CGUIEditWindow::getClientRect() const {return core::recti();}
IGUIButton* CGUIEditWindow::getCloseButton() const {return 0;}
IGUIButton* CGUIEditWindow::getMinimizeButton() const {return 0;}
IGUIButton* CGUIEditWindow::getMaximizeButton() const {return 0;}

View File

@ -0,0 +1,88 @@
#ifndef __C_GUI_EDITOR_H_INCLUDED__
#define __C_GUI_EDITOR_H_INCLUDED__
#include "IGUIWindow.h"
#include "CGUIAttributeEditor.h"
//#include "IGUIStaticText.h"
#include "IGUIButton.h"
#include "IGUITreeView.h"
#include "irrArray.h"
#include "IAttributes.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
class CGUIEditWindow : public IGUIWindow
{
public:
//! constructor
CGUIEditWindow(IGUIEnvironment* environment, core::rect<s32> rectangle, IGUIElement *parent);
//! destructor
~CGUIEditWindow();
//! this part draws the window
virtual void draw();
//! handles events
virtual bool OnEvent(const SEvent &event);
//! change selection
virtual void setSelectedElement(IGUIElement *sel);
//! get draggable
virtual bool isDraggable() const;
//! get draggable
virtual void setDraggable(bool draggable);
// not used
virtual core::rect<s32> getClientRect() const;
virtual IGUIButton* getCloseButton() const;
virtual IGUIButton* getMinimizeButton() const;
virtual IGUIButton* getMaximizeButton() const;
virtual void setDrawBackground(bool draw) { }
virtual bool getDrawBackground() const { return true; }
virtual void setDrawTitlebar(bool draw) { }
virtual bool getDrawTitlebar() const { return true; }
IGUITreeView* getTreeView() const;
CGUIAttributeEditor* getAttributeEditor() const;
CGUIAttributeEditor* getOptionEditor() const;
CGUIAttributeEditor* getEnvironmentEditor() const;
//! Returns the type name of the gui element.
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_GUIEDITWINDOW];
}
void updateTree();
private:
void addChildrenToTree(IGUIElement* parentElement, IGUITreeViewNode* treenode);
IGUITreeViewNode* getTreeNode(IGUIElement* element, IGUITreeViewNode* searchnode);
// for dragging the window
bool Dragging;
bool IsDraggable;
bool Resizing;
core::position2d<s32> DragStart;
IGUIElement* SelectedElement; // current selected element
CGUIAttributeEditor* AttribEditor; // edits the current attribute
CGUIAttributeEditor* OptionEditor; // edits the options for the window
CGUIAttributeEditor* EnvEditor; // edits attributes for the environment
IGUITreeView* TreeView; // tree view of all elements in scene
IGUIButton* ResizeButton;
};
} // end namespace gui
} // end namespace irr
#endif // __C_GUI_EDITOR_H_INCLUDED__

View File

@ -0,0 +1,940 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt / Gaz Davidson
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
// Thanks to Midnight for all his testing, bug fixes and patches :)
#include "CGUIEditWorkspace.h"
#include "IGUIEnvironment.h"
#include "IVideoDriver.h"
#include "IOSOperator.h"
#include "IReadFile.h"
#include "IFileSystem.h"
#include "IXMLWriter.h"
#include "IGUISkin.h"
#include "IGUIElementFactory.h"
#include "CGUIEditWindow.h"
#include "IGUIContextMenu.h"
#include "IGUIFileOpenDialog.h"
#include "IGUITreeView.h"
#include "CGUIAttribute.h"
#include "CMemoryReadWriteFile.h"
namespace irr
{
namespace gui
{
//! constructor
CGUIEditWorkspace::CGUIEditWorkspace(IGUIEnvironment* environment, s32 id, IGUIElement *parent)
: IGUIElement(EGUIET_ELEMENT, environment, parent ? parent : environment->getRootGUIElement(), id, environment->getRootGUIElement()->getAbsolutePosition()),
CurrentMode(EGUIEDM_SELECT), MouseOverMode(EGUIEDM_SELECT),
GridSize(10,10), MenuCommandStart(0x3D17), DrawGrid(false), UseGrid(true),
MouseOverElement(0), SelectedElement(0), EditorWindow(0)
{
#ifdef _DEBUG
setDebugName("CGUIEditWorkspace");
#endif
// this element is never saved.
setSubElement(true);
// it resizes to fit a resizing window
setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
// Types which we currently can't handle in editor
// Most of them also just don't make sense in here (like Dialogs)
// TODO: We should have a way to create context-menus
UnusableElementTypeFilter.push_back(EGUIET_CONTEXT_MENU);
UnusableElementTypeFilter.push_back(EGUIET_FILE_OPEN_DIALOG);
UnusableElementTypeFilter.push_back(EGUIET_COLOR_SELECT_DIALOG);
UnusableElementTypeFilter.push_back(EGUIET_MESSAGE_BOX);
UnusableElementTypeFilter.push_back(EGUIET_MODAL_SCREEN);
UnusableElementTypeFilter.push_back(EGUIET_ELEMENT); // wouldn't do anything, so don't show in menu
UnusableElementTypeFilter.push_back(EGUIET_ROOT); // wouldn't do anything, so don't show in menu
EditorWindow = (CGUIEditWindow*) Environment->addGUIElement("GUIEditWindow", this);
if (EditorWindow)
{
EditorWindow->grab();
EditorWindow->setSubElement(true);
Environment->setFocus(EditorWindow);
serializeAttributes(EditorWindow->getOptionEditor()->getAttribs());
EditorWindow->getOptionEditor()->refreshAttribs();
if (EditorWindow->getEnvironmentEditor())
{
Environment->serializeAttributes(EditorWindow->getEnvironmentEditor()->getAttribs());
EditorWindow->getEnvironmentEditor()->refreshAttribs();
}
}
}
//! destructor
CGUIEditWorkspace::~CGUIEditWorkspace()
{
if (EditorWindow)
EditorWindow->drop();
}
void CGUIEditWorkspace::setMenuCommandIDStart(s32 id)
{
MenuCommandStart = id;
}
CGUIEditWorkspace::EGUIEDIT_MODE CGUIEditWorkspace::getModeFromPos(core::position2di p)
{
if (SelectedElement)
{
core::rect<s32> r = SelectedElement->getAbsolutePosition();
if (TLRect.isPointInside(p))
return EGUIEDM_RESIZE_TL;
else if (TRRect.isPointInside(p))
return EGUIEDM_RESIZE_TR;
else if (BLRect.isPointInside(p) )
return EGUIEDM_RESIZE_BL;
else if (BRRect.isPointInside(p))
return EGUIEDM_RESIZE_BR;
else if (TopRect.isPointInside(p))
return EGUIEDM_RESIZE_T;
else if (BRect.isPointInside(p))
return EGUIEDM_RESIZE_B;
else if (LRect.isPointInside(p))
return EGUIEDM_RESIZE_L;
else if (RRect.isPointInside(p))
return EGUIEDM_RESIZE_R;
else if (getEditableElementFromPoint(SelectedElement, p) == SelectedElement)
return EGUIEDM_MOVE;
else
return EGUIEDM_SELECT;
}
return EGUIEDM_SELECT;
}
IGUIElement* CGUIEditWorkspace::getEditableElementFromPoint(IGUIElement *start, const core::position2di &point, s32 index )
{
IGUIElement* target = 0;
// we have to search from back to front.
core::list<IGUIElement*>::ConstIterator it = start->getChildren().getLast();
s32 count=0;
while(it != start->getChildren().end())
{
target = getEditableElementFromPoint((*it),point);
if (target)
{
if (!target->isSubElement() && !isMyChild(target) && target != this)
{
if (index == count)
return target;
else
count++;
}
else
target = 0;
}
--it;
}
if (start->getAbsolutePosition().isPointInside(point))
target = start;
return target;
}
void CGUIEditWorkspace::setSelectedElement(IGUIElement *sel)
{
IGUIElement* focus = Environment->getFocus();
// we only give focus back to children
if (!isMyChild(focus))
focus = 0;
if (SelectedElement != Parent)
{
if (SelectedElement != sel && EditorWindow)
{
EditorWindow->setSelectedElement(sel);
SelectedElement = sel;
}
}
else
SelectedElement = 0;
if (focus)
Environment->setFocus(focus);
else
Environment->setFocus(this);
}
IGUIElement* CGUIEditWorkspace::getSelectedElement()
{
return SelectedElement;
}
void CGUIEditWorkspace::selectNextSibling()
{
IGUIElement* p=0;
if (SelectedElement && SelectedElement->getParent())
p = SelectedElement->getParent();
else
p = Parent;
core::list<IGUIElement*>::ConstIterator it = p->getChildren().begin();
// find selected element
if (SelectedElement)
while (*it != SelectedElement)
++it;
if (it !=p->getChildren().end())
++it;
// find next non sub-element
while (it != p->getChildren().end() && (*it)->isSubElement())
++it;
if (it != p->getChildren().end())
setSelectedElement(*it);
}
void CGUIEditWorkspace::selectPreviousSibling()
{
IGUIElement* p=0;
if (SelectedElement && SelectedElement->getParent())
p = SelectedElement->getParent();
else
p = Parent;
core::list<IGUIElement*>::ConstIterator it = p->getChildren().getLast();
// find selected element
if (SelectedElement)
while (*it != SelectedElement)
--it;
if (it != p->getChildren().end())
--it;
// find next non sub-element
while (it != p->getChildren().end() && (*it)->isSubElement())
--it;
if (it != p->getChildren().end())
setSelectedElement(*it);
}
//! called if an event happened.
bool CGUIEditWorkspace::OnEvent(const SEvent &e)
{
IGUIFileOpenDialog* dialog=0;
switch(e.EventType)
{
case ATTRIBEDIT_ATTRIB_CHANGED:
{
switch (e.UserEvent.UserData1)
{
case EGUIEDCE_ATTRIB_EDITOR:
{
// update selected items attributes
if (SelectedElement)
{
SelectedElement->deserializeAttributes(EditorWindow->getAttributeEditor()->getAttribs());
EditorWindow->updateTree();
}
return true;
}
case EGUIEDCE_OPTION_EDITOR:
{
// update editor options
deserializeAttributes(EditorWindow->getOptionEditor()->getAttribs());
return true;
}
case EGUIEDCE_ENV_EDITOR:
{
// update environment
Environment->deserializeAttributes(EditorWindow->getEnvironmentEditor()->getAttribs());
return true;
}
}
}
break;
case EET_KEY_INPUT_EVENT:
if (!e.KeyInput.PressedDown)
{
switch (e.KeyInput.Key)
{
case KEY_DELETE:
if (SelectedElement)
{
IGUIElement* el = SelectedElement;
setSelectedElement(0);
MouseOverElement = 0;
el->remove();
EditorWindow->updateTree();
}
break;
case KEY_KEY_X:
if (e.KeyInput.Control && SelectedElement)
{
// cut
CopySelectedElementXML();
// delete element
IGUIElement *el = SelectedElement;
setSelectedElement(0);
MouseOverElement = 0;
el->remove();
}
break;
case KEY_KEY_C:
// copy
if (e.KeyInput.Control && SelectedElement)
{
CopySelectedElementXML();
}
break;
case KEY_KEY_V:
// paste
if (e.KeyInput.Control)
{
PasteXMLToSelectedElement();
}
break;
default:
break;
}
return true;
}
break;
case EET_MOUSE_INPUT_EVENT:
switch(e.MouseInput.Event)
{
case EMIE_MOUSE_WHEEL:
{
f32 wheel = e.MouseInput.Wheel;
if (wheel > 0)
selectPreviousSibling();
else
selectNextSibling();
}
break;
case EMIE_LMOUSE_PRESSED_DOWN:
{
core::position2di p = core::position2di(e.MouseInput.X,e.MouseInput.Y);
IGUIElement* newSelection = getElementFromPoint(p);
if (newSelection != this && isMyChild(newSelection) ) // redirect event
{
Environment->setFocus(newSelection);
return true;
}
// hide the gui editor
if (EditorWindow)
EditorWindow->setVisible(false);
if (CurrentMode == EGUIEDM_SELECT)
{
if (SelectedElement)
{
// start moving or dragging
CurrentMode = getModeFromPos(p);
if (CurrentMode == EGUIEDM_MOVE)
StartMovePos = SelectedElement->getAbsolutePosition().UpperLeftCorner;
DragStart = p;
SelectedArea = SelectedElement->getAbsolutePosition();
}
if (CurrentMode < EGUIEDM_MOVE)
{
// selecting an element...
MouseOverElement = getEditableElementFromPoint(Parent, p);
if (MouseOverElement == Parent)
MouseOverElement = 0;
setSelectedElement(MouseOverElement);
}
}
break;
}
case EMIE_RMOUSE_PRESSED_DOWN:
if (CurrentMode == EGUIEDM_SELECT_NEW_PARENT || CurrentMode >= EGUIEDM_MOVE)
{
// cancel dragging
CurrentMode = EGUIEDM_SELECT;
}
else
{
DragStart = core::position2di(e.MouseInput.X,e.MouseInput.Y);
// root menu
IGUIContextMenu* mnu = Environment->addContextMenu(
core::rect<s32>(e.MouseInput.X, e.MouseInput.Y, e.MouseInput.Y+100, e.MouseInput.Y+100),this);
mnu->addItem(L"File",-1,true,true);
mnu->addItem(L"Edit",-1,true,true);
mnu->addItem(L"View",-1,true,true);
mnu->addItem(SelectedElement ? L"Add child" : L"Add" ,-1,true,true);
// file menu
IGUIContextMenu* sub = mnu->getSubMenu(0);
IGUIContextMenu* sub2 =0;
sub->addItem(L"New", MenuCommandStart + EGUIEDMC_FILE_NEW );
sub->addItem(L"Load...",MenuCommandStart + EGUIEDMC_FILE_LOAD);
sub->addItem(L"Save...",MenuCommandStart + EGUIEDMC_FILE_SAVE);
// edit menu
sub = mnu->getSubMenu(1);
sub->addItem(L"Cut (ctrl+x)", MenuCommandStart + EGUIEDMC_CUT_ELEMENT, (SelectedElement != 0));
sub->addItem(L"Copy (ctrl+c)", MenuCommandStart + EGUIEDMC_COPY_ELEMENT, (SelectedElement != 0));
sub->addItem(L"Paste (ctrl+v)", MenuCommandStart + EGUIEDMC_PASTE_ELEMENT,
(core::stringc(Environment->getOSOperator()->getTextFromClipboard()) != ""));
sub->addItem(L"Delete (del)", MenuCommandStart + EGUIEDMC_DELETE_ELEMENT, (SelectedElement != 0));
sub->addSeparator();
sub->addItem(L"Set parent", MenuCommandStart + EGUIEDMC_SET_PARENT, (SelectedElement != 0));
sub->addItem(L"Bring to front", MenuCommandStart + EGUIEDMC_BRING_TO_FRONT, (SelectedElement != 0));
sub->addSeparator();
sub->addItem(L"Save to XML...", MenuCommandStart + EGUIEDMC_SAVE_ELEMENT, (SelectedElement != 0));
sub = mnu->getSubMenu(2);
// view menu
if (EditorWindow)
sub->addItem(EditorWindow->isVisible() ? L"Hide window" : L"Show window", MenuCommandStart + EGUIEDMC_TOGGLE_EDITOR);
sub = mnu->getSubMenu(3);
s32 i,j,c=0;
sub->addItem(L"Default factory",-1,true, true);
// add elements from each factory
for (i=0; u32(i) < Environment->getRegisteredGUIElementFactoryCount(); ++i)
{
sub2 = sub->getSubMenu(i);
IGUIElementFactory *f = Environment->getGUIElementFactory(i);
for (j=0; j< f->getCreatableGUIElementTypeCount(); ++j)
{
EGUI_ELEMENT_TYPE type = f->getCreateableGUIElementType(j);
if ( UnusableElementTypeFilter.linear_search(type) < 0 )
sub2->addItem(core::stringw(f->getCreateableGUIElementTypeName(j)).c_str(), MenuCommandStart + EGUIEDMC_COUNT + c);
c++;
}
if (u32(i+1) < Environment->getRegisteredGUIElementFactoryCount())
{
core::stringw strFact;
strFact = L"Factory ";
strFact += i+1;
sub->addItem(strFact.c_str(),-1, true, true);
}
}
sub->addSeparator();
sub->addItem(L"From XML...", MenuCommandStart + EGUIEDMC_INSERT_XML);
// set focus to menu
Environment->setFocus(mnu);
}
break;
case EMIE_LMOUSE_LEFT_UP:
// make window visible again
if (EditorWindow)
EditorWindow->setVisible(true);
if (CurrentMode == EGUIEDM_SELECT_NEW_PARENT)
{
if (SelectedElement)
{
MouseOverElement = getEditableElementFromPoint(Parent,
core::position2di(e.MouseInput.X,e.MouseInput.Y));
if (MouseOverElement)
{
MouseOverElement->addChild(SelectedElement);
setSelectedElement(0);
setSelectedElement(SelectedElement);
}
}
CurrentMode = EGUIEDM_SELECT;
}
else if (CurrentMode >= EGUIEDM_MOVE)
{
IGUIElement *sel = SelectedElement;
// unselect
setSelectedElement(0);
// move
core::position2d<s32> p(0,0);
if (sel->getParent())
p = sel->getParent()->getAbsolutePosition().UpperLeftCorner;
sel->setRelativePosition(SelectedArea - p);
// select
setSelectedElement(sel);
// reset selection mode...
CurrentMode = EGUIEDM_SELECT;
}
break;
case EMIE_MOUSE_MOVED:
// always on top
Parent->bringToFront(this);
// if selecting
if (CurrentMode == EGUIEDM_SELECT || CurrentMode == EGUIEDM_SELECT_NEW_PARENT)
{
core::position2di p = core::position2di(e.MouseInput.X,e.MouseInput.Y);
// highlight the element that the mouse is over
MouseOverElement = getEditableElementFromPoint(Parent, p);
if (MouseOverElement == Parent)
{
MouseOverElement = 0;
}
if (CurrentMode == EGUIEDM_SELECT)
{
MouseOverMode = getModeFromPos(p);
if (MouseOverMode > EGUIEDM_MOVE)
{
MouseOverElement = SelectedElement;
}
}
}
else if (CurrentMode == EGUIEDM_MOVE)
{
// get difference
core::position2di p = core::position2di(e.MouseInput.X,e.MouseInput.Y);
p -= DragStart;
// apply to top corner
p = StartMovePos + p;
if (UseGrid)
{
p.X = (p.X/GridSize.Width)*GridSize.Width;
p.Y = (p.Y/GridSize.Height)*GridSize.Height;
}
SelectedArea += p - SelectedArea.UpperLeftCorner;
}
else if (CurrentMode > EGUIEDM_MOVE)
{
// get difference from start position
core::position2di p = core::position2di(e.MouseInput.X,e.MouseInput.Y);
if (UseGrid)
{
p.X = (p.X/GridSize.Width)*GridSize.Width;
p.Y = (p.Y/GridSize.Height)*GridSize.Height;
}
switch(CurrentMode)
{
case EGUIEDM_RESIZE_T:
SelectedArea.UpperLeftCorner.Y = p.Y;
break;
case EGUIEDM_RESIZE_B:
SelectedArea.LowerRightCorner.Y = p.Y;
break;
case EGUIEDM_RESIZE_L:
SelectedArea.UpperLeftCorner.X = p.X;
break;
case EGUIEDM_RESIZE_R:
SelectedArea.LowerRightCorner.X = p.X;
break;
case EGUIEDM_RESIZE_TL:
SelectedArea.UpperLeftCorner = p;
break;
case EGUIEDM_RESIZE_TR:
SelectedArea.UpperLeftCorner.Y = p.Y;
SelectedArea.LowerRightCorner.X = p.X;
break;
case EGUIEDM_RESIZE_BL:
SelectedArea.UpperLeftCorner.X = p.X;
SelectedArea.LowerRightCorner.Y = p.Y;
break;
case EGUIEDM_RESIZE_BR:
SelectedArea.LowerRightCorner = p;
break;
default:
break;
}
}
break;
default:
break;
}
break;
case EET_GUI_EVENT:
switch(e.GUIEvent.EventType)
{
case EGET_TREEVIEW_NODE_SELECT:
{
IGUITreeViewNode* eventnode = ((IGUITreeView*)e.GUIEvent.Caller)->getLastEventNode();
if(!eventnode->isRoot())
setSelectedElement((IGUIElement*)(eventnode->getData()));
break;
}
// load a gui file
case EGET_FILE_SELECTED:
dialog = (IGUIFileOpenDialog*)e.GUIEvent.Caller;
Environment->loadGUI(core::stringc(dialog->getFileName()).c_str());
break;
case EGET_MENU_ITEM_SELECTED:
{
IGUIContextMenu *menu = (IGUIContextMenu*)e.GUIEvent.Caller;
s32 cmdID = menu->getItemCommandId(menu->getSelectedItem()) - MenuCommandStart;
IGUIElement* el;
switch(cmdID)
{
//! file commands
case EGUIEDMC_FILE_NEW:
// clear all elements belonging to our parent
setSelectedElement(0);
MouseOverElement = 0;
el = Parent;
grab();
// remove all children
while(Children.end() != el->getChildren().begin())
el->removeChild(*(el->getChildren().begin()));
// attach to parent again
el->addChild(this);
drop();
break;
case EGUIEDMC_FILE_LOAD:
Environment->addFileOpenDialog(L"Please select a GUI file to open", false, this);
break;
case EGUIEDMC_FILE_SAVE:
Environment->saveGUI("guiTest.xml");
break;
//! edit menu
case EGUIEDMC_CUT_ELEMENT:
{
CopySelectedElementXML();
// delete element
el = SelectedElement;
setSelectedElement(0);
MouseOverElement = 0;
el->remove();
break;
}
case EGUIEDMC_COPY_ELEMENT:
CopySelectedElementXML();
break;
case EGUIEDMC_PASTE_ELEMENT:
PasteXMLToSelectedElement();
break;
case EGUIEDMC_DELETE_ELEMENT:
el = SelectedElement;
setSelectedElement(0);
MouseOverElement = 0;
el->remove();
break;
case EGUIEDMC_SET_PARENT:
CurrentMode = EGUIEDM_SELECT_NEW_PARENT;
break;
case EGUIEDMC_BRING_TO_FRONT:
if (SelectedElement->getParent())
SelectedElement->getParent()->bringToFront(SelectedElement);
break;
case EGUIEDMC_SAVE_ELEMENT:
//TODO: add 'save' dialog.
Environment->saveGUI("guiTest.xml", SelectedElement ? SelectedElement : Environment->getRootGUIElement() );
break;
//! toggle edit window
case EGUIEDMC_TOGGLE_EDITOR:
break;
case EGUIEDMC_INSERT_XML:
Environment->loadGUI("guiTest.xml", SelectedElement ? SelectedElement : Environment->getRootGUIElement() );
break;
default:
// create element from factory?
if (cmdID >= EGUIEDMC_COUNT)
{
s32 num = cmdID - EGUIEDMC_COUNT; // get index
// loop through all factories
s32 i, c=Environment->getRegisteredGUIElementFactoryCount();
for (i=0; i<c && num > Environment->getGUIElementFactory(i)->getCreatableGUIElementTypeCount(); ++i)
{
num -= Environment->getGUIElementFactory(i)->getCreatableGUIElementTypeCount();
}
if (num < Environment->getGUIElementFactory(i)->getCreatableGUIElementTypeCount() )
{
core::stringc name = Environment->getGUIElementFactory(i)->getCreateableGUIElementTypeName(num);
IGUIElement *parentElement = SelectedElement ? SelectedElement : Environment->getRootGUIElement();
// add it
IGUIElement *newElement = Environment->getGUIElementFactory(i)->addGUIElement(name.c_str(),parentElement);
if (newElement)
{
core::position2di p = DragStart - parentElement->getAbsolutePosition().UpperLeftCorner;
newElement->setRelativePosition(core::rect<s32>(p,p+core::position2di(100,100)));
//Environment->removeFocus(newElement);
}
}
}
break;
}
EditorWindow->updateTree();
}
return true;
default:
break;
}
break;
default:
break;
}
// even if we didn't absorb the event,
// we never pass events back to the GUI we're editing!
return false;
}
//! draws the element and its children
void CGUIEditWorkspace::draw()
{
video::IVideoDriver *driver = Environment->getVideoDriver();
if (DrawGrid)
{
// draw the grid
core::rect<s32> r = getAbsolutePosition();
s32 cy = r.UpperLeftCorner.Y;
while (cy < r.LowerRightCorner.Y)
{
s32 cx = r.UpperLeftCorner.X;
while (cx < r.LowerRightCorner.X)
{
driver->draw2DRectangle(video::SColor(40,0,0,90),core::rect<s32>(cx+1,cy+1,GridSize.Width+cx,GridSize.Height+cy));
cx += GridSize.Width;
}
cy += GridSize.Height;
}
}
if (MouseOverElement &&
MouseOverElement != SelectedElement &&
MouseOverElement != Parent)
{
core::rect<s32> r = MouseOverElement->getAbsolutePosition();
driver->draw2DRectangle(video::SColor(100,0,0,255), r);
}
if (SelectedElement && CurrentMode == EGUIEDM_SELECT)
{
driver->draw2DRectangle(video::SColor(100,0,255,0),SelectedElement->getAbsolutePosition());
}
if (CurrentMode >= EGUIEDM_MOVE)
{
driver->draw2DRectangle(video::SColor(100,255,0,0),SelectedArea);
}
if ( (SelectedElement && CurrentMode >= EGUIEDM_MOVE) ||
(SelectedElement && MouseOverElement == SelectedElement && MouseOverMode >= EGUIEDM_MOVE) )
{
// draw handles for moving
EGUIEDIT_MODE m = CurrentMode;
core::rect<s32> r = SelectedArea;
if (m < EGUIEDM_MOVE)
{
m = MouseOverMode;
r = SelectedElement->getAbsolutePosition();
}
core::position2di d = core::position2di(4,4);
TLRect = core::rect<s32>(r.UpperLeftCorner, r.UpperLeftCorner + d );
TRRect = core::rect<s32>(r.LowerRightCorner.X-4, r.UpperLeftCorner.Y, r.LowerRightCorner.X, r.UpperLeftCorner.Y+4);
TopRect = core::rect<s32>(r.getCenter().X-2, r.UpperLeftCorner.Y,r.getCenter().X+2, r.UpperLeftCorner.Y+4 );
BLRect = core::rect<s32>(r.UpperLeftCorner.X, r.LowerRightCorner.Y-4, r.UpperLeftCorner.X+4, r.LowerRightCorner.Y);
LRect = core::rect<s32>(r.UpperLeftCorner.X,r.getCenter().Y-2, r.UpperLeftCorner.X+4, r.getCenter().Y+2 );
RRect = core::rect<s32>(r.LowerRightCorner.X-4,r.getCenter().Y-2, r.LowerRightCorner.X, r.getCenter().Y+2 );
BRRect = core::rect<s32>(r.LowerRightCorner-d, r.LowerRightCorner);
BRect = core::rect<s32>(r.getCenter().X-2, r.LowerRightCorner.Y-4,r.getCenter().X+2, r.LowerRightCorner.Y );
// top left
if (m == EGUIEDM_RESIZE_T || m == EGUIEDM_RESIZE_L || m == EGUIEDM_RESIZE_TL || m == EGUIEDM_MOVE )
driver->draw2DRectangle(video::SColor(100,255,255,255), TLRect);
if (m == EGUIEDM_RESIZE_T || m == EGUIEDM_RESIZE_R || m == EGUIEDM_RESIZE_TR || m == EGUIEDM_MOVE )
driver->draw2DRectangle(video::SColor(100,255,255,255), TRRect);
if (m == EGUIEDM_RESIZE_T || m == EGUIEDM_MOVE )
driver->draw2DRectangle(video::SColor(100,255,255,255), TopRect);
if (m == EGUIEDM_RESIZE_L || m == EGUIEDM_RESIZE_BL || m == EGUIEDM_RESIZE_B || m == EGUIEDM_MOVE )
driver->draw2DRectangle(video::SColor(100,255,255,255), BLRect);
if (m == EGUIEDM_RESIZE_L || m == EGUIEDM_MOVE )
driver->draw2DRectangle(video::SColor(100,255,255,255), LRect);
if (m == EGUIEDM_RESIZE_R || m == EGUIEDM_MOVE )
driver->draw2DRectangle(video::SColor(100,255,255,255), RRect);
if (m == EGUIEDM_RESIZE_R || m == EGUIEDM_RESIZE_BR || m == EGUIEDM_RESIZE_B || m == EGUIEDM_MOVE )
driver->draw2DRectangle(video::SColor(100,255,255,255), BRRect );
if (m == EGUIEDM_RESIZE_B || m == EGUIEDM_MOVE )
driver->draw2DRectangle(video::SColor(100,255,255,255), BRect);
}
IGUIElement::draw();
}
void CGUIEditWorkspace::setDrawGrid(bool drawGrid)
{
DrawGrid = drawGrid;
}
void CGUIEditWorkspace::setGridSize(const core::dimension2di& gridSize)
{
GridSize = gridSize;
if (GridSize.Width < 2)
GridSize.Width = 2;
if (GridSize.Height < 2)
GridSize.Height = 2;
}
void CGUIEditWorkspace::setUseGrid(bool useGrid)
{
UseGrid = useGrid;
}
//! Removes a child.
void CGUIEditWorkspace::removeChild(IGUIElement* child)
{
IGUIElement::removeChild(child);
if (Children.empty())
remove();
}
void CGUIEditWorkspace::updateAbsolutePosition()
{
core::rect<s32> parentRect(0,0,0,0);
if (Parent)
{
parentRect = Parent->getAbsolutePosition();
RelativeRect.UpperLeftCorner.X = 0;
RelativeRect.UpperLeftCorner.Y = 0;
RelativeRect.LowerRightCorner.X = parentRect.getWidth();
RelativeRect.LowerRightCorner.Y = parentRect.getHeight();
}
IGUIElement::updateAbsolutePosition();
}
void CGUIEditWorkspace::CopySelectedElementXML()
{
core::stringc XMLText;
core::stringw wXMLText;
// create memory write file
io::CMemoryReadWriteFile* memWrite = new io::CMemoryReadWriteFile("#Clipboard#");
// save gui to mem file
io::IXMLWriter* xml = Environment->getFileSystem()->createXMLWriter(memWrite);
Environment->writeGUIElement(xml, SelectedElement);
// copy to clipboard- wide chars not supported yet :(
wXMLText = (wchar_t*)&memWrite->getData()[0];
u32 i = memWrite->getData().size()/sizeof(wchar_t);
if (wXMLText.size() > i)
wXMLText[i] = L'\0';
XMLText = wXMLText.c_str();
memWrite->drop();
xml->drop();
Environment->getOSOperator()->copyToClipboard(XMLText.c_str());
}
void CGUIEditWorkspace::PasteXMLToSelectedElement()
{
// get clipboard data
const char * p = Environment->getOSOperator()->getTextFromClipboard();
irr::core::stringw wXMLText;
core::multibyteToWString(wXMLText, p);
io::CMemoryReadWriteFile* memWrite = new io::CMemoryReadWriteFile("#Clipboard#");
io::IXMLWriter* xmlw = Environment->getFileSystem()->createXMLWriter(memWrite);
xmlw->writeXMLHeader(); // it needs one of those
xmlw->drop();
// write clipboard data
memWrite->write((void*)&wXMLText[0], wXMLText.size() * sizeof(wchar_t));
// rewind file
memWrite->seek(0, false);
// read xml
Environment->loadGUI(memWrite, SelectedElement);
// reset focus
Environment->setFocus(this);
// drop the read file
memWrite->drop();
}
void CGUIEditWorkspace::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options)
{
out->addBool("DrawGrid", DrawGrid);
out->addBool("UseGrid", UseGrid);
out->addPosition2d("GridSize", core::position2di(GridSize.Width, GridSize.Height));
out->addInt("MenuCommandStart", MenuCommandStart);
}
void CGUIEditWorkspace::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
{
setDrawGrid(in->getAttributeAsBool("DrawGrid"));
setUseGrid(in->getAttributeAsBool("UseGrid"));
core::position2di tmpp = in->getAttributeAsPosition2d("GridSize");
core::dimension2di tmpd(tmpp.X, tmpp.Y);
setGridSize(tmpd);
setMenuCommandIDStart(in->getAttributeAsInt("MenuCommandStart"));
}
} // end namespace gui
} // end namespace irr

View File

@ -0,0 +1,171 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt / Gaz Davidson
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_GUIEDIT_WORKSPACE_H_INCLUDED__
#define __C_GUIEDIT_WORKSPACE_H_INCLUDED__
#include "IGUIElement.h"
#include "CGUIEditWindow.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
//! Adding the GUI Editor Workspace to an element allows you
/** to create, edit, load and save any elements supported
by any loaded factories.
When you add it without a parent (to the root element)
it will also allow you to edit, load and save settings in
the current skin.
*/
// custom events
enum EGUIEDIT_CUSTOM_EVENTS
{
EGUIEDCE_ATTRIB_EDITOR = MAKE_IRR_ID('g','A','t','t'),
EGUIEDCE_OPTION_EDITOR = MAKE_IRR_ID('g','O','p','t'),
EGUIEDCE_ENV_EDITOR = MAKE_IRR_ID('g','E','n','v')
};
class CGUIEditWorkspace : public IGUIElement
{
public:
//! constructor
CGUIEditWorkspace(IGUIEnvironment* environment, s32 id=-1, IGUIElement *parent=0);
//! destructor
~CGUIEditWorkspace();
//! called if an event happened.
virtual bool OnEvent(const SEvent &event);
//! Removes a child.
virtual void removeChild(IGUIElement* child);
//! draws the element and its children
virtual void draw();
//! Updates the absolute position.
virtual void updateAbsolutePosition();
//! Sets the menu command id's
/** The GUI editor defaults to command ID's from 0xED17 to 0xED17+EGUIEDMC_COUNT
In the rare case that these are already in use and you wish to use menus
while the editor is present you can set a new offset here.
*/
virtual void setMenuCommandIDStart(s32 id);
//! grid drawing...
virtual void setDrawGrid(bool drawGrid);
virtual void setGridSize(const core::dimension2di& gridSize);
virtual void setUseGrid(bool useGrid);
//! returns the first editable element under the mouse
virtual IGUIElement* getEditableElementFromPoint(IGUIElement *start, const core::position2di &point, s32 index=0 );
//! selecting elements
virtual void setSelectedElement(IGUIElement *sel);
virtual void selectNextSibling();
virtual void selectPreviousSibling();
//! returns the selected element
virtual IGUIElement* getSelectedElement();
//! copies the xml of the selected element and all children to the clipboard
virtual void CopySelectedElementXML();
//! copies the xml of the selected element and all children to the clipboard
virtual void PasteXMLToSelectedElement();
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_GUIEDIT];
}
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0);
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0);
private:
enum EGUIEDIT_MODE
{
// when we are currently selecting an element
EGUIEDM_SELECT=0,
// selecting a new parent for the selected element
EGUIEDM_SELECT_NEW_PARENT,
// moving the selected element
EGUIEDM_MOVE,
// resizing the selected element
EGUIEDM_RESIZE_TL,
EGUIEDM_RESIZE_T,
EGUIEDM_RESIZE_TR,
EGUIEDM_RESIZE_R,
EGUIEDM_RESIZE_BR,
EGUIEDM_RESIZE_B,
EGUIEDM_RESIZE_BL,
EGUIEDM_RESIZE_L
};
enum EGUIEDIT_MENUCOMMANDS
{
//! file commands
EGUIEDMC_FILE_NEW,
EGUIEDMC_FILE_LOAD,
EGUIEDMC_FILE_SAVE,
//! edit menu
EGUIEDMC_CUT_ELEMENT,
EGUIEDMC_COPY_ELEMENT,
EGUIEDMC_PASTE_ELEMENT,
EGUIEDMC_DELETE_ELEMENT,
EGUIEDMC_SET_PARENT,
EGUIEDMC_BRING_TO_FRONT,
EGUIEDMC_SAVE_ELEMENT,
//! grid
EGUIEDMC_TOGGLE_EDITOR,
EGUIEDMC_INSERT_XML,
//! number of menu options
EGUIEDMC_COUNT
};
EGUIEDIT_MODE getModeFromPos(core::position2di p);
EGUIEDIT_MODE CurrentMode;
EGUIEDIT_MODE MouseOverMode;
core::position2di DragStart;
core::position2di StartMovePos;
core::rect<s32> SelectedArea;
core::dimension2di GridSize;
s32 MenuCommandStart;
bool DrawGrid, UseGrid;
IGUIElement *MouseOverElement,
*SelectedElement;
CGUIEditWindow *EditorWindow;
core::rect<s32> TLRect;
core::rect<s32> TRRect;
core::rect<s32> TopRect;
core::rect<s32> BLRect;
core::rect<s32> LRect;
core::rect<s32> RRect;
core::rect<s32> BRRect;
core::rect<s32> BRect;
//! Some gui-elements can't be created in this editor
core::array<EGUI_ELEMENT_TYPE> UnusableElementTypeFilter;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -0,0 +1,114 @@
#ifndef __C_GUI_ENUM_ATTRIBUTE_H_INCLUDED__
#define __C_GUI_ENUM_ATTRIBUTE_H_INCLUDED__
#include "CGUIAttribute.h"
#include "IGUIComboBox.h"
#include "IGUIEditBox.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
class CGUIEnumAttribute : public CGUIAttribute
{
public:
//
CGUIEnumAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) :
CGUIAttribute(environment, parent, myParentID),
AttribComboBox(0), AttribEditBox(0)
{
}
virtual ~CGUIEnumAttribute()
{
if (AttribComboBox)
AttribComboBox->drop();
if (AttribEditBox)
AttribEditBox->drop();
}
// save the attribute and possibly post the event to its parent
virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex)
{
if (AttribComboBox)
{
AttribComboBox->remove();
AttribComboBox->drop();
AttribComboBox = 0;
}
if (AttribEditBox)
{
AttribEditBox->remove();
AttribEditBox->drop();
AttribEditBox = 0;
}
core::array<core::stringc> outLiterals;
attribs->getAttributeEnumerationLiteralsOfEnumeration(attribIndex, outLiterals);
core::rect<s32> r = getAbsolutePosition();
core::rect<s32> r2(0, Environment->getSkin()->getFont()->getDimension(L"A").Height + 10,
r.getWidth() - 5,
Environment->getSkin()->getFont()->getDimension(L"A").Height*2 + 20 );
if (outLiterals.size() > 0)
{
AttribComboBox = Environment->addComboBox(r2, this, -1);
for (u32 i=0; i<outLiterals.size(); ++i)
AttribComboBox->addItem( core::stringw(outLiterals[i].c_str()).c_str());
AttribComboBox->setSelected( attribs->getAttributeAsInt(attribIndex) );
AttribComboBox->grab();
AttribComboBox->setSubElement(true);
AttribComboBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
}
else
{
AttribEditBox = Environment->addEditBox(
attribs->getAttributeAsStringW(attribIndex).c_str(),
r2, true, this, -1);
AttribEditBox->grab();
AttribEditBox->setSubElement(true);
AttribEditBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
}
CGUIAttribute::setAttrib(attribs, attribIndex);
}
//! save the attribute and possibly post the event to its parent
virtual bool updateAttrib(bool sendEvent=true)
{
if (!Attribs)
return true;
if (AttribComboBox)
Attribs->setAttribute(Index, AttribComboBox->getText());
else if (AttribEditBox)
Attribs->setAttribute(Index, AttribEditBox->getText());
return CGUIAttribute::updateAttrib(sendEvent);
}
//! Returns the type name of the gui element.
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_ENUMATTRIBUTE];
}
private:
IGUIComboBox* AttribComboBox;
IGUIEditBox* AttribEditBox;
};
} // namespace gui
} // namespace irr
#endif

View File

@ -0,0 +1,340 @@
// Copyright 2006-2012 Asger Feldthaus
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
/*
Originally Klasker's but I've messed around with it lots - Gaz
*/
#include "CGUIPanel.h"
#include "IGUIEnvironment.h"
#include "IGUIScrollBar.h"
#include "IGUITabControl.h"
#include "IVideoDriver.h"
const int SCROLL_BAR_SIZE = 16; // Scroll bars are 16 pixels wide
const int BORDER_WIDTH = 2;
namespace irr
{
namespace gui
{
CGUIPanel::CGUIPanel(IGUIEnvironment* environment, IGUIElement* parent, s32 id, const core::rect<s32>& rectangle,
bool border, E_SCROLL_BAR_MODE vMode, E_SCROLL_BAR_MODE hMode)
: IGUIElement(EGUIET_ELEMENT, environment, parent, id, rectangle),
VScrollBar(0), HScrollBar(0), ClipPane(0), InnerPane(0),
VScrollBarMode(vMode), HScrollBarMode(hMode), NeedsUpdate(true), Border(border)
{
#ifdef _DEBUG
setDebugName("CGUIPanel");
#endif
s32 width = rectangle.getWidth();
s32 height = rectangle.getHeight();
core::rect<s32> rct = core::rect<s32>(width - SCROLL_BAR_SIZE,0, width, height);
VScrollBar = environment->addScrollBar(false, rct, 0, id);
VScrollBar->setSubElement(true);
VScrollBar->setTabStop(false);
VScrollBar->setAlignment(EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
VScrollBar->grab();
IGUIElement::addChild(VScrollBar);
rct = core::rect<s32>(0, height - SCROLL_BAR_SIZE, width - SCROLL_BAR_SIZE,height );
HScrollBar = environment->addScrollBar(true, rct, 0, id);
HScrollBar->setSubElement(true);
HScrollBar->setTabStop(false);
HScrollBar->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT);
HScrollBar->grab();
IGUIElement::addChild(HScrollBar);
rct = core::rect<s32>(0,0, width - SCROLL_BAR_SIZE, height - SCROLL_BAR_SIZE);
ClipPane = environment->addTab( rct, 0, -1);
ClipPane->setSubElement(true);
ClipPane->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
ClipPane->grab();
IGUIElement::addChild(ClipPane);
InnerPane = environment->addTab(rct, ClipPane, -1);
InnerPane->setSubElement(true);
InnerPane->grab();
calculateClientArea();
resizeInnerPane();
}
CGUIPanel::~CGUIPanel()
{
// because the inner pane has the list of children, we need to remove the outer ones manually
IGUIElement::removeChild(VScrollBar);
IGUIElement::removeChild(HScrollBar);
IGUIElement::removeChild(ClipPane);
// now we can drop the others
VScrollBar->drop();
HScrollBar->drop();
ClipPane->drop();
InnerPane->drop();
}
void CGUIPanel::draw()
{
if (NeedsUpdate)
{
calculateClientArea();
resizeInnerPane();
NeedsUpdate = false;
}
IGUISkin* skin = Environment->getSkin();
if (Border && skin)
{
skin->draw3DSunkenPane( this, skin->getColor( EGDC_APP_WORKSPACE), false, true, AbsoluteRect, &AbsoluteClippingRect );
}
IGUIElement::draw();
}
void CGUIPanel::addChild(IGUIElement *child)
{
// add the child to the inner pane
InnerPane->addChild(child);
NeedsUpdate = true;
}
void CGUIPanel::removeChild(IGUIElement *child)
{
InnerPane->removeChild(child);
NeedsUpdate = true;
}
//! returns children of the inner pane
const core::list<IGUIElement*>& CGUIPanel::getChildren()
{
return InnerPane->getChildren();
}
bool CGUIPanel::hasBorder() const
{
return Border;
}
void CGUIPanel::setBorder( bool enabled )
{
Border = enabled;
}
IGUIScrollBar* CGUIPanel::getVScrollBar() const
{
return VScrollBar;
}
IGUIScrollBar* CGUIPanel::getHScrollBar() const
{
return HScrollBar;
}
E_SCROLL_BAR_MODE CGUIPanel::getVScrollBarMode() const
{
return VScrollBarMode;
}
void CGUIPanel::setVScrollBarMode( E_SCROLL_BAR_MODE mode )
{
VScrollBarMode = mode;
NeedsUpdate = true;
}
E_SCROLL_BAR_MODE CGUIPanel::getHScrollBarMode() const
{
return HScrollBarMode;
}
void CGUIPanel::setHScrollBarMode(E_SCROLL_BAR_MODE mode)
{
HScrollBarMode = mode;
NeedsUpdate = true;
}
bool CGUIPanel::OnEvent(const SEvent &event)
{
// Redirect mouse wheel to scrollbar
if (event.EventType == EET_MOUSE_INPUT_EVENT && event.MouseInput.Event == EMIE_MOUSE_WHEEL)
{
if (VScrollBar->isVisible())
{
Environment->setFocus(VScrollBar);
VScrollBar->OnEvent(event);
return true;
}
else if (VScrollBar->isVisible())
{
Environment->setFocus(HScrollBar);
HScrollBar->OnEvent(event);
return true;
}
}
else
{
if (event.EventType == EET_GUI_EVENT && event.GUIEvent.EventType == EGET_SCROLL_BAR_CHANGED &&
(event.GUIEvent.Caller == HScrollBar || event.GUIEvent.Caller == VScrollBar) )
{
moveInnerPane();
return true;
}
}
return IGUIElement::OnEvent(event);
}
void CGUIPanel::moveInnerPane()
{
core::dimension2d<s32> dim = InnerPane->getAbsolutePosition().getSize();
core::position2d<s32> newpos(HScrollBar->isVisible() ? -HScrollBar->getPos() : 0 , VScrollBar->isVisible() ? -VScrollBar->getPos() : 0);
core::rect<s32> r(newpos, newpos + dim);
InnerPane->setRelativePosition(r);
}
void CGUIPanel::updateAbsolutePosition()
{
IGUIElement::updateAbsolutePosition();
calculateClientArea();
resizeInnerPane();
}
void CGUIPanel::resizeInnerPane()
{
if (!HScrollBar || !VScrollBar || !InnerPane || !ClipPane)
return;
// get outer pane size
core::rect<s32> outerRect = ClipPane->getRelativePosition();
// resize flexible children depending on outer pane
InnerPane->setRelativePosition(outerRect);
// get desired size (total size of all children)
core::rect<s32> totalRect(0, 0, 0, 0);
core::list<IGUIElement*>::ConstIterator it;
for (it = InnerPane->getChildren().begin();
it != InnerPane->getChildren().end(); ++it)
{
core::rect<s32> rct = (*it)->getRelativePosition();
totalRect.addInternalPoint(rct.UpperLeftCorner);
totalRect.addInternalPoint(rct.LowerRightCorner);
}
// move children if pane needs to grow
core::position2di adjustedMovement(0,0);
if (totalRect.UpperLeftCorner.X < 0)
adjustedMovement.X = -totalRect.UpperLeftCorner.X;
if (totalRect.UpperLeftCorner.Y < 0)
adjustedMovement.Y = -totalRect.UpperLeftCorner.Y;
if (adjustedMovement.X > 0 || adjustedMovement.Y > 0)
{
totalRect += adjustedMovement;
for (it = InnerPane->getChildren().begin();
it != InnerPane->getChildren().end(); ++it )
{
(*it)->move(adjustedMovement);
}
}
// make sure the inner pane is at least as big as the outer
if (totalRect.getWidth() < outerRect.getWidth())
{
totalRect.UpperLeftCorner.X = 0;
totalRect.LowerRightCorner.X = outerRect.getWidth();
}
if (totalRect.getHeight() < outerRect.getHeight())
{
totalRect.UpperLeftCorner.Y = 0;
totalRect.LowerRightCorner.Y = outerRect.getHeight();
}
InnerPane->setRelativePosition(totalRect);
// scrollbars
if ( HScrollBarMode != ESBM_ALWAYS_INVISIBLE &&
(totalRect.getWidth() > outerRect.getWidth() || HScrollBarMode == ESBM_ALWAYS_VISIBLE) )
{
HScrollBar->setVisible(true);
HScrollBar->setMax(totalRect.getWidth() - outerRect.getWidth());
bringToFront(HScrollBar);
}
else
HScrollBar->setVisible(false);
if ( VScrollBarMode != ESBM_ALWAYS_INVISIBLE &&
(totalRect.getHeight() > outerRect.getHeight() || VScrollBarMode == ESBM_ALWAYS_VISIBLE) )
{
VScrollBar->setVisible(true);
VScrollBar->setMax(totalRect.getHeight() - outerRect.getHeight());
bringToFront(VScrollBar);
}
else
VScrollBar->setVisible(false);
// move to adjust for scrollbar pos
moveInnerPane();
}
void CGUIPanel::calculateClientArea()
{
core::rect<s32> ClientArea(0,0, AbsoluteRect.getWidth(),AbsoluteRect.getHeight());
if (VScrollBar->isVisible())
ClientArea.LowerRightCorner.X -= VScrollBar->getRelativePosition().getWidth();
if (HScrollBar->isVisible())
ClientArea.LowerRightCorner.Y -= HScrollBar->getRelativePosition().getHeight();
if (Border)
{
ClientArea.UpperLeftCorner += core::position2d<s32>( BORDER_WIDTH, BORDER_WIDTH );
ClientArea.LowerRightCorner -= core::position2d<s32>( BORDER_WIDTH, BORDER_WIDTH );
}
ClipPane->setRelativePosition(ClientArea);
}
core::rect<s32> CGUIPanel::getClientArea() const
{
return ClipPane->getRelativePosition();
}
void CGUIPanel::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options)
{
IGUIElement::serializeAttributes(out, options);
out->addBool("border", Border);
out->addEnum("horizontalScrollBar", HScrollBarMode, GUIScrollBarModeNames );
out->addEnum("verticalScrollBar", VScrollBarMode, GUIScrollBarModeNames );
}
void CGUIPanel::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
{
IGUIElement::deserializeAttributes(in, options);
setBorder(in->getAttributeAsBool("border"));
setHScrollBarMode((E_SCROLL_BAR_MODE)in->getAttributeAsEnumeration("horizontalScrollBar", GUIScrollBarModeNames));
setVScrollBarMode((E_SCROLL_BAR_MODE)in->getAttributeAsEnumeration("verticalScrollBar", GUIScrollBarModeNames));
}
} // namespace gui
} // namespace irr

128
tools/GUIEditor/CGUIPanel.h Normal file
View File

@ -0,0 +1,128 @@
// Copyright 2006-2012 Asger Feldthaus
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef _C_GUI_PANEL_H_
#define _C_GUI_PANEL_H_
#include "IGUIElement.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
class IGUIScrollBar;
class IGUITab;
enum E_SCROLL_BAR_MODE
{
//! The scrollbar will only show up when needed.
ESBM_AUTOMATIC = 0,
//! The scrollbar will never be visible.
ESBM_ALWAYS_INVISIBLE,
//! The scrollbar will always the visible.
ESBM_ALWAYS_VISIBLE,
//! just a count of how many are in this enum
ESBM_COUNT
};
const c8* const GUIScrollBarModeNames[] =
{
"automatic",
"alwaysInvisible",
"alwaysVisible",
0
};
class CGUIPanel : public IGUIElement
{
public:
CGUIPanel( IGUIEnvironment* environment, IGUIElement* parent, s32 id=-1,
const core::rect<s32>& rectangle = core::rect<s32>(0,0,100,100),
bool border=false,
E_SCROLL_BAR_MODE vMode=ESBM_AUTOMATIC,
E_SCROLL_BAR_MODE hMode=ESBM_ALWAYS_INVISIBLE );
virtual ~CGUIPanel();
//! draws the panel and its children
virtual void draw();
//! returns true if it has a border, false if not
bool hasBorder() const;
//! sets whether the element draws a border
void setBorder(bool enabled);
//! returns a pointer to the vertical scrollbar
IGUIScrollBar* getVScrollBar() const;
//! returns a pointer to the horizontal scrollbar
IGUIScrollBar* getHScrollBar() const;
//! returns the vertical scrollbar visibility rule
E_SCROLL_BAR_MODE getVScrollBarMode() const;
//! sets the vertical scrollbar visibility rule
void setVScrollBarMode(E_SCROLL_BAR_MODE mode);
//! returns the horizontal scrollbar visibility rule
E_SCROLL_BAR_MODE getHScrollBarMode() const;
//! sets the horizontal scrollbar visibility rule
void setHScrollBarMode(E_SCROLL_BAR_MODE mode);
//! returns the visible area inside the panel, excluding scrollbar and border
core::rect<s32> getClientArea() const;
virtual bool OnEvent(const SEvent &event);
//! adds a child to the panel
virtual void addChild(IGUIElement* child);
//! removes a child from the panel
virtual void removeChild(IGUIElement* child);
//! updates the absolute position
virtual void updateAbsolutePosition();
//! returns children of the inner pane
virtual const core::list<IGUIElement*>& getChildren();
//! Returns the type name of the gui element.
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_GUIPANEL];
}
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0);
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0);
protected:
void moveInnerPane();
void resizeInnerPane();
void calculateClientArea();
private:
IGUIScrollBar* VScrollBar;
IGUIScrollBar* HScrollBar;
IGUITab* ClipPane;
IGUITab* InnerPane;
E_SCROLL_BAR_MODE VScrollBarMode;
E_SCROLL_BAR_MODE HScrollBarMode;
bool NeedsUpdate;
bool Border;
};
} // namespace gui
} // namespace irr
#endif

View File

@ -0,0 +1,70 @@
#ifndef __C_GUI_STRING_ATTRIBUTE_H_INCLUDED__
#define __C_GUI_STRING_ATTRIBUTE_H_INCLUDED__
#include "CGUIAttribute.h"
#include "IGUIEditBox.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
class CGUIStringAttribute : public CGUIAttribute
{
public:
//
CGUIStringAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) :
CGUIAttribute(environment, parent, myParentID),
AttribEditBox(0)
{
core::rect<s32> r = getAbsolutePosition();
core::rect<s32> r2(0, Environment->getSkin()->getFont()->getDimension(L"A").Height + 10,
r.getWidth() - 5,
Environment->getSkin()->getFont()->getDimension(L"A").Height*2 + 15 );
AttribEditBox = environment->addEditBox(0, r2, true, this, -1);
AttribEditBox->grab();
AttribEditBox->setSubElement(true);
AttribEditBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
}
virtual ~CGUIStringAttribute()
{
if (AttribEditBox)
AttribEditBox->drop();
}
virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex)
{
AttribEditBox->setText(attribs->getAttributeAsStringW(attribIndex).c_str());
CGUIAttribute::setAttrib(attribs, attribIndex);
}
//! save the attribute and possibly post the event to its parent
virtual bool updateAttrib(bool sendEvent=true)
{
if (!Attribs)
return true;
Attribs->setAttribute(Index, AttribEditBox->getText());
AttribEditBox->setText(Attribs->getAttributeAsStringW(Index).c_str());
return CGUIAttribute::updateAttrib(sendEvent);
}
//! Returns the type name of the gui element.
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_STRINGATTRIBUTE];
}
private:
IGUIEditBox* AttribEditBox;
};
} // namespace gui
} // namespace irr
#endif

View File

@ -0,0 +1,140 @@
#ifndef __C_GUI_TEXTURE_ATTRIBUTE_H_INCLUDED__
#define __C_GUI_TEXTURE_ATTRIBUTE_H_INCLUDED__
#include "CGUIAttribute.h"
#include "IGUIEditBox.h"
#include "IGUIImage.h"
#include "IGUIButton.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
class CGUITextureAttribute : public CGUIAttribute
{
public:
//
CGUITextureAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) :
CGUIAttribute(environment, parent, myParentID),
AttribEditBox(0), AttribImage(0), AttribButton(0)
{
IGUISkin* skin = Environment->getSkin();
core::rect<s32> r = getAbsolutePosition();
s32 topy = skin->getFont()->getDimension(L"A").Height + 10;
s32 h = skin->getFont()->getDimension(L"A").Height + 5;
AttribImage = environment->addImage(0, core::position2di(0, topy), false, this);
AttribImage->setRelativePosition( core::rect<s32>(0,topy, r.getWidth() - 5, 100+topy));
AttribImage->grab();
AttribImage->setSubElement(true);
AttribImage->setScaleImage(true);
AttribImage->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
topy += 105;
core::rect<s32> r2(0, topy, r.getWidth() - 15 - skin->getSize(EGDS_CHECK_BOX_WIDTH), topy + h);
core::rect<s32> br(r.getWidth() - 10 - skin->getSize(EGDS_CHECK_BOX_WIDTH), topy, r.getWidth(), topy + h);
AttribEditBox = environment->addEditBox(0, r2, true, this, -1);
AttribEditBox->grab();
AttribEditBox->setSubElement(true);
AttribEditBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
AttribButton = environment->addButton(br, this, -1, L"...");
AttribButton->grab();
AttribButton->setSubElement(true);
AttribButton->setAlignment(EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
//AttribButton->setSpriteBank(skin->getSpriteBank());
//AttribButton->setSprite(EGBS_BUTTON_UP, skin->getIcon(EGDI_FILE), skin->getColor(EGDC_WINDOW_SYMBOL));
//AttribButton->setSprite(EGBS_BUTTON_DOWN, skin->getIcon(EGDI_FILE), skin->getColor(EGDC_WINDOW_SYMBOL), true);
}
virtual ~CGUITextureAttribute()
{
if (AttribEditBox)
AttribEditBox->drop();
if (AttribImage)
AttribImage->drop();
if (AttribButton)
AttribButton->drop();
}
virtual bool OnEvent(const SEvent &e)
{
if (IsEnabled)
{
switch (e.EventType)
{
case EET_GUI_EVENT:
switch (e.GUIEvent.EventType)
{
case EGET_BUTTON_CLICKED:
// button click: open file dialog
if (e.GUIEvent.Caller == AttribButton)
{
//Environment->addGUIElement("textureBrowser", Environment->getRootGUIElement());
return true;
}
break;
case EGET_FILE_SELECTED:
// file selected: change editbox value and set event
return true;
case EGET_FILE_CHOOSE_DIALOG_CANCELLED:
return true;
default:
break;
}
break;
case EET_KEY_INPUT_EVENT:
return true;
default:
break;
}
}
return CGUIAttribute::OnEvent(e);
}
virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex)
{
AttribEditBox->setText(attribs->getAttributeAsStringW(attribIndex).c_str());
AttribImage->setImage(attribs->getAttributeAsTexture(Index));
CGUIAttribute::setAttrib(attribs, attribIndex);
}
//! save the attribute and possibly post the event to its parent
virtual bool updateAttrib(bool sendEvent=true)
{
if (!Attribs)
return true;
Attribs->setAttribute(Index, AttribEditBox->getText());
core::stringw tmp = Attribs->getAttributeAsStringW(Index);
AttribEditBox->setText(Attribs->getAttributeAsStringW(Index).c_str());
AttribImage->setImage(Attribs->getAttributeAsTexture(Index));
return CGUIAttribute::updateAttrib(sendEvent);
}
//! Returns the type name of the gui element.
virtual const c8* getTypeName() const
{
return GUIEditElementTypeNames[EGUIEDIT_TEXTUREATTRIBUTE];
}
private:
IGUIEditBox* AttribEditBox;
IGUIImage* AttribImage;
IGUIButton* AttribButton;
};
} // namespace gui
} // namespace irr
#endif

View File

@ -0,0 +1,336 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt / Gaz Davidson
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#include "CGUITextureCacheBrowser.h"
#include "IGUIEnvironment.h"
#include "IGUIButton.h"
#include "IGUISkin.h"
#include "IGUIFont.h"
#include "IVideoDriver.h"
namespace irr
{
namespace gui
{
CGUITextureCacheBrowser::CGUITextureCacheBrowser(IGUIEnvironment* environment, s32 id, IGUIElement *parent)
: IGUIWindow(environment, parent, id, core::rect<s32>(0,0,300,200)),
CloseButton(0), Panel(0), SelectedTexture(-1), Dragging(false), IsDraggable(true)
{
#ifdef _DEBUG
setDebugName("CGUITextureCacheBrowser");
#endif
IGUISkin* skin = 0;
IGUISpriteBank* sprites = 0;
video::SColor color(255,255,255,255);
if (environment)
skin = environment->getSkin();
s32 buttonw = 15;
if (skin)
{
buttonw = skin->getSize(EGDS_WINDOW_BUTTON_WIDTH);
sprites = skin->getSpriteBank();
color = skin->getColor(EGDC_WINDOW_SYMBOL);
}
s32 posx = RelativeRect.getWidth() - buttonw - 4;
CloseButton = Environment->addButton(core::rect<s32>(posx, 3, posx + buttonw, 3 + buttonw), this, -1,
L"", skin ? skin->getDefaultText(EGDT_WINDOW_CLOSE) : L"Close" );
CloseButton->setSubElement(true);
CloseButton->setAlignment(EGUIA_LOWERRIGHT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
if (sprites)
{
CloseButton->setSpriteBank(sprites);
CloseButton->setSprite(EGBS_BUTTON_UP, skin->getIcon(EGDI_WINDOW_CLOSE), color);
CloseButton->setSprite(EGBS_BUTTON_DOWN, skin->getIcon(EGDI_WINDOW_CLOSE), color);
}
CloseButton->grab();
// window title
Text = L"Texture Browser";
// panel element
Panel = new CGUIPanel(environment, this);
Panel->setRelativePosition( core::rect<s32>(1, buttonw + 5, 151, RelativeRect.getHeight() - 1));
Panel->setAlignment(EGUIA_UPPERLEFT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT);
Panel->setBorder(true);
Panel->setSubElement(true);
// some buttons
// add images from texture cache
updateImageList();
}
CGUITextureCacheBrowser::~CGUITextureCacheBrowser()
{
if (CloseButton)
CloseButton->drop();
if (Panel)
Panel->drop();
// drop images
u32 i;
for (i=0; i<Images.size(); ++i)
{
Images[i]->drop();
Images[i]->remove();
}
Images.clear();
}
void CGUITextureCacheBrowser::updateImageList()
{
if (!Panel)
return;
video::IVideoDriver* Driver = Environment->getVideoDriver();
// clear images
u32 i;
for (i=0; i<Images.size(); ++i)
{
Images[i]->drop();
Images[i]->remove();
}
Images.clear();
u32 count = (u32)Driver->getTextureCount();
s32 h = Panel->getClientArea().getWidth()-10;
s32 hw = h/2;
core::rect<s32> pos(Panel->getClientArea().getCenter().X - Panel->getAbsolutePosition().UpperLeftCorner.X - hw, 5,
Panel->getClientArea().getCenter().X - Panel->getAbsolutePosition().UpperLeftCorner.X + hw, h+5);
core::position2di moveDist(0, h+5);
for (u32 i=0; i<count; ++i)
{
core::stringw details;
video::ITexture* tex = Driver->getTextureByIndex(i);
details = L"File name: ";
details += tex->getName();
details += L"\nFormat: ";
video::ECOLOR_FORMAT cf = tex->getColorFormat();
bool alpha = false;
switch (cf)
{
case video::ECF_A1R5G5B5:
details += L"A1R5G5B5 (16-bit with 1-bit alpha channel)\n";
alpha = true;
break;
case video::ECF_R5G6B5:
details += L"R5G6B5 (16-bit, no alpha channel)\n";
break;
case video::ECF_R8G8B8:
details += L"R8G8B8 (16-bit, no alpha channel)\n";
break;
case video::ECF_A8R8G8B8:
details += L"R8G8B8 (32-bit with 8-bit alpha channel)\n";
alpha = true;
break;
default:
details += L"Unknown\n";
}
core::dimension2du osize = tex->getOriginalSize();
core::dimension2du size = tex->getOriginalSize();
details += "Size: ";
details += size.Width;
details += "x";
details += size.Height;
if (osize != size)
{
details += "\nOriginal Size: ";
details += osize.Width;
details += "x";
details += osize.Height;
}
details += L"\nMip-maps: ";
if (tex->hasMipMaps())
details += L"Yes\n";
else
details += L"No\n";
IGUIImage* img = Environment->addImage(tex, core::position2di(1,1), alpha, Panel, i);
img->grab();
Images.push_back(img);
img->setRelativePosition(pos);
img->setToolTipText(details.c_str());
img->setScaleImage(true);
img->setColor( SelectedTexture == (s32)i ? video::SColor(255,255,255,255) : video::SColor(128,128,128,128) );
pos = pos + moveDist;
}
}
void CGUITextureCacheBrowser::updateAbsolutePosition()
{
IGUIWindow::updateAbsolutePosition();
updateImageList();
}
//! called if an event happened.
bool CGUITextureCacheBrowser::OnEvent(const SEvent &event)
{
switch(event.EventType)
{
case EET_GUI_EVENT:
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
{
if (event.GUIEvent.Caller == (IGUIElement*)this)
Dragging = false;
return true;
}
else
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
{
if (event.GUIEvent.Caller == CloseButton)
{
remove();
return true;
}
}
break;
case EET_MOUSE_INPUT_EVENT:
switch(event.MouseInput.Event)
{
case EMIE_LMOUSE_PRESSED_DOWN:
DragStart.X = event.MouseInput.X;
DragStart.Y = event.MouseInput.Y;
if (getElementFromPoint(DragStart) == this)
{
if (!Environment->hasFocus(this))
{
Dragging = IsDraggable;
//Environment->setFocus(this);
if (Parent)
Parent->bringToFront(this);
}
return true;
}
else
{
if (Panel->getAbsolutePosition().isPointInside(DragStart))
{
// select an image
IGUIElement* el = Panel->getElementFromPoint(DragStart);
if (el && el != Panel)
{
if (el->getType() == EGUIET_IMAGE)
{
setSelected(el->getID());
}
}
else
{
setSelected();
}
}
}
break;
case EMIE_LMOUSE_LEFT_UP:
Dragging = false;
//Environment->removeFocus(this);
return true;
case EMIE_MOUSE_MOVED:
if (Dragging)
{
// gui window should not be dragged outside its parent
if (Parent)
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
return true;
move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
DragStart.X = event.MouseInput.X;
DragStart.Y = event.MouseInput.Y;
return true;
}
break;
default:
break;
}
default:
break;
}
return Parent ? Parent->OnEvent(event) : false;
}
void CGUITextureCacheBrowser::setSelected(s32 index)
{
SelectedTexture = index;
updateImageList();
printf("Texture %d selected\n", index);
}
void CGUITextureCacheBrowser::draw()
{
if (!IsVisible)
return;
IGUISkin* skin = Environment->getSkin();
core::rect<s32> rect = AbsoluteRect;
core::rect<s32> *cl = &AbsoluteClippingRect;
// draw body fast
rect = skin->draw3DWindowBackground(this, true, skin->getColor(EGDC_ACTIVE_BORDER),
AbsoluteRect, &AbsoluteClippingRect);
// draw window text
if (Text.size())
{
rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X);
rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y);
rect.LowerRightCorner.X -= skin->getSize(EGDS_WINDOW_BUTTON_WIDTH) + 5;
IGUIFont* font = skin->getFont();
if (font)
font->draw(Text.c_str(), rect, skin->getColor(EGDC_ACTIVE_CAPTION), false, true, cl);
}
IGUIElement::draw();
}
bool CGUITextureCacheBrowser::isDraggable() const
{
return IsDraggable;
}
void CGUITextureCacheBrowser::setDraggable(bool draggable)
{
IsDraggable = draggable;
if (Dragging && !IsDraggable)
Dragging = false;
}
//! Returns the rectangle of the drawable area (without border, without titlebar and without scrollbars)
core::rect<s32> CGUITextureCacheBrowser::getClientRect() const
{
return core::recti();
}
} // namespace gui
} // namespace irr

View File

@ -0,0 +1,88 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt / Gaz Davidson
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_GUI_TEXTURE_CACHE_BROWSER_H_INCLUDED__
#define __C_GUI_TEXTURE_CACHE_BROWSER_H_INCLUDED__
#include "IGUIWindow.h"
#include "CGUIPanel.h"
#include "IGUIImage.h"
#include "EGUIEditTypes.h"
namespace irr
{
namespace gui
{
//! Texture cache browser
const u32 TEXTURE_BROWSER_TEXTURE_SELECTED = 0x5E1EC7ED; // custom event number for texture selected
class CGUITextureCacheBrowser : public IGUIWindow
{
public:
//! constructor
CGUITextureCacheBrowser(IGUIEnvironment* environment, s32 id=-1, IGUIElement *parent=0);
//! destructor
~CGUITextureCacheBrowser();
//! event handler
virtual bool OnEvent(const SEvent &event);
//! draws the element
virtual void draw();
//! update absolute position
virtual void updateAbsolutePosition();
//! this shoudln't be serialized, but this is included as it's an example
virtual const c8* getTypeName() const { return "textureCacheBrowser"; }
//! Returns pointer to the close button
virtual IGUIButton* getCloseButton() const { return CloseButton; }
//! Returns pointer to the minimize button
virtual IGUIButton* getMinimizeButton() const { return 0;}
//! Returns pointer to the maximize button
virtual IGUIButton* getMaximizeButton() const { return 0;}
//! get draggable
virtual bool isDraggable() const;
//! get draggable
virtual void setDraggable(bool draggable);
//! not used
virtual core::rect<s32> getClientRect() const;
virtual void setDrawBackground(bool draw) { }
virtual bool getDrawBackground() const { return true; }
virtual void setDrawTitlebar(bool draw) { }
virtual bool getDrawTitlebar() const { return true; }
void setSelected(s32 index=-1);
private:
void updateImageList();
core::array<IGUIImage*> Images;
core::position2d<s32> DragStart;
IGUIButton* CloseButton;
CGUIPanel* Panel;
s32 SelectedTexture;
bool Dragging;
bool IsDraggable;
};
} // end namespace gui
} // end namespace irr
#endif

View File

@ -0,0 +1,99 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#include "CMemoryReadWriteFile.h"
using namespace irr;
using namespace io;
CMemoryReadWriteFile::CMemoryReadWriteFile(const c8* filename)
: Data(), FileName(filename), Pos(0)
{
}
size_t CMemoryReadWriteFile::write(const void* buffer, size_t sizeToWrite)
{
// no point in writing 0 bytes
if (sizeToWrite < 1)
return 0;
// expand size
if (Pos + sizeToWrite > Data.size())
Data.set_used(Pos+sizeToWrite);
// copy data
memcpy( (void*) &Data[Pos], buffer, sizeToWrite);
Pos += sizeToWrite;
return sizeToWrite;
}
bool CMemoryReadWriteFile::seek(long finalPos, bool relativeMovement)
{
if (relativeMovement)
{
if (finalPos + Pos < 0)
return 0;
else
Pos += finalPos;
}
else
{
Pos = finalPos;
}
if (Pos > (s32)Data.size())
Data.set_used(Pos+1);
return true;
}
const io::path& CMemoryReadWriteFile::getFileName() const
{
return FileName;
}
long CMemoryReadWriteFile::getPos() const
{
return Pos;
}
core::array<c8>& CMemoryReadWriteFile::getData()
{
return Data;
}
long CMemoryReadWriteFile::getSize() const
{
return Data.size();
}
size_t CMemoryReadWriteFile::read(void* buffer, size_t sizeToRead)
{
// cant read past the end
if ((size_t)Pos + sizeToRead >= Data.size())
sizeToRead = Data.size() - (size_t)Pos;
// cant read 0 bytes
if (!sizeToRead)
return 0;
// copy data
memcpy( buffer, (void*) &Data[Pos], sizeToRead);
Pos += (long)sizeToRead;
return sizeToRead;
}
bool CMemoryReadWriteFile::flush()
{
return true; // no buffering, nothing to do
}

View File

@ -0,0 +1,76 @@
// Copyright (C) 2002-2012 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#ifndef __C_MEMORY_READ_WRITE_FILE_H_INCLUDED__
#define __C_MEMORY_READ_WRITE_FILE_H_INCLUDED__
#include "IWriteFile.h"
#include "IReadFile.h"
#include "irrArray.h"
#include "irrString.h"
#include "memory.h"
namespace irr
{
namespace io
{
//! Provides write access to an array as if it is a file.
class CMemoryReadWriteFile : public virtual IWriteFile, public virtual IReadFile
{
public:
CMemoryReadWriteFile(const c8* filename=0);
//! Reads an amount of bytes from the file.
//! \param buffer: Pointer to buffer of bytes to write.
//! \param sizeToWrite: Amount of bytes to written to the file.
//! \return Returns how much bytes were written.
virtual size_t write(const void* buffer, size_t sizeToWrite);
//! Changes position in file, returns true if successful.
//! \param finalPos: Destination position in the file.
//! \param relativeMovement: If set to true, the position in the file is
//! changed relative to current position. Otherwise the position is changed
//! from begin of file.
//! \return Returns true if successful, otherwise false.
virtual bool seek(long finalPos, bool relativeMovement = false);
//! Returns size of file.
//! \return Returns the size of the file in bytes.
virtual long getSize() const;
//! Reads an amount of bytes from the file.
//! \param buffer: Pointer to buffer where to read bytes will be written to.
//! \param sizeToRead: Amount of bytes to read from the file.
//! \return Returns how much bytes were read.
virtual size_t read(void* buffer, size_t sizeToRead);
//! Returns the current position in the file.
//! \return Returns the current position in the file in bytes.
virtual long getPos() const;
//! Returns name of file.
//! \return Returns the file name as zero terminated character string.
virtual const io::path& getFileName() const;
//! Flush the content of the buffer in the file
virtual bool flush() _IRR_OVERRIDE_;
//! Returns file data as an array
core::array<c8>& getData();
private:
core::array<c8> Data;
io::path FileName;
long Pos;
};
} // end namespace io
} // end namespace irr
#endif // __C_MEMORY_READ_WRITE_FILE_H_INCLUDED__

View File

@ -0,0 +1,61 @@
#ifndef __C_GUIEDIT_TYPES_H_INCLUDED__
#define __C_GUIEDIT_TYPES_H_INCLUDED__
#include "irrTypes.h"
namespace irr {
namespace gui {
enum EGUIEDIT_ELEMENT_TYPES
{
// GUI Editor
EGUIEDIT_GUIEDIT=0,
EGUIEDIT_GUIEDITWINDOW,
// Generic
EGUIEDIT_GUIPANEL,
EGUIEDIT_TEXTUREBROWSER,
// Attribute editors
EGUIEDIT_ATTRIBUTEEDITOR,
EGUIEDIT_STRINGATTRIBUTE,
EGUIEDIT_BOOLATTRIBUTE,
EGUIEDIT_ENUMATTRIBUTE,
EGUIEDIT_COLORATTRIBUTE,
EGUIEDIT_COLORFATTRIBUTE,
EGUIEDIT_TEXTUREATTRIBUTE,
// Dummy editor stubs
EGUIEDIT_CONTEXTMENUEDITOR,
EGUIEDIT_MENUEDITOR,
EGUIEDIT_FILEDIALOGEDITOR,
EGUIEDIT_COLORDIALOGEDITOR,
EGUIEDIT_MODALSCREENEDITOR,
// Count
EGUIEDIT_COUNT
};
const c8* const GUIEditElementTypeNames[] =
{
"GUIEditor",
"GUIEditWindow",
"panel",
"textureCacheBrowser",
"attributeEditor",
"string_attribute",
"bool_attribute",
"enum_attribute",
"color_attribute",
"colorf_attribute",
"texture_attribute",
// dummy editors
"contextMenu_editor",
"menu_editor",
"fileOpenDialog_editor",
"colorSelectDialog_editor",
"modalScreen_editor",
0
};
} // gui
} // irr
#endif

View File

@ -0,0 +1,217 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{853A396E-C031-4C26-A716-5B4E176BE11D}</ProjectGuid>
<RootNamespace>GUI Editor</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>GUIEditor</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/GUIEditor.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/GUIEditor.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CGUIEditFactory.cpp" />
<ClCompile Include="CGUIEditWindow.cpp" />
<ClCompile Include="CGUIEditWorkspace.cpp" />
<ClCompile Include="CGUITextureCacheBrowser.cpp" />
<ClCompile Include="CGUIAttributeEditor.cpp" />
<ClCompile Include="CGUIPanel.cpp" />
<ClCompile Include="CMemoryReadWriteFile.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CGUIEditFactory.h" />
<ClInclude Include="CGUIEditWindow.h" />
<ClInclude Include="CGUIEditWorkspace.h" />
<ClInclude Include="CGUITextureCacheBrowser.h" />
<ClInclude Include="CGUIAttribute.h" />
<ClInclude Include="CGUIAttributeEditor.h" />
<ClInclude Include="CGUIBoolAttribute.h" />
<ClInclude Include="CGUIColorAttribute.h" />
<ClInclude Include="CGUIEnumAttribute.h" />
<ClInclude Include="CGUIStringAttribute.h" />
<ClInclude Include="CGUITextureAttribute.h" />
<ClInclude Include="CGUIPanel.h" />
<ClInclude Include="CGUIDummyEditorStub.h" />
<ClInclude Include="CMemoryReadWriteFile.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\Irrlicht\Irrlicht10.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="gui">
<UniqueIdentifier>{f6ad9df9-ebaa-4c0f-997b-c8101c1fc669}</UniqueIdentifier>
</Filter>
<Filter Include="gui\GUIAttributes">
<UniqueIdentifier>{7fd14cb1-d2e7-4fd0-85c1-68fc9d1249f7}</UniqueIdentifier>
</Filter>
<Filter Include="gui\Useful GUI Elements">
<UniqueIdentifier>{ab2c3f3a-1d99-4619-b5df-47fdd9449f3f}</UniqueIdentifier>
</Filter>
<Filter Include="gui\Element Editors">
<UniqueIdentifier>{740a4255-37cc-4ac4-94e9-f2f0970491a8}</UniqueIdentifier>
</Filter>
<Filter Include="io">
<UniqueIdentifier>{a28a0b21-3336-432f-9759-ff2dc064874a}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="CGUIEditFactory.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIEditWindow.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIEditWorkspace.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUITextureCacheBrowser.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIAttributeEditor.cpp">
<Filter>gui\GUIAttributes</Filter>
</ClCompile>
<ClCompile Include="CGUIPanel.cpp">
<Filter>gui\Useful GUI Elements</Filter>
</ClCompile>
<ClCompile Include="CMemoryReadWriteFile.cpp">
<Filter>io</Filter>
</ClCompile>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CGUIEditFactory.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIEditWindow.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIEditWorkspace.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUITextureCacheBrowser.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIAttributeEditor.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIBoolAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIColorAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIEnumAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIStringAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUITextureAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIPanel.h">
<Filter>gui\Useful GUI Elements</Filter>
</ClInclude>
<ClInclude Include="CGUIDummyEditorStub.h">
<Filter>gui\Element Editors</Filter>
</ClInclude>
<ClInclude Include="CMemoryReadWriteFile.h">
<Filter>io</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -0,0 +1,217 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{853A396E-C031-4C26-A716-5B4E176BE11D}</ProjectGuid>
<RootNamespace>GUI Editor</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>GUIEditor</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/GUIEditor.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/GUIEditor.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CGUIEditFactory.cpp" />
<ClCompile Include="CGUIEditWindow.cpp" />
<ClCompile Include="CGUIEditWorkspace.cpp" />
<ClCompile Include="CGUITextureCacheBrowser.cpp" />
<ClCompile Include="CGUIAttributeEditor.cpp" />
<ClCompile Include="CGUIPanel.cpp" />
<ClCompile Include="CMemoryReadWriteFile.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CGUIEditFactory.h" />
<ClInclude Include="CGUIEditWindow.h" />
<ClInclude Include="CGUIEditWorkspace.h" />
<ClInclude Include="CGUITextureCacheBrowser.h" />
<ClInclude Include="CGUIAttribute.h" />
<ClInclude Include="CGUIAttributeEditor.h" />
<ClInclude Include="CGUIBoolAttribute.h" />
<ClInclude Include="CGUIColorAttribute.h" />
<ClInclude Include="CGUIEnumAttribute.h" />
<ClInclude Include="CGUIStringAttribute.h" />
<ClInclude Include="CGUITextureAttribute.h" />
<ClInclude Include="CGUIPanel.h" />
<ClInclude Include="CGUIDummyEditorStub.h" />
<ClInclude Include="CMemoryReadWriteFile.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\Irrlicht\Irrlicht11.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="gui">
<UniqueIdentifier>{f6ad9df9-ebaa-4c0f-997b-c8101c1fc669}</UniqueIdentifier>
</Filter>
<Filter Include="gui\GUIAttributes">
<UniqueIdentifier>{7fd14cb1-d2e7-4fd0-85c1-68fc9d1249f7}</UniqueIdentifier>
</Filter>
<Filter Include="gui\Useful GUI Elements">
<UniqueIdentifier>{ab2c3f3a-1d99-4619-b5df-47fdd9449f3f}</UniqueIdentifier>
</Filter>
<Filter Include="gui\Element Editors">
<UniqueIdentifier>{740a4255-37cc-4ac4-94e9-f2f0970491a8}</UniqueIdentifier>
</Filter>
<Filter Include="io">
<UniqueIdentifier>{a28a0b21-3336-432f-9759-ff2dc064874a}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="CGUIEditFactory.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIEditWindow.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIEditWorkspace.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUITextureCacheBrowser.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIAttributeEditor.cpp">
<Filter>gui\GUIAttributes</Filter>
</ClCompile>
<ClCompile Include="CGUIPanel.cpp">
<Filter>gui\Useful GUI Elements</Filter>
</ClCompile>
<ClCompile Include="CMemoryReadWriteFile.cpp">
<Filter>io</Filter>
</ClCompile>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CGUIEditFactory.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIEditWindow.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIEditWorkspace.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUITextureCacheBrowser.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIAttributeEditor.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIBoolAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIColorAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIEnumAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIStringAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUITextureAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIPanel.h">
<Filter>gui\Useful GUI Elements</Filter>
</ClInclude>
<ClInclude Include="CGUIDummyEditorStub.h">
<Filter>gui\Element Editors</Filter>
</ClInclude>
<ClInclude Include="CMemoryReadWriteFile.h">
<Filter>io</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -0,0 +1,217 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{853A396E-C031-4C26-A716-5B4E176BE11D}</ProjectGuid>
<RootNamespace>GUI Editor</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>GUIEditor</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/GUIEditor.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/GUIEditor.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CGUIEditFactory.cpp" />
<ClCompile Include="CGUIEditWindow.cpp" />
<ClCompile Include="CGUIEditWorkspace.cpp" />
<ClCompile Include="CGUITextureCacheBrowser.cpp" />
<ClCompile Include="CGUIAttributeEditor.cpp" />
<ClCompile Include="CGUIPanel.cpp" />
<ClCompile Include="CMemoryReadWriteFile.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CGUIEditFactory.h" />
<ClInclude Include="CGUIEditWindow.h" />
<ClInclude Include="CGUIEditWorkspace.h" />
<ClInclude Include="CGUITextureCacheBrowser.h" />
<ClInclude Include="CGUIAttribute.h" />
<ClInclude Include="CGUIAttributeEditor.h" />
<ClInclude Include="CGUIBoolAttribute.h" />
<ClInclude Include="CGUIColorAttribute.h" />
<ClInclude Include="CGUIEnumAttribute.h" />
<ClInclude Include="CGUIStringAttribute.h" />
<ClInclude Include="CGUITextureAttribute.h" />
<ClInclude Include="CGUIPanel.h" />
<ClInclude Include="CGUIDummyEditorStub.h" />
<ClInclude Include="CMemoryReadWriteFile.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\Irrlicht\Irrlicht11.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="gui">
<UniqueIdentifier>{f6ad9df9-ebaa-4c0f-997b-c8101c1fc669}</UniqueIdentifier>
</Filter>
<Filter Include="gui\GUIAttributes">
<UniqueIdentifier>{7fd14cb1-d2e7-4fd0-85c1-68fc9d1249f7}</UniqueIdentifier>
</Filter>
<Filter Include="gui\Useful GUI Elements">
<UniqueIdentifier>{ab2c3f3a-1d99-4619-b5df-47fdd9449f3f}</UniqueIdentifier>
</Filter>
<Filter Include="gui\Element Editors">
<UniqueIdentifier>{740a4255-37cc-4ac4-94e9-f2f0970491a8}</UniqueIdentifier>
</Filter>
<Filter Include="io">
<UniqueIdentifier>{a28a0b21-3336-432f-9759-ff2dc064874a}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="CGUIEditFactory.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIEditWindow.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIEditWorkspace.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUITextureCacheBrowser.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIAttributeEditor.cpp">
<Filter>gui\GUIAttributes</Filter>
</ClCompile>
<ClCompile Include="CGUIPanel.cpp">
<Filter>gui\Useful GUI Elements</Filter>
</ClCompile>
<ClCompile Include="CMemoryReadWriteFile.cpp">
<Filter>io</Filter>
</ClCompile>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CGUIEditFactory.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIEditWindow.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIEditWorkspace.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUITextureCacheBrowser.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIAttributeEditor.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIBoolAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIColorAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIEnumAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIStringAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUITextureAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIPanel.h">
<Filter>gui\Useful GUI Elements</Filter>
</ClInclude>
<ClInclude Include="CGUIDummyEditorStub.h">
<Filter>gui\Element Editors</Filter>
</ClInclude>
<ClInclude Include="CMemoryReadWriteFile.h">
<Filter>io</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -0,0 +1,217 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{853A396E-C031-4C26-A716-5B4E176BE11D}</ProjectGuid>
<RootNamespace>GUI Editor</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>GUIEditor</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/GUIEditor.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/GUIEditor.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CGUIEditFactory.cpp" />
<ClCompile Include="CGUIEditWindow.cpp" />
<ClCompile Include="CGUIEditWorkspace.cpp" />
<ClCompile Include="CGUITextureCacheBrowser.cpp" />
<ClCompile Include="CGUIAttributeEditor.cpp" />
<ClCompile Include="CGUIPanel.cpp" />
<ClCompile Include="CMemoryReadWriteFile.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CGUIEditFactory.h" />
<ClInclude Include="CGUIEditWindow.h" />
<ClInclude Include="CGUIEditWorkspace.h" />
<ClInclude Include="CGUITextureCacheBrowser.h" />
<ClInclude Include="CGUIAttribute.h" />
<ClInclude Include="CGUIAttributeEditor.h" />
<ClInclude Include="CGUIBoolAttribute.h" />
<ClInclude Include="CGUIColorAttribute.h" />
<ClInclude Include="CGUIEnumAttribute.h" />
<ClInclude Include="CGUIStringAttribute.h" />
<ClInclude Include="CGUITextureAttribute.h" />
<ClInclude Include="CGUIPanel.h" />
<ClInclude Include="CGUIDummyEditorStub.h" />
<ClInclude Include="CMemoryReadWriteFile.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\Irrlicht\Irrlicht11.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="gui">
<UniqueIdentifier>{f6ad9df9-ebaa-4c0f-997b-c8101c1fc669}</UniqueIdentifier>
</Filter>
<Filter Include="gui\GUIAttributes">
<UniqueIdentifier>{7fd14cb1-d2e7-4fd0-85c1-68fc9d1249f7}</UniqueIdentifier>
</Filter>
<Filter Include="gui\Useful GUI Elements">
<UniqueIdentifier>{ab2c3f3a-1d99-4619-b5df-47fdd9449f3f}</UniqueIdentifier>
</Filter>
<Filter Include="gui\Element Editors">
<UniqueIdentifier>{740a4255-37cc-4ac4-94e9-f2f0970491a8}</UniqueIdentifier>
</Filter>
<Filter Include="io">
<UniqueIdentifier>{a28a0b21-3336-432f-9759-ff2dc064874a}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="CGUIEditFactory.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIEditWindow.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIEditWorkspace.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUITextureCacheBrowser.cpp">
<Filter>gui</Filter>
</ClCompile>
<ClCompile Include="CGUIAttributeEditor.cpp">
<Filter>gui\GUIAttributes</Filter>
</ClCompile>
<ClCompile Include="CGUIPanel.cpp">
<Filter>gui\Useful GUI Elements</Filter>
</ClCompile>
<ClCompile Include="CMemoryReadWriteFile.cpp">
<Filter>io</Filter>
</ClCompile>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CGUIEditFactory.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIEditWindow.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIEditWorkspace.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUITextureCacheBrowser.h">
<Filter>gui</Filter>
</ClInclude>
<ClInclude Include="CGUIAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIAttributeEditor.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIBoolAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIColorAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIEnumAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIStringAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUITextureAttribute.h">
<Filter>gui\GUIAttributes</Filter>
</ClInclude>
<ClInclude Include="CGUIPanel.h">
<Filter>gui\Useful GUI Elements</Filter>
</ClInclude>
<ClInclude Include="CGUIDummyEditorStub.h">
<Filter>gui\Element Editors</Filter>
</ClInclude>
<ClInclude Include="CMemoryReadWriteFile.h">
<Filter>io</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="GUI Editor" />
<Option pch_mode="0" />
<Option compiler="gcc" />
<Build>
<Target title="Windows">
<Option platforms="Windows;" />
<Option output="../../bin/win32-gcc/GUIEditor.exe" prefix_auto="0" extension_auto="0" />
<Option type="1" />
<Option compiler="gcc" />
<Option projectResourceIncludeDirsRelation="1" />
<Compiler>
<Add option="-g" />
</Compiler>
<Linker>
<Add directory="../../lib/Win32-gcc" />
</Linker>
</Target>
<Target title="Linux">
<Option platforms="Unix;" />
<Option output="../../bin/Linux/GUIEditor" prefix_auto="0" extension_auto="0" />
<Option type="1" />
<Option compiler="gcc" />
<Option projectResourceIncludeDirsRelation="1" />
<Compiler>
<Add option="-g" />
<Add option="-D_IRR_STATIC_LIB_" />
</Compiler>
<Linker>
<Add library="Irrlicht" />
<Add library="Xxf86vm" />
<Add library="GL" />
<Add library="X11" />
<Add directory="../../lib/Linux" />
</Linker>
</Target>
</Build>
<VirtualTargets>
<Add alias="All" targets="Windows;Linux;" />
</VirtualTargets>
<Compiler>
<Add directory="../../include" />
</Compiler>
<Linker>
<Add library="Irrlicht" />
</Linker>
<Unit filename="CGUIAttribute.h" />
<Unit filename="CGUIAttributeEditor.cpp" />
<Unit filename="CGUIAttributeEditor.h" />
<Unit filename="CGUIBoolAttribute.h" />
<Unit filename="CGUIColorAttribute.h" />
<Unit filename="CGUIEditFactory.cpp" />
<Unit filename="CGUIEditFactory.h" />
<Unit filename="CGUIEditWindow.cpp" />
<Unit filename="CGUIEditWindow.h" />
<Unit filename="CGUIEditWorkspace.cpp" />
<Unit filename="CGUIEditWorkspace.h" />
<Unit filename="CGUIEnumAttribute.h" />
<Unit filename="CGUIPanel.cpp" />
<Unit filename="CGUIPanel.h" />
<Unit filename="CGUIStringAttribute.h" />
<Unit filename="CGUITextureAttribute.h" />
<Unit filename="CGUITextureCacheBrowser.cpp" />
<Unit filename="CGUITextureCacheBrowser.h" />
<Unit filename="CMemoryReadWriteFile.cpp" />
<Unit filename="CMemoryReadWriteFile.h" />
<Unit filename="EGUIEditTypes.h" />
<Unit filename="main.cpp" />
<Extensions>
<code_completion />
<debugger />
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>

43
tools/GUIEditor/Makefile Normal file
View File

@ -0,0 +1,43 @@
# Irrlicht Engine GUIEditor Makefile
Target = GUIEditor
Sources = CGUIAttributeEditor.cpp CGUIEditFactory.cpp CGUIEditWindow.cpp CGUIEditWorkspace.cpp CGUIPanel.cpp CGUITextureCacheBrowser.cpp CMemoryReadWriteFile.cpp main.cpp
CPPFLAGS = -I../../include -I/usr/X11R6/include
CXXFLAGS = -Wall -O3 -ffast-math
ifeq ($(HOSTTYPE), x86_64)
LIBSELECT=64
endif
all: all_linux
# target specific settings
all_linux: SYSTEM=Linux
all_linux: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L../../lib/$(SYSTEM) -lIrrlicht -lGL -lXxf86vm -lXext -lX11
all_win32 clean_win32: SYSTEM=Win32-gcc
all_win32: LDFLAGS = -L../../lib/$(SYSTEM) -lIrrlicht -lopengl32 -lm
# if you enable sound add the proper library for linking
#LDFLAGS += -lIrrKlang
#LDFLAGS += -laudiere
#LDFLAGS += -lSDL_mixer -lSDL
all_win32 clean_win32: SUF=.exe
# name of the binary - only valid for targets which set SYSTEM
DESTPATH = ../../bin/$(SYSTEM)/$(Target)$(SUF)
OBJ = $(Sources:.cpp=.o)
all_linux all_win32: $(OBJ)
$(warning Building...)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $(DESTPATH) $(LDFLAGS)
clean: clean_linux clean_win32
$(warning Cleaning...)
@$(RM) $(OBJ)
clean_linux clean_win32:
@$(RM) $(DESTPATH)
.PHONY: all all_win32 clean clean_linux clean_win32

84
tools/GUIEditor/main.cpp Normal file
View File

@ -0,0 +1,84 @@
#include <irrlicht.h>
#include "driverChoice.h"
// include the gui creator element factory
#include "CGUIEditFactory.h"
using namespace irr;
using namespace gui;
#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#endif
int main()
{
// ask user for driver
video::E_DRIVER_TYPE driverType=driverChoiceConsole(false);
if (driverType==video::EDT_COUNT)
return 1;
IrrlichtDevice *device = createDevice(driverType, core::dimension2du(800, 600));
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
gui::IGUIEnvironment *env = device->getGUIEnvironment();
device->setResizable(true);
/*
first we create the factory which can make new GUI elements
and register it with the gui environment.
*/
IGUIElementFactory* factory = new CGUIEditFactory(env);
env->registerGUIElementFactory(factory);
// remember to drop since we created with a create call
factory->drop();
IGUISkin *skin = env->createSkin(EGST_WINDOWS_METALLIC);
env->setSkin(skin);
IGUIFont *font = env->getFont("../../media/lucida.xml");
if (font)
skin->setFont(font);
skin->drop();
// change transparency of skin
for (s32 i=0; i<gui::EGDC_COUNT ; ++i)
{
video::SColor col = env->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);
col.setAlpha(250);
env->getSkin()->setColor((gui::EGUI_DEFAULT_COLOR)i, col);
}
/*
now we add the GUI Editor Workspace
*/
env->addGUIElement("GUIEditor");
while(device->run())
{
if (!device->isWindowMinimized())
{
const core::dimension2d<u32>& screenSize = driver->getScreenSize();
wchar_t caption[512];
swprintf_irr(caption, 512, L"screen (%4u/%4u)", screenSize.Width, screenSize.Height);
device->setWindowCaption(caption);
driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(0,200,200,200));
smgr->drawAll();
env->drawAll();
driver->endScene();
}
// be nice to CPU
device->sleep(10);
if (!device->isWindowActive())
device->sleep(90);
}
device->closeDevice();
device->drop();
return 0;
}

View File

@ -0,0 +1,801 @@
#include "CFontTool.h"
#include "IXMLWriter.h"
using namespace irr;
const int fontsizes[] = {4,6,8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,56,68,72,0};
inline u32 getTextureSizeFromSurfaceSize(u32 size)
{
u32 ts = 0x01;
while(ts < size)
ts <<= 1;
return ts;
}
// windows specific
#ifdef _IRR_WINDOWS_
const DWORD charsets[] = { ANSI_CHARSET, DEFAULT_CHARSET, OEM_CHARSET, BALTIC_CHARSET, GB2312_CHARSET, CHINESEBIG5_CHARSET,
EASTEUROPE_CHARSET, GREEK_CHARSET, HANGUL_CHARSET, MAC_CHARSET, RUSSIAN_CHARSET,
SHIFTJIS_CHARSET, SYMBOL_CHARSET, TURKISH_CHARSET, VIETNAMESE_CHARSET, JOHAB_CHARSET,
ARABIC_CHARSET, HEBREW_CHARSET, THAI_CHARSET, 0};
const wchar_t *setnames[] = {L"ANSI", L"All Available", L"OEM", L"Baltic", L"Chinese Simplified", L"Chinese Traditional",
L"Eastern European", L"Greek", L"Hangul", L"Macintosh", L"Russian",
L"Japanese", L"Symbol", L"Turkish", L"Vietnamese", L"Johab",
L"Arabic", L"Hebrew", L"Thai", 0};
// callback for adding font names
int CALLBACK EnumFontFamExProc( ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme,
DWORD FontType, LPARAM lParam)
{
CFontTool* t = (CFontTool*) lParam;
t->FontNames.push_back( core::stringw(lpelfe->elfFullName));
return 1;
}
//
// Constructor
//
CFontTool::CFontTool(IrrlichtDevice* device) : FontSizes(fontsizes),
Device(device), UseAlphaChannel(false),
// win specific
dc(0)
{
// init display context
dc = CreateDC(L"DISPLAY", L"DISPLAY", 0 ,0 );
// populate list of available character set names
for (int i=0; setnames[i] != 0; ++i)
CharSets.push_back( core::stringw(setnames[i]));
selectCharSet(0);
}
void CFontTool::selectCharSet(u32 currentCharSet)
{
if ( currentCharSet >= CharSets.size() )
return;
LOGFONTW lf;
lf.lfFaceName[0] = L'\0';
lf.lfCharSet = (BYTE) charsets[currentCharSet];
// HRESULT hr; // no error checking(!)
// clear font list
FontNames.clear();
// create list of available fonts
EnumFontFamiliesExW( dc, (LPLOGFONTW) &lf, (FONTENUMPROCW) EnumFontFamExProc, (LPARAM) this, 0);
}
bool CFontTool::makeBitmapFont(u32 fontIndex, u32 charsetIndex, s32 fontSize, u32 textureWidth, u32 textureHeight, bool bold, bool italic, bool aa, bool alpha)
{
if (fontIndex >= FontNames.size() || charsetIndex >= CharSets.size() )
return false;
UseAlphaChannel = alpha;
u32 currentImage = 0;
// create the font
HFONT font = CreateFontW(
-MulDiv(fontSize, GetDeviceCaps(dc, LOGPIXELSY), 72), 0,
0,0,
bold ? FW_BOLD : 0,
italic, 0,0, charsets[charsetIndex], 0,0,
aa ? ANTIALIASED_QUALITY : 0,
0, FontNames[fontIndex].c_str() );
if (!font)
return false;
SelectObject(dc, font);
SetTextAlign (dc,TA_LEFT | TA_TOP | TA_NOUPDATECP);
// get rid of the current textures/images
for (u32 i=0; i<currentTextures.size(); ++i)
currentTextures[i]->drop();
currentTextures.clear();
for (u32 i=0; i<currentImages.size(); ++i)
currentImages[i]->drop();
currentImages.clear();
// clear current image mappings
CharMap.clear();
// clear array
Areas.clear();
// get information about this font's unicode ranges.
s32 size = GetFontUnicodeRanges( dc, 0);
c8 *buf = new c8[size];
LPGLYPHSET glyphs = (LPGLYPHSET)buf;
GetFontUnicodeRanges( dc, glyphs);
// s32 TotalCharCount = glyphs->cGlyphsSupported;
s32 currentx=0, currenty=0, maxy=0;
for (u32 range=0; range < glyphs->cRanges; range++)
{
WCRANGE* current = &glyphs->ranges[range];
//maxy=0;
// loop through each glyph and write its size and position
for (s32 ch=current->wcLow; ch< current->wcLow + current->cGlyphs; ch++)
{
wchar_t currentchar = ch;
if ( IsDBCSLeadByte((BYTE) ch))
continue; // surrogate pairs unsupported
// get the dimensions
SIZE size;
ABC abc;
GetTextExtentPoint32W(dc, &currentchar, 1, &size);
SFontArea fa;
fa.underhang = 0;
fa.overhang = 0;
if (GetCharABCWidthsW(dc, currentchar, currentchar, &abc)) // for unicode fonts, get overhang, underhang, width
{
size.cx = abc.abcB; // full font width (ignoring padding/underhang )
fa.underhang = abc.abcA; // underhang/padding left - can also be negative (in which case it's overhang left)
fa.overhang = abc.abcC; // overhang/padding right - can also be negative (in which case it's underhand right)
if (abc.abcB-abc.abcA+abc.abcC<1)
continue; // nothing of width 0
}
if (size.cy < 1)
continue;
//GetGlyphOutline(dc, currentchar, GGO_METRICS, &gm, 0, 0, 0);
//size.cx++; size.cy++;
// wrap around?
if (currentx + size.cx > (s32) textureWidth)
{
currenty += maxy;
currentx = 0;
if ((u32)(currenty + maxy) > textureHeight)
{
currentImage++; // increase Image count
currenty=0;
}
maxy = 0;
}
// add this char dimension to the current map
fa.rectangle = core::rect<s32>(currentx, currenty, currentx + size.cx, currenty + size.cy);
fa.sourceimage = currentImage;
CharMap.insert(currentchar, Areas.size());
Areas.push_back( fa );
currentx += size.cx +1;
if (size.cy+1 > maxy)
maxy = size.cy+1;
}
}
currenty += maxy;
u32 lastTextureHeight = getTextureSizeFromSurfaceSize(currenty);
// delete the glyph set
delete [] buf;
currentImages.set_used(currentImage+1);
currentTextures.set_used(currentImage+1);
for (currentImage=0; currentImage < currentImages.size(); ++currentImage)
{
core::stringc logmsg = "Creating image ";
logmsg += (s32) (currentImage+1);
logmsg += " of ";
logmsg += (s32) currentImages.size();
Device->getLogger()->log(logmsg.c_str());
// no need for a huge final texture
u32 texHeight = textureHeight;
if (currentImage == currentImages.size()-1 )
texHeight = lastTextureHeight;
// make a new bitmap
HBITMAP bmp = CreateCompatibleBitmap(dc, textureWidth, texHeight);
HDC bmpdc = CreateCompatibleDC(dc);
LOGBRUSH lbrush;
lbrush.lbColor = RGB(0,0,0);
lbrush.lbHatch = 0;
lbrush.lbStyle = BS_SOLID;
HBRUSH brush = CreateBrushIndirect(&lbrush);
HPEN pen = CreatePen(PS_NULL, 0, 0);
HGDIOBJ oldbmp = SelectObject(bmpdc, bmp);
HGDIOBJ oldbmppen = SelectObject(bmpdc, pen);
HGDIOBJ oldbmpbrush = SelectObject(bmpdc, brush);
HGDIOBJ oldbmpfont = SelectObject(bmpdc, font);
SetTextColor(bmpdc, RGB(255,255,255));
Rectangle(bmpdc, 0,0,textureWidth,texHeight);
SetBkMode(bmpdc, TRANSPARENT);
// draw the letters...
// iterate through the tree
core::map<wchar_t, u32>::Iterator it = CharMap.getIterator();
while (!it.atEnd())
{
s32 currentArea = (*it).getValue();
wchar_t wch = (*it).getKey();
// sloppy but I couldn't be bothered rewriting it
if (Areas[currentArea].sourceimage == currentImage)
{
// draw letter
s32 sx = Areas[currentArea].rectangle.UpperLeftCorner.X - Areas[currentArea].underhang;
TextOutW(bmpdc, sx, Areas[currentArea].rectangle.UpperLeftCorner.Y, &wch, 1);
// if ascii font...
//SetPixel(bmpdc, Areas[currentArea].rectangle.UpperLeftCorner.X, Areas[currentArea].rectangle.UpperLeftCorner.Y, RGB(255,255,0));// left upper corner mark
}
it++;
}
// copy the font bitmap into a new irrlicht image
BITMAP b;
PBITMAPINFO pbmi;
WORD cClrBits;
u32 cformat;
// Retrieve the bitmap color format, width, and height.
GetObject(bmp, sizeof(BITMAP), (LPSTR)&b);
// Convert the color format to a count of bits.
cClrBits = (WORD)(b.bmPlanes * b.bmBitsPixel);
if (cClrBits <= 8) // we're not supporting these
cformat = -1;
else if (cClrBits <= 16)
cformat = video::ECF_A1R5G5B5;
else if (cClrBits <= 24)
cformat = video::ECF_R8G8B8;
else
cformat = video::ECF_A8R8G8B8;
pbmi = (PBITMAPINFO) LocalAlloc(LPTR,
sizeof(BITMAPINFOHEADER));
// Initialize the fields in the BITMAPINFO structure.
pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbmi->bmiHeader.biWidth = b.bmWidth;
pbmi->bmiHeader.biHeight = b.bmHeight;
pbmi->bmiHeader.biPlanes = b.bmPlanes;
pbmi->bmiHeader.biBitCount = b.bmBitsPixel;
// If the bitmap is not compressed, set the BI_RGB flag.
pbmi->bmiHeader.biCompression = BI_RGB;
// Compute the number of bytes in the array of color
// indices and store the result in biSizeImage.
// For Windows NT, the width must be DWORD aligned unless
// the bitmap is RLE compressed. This example shows this.
// For Windows 95/98/Me, the width must be WORD aligned unless the
// bitmap is RLE compressed.
pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * cClrBits +31) & ~31) /8
* pbmi->bmiHeader.biHeight;
// Set biClrImportant to 0, indicating that all of the
// device colors are important.
pbmi->bmiHeader.biClrImportant = 0;
LPBYTE lpBits; // memory pointer
PBITMAPINFOHEADER pbih = (PBITMAPINFOHEADER) pbmi;
lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);
GetDIBits(dc, bmp, 0, (WORD) pbih->biHeight, lpBits, pbmi, DIB_RGB_COLORS);
// DEBUG- copy to clipboard
//OpenClipboard(hWnd);
//EmptyClipboard();
//SetClipboardData(CF_BITMAP, bmp);
//CloseClipboard();
// flip bitmap
s32 rowsize = ((pbmi->bmiHeader.biWidth * cClrBits +31) & ~31) /8;
c8 *row = new c8[rowsize];
for (s32 i=0; i < (pbih->biHeight/2); ++i)
{
// grab a row
memcpy(row, lpBits + (rowsize * i), rowsize);
// swap row
memcpy(lpBits + (rowsize * i), lpBits + ((pbih->biHeight-1 -i) * rowsize ) , rowsize);
memcpy(lpBits + ((pbih->biHeight-1 -i) * rowsize ), row , rowsize);
}
bool ret = false;
if (cformat == video::ECF_A8R8G8B8)
{
// in this case the font should have an alpha channel, but since windows doesn't draw one
// we have to set one manually by going through all the pixels.. *sigh*
u8* m;
for (m = lpBits; m < lpBits + pbih->biSizeImage; m+=4)
{
if (UseAlphaChannel)
{
if (m[0] > 0) // pixel has colour
{
m[3]=m[0]; // set alpha
m[0]=m[1]=m[2] = 255; // everything else is full
}
}
else
m[3]=255; // all pixels are full alpha
}
}
else if (cformat == video::ECF_A1R5G5B5)
{
u8* m;
for (m = lpBits; m < lpBits + pbih->biSizeImage; m+=2)
{
WORD *p = (WORD*)m;
if (m[0] > 0 || !UseAlphaChannel) // alpha should be set
*p |= 0x8000; // set alpha bit
}
}
else
{
cformat = -1;
}
// make a texture from the image
if (cformat != -1)
{
// turn mip-mapping off
bool b = Device->getVideoDriver()->getTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS);
currentImages[currentImage] = Device->getVideoDriver()->createImageFromData((video::ECOLOR_FORMAT)cformat, core::dimension2d<u32>(textureWidth,texHeight), (void*)lpBits);
Device->getVideoDriver()->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS,b);
}
else
{
Device->getLogger()->log("Couldn't create font, your pixel format is unsupported.");
}
// free memory and windows resources
// sloppy I know, but I only intended to create one image at first.
delete [] row;
LocalFree(pbmi);
GlobalFree(lpBits);
DeleteDC(bmpdc);
DeleteObject(brush);
DeleteObject(pen);
DeleteObject(bmp);
if (currentImages[currentImage])
{
// add texture
currentTextures[currentImage] = Device->getVideoDriver()->addTexture("GUIFontImage",currentImages[currentImage]);
currentTextures[currentImage]->grab();
}
else
{
Device->getLogger()->log("Something went wrong, aborting.");
// drop all images
DeleteObject(font);
return false;
}
} // looping through each texture
DeleteObject(font);
return true;
}
#else
CFontTool::CFontTool(IrrlichtDevice *device) : FontSizes(fontsizes), Device(device), UseAlphaChannel(false)
{
if (!XftInitFtLibrary())
{
core::stringc logmsg = "XFT not found\n";
Device->getLogger()->log(logmsg.c_str());
exit(EXIT_FAILURE);
}
/* Get a list of the font foundries, storing them in a set to sort */
std::set<core::stringw> foundries;
Display* display = (Display*)Device->getVideoDriver()->getExposedVideoData().OpenGLLinux.X11Display;
XftFontSet* fonts = XftListFonts(display, DefaultScreen(display), 0, XFT_FOUNDRY, 0);
for (int i = 0; i < fonts->nfont; i++)
{
char *foundry;
XftPatternGetString(fonts->fonts[i], XFT_FOUNDRY, 0, &foundry);
core::stringw tmp(foundry);
foundries.insert(tmp);
}
XftFontSetDestroy(fonts);
/* Copy the sorted list into the array */
CharSets.clear();
for (std::set<core::stringw>::iterator i = foundries.begin(); i != foundries.end(); i++)
CharSets.push_back((*i).c_str());
selectCharSet(0);
}
/* Note: There must be some trick for using strings as pattern parameters to XftListFonts because
no matter how I specify a string, I end up with an intermittent segfault. Since XftFontList is
just calling FcFontList, that's what I'll do too since that works OK */
void CFontTool::selectCharSet(u32 currentCharSet)
{
/* Get a list of the font families, storing them in a set to sort */
char foundry[256];
sprintf(&foundry[0],"%ls",CharSets[currentCharSet].c_str());
std::set<core::stringw> families;
XftPattern *pattern = FcPatternCreate();
XftPatternAddString(pattern, FC_FOUNDRY, &foundry[0]);
XftObjectSet *objectset = FcObjectSetCreate();
XftObjectSetAdd(objectset, XFT_FOUNDRY);
XftObjectSetAdd(objectset, XFT_FAMILY);
FcFontSet *fonts = FcFontList(NULL, pattern, objectset);
for (int i = 0; i < fonts->nfont; i++)
{
char* ptr;
XftPatternGetString(fonts->fonts[i], XFT_FAMILY, 0, &ptr);
core::stringw family(ptr);
families.insert(family);
}
XftPatternDestroy(pattern);
FcObjectSetDestroy(objectset);
/* Copy the sorted list into the array */
FontNames.clear();
for (std::set<core::stringw>::iterator i = families.begin(); i != families.end(); i++)
FontNames.push_back((*i).c_str());
}
bool CFontTool::makeBitmapFont(u32 fontIndex, u32 charsetIndex, s32 fontSize, u32 textureWidth, u32 textureHeight, bool bold, bool italic, bool aa, bool alpha)
{
if (fontIndex >= FontNames.size() || charsetIndex >= CharSets.size() )
return false;
Display *display = (Display*) Device->getVideoDriver()->getExposedVideoData().OpenGLLinux.X11Display;
u32 screen = DefaultScreen(display);
Window win = RootWindow(display, screen);
Visual *visual = DefaultVisual(display, screen);
UseAlphaChannel = alpha;
u32 currentImage = 0;
XftResult result;
XftPattern *request = XftPatternCreate();
char foundry[256], family[256];
sprintf(&foundry[0],"%ls",CharSets[charsetIndex].c_str());
sprintf(&family[0],"%ls",FontNames[fontIndex].c_str());
XftPatternAddString(request, XFT_FOUNDRY, &foundry[0]);
XftPatternAddString(request, XFT_FAMILY, &family[0]);
XftPatternAddInteger(request, XFT_PIXEL_SIZE, fontSize);
XftPatternAddInteger(request, XFT_WEIGHT, bold ? XFT_WEIGHT_BLACK : XFT_WEIGHT_LIGHT);
XftPatternAddInteger(request, XFT_SLANT, italic ? XFT_SLANT_ITALIC : XFT_SLANT_ROMAN);
XftPatternAddBool(request, XFT_ANTIALIAS, aa);
/* Find the closest font that matches the user choices and open it and check if the returned
font has anti aliasing enabled by default, even if it wasn't requested */
FcBool aaEnabled;
XftPattern *found = XftFontMatch(display, DefaultScreen(display), request, &result);
XftPatternGetBool(found, XFT_ANTIALIAS, 0, &aaEnabled);
aa = aaEnabled;
XftFont *font = XftFontOpenPattern(display, found);
// get rid of the current textures/images
for (u32 i=0; i<currentTextures.size(); ++i)
currentTextures[i]->drop();
currentTextures.clear();
for (u32 i=0; i<currentImages.size(); ++i)
currentImages[i]->drop();
currentImages.clear();
CharMap.clear();
Areas.clear();
/* Calculate the max height of the font. Annoyingly, it seems that the height property of the font
is the maximum height of any single character, but a string of characters, aligned along their
baselines, can exceed this figure. Because I don't know any better way of doing it, I'm going to
have to use the brute force method.
Note: There will be a certain number of charters in a font, however they may not be grouped
consecutively, and could in fact be spread out with many gaps */
u32 maxY = 0;
u32 charsFound = 0;
for (FT_UInt charCode = 0; charsFound < FcCharSetCount(font->charset); charCode++)
{
if (!XftCharExists(display, font, charCode))
continue;
charsFound++;
XGlyphInfo extents;
XftTextExtents32(display, font, &charCode, 1, &extents);
if ((extents.xOff <= 0) && (extents.height <= 0))
continue;
/* Calculate the width and height, adding 1 extra pixel if anti aliasing is enabled */
u32 chWidth = extents.xOff + (aa ? 1 : 0);
u32 chHeight = (font->ascent - extents.y + extents.height) + (aa ? 1 : 0);
if (chHeight > maxY)
maxY = chHeight;
/* Store the character details here */
SFontArea fontArea;
fontArea.rectangle = core::rect<s32>(0, 0, chWidth, chHeight);
CharMap.insert(charCode, Areas.size());
Areas.push_back(fontArea);
}
core::stringc logmsg = "Found ";
logmsg += (s32) (CharMap.size() + 1);
logmsg += " characters";
Device->getLogger()->log(logmsg.c_str());
/* Get the size of the chars and allocate them a position on a texture. If the next character that
is added would be outside the width or height of the texture, then a new texture is added */
u32 currentX = 0, currentY = 0, rowY = 0;
for (core::map<wchar_t, u32>::Iterator it = CharMap.getIterator(); !it.atEnd(); it++)
{
s32 currentArea = (*it).getValue();
SFontArea *fontArea = &Areas[currentArea];
u32 chWidth = fontArea->rectangle.LowerRightCorner.X;
u32 chHeight = fontArea->rectangle.LowerRightCorner.Y;
/* If the width of this char will exceed the textureWidth then start a new row */
if ((currentX + chWidth) > textureWidth)
{
currentY += rowY;
currentX = 0;
/* If the new row added to the texture exceeds the textureHeight then start a new texture */
if ((currentY + rowY) > textureHeight)
{
currentImage++;
currentY = 0;
}
rowY = 0;
}
/* Update the area with the current x and y and texture */
fontArea->rectangle = core::rect<s32>(currentX, currentY, currentX + chWidth, currentY + chHeight);
fontArea->sourceimage = currentImage;
currentX += chWidth + 1;
if (chHeight + 1 > rowY)
rowY = chHeight + 1;
}
/* The last row of chars and the last texture weren't accounted for in the loop, so add them here */
currentY += rowY;
u32 lastTextureHeight = getTextureSizeFromSurfaceSize(currentY);
currentImages.set_used(currentImage + 1);
currentTextures.set_used(currentImage + 1);
/* Initialise colours */
XftColor colFore, colBack;
XRenderColor xFore = {0xffff, 0xffff, 0xffff, 0xffff};
XRenderColor xBack = {0x0000, 0x0000, 0x0000, 0xffff};
XftColorAllocValue(display, DefaultVisual(display, screen), DefaultColormap(display, screen), &xFore, &colFore);
XftColorAllocValue(display, DefaultVisual(display, screen), DefaultColormap(display, screen), &xBack, &colBack);
/* Create a pixmap that is large enough to hold any character in the font */
Pixmap pixmap = XCreatePixmap(display, win, textureWidth, maxY, DefaultDepth(display, screen));
XftDraw *draw = XftDrawCreate(display, pixmap, visual, DefaultColormap(display, screen));
/* Render the chars */
for (currentImage = 0; currentImage < currentImages.size(); ++currentImage)
{
core::stringc logmsg = "Creating image ";
logmsg += (s32) (currentImage+1);
logmsg += " of ";
logmsg += (s32) currentImages.size();
Device->getLogger()->log(logmsg.c_str());
/* The last texture that is saved is vertically shrunk to fit the characters drawn on it */
u32 texHeight = textureHeight;
if (currentImage == currentImages.size() - 1)
texHeight = lastTextureHeight;
/* The texture that holds this "page" of characters */
currentImages[currentImage] = Device->getVideoDriver()->createImage(video::ECF_A8R8G8B8, core::dimension2du(textureWidth, texHeight));
currentImages[currentImage]->fill(video::SColor(alpha ? 0 : 255,0,0,0));
for (core::map<wchar_t, u32>::Iterator it = CharMap.getIterator(); !it.atEnd(); it++)
{
FcChar32 wch = (*it).getKey();
s32 currentArea = (*it).getValue();
if (Areas[currentArea].sourceimage == currentImage)
{
SFontArea *fontArea = &Areas[currentArea];
u32 chWidth = fontArea->rectangle.LowerRightCorner.X - fontArea->rectangle.UpperLeftCorner.X;
u32 chHeight = fontArea->rectangle.LowerRightCorner.Y - fontArea->rectangle.UpperLeftCorner.Y;
/* Draw the glyph onto the pixmap */
XGlyphInfo extents;
XftDrawRect(draw, &colBack, 0, 0, chWidth, chHeight);
XftTextExtents32(display, font, &wch, 1, &extents);
XftDrawString32(draw, &colFore, font, extents.x, extents.y, &wch, 1);
/* Convert the pixmap into an image, then copy it onto the Irrlicht texture, pixel by pixel.
There's bound to be a faster way, but this is adequate */
u32 xDest = fontArea->rectangle.UpperLeftCorner.X;
u32 yDest = fontArea->rectangle.UpperLeftCorner.Y + font->ascent - extents.y;
XImage *image = XGetImage(display, pixmap, 0, 0, chWidth, chHeight, 0xffffff, XYPixmap);
if (image)
{
for (u32 ySrc = 0; ySrc < chHeight; ySrc++)
for (u32 xSrc = 0; xSrc < chWidth; xSrc++)
{
/* Get the pixel colour and break it down into rgb components */
u32 col = XGetPixel(image, xSrc, ySrc);
u32 a = 255;
u32 r = col & visual->red_mask;
u32 g = col & visual->green_mask;
u32 b = col & visual->blue_mask;
while (r > 0xff) r >>= 8;
while (g > 0xff) g >>= 8;
while (b > 0xff) b >>= 8;
/* To make the background transparent, set the colour to 100% white and the alpha to
the average of the three rgb colour components to maintain the anti-aliasing */
if (alpha)
{
a = (r + g + b) / 3;
r = 255;
g = 255;
b = 255;
}
currentImages[currentImage]->setPixel(xDest + xSrc,yDest + ySrc,video::SColor(a,r,g,b));
}
image->f.destroy_image(image);
}
}
}
/* Add the texture to the list */
currentTextures[currentImage] = Device->getVideoDriver()->addTexture("GUIFontImage",currentImages[currentImage]);
currentTextures[currentImage]->grab();
}
XftColorFree (display, visual, DefaultColormap(display, screen), &colFore);
XftColorFree (display, visual, DefaultColormap(display, screen), &colBack);
XftFontClose(display,font);
XftPatternDestroy(request);
XftDrawDestroy(draw);
XFreePixmap(display, pixmap);
return true;
}
#endif
CFontTool::~CFontTool()
{
#ifdef _IRR_WINDOWS_
// destroy display context
if (dc)
DeleteDC(dc);
#endif
// drop textures+images
for (u32 i=0; i<currentTextures.size(); ++i)
currentTextures[i]->drop();
currentTextures.clear();
for (u32 i=0; i<currentImages.size(); ++i)
currentImages[i]->drop();
currentImages.clear();
}
bool CFontTool::saveBitmapFont(const c8 *filename, const c8* format)
{
if (currentImages.size() == 0)
{
Device->getLogger()->log("No image data to write, aborting.");
return false;
}
core::stringc fn = filename;
core::stringc imagename = filename;
fn += ".xml";
io::IXMLWriter *writer = Device->getFileSystem()->createXMLWriter(fn.c_str());
// header and line breaks
writer->writeXMLHeader();
writer->writeLineBreak();
// write information
writer->writeElement(L"font", false, L"type", L"bitmap");
writer->writeLineBreak();
writer->writeLineBreak();
// write images and link to them
for (u32 i=0; i<currentImages.size(); ++i)
{
imagename = filename;
imagename += (s32)i;
imagename += ".";
imagename += format;
Device->getVideoDriver()->writeImageToFile(currentImages[i],imagename.c_str());
writer->writeElement(L"Texture", true,
L"index", core::stringw(i).c_str(),
L"filename", core::stringw(imagename.c_str()).c_str(),
L"hasAlpha", UseAlphaChannel ? L"true" : L"false");
writer->writeLineBreak();
}
writer->writeLineBreak();
// write each character
core::map<wchar_t, u32>::Iterator it = CharMap.getIterator();
while (!it.atEnd())
{
SFontArea &fa = Areas[(*it).getValue()];
wchar_t c[2];
c[0] = (*it).getKey();
c[1] = L'\0';
core::stringw area, under, over, image;
area = core::stringw(fa.rectangle.UpperLeftCorner.X);
area += L", ";
area += fa.rectangle.UpperLeftCorner.Y;
area += L", ";
area += fa.rectangle.LowerRightCorner.X;
area += L", ";
area += fa.rectangle.LowerRightCorner.Y;
core::array<core::stringw> names;
core::array<core::stringw> values;
names.clear();
values.clear();
// char
names.push_back(core::stringw(L"c"));
values.push_back(core::stringw(c));
// image number
if (fa.sourceimage != 0)
{
image = core::stringw(fa.sourceimage);
names.push_back(core::stringw(L"i"));
values.push_back(image);
}
// rectangle
names.push_back(core::stringw(L"r"));
values.push_back(area);
if (fa.underhang != 0)
{
under = core::stringw(fa.underhang);
names.push_back(core::stringw(L"u"));
values.push_back(under);
}
if (fa.overhang != 0)
{
over = core::stringw(fa.overhang);
names.push_back(core::stringw(L"o"));
values.push_back(over);
}
writer->writeElement(L"c", true, names, values);
writer->writeLineBreak();
it++;
}
writer->writeClosingTag(L"font");
writer->drop();
Device->getLogger()->log("Bitmap font saved.");
return true;
}

View File

@ -0,0 +1,78 @@
#ifndef __IRR_FONT_TOOL_INCLUDED__
#define __IRR_FONT_TOOL_INCLUDED__
#include "irrlicht.h"
#if defined(_IRR_WINDOWS_)
#ifdef _MBCS
#undef _MBCS
#endif
#define UNICODE
#define _WIN32_WINNT 0x0500
#include "windows.h"
#else
#ifdef _IRR_COMPILE_WITH_X11_
#include <X11/Xlib.h>
#endif
#include <X11/Xft/Xft.h>
#include <set>
#endif
namespace irr {
class CFontTool : public irr::IReferenceCounted
{
public:
CFontTool(irr::IrrlichtDevice* device);
~CFontTool();
virtual bool makeBitmapFont(u32 fontIndex, u32 charsetIndex,
s32 fontSize, u32 texturewidth, u32 textureHeight,
bool bold, bool italic, bool aa, bool alpha);
virtual bool saveBitmapFont(const c8* filename, const c8* format);
virtual void selectCharSet(u32 currentCharSet);
struct SFontArea
{
SFontArea() : rectangle(), underhang(0), overhang(0), sourceimage(0) {}
core::rect<s32> rectangle;
s32 underhang;
s32 overhang;
u32 sourceimage;
};
/* struct SFontMap
{
SFontMap() : areas(), start(0), count(0) {}
core::array< SFontArea > areas;
s32 start;
s32 count;
};*/
core::array<core::stringw> FontNames;
core::array<core::stringw> CharSets;
//core::array<SFontMap> Mappings;
core::array<SFontArea> Areas;
core::map<wchar_t, u32> CharMap;
core::array<video::ITexture*> currentTextures;
core::array<video::IImage*> currentImages;
const int *FontSizes;
IrrlichtDevice *Device;
bool UseAlphaChannel;
// windows
#ifdef _IRR_WINDOWS_
HDC dc;
#endif
};
}
#endif // __IRR_FONT_TOOL_INCLUDED__

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
# Makefile for Irrlicht Examples
# It's usually sufficient to change just the target name and source file list
# and be sure that CXX is set to a valid compiler
Target = FontTool
Sources = CFontTool.cpp main.cpp
# general compiler settings
CPPFLAGS = -I../../../include -I/usr/X11R6/include -I/usr/include/freetype2/
CXXFLAGS = -O3 -ffast-math
#CXXFLAGS = -g -Wall
#default target is Linux
all: all_linux
ifeq ($(HOSTTYPE), x86_64)
LIBSELECT=64
endif
# target specific settings
all_linux: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L../../../lib/Linux -lIrrlicht -lGL -lXxf86vm -lXext -lX11 -lXft -lfontconfig
all_linux clean_linux: SYSTEM=Linux
all_win32: LDFLAGS = -L../../../lib/Win32-gcc -lIrrlicht -lgdi32 -lopengl32 -lglu32 -lm
all_win32 clean_win32: SYSTEM=Win32-gcc
all_win32 clean_win32: SUF=.exe
# name of the binary - only valid for targets which set SYSTEM
DESTPATH = ../../../bin/$(SYSTEM)/$(Target)$(SUF)
all_linux all_win32:
$(warning Building...)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS)
clean: clean_linux clean_win32
$(warning Cleaning...)
clean_linux clean_win32:
@$(RM) $(DESTPATH)
.PHONY: all all_win32 clean clean_linux clean_win32

View File

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>FontTool</ProjectName>
<ProjectGuid>{4D53E40F-37E3-42B1-8848-F4C6F8313A17}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win32-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win64-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win32-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win64-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CFontTool.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CFontTool.h" />
<ClInclude Include="CVectorFontTool.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\source\Irrlicht\Irrlicht10.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>FontTool</ProjectName>
<ProjectGuid>{4D53E40F-37E3-42B1-8848-F4C6F8313A17}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win32-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win64-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win32-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win64-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CFontTool.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CFontTool.h" />
<ClInclude Include="CVectorFontTool.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\source\Irrlicht\Irrlicht11.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>FontTool</ProjectName>
<ProjectGuid>{4D53E40F-37E3-42B1-8848-F4C6F8313A17}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win32-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win64-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win32-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win64-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CFontTool.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CFontTool.h" />
<ClInclude Include="CVectorFontTool.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\source\Irrlicht\Irrlicht11.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>FontTool</ProjectName>
<ProjectGuid>{4D53E40F-37E3-42B1-8848-F4C6F8313A17}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win32-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win64-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win32-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib gdi32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../../bin/Win64-visualstudio/FontTool.exe</OutputFile>
<AdditionalLibraryDirectories>../../../lib/Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CFontTool.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CFontTool.h" />
<ClInclude Include="CVectorFontTool.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\source\Irrlicht\Irrlicht11.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,493 @@
/*
Tool for creating Irrlicht bitmap+vector fonts,
started by Gaz Davidson in December 2006
Due to my laziness and Microsoft's unintuitive API, surrogate pairs and
nonspacing diacritical marks are not supported!
Linux bitmap font support added by Neil Burlock Oct 2008
Note: Xft/Freetype2 is used to render the fonts under X11. Anti-aliasing
is controlled by the system and cannot be overriden by an application,
so fonts that are rendered will be aliased or anti-aliased depending
on the system that they are created on.
*/
#include <irrlicht.h>
#include <iostream>
#include "CFontTool.h"
#include "CVectorFontTool.h"
#include "ITexture.h"
using namespace irr;
using namespace gui;
#pragma comment(lib, "Irrlicht.lib")
const s32 texturesizes[] = {128, 256, 512, 1024, 2048, 4096, 0};
const wchar_t *fileformats[] = { L"bmp", L"ppm", 0 }; // bitmap font formats
const wchar_t *alphafileformats[] = { L"png", L"tga", 0 }; // bitmap font formats which support alpha channels
const wchar_t *vectorfileformats[] = { L"xml", L"bin", 0 }; // file formats for vector fonts
const wchar_t *warntext = L"Legal Notice\n"
L"------------\n\n"
L"When making bitmap and vector fonts, you should consider the potential legal "
L"issues with redistributing the fonts with your software; this tool basically "
L"copies font data and some authors might not like this!\n"
L"If you purchased fonts or they came with an application or your OS, you'll have"
L"to check the license to see what restrictions are placed on making derivative works.\n\n"
L"PD and the OFL\n"
L"--------------\n\n"
L"You'll find lots of fonts on the web listed as Public Domain, you can do what you like "
L"with these.\n"
L"Many fonts are released under the Open Font License, which is a 'viral' open source "
L"license like the GPL. It's worth reading the license here: http://scripts.sil.org/OFL\n"
L"The most important restrictions are- you must include the original font's license, you "
L"can't stop your users from using or distributing the font, the font must have a "
L"different name the original.\n\n"
L"Some free fonts can be found here- www.openfontlibrary.org\n"
L"http://savannah.nongnu.org/projects/freefont/";
const wchar_t *helptext = L"This tool creates bitmap fonts for the Irrlicht Engine\n\n"
L"First select a character encoding from the list, then choose the font, "
L"size, and whether you'd like bold, italic, antialiasing and an alpha channel. "
L"In Windows, antialiasing will be ignored for small fonts\n\n"
L"Then select a texture width and height. If the output exceeds this then more than "
L"one image will be created. You can use the scrollbar at the top of the screen to "
L"preview them. Most modern graphics cards will support up to 2048x2048, "
L"keep in mind that more images means worse performance when drawing text!\n\n"
L"If you want a vector font rather than a bitmap font, check the vector box. "
L"Vector fonts are stored in system memory while bitmap fonts are in video ram\n\n"
L"Click create to preview your font, this may take lots of time and memory "
L"when making a font with a lot of characters, please be patient!\n\n"
L"Now you're ready to give your font a name, select a format and click save.\n\n"
L"To load your font in Irrlicht, simply use env->getFont(\"Myfont.xml\");\n\n"
L"That's all, have fun :-)";
#ifdef _IRR_WINDOWS_
const wchar_t *completeText = L"Font created";
#else
const wchar_t *completeText = L"Font created\n\n"
L"Please note that anti-aliasing under X11 is controlled by the system "
L"configuration, so if your system is set to use anti-aliasing, then so "
L"will any fonts you create with FontTool";
#endif
enum MYGUI
{
MYGUI_CHARSET = 100,
MYGUI_FONTNAME,
MYGUI_SIZE,
MYGUI_TEXWIDTH,
MYGUI_TEXHEIGHT,
MYGUI_BOLD,
MYGUI_ITALIC,
MYGUI_ANTIALIAS,
MYGUI_ALPHA,
MYGUI_VECTOR,
MYGUI_FILENAME,
MYGUI_FORMAT,
MYGUI_CREATE,
MYGUI_SAVE,
MYGUI_IMAGE,
MYGUI_CURRENTIMAGE,
MYGUI_HELPBUTTON
};
// event reciever
class MyEventReceiver : public IEventReceiver
{
public:
MyEventReceiver(IrrlichtDevice* device, CFontTool*& fonttool, CVectorFontTool* &vectool) :
Device(device), FontTool(fonttool), VecTool(vectool)
{
device->setEventReceiver(this);
}
virtual bool OnEvent(const SEvent &event)
{
if (event.EventType == EET_GUI_EVENT)
{
s32 id = event.GUIEvent.Caller->getID();
IGUIEnvironment* env = Device->getGUIEnvironment();
switch(event.GUIEvent.EventType)
{
case EGET_SCROLL_BAR_CHANGED:
if (id == MYGUI_CURRENTIMAGE)
{
IGUIImage* img = (IGUIImage*)env->getRootGUIElement()->getElementFromId(MYGUI_IMAGE,true);
s32 i = ((IGUIScrollBar*)event.GUIEvent.Caller)->getPos();
img->setImage(FontTool->currentTextures[i]);
return true;
}
break;
case EGET_COMBO_BOX_CHANGED:
if (id == MYGUI_CHARSET)
{
IGUIComboBox* cbo = (IGUIComboBox*)event.GUIEvent.Caller;
FontTool->selectCharSet(cbo->getSelected());
// rebuild font list
cbo = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_FONTNAME,true);
cbo->clear();
for (u32 i=0; i < FontTool->FontNames.size(); ++i)
cbo->addItem(FontTool->FontNames[i].c_str());
return true;
}
break;
case EGET_CHECKBOX_CHANGED:
if (id == MYGUI_VECTOR)
{
IGUICheckBox* chk = (IGUICheckBox*)event.GUIEvent.Caller;
IGUIComboBox *cbo = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_FORMAT,true);
cbo->clear();
if (chk->isChecked() && VecTool)
{
// vector formats
for (s32 i=0; fileformats[i] != 0; ++i)
cbo->addItem( core::stringw(vectorfileformats[i]).c_str());
}
else
{
// bitmap formats
if (!FontTool->UseAlphaChannel)
{
// add non-alpha formats
for (s32 i=0; fileformats[i] != 0; ++i)
cbo->addItem( core::stringw(fileformats[i]).c_str());
}
// add formats which support alpha
for (s32 i=0; alphafileformats[i] != 0; ++i)
cbo->addItem( core::stringw(alphafileformats[i]).c_str());
}
}
break;
case EGET_BUTTON_CLICKED:
if (id == MYGUI_CREATE)
{
// create the font with the params
IGUIComboBox* cbo = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_CHARSET, true);
int charset = cbo->getSelected();
cbo = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_FONTNAME,true);
int fontname = cbo->getSelected();
cbo = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_SIZE,true);
int fontsize = cbo->getSelected();
cbo = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_TEXWIDTH,true);
int texwidth = cbo->getSelected();
cbo = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_TEXHEIGHT,true);
int texheight = cbo->getSelected();
IGUICheckBox* chk = (IGUICheckBox*)env->getRootGUIElement()->getElementFromId(MYGUI_BOLD,true);
bool bold = chk->isChecked();
chk = (IGUICheckBox*)env->getRootGUIElement()->getElementFromId(MYGUI_ITALIC,true);
bool italic = chk->isChecked();
chk = (IGUICheckBox*)env->getRootGUIElement()->getElementFromId(MYGUI_ALPHA,true);
bool alpha = chk->isChecked();
chk = (IGUICheckBox*)env->getRootGUIElement()->getElementFromId(MYGUI_ANTIALIAS,true);
bool aa = chk->isChecked();
// vector fonts disabled
//chk = (IGUICheckBox*)env->getRootGUIElement()->getElementFromId(MYGUI_VECTOR,true);
bool vec = false;//chk->isChecked();
FontTool->makeBitmapFont(fontname, charset, FontTool->FontSizes[fontsize], texturesizes[texwidth], texturesizes[texheight], bold, italic, aa, alpha);
IGUIScrollBar* scrl = (IGUIScrollBar*)env->getRootGUIElement()->getElementFromId(MYGUI_CURRENTIMAGE,true);
scrl->setMax(FontTool->currentTextures.size() == 0 ? 0 : FontTool->currentTextures.size()-1);
if (FontTool->currentTextures.size() > 0)
{
IGUIImage* img = (IGUIImage*)env->getRootGUIElement()->getElementFromId(MYGUI_IMAGE,true);
img->setImage(FontTool->currentTextures[0]);
scrl->setPos(0);
}
// make sure users pick a file format that supports alpha channel
cbo = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_FORMAT,true);
cbo->clear();
if (vec)
{
// add vector formats
for (s32 i=0; fileformats[i] != 0; ++i)
cbo->addItem( core::stringw(vectorfileformats[i]).c_str());
}
else
{
if (!alpha)
{
// add non-alpha formats
for (s32 i=0; fileformats[i] != 0; ++i)
cbo->addItem( core::stringw(fileformats[i]).c_str());
}
// add formats which support alpha
for (s32 i=0; alphafileformats[i] != 0; ++i)
cbo->addItem( core::stringw(alphafileformats[i]).c_str());
}
if (VecTool)
{
delete VecTool;
VecTool = 0;
}
if (vec)
{
VecTool = new CVectorFontTool(FontTool);
}
/* Message box letting the user know the process is complete */
env->addMessageBox(L"Create", completeText);
return true;
}
if (id == MYGUI_SAVE)
{
IGUIEditBox *edt = (IGUIEditBox*)env->getRootGUIElement()->getElementFromId(MYGUI_FILENAME,true);
core::stringc name = edt->getText();
IGUIComboBox *fmt = (IGUIComboBox*)env->getRootGUIElement()->getElementFromId(MYGUI_FORMAT,true);
core::stringc format = fmt->getItem(fmt->getSelected());
// vector fonts disabled
IGUICheckBox *chk = (IGUICheckBox*)env->getRootGUIElement()->getElementFromId(MYGUI_VECTOR,true);
bool vec = false; // chk->isChecked();
if (vec && VecTool)
VecTool->saveVectorFont(name.c_str(), format.c_str());
else
FontTool->saveBitmapFont(name.c_str(), format.c_str());
return true;
}
if (id == MYGUI_HELPBUTTON)
{
env->addMessageBox(L"Irrlicht Unicode Font Tool", helptext);
return true;
}
break;
}
}
return false;
}
IrrlichtDevice* Device;
CFontTool* FontTool;
CVectorFontTool* VecTool;
};
void createGUI(IrrlichtDevice* device, CFontTool* fc)
{
gui::IGUIEnvironment *env = device->getGUIEnvironment();
// change transparency of skin
for (s32 i=0; i<gui::EGDC_COUNT ; ++i)
{
video::SColor col = env->getSkin()->getColor((gui::EGUI_DEFAULT_COLOR)i);
col.setAlpha(255);
env->getSkin()->setColor((gui::EGUI_DEFAULT_COLOR)i, col);
}
IGUIWindow *win = env->addWindow( core::rect<s32>(10,10,200,500), false, L"Font Creator");
win->getCloseButton()->setVisible(false);
s32 xs=10,xp=xs, yp=30, h=20;
env->addStaticText(L"Charset", core::rect<s32>(xp,yp,50,yp+h),false,false, win);
xp+=60;
// charset combo
gui::IGUIComboBox* cbo = env->addComboBox( core::rect<s32>(xp,yp,180,yp+h),win, MYGUI_CHARSET);
for (u32 i=0; i < fc->CharSets.size(); ++i)
cbo->addItem(fc->CharSets[i].c_str());
yp += (s32)(h*1.5f);
xp = xs;
env->addStaticText(L"Font", core::rect<s32>(xp,yp,50,yp+h),false,false, win);
xp+=60;
// font name combo
cbo = env->addComboBox( core::rect<s32>(xp,yp,180,yp+h),win, MYGUI_FONTNAME);
for (u32 i=0; i < fc->FontNames.size(); ++i)
cbo->addItem(fc->FontNames[i].c_str());
yp += (s32)(h*1.5f);
xp = xs;
env->addStaticText(L"Size", core::rect<s32>(xp,yp,50,yp+h),false,false, win);
xp += 60;
// font size combo
cbo = env->addComboBox( core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_SIZE);
for (s32 i=0; fc->FontSizes[i] != 0; ++i)
cbo->addItem( ((core::stringw(fc->FontSizes[i])) + L"px").c_str());
xp = xs;
yp += (s32)(h*1.5f);
// bold checkbox
env->addCheckBox(false, core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_BOLD, L"Bold");
xp += 45;
// italic checkbox
env->addCheckBox(false, core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_ITALIC, L"Italic");
xp += 45;
// AA checkbox
env->addCheckBox(false, core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_ANTIALIAS, L"AA");
xp +=40;
// Alpha checkbox
env->addCheckBox(false, core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_ALPHA, L"Alpha");
xp = xs;
yp += (s32)(h*1.5f);
/*
// vector fonts can't be loaded yet
env->addCheckBox(false, core::rect<s32>(xp,yp,xp+200,yp+h),win, MYGUI_VECTOR, L"Vector Font");
*/
yp += (s32)(h*1.5f);
env->addStaticText(L"Max Width:", core::rect<s32>(xp,yp,50,yp+h),false,false, win);
xp += 60;
// texture widths
cbo = env->addComboBox( core::rect<s32>(xp,yp,xp+70,yp+h),win, MYGUI_TEXWIDTH);
for (s32 i=0; texturesizes[i] != 0; ++i)
cbo->addItem( ((core::stringw(texturesizes[i])) + L" wide").c_str());
xp=xs;
yp += (s32)(h*1.5f);
env->addStaticText(L"Max Height:", core::rect<s32>(xp,yp,60,yp+h),false,false, win);
xp += 60;
// texture height
cbo = env->addComboBox( core::rect<s32>(xp,yp,xp+70,yp+h),win, MYGUI_TEXHEIGHT);
for (s32 i=0; texturesizes[i] != 0; ++i)
cbo->addItem( ((core::stringw(texturesizes[i])) + L" tall").c_str());
// file name
xp = xs;
yp += (s32)(h*1.5f);
env->addStaticText(L"Filename", core::rect<s32>(xp,yp,60,yp+h),false,false, win);
xp += 60;
env->addEditBox(L"myfont",core::rect<s32>(xp,yp,xp+70,yp+h), true, win, MYGUI_FILENAME);
// file format
xp = xs;
yp += (s32)(h*1.5f);
env->addStaticText(L"File Format", core::rect<s32>(xp,yp,60,yp+h),false,false, win);
xp += 60;
cbo = env->addComboBox( core::rect<s32>(xp,yp,xp+70,yp+h),win, MYGUI_FORMAT);
for (s32 i=0; fileformats[i] != 0; ++i)
cbo->addItem( core::stringw(fileformats[i]).c_str());
for (s32 i=0; alphafileformats[i] != 0; ++i)
cbo->addItem( core::stringw(alphafileformats[i]).c_str());
xp = xs;
yp += h*2;
// create button
env->addButton( core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_CREATE, L"Create");
xp += 60;
// save button
env->addButton( core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_SAVE, L"Save");
xp += 60;
// help button
env->addButton( core::rect<s32>(xp,yp,xp+50,yp+h),win, MYGUI_HELPBUTTON, L"Help");
// font image
gui::IGUIImage *img = env->addImage(0, core::position2d<s32>(0,0), true,0, MYGUI_IMAGE);
img->setRelativePosition(core::rect<s32>(0,20,800,600));
// font scrollbar
IGUIScrollBar *scrl= env->addScrollBar(true,core::rect<s32>(0,0,800,20),0, MYGUI_CURRENTIMAGE);
scrl->setMax(0);
scrl->setSmallStep(1);
yp += h*3;
env->getRootGUIElement()->bringToFront(win);
win->setRelativePosition( core::rect<s32>(10,10,200,yp));
}
int main()
{
IrrlichtDevice* device =createDevice(video::EDT_OPENGL, core::dimension2du(800, 600));
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
gui::IGUIEnvironment *env = device->getGUIEnvironment();
// create font tool
CFontTool *fc = new CFontTool(device);
CVectorFontTool *vc = 0;
IEventReceiver *events = new MyEventReceiver(device,fc,vc);
createGUI(device, fc);
while(device->run())
{
if (device->isWindowActive())
{
driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(0,200,200,200));
smgr->drawAll();
env->drawAll();
driver->endScene();
}
}
// drop the font tool and resources
fc->drop();
device->drop();
return 0;
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,16 @@
There are two tools available for creating fonts for irrlicht, both are supported.
oldFontTool:
only works in Windows, creates a simple image file containing all data for displaying fonts.
Those file contain no alpha informations and are limited in their character set.
use the IrrFontTool.exe file in this directory.
newFontTool:
a more sophisticated font tool supporting alpha channels, anti aliasing,
different character sets, vector fonts and other operating systems than
just windows. It will create multiple image files and an .xml file
containing meta information for the generated font.
You can find it as FontTool.exe in the /bin directory.
A third tool to create fonts for Irrlicht is web-based on maintained by armen:
http://armen138.me/FontMapper/

View File

@ -0,0 +1,38 @@
# Makefile for Irrlicht Examples
# It's usually sufficient to change just the target name and source file list
# and be sure that CXX is set to a valid compiler
Target = MeshConverter
Sources = main.cpp
# general compiler settings
CPPFLAGS = -I../../include -I/usr/X11R6/include
CXXFLAGS = -O3 -ffast-math -Wall
#CXXFLAGS = -g -Wall
#default target is Linux
all: all_linux
ifeq ($(HOSTTYPE), x86_64)
LIBSELECT=64
endif
# target specific settings
all_linux: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L../../lib/Linux -lIrrlicht -lGL -lXxf86vm -lXext -lX11
all_linux clean_linux: SYSTEM=Linux
all_win32: LDFLAGS = -L../../lib/Win32-gcc -lIrrlicht -lopengl32 -lglu32 -lm
all_win32 clean_win32: SYSTEM=Win32-gcc
all_win32 clean_win32: SUF=.exe
# name of the binary - only valid for targets which set SYSTEM
DESTPATH = ../../bin/$(SYSTEM)/$(Target)$(SUF)
all_linux all_win32:
$(warning Building...)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS)
clean: clean_linux clean_win32
$(warning Cleaning...)
clean_linux clean_win32:
@$(RM) $(DESTPATH)
.PHONY: all all_win32 clean clean_linux clean_win32

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="Mesh Converter" />
<Option pch_mode="0" />
<Option compiler="gcc" />
<Build>
<Target title="Linux">
<Option platforms="Unix;" />
<Option output="../../bin/Linux/MeshConverter" prefix_auto="0" extension_auto="0" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
<Add option="-D_IRR_STATIC_LIB_" />
</Compiler>
<Linker>
<Add library="Xxf86vm" />
<Add library="GL" />
<Add library="X11" />
<Add directory="../../lib/Linux" />
</Linker>
</Target>
<Target title="Windows">
<Option platforms="Windows;" />
<Option output="../../bin/Win32-gcc/MeshConverter" prefix_auto="0" extension_auto="1" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
<Linker>
<Add directory="../../lib/Win32-gcc" />
</Linker>
</Target>
</Build>
<VirtualTargets>
<Add alias="All" targets="Windows;Linux;" />
</VirtualTargets>
<Compiler>
<Add option="-g" />
<Add directory="../../include" />
</Compiler>
<Linker>
<Add library="Irrlicht" />
</Linker>
<Unit filename="main.cpp" />
<Extensions>
<code_completion />
<debugger />
<envvars />
</Extensions>
</Project>
</CodeBlocks_project_file>

View File

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>MeshConverter</ProjectName>
<ProjectGuid>{E72B637E-4AA6-46F3-885F-AC67B4B470ED}</ProjectGuid>
<RootNamespace>GUI Editor</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../bin/Win32-visualstudio/MeshConverter.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../bin/Win64-visualstudio/MeshConverter.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)TestProject.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>Full</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/MeshConverter.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>Full</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<OutputFile>../../bin/Win64-visualstudio/MeshConverter.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\Irrlicht\Irrlicht10.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,196 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>MeshConverter</ProjectName>
<ProjectGuid>{E72B637E-4AA6-46F3-885F-AC67B4B470ED}</ProjectGuid>
<RootNamespace>GUI Editor</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../bin/Win32-visualstudio/MeshConverter.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)TestProject.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../bin/Win64-visualstudio/MeshConverter.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)TestProject.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>Full</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/MeshConverter.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>Full</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<OutputFile>../../bin/Win64-visualstudio/MeshConverter.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\Irrlicht\Irrlicht10.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,196 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>MeshConverter</ProjectName>
<ProjectGuid>{E72B637E-4AA6-46F3-885F-AC67B4B470ED}</ProjectGuid>
<RootNamespace>GUI Editor</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../bin/Win32-visualstudio/MeshConverter.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)TestProject.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../bin/Win64-visualstudio/MeshConverter.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)TestProject.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>Full</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/MeshConverter.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>Full</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<OutputFile>../../bin/Win64-visualstudio/MeshConverter.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\Irrlicht\Irrlicht10.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,196 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>MeshConverter</ProjectName>
<ProjectGuid>{E72B637E-4AA6-46F3-885F-AC67B4B470ED}</ProjectGuid>
<RootNamespace>GUI Editor</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v140</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../bin/Win32-visualstudio/MeshConverter.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)TestProject.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib glu32.lib opengl32.lib %(AdditionalOptions)</AdditionalOptions>
<OutputFile>../../bin/Win64-visualstudio/MeshConverter.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)TestProject.pdb</ProgramDatabaseFile>
<SubSystem>Console</SubSystem>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>Full</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<OutputFile>../../bin/Win32-visualstudio/MeshConverter.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>Full</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN64NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<OutputFile>../../bin/Win64-visualstudio/MeshConverter.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\source\Irrlicht\Irrlicht10.0.vcxproj">
<Project>{e08e042a-6c45-411b-92be-3cc31331019f}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,108 @@
#include <irrlicht.h>
#include <iostream>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#endif
void usage(const char* name)
{
std::cerr << "Usage: " << name << " [options] <srcFile> <destFile>" << std::endl;
std::cerr << " where options are" << std::endl;
std::cerr << " --createTangents: convert to tangents mesh is possible." << std::endl;
std::cerr << " --format=[irrmesh|collada|stl|obj|ply]: Choose target format" << std::endl;
}
int main(int argc, char* argv[])
{
if ((argc < 3) ||
((argc==3) && (argv[1][0]=='-')))
{
usage(argv[0]);
return 1;
}
IrrlichtDevice *device = createDevice( video::EDT_NULL,
dimension2d<u32>(800, 600), 32, false, false, false, 0);
device->setWindowCaption(L"Mesh Converter");
scene::EMESH_WRITER_TYPE type = EMWT_IRR_MESH;
u32 i=1;
bool createTangents=false;
while (argv[i][0]=='-')
{
core::stringc format = argv[i];
if (format.size() > 3)
{
if (format.equalsn("--format=",9))
{
format = format.subString(9,format.size());
if (format=="collada")
type = EMWT_COLLADA;
else if (format=="stl")
type = EMWT_STL;
else if (format=="obj")
type = EMWT_OBJ;
else if (format=="ply")
type = EMWT_PLY;
else
type = EMWT_IRR_MESH;
}
else
if (format =="--createTangents")
createTangents=true;
}
else
if (format=="--")
{
++i;
break;
}
++i;
}
const s32 srcmesh = i;
const s32 destmesh = i+1;
--argc;
if ((argc<srcmesh) || (argc<destmesh))
{
std::cerr << "Not enough files given." << std::endl;
usage(argv[0]);
return 1;
}
createTangents = createTangents && (type==EMWT_IRR_MESH);
std::cout << "Converting " << argv[srcmesh] << " to " << argv[destmesh] << std::endl;
IMesh* mesh = device->getSceneManager()->getMesh(argv[srcmesh])->getMesh(0);
if (!mesh)
{
std::cerr << "Could not load " << argv[srcmesh] << std::endl;
return 1;
}
if (createTangents)
{
IMesh* tmp = device->getSceneManager()->getMeshManipulator()->createMeshWithTangents(mesh);
mesh->drop();
mesh=tmp;
}
IMeshWriter* mw = device->getSceneManager()->createMeshWriter(type);
IWriteFile* file = device->getFileSystem()->createAndWriteFile(argv[destmesh]);
mw->writeMesh(file, mesh);
file->drop();
mw->drop();
device->drop();
return 0;
}

BIN
tools/irrEdit/irrEdit.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -0,0 +1,7 @@
irrEdit is a free scene graph editor for Irrlicht Engine .irr files and is capable as being used as world editor,
particle system designer, meshviewer and more. It is a visual front end for the Irrlicht Engine, and thus has a lot
of impressive features like importing meshes of every format Irrlicht supports, simple but powerful material
system and lots of special effects.
For package size reasons, irrEdit is not included in this SDK, but you can download it from
http://www.ambiera.com/irredit