From 68ebe7d9b5c558924e8432336762209804d9032b Mon Sep 17 00:00:00 2001 From: Adiel Fernandez Date: Mon, 21 Mar 2016 15:53:56 -0400 Subject: [PATCH] add onSendEvent and examples with new Spacebrew UI Added: example_drawing_tool example_shared_canvas tweaks to main ofxSpacebrew src --- example_drawing_tool/Makefile | 13 + example_drawing_tool/Project.xcconfig | 17 + example_drawing_tool/addons.make | 2 + example_drawing_tool/bin/data/.gitkeep | 0 .../bin/data/fonts/DINPro-Bold.otf | Bin 0 -> 90228 bytes .../bin/data/fonts/DINPro-Medium.otf | Bin 0 -> 89060 bytes example_drawing_tool/config.make | 142 +++++ .../project.pbxproj | 596 ++++++++++++++++++ .../example_drawing_tool Debug.xcscheme | 86 +++ .../example_drawing_tool Release.xcscheme | 86 +++ .../openFrameworks-Info.plist | 22 + example_drawing_tool/src/main.cpp | 13 + example_drawing_tool/src/ofApp.cpp | 178 ++++++ example_drawing_tool/src/ofApp.h | 46 ++ .../src/ofxSpacebrewPanel.cpp | 285 +++++++++ .../src/ofxSpacebrewPanel.hpp | 89 +++ .../src/ofxSpacebrewPanelElement.cpp | 191 ++++++ .../src/ofxSpacebrewPanelElement.hpp | 50 ++ example_shared_canvas/Makefile | 13 + example_shared_canvas/Project.xcconfig | 17 + example_shared_canvas/addons.make | 2 + example_shared_canvas/bin/data/.gitkeep | 0 .../bin/data/fonts/DINPro-Bold.otf | Bin 0 -> 90228 bytes .../bin/data/fonts/DINPro-Medium.otf | Bin 0 -> 89060 bytes example_shared_canvas/config.make | 142 +++++ .../project.pbxproj | 596 ++++++++++++++++++ .../example_shared_canvas Debug.xcscheme | 86 +++ .../example_shared_canvas Release.xcscheme | 86 +++ .../openFrameworks-Info.plist | 22 + example_shared_canvas/src/main.cpp | 13 + example_shared_canvas/src/ofApp.cpp | 188 ++++++ example_shared_canvas/src/ofApp.h | 51 ++ .../src/ofxSpacebrewPanel.cpp | 285 +++++++++ .../src/ofxSpacebrewPanel.hpp | 89 +++ .../src/ofxSpacebrewPanelElement.cpp | 191 ++++++ .../src/ofxSpacebrewPanelElement.hpp | 50 ++ src/ofxSpacebrew.cpp | 1 + src/ofxSpacebrew.h | 9 +- 38 files changed, 3656 insertions(+), 1 deletion(-) create mode 100644 example_drawing_tool/Makefile create mode 100644 example_drawing_tool/Project.xcconfig create mode 100644 example_drawing_tool/addons.make create mode 100644 example_drawing_tool/bin/data/.gitkeep create mode 100644 example_drawing_tool/bin/data/fonts/DINPro-Bold.otf create mode 100644 example_drawing_tool/bin/data/fonts/DINPro-Medium.otf create mode 100644 example_drawing_tool/config.make create mode 100644 example_drawing_tool/example_drawing_tool.xcodeproj/project.pbxproj create mode 100644 example_drawing_tool/example_drawing_tool.xcodeproj/xcshareddata/xcschemes/example_drawing_tool Debug.xcscheme create mode 100644 example_drawing_tool/example_drawing_tool.xcodeproj/xcshareddata/xcschemes/example_drawing_tool Release.xcscheme create mode 100644 example_drawing_tool/openFrameworks-Info.plist create mode 100644 example_drawing_tool/src/main.cpp create mode 100644 example_drawing_tool/src/ofApp.cpp create mode 100644 example_drawing_tool/src/ofApp.h create mode 100644 example_drawing_tool/src/ofxSpacebrewPanel.cpp create mode 100644 example_drawing_tool/src/ofxSpacebrewPanel.hpp create mode 100644 example_drawing_tool/src/ofxSpacebrewPanelElement.cpp create mode 100644 example_drawing_tool/src/ofxSpacebrewPanelElement.hpp create mode 100644 example_shared_canvas/Makefile create mode 100644 example_shared_canvas/Project.xcconfig create mode 100644 example_shared_canvas/addons.make create mode 100644 example_shared_canvas/bin/data/.gitkeep create mode 100644 example_shared_canvas/bin/data/fonts/DINPro-Bold.otf create mode 100644 example_shared_canvas/bin/data/fonts/DINPro-Medium.otf create mode 100644 example_shared_canvas/config.make create mode 100644 example_shared_canvas/example_shared_canvas.xcodeproj/project.pbxproj create mode 100644 example_shared_canvas/example_shared_canvas.xcodeproj/xcshareddata/xcschemes/example_shared_canvas Debug.xcscheme create mode 100644 example_shared_canvas/example_shared_canvas.xcodeproj/xcshareddata/xcschemes/example_shared_canvas Release.xcscheme create mode 100644 example_shared_canvas/openFrameworks-Info.plist create mode 100644 example_shared_canvas/src/main.cpp create mode 100644 example_shared_canvas/src/ofApp.cpp create mode 100644 example_shared_canvas/src/ofApp.h create mode 100644 example_shared_canvas/src/ofxSpacebrewPanel.cpp create mode 100644 example_shared_canvas/src/ofxSpacebrewPanel.hpp create mode 100644 example_shared_canvas/src/ofxSpacebrewPanelElement.cpp create mode 100644 example_shared_canvas/src/ofxSpacebrewPanelElement.hpp diff --git a/example_drawing_tool/Makefile b/example_drawing_tool/Makefile new file mode 100644 index 0000000..8d8e4c0 --- /dev/null +++ b/example_drawing_tool/Makefile @@ -0,0 +1,13 @@ +# Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=$(realpath ../../..) +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/example_drawing_tool/Project.xcconfig b/example_drawing_tool/Project.xcconfig new file mode 100644 index 0000000..e570b15 --- /dev/null +++ b/example_drawing_tool/Project.xcconfig @@ -0,0 +1,17 @@ +//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. +//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED +OF_PATH = ../../.. + +//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE +#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" + +//ICONS - NEW IN 0072 +ICON_NAME_DEBUG = icon-debug.icns +ICON_NAME_RELEASE = icon.icns +ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ + +//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: +//ICON_FILE_PATH = bin/data/ + +OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) +HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/example_drawing_tool/addons.make b/example_drawing_tool/addons.make new file mode 100644 index 0000000..90083e1 --- /dev/null +++ b/example_drawing_tool/addons.make @@ -0,0 +1,2 @@ +ofxLibwebsockets +ofxSpacebrew diff --git a/example_drawing_tool/bin/data/.gitkeep b/example_drawing_tool/bin/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/example_drawing_tool/bin/data/fonts/DINPro-Bold.otf b/example_drawing_tool/bin/data/fonts/DINPro-Bold.otf new file mode 100644 index 0000000000000000000000000000000000000000..7c8395364885f9a8aeed3237a9fc5bc81626b4da GIT binary patch literal 90228 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 axGu^Di+^-cwl!H^xyk;UG0O%)dj20v|70ov literal 0 HcmV?d00001 diff --git a/example_drawing_tool/bin/data/fonts/DINPro-Medium.otf b/example_drawing_tool/bin/data/fonts/DINPro-Medium.otf new file mode 100644 index 0000000000000000000000000000000000000000..b4608d06d170998c463a5451d552b533149dabef GIT binary patch literal 89060 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_drawing_tool/example_drawing_tool.xcodeproj/xcshareddata/xcschemes/example_drawing_tool Release.xcscheme b/example_drawing_tool/example_drawing_tool.xcodeproj/xcshareddata/xcschemes/example_drawing_tool Release.xcscheme new file mode 100644 index 0000000..9184941 --- /dev/null +++ b/example_drawing_tool/example_drawing_tool.xcodeproj/xcshareddata/xcschemes/example_drawing_tool Release.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_drawing_tool/openFrameworks-Info.plist b/example_drawing_tool/openFrameworks-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/example_drawing_tool/openFrameworks-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + cc.openFrameworks.ofapp + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFBundleIconFile + ${ICON} + + diff --git a/example_drawing_tool/src/main.cpp b/example_drawing_tool/src/main.cpp new file mode 100644 index 0000000..e57370b --- /dev/null +++ b/example_drawing_tool/src/main.cpp @@ -0,0 +1,13 @@ +#include "ofMain.h" +#include "ofApp.h" + +//======================================================================== +int main( ){ + ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp(new ofApp()); + +} diff --git a/example_drawing_tool/src/ofApp.cpp b/example_drawing_tool/src/ofApp.cpp new file mode 100644 index 0000000..f682e44 --- /dev/null +++ b/example_drawing_tool/src/ofApp.cpp @@ -0,0 +1,178 @@ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup(){ + + ofSetFrameRate(60); + + string host = Spacebrew::SPACEBREW_CLOUD; // "localhost"; + string name = "of-drawing-tool-example"; + string description = "Draw all the things"; + + spacebrew.addPublish("X", Spacebrew::TYPE_RANGE); + spacebrew.addPublish("Y", Spacebrew::TYPE_RANGE); + spacebrew.addPublish("hue", Spacebrew::TYPE_RANGE); + spacebrew.addPublish("clear", Spacebrew::TYPE_BOOLEAN); + + spacebrew.connect( host, name, description ); + + Spacebrew::addListener(this, spacebrew); + + + //set up the gui tool by passing it your spacebrew + //connection by reference (i.e. with the & symbol) + brewUI.setup( &spacebrew ); + + + numXYs = 0; + hue = 0; + +} + +//-------------------------------------------------------------- +void ofApp::update(){ + + brewUI.update(); + +} + +//-------------------------------------------------------------- +void ofApp::draw(){ + + ofBackgroundGradient(100, 0); + + ofSetLineWidth(4); + + if(points.size()){ + for(int i = 0; i < points.size() - 1; i++){ + + //need to make sure we have enough colors to + ofSetColor(ofColor::fromHsb(hues[i], 200, 200)); + ofDrawLine(points[i], points[i + 1]); + + } + } + + + + //draw UI + brewUI.draw(ofGetWidth() - brewUI.getWidth() - 10, 10); + + + + //Draw app info to screen + string msg; + msg += "App for sending drawing data from Spacebrew \"example_shared_canvas\"\n"; + msg += "Don't forget to add routes from drawing tool to shared canvas at \"" + spacebrew.getHost() + "\"!\n"; + msg += "\n"; + msg += "Click and Drag to draw and send X/Y/Color Values\n"; + msg += "Press SPACE to send a message to clear the canvas (and also clear locally)\n"; + msg += "\n"; + msg += "Points sent: " + ofToString(points.size()) + "\n"; + msg += "Press 'h' to hide Spacebrew Admin Info\n"; + msg += "Press 's' to show Spacebrew Admin Info\n"; + + + + ofSetColor(255); + ofDrawBitmapString(msg, 10, ofGetHeight() - 125); + + +} + + +//-------------------------------------------------------------- +void ofApp::onMessage( Spacebrew::Message & msg ){ + + + + +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + + if(key == 's'){ + brewUI.show(); + } + + if(key == 'h'){ + brewUI.hide(); + } + + + if(key == ' '){ + + //send a boolean message to tell the canvas to clear + spacebrew.sendBoolean("clear", true); + + //erase things locally too + points.clear(); + hues.clear(); + + } + + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + + spacebrew.sendRange("X", ofMap(x, 0, ofGetWidth(), 0, 1023)); + spacebrew.sendRange("Y", ofMap(y, 0, ofGetHeight(), 0, 1023)); + spacebrew.sendRange("hue", hue); + + points.push_back(ofVec2f(x, y)); + hues.push_back(hue); + + hue += 2; + + if(hue > 255) hue = 0; + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseEntered(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseExited(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} diff --git a/example_drawing_tool/src/ofApp.h b/example_drawing_tool/src/ofApp.h new file mode 100644 index 0000000..ec309a4 --- /dev/null +++ b/example_drawing_tool/src/ofApp.h @@ -0,0 +1,46 @@ +#pragma once + +#include "ofMain.h" +#include "ofxSpacebrew.h" +#include "ofxSpacebrewPanel.hpp" + + +class ofApp : public ofBaseApp{ + + public: + void setup(); + void update(); + void draw(); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void mouseEntered(int x, int y); + void mouseExited(int x, int y); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + // create your spacebrew object + Spacebrew::Connection spacebrew; + + // listen to spacebrew Messages + void onMessage( Spacebrew::Message & m ); + + //The Spacebrew UI + //Make sure you have the correct fonts in + //your bin folder! + ofxSpacebrewPanel brewUI; + + //vectors for storing points and colors + vector points; + vector hues; + + //little hack to make sure + //we're getting XY pairs + int numXYs; + int hue; +}; diff --git a/example_drawing_tool/src/ofxSpacebrewPanel.cpp b/example_drawing_tool/src/ofxSpacebrewPanel.cpp new file mode 100644 index 0000000..56d493c --- /dev/null +++ b/example_drawing_tool/src/ofxSpacebrewPanel.cpp @@ -0,0 +1,285 @@ +// +// ofxSpacebrewPanel.cpp +// +// Created by Adiel Fernandez on 2/20/16. +// +// + +#include "ofxSpacebrewPanel.hpp" + + +ofxSpacebrewPanel::ofxSpacebrewPanel(){ + +} + +void ofxSpacebrewPanel::setup(Spacebrew::Connection *_spacebrew){ + + //get local copy of pointer to the connection object + spacebrew = _spacebrew; + + + //Load UI fonts + titles.load("fonts/DINPro-Bold.otf", 16, true); + font.load("fonts/DINPro-Medium.otf", 10, true); + + + isVisible = true; + isOpen = true; + + + //Individual Element formatting + //Ideally hese should be defined in the ofxSpacebrewPanelElement class + //but we need them them below to set the width/height values. + //Make SpacebrewUI namespace then have these globally declared and accessible by this class and the element class via SpacebrewUI::ElementWidth, etc.? + nameWidth = 220; + typeWidth = 80; + outerCircleRad = 7.5; + innerCircleRad = 4.0; + elementHeight = 25; + elementWidth = typeWidth + nameWidth + outerCircleRad; + + + //Get the publishers by going through the connection object THEN + //through the Config object THEN to the getPublish vector + auto pubs = spacebrew -> getConfig() -> getPublish(); + + for(int i = 0; i < pubs.size(); i++){ + + Spacebrew::Message m = pubs[i]; + + ofxSpacebrewPanelElement elem(m.type, m.name, true, &font); + elem.getDimensions(elementHeight, nameWidth, typeWidth, outerCircleRad, innerCircleRad); + + publishers.push_back(elem); + + + } + + //do the same for the subscribers + auto subs = spacebrew -> getConfig() -> getSubscribe(); + + for(int i = 0; i < subs.size(); i++){ + + Spacebrew::Message m = subs[i]; + + ofxSpacebrewPanelElement elem(m.type, m.name, false, &font); + elem.getDimensions(elementHeight, nameWidth, typeWidth, outerCircleRad, innerCircleRad); + + subscribers.push_back(elem); + + } + + //if there are no subs and/or subs then add a placeholder + if(publishers.size() == 0){ + + ofxSpacebrewPanelElement placeholder("N/A", "No Publishers Created", true, &font, true); + placeholder.getDimensions(elementHeight, nameWidth, typeWidth, outerCircleRad, innerCircleRad); + publishers.push_back(placeholder); + + } + + if(subscribers.size() == 0){ + + ofxSpacebrewPanelElement placeholder("N/A", "No Subscribers Created", false, &font, true); + placeholder.getDimensions(elementHeight, nameWidth, typeWidth, outerCircleRad, innerCircleRad); + subscribers.push_back(placeholder); + + } + + + //add up all elements, spacing and font heights to get total box height + int numElements = publishers.size() + subscribers.size(); + + //General Panel Formatting + pubTitle = "/ PUBLISHERS"; + subTitle = "/ SUBSCRIBERS"; + hostTitle = "/ HOST"; + hostName = spacebrew -> getHost(); + + elementSpacing = 5; + padding = 15; + titleSpacing = elementSpacing * 3; + + width = elementWidth + padding * 2; + height = padding * 2 + numElements * elementHeight + (numElements - 1) * elementSpacing; + + height += titleSpacing + titles.stringHeight(pubTitle); + height += titleSpacing + titles.stringHeight(subTitle); + height += titleSpacing + titles.stringHeight(hostTitle); + height += titleSpacing + titles.stringHeight(hostName); + + + //initialize Pos + openPos.set(0, 0); + closedPos.set(0, -height - 10); + + //start as open + animatePos.set(0, 0); + + //need to scale FBO then draw it shrunken down + //or else the FBO makes everything look pixelated + fbo.allocate(width * 2, height * 2); + + //clear out the FBO + fbo.begin(); + ofClear(255, 255, 255, 255); + fbo.end(); + + + //add listener to detect messages + ofAddListener( spacebrew -> onMessageEvent, this, &ofxSpacebrewPanel::onMessage ); + ofAddListener( spacebrew -> onSendEvent, this, &ofxSpacebrewPanel::onSend); + +} + +void ofxSpacebrewPanel::onMessage( Spacebrew::Message& args ){ + + //go through subscribers and see which one this message belongs to + for(int i = 0; i < subscribers.size(); i++){ + + if(subscribers[i].name == args.name){ + subscribers[i].eventTriggered = true; + } + + } + +} + +void ofxSpacebrewPanel::onSend( string& name ){ + + //go through subscribers and see which one this message belongs to + for(int i = 0; i < publishers.size(); i++){ + + if(publishers[i].name == name){ + publishers[i].eventTriggered = true; + } + + } + +} + + +void ofxSpacebrewPanel::update(){ + + //update the publisher & subscriber elements + for(int i = 0; i < publishers.size(); i++){ + publishers[i].update(); + } + + for(int i = 0; i < subscribers.size(); i++){ + subscribers[i].update(); + } + + + + float animateSpeed = 0.09; + + if(isOpen){ + + //prevents unnecessary calculations as interpolations gets 99.999% there + if(ofDist(animatePos.x, animatePos.y, openPos.x, openPos.y) > 0.001){ + animatePos = animatePos.getInterpolated(openPos, animateSpeed); + } + + } else { + + //prevents unnecessary calculations as interpolations gets 99.999% there + if(ofDist(animatePos.x, animatePos.y, closedPos.x, closedPos.y) > 0.001){ + animatePos = animatePos.getInterpolated(closedPos, animateSpeed); + } else { + isVisible = false; + } + + } + + +} + +int ofxSpacebrewPanel::getWidth(){ + return width; +} + +int ofxSpacebrewPanel::getHeight(){ + return height; +} + +void ofxSpacebrewPanel::show(){ + isVisible = true; + isOpen = true; +} + +void ofxSpacebrewPanel::hide(){ + isOpen = false; +} + +void ofxSpacebrewPanel::draw(float _x, float _y){ + + + + if(isVisible){ + + fbo.begin(); + ofEnableAlphaBlending(); + + ofClear(0, 0); + + ofPushMatrix(); + ofScale(2, 2); + ofTranslate(animatePos.x, animatePos.y); + + //draw white background around everything + ofSetColor(255, 220); + ofDrawRectangle(0, 0, width, height); + + //host title + ofSetColor(0); + titles.drawString(hostTitle, padding, padding + titleSpacing); + ofTranslate(0, titles.stringHeight(hostTitle) + titleSpacing); + + //host name + ofSetColor(50); + float centerText = (width - titles.stringWidth(hostName))/2; + titles.drawString(hostName, centerText, padding + titleSpacing); + ofTranslate(0, titles.stringHeight(hostName) + titleSpacing); + + //publishers title + ofSetColor(0); + titles.drawString(pubTitle, padding, padding + titleSpacing); + ofTranslate(0, titles.stringHeight(pubTitle) + titleSpacing); + + //draw publishers + ofTranslate(padding, elementSpacing); + for(int i = 0; i < publishers.size(); i++){ + publishers[i].draw(); + ofTranslate(0, publishers[i].elementHeight + elementSpacing); + } + + //add a little extra gap between pubs and subs + ofTranslate(0, elementSpacing); + + //subs title + ofSetColor(0); + titles.drawString(subTitle, 0, 20); + ofTranslate(0, titles.stringHeight(subTitle) + titleSpacing); + + //draw subs + for(int i = 0; i < subscribers.size(); i++){ + subscribers[i].draw(); + ofTranslate(0, subscribers[i].elementHeight + elementSpacing); + } + + ofPopMatrix(); + + fbo.end(); + + ofSetColor(255); + fbo.draw(_x, _y, width, height); + + + } + + +} + + + diff --git a/example_drawing_tool/src/ofxSpacebrewPanel.hpp b/example_drawing_tool/src/ofxSpacebrewPanel.hpp new file mode 100644 index 0000000..414f2f8 --- /dev/null +++ b/example_drawing_tool/src/ofxSpacebrewPanel.hpp @@ -0,0 +1,89 @@ +// +// SpacebrewUI.hpp +// +// Created by Adiel Fernandez on 2/20/16. +// +// + +#ifndef SpacebrewUI_hpp +#define SpacebrewUI_hpp + +#include + +#endif /* SpacebrewUI */ + +#include "ofMain.h" +#include "ofxSpacebrew.h" +#include "ofxSpacebrewPanelElement.hpp" + +#pragma once + + +class ofxSpacebrewPanel{ + +public: + + ofxSpacebrewPanel(); + + void setup(Spacebrew::Connection *_spacebrew); + void update(); + void draw(float _x, float _y); + + void show(); + void hide(); + int getWidth(); + int getHeight(); + + + + +private: + + void onSend( string& args ); + void onMessage( Spacebrew::Message& name ); + + + + + Spacebrew::Connection *spacebrew; + + //local list of pubs and subs + vector publishers; + vector subscribers; + + bool isVisible; + bool isOpen; + + ofVec2f position; + ofVec2f closedPos, openPos, animatePos; + + + //Formatting + ofTrueTypeFont font; + ofTrueTypeFont titles; + + float width, height; + + //declare these globally so we can have + //use global width/height variables + string pubTitle; + string subTitle; + string hostTitle; + string hostName; + + float nameWidth, typeWidth; + float elementHeight, elementWidth; + float outerCircleRad, innerCircleRad; + float elementSpacing; + float padding; + float titleSpacing; + + + //use an FBO so we can do the + //slide out animation + ofFbo fbo; + +}; + + + diff --git a/example_drawing_tool/src/ofxSpacebrewPanelElement.cpp b/example_drawing_tool/src/ofxSpacebrewPanelElement.cpp new file mode 100644 index 0000000..de5bc2a --- /dev/null +++ b/example_drawing_tool/src/ofxSpacebrewPanelElement.cpp @@ -0,0 +1,191 @@ +// +// ofxSpacebrewPanelElement.cpp +// Drawing Tool +// +// Created by Adiel Fernandez on 2/20/16. +// +// + +#include "ofxSpacebrewPanelElement.hpp" + + +ofxSpacebrewPanelElement::ofxSpacebrewPanelElement(string _type, string _name, bool _isPublisher, ofTrueTypeFont *_font, bool placeHolder){ + + + type = _type; + name = _name; + font = _font; + isPublisher = _isPublisher; + + //set colors depending on type + if(type == "range"){ + typeCol.set(198, 0, 248); + } else if(type == "string"){ + typeCol.set(255, 0, 0); + } else if(type == "boolean"){ + typeCol.set(255, 174, 0); + } + + + + if(isPublisher){ + nameCol.set(176, 237, 255); + } else { + nameCol.set(177, 255, 216); + } + + + //capitalize TYPE name + for(int i = 0; i < type.length(); i++){ + type[i] = toupper(type[i]); + } + + //flag to be flipped by incoming event + eventTriggered = false; + + //use alternate colors when triggered + triggerColors = false; + + //last time triggered + triggerTime = 0; + + //how long to flash alt colors + showTriggeredDelay = 200; + + innerCircleCol.set(255); + outerCircleCol.set(0); + + + + isPlaceHolder = placeHolder; + + //override stuff if we're just a place holder + if(isPlaceHolder){ + nameCol.set(150); + typeCol.set(120); + innerCircleCol.set(200); + outerCircleCol.set(100); + } + + + +} + +//get dimensions from the UI instance +void ofxSpacebrewPanelElement::getDimensions(float elemH, float nameW, float typeW, float outRad, float inRad){ + + elementHeight = elemH; + nameWidth = nameW; + typeWidth = typeW; + outerCircleRad = outRad; + innerCircleRad = inRad; + elementWidth = typeWidth + nameWidth + outerCircleRad; + +} + + +void ofxSpacebrewPanelElement::update(){ + + //change circle colors when an event is triggered + if(!isPlaceHolder){ + + if(eventTriggered){ + triggerTime = ofGetElapsedTimeMillis(); + triggerColors = true; + eventTriggered = false; + } + + + if(triggerColors && ofGetElapsedTimeMillis() - triggerTime < showTriggeredDelay){ + innerCircleCol.set(0); + outerCircleCol.set(4, 203, 255); + } else { + innerCircleCol.set(255); + outerCircleCol.set(0); + } + + } + + +} + +void ofxSpacebrewPanelElement::draw(){ + + + ofPoint nameDim(font -> stringWidth(name), font -> stringHeight(name)); + ofPoint typeDim(font -> stringWidth(type), font -> stringHeight(type)); + + float nameMargin = 15; + + + + ofSetCircleResolution(60); + + //Drawing Publisher from left to right is Type, Name then trigger circle + //need ro reverse if it's a Subscriber + if(isPublisher){ + + //type + ofSetColor(typeCol); + ofDrawRectangle(0, 0, typeWidth, elementHeight); + + ofSetColor(255); + font -> drawString(type, typeWidth/2 - typeDim.x/2, elementHeight/2 + typeDim.y/2); + + //name + ofSetColor(nameCol); + ofDrawRectangle(typeWidth, 0, nameWidth, elementHeight); + + if(!isPlaceHolder){ + ofSetColor(0); + } else { + ofSetColor(255); + } + font -> drawString(name, typeWidth + nameWidth - nameDim.x - nameMargin, elementHeight/2 + nameDim.y/2); + + + //black circle outline + ofSetColor(outerCircleCol); + ofDrawCircle(nameWidth + typeWidth, elementHeight/2, outerCircleRad); + //inner white circle + ofSetColor(innerCircleCol); + ofDrawCircle(nameWidth + typeWidth, elementHeight/2, innerCircleRad); + + } else { + + //push every thing in a little bit so + //the circles align with boxes at the left + ofPushMatrix(); + ofTranslate(outerCircleRad, 0); + + //name + ofSetColor(nameCol); + ofDrawRectangle(0, 0, nameWidth, elementHeight); + + if(!isPlaceHolder){ + ofSetColor(0); + } else { + ofSetColor(255); + } + font -> drawString(name, nameMargin, elementHeight/2 + nameDim.y/2); + + //type + ofSetColor(typeCol); + ofDrawRectangle(nameWidth, 0, typeWidth, elementHeight); + + ofSetColor(255); + font -> drawString(type, nameWidth + typeWidth/2 - typeDim.x/2, elementHeight/2 + typeDim.y/2); + + //black circle outline + ofSetColor(outerCircleCol); + ofDrawCircle(0, elementHeight/2, outerCircleRad); + //inner white circle + ofSetColor(innerCircleCol); + ofDrawCircle(0, elementHeight/2, innerCircleRad); + + ofPopMatrix(); + } + + + +} \ No newline at end of file diff --git a/example_drawing_tool/src/ofxSpacebrewPanelElement.hpp b/example_drawing_tool/src/ofxSpacebrewPanelElement.hpp new file mode 100644 index 0000000..75ee4b9 --- /dev/null +++ b/example_drawing_tool/src/ofxSpacebrewPanelElement.hpp @@ -0,0 +1,50 @@ +// +// ofxSpacebrewPanelElement.hpp +// Drawing Tool +// +// Created by Adiel Fernandez on 2/20/16. +// +// + +#ifndef SpacebrewElement_hpp +#define SpacebrewElement_hpp + +#include + +#endif /* SpacebrewElement_hpp */ + +#include "ofMain.h" +#include "ofxSpacebrew.h" +#pragma once + + + +class ofxSpacebrewPanelElement{ + +public: + + ofxSpacebrewPanelElement(string _type, string _name, bool _isPublisher, ofTrueTypeFont *_font, bool placeHolder = false); + + void getDimensions(float elemH, float nameW, float typeW, float outRad, float inRad); + + void update(); + void draw(); + + //Formatting + float nameWidth, typeWidth; + float elementHeight, elementWidth; + float outerCircleRad, innerCircleRad; + + bool isPublisher; + bool isPlaceHolder; + bool eventTriggered, triggerColors; + int triggerTime, showTriggeredDelay; + + + string type, name; + ofColor typeCol, nameCol; + ofColor innerCircleCol, outerCircleCol; + + ofTrueTypeFont *font; + +}; \ No newline at end of file diff --git a/example_shared_canvas/Makefile b/example_shared_canvas/Makefile new file mode 100644 index 0000000..8d8e4c0 --- /dev/null +++ b/example_shared_canvas/Makefile @@ -0,0 +1,13 @@ +# Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=$(realpath ../../..) +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/example_shared_canvas/Project.xcconfig b/example_shared_canvas/Project.xcconfig new file mode 100644 index 0000000..e570b15 --- /dev/null +++ b/example_shared_canvas/Project.xcconfig @@ -0,0 +1,17 @@ +//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. +//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED +OF_PATH = ../../.. + +//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE +#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" + +//ICONS - NEW IN 0072 +ICON_NAME_DEBUG = icon-debug.icns +ICON_NAME_RELEASE = icon.icns +ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ + +//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: +//ICON_FILE_PATH = bin/data/ + +OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) +HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/example_shared_canvas/addons.make b/example_shared_canvas/addons.make new file mode 100644 index 0000000..90083e1 --- /dev/null +++ b/example_shared_canvas/addons.make @@ -0,0 +1,2 @@ +ofxLibwebsockets +ofxSpacebrew diff --git a/example_shared_canvas/bin/data/.gitkeep b/example_shared_canvas/bin/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/example_shared_canvas/bin/data/fonts/DINPro-Bold.otf b/example_shared_canvas/bin/data/fonts/DINPro-Bold.otf new file mode 100644 index 0000000000000000000000000000000000000000..7c8395364885f9a8aeed3237a9fc5bc81626b4da GIT binary patch literal 90228 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 axGu^Di+^-cwl!H^xyk;UG0O%)dj20v|70ov literal 0 HcmV?d00001 diff --git a/example_shared_canvas/bin/data/fonts/DINPro-Medium.otf b/example_shared_canvas/bin/data/fonts/DINPro-Medium.otf new file mode 100644 index 0000000000000000000000000000000000000000..b4608d06d170998c463a5451d552b533149dabef GIT binary patch literal 89060 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_shared_canvas/example_shared_canvas.xcodeproj/xcshareddata/xcschemes/example_shared_canvas Release.xcscheme b/example_shared_canvas/example_shared_canvas.xcodeproj/xcshareddata/xcschemes/example_shared_canvas Release.xcscheme new file mode 100644 index 0000000..939e600 --- /dev/null +++ b/example_shared_canvas/example_shared_canvas.xcodeproj/xcshareddata/xcschemes/example_shared_canvas Release.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_shared_canvas/openFrameworks-Info.plist b/example_shared_canvas/openFrameworks-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/example_shared_canvas/openFrameworks-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + cc.openFrameworks.ofapp + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFBundleIconFile + ${ICON} + + diff --git a/example_shared_canvas/src/main.cpp b/example_shared_canvas/src/main.cpp new file mode 100644 index 0000000..e57370b --- /dev/null +++ b/example_shared_canvas/src/main.cpp @@ -0,0 +1,13 @@ +#include "ofMain.h" +#include "ofApp.h" + +//======================================================================== +int main( ){ + ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp(new ofApp()); + +} diff --git a/example_shared_canvas/src/ofApp.cpp b/example_shared_canvas/src/ofApp.cpp new file mode 100644 index 0000000..8a0cfe0 --- /dev/null +++ b/example_shared_canvas/src/ofApp.cpp @@ -0,0 +1,188 @@ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup(){ + + ofSetFrameRate(60); + + string host = Spacebrew::SPACEBREW_CLOUD; // "localhost"; + string name = "of-canvas-example"; + string description = "Draw all the things"; + + spacebrew.addSubscribe("X", Spacebrew::TYPE_RANGE); + spacebrew.addSubscribe("Y", Spacebrew::TYPE_RANGE); + spacebrew.addSubscribe("hue", Spacebrew::TYPE_RANGE); + spacebrew.addSubscribe("clear", Spacebrew::TYPE_BOOLEAN); + + + spacebrew.connect( host, name, description ); + + Spacebrew::addListener(this, spacebrew); + + brewUI.setup(&spacebrew); + + //how many X and Y values we've gotten + //only add a point to the vector if we've received + //an even number, i.e. X AND Y + numXYs = 0; + + //the color we're drawing with + hue = 0; + +} + +//-------------------------------------------------------------- +void ofApp::update(){ + + //update the UI tool + brewUI.update(); + +} + +//-------------------------------------------------------------- +void ofApp::draw(){ + + + ofBackgroundGradient(100, 0); + + ofSetLineWidth(4); + + //if we have points... + if(points.size() > 0){ + + //Go through them and draw a line from this point to the next + for(int i = 0; i < points.size() - 1; i++){ + + //need to make sure we have enough colors to + ofSetColor(ofColor::fromHsb(hues[i], 200, 200)); + ofDrawLine(points[i], points[i + 1]); + + } + } + + + //draw UI + brewUI.draw(10, 10); + + + //Draw app info to screen + string msg; + + msg += "App for receiving drawing data from Spacebrew \"example_drawing_tool\"\n"; + msg += "Don't forget to add routes from drawing tool to shared canvas at \"" + spacebrew.getHost() + "\"!\n"; + msg += "\n"; + msg += "Points received: " + ofToString(points.size()) + "\n"; + msg += "Press 'h' to hide Spacebrew Admin Info\n"; + msg += "Press 's' to show Spacebrew Admin Info\n"; + + + + ofSetColor(255); + ofDrawBitmapString(msg, 10, ofGetHeight() - 80); + +} + + +//-------------------------------------------------------------- +void ofApp::onMessage( Spacebrew::Message & msg ){ + + + //go through message and see what the values are + if(msg.name == "X"){ + currentPoint.x = ofMap(msg.valueRange(), 0, 1023, 0, ofGetWidth()); + numXYs++; + + } else if(msg.name == "Y"){ + currentPoint.y = ofMap(msg.valueRange(), 0, 1023, 0, ofGetHeight()); + numXYs++; + + } else if(msg.name == "hue"){ + hue = msg.valueRange(); + + + } else if(msg.name == "clear"){ + + points.clear(); + hues.clear(); + numXYs = 0; + + } + + + //if we've received 2 points THEN add them + //to the vector + if(msg.name == "X" || msg.name == "Y"){ + if(numXYs % 2 == 0){ + points.push_back(currentPoint); + hues.push_back(hue); + } + } + +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + + + //show the gui if it's hidden + if(key == 's'){ + brewUI.show(); + } + + //hide the gui if it's shown + if(key == 'h'){ + brewUI.hide(); + } + + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseEntered(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseExited(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} diff --git a/example_shared_canvas/src/ofApp.h b/example_shared_canvas/src/ofApp.h new file mode 100644 index 0000000..1ba56fb --- /dev/null +++ b/example_shared_canvas/src/ofApp.h @@ -0,0 +1,51 @@ +#pragma once + +#include "ofMain.h" +#include "ofxSpacebrew.h" +#include "ofxSpacebrewPanel.hpp" + + +class ofApp : public ofBaseApp{ + + public: + void setup(); + void update(); + void draw(); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void mouseEntered(int x, int y); + void mouseExited(int x, int y); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + // create your spacebrew object + Spacebrew::Connection spacebrew; + + //The Spacebrew UI + //Make sure you have the correct fonts in + //your bin folder! + ofxSpacebrewPanel brewUI; + + + // listen to spacebrew Messages + void onMessage( Spacebrew::Message & m ); + + //vectors to store points and colors + vector points; + vector hues; + + //make sure we store the current point + //when we get an X and Y pair + int numXYs; + ofVec2f currentPoint; + + //Color + int hue; + +}; diff --git a/example_shared_canvas/src/ofxSpacebrewPanel.cpp b/example_shared_canvas/src/ofxSpacebrewPanel.cpp new file mode 100644 index 0000000..56d493c --- /dev/null +++ b/example_shared_canvas/src/ofxSpacebrewPanel.cpp @@ -0,0 +1,285 @@ +// +// ofxSpacebrewPanel.cpp +// +// Created by Adiel Fernandez on 2/20/16. +// +// + +#include "ofxSpacebrewPanel.hpp" + + +ofxSpacebrewPanel::ofxSpacebrewPanel(){ + +} + +void ofxSpacebrewPanel::setup(Spacebrew::Connection *_spacebrew){ + + //get local copy of pointer to the connection object + spacebrew = _spacebrew; + + + //Load UI fonts + titles.load("fonts/DINPro-Bold.otf", 16, true); + font.load("fonts/DINPro-Medium.otf", 10, true); + + + isVisible = true; + isOpen = true; + + + //Individual Element formatting + //Ideally hese should be defined in the ofxSpacebrewPanelElement class + //but we need them them below to set the width/height values. + //Make SpacebrewUI namespace then have these globally declared and accessible by this class and the element class via SpacebrewUI::ElementWidth, etc.? + nameWidth = 220; + typeWidth = 80; + outerCircleRad = 7.5; + innerCircleRad = 4.0; + elementHeight = 25; + elementWidth = typeWidth + nameWidth + outerCircleRad; + + + //Get the publishers by going through the connection object THEN + //through the Config object THEN to the getPublish vector + auto pubs = spacebrew -> getConfig() -> getPublish(); + + for(int i = 0; i < pubs.size(); i++){ + + Spacebrew::Message m = pubs[i]; + + ofxSpacebrewPanelElement elem(m.type, m.name, true, &font); + elem.getDimensions(elementHeight, nameWidth, typeWidth, outerCircleRad, innerCircleRad); + + publishers.push_back(elem); + + + } + + //do the same for the subscribers + auto subs = spacebrew -> getConfig() -> getSubscribe(); + + for(int i = 0; i < subs.size(); i++){ + + Spacebrew::Message m = subs[i]; + + ofxSpacebrewPanelElement elem(m.type, m.name, false, &font); + elem.getDimensions(elementHeight, nameWidth, typeWidth, outerCircleRad, innerCircleRad); + + subscribers.push_back(elem); + + } + + //if there are no subs and/or subs then add a placeholder + if(publishers.size() == 0){ + + ofxSpacebrewPanelElement placeholder("N/A", "No Publishers Created", true, &font, true); + placeholder.getDimensions(elementHeight, nameWidth, typeWidth, outerCircleRad, innerCircleRad); + publishers.push_back(placeholder); + + } + + if(subscribers.size() == 0){ + + ofxSpacebrewPanelElement placeholder("N/A", "No Subscribers Created", false, &font, true); + placeholder.getDimensions(elementHeight, nameWidth, typeWidth, outerCircleRad, innerCircleRad); + subscribers.push_back(placeholder); + + } + + + //add up all elements, spacing and font heights to get total box height + int numElements = publishers.size() + subscribers.size(); + + //General Panel Formatting + pubTitle = "/ PUBLISHERS"; + subTitle = "/ SUBSCRIBERS"; + hostTitle = "/ HOST"; + hostName = spacebrew -> getHost(); + + elementSpacing = 5; + padding = 15; + titleSpacing = elementSpacing * 3; + + width = elementWidth + padding * 2; + height = padding * 2 + numElements * elementHeight + (numElements - 1) * elementSpacing; + + height += titleSpacing + titles.stringHeight(pubTitle); + height += titleSpacing + titles.stringHeight(subTitle); + height += titleSpacing + titles.stringHeight(hostTitle); + height += titleSpacing + titles.stringHeight(hostName); + + + //initialize Pos + openPos.set(0, 0); + closedPos.set(0, -height - 10); + + //start as open + animatePos.set(0, 0); + + //need to scale FBO then draw it shrunken down + //or else the FBO makes everything look pixelated + fbo.allocate(width * 2, height * 2); + + //clear out the FBO + fbo.begin(); + ofClear(255, 255, 255, 255); + fbo.end(); + + + //add listener to detect messages + ofAddListener( spacebrew -> onMessageEvent, this, &ofxSpacebrewPanel::onMessage ); + ofAddListener( spacebrew -> onSendEvent, this, &ofxSpacebrewPanel::onSend); + +} + +void ofxSpacebrewPanel::onMessage( Spacebrew::Message& args ){ + + //go through subscribers and see which one this message belongs to + for(int i = 0; i < subscribers.size(); i++){ + + if(subscribers[i].name == args.name){ + subscribers[i].eventTriggered = true; + } + + } + +} + +void ofxSpacebrewPanel::onSend( string& name ){ + + //go through subscribers and see which one this message belongs to + for(int i = 0; i < publishers.size(); i++){ + + if(publishers[i].name == name){ + publishers[i].eventTriggered = true; + } + + } + +} + + +void ofxSpacebrewPanel::update(){ + + //update the publisher & subscriber elements + for(int i = 0; i < publishers.size(); i++){ + publishers[i].update(); + } + + for(int i = 0; i < subscribers.size(); i++){ + subscribers[i].update(); + } + + + + float animateSpeed = 0.09; + + if(isOpen){ + + //prevents unnecessary calculations as interpolations gets 99.999% there + if(ofDist(animatePos.x, animatePos.y, openPos.x, openPos.y) > 0.001){ + animatePos = animatePos.getInterpolated(openPos, animateSpeed); + } + + } else { + + //prevents unnecessary calculations as interpolations gets 99.999% there + if(ofDist(animatePos.x, animatePos.y, closedPos.x, closedPos.y) > 0.001){ + animatePos = animatePos.getInterpolated(closedPos, animateSpeed); + } else { + isVisible = false; + } + + } + + +} + +int ofxSpacebrewPanel::getWidth(){ + return width; +} + +int ofxSpacebrewPanel::getHeight(){ + return height; +} + +void ofxSpacebrewPanel::show(){ + isVisible = true; + isOpen = true; +} + +void ofxSpacebrewPanel::hide(){ + isOpen = false; +} + +void ofxSpacebrewPanel::draw(float _x, float _y){ + + + + if(isVisible){ + + fbo.begin(); + ofEnableAlphaBlending(); + + ofClear(0, 0); + + ofPushMatrix(); + ofScale(2, 2); + ofTranslate(animatePos.x, animatePos.y); + + //draw white background around everything + ofSetColor(255, 220); + ofDrawRectangle(0, 0, width, height); + + //host title + ofSetColor(0); + titles.drawString(hostTitle, padding, padding + titleSpacing); + ofTranslate(0, titles.stringHeight(hostTitle) + titleSpacing); + + //host name + ofSetColor(50); + float centerText = (width - titles.stringWidth(hostName))/2; + titles.drawString(hostName, centerText, padding + titleSpacing); + ofTranslate(0, titles.stringHeight(hostName) + titleSpacing); + + //publishers title + ofSetColor(0); + titles.drawString(pubTitle, padding, padding + titleSpacing); + ofTranslate(0, titles.stringHeight(pubTitle) + titleSpacing); + + //draw publishers + ofTranslate(padding, elementSpacing); + for(int i = 0; i < publishers.size(); i++){ + publishers[i].draw(); + ofTranslate(0, publishers[i].elementHeight + elementSpacing); + } + + //add a little extra gap between pubs and subs + ofTranslate(0, elementSpacing); + + //subs title + ofSetColor(0); + titles.drawString(subTitle, 0, 20); + ofTranslate(0, titles.stringHeight(subTitle) + titleSpacing); + + //draw subs + for(int i = 0; i < subscribers.size(); i++){ + subscribers[i].draw(); + ofTranslate(0, subscribers[i].elementHeight + elementSpacing); + } + + ofPopMatrix(); + + fbo.end(); + + ofSetColor(255); + fbo.draw(_x, _y, width, height); + + + } + + +} + + + diff --git a/example_shared_canvas/src/ofxSpacebrewPanel.hpp b/example_shared_canvas/src/ofxSpacebrewPanel.hpp new file mode 100644 index 0000000..414f2f8 --- /dev/null +++ b/example_shared_canvas/src/ofxSpacebrewPanel.hpp @@ -0,0 +1,89 @@ +// +// SpacebrewUI.hpp +// +// Created by Adiel Fernandez on 2/20/16. +// +// + +#ifndef SpacebrewUI_hpp +#define SpacebrewUI_hpp + +#include + +#endif /* SpacebrewUI */ + +#include "ofMain.h" +#include "ofxSpacebrew.h" +#include "ofxSpacebrewPanelElement.hpp" + +#pragma once + + +class ofxSpacebrewPanel{ + +public: + + ofxSpacebrewPanel(); + + void setup(Spacebrew::Connection *_spacebrew); + void update(); + void draw(float _x, float _y); + + void show(); + void hide(); + int getWidth(); + int getHeight(); + + + + +private: + + void onSend( string& args ); + void onMessage( Spacebrew::Message& name ); + + + + + Spacebrew::Connection *spacebrew; + + //local list of pubs and subs + vector publishers; + vector subscribers; + + bool isVisible; + bool isOpen; + + ofVec2f position; + ofVec2f closedPos, openPos, animatePos; + + + //Formatting + ofTrueTypeFont font; + ofTrueTypeFont titles; + + float width, height; + + //declare these globally so we can have + //use global width/height variables + string pubTitle; + string subTitle; + string hostTitle; + string hostName; + + float nameWidth, typeWidth; + float elementHeight, elementWidth; + float outerCircleRad, innerCircleRad; + float elementSpacing; + float padding; + float titleSpacing; + + + //use an FBO so we can do the + //slide out animation + ofFbo fbo; + +}; + + + diff --git a/example_shared_canvas/src/ofxSpacebrewPanelElement.cpp b/example_shared_canvas/src/ofxSpacebrewPanelElement.cpp new file mode 100644 index 0000000..de5bc2a --- /dev/null +++ b/example_shared_canvas/src/ofxSpacebrewPanelElement.cpp @@ -0,0 +1,191 @@ +// +// ofxSpacebrewPanelElement.cpp +// Drawing Tool +// +// Created by Adiel Fernandez on 2/20/16. +// +// + +#include "ofxSpacebrewPanelElement.hpp" + + +ofxSpacebrewPanelElement::ofxSpacebrewPanelElement(string _type, string _name, bool _isPublisher, ofTrueTypeFont *_font, bool placeHolder){ + + + type = _type; + name = _name; + font = _font; + isPublisher = _isPublisher; + + //set colors depending on type + if(type == "range"){ + typeCol.set(198, 0, 248); + } else if(type == "string"){ + typeCol.set(255, 0, 0); + } else if(type == "boolean"){ + typeCol.set(255, 174, 0); + } + + + + if(isPublisher){ + nameCol.set(176, 237, 255); + } else { + nameCol.set(177, 255, 216); + } + + + //capitalize TYPE name + for(int i = 0; i < type.length(); i++){ + type[i] = toupper(type[i]); + } + + //flag to be flipped by incoming event + eventTriggered = false; + + //use alternate colors when triggered + triggerColors = false; + + //last time triggered + triggerTime = 0; + + //how long to flash alt colors + showTriggeredDelay = 200; + + innerCircleCol.set(255); + outerCircleCol.set(0); + + + + isPlaceHolder = placeHolder; + + //override stuff if we're just a place holder + if(isPlaceHolder){ + nameCol.set(150); + typeCol.set(120); + innerCircleCol.set(200); + outerCircleCol.set(100); + } + + + +} + +//get dimensions from the UI instance +void ofxSpacebrewPanelElement::getDimensions(float elemH, float nameW, float typeW, float outRad, float inRad){ + + elementHeight = elemH; + nameWidth = nameW; + typeWidth = typeW; + outerCircleRad = outRad; + innerCircleRad = inRad; + elementWidth = typeWidth + nameWidth + outerCircleRad; + +} + + +void ofxSpacebrewPanelElement::update(){ + + //change circle colors when an event is triggered + if(!isPlaceHolder){ + + if(eventTriggered){ + triggerTime = ofGetElapsedTimeMillis(); + triggerColors = true; + eventTriggered = false; + } + + + if(triggerColors && ofGetElapsedTimeMillis() - triggerTime < showTriggeredDelay){ + innerCircleCol.set(0); + outerCircleCol.set(4, 203, 255); + } else { + innerCircleCol.set(255); + outerCircleCol.set(0); + } + + } + + +} + +void ofxSpacebrewPanelElement::draw(){ + + + ofPoint nameDim(font -> stringWidth(name), font -> stringHeight(name)); + ofPoint typeDim(font -> stringWidth(type), font -> stringHeight(type)); + + float nameMargin = 15; + + + + ofSetCircleResolution(60); + + //Drawing Publisher from left to right is Type, Name then trigger circle + //need ro reverse if it's a Subscriber + if(isPublisher){ + + //type + ofSetColor(typeCol); + ofDrawRectangle(0, 0, typeWidth, elementHeight); + + ofSetColor(255); + font -> drawString(type, typeWidth/2 - typeDim.x/2, elementHeight/2 + typeDim.y/2); + + //name + ofSetColor(nameCol); + ofDrawRectangle(typeWidth, 0, nameWidth, elementHeight); + + if(!isPlaceHolder){ + ofSetColor(0); + } else { + ofSetColor(255); + } + font -> drawString(name, typeWidth + nameWidth - nameDim.x - nameMargin, elementHeight/2 + nameDim.y/2); + + + //black circle outline + ofSetColor(outerCircleCol); + ofDrawCircle(nameWidth + typeWidth, elementHeight/2, outerCircleRad); + //inner white circle + ofSetColor(innerCircleCol); + ofDrawCircle(nameWidth + typeWidth, elementHeight/2, innerCircleRad); + + } else { + + //push every thing in a little bit so + //the circles align with boxes at the left + ofPushMatrix(); + ofTranslate(outerCircleRad, 0); + + //name + ofSetColor(nameCol); + ofDrawRectangle(0, 0, nameWidth, elementHeight); + + if(!isPlaceHolder){ + ofSetColor(0); + } else { + ofSetColor(255); + } + font -> drawString(name, nameMargin, elementHeight/2 + nameDim.y/2); + + //type + ofSetColor(typeCol); + ofDrawRectangle(nameWidth, 0, typeWidth, elementHeight); + + ofSetColor(255); + font -> drawString(type, nameWidth + typeWidth/2 - typeDim.x/2, elementHeight/2 + typeDim.y/2); + + //black circle outline + ofSetColor(outerCircleCol); + ofDrawCircle(0, elementHeight/2, outerCircleRad); + //inner white circle + ofSetColor(innerCircleCol); + ofDrawCircle(0, elementHeight/2, innerCircleRad); + + ofPopMatrix(); + } + + + +} \ No newline at end of file diff --git a/example_shared_canvas/src/ofxSpacebrewPanelElement.hpp b/example_shared_canvas/src/ofxSpacebrewPanelElement.hpp new file mode 100644 index 0000000..75ee4b9 --- /dev/null +++ b/example_shared_canvas/src/ofxSpacebrewPanelElement.hpp @@ -0,0 +1,50 @@ +// +// ofxSpacebrewPanelElement.hpp +// Drawing Tool +// +// Created by Adiel Fernandez on 2/20/16. +// +// + +#ifndef SpacebrewElement_hpp +#define SpacebrewElement_hpp + +#include + +#endif /* SpacebrewElement_hpp */ + +#include "ofMain.h" +#include "ofxSpacebrew.h" +#pragma once + + + +class ofxSpacebrewPanelElement{ + +public: + + ofxSpacebrewPanelElement(string _type, string _name, bool _isPublisher, ofTrueTypeFont *_font, bool placeHolder = false); + + void getDimensions(float elemH, float nameW, float typeW, float outRad, float inRad); + + void update(); + void draw(); + + //Formatting + float nameWidth, typeWidth; + float elementHeight, elementWidth; + float outerCircleRad, innerCircleRad; + + bool isPublisher; + bool isPlaceHolder; + bool eventTriggered, triggerColors; + int triggerTime, showTriggeredDelay; + + + string type, name; + ofColor typeCol, nameCol; + ofColor innerCircleCol, outerCircleCol; + + ofTrueTypeFont *font; + +}; \ No newline at end of file diff --git a/src/ofxSpacebrew.cpp b/src/ofxSpacebrew.cpp index 162fd1d..0e8e9f3 100644 --- a/src/ofxSpacebrew.cpp +++ b/src/ofxSpacebrew.cpp @@ -398,6 +398,7 @@ namespace Spacebrew { if ( bConnected ){ #ifdef SPACEBREW_USE_OFX_LWS client.send( m.getJSON( config.clientName ) ); + ofNotifyEvent(onSendEvent, m.name, this); #endif } else { ofLog( OF_LOG_WARNING, "Send failed, not connected!"); diff --git a/src/ofxSpacebrew.h b/src/ofxSpacebrew.h index 10b96b9..c47f5db 100644 --- a/src/ofxSpacebrew.h +++ b/src/ofxSpacebrew.h @@ -299,10 +299,17 @@ namespace Spacebrew { */ ofEvent onMessageEvent; + /* + * @brief ofEvent to listen to. + * Only passes a string with the name + * of the publisher that is sending + */ + ofEvent onSendEvent; + /** * @return Current Spacebrew::Config (list of publish/subscribe, etc) */ - Config * getConfig(); + Config * getConfig(); /** * @return Are we connected?