Merge remote-tracking branch 'scrawl/button_fixes'

This commit is contained in:
Marc Zinnschlag 2013-01-03 09:50:24 +01:00
commit ce5d27b07b
22 changed files with 198 additions and 423 deletions

View file

@ -104,7 +104,6 @@ set(OENGINE_OGRE
${LIBDIR}/openengine/ogre/renderer.cpp ${LIBDIR}/openengine/ogre/renderer.cpp
${LIBDIR}/openengine/ogre/fader.cpp ${LIBDIR}/openengine/ogre/fader.cpp
${LIBDIR}/openengine/ogre/imagerotate.cpp ${LIBDIR}/openengine/ogre/imagerotate.cpp
${LIBDIR}/openengine/ogre/atlas.cpp
${LIBDIR}/openengine/ogre/selectionbuffer.cpp ${LIBDIR}/openengine/ogre/selectionbuffer.cpp
) )
set(OENGINE_GUI set(OENGINE_GUI

View file

@ -30,7 +30,7 @@ add_openmw_dir (mwgui
formatting inventorywindow container hud countdialog tradewindow settingswindow formatting inventorywindow container hud countdialog tradewindow settingswindow
confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu
itemselection spellbuyingwindow loadingscreen levelupdialog waitdialog spellcreationdialog itemselection spellbuyingwindow loadingscreen levelupdialog waitdialog spellcreationdialog
enchantingdialog trainingwindow travelwindow enchantingdialog trainingwindow travelwindow imagebutton
) )
add_openmw_dir (mwdialogue add_openmw_dir (mwdialogue

View file

@ -88,7 +88,7 @@ void BookWindow::setTakeButtonShow(bool show)
mTakeButton->setVisible(show); mTakeButton->setVisible(show);
} }
void BookWindow::onCloseButtonClicked (MyGUI::Widget* _sender) void BookWindow::onCloseButtonClicked (MyGUI::Widget* sender)
{ {
// no 3d sounds because the object could be in a container. // no 3d sounds because the object could be in a container.
MWBase::Environment::get().getSoundManager()->playSound ("book close", 1.0, 1.0); MWBase::Environment::get().getSoundManager()->playSound ("book close", 1.0, 1.0);
@ -96,7 +96,7 @@ void BookWindow::onCloseButtonClicked (MyGUI::Widget* _sender)
mWindowManager.removeGuiMode(GM_Book); mWindowManager.removeGuiMode(GM_Book);
} }
void BookWindow::onTakeButtonClicked (MyGUI::Widget* _sender) void BookWindow::onTakeButtonClicked (MyGUI::Widget* sender)
{ {
MWBase::Environment::get().getSoundManager()->playSound ("Item Book Up", 1.0, 1.0, MWBase::SoundManager::Play_NoTrack); MWBase::Environment::get().getSoundManager()->playSound ("Item Book Up", 1.0, 1.0, MWBase::SoundManager::Play_NoTrack);
@ -106,7 +106,7 @@ void BookWindow::onTakeButtonClicked (MyGUI::Widget* _sender)
mWindowManager.removeGuiMode(GM_Book); mWindowManager.removeGuiMode(GM_Book);
} }
void BookWindow::onNextPageButtonClicked (MyGUI::Widget* _sender) void BookWindow::onNextPageButtonClicked (MyGUI::Widget* sender)
{ {
if ((mCurrentPage+1)*2 < mPages.size()) if ((mCurrentPage+1)*2 < mPages.size())
{ {
@ -118,7 +118,7 @@ void BookWindow::onNextPageButtonClicked (MyGUI::Widget* _sender)
} }
} }
void BookWindow::onPrevPageButtonClicked (MyGUI::Widget* _sender) void BookWindow::onPrevPageButtonClicked (MyGUI::Widget* sender)
{ {
if (mCurrentPage > 0) if (mCurrentPage > 0)
{ {

View file

@ -5,6 +5,8 @@
#include "../mwworld/ptr.hpp" #include "../mwworld/ptr.hpp"
#include "imagebutton.hpp"
namespace MWGui namespace MWGui
{ {
class BookWindow : public WindowBase class BookWindow : public WindowBase
@ -16,19 +18,19 @@ namespace MWGui
void setTakeButtonShow(bool show); void setTakeButtonShow(bool show);
protected: protected:
void onNextPageButtonClicked (MyGUI::Widget* _sender); void onNextPageButtonClicked (MyGUI::Widget* sender);
void onPrevPageButtonClicked (MyGUI::Widget* _sender); void onPrevPageButtonClicked (MyGUI::Widget* sender);
void onCloseButtonClicked (MyGUI::Widget* _sender); void onCloseButtonClicked (MyGUI::Widget* sender);
void onTakeButtonClicked (MyGUI::Widget* _sender); void onTakeButtonClicked (MyGUI::Widget* sender);
void updatePages(); void updatePages();
void clearPages(); void clearPages();
private: private:
MyGUI::Button* mCloseButton; MWGui::ImageButton* mCloseButton;
MyGUI::Button* mTakeButton; MWGui::ImageButton* mTakeButton;
MyGUI::Button* mNextPageButton; MWGui::ImageButton* mNextPageButton;
MyGUI::Button* mPrevPageButton; MWGui::ImageButton* mPrevPageButton;
MyGUI::TextBox* mLeftPageNumber; MyGUI::TextBox* mLeftPageNumber;
MyGUI::TextBox* mRightPageNumber; MyGUI::TextBox* mRightPageNumber;
MyGUI::Widget* mLeftPage; MyGUI::Widget* mLeftPage;

View file

@ -2,7 +2,6 @@
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <openengine/ogre/imagerotate.hpp> #include <openengine/ogre/imagerotate.hpp>
#include <openengine/ogre/atlas.hpp>
#include <OgreResourceGroupManager.h> #include <OgreResourceGroupManager.h>
#include <OgreRoot.h> #include <OgreRoot.h>
@ -14,7 +13,4 @@ CursorReplace::CursorReplace()
OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_vresize.png", 90); OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_vresize.png", 90);
OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_dresize1.png", -45); OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_dresize1.png", -45);
OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_dresize2.png", 45); OEngine::Render::ImageRotate::rotate("textures\\tx_cursormove.dds", "mwpointer_dresize2.png", 45);
OEngine::Render::Atlas::createFromFile("atlas1.cfg", "mwgui1", "textures\\");
OEngine::Render::Atlas::createFromFile("mainmenu.cfg", "mwgui2", "textures\\");
} }

View file

@ -0,0 +1,63 @@
#include "imagebutton.hpp"
#include <OgreTextureManager.h>
namespace MWGui
{
void ImageButton::setPropertyOverride(const std::string &_key, const std::string &_value)
{
if (_key == "ImageHighlighted")
mImageHighlighted = _value;
else if (_key == "ImagePushed")
mImagePushed = _value;
else if (_key == "ImageNormal")
{
if (mImageNormal == "")
{
setImageTexture(_value);
}
mImageNormal = _value;
}
else
ImageBox::setPropertyOverride(_key, _value);
}
void ImageButton::onMouseSetFocus(Widget* _old)
{
setImageTexture(mImageHighlighted);
ImageBox::onMouseSetFocus(_old);
}
void ImageButton::onMouseLostFocus(Widget* _new)
{
setImageTexture(mImageNormal);
ImageBox::onMouseLostFocus(_new);
}
void ImageButton::onMouseButtonPressed(int _left, int _top, MyGUI::MouseButton _id)
{
if (_id == MyGUI::MouseButton::Left)
setImageTexture(mImagePushed);
ImageBox::onMouseButtonPressed(_left, _top, _id);
}
MyGUI::IntSize ImageButton::getRequestedSize()
{
Ogre::TexturePtr texture = Ogre::TextureManager::getSingleton().getByName(mImageNormal);
if (texture.isNull())
{
std::cerr << "ImageButton: can't find " << mImageNormal << std::endl;
return MyGUI::IntSize(0,0);
}
return MyGUI::IntSize (texture->getWidth(), texture->getHeight());
}
void ImageButton::onMouseButtonReleased(int _left, int _top, MyGUI::MouseButton _id)
{
if (_id == MyGUI::MouseButton::Left)
setImageTexture(mImageHighlighted);
ImageBox::onMouseButtonReleased(_left, _top, _id);
}
}

View file

@ -0,0 +1,33 @@
#ifndef MWGUI_IMAGEBUTTON_H
#define MWGUI_IMAGEBUTTON_H
#include "MyGUI_ImageBox.h"
namespace MWGui
{
/**
* @brief allows using different image textures depending on the button state
*/
class ImageButton : public MyGUI::ImageBox
{
MYGUI_RTTI_DERIVED(ImageButton)
public:
MyGUI::IntSize getRequestedSize();
protected:
virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
virtual void onMouseLostFocus(MyGUI::Widget* _new);
virtual void onMouseSetFocus(MyGUI::Widget* _old);
virtual void onMouseButtonPressed(int _left, int _top, MyGUI::MouseButton _id);
virtual void onMouseButtonReleased(int _left, int _top, MyGUI::MouseButton _id);
std::string mImageHighlighted;
std::string mImageNormal;
std::string mImagePushed;
};
}
#endif

View file

@ -83,7 +83,6 @@ book formatText(std::string text,book mBook,int maxLine, int lineSize)
MWGui::JournalWindow::JournalWindow (MWBase::WindowManager& parWindowManager) MWGui::JournalWindow::JournalWindow (MWBase::WindowManager& parWindowManager)
: WindowBase("openmw_journal.layout", parWindowManager) : WindowBase("openmw_journal.layout", parWindowManager)
, mLastPos(0)
, mPageNumber(0) , mPageNumber(0)
{ {
mMainWidget->setVisible(false); mMainWidget->setVisible(false);
@ -177,7 +176,7 @@ void MWGui::JournalWindow::displayRightText(std::string text)
} }
void MWGui::JournalWindow::notifyNextPage(MyGUI::WidgetPtr _sender) void MWGui::JournalWindow::notifyNextPage(MyGUI::Widget* _sender)
{ {
if(mPageNumber < int(mLeftPages.size())-1) if(mPageNumber < int(mLeftPages.size())-1)
{ {
@ -189,7 +188,7 @@ void MWGui::JournalWindow::notifyNextPage(MyGUI::WidgetPtr _sender)
} }
} }
void MWGui::JournalWindow::notifyPrevPage(MyGUI::WidgetPtr _sender) void MWGui::JournalWindow::notifyPrevPage(MyGUI::Widget* _sender)
{ {
if(mPageNumber > 0) if(mPageNumber > 0)
{ {

View file

@ -7,6 +7,7 @@
#include <utility> #include <utility>
#include "window_base.hpp" #include "window_base.hpp"
#include "imagebutton.hpp"
namespace MWGui namespace MWGui
{ {
@ -25,18 +26,13 @@ namespace MWGui
/** /**
*Called when next/prev button is used. *Called when next/prev button is used.
*/ */
void notifyNextPage(MyGUI::WidgetPtr _sender); void notifyNextPage(MyGUI::Widget* _sender);
void notifyPrevPage(MyGUI::WidgetPtr _sender); void notifyPrevPage(MyGUI::Widget* _sender);
static const int sLineHeight;
MyGUI::WidgetPtr mSkillAreaWidget, mSkillClientWidget;
MyGUI::ScrollBar* mSkillScrollerWidget;
int mLastPos, mClientHeight;
MyGUI::EditPtr mLeftTextWidget; MyGUI::EditPtr mLeftTextWidget;
MyGUI::EditPtr mRightTextWidget; MyGUI::EditPtr mRightTextWidget;
MyGUI::ButtonPtr mPrevBtn; MWGui::ImageButton* mPrevBtn;
MyGUI::ButtonPtr mNextBtn; MWGui::ImageButton* mNextBtn;
std::vector<std::string> mLeftPages; std::vector<std::string> mLeftPages;
std::vector<std::string> mRightPages; std::vector<std::string> mRightPages;
int mPageNumber; //store the number of the current left page int mPageNumber; //store the number of the current left page

View file

@ -20,65 +20,57 @@ namespace MWGui
{ {
setCoord(0,0,w,h); setCoord(0,0,w,h);
int height = 64 * 3;
if (mButtonBox) if (mButtonBox)
MyGUI::Gui::getInstance ().destroyWidget(mButtonBox); MyGUI::Gui::getInstance ().destroyWidget(mButtonBox);
mButtonBox = mMainWidget->createWidget<MyGUI::Widget>("", MyGUI::IntCoord(w/2 - 64, h/2 - height/2, 128, height), MyGUI::Align::Default); mButtonBox = mMainWidget->createWidget<MyGUI::Widget>("", MyGUI::IntCoord(0, 0, 0, 0), MyGUI::Align::Default);
int curH = 0; int curH = 0;
mReturn = mButtonBox->createWidget<MyGUI::Button> ("ButtonImage", MyGUI::IntCoord(0, curH, 128, 64), MyGUI::Align::Default); std::vector<std::string> buttons;
mReturn->setImageResource ("Menu_Return"); buttons.push_back("return");
mReturn->eventMouseButtonClick += MyGUI::newDelegate(this, &MainMenu::returnToGame); //buttons.push_back("newgame");
curH += 64; //buttons.push_back("loadgame");
//buttons.push_back("savegame");
buttons.push_back("options");
//buttons.push_back("credits");
buttons.push_back("exitgame");
int maxwidth = 0;
/* mButtons.clear();
mNewGame = mButtonBox->createWidget<MyGUI::Button> ("ButtonImage", MyGUI::IntCoord(0, curH, 128, 64), MyGUI::Align::Default); for (std::vector<std::string>::iterator it = buttons.begin(); it != buttons.end(); ++it)
mNewGame->setImageResource ("Menu_NewGame"); {
curH += 64; MWGui::ImageButton* button = mButtonBox->createWidget<MWGui::ImageButton>
("ImageBox", MyGUI::IntCoord(0, curH, 0, 0), MyGUI::Align::Default);
button->setProperty("ImageHighlighted", "textures\\menu_" + *it + "_over.dds");
button->setProperty("ImageNormal", "textures\\menu_" + *it + ".dds");
button->setProperty("ImagePushed", "textures\\menu_" + *it + "_pressed.dds");
MyGUI::IntSize requested = button->getRequestedSize();
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MainMenu::onButtonClicked);
mButtons[*it] = button;
curH += requested.height;
mLoadGame = mButtonBox->createWidget<MyGUI::Button> ("ButtonImage", MyGUI::IntCoord(0, curH, 128, 64), MyGUI::Align::Default); if (requested.width > maxwidth)
mLoadGame->setImageResource ("Menu_LoadGame"); maxwidth = requested.width;
curH += 64; }
for (std::map<std::string, MWGui::ImageButton*>::iterator it = mButtons.begin(); it != mButtons.end(); ++it)
{
MyGUI::IntSize requested = it->second->getRequestedSize();
it->second->setCoord((maxwidth-requested.width) / 2, it->second->getTop(), requested.width, requested.height);
}
mButtonBox->setCoord (w/2 - maxwidth/2, h/2 - curH/2, maxwidth, curH);
mSaveGame = mButtonBox->createWidget<MyGUI::Button> ("ButtonImage", MyGUI::IntCoord(0, curH, 128, 64), MyGUI::Align::Default);
mSaveGame->setImageResource ("Menu_SaveGame");
curH += 64;
*/
mOptions = mButtonBox->createWidget<MyGUI::Button> ("ButtonImage", MyGUI::IntCoord(0, curH, 128, 64), MyGUI::Align::Default);
mOptions->setImageResource ("Menu_Options");
mOptions->eventMouseButtonClick += MyGUI::newDelegate(this, &MainMenu::showOptions);
curH += 64;
/*
mCredits = mButtonBox->createWidget<MyGUI::Button> ("ButtonImage", MyGUI::IntCoord(0, curH, 128, 64), MyGUI::Align::Default);
mCredits->setImageResource ("Menu_Credits");
curH += 64;
*/
mExitGame = mButtonBox->createWidget<MyGUI::Button> ("ButtonImage", MyGUI::IntCoord(0, curH, 128, 64), MyGUI::Align::Default);
mExitGame->setImageResource ("Menu_ExitGame");
mExitGame->eventMouseButtonClick += MyGUI::newDelegate(this, &MainMenu::exitGame);
curH += 64;
} }
void MainMenu::returnToGame(MyGUI::Widget* sender) void MainMenu::onButtonClicked(MyGUI::Widget *sender)
{ {
MWBase::Environment::get().getWindowManager ()->removeGuiMode (GM_MainMenu); if (sender == mButtons["return"])
} MWBase::Environment::get().getWindowManager ()->removeGuiMode (GM_MainMenu);
else if (sender == mButtons["options"])
void MainMenu::showOptions(MyGUI::Widget* sender) MWBase::Environment::get().getWindowManager ()->pushGuiMode (GM_Settings);
{ else if (sender == mButtons["exitgame"])
MWBase::Environment::get().getWindowManager ()->pushGuiMode (GM_Settings); Ogre::Root::getSingleton ().queueEndRendering ();
}
void MainMenu::exitGame(MyGUI::Widget* sender)
{
Ogre::Root::getSingleton ().queueEndRendering ();
} }
} }

View file

@ -1,5 +1,7 @@
#include <openengine/gui/layout.hpp> #include <openengine/gui/layout.hpp>
#include "imagebutton.hpp"
namespace MWGui namespace MWGui
{ {
@ -11,19 +13,11 @@ namespace MWGui
void onResChange(int w, int h); void onResChange(int w, int h);
private: private:
MyGUI::Button* mReturn;
MyGUI::Button* mNewGame;
MyGUI::Button* mLoadGame;
MyGUI::Button* mSaveGame;
MyGUI::Button* mOptions;
MyGUI::Button* mCredits;
MyGUI::Button* mExitGame;
MyGUI::Widget* mButtonBox; MyGUI::Widget* mButtonBox;
void returnToGame(MyGUI::Widget* sender); std::map<std::string, MWGui::ImageButton*> mButtons;
void showOptions(MyGUI::Widget* sender);
void exitGame(MyGUI::Widget* sender); void onButtonClicked (MyGUI::Widget* sender);
}; };
} }

View file

@ -2,6 +2,7 @@
#define MWGUI_SCROLLWINDOW_H #define MWGUI_SCROLLWINDOW_H
#include "window_base.hpp" #include "window_base.hpp"
#include "imagebutton.hpp"
#include "../mwworld/ptr.hpp" #include "../mwworld/ptr.hpp"
@ -20,8 +21,8 @@ namespace MWGui
void onTakeButtonClicked (MyGUI::Widget* _sender); void onTakeButtonClicked (MyGUI::Widget* _sender);
private: private:
MyGUI::Button* mCloseButton; MWGui::ImageButton* mCloseButton;
MyGUI::Button* mTakeButton; MWGui::ImageButton* mTakeButton;
MyGUI::ScrollView* mTextView; MyGUI::ScrollView* mTextView;
MWWorld::Ptr mScroll; MWWorld::Ptr mScroll;

View file

@ -51,6 +51,7 @@
#include "spellcreationdialog.hpp" #include "spellcreationdialog.hpp"
#include "enchantingdialog.hpp" #include "enchantingdialog.hpp"
#include "trainingwindow.hpp" #include "trainingwindow.hpp"
#include "imagebutton.hpp"
using namespace MWGui; using namespace MWGui;
@ -126,6 +127,7 @@ WindowManager::WindowManager(
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::VBox>("Widget"); MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::VBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::AutoSizedTextBox>("Widget"); MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::AutoSizedTextBox>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::AutoSizedButton>("Widget"); MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::AutoSizedButton>("Widget");
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::ImageButton>("Widget");
MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag); MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag);

View file

@ -4,8 +4,6 @@ set(SDIR ${CMAKE_CURRENT_SOURCE_DIR})
set(DDIR ${OpenMW_BINARY_DIR}/resources/mygui) set(DDIR ${OpenMW_BINARY_DIR}/resources/mygui)
set(MYGUI_FILES set(MYGUI_FILES
atlas1.cfg
mainmenu.cfg
bigbars.png bigbars.png
black.png black.png
core.skin core.skin

View file

@ -1,51 +0,0 @@
[settings]
size_x = 512
size_y = 512
[tx_menubook_close_idle.dds]
x = 0
y = 0
[tx_menubook_close_over.dds]
x = 128
y = 0
[tx_menubook_close_pressed.dds]
x = 256
y = 0
[tx_menubook_take_idle.dds]
x = 384
y = 0
[tx_menubook_take_over.dds]
x = 0
y = 32
[tx_menubook_take_pressed.dds]
x = 128
y = 32
[tx_menubook_next_idle.dds]
x = 256
y = 32
[tx_menubook_next_over.dds]
x = 384
y = 32
[tx_menubook_next_pressed.dds]
x = 0
y = 64
[tx_menubook_prev_idle.dds]
x = 128
y = 64
[tx_menubook_prev_over.dds]
x = 256
y = 64
[tx_menubook_prev_pressed.dds]
x = 384
y = 64

View file

@ -1,95 +0,0 @@
[settings]
size_x = 512
size_y = 512
[menu_newgame.dds]
x = 0
y = 0
[menu_newgame_pressed.dds]
x = 128
y = 0
[menu_newgame_over.dds]
x = 256
y = 0
[menu_loadgame.dds]
x = 384
y = 0
[menu_loadgame_pressed.dds]
x = 0
y = 64
[menu_loadgame_over.dds]
x = 128
y = 64
[menu_options.dds]
x = 256
y = 64
[menu_options_pressed.dds]
x = 384
y = 64
[menu_options_over.dds]
x = 0
y = 128
[menu_credits.dds]
x = 128
y = 128
[menu_credits_pressed.dds]
x = 256
y = 128
[menu_credits_over.dds]
x = 384
y = 128
[menu_exitgame.dds]
x = 0
y = 192
[menu_exitgame_pressed.dds]
x = 128
y = 192
[menu_exitgame_over.dds]
x = 256
y = 192
[menu_savegame.dds]
x = 384
y = 192
[menu_savegame_pressed.dds]
x = 0
y = 256
[menu_savegame_over.dds]
x = 128
y = 256
[menu_return.dds]
x = 256
y = 256
[menu_return_pressed.dds]
x = 384
y = 256
[menu_return_over.dds]
x = 0
y = 320

View file

@ -7,17 +7,25 @@
<Widget type="ImageBox" skin="ImageBox" position_real="0 0 1 1" align="Top|Right" name="BookImage"> <Widget type="ImageBox" skin="ImageBox" position_real="0 0 1 1" align="Top|Right" name="BookImage">
<Property key="ImageTexture" value="textures\tx_menubook.dds"/> <Property key="ImageTexture" value="textures\tx_menubook.dds"/>
<Widget type="Button" skin="ButtonImage" position="251 220 57 24" name="NextPageBTN"> <Widget type="ImageButton" skin="ImageBox" position="251 220 128 32" name="NextPageBTN">
<Property key="ImageResource" value="MenuBook_Next"/> <Property key="ImageHighlighted" value="textures\tx_menubook_next_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_next_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_next_pressed.dds"/>
</Widget> </Widget>
<Widget type="Button" skin="ButtonImage" position="165 220 96 24" name="PrevPageBTN"> <Widget type="ImageButton" skin="ImageBox" position="165 220 128 32" name="PrevPageBTN">
<Property key="ImageResource" value="MenuBook_Prev"/> <Property key="ImageHighlighted" value="textures\tx_menubook_prev_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_prev_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_prev_pressed.dds"/>
</Widget> </Widget>
<Widget type="Button" skin="ButtonImage" position="75 220 96 24" name="TakeButton"> <Widget type="ImageButton" skin="ImageBox" position="75 220 128 32" name="TakeButton">
<Property key="ImageResource" value="MenuBook_Take"/> <Property key="ImageHighlighted" value="textures\tx_menubook_take_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_take_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_take_pressed.dds"/>
</Widget> </Widget>
<Widget type="Button" skin="ButtonImage" position="360 220 96 24" name="CloseButton"> <Widget type="ImageButton" skin="ImageBox" position="360 220 128 32" name="CloseButton">
<Property key="ImageResource" value="MenuBook_Close"/> <Property key="ImageHighlighted" value="textures\tx_menubook_close_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_close_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_close_pressed.dds"/>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="155 215 24 24" name="LeftPageNumber"> <Widget type="TextBox" skin="NormalText" position="155 215 24 24" name="LeftPageNumber">

View file

@ -7,11 +7,15 @@
<Widget type="ImageBox" skin="ImageBox" position_real="0 0 1 1" align="Top|Right" name="JImage"> <Widget type="ImageBox" skin="ImageBox" position_real="0 0 1 1" align="Top|Right" name="JImage">
<Property key="ImageTexture" value="textures\tx_menubook.dds"/> <Property key="ImageTexture" value="textures\tx_menubook.dds"/>
<Widget type="Button" skin="ButtonImage" position="370 220 57 24" name="NextPageBTN"> <Widget type="ImageButton" skin="ImageBox" position="370 220 128 32" name="NextPageBTN">
<Property key="ImageResource" value="MenuBook_Next"/> <Property key="ImageHighlighted" value="textures\tx_menubook_next_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_next_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_next_pressed.dds"/>
</Widget> </Widget>
<Widget type="Button" skin="ButtonImage" position="80 220 96 24" name="PrevPageBTN"> <Widget type="ImageButton" skin="ImageBox" position="80 220 128 32" name="PrevPageBTN">
<Property key="ImageResource" value="MenuBook_Prev"/> <Property key="ImageHighlighted" value="textures\tx_menubook_prev_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_prev_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_prev_pressed.dds"/>
</Widget> </Widget>
<Widget type="EditBox" skin="MW_BookPage" position_real="0.15 0.1 0.3 0.75" name = "LeftText"/> <Widget type="EditBox" skin="MW_BookPage" position_real="0.15 0.1 0.3 0.75" name = "LeftText"/>
<Widget type="EditBox" skin="MW_BookPage" position_real="0.55 0.1 0.3 0.75" name = "RightText"/> <Widget type="EditBox" skin="MW_BookPage" position_real="0.55 0.1 0.3 0.75" name = "RightText"/>

View file

@ -1,34 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Skin"> <MyGUI type="Skin">
<Skin name="ReturnButton" size="128 64" texture="textures\menu_return.dds">
<BasisSkin type="MainSkin" offset = "0 0 128 64">
<State name="normal" offset = "0 0 128 64"/>
</BasisSkin>
</Skin>
<Skin name="NewButton" size="128 64" texture="textures\menu_newgame.dds">
<BasisSkin type="MainSkin" offset = "0 0 128 64">
<State name="normal" offset = "0 0 128 64"/>
</BasisSkin>
</Skin>
<Skin name="SaveButton" size="128 64" texture="textures\menu_savegame.dds">
<BasisSkin type="MainSkin" offset = "0 0 128 64">
<State name="normal" offset = "0 0 128 64"/>
</BasisSkin>
</Skin>
<Skin name="LoadButton" size="128 64" texture="textures\menu_loadgame.dds">
<BasisSkin type="MainSkin" offset = "0 0 128 64">
<State name="normal" offset = "0 0 128 64"/>
</BasisSkin>
</Skin>
<Skin name="OptionsButton" size="128 64" texture="textures\menu_options.dds">
<BasisSkin type="MainSkin" offset = "0 0 128 64">
<State name="normal" offset = "0 0 128 64"/>
</BasisSkin>
</Skin>
<Skin name="ExitButton" size="128 64" texture="textures\menu_exitgame.dds">
<BasisSkin type="MainSkin" offset = "0 0 128 64">
<State name="normal" offset = "0 0 128 64"/>
</BasisSkin>
</Skin>
</MyGUI> </MyGUI>

View file

@ -7,12 +7,16 @@
<Widget type="ImageBox" skin="ImageBox" position_real="0 0 1 1" name="ScrollImage"> <Widget type="ImageBox" skin="ImageBox" position_real="0 0 1 1" name="ScrollImage">
<Property key="ImageTexture" value="textures\scroll.dds"/> <Property key="ImageTexture" value="textures\scroll.dds"/>
<Widget type="Button" skin="ButtonImage" position="12 18 96 24" name="TakeButton"> <Widget type="ImageButton" skin="ImageBox" position="12 18 128 32" name="TakeButton">
<Property key="ImageResource" value="MenuBook_Take"/> <Property key="ImageHighlighted" value="textures\tx_menubook_take_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_take_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_take_pressed.dds"/>
</Widget> </Widget>
<Widget type="Button" skin="ButtonImage" position="418 24 96 24" name="CloseButton"> <Widget type="ImageButton" skin="ImageBox" position="418 24 128 32" name="CloseButton">
<Property key="ImageResource" value="MenuBook_Close"/> <Property key="ImageHighlighted" value="textures\tx_menubook_close_over.dds"/>
<Property key="ImageNormal" value="textures\tx_menubook_close_idle.dds"/>
<Property key="ImagePushed" value="textures\tx_menubook_close_pressed.dds"/>
</Widget> </Widget>
<Widget type="ScrollView" skin="MW_ScrollView" position="60 130 410 300" name="TextView"> <Widget type="ScrollView" skin="MW_ScrollView" position="60 130 410 300" name="TextView">

View file

@ -1,113 +0,0 @@
#include "atlas.hpp"
#include <OgreRoot.h>
#include <OgreSceneManager.h>
#include <OgreImage.h>
#include <OgreTexture.h>
#include <OgreRenderTarget.h>
#include <OgreCamera.h>
#include <OgreTextureUnitState.h>
#include <OgreHardwarePixelBuffer.h>
#include <OgreConfigFile.h>
#include <OgreStringConverter.h>
using namespace Ogre;
using namespace OEngine::Render;
void Atlas::createFromFile (const std::string& filename, const std::string& textureName, const std::string& texturePrefix)
{
ConfigFile file;
file.load(filename, ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME, "\t:=", true);
Root* root = Ogre::Root::getSingletonPtr();
SceneManager* sceneMgr = root->createSceneManager(ST_GENERIC);
Camera* camera = sceneMgr->createCamera("AtlasCamera");
int width = StringConverter::parseInt(file.getSetting("size_x", "settings"));
int height = StringConverter::parseInt(file.getSetting("size_y", "settings"));
std::vector<Rectangle2D*> rectangles;
int i = 0;
ConfigFile::SectionIterator seci = file.getSectionIterator();
while (seci.hasMoreElements())
{
Ogre::String sectionName = seci.peekNextKey();
seci.getNext();
if (sectionName == "settings" || sectionName == "")
continue;
MaterialPtr material = MaterialManager::getSingleton().create("AtlasMaterial" + StringConverter::toString(i), ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
material->getTechnique(0)->getPass(0)->setLightingEnabled(false);
material->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
TextureUnitState* tus = material->getTechnique(0)->getPass(0)->createTextureUnitState(texturePrefix + sectionName);
tus->setTextureBorderColour(ColourValue(0, 0, 0, 0));
Rectangle2D* rect = new Rectangle2D(true);
rect->setMaterial("AtlasMaterial" + StringConverter::toString(i));
rect->setRenderQueueGroup(RENDER_QUEUE_BACKGROUND);
int x = StringConverter::parseInt(file.getSetting("x", sectionName));
int y = StringConverter::parseInt(file.getSetting("y", sectionName));
TexturePtr texture = TextureManager::getSingleton().getByName(texturePrefix + sectionName);
if (texture.isNull())
{
std::cerr << "OEngine::Render::Atlas: Can't find texture " << texturePrefix + sectionName << ", skipping..." << std::endl;
continue;
}
int textureWidth = texture->getWidth();
int textureHeight = texture->getHeight();
float left = x/float(width) * 2 - 1;
float top = (1-(y/float(height))) * 2 - 1;
float right = ((x+textureWidth))/float(width) * 2 - 1;
float bottom = (1-((y+textureHeight)/float(height))) * 2 - 1;
rect->setCorners(left, top, right, bottom);
// Use infinite AAB to always stay visible
AxisAlignedBox aabInf;
aabInf.setInfinite();
rect->setBoundingBox(aabInf);
// Attach background to the scene
SceneNode* node = sceneMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(rect);
rectangles.push_back(rect);
++i;
}
TexturePtr destTexture = TextureManager::getSingleton().createManual(
textureName,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
TEX_TYPE_2D,
width, height,
0,
PF_FLOAT16_RGBA,
TU_RENDERTARGET);
RenderTarget* rtt = destTexture->getBuffer()->getRenderTarget();
rtt->setAutoUpdated(false);
Viewport* vp = rtt->addViewport(camera);
vp->setOverlaysEnabled(false);
vp->setShadowsEnabled(false);
vp->setBackgroundColour(ColourValue(0,0,0,0));
rtt->update();
// remove all the junk we've created
for (std::vector<Rectangle2D*>::iterator it=rectangles.begin();
it!=rectangles.end(); ++it)
{
delete (*it);
}
while (i > 0)
{
MaterialManager::getSingleton().remove("AtlasMaterial" + StringConverter::toString(i-1));
--i;
}
root->destroySceneManager(sceneMgr);
}

View file

@ -1,27 +0,0 @@
#ifndef OENGINE_OGRE_ATLAS_HPP
#define OENGINE_OGRE_ATLAS_HPP
#include <string>
namespace OEngine
{
namespace Render
{
/// \brief Creates a texture atlas at runtime
class Atlas
{
public:
/**
* @param absolute path to file that specifies layout of the texture (positions of the textures it contains)
* @param name of the destination texture to save to (in memory)
* @param texture directory prefix
*/
static void createFromFile (const std::string& filename, const std::string& textureName, const std::string& texturePrefix="textures\\");
};
}
}
#endif