diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index 10e5476..05a1973 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -144,6 +144,10 @@ void Application::onKeyPressed(ofKeyEventArgs & args){ setNextPreset(); break; + case 'F': + setFullscreenSurface(); + break; + default: // All the other keypresses are handled by the application state onKeyPressed _state->onKeyPressed(this, args); @@ -465,6 +469,13 @@ void Application::duplicateSurface(){ } } +void Application::setFullscreenSurface(){ + if(getSurfaceManager()->getSelectedSurface() != 0){ + getCmdManager()->exec( + new FullscreenSurfaceCmd(getSurfaceManager()->getSelectedSurface())); + } +} + void Application::setNextSource(){ if(getSurfaceManager()->getSelectedSurface() != 0){ getCmdManager()->exec( diff --git a/src/Application/Application.h b/src/Application/Application.h index 8f8542f..34028af 100644 --- a/src/Application/Application.h +++ b/src/Application/Application.h @@ -22,6 +22,7 @@ #include "MvLayerUpCmd.h" #include "MvLayerDnCmd.h" #include "DuplicateSurfaceCmd.h" +#include "FullscreenSurfaceCmd.h" #include "TogglePerspectiveCmd.h" #include "SetNextSourceCmd.h" #include "ScaleSurfaceFromToCmd.h" @@ -129,6 +130,7 @@ class Application { void scaleUp(); void scaleDown(); void duplicateSurface(); + void setFullscreenSurface(); void setNextSource(); void setFboSource(std::string sourceId); void setVideoSource(std::string fileName, bool loop); diff --git a/src/Commands/FullscreenSurfaceCmd.cpp b/src/Commands/FullscreenSurfaceCmd.cpp new file mode 100644 index 0000000..87739aa --- /dev/null +++ b/src/Commands/FullscreenSurfaceCmd.cpp @@ -0,0 +1,25 @@ +#include "FullscreenSurfaceCmd.h" + +namespace ofx { +namespace piMapper { + +FullscreenSurfaceCmd::FullscreenSurfaceCmd(BaseSurface * surface){ + _surface = surface; +} + +void FullscreenSurfaceCmd::exec(){ + ofLogNotice("FullscreenSurfaceCmd", "exec"); + _previousVertices = _surface->getVertices(); + _surface->fullScreen(); +} + +void FullscreenSurfaceCmd::undo(){ + ofLogNotice("FullscreenSurfaceCmd", "undo"); + for(int i = 0; i < _surface->getVertices().size(); i++){ + _surface->setVertex(i,_previousVertices[i]); + } +} + +} // namespace piMapper +} // namespace ofx + diff --git a/src/Commands/FullscreenSurfaceCmd.h b/src/Commands/FullscreenSurfaceCmd.h new file mode 100644 index 0000000..9b3c918 --- /dev/null +++ b/src/Commands/FullscreenSurfaceCmd.h @@ -0,0 +1,29 @@ +// FullscreenSurfaceCmd +// Makes selected surface resize to fit the screen +// Created by Pierre Proske 25-03-2020 + +#pragma once + +#include "BaseCmd.h" +#include "BaseSurface.h" +#include "SurfaceManager.h" +#include "Vec3.h" + +namespace ofx { +namespace piMapper { + +class FullscreenSurfaceCmd : public BaseUndoCmd { + + public: + FullscreenSurfaceCmd(BaseSurface * surface); + void exec(); + void undo(); + + private: + BaseSurface * _surface; + std::vector _previousVertices; +}; + +} // namespace piMapper +} // namespace ofx + diff --git a/src/Surfaces/BaseSurface.h b/src/Surfaces/BaseSurface.h index bca4ab3..3faf9d8 100644 --- a/src/Surfaces/BaseSurface.h +++ b/src/Surfaces/BaseSurface.h @@ -24,6 +24,7 @@ class BaseSurface { virtual void setTexCoord(int index, Vec2 t) = 0; virtual void setTexCoords(std::vector t) = 0; virtual void moveBy(Vec3 v) = 0; + virtual void fullScreen() = 0; virtual int getType() = 0; virtual bool hitTest(Vec2 p) = 0; virtual ofPolyline getHitArea() = 0; diff --git a/src/Surfaces/GridWarpSurface.cpp b/src/Surfaces/GridWarpSurface.cpp index 1b98c0e..11c9705 100644 --- a/src/Surfaces/GridWarpSurface.cpp +++ b/src/Surfaces/GridWarpSurface.cpp @@ -40,6 +40,10 @@ void GridWarpSurface::moveBy(Vec3 v){ ofNotifyEvent(verticesChangedEvent, vertices, this); } +void GridWarpSurface::fullScreen(){ + +} + int GridWarpSurface::getType(){ return SurfaceType::GRID_WARP_SURFACE; } diff --git a/src/Surfaces/GridWarpSurface.h b/src/Surfaces/GridWarpSurface.h index 4a7baf8..71fcd92 100644 --- a/src/Surfaces/GridWarpSurface.h +++ b/src/Surfaces/GridWarpSurface.h @@ -17,6 +17,7 @@ class GridWarpSurface : public BaseSurface { void setup(){}; void draw(); void moveBy(Vec3 v); + void fullScreen(); int getType(); int getGridRows(); diff --git a/src/Surfaces/HexagonSurface.cpp b/src/Surfaces/HexagonSurface.cpp index ee62775..57bed9a 100644 --- a/src/Surfaces/HexagonSurface.cpp +++ b/src/Surfaces/HexagonSurface.cpp @@ -156,6 +156,10 @@ void HexagonSurface::moveBy(Vec3 v){ ofNotifyEvent(verticesChangedEvent, vertices, this); } +void HexagonSurface::fullScreen(){ + +} + int HexagonSurface::getType(){ return SurfaceType::HEXAGON_SURFACE; } diff --git a/src/Surfaces/HexagonSurface.h b/src/Surfaces/HexagonSurface.h index 9ba762c..056ba68 100644 --- a/src/Surfaces/HexagonSurface.h +++ b/src/Surfaces/HexagonSurface.h @@ -26,6 +26,7 @@ class HexagonSurface : public BaseSurface { void setTexCoord(int index, Vec2 t); void setTexCoords(std::vector t); void moveBy(Vec3 v); + void fullScreen(); int getType(); bool hitTest(Vec2 p); diff --git a/src/Surfaces/QuadSurface.cpp b/src/Surfaces/QuadSurface.cpp index ff263cb..873dec0 100644 --- a/src/Surfaces/QuadSurface.cpp +++ b/src/Surfaces/QuadSurface.cpp @@ -177,6 +177,17 @@ void QuadSurface::moveBy(Vec3 v){ ofNotifyEvent(verticesChangedEvent, vertices, this); } +void QuadSurface::fullScreen(){ + mesh.getVertices()[0] = Vec3(0, 0, 0.0f).toOf(); + mesh.getVertices()[1] = Vec3((float)ofGetWidth(), 0, 0.0f).toOf(); + mesh.getVertices()[2] = Vec3((float)ofGetWidth(), (float)ofGetHeight(), 0.0f).toOf(); + mesh.getVertices()[3] = Vec3(0, (float)ofGetHeight(), 0.0f).toOf(); + + setMoved(true); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); +} + int QuadSurface::getType(){ return SurfaceType::QUAD_SURFACE; } diff --git a/src/Surfaces/QuadSurface.h b/src/Surfaces/QuadSurface.h index 655ba78..ab4dc7e 100644 --- a/src/Surfaces/QuadSurface.h +++ b/src/Surfaces/QuadSurface.h @@ -26,6 +26,7 @@ class QuadSurface : public BaseSurface { void setTexCoord(int index, Vec2 t); void setTexCoords(std::vector t); void moveBy(Vec3 v); + void fullScreen(); int getType(); bool hitTest(Vec2 p); diff --git a/src/Surfaces/SurfaceManager.h b/src/Surfaces/SurfaceManager.h index 1150e17..ff2b2ff 100644 --- a/src/Surfaces/SurfaceManager.h +++ b/src/Surfaces/SurfaceManager.h @@ -51,6 +51,7 @@ class SurfaceManager { void selectPrevVertex(); void selectVertex(int i); + void fullscreenSurface(); void moveSelectionBy(Vec3 v); void moveAllSurfacesBy(Vec3 v); diff --git a/src/Surfaces/TriangleSurface.cpp b/src/Surfaces/TriangleSurface.cpp index 3296e45..512bee9 100644 --- a/src/Surfaces/TriangleSurface.cpp +++ b/src/Surfaces/TriangleSurface.cpp @@ -115,6 +115,10 @@ void TriangleSurface::moveBy(Vec3 v){ ofNotifyEvent(verticesChangedEvent, vertices, this); } +void TriangleSurface::fullScreen(){ + +} + int TriangleSurface::getType(){ return SurfaceType::TRIANGLE_SURFACE; } diff --git a/src/Surfaces/TriangleSurface.h b/src/Surfaces/TriangleSurface.h index 091688a..764aa8b 100644 --- a/src/Surfaces/TriangleSurface.h +++ b/src/Surfaces/TriangleSurface.h @@ -24,6 +24,7 @@ class TriangleSurface : public BaseSurface { void setTexCoord(int index, Vec2 t); void setTexCoords(std::vector t); void moveBy(Vec3 v); + void fullScreen(); int getType(); bool hitTest(Vec2 p);