Improve texture dialog
parent
60c749c93c
commit
03fc113737
|
@ -0,0 +1,4 @@
|
||||||
|
[Dolphin]
|
||||||
|
PreviewsShown=true
|
||||||
|
Timestamp=2014,11,5,18,15,12
|
||||||
|
Version=3
|
Binary file not shown.
After Width: | Height: | Size: 730 B |
Binary file not shown.
After Width: | Height: | Size: 388 B |
Binary file not shown.
After Width: | Height: | Size: 427 B |
Binary file not shown.
After Width: | Height: | Size: 401 B |
Binary file not shown.
After Width: | Height: | Size: 435 B |
|
@ -46,7 +46,7 @@ bool Editor::run(IrrlichtDevice* irr_device,Configuration* conf)
|
||||||
device = irr_device;
|
device = irr_device;
|
||||||
IVideoDriver *driver = device->getVideoDriver();
|
IVideoDriver *driver = device->getVideoDriver();
|
||||||
ISceneManager *smgr = device->getSceneManager();
|
ISceneManager *smgr = device->getSceneManager();
|
||||||
IGUIEnvironment *guienv = device->getGUIEnvironment();
|
IGUIEnvironment *guienv = device->getGUIEnvironment();
|
||||||
device->setEventReceiver(this);
|
device->setEventReceiver(this);
|
||||||
device->setWindowCaption(L"Node Box Editor");
|
device->setWindowCaption(L"Node Box Editor");
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ bool Editor::run(IrrlichtDevice* irr_device,Configuration* conf)
|
||||||
proj->media.debug();
|
proj->media.debug();
|
||||||
|
|
||||||
// Load user interface
|
// Load user interface
|
||||||
LoadScene();
|
LoadScene();
|
||||||
state->SelectMode(0);
|
state->SelectMode(0);
|
||||||
|
|
||||||
int LastX = driver->getScreenSize().Width;
|
int LastX = driver->getScreenSize().Width;
|
||||||
|
@ -98,7 +98,7 @@ bool Editor::run(IrrlichtDevice* irr_device,Configuration* conf)
|
||||||
int ResX = driver->getScreenSize().Width;
|
int ResX = driver->getScreenSize().Width;
|
||||||
if (!state->settings->getBool("hide_sidebar"))
|
if (!state->settings->getBool("hide_sidebar"))
|
||||||
ResX -= 256;
|
ResX -= 256;
|
||||||
|
|
||||||
int ResY = driver->getScreenSize().Height;
|
int ResY = driver->getScreenSize().Height;
|
||||||
|
|
||||||
if (currentWindow == -1) {
|
if (currentWindow == -1) {
|
||||||
|
@ -179,7 +179,7 @@ bool Editor::run(IrrlichtDevice* irr_device,Configuration* conf)
|
||||||
dtime = double(now - last) / 1000;
|
dtime = double(now - last) / 1000;
|
||||||
last = now;
|
last = now;
|
||||||
|
|
||||||
click_handled = true;
|
click_handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -208,18 +208,18 @@ bool Editor::OnEvent(const SEvent& event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state->menu){
|
if (state->menu){
|
||||||
if (state->menu->OnEvent(event)){
|
if (state->menu->OnEvent(event)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.Key < NUMBER_OF_KEYS){
|
if (event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.Key < NUMBER_OF_KEYS) {
|
||||||
if (event.KeyInput.PressedDown) {
|
if (event.KeyInput.PressedDown) {
|
||||||
state->keys[event.KeyInput.Key] = EKS_DOWN;
|
state->keys[event.KeyInput.Key] = EKS_DOWN;
|
||||||
} else {
|
} else {
|
||||||
state->keys[event.KeyInput.Key] = EKS_UP;
|
state->keys[event.KeyInput.Key] = EKS_UP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
state->device->getGUIEnvironment()->getFocus() &&
|
state->device->getGUIEnvironment()->getFocus() &&
|
||||||
state->device->getGUIEnvironment()->getFocus()->getType() == EGUIET_EDIT_BOX
|
state->device->getGUIEnvironment()->getFocus()->getType() == EGUIET_EDIT_BOX
|
||||||
|
@ -292,7 +292,7 @@ void Editor::LoadScene()
|
||||||
target->setPosition(vector3df(0, 0, 0));
|
target->setPosition(vector3df(0, 0, 0));
|
||||||
|
|
||||||
// Create cameras
|
// Create cameras
|
||||||
pivot = smgr->addEmptySceneNode(target, 199);
|
pivot = smgr->addEmptySceneNode(target, 199);
|
||||||
pivot->setRotation(vector3df(25, -45, 0));
|
pivot->setRotation(vector3df(25, -45, 0));
|
||||||
recreateCameras();
|
recreateCameras();
|
||||||
|
|
||||||
|
@ -329,7 +329,7 @@ void Editor::recreateCameras()
|
||||||
// Get screen sizes
|
// Get screen sizes
|
||||||
int ResX = driver->getScreenSize().Width;
|
int ResX = driver->getScreenSize().Width;
|
||||||
if (!state->settings->getBool("hide_sidebar"))
|
if (!state->settings->getBool("hide_sidebar"))
|
||||||
ResX -= 256;
|
ResX -= 256;
|
||||||
int ResY = driver->getScreenSize().Height;
|
int ResY = driver->getScreenSize().Height;
|
||||||
|
|
||||||
// reset matrix
|
// reset matrix
|
||||||
|
@ -354,7 +354,7 @@ void Editor::recreateCameras()
|
||||||
camera[i]->setParent(pivot);
|
camera[i]->setParent(pivot);
|
||||||
camera[i]->setAspectRatio((float)ResX / (float)ResY);
|
camera[i]->setAspectRatio((float)ResX / (float)ResY);
|
||||||
pivot->setRotation(oldrot);
|
pivot->setRotation(oldrot);
|
||||||
} else {
|
} else {
|
||||||
camera[i] = smgr->addCameraSceneNode(target);
|
camera[i] = smgr->addCameraSceneNode(target);
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case VIEWT_TOP:
|
case VIEWT_TOP:
|
||||||
|
@ -364,8 +364,8 @@ void Editor::recreateCameras()
|
||||||
camera[i]->setPosition(vector3df(0, -2, -0.01));
|
camera[i]->setPosition(vector3df(0, -2, -0.01));
|
||||||
break;
|
break;
|
||||||
case VIEWT_LEFT:
|
case VIEWT_LEFT:
|
||||||
camera[i]->setPosition(vector3df(-5, 0, 0));
|
camera[i]->setPosition(vector3df(-5, 0, 0));
|
||||||
break;
|
break;
|
||||||
case VIEWT_RIGHT:
|
case VIEWT_RIGHT:
|
||||||
camera[i]->setPosition(vector3df(5, 0, 0));
|
camera[i]->setPosition(vector3df(5, 0, 0));
|
||||||
break;
|
break;
|
||||||
|
@ -434,7 +434,7 @@ void Editor::viewportTick(Viewport viewport, rect<s32> rect, bool mousehit)
|
||||||
if (state->Mode())
|
if (state->Mode())
|
||||||
state->Mode()->viewportTick(viewport, driver, rect);
|
state->Mode()->viewportTick(viewport, driver, rect);
|
||||||
|
|
||||||
// Draw text
|
// Draw text
|
||||||
driver->setViewPort(rects32(0, 0, driver->getScreenSize().Width, driver->getScreenSize().Height));
|
driver->setViewPort(rects32(0, 0, driver->getScreenSize().Width, driver->getScreenSize().Height));
|
||||||
{
|
{
|
||||||
static const wchar_t* labels[7] = {L"Perspective", L"Front", L"Left", L"Top", L"Back", L"Right", L"Bottom"};
|
static const wchar_t* labels[7] = {L"Perspective", L"Front", L"Left", L"Top", L"Back", L"Right", L"Bottom"};
|
||||||
|
@ -477,7 +477,7 @@ void Editor::viewportTick(Viewport viewport, rect<s32> rect, bool mousehit)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Context menu
|
// Context menu
|
||||||
if (context_is_open) {
|
if (context_is_open) {
|
||||||
// Context menu background
|
// Context menu background
|
||||||
driver->draw2DRectangle(SColor(100, 32, 32, 32), backgroundrect);
|
driver->draw2DRectangle(SColor(100, 32, 32, 32), backgroundrect);
|
||||||
s32 y2 = rect.UpperLeftCorner.Y + ((rect.UpperLeftCorner.Y < 50)?52:32);
|
s32 y2 = rect.UpperLeftCorner.Y + ((rect.UpperLeftCorner.Y < 50)?52:32);
|
||||||
|
@ -523,7 +523,7 @@ void Editor::viewportTick(Viewport viewport, rect<s32> rect, bool mousehit)
|
||||||
case VIEWT_LEFT:
|
case VIEWT_LEFT:
|
||||||
drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10,
|
drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10,
|
||||||
rect.LowerRightCorner.Y - 42, L"-Z", L"Y");
|
rect.LowerRightCorner.Y - 42, L"-Z", L"Y");
|
||||||
break;
|
break;
|
||||||
case VIEWT_RIGHT:
|
case VIEWT_RIGHT:
|
||||||
drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10,
|
drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10,
|
||||||
rect.LowerRightCorner.Y - 42, L"Z", L"Y");
|
rect.LowerRightCorner.Y - 42, L"Z", L"Y");
|
||||||
|
@ -536,7 +536,7 @@ void Editor::viewportTick(Viewport viewport, rect<s32> rect, bool mousehit)
|
||||||
drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10,
|
drawCoord(guienv->getSkin()->getFont(), driver, rect.UpperLeftCorner.X + 10,
|
||||||
rect.LowerRightCorner.Y - 42, L"-X", L"Y");
|
rect.LowerRightCorner.Y - 42, L"-X", L"Y");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,8 @@ enum GUI_ID
|
||||||
// File Dialog
|
// File Dialog
|
||||||
GUI_FILEDIALOG_PATH = 222 + SIDEBAR_MAX_IDS,
|
GUI_FILEDIALOG_PATH = 222 + SIDEBAR_MAX_IDS,
|
||||||
GUI_FILEDIALOG_FORM = 223 + SIDEBAR_MAX_IDS,
|
GUI_FILEDIALOG_FORM = 223 + SIDEBAR_MAX_IDS,
|
||||||
GUI_DIALOG_SUBMIT = 224 + SIDEBAR_MAX_IDS
|
GUI_DIALOG_SUBMIT = 224 + SIDEBAR_MAX_IDS,
|
||||||
|
GUI_DIALOG = 225
|
||||||
};
|
};
|
||||||
|
|
||||||
class EditorState;
|
class EditorState;
|
||||||
|
|
|
@ -3,6 +3,15 @@
|
||||||
#include "ImageDialog.hpp"
|
#include "ImageDialog.hpp"
|
||||||
#include "util/filesys.hpp"
|
#include "util/filesys.hpp"
|
||||||
|
|
||||||
|
enum TEXTURE_DIALOG_GUI_IDS
|
||||||
|
{
|
||||||
|
ETD_GUI_ID_APPLY = GUI_DIALOG,
|
||||||
|
ETD_GUI_ID_IMPORT,
|
||||||
|
ETD_GUI_ID_ACTIONS,
|
||||||
|
ETD_GUI_ID_ACTIONS_CM,
|
||||||
|
ETD_GUI_ID_EXPORT
|
||||||
|
};
|
||||||
|
|
||||||
const char* getCubeSideName(CubeSide face)
|
const char* getCubeSideName(CubeSide face)
|
||||||
{
|
{
|
||||||
switch (face) {
|
switch (face) {
|
||||||
|
@ -29,7 +38,8 @@ TextureDialog::TextureDialog(EditorState *pstate, Node *pnode, CubeSide pface):
|
||||||
node(pnode),
|
node(pnode),
|
||||||
face(pface),
|
face(pface),
|
||||||
lb(NULL),
|
lb(NULL),
|
||||||
the_image(NULL)
|
the_image(NULL),
|
||||||
|
context(NULL)
|
||||||
{
|
{
|
||||||
IVideoDriver *driver = state->device->getVideoDriver();
|
IVideoDriver *driver = state->device->getVideoDriver();
|
||||||
IGUIEnvironment *guienv = state->device->getGUIEnvironment();
|
IGUIEnvironment *guienv = state->device->getGUIEnvironment();
|
||||||
|
@ -37,24 +47,22 @@ TextureDialog::TextureDialog(EditorState *pstate, Node *pnode, CubeSide pface):
|
||||||
// Window and basic items
|
// Window and basic items
|
||||||
win = guienv->addWindow(rect<s32>(340, 50, 340 + 74 * 3 + 10, 50 + 74 * 3 + 10), true,
|
win = guienv->addWindow(rect<s32>(340, 50, 340 + 74 * 3 + 10, 50 + 74 * 3 + 10), true,
|
||||||
narrow_to_wide(std::string(getCubeSideName(face)) + " texture").c_str());
|
narrow_to_wide(std::string(getCubeSideName(face)) + " texture").c_str());
|
||||||
guienv->addButton(rect<s32>(155, 30, 74 * 3, 55), win, 501, L"Apply", L"Apply this texture selection to the node face");
|
guienv->addButton(rect<s32>(155, 30, 74*3, 55), win, ETD_GUI_ID_APPLY, L"Apply", L"Apply this texture selection to the node face");
|
||||||
//guienv->addButton(rect<s32>(155, 60, 74 * 3, 85), win, 505, L"Unique",
|
guienv->addButton(rect<s32>(155, 60, 74*3, 85), win, ETD_GUI_ID_IMPORT, L"Import", L"Import images from files");
|
||||||
// L"Duplicate the current texture, and make it so only this face uses it.");
|
guienv->addButton(rect<s32>(84, 60, 150, 85), win, ETD_GUI_ID_ACTIONS, L"Actions");
|
||||||
guienv->addButton(rect<s32>(84, 30, 150, 55), win, 503, L"Import", L"Import images from files");
|
|
||||||
guienv->addButton(rect<s32>(84, 60, 150, 85), win, 504, L"Export", L"Export the selected texture");
|
|
||||||
|
|
||||||
// Fill out listbox
|
// Fill out listbox
|
||||||
lb = guienv->addListBox(rect<s32>(10, 104, 74 * 3, 74 * 3), win, 502);
|
lb = guienv->addListBox(rect<s32>(10, 104, 74 * 3, 74 * 3), win, 502);
|
||||||
Media *media = &state->project->media;
|
Media *media = &state->project->media;
|
||||||
std::map<std::string, Media::Image*>& images = media->getList();
|
std::map<std::string, Media::Image*>& images = media->getList();
|
||||||
int count = 0;
|
int count = 1;
|
||||||
lb->addItem(L"");
|
lb->addItem(L"");
|
||||||
lb->setSelected(0);
|
lb->setSelected(0);
|
||||||
for (std::map<std::string, Media::Image*>::const_iterator it = images.begin();
|
for (std::map<std::string, Media::Image*>::const_iterator it = images.begin();
|
||||||
it != images.end();
|
it != images.end();
|
||||||
++it) {
|
++it) {
|
||||||
if (!it->second) {
|
if (!it->second) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (it->second->name == "default") {
|
if (it->second->name == "default") {
|
||||||
lb->addItem(L"");
|
lb->addItem(L"");
|
||||||
|
@ -71,13 +79,20 @@ TextureDialog::TextureDialog(EditorState *pstate, Node *pnode, CubeSide pface):
|
||||||
if (image) {
|
if (image) {
|
||||||
the_image = driver->addTexture("tmpicon.png", image->get());
|
the_image = driver->addTexture("tmpicon.png", image->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Context menu
|
||||||
|
context = guienv->addContextMenu(rect<s32>(84, 85, 150, 180), win, ETD_GUI_ID_ACTIONS_CM);
|
||||||
|
context->addItem(L"Export", ETD_GUI_ID_EXPORT);
|
||||||
|
context->setCloseHandling(ECMC_HIDE);
|
||||||
|
context->setVisible(false);
|
||||||
|
context->setEventParent(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextureDialog::draw(IVideoDriver *driver)
|
void TextureDialog::draw(IVideoDriver *driver)
|
||||||
{
|
{
|
||||||
int x = win->getAbsolutePosition().UpperLeftCorner.X + 10;
|
int x = win->getAbsolutePosition().UpperLeftCorner.X + 10;
|
||||||
int y = win->getAbsolutePosition().UpperLeftCorner.Y + 30;
|
int y = win->getAbsolutePosition().UpperLeftCorner.Y + 30;
|
||||||
if (!the_image) {
|
if (!the_image) {
|
||||||
driver->draw2DRectangle(SColor(100, 0, 0, 0), rect<s32>(x, y, x + 64, y + 64));
|
driver->draw2DRectangle(SColor(100, 0, 0, 0), rect<s32>(x, y, x + 64, y + 64));
|
||||||
} else {
|
} else {
|
||||||
driver->draw2DImage(the_image, rect<s32>(x, y, x + 64, y + 64),
|
driver->draw2DImage(the_image, rect<s32>(x, y, x + 64, y + 64),
|
||||||
|
@ -127,8 +142,8 @@ bool TextureDialog::OnEvent(const SEvent &event)
|
||||||
|
|
||||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED) {
|
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED) {
|
||||||
switch (event.GUIEvent.Caller->getID()) {
|
switch (event.GUIEvent.Caller->getID()) {
|
||||||
case 501: {
|
case ETD_GUI_ID_APPLY: {
|
||||||
if (lb->getSelected() == 0) {
|
if (lb->getSelected() == 0) {
|
||||||
node->setTexture(face, NULL);
|
node->setTexture(face, NULL);
|
||||||
node->remesh();
|
node->remesh();
|
||||||
return true;
|
return true;
|
||||||
|
@ -148,15 +163,23 @@ bool TextureDialog::OnEvent(const SEvent &event)
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
close();
|
close();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case 503: {
|
case ETD_GUI_ID_IMPORT: {
|
||||||
ImageDialog::show(state, node, face);
|
ImageDialog::show(state, node, face);
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
case 504: {
|
case ETD_GUI_ID_ACTIONS:
|
||||||
|
context->setVisible(true);
|
||||||
|
state->device->getGUIEnvironment()->setFocus(context);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (event.GUIEvent.EventType == EGET_MENU_ITEM_SELECTED) {
|
||||||
|
IGUIContextMenu *menu = (IGUIContextMenu *)event.GUIEvent.Caller;
|
||||||
|
switch (menu->getItemCommandId(menu->getSelectedItem())) {
|
||||||
|
case ETD_GUI_ID_EXPORT: {
|
||||||
if (lb->getSelected() == 0)
|
if (lb->getSelected() == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -170,7 +193,8 @@ bool TextureDialog::OnEvent(const SEvent &event)
|
||||||
Media::Image *image = it->second;
|
Media::Image *image = it->second;
|
||||||
std::string path = getSaveLoadDirectory(state->settings->get("save_directory"),
|
std::string path = getSaveLoadDirectory(state->settings->get("save_directory"),
|
||||||
state->settings->getBool("installed")) + image->name;
|
state->settings->getBool("installed")) + image->name;
|
||||||
state->device->getVideoDriver()->writeImageToFile(image->get(),
|
std::cerr << "Exported image to " << path.c_str() << std::endl;
|
||||||
|
state->device->getVideoDriver()->writeImageToFile(image->get(),
|
||||||
path.c_str());
|
path.c_str());
|
||||||
state->device->getGUIEnvironment()->addMessageBox(L"Saved Image to: ",
|
state->device->getGUIEnvironment()->addMessageBox(L"Saved Image to: ",
|
||||||
narrow_to_wide(path).c_str());
|
narrow_to_wide(path).c_str());
|
||||||
|
@ -178,16 +202,14 @@ bool TextureDialog::OnEvent(const SEvent &event)
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}} // end of switch
|
}} // end of switch
|
||||||
}
|
} else if (event.GUIEvent.EventType == EGET_LISTBOX_CHANGED && event.GUIEvent.Caller == lb) {
|
||||||
|
|
||||||
if (event.GUIEvent.EventType == EGET_LISTBOX_CHANGED && event.GUIEvent.Caller == lb) {
|
|
||||||
if (lb->getSelected() == 0) {
|
if (lb->getSelected() == 0) {
|
||||||
the_image = NULL;
|
the_image = NULL;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
Media *media = &state->project->media;
|
Media *media = &state->project->media;
|
||||||
std::map<std::string, Media::Image*>& images = media->getList();
|
std::map<std::string, Media::Image*>& images = media->getList();
|
||||||
|
@ -201,12 +223,10 @@ bool TextureDialog::OnEvent(const SEvent &event)
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
} else if (event.GUIEvent.EventType == EGET_ELEMENT_CLOSED && event.GUIEvent.Caller == win) {
|
||||||
|
|
||||||
if (event.GUIEvent.EventType == EGET_ELEMENT_CLOSED && event.GUIEvent.Caller == win) {
|
|
||||||
if (canClose())
|
if (canClose())
|
||||||
close();
|
close();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ private:
|
||||||
IGUIWindow *win;
|
IGUIWindow *win;
|
||||||
IGUIListBox *lb;
|
IGUIListBox *lb;
|
||||||
ITexture *the_image;
|
ITexture *the_image;
|
||||||
|
IGUIContextMenu *context;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue