summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrankBro <brodeur_francois@hotmail.com>2012-01-22 05:45:10 (GMT)
committer FrankBro <brodeur_francois@hotmail.com>2012-01-22 05:45:10 (GMT)
commit57ab7bca76aa94624ca078d7168614eb28ead640 (patch)
tree2730cab371676cc92fa19da55838c03cd1b4d2a0 /src
parentcb92acd0b7dd9e958330a9b8e3c4b302f236542c (diff)
parent3a283d4f3c571dc8a891f2cdc348c204f7f9300b (diff)
downloadpowder-57ab7bca76aa94624ca078d7168614eb28ead640.zip
powder-57ab7bca76aa94624ca078d7168614eb28ead640.tar.gz
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'src')
-rw-r--r--src/PowderToy.cpp2
-rw-r--r--src/interface/Engine.cpp40
-rw-r--r--src/interface/Engine.h2
-rw-r--r--src/interface/SaveButton.h1
-rw-r--r--src/interface/Window.h6
-rw-r--r--src/preview/PreviewController.cpp26
-rw-r--r--src/preview/PreviewController.h25
-rw-r--r--src/preview/PreviewModel.cpp29
-rw-r--r--src/preview/PreviewModel.h28
-rw-r--r--src/preview/PreviewView.cpp29
-rw-r--r--src/preview/PreviewView.h23
-rw-r--r--src/search/SearchController.cpp15
-rw-r--r--src/search/SearchController.h3
-rw-r--r--src/search/SearchView.cpp11
14 files changed, 233 insertions, 7 deletions
diff --git a/src/PowderToy.cpp b/src/PowderToy.cpp
index a13a817..2918a05 100644
--- a/src/PowderToy.cpp
+++ b/src/PowderToy.cpp
@@ -67,7 +67,7 @@ int main(int argc, char * argv[])
ui::Engine::Ref().g->AttachSDLSurface(SDLOpen());
ui::Engine * engine = &ui::Engine::Ref();
- engine->Begin(XRES, YRES);
+ engine->Begin(XRES+BARSIZE, YRES+MENUSIZE);
GameController * gameController = new GameController();
engine->ShowWindow(gameController->GetView());
diff --git a/src/interface/Engine.cpp b/src/interface/Engine.cpp
index 6f81f56..85a6293 100644
--- a/src/interface/Engine.cpp
+++ b/src/interface/Engine.cpp
@@ -19,7 +19,9 @@ Engine::Engine():
mousexp_(0),
mouseyp_(0),
FpsLimit(60.0f),
- windows(stack<Window*>())
+ windows(stack<Window*>()),
+ lastBuffer(NULL),
+ prevBuffers(stack<pixel*>())
{
}
@@ -51,17 +53,44 @@ void Engine::Exit()
void Engine::ShowWindow(Window * window)
{
+ if(window->Position.X==-1)
+ {
+ window->Position.X = (width_-window->Size.X)/2;
+ }
+ if(window->Position.Y==-1)
+ {
+ window->Position.Y = (height_-window->Size.Y)/2;
+ }
if(state_)
{
+ if(lastBuffer)
+ {
+ prevBuffers.push(lastBuffer);
+ }
+ lastBuffer = (pixel*)malloc((width_ * height_) * PIXELSIZE);
+ g->fillrect(0, 0, width_, height_, 0, 0, 0, 100);
+ memcpy(lastBuffer, g->vid, (width_ * height_) * PIXELSIZE);
+
windows.push(state_);
}
state_ = window;
+
}
void Engine::CloseWindow()
{
if(!windows.empty())
{
+ if(!prevBuffers.empty())
+ {
+ lastBuffer = prevBuffers.top();
+ prevBuffers.pop();
+ }
+ else
+ {
+ free(lastBuffer);
+ lastBuffer = NULL;
+ }
state_ = windows.top();
windows.pop();
}
@@ -112,10 +141,17 @@ void Engine::Tick(float dt)
void Engine::Draw()
{
+ if(lastBuffer && !(state_->Position.X == 0 && state_->Position.Y == 0 && state_->Size.X == width_ && state_->Size.Y == height_))
+ {
+ memcpy(g->vid, lastBuffer, (width_ * height_) * PIXELSIZE);
+ }
+ else
+ {
+ g->Clear();
+ }
if(state_)
state_->DoDraw();
g->Blit();
- g->Clear();
}
void Engine::onKeyPress(int key, bool shift, bool ctrl, bool alt)
diff --git a/src/interface/Engine.h b/src/interface/Engine.h
index 7bf78f9..a648119 100644
--- a/src/interface/Engine.h
+++ b/src/interface/Engine.h
@@ -54,6 +54,8 @@ namespace ui
float FpsLimit;
Graphics * g;
private:
+ pixel * lastBuffer;
+ std::stack<pixel*> prevBuffers;
std::stack<Window*> windows;
//Window* statequeued_;
Window* state_;
diff --git a/src/interface/SaveButton.h b/src/interface/SaveButton.h
index 8019a3c..65cff52 100644
--- a/src/interface/SaveButton.h
+++ b/src/interface/SaveButton.h
@@ -39,6 +39,7 @@ public:
virtual void Draw(const Point& screenPos);
virtual void Tick(float dt);
+ Save * GetSave() { return save; }
inline bool GetState() { return state; }
virtual void DoAction();
void SetActionCallback(SaveButtonAction * action);
diff --git a/src/interface/Window.h b/src/interface/Window.h
index 581b91f..4fc2b14 100644
--- a/src/interface/Window.h
+++ b/src/interface/Window.h
@@ -23,6 +23,9 @@ enum ChromeStyle
class Window
{
public:
+ Point Position;
+ Point Size;
+
Window(Point _position, Point _size);
virtual ~Window();
@@ -74,9 +77,6 @@ enum ChromeStyle
virtual void OnKeyRelease(int key, bool shift, bool ctrl, bool alt) {}
std::vector<Component*> Components;
Component* focusedComponent_;
-
- Point Position;
- Point Size;
ChromeStyle chrome;
};
diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp
new file mode 100644
index 0000000..04c4dd6
--- /dev/null
+++ b/src/preview/PreviewController.cpp
@@ -0,0 +1,26 @@
+/*
+ * PreviewController.cpp
+ *
+ * Created on: Jan 21, 2012
+ * Author: Simon
+ */
+
+#include "PreviewController.h"
+#include "PreviewView.h"
+#include "PreviewModel.h"
+
+PreviewController::PreviewController(int saveID) {
+ // TODO Auto-generated constructor stub
+ previewModel = new PreviewModel();
+ previewView = new PreviewView();
+ previewModel->AddObserver(previewView);
+ previewView->AttachController(this);
+
+ previewModel->UpdateSave(saveID);
+}
+
+PreviewController::~PreviewController() {
+ delete previewView;
+ delete previewModel;
+}
+
diff --git a/src/preview/PreviewController.h b/src/preview/PreviewController.h
new file mode 100644
index 0000000..373ff03
--- /dev/null
+++ b/src/preview/PreviewController.h
@@ -0,0 +1,25 @@
+/*
+ * PreviewController.h
+ *
+ * Created on: Jan 21, 2012
+ * Author: Simon
+ */
+
+#ifndef PREVIEWCONTROLLER_H_
+#define PREVIEWCONTROLLER_H_
+
+#include "preview/PreviewModel.h"
+#include "preview/PreviewView.h"
+
+class PreviewModel;
+class PreviewView;
+class PreviewController {
+ PreviewModel * previewModel;
+ PreviewView * previewView;
+public:
+ PreviewController(int saveID);
+ PreviewView * GetView() { return previewView; }
+ virtual ~PreviewController();
+};
+
+#endif /* PREVIEWCONTROLLER_H_ */
diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp
new file mode 100644
index 0000000..bf51ff0
--- /dev/null
+++ b/src/preview/PreviewModel.cpp
@@ -0,0 +1,29 @@
+/*
+ * PreviewModel.cpp
+ *
+ * Created on: Jan 21, 2012
+ * Author: Simon
+ */
+
+#include "PreviewModel.h"
+
+PreviewModel::PreviewModel():
+ save(NULL)
+{
+ // TODO Auto-generated constructor stub
+
+}
+
+void PreviewModel::UpdateSave(int saveID)
+{
+
+}
+
+void PreviewModel::AddObserver(PreviewView * observer) {
+ observers.push_back(observer);
+}
+
+PreviewModel::~PreviewModel() {
+ // TODO Auto-generated destructor stub
+}
+
diff --git a/src/preview/PreviewModel.h b/src/preview/PreviewModel.h
new file mode 100644
index 0000000..ba11390
--- /dev/null
+++ b/src/preview/PreviewModel.h
@@ -0,0 +1,28 @@
+/*
+ * PreviewModel.h
+ *
+ * Created on: Jan 21, 2012
+ * Author: Simon
+ */
+
+#ifndef PREVIEWMODEL_H_
+#define PREVIEWMODEL_H_
+
+#include <vector>
+#include "PreviewView.h"
+#include "search/Save.h"
+
+using namespace std;
+
+class PreviewView;
+class PreviewModel {
+ vector<PreviewView*> observers;
+ Save * save;
+public:
+ PreviewModel();
+ void AddObserver(PreviewView * observer);
+ void UpdateSave(int saveID);
+ virtual ~PreviewModel();
+};
+
+#endif /* PREVIEWMODEL_H_ */
diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp
new file mode 100644
index 0000000..886dd67
--- /dev/null
+++ b/src/preview/PreviewView.cpp
@@ -0,0 +1,29 @@
+/*
+ * PreviewView.cpp
+ *
+ * Created on: Jan 21, 2012
+ * Author: Simon
+ */
+
+#include "PreviewView.h"
+#include "interface/Point.h"
+#include "interface/Window.h"
+
+PreviewView::PreviewView():
+ ui::Window(ui::Point(-1, -1), ui::Point(200, 200))
+{
+ // TODO Auto-generated constructor stub
+
+}
+
+void PreviewView::OnDraw()
+{
+ Graphics * g = ui::Engine::Ref().g;
+ g->clearrect(Position.X-2, Position.Y-2, Size.X+4, Size.Y+4);
+ g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255);
+}
+
+PreviewView::~PreviewView() {
+ // TODO Auto-generated destructor stub
+}
+
diff --git a/src/preview/PreviewView.h b/src/preview/PreviewView.h
new file mode 100644
index 0000000..728d547
--- /dev/null
+++ b/src/preview/PreviewView.h
@@ -0,0 +1,23 @@
+/*
+ * PreviewView.h
+ *
+ * Created on: Jan 21, 2012
+ * Author: Simon
+ */
+
+#ifndef PREVIEWVIEW_H_
+#define PREVIEWVIEW_H_
+#include "interface/Window.h"
+#include "preview/PreviewController.h"
+
+class PreviewController;
+class PreviewView: public ui::Window {
+ PreviewController * c;
+public:
+ void AttachController(PreviewController * controller) { c = controller;}
+ PreviewView();
+ virtual void OnDraw();
+ virtual ~PreviewView();
+};
+
+#endif /* PREVIEWVIEW_H_ */
diff --git a/src/search/SearchController.cpp b/src/search/SearchController.cpp
index 7103591..46a353c 100644
--- a/src/search/SearchController.cpp
+++ b/src/search/SearchController.cpp
@@ -3,8 +3,10 @@
#include "SearchModel.h"
#include "SearchView.h"
#include "interface/Panel.h"
+#include "preview/PreviewController.h"
-SearchController::SearchController()
+SearchController::SearchController():
+ activePreview(NULL)
{
searchModel = new SearchModel();
searchView = new SearchView();
@@ -19,6 +21,11 @@ SearchController::SearchController()
SearchController::~SearchController()
{
+ if(activePreview)
+ {
+ ui::Engine::Ref().CloseWindow();
+ delete activePreview;
+ }
delete searchModel;
delete searchView;
}
@@ -54,5 +61,11 @@ void SearchController::ChangeSort()
void SearchController::ShowOwn(bool show)
{
+ //TODO: Implement
+}
+void SearchController::OpenSave(int saveID)
+{
+ activePreview = new PreviewController(saveID);
+ ui::Engine::Ref().ShowWindow(activePreview->GetView());
}
diff --git a/src/search/SearchController.h b/src/search/SearchController.h
index c9fdb21..d67743e 100644
--- a/src/search/SearchController.h
+++ b/src/search/SearchController.h
@@ -4,6 +4,7 @@
#include "interface/Panel.h"
#include "SearchModel.h"
#include "SearchView.h"
+#include "preview/PreviewController.h"
class SearchView;
class SearchModel;
class SearchController
@@ -11,6 +12,7 @@ class SearchController
private:
SearchModel * searchModel;
SearchView * searchView;
+ PreviewController * activePreview;
public:
SearchController();
~SearchController();
@@ -20,6 +22,7 @@ public:
void PrevPage();
void ChangeSort();
void ShowOwn(bool show);
+ void OpenSave(int saveID);
};
#endif // SEARCHCONTROLLER_H
diff --git a/src/search/SearchView.cpp b/src/search/SearchView.cpp
index 57e5558..e589d20 100644
--- a/src/search/SearchView.cpp
+++ b/src/search/SearchView.cpp
@@ -178,6 +178,16 @@ void SearchView::NotifySaveListChanged(SearchModel * sender)
buttonAreaHeight = Size.Y - buttonYOffset - 18;
buttonWidth = (buttonAreaWidth/savesX) - buttonPadding*2;
buttonHeight = (buttonAreaHeight/savesY) - buttonPadding*2;
+ class SaveOpenAction: public ui::SaveButtonAction
+ {
+ SearchView * v;
+ public:
+ SaveOpenAction(SearchView * _v) { v = _v; }
+ virtual void ActionCallback(ui::SaveButton * sender)
+ {
+ v->c->OpenSave(sender->GetSave()->GetID());
+ }
+ };
for(i = 0; i < saves.size(); i++)
{
if(saveX == savesX)
@@ -195,6 +205,7 @@ void SearchView::NotifySaveListChanged(SearchModel * sender)
),
ui::Point(buttonWidth, buttonHeight),
saves[i]);
+ saveButton->SetActionCallback(new SaveOpenAction(this));
saveButtons.push_back(saveButton);
AddComponent(saveButton);
saveX++;