mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-15 04:09:59 +01:00
Creating view for APPEARANCE control
This commit is contained in:
13
Mixer.cpp
13
Mixer.cpp
@@ -78,6 +78,10 @@ static void saveSession(const std::string& filename, Session *session)
|
|||||||
layer->InsertEndChild( SessionVisitor::NodeToXML(*session->config(View::LAYER), &xmlDoc));
|
layer->InsertEndChild( SessionVisitor::NodeToXML(*session->config(View::LAYER), &xmlDoc));
|
||||||
views->InsertEndChild(layer);
|
views->InsertEndChild(layer);
|
||||||
|
|
||||||
|
XMLElement *appearance = xmlDoc.NewElement( "Appearance" );
|
||||||
|
appearance->InsertEndChild( SessionVisitor::NodeToXML(*session->config(View::APPEARANCE), &xmlDoc));
|
||||||
|
views->InsertEndChild(appearance);
|
||||||
|
|
||||||
XMLElement *render = xmlDoc.NewElement( "Rendering" );
|
XMLElement *render = xmlDoc.NewElement( "Rendering" );
|
||||||
render->InsertEndChild( SessionVisitor::NodeToXML(*session->config(View::RENDERING), &xmlDoc));
|
render->InsertEndChild( SessionVisitor::NodeToXML(*session->config(View::RENDERING), &xmlDoc));
|
||||||
views->InsertEndChild(render);
|
views->InsertEndChild(render);
|
||||||
@@ -432,6 +436,7 @@ void Mixer::attach(Source *s)
|
|||||||
mixing_.scene.ws()->attach( s->group(View::MIXING) );
|
mixing_.scene.ws()->attach( s->group(View::MIXING) );
|
||||||
geometry_.scene.ws()->attach( s->group(View::GEOMETRY) );
|
geometry_.scene.ws()->attach( s->group(View::GEOMETRY) );
|
||||||
layer_.scene.ws()->attach( s->group(View::LAYER) );
|
layer_.scene.ws()->attach( s->group(View::LAYER) );
|
||||||
|
appearance_.scene.ws()->attach( s->group(View::APPEARANCE) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,6 +452,7 @@ void Mixer::detach(Source *s)
|
|||||||
mixing_.scene.ws()->detatch( s->group(View::MIXING) );
|
mixing_.scene.ws()->detatch( s->group(View::MIXING) );
|
||||||
geometry_.scene.ws()->detatch( s->group(View::GEOMETRY) );
|
geometry_.scene.ws()->detatch( s->group(View::GEOMETRY) );
|
||||||
layer_.scene.ws()->detatch( s->group(View::LAYER) );
|
layer_.scene.ws()->detatch( s->group(View::LAYER) );
|
||||||
|
appearance_.scene.ws()->detatch( s->group(View::APPEARANCE) );
|
||||||
transition_.scene.ws()->detatch( s->group(View::TRANSITION) );
|
transition_.scene.ws()->detatch( s->group(View::TRANSITION) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -685,6 +691,9 @@ void Mixer::setView(View::Mode m)
|
|||||||
case View::LAYER:
|
case View::LAYER:
|
||||||
current_view_ = &layer_;
|
current_view_ = &layer_;
|
||||||
break;
|
break;
|
||||||
|
case View::APPEARANCE:
|
||||||
|
current_view_ = &appearance_;
|
||||||
|
break;
|
||||||
case View::MIXING:
|
case View::MIXING:
|
||||||
default:
|
default:
|
||||||
current_view_ = &mixing_;
|
current_view_ = &mixing_;
|
||||||
@@ -706,6 +715,8 @@ View *Mixer::view(View::Mode m)
|
|||||||
return &geometry_;
|
return &geometry_;
|
||||||
case View::LAYER:
|
case View::LAYER:
|
||||||
return &layer_;
|
return &layer_;
|
||||||
|
case View::APPEARANCE:
|
||||||
|
return &appearance_;
|
||||||
case View::MIXING:
|
case View::MIXING:
|
||||||
return &mixing_;
|
return &mixing_;
|
||||||
default:
|
default:
|
||||||
@@ -725,6 +736,7 @@ void Mixer::saveas(const std::string& filename)
|
|||||||
session_->config(View::MIXING)->copyTransform( mixing_.scene.root() );
|
session_->config(View::MIXING)->copyTransform( mixing_.scene.root() );
|
||||||
session_->config(View::GEOMETRY)->copyTransform( geometry_.scene.root() );
|
session_->config(View::GEOMETRY)->copyTransform( geometry_.scene.root() );
|
||||||
session_->config(View::LAYER)->copyTransform( layer_.scene.root() );
|
session_->config(View::LAYER)->copyTransform( layer_.scene.root() );
|
||||||
|
session_->config(View::APPEARANCE)->copyTransform( appearance_.scene.root() );
|
||||||
|
|
||||||
// launch a thread to save the session
|
// launch a thread to save the session
|
||||||
std::thread (saveSession, filename, session_).detach();
|
std::thread (saveSession, filename, session_).detach();
|
||||||
@@ -823,6 +835,7 @@ void Mixer::swap()
|
|||||||
mixing_.scene.root()->copyTransform( session_->config(View::MIXING) );
|
mixing_.scene.root()->copyTransform( session_->config(View::MIXING) );
|
||||||
geometry_.scene.root()->copyTransform( session_->config(View::GEOMETRY) );
|
geometry_.scene.root()->copyTransform( session_->config(View::GEOMETRY) );
|
||||||
layer_.scene.root()->copyTransform( session_->config(View::LAYER) );
|
layer_.scene.root()->copyTransform( session_->config(View::LAYER) );
|
||||||
|
appearance_.scene.root()->copyTransform( session_->config(View::APPEARANCE) );
|
||||||
|
|
||||||
// set resolution
|
// set resolution
|
||||||
session_->setResolution( session_->config(View::RENDERING)->scale_ );
|
session_->setResolution( session_->config(View::RENDERING)->scale_ );
|
||||||
|
|||||||
1
Mixer.h
1
Mixer.h
@@ -114,6 +114,7 @@ protected:
|
|||||||
MixingView mixing_;
|
MixingView mixing_;
|
||||||
GeometryView geometry_;
|
GeometryView geometry_;
|
||||||
LayerView layer_;
|
LayerView layer_;
|
||||||
|
AppearanceView appearance_;
|
||||||
TransitionView transition_;
|
TransitionView transition_;
|
||||||
|
|
||||||
guint64 update_time_;
|
guint64 update_time_;
|
||||||
|
|||||||
90
Session.cpp
90
Session.cpp
@@ -28,6 +28,10 @@ Session::Session() : failedSource_(nullptr), active_(true), fading_target_(0.f)
|
|||||||
config_[View::MIXING] = new Group;
|
config_[View::MIXING] = new Group;
|
||||||
config_[View::MIXING]->scale_ = Settings::application.views[View::MIXING].default_scale;
|
config_[View::MIXING]->scale_ = Settings::application.views[View::MIXING].default_scale;
|
||||||
config_[View::MIXING]->translation_ = Settings::application.views[View::MIXING].default_translation;
|
config_[View::MIXING]->translation_ = Settings::application.views[View::MIXING].default_translation;
|
||||||
|
|
||||||
|
config_[View::APPEARANCE] = new Group;
|
||||||
|
config_[View::APPEARANCE]->scale_ = Settings::application.views[View::APPEARANCE].default_scale;
|
||||||
|
config_[View::APPEARANCE]->translation_ = Settings::application.views[View::APPEARANCE].default_translation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -43,6 +47,7 @@ Session::~Session()
|
|||||||
delete config_[View::GEOMETRY];
|
delete config_[View::GEOMETRY];
|
||||||
delete config_[View::LAYER];
|
delete config_[View::LAYER];
|
||||||
delete config_[View::MIXING];
|
delete config_[View::MIXING];
|
||||||
|
delete config_[View::APPEARANCE];
|
||||||
}
|
}
|
||||||
|
|
||||||
void Session::setActive (bool on)
|
void Session::setActive (bool on)
|
||||||
@@ -89,31 +94,6 @@ void Session::update(float dt)
|
|||||||
// grab frames to recorders & streamers
|
// grab frames to recorders & streamers
|
||||||
FrameGrabbing::manager().grabFrame(render_.frame(), dt);
|
FrameGrabbing::manager().grabFrame(render_.frame(), dt);
|
||||||
|
|
||||||
// // send frame to recorders
|
|
||||||
// std::list<FrameGrabber *>::iterator iter = iter=grabbers_.begin();
|
|
||||||
// // if there is at least once frame grabber
|
|
||||||
// if (iter != grabbers_.end()) {
|
|
||||||
// // grab a frame (once for all recorders)
|
|
||||||
// FrameGrabber::Buffer buf = FrameGrabber::grabFrame(render_.frame());
|
|
||||||
|
|
||||||
// // give the frame to all recorders
|
|
||||||
// while (iter != grabbers_.end())
|
|
||||||
// {
|
|
||||||
// FrameGrabber *rec = *iter;
|
|
||||||
// rec->addFrame(buf, dt);
|
|
||||||
|
|
||||||
// if (rec->finished()) {
|
|
||||||
// iter = grabbers_.erase(iter);
|
|
||||||
// delete rec;
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// iter++;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// gst_buffer_unref(buf.buffer);
|
|
||||||
// // gst_clear_buffer(&buf.buffer);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -304,66 +284,6 @@ int Session::index(SourceList::iterator it) const
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
//void Session::addFrameGrabber(FrameGrabber *rec)
|
|
||||||
//{
|
|
||||||
// if (rec != nullptr)
|
|
||||||
// grabbers_.push_back(rec);
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
//FrameGrabber *Session::frontFrameGrabber()
|
|
||||||
//{
|
|
||||||
// if (grabbers_.empty())
|
|
||||||
// return nullptr;
|
|
||||||
// else
|
|
||||||
// return grabbers_.front();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//FrameGrabber *Session::getFrameGrabber(uint64_t id)
|
|
||||||
//{
|
|
||||||
// if (id > 0 && grabbers_.size() > 0 )
|
|
||||||
// {
|
|
||||||
// std::list<FrameGrabber *>::iterator iter = std::find_if(grabbers_.begin(), grabbers_.end(), FrameGrabber::hasId(id));
|
|
||||||
// if (iter != grabbers_.end())
|
|
||||||
// return (*iter);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return nullptr;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void Session::stopAllFrameGrabbers()
|
|
||||||
//{
|
|
||||||
// std::list<FrameGrabber *>::iterator iter;
|
|
||||||
// for (iter=grabbers_.begin(); iter != grabbers_.end(); )
|
|
||||||
// (*iter)->stop();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void Session::clearAllFrameGrabbers()
|
|
||||||
//{
|
|
||||||
// std::list<FrameGrabber *>::iterator iter;
|
|
||||||
// for (iter=grabbers_.begin(); iter != grabbers_.end(); )
|
|
||||||
// {
|
|
||||||
// FrameGrabber *rec = *iter;
|
|
||||||
// rec->stop();
|
|
||||||
// iter = grabbers_.erase(iter);
|
|
||||||
// delete rec;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void Session::transferFrameGrabber(Session *dest)
|
|
||||||
//{
|
|
||||||
// if (dest == nullptr)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
// std::list<FrameGrabber *>::iterator iter;
|
|
||||||
// for (iter=grabbers_.begin(); iter != grabbers_.end(); )
|
|
||||||
// {
|
|
||||||
// dest->grabbers_.push_back(*iter);
|
|
||||||
// iter = grabbers_.erase(iter);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
void Session::lock()
|
void Session::lock()
|
||||||
{
|
{
|
||||||
access_.lock();
|
access_.lock();
|
||||||
|
|||||||
@@ -58,14 +58,6 @@ public:
|
|||||||
// get frame result of render
|
// get frame result of render
|
||||||
inline FrameBuffer *frame () const { return render_.frame(); }
|
inline FrameBuffer *frame () const { return render_.frame(); }
|
||||||
|
|
||||||
// // Recorders
|
|
||||||
// void addFrameGrabber(FrameGrabber *rec);
|
|
||||||
// FrameGrabber *frontFrameGrabber();
|
|
||||||
// FrameGrabber *getFrameGrabber(uint64_t id);
|
|
||||||
// void stopAllFrameGrabbers();
|
|
||||||
// void clearAllFrameGrabbers();
|
|
||||||
// void transferFrameGrabber(Session *dest);
|
|
||||||
|
|
||||||
// configure rendering resolution
|
// configure rendering resolution
|
||||||
void setResolution(glm::vec3 resolution);
|
void setResolution(glm::vec3 resolution);
|
||||||
|
|
||||||
|
|||||||
10
Source.cpp
10
Source.cpp
@@ -120,6 +120,10 @@ Source::Source() : initialized_(false), active_(true), need_update_(true)
|
|||||||
overlays_[View::LAYER]->visible_ = false;
|
overlays_[View::LAYER]->visible_ = false;
|
||||||
groups_[View::LAYER]->attach(overlays_[View::LAYER]);
|
groups_[View::LAYER]->attach(overlays_[View::LAYER]);
|
||||||
|
|
||||||
|
// default appearance node
|
||||||
|
groups_[View::APPEARANCE] = new Group;
|
||||||
|
groups_[View::APPEARANCE]->visible_ = false;
|
||||||
|
|
||||||
// empty transition node
|
// empty transition node
|
||||||
groups_[View::TRANSITION] = new Group;
|
groups_[View::TRANSITION] = new Group;
|
||||||
|
|
||||||
@@ -156,6 +160,7 @@ Source::~Source()
|
|||||||
delete groups_[View::MIXING];
|
delete groups_[View::MIXING];
|
||||||
delete groups_[View::GEOMETRY];
|
delete groups_[View::GEOMETRY];
|
||||||
delete groups_[View::LAYER];
|
delete groups_[View::LAYER];
|
||||||
|
delete groups_[View::APPEARANCE];
|
||||||
delete groups_[View::TRANSITION];
|
delete groups_[View::TRANSITION];
|
||||||
|
|
||||||
groups_.clear();
|
groups_.clear();
|
||||||
@@ -253,6 +258,7 @@ void Source::attach(FrameBuffer *renderbuffer)
|
|||||||
groups_[View::RENDERING]->attach(rendersurface_);
|
groups_[View::RENDERING]->attach(rendersurface_);
|
||||||
groups_[View::GEOMETRY]->attach(rendersurface_);
|
groups_[View::GEOMETRY]->attach(rendersurface_);
|
||||||
groups_[View::MIXING]->attach(rendersurface_);
|
groups_[View::MIXING]->attach(rendersurface_);
|
||||||
|
groups_[View::APPEARANCE]->attach(rendersurface_);
|
||||||
// groups_[View::LAYER]->attach(rendersurface_);
|
// groups_[View::LAYER]->attach(rendersurface_);
|
||||||
|
|
||||||
// for mixing and layer views, add another surface to overlay
|
// for mixing and layer views, add another surface to overlay
|
||||||
@@ -277,6 +283,10 @@ void Source::attach(FrameBuffer *renderbuffer)
|
|||||||
node != groups_[View::LAYER]->end(); node++) {
|
node != groups_[View::LAYER]->end(); node++) {
|
||||||
(*node)->scale_.x = renderbuffer_->aspectRatio();
|
(*node)->scale_.x = renderbuffer_->aspectRatio();
|
||||||
}
|
}
|
||||||
|
for (node = groups_[View::APPEARANCE]->begin();
|
||||||
|
node != groups_[View::APPEARANCE]->end(); node++) {
|
||||||
|
(*node)->scale_.x = renderbuffer_->aspectRatio();
|
||||||
|
}
|
||||||
|
|
||||||
// Transition group node is optionnal
|
// Transition group node is optionnal
|
||||||
if ( groups_[View::TRANSITION]->numChildren() > 0 ) {
|
if ( groups_[View::TRANSITION]->numChildren() > 0 ) {
|
||||||
|
|||||||
@@ -354,6 +354,8 @@ void UserInterface::handleKeyboard()
|
|||||||
Mixer::manager().setView(View::GEOMETRY);
|
Mixer::manager().setView(View::GEOMETRY);
|
||||||
else if (ImGui::IsKeyPressed( GLFW_KEY_F3 ))
|
else if (ImGui::IsKeyPressed( GLFW_KEY_F3 ))
|
||||||
Mixer::manager().setView(View::LAYER);
|
Mixer::manager().setView(View::LAYER);
|
||||||
|
else if (ImGui::IsKeyPressed( GLFW_KEY_F3 ))
|
||||||
|
Mixer::manager().setView(View::APPEARANCE);
|
||||||
else if (ImGui::IsKeyPressed( GLFW_KEY_F12 ))
|
else if (ImGui::IsKeyPressed( GLFW_KEY_F12 ))
|
||||||
StartScreenshot();
|
StartScreenshot();
|
||||||
// normal keys // make sure no entry / window box is active
|
// normal keys // make sure no entry / window box is active
|
||||||
@@ -915,12 +917,10 @@ void ToolBox::Render()
|
|||||||
ImGui::InputText("gstreamer pipeline", buf1, 128);
|
ImGui::InputText("gstreamer pipeline", buf1, 128);
|
||||||
if (ImGui::Button("Create Generic Stream Source") )
|
if (ImGui::Button("Create Generic Stream Source") )
|
||||||
{
|
{
|
||||||
// GenericStreamSource *s =
|
|
||||||
Mixer::manager().addSource( Mixer::manager().createSourceStream(buf1) );
|
Mixer::manager().addSource( Mixer::manager().createSourceStream(buf1) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// display histogram of update time and plot framerate
|
// display histogram of update time and plot framerate
|
||||||
//
|
//
|
||||||
|
|||||||
88
View.cpp
88
View.cpp
@@ -1692,3 +1692,91 @@ View::Cursor TransitionView::drag (glm::vec2 from, glm::vec2 to)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AppearanceView::AppearanceView() : View(APPEARANCE)
|
||||||
|
{
|
||||||
|
// read default settings
|
||||||
|
if ( Settings::application.views[mode_].name.empty() ) {
|
||||||
|
// no settings found: store application default
|
||||||
|
Settings::application.views[mode_].name = "Source";
|
||||||
|
scene.root()->scale_ = glm::vec3(SOURCE_DEFAULT_SCALE, SOURCE_DEFAULT_SCALE, 1.0f);
|
||||||
|
scene.root()->translation_ = glm::vec3(1.3f, 1.f, 0.0f);
|
||||||
|
saveSettings();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
restoreSettings();
|
||||||
|
|
||||||
|
// Scene background
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppearanceView::update(float dt)
|
||||||
|
{
|
||||||
|
View::update(dt);
|
||||||
|
|
||||||
|
// a more complete update is requested
|
||||||
|
if (View::need_deep_update_) {
|
||||||
|
|
||||||
|
// update rendering of render frame
|
||||||
|
FrameBuffer *output = Mixer::manager().session()->frame();
|
||||||
|
if (output){
|
||||||
|
for (NodeSet::iterator node = scene.bg()->begin(); node != scene.bg()->end(); node++) {
|
||||||
|
(*node)->scale_.x = output->aspectRatio();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppearanceView::zoom (float factor)
|
||||||
|
{
|
||||||
|
float z = scene.root()->scale_.x;
|
||||||
|
z = CLAMP( z + 0.1f * factor, SOURCE_MIN_SCALE, SOURCE_MAX_SCALE);
|
||||||
|
scene.root()->scale_.x = z;
|
||||||
|
scene.root()->scale_.y = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppearanceView::resize ( int scale )
|
||||||
|
{
|
||||||
|
float z = CLAMP(0.01f * (float) scale, 0.f, 1.f);
|
||||||
|
z *= z;
|
||||||
|
z *= SOURCE_MAX_SCALE - SOURCE_MIN_SCALE;
|
||||||
|
z += SOURCE_MIN_SCALE;
|
||||||
|
scene.root()->scale_.x = z;
|
||||||
|
scene.root()->scale_.y = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
int AppearanceView::size ()
|
||||||
|
{
|
||||||
|
float z = (scene.root()->scale_.x - SOURCE_MIN_SCALE) / (SOURCE_MAX_SCALE - SOURCE_MIN_SCALE);
|
||||||
|
return (int) ( sqrt(z) * 100.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick)
|
||||||
|
{
|
||||||
|
if (!s)
|
||||||
|
return Cursor();
|
||||||
|
|
||||||
|
// unproject
|
||||||
|
glm::vec3 gl_Position_from = Rendering::manager().unProject(from, scene.root()->transform_);
|
||||||
|
glm::vec3 gl_Position_to = Rendering::manager().unProject(to, scene.root()->transform_);
|
||||||
|
|
||||||
|
|
||||||
|
std::ostringstream info;
|
||||||
|
info << "Source " ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return Cursor(Cursor_ResizeNESW, info.str() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
View::Cursor AppearanceView::drag (glm::vec2 from, glm::vec2 to)
|
||||||
|
{
|
||||||
|
Cursor ret = View::drag(from, to);
|
||||||
|
|
||||||
|
// Clamp translation to acceptable area
|
||||||
|
scene.root()->translation_ = glm::clamp(scene.root()->translation_, glm::vec3(-3.f, -1.5f, 0.f), glm::vec3(3.f, 1.5f, 0.f));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
18
View.h
18
View.h
@@ -16,7 +16,7 @@ class View
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef enum {RENDERING = 0, MIXING=1, GEOMETRY=2, LAYER=3, TRANSITION=4, INVALID=5 } Mode;
|
typedef enum {RENDERING = 0, MIXING=1, GEOMETRY=2, LAYER=3, APPEARANCE=4, TRANSITION=5, INVALID=6 } Mode;
|
||||||
|
|
||||||
View(Mode m);
|
View(Mode m);
|
||||||
virtual ~View() {}
|
virtual ~View() {}
|
||||||
@@ -216,6 +216,22 @@ private:
|
|||||||
SessionSource *transition_source_;
|
SessionSource *transition_source_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AppearanceView : public View
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AppearanceView();
|
||||||
|
|
||||||
|
void update (float dt) override;
|
||||||
|
void zoom (float factor) override;
|
||||||
|
void resize (int) override;
|
||||||
|
int size () override;
|
||||||
|
|
||||||
|
Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) override;
|
||||||
|
Cursor drag (glm::vec2, glm::vec2) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // VIEW_H
|
#endif // VIEW_H
|
||||||
|
|||||||
@@ -39,6 +39,9 @@
|
|||||||
#define LAYER_DEFAULT_SCALE 0.8f
|
#define LAYER_DEFAULT_SCALE 0.8f
|
||||||
#define LAYER_MIN_SCALE 0.4f
|
#define LAYER_MIN_SCALE 0.4f
|
||||||
#define LAYER_MAX_SCALE 1.7f
|
#define LAYER_MAX_SCALE 1.7f
|
||||||
|
#define SOURCE_DEFAULT_SCALE 1.2f
|
||||||
|
#define SOURCE_MIN_SCALE 0.2f
|
||||||
|
#define SOURCE_MAX_SCALE 10.0f
|
||||||
#define TRANSITION_DEFAULT_SCALE 3.0f
|
#define TRANSITION_DEFAULT_SCALE 3.0f
|
||||||
#define TRANSITION_MIN_DURATION 0.2f
|
#define TRANSITION_MIN_DURATION 0.2f
|
||||||
#define TRANSITION_MAX_DURATION 10.f
|
#define TRANSITION_MAX_DURATION 10.f
|
||||||
|
|||||||
Reference in New Issue
Block a user