GithubHelp home page GithubHelp logo

braitsch / ofxdatgui Goto Github PK

View Code? Open in Web Editor NEW
427.0 31.0 113.0 8.32 MB

Simple to use, fully customizable, high-resolution graphical user interface for openFrameworks

Home Page: https://braitsch.github.io/ofxDatGui/

License: Other

C++ 68.99% Makefile 31.01%
openframeworks user-interface

ofxdatgui's Introduction

ofxDatGui

ofxDatGui is a simple to use, fully customizable, high-resolution graphical user interface for openFrameworks inspired by the popular JavaScript datgui interface.

ofxDatGui

Features

ofxDatGui offers the following features & components:

  • Click & Toggle (On/Off) Buttons
  • Text Input Fields
  • Color Pickers
  • Range Sliders
  • Dropdown Menus
  • Scroll Views
  • Button Matrices
  • Coordinate Pads
  • Value Plotters
  • Waveform Monitors
  • Framerate Monitor
  • Variable Binding
  • Completely Customizable
  • Folders to group components together
  • An optional header & footer that allow you to title the gui, collapse and drag it around

Documentation

The latest ofxDatGui docs are located here

ofParameter Support

ofParameter support is the single most requested feature and is currently in development. Therefore, I am not accepting ofParameter related pull requests until the first stable version of ofxDatGui with ofParameter support is released.

Questions & Feedback

Questions, feedback, feature requests and ideas for improvement are all very much welcome. Please open an issue or join the conversation on this openFrameworks thread before sending me an email.

If you're enjoying ofxDatGui please star the repository or consider making a small donation to help support its ongoing development. If you've made something with it that you'd like to share please let me know and I'll add it to the gallery.

ofxdatgui's People

Contributors

2bbb avatar avilleret avatar braitsch avatar henrybetts avatar leducmills-google avatar lephasme avatar mattfelsen avatar nervoussystem avatar zminjie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ofxdatgui's Issues

Set GUI Panel non draggable

hello,

it would be nice to be able to set gui panel non draggable to fix its position.
useful when designing simple standalone gui interfaces.

Data binding notes

Great work with this addon! Been playing around with it a bit and had a few notes about binding...

  • When you bind a variable like this...

    gui->addSlider("name", 0.f, 1.f)->bind(&variable, 0.f, 1.f);

    ...you end up giving the min and max twice. Might be nice to have some kind of shorthand that does it automatically if you pass a pointer to the gui.

  • For me, I think it would be nice if you passed a reference rather than a pointer to the bind function but that's probably a subjective thing.

  • When you bind a variable you still get warnings that an event handler has not been created.

Thanks!

Text inputs are defaulting any input to upper case

This seems like it should be a basic configuration in the template, but I can't seem to make my text inputs to not default everything to upper case.

Is it possible to configure the text input to normal typing?

issue2

Compile Errors in Visual Studio 2015

In VS 2015 the current version returns 3 compile errors (return missing) in

  • bool ofxDatGuiComponent::getIsExpanded()
  • ofxDatGuiHeader* addHeader
  • ofxDatGuiFooter* addFooter()

In the first I am returning true in the virtual function and in the other two I am returning the header/footer created or a nullptr, is that ok for you? If so I will submit a PR.

ofxDatGuiLabel doesn't work.

Hello,
I'm using ofxDatGuiLabel but it not works fine.

    auto label = new ofxDatGuiLabel("my text");
    label->setPosition(0, 0);
    label->setWidth(150, 20);

When I draw labal, my application crash caused by EXC_BAD_ACCESS.

screen shot 2016-03-12 at 1 31 22 am

I'm using OS X and openframeworks 0.9.0.

Please help me;;

ofxDatGui draw should push/pop style and call ofFill

First off - great job on this project, very elegant and nicely documented !

In ofxDatGui::draw you should insulate (you probably already are) and make sure ofFill() is called:

ofPushStyle();
ofFill();
...
ofPopStyle();

Its me actually that was bad here — I called ofNoFill() and didn't push/pop — and this caused ofDatGui to render incorrectly.

So it looked like this:

if-mouse-is-not-down

thanks again !

Wrong stripe color of elements inside folder with custom theme.

I created a custom theme that only changes width and font size:

class AppGuiTheme: public ofxDatGuiTheme{
  public:
    AppGuiTheme(){
      font.size = 8;
      layout.width = 300;
      init();
    }
};

Then I created a gui, applied the theme (gui->setTheme(new AppGuiTheme())), added two folders (gui->addFolder()) and some elements within the folders (f1->addButton()).

The elements within the folders end up with the default theme stripe color instead of the color for the folder. The expected behavior is that the elements have the folder's color.

If I remove the gui->setTheme() statement, the default theme is used and the elements within the folders correctly render with the folder's color.

Prevent mouse event propagation

Hi,

if you're using ofxDatGui with the default openFrameworks camera the mouse events are bubling through. Because of that you will still control the camera rotation while changing a slider value for example.

My current "hack" is this:

ofAddListener(ofEvents().mousePressed, this, &myClass::mousePressed, OF_EVENT_ORDER_BEFORE_APP);

bool myClass::mousePressed(ofMouseEventArgs &mouse) {
    float width = this->getWidth();
    float height = footer->getY() + footer->getHeight();

    float x = this->getPosition().x;
    float y = this->getPosition().y;

    return (mouse.x >= x && mouse.x <= x + width && mouse.y >= y && mouse.y <= y + height);
}

It uses the footer to determine the current menu size.

Maybe there could be a native option to prevent mouse event bubbling.

Changing the GUI origin does not affect the elements inside it

I am not sure if this is done on purpose, but if I modify the origin of the gui, the elements inside it don't get updated. Take a look at the attached picture to see what I mean. The gui has the green background and it always gets updated with new origin values when the window is resized. The elements, though, remain in the same position.

Is there a way of updating the origin of all the elements to match gui's new position?

issue

Indent widgets

Would be nice to indent (or other visual trick) widgets according to their parenting links (imbrication). It is a bit difficult to identify hierarchy when using lot of widgets.

Widgets loose focus while dragging mouse

Widgets should keep focus when clicked and dragged until mouse release.

example : add 2 buttons and 2 sliders

click the first button and keep mouse pressed.
Drag left or right -> ok
Drag bottom -> widgets get focus and activates when mouse hover

iterator exception if mText is empty

Hi,
on my windows system i get an iterator error:

Expression: string iterator + offset out of range

when i use GuiTextInputField.

Turns out mText ist empty. So when the ThemeLoader try to get the Font->Rect later functions tries to iterate over an empty string.

ofTrueTypeFont.cpp:

//-----------------------------------------------------------
void ofTrueTypeFont::createStringMesh(const std::string& str, float x, float y, bool vflip) const{
    iterateString(str,x,y,vflip,[&](uint32_t c, ofVec2f pos){
        drawChar(c, pos.x, pos.y, vflip);
    });
}

goes to:

void ofTrueTypeFont::iterateString(const string & str, float x, float y, bool vFlipped, std::function<void(uint32_t, ofVec2f)> f) const{
    ofVec2f pos(x,y);

    int newLineDirection        = 1;
    if(!vFlipped){
        // this would align multiline texts to the last line when vflip is disabled
        //int lines = ofStringTimesInString(c,"\n");
        //Y = lines*lineHeight;
        newLineDirection = -1;
    }

    int directionX = settings.direction == ofTtfSettings::LeftToRight?1:-1;

    string str_valid;
    utf8::replace_invalid(str.begin(),str.end(),back_inserter(str_valid));
Line 1103 crashes:
    utf8::iterator<const char*> it(&str_valid.front(), &str_valid.front(), (&str_valid.back())+1);

The problem is in ofTrueTypefont.cpp, but he gets an valid string...
If i init mText with al least an Space (" ") it works fine.

Make the Example folder nested

If you can move the examples in a nested subfolder like:
example/All_ofxDatGuiExample
we can use the projectGenerator in 'multiple update' mode
so we can easily update all projects for each platform.

Empty interface when moving app

Thanx for creating this beautiful gui. My problem: I built as Release. Moved the app to a USB stick / another computer including the data folder next to the app. When i run the app I get a blank gui with no text or sliders. Can you help? Am I building it wrong?
skaermbillede 2016-04-14 kl 14 40 03
skaermbillede 2016-04-14 kl 14 40 17

(Xcode 7.2.1)

Font rendering switches color on lowest rightmost pixel

I have an issue with the font rendering in the gui.

screen shot 2015-10-15 at 18 59 06

Look at the N in ON in the picture, you can clearly see the lowest rightmost pixel missing. You can also see that in ANIMATION, that is highlighted by mouseover, the pixels are somehow there but the wrong color.

The issue can also be seen in the demo videos: http://braitsch.github.io/ofxDatGui/gallery.html . For instance, in https://www.youtube.com/watch?v=IrmABSyabng , the lowest horizontal bar on the E looks short, the N have a similar problem as my screenshot, the H looks odd, and there seem to be some other issues as well.

I am at a loss on how to move forward with this. Any suggestions?

I should add that I'm on OSX 10.10.3 with oF 0.9.0 RC1 with ofxDatGUI as the only addon.

Custom Fonts

Is there a way to include a custom font as part of a theme?

problem getting focus on hover

hello,

i am facing a problem, i have two gui (panels).
when i launch the app, hovering the guis doesn't affect it. I need to click once on a gui to get focus. Then when moving to the other gui is the same, i need to click once more to get the focus to the second gui. And so on back and forth

Support for Text Blocks (Paragraph) Components

I am wondering how to add pure texts (a paragraph, for example, to explain some control parameter).

  • addLabel works but it capitalized the words; and it can't wrap long texts.
  • addTextInput requires labels, and the text contents are capitalized/editable.

Any suggestions?

Remove an element during run time.

I'm making a program where it'd be useful to replace a slider with a label after a button has been pressed. I got the event listener up and running, but I cannot seem to figure out how to remove an element from the GUI during runtime.

Thank you so much,
Fred

How to use onButtonEvent inside class?

Hello. I trying to make a class that contain a button and toggle together, but in not react on onButtonEvent() (if I use same code outside my class in ofApp all works perfect ). How can I give ofApp context to onButtonEvent constructor inside a class?

Allow for configurable location of ofxbraitsch folder?

It'd be great to allow for a configurable setting of the ofxbraitsch data folder. Currently in one of my apps, I changed the hard-coded paths in the addon, but it'd be nice to control this from outside the addon.

I started on this by adding static ofxDatGui::setDataDir(const std::string& dir) and ofxDatGui::getDataDir() methods, but then we wind up with circular includes since ofxDatGui.h ends up #includeing ofxDatGuiThemes.h eventually. You can check out what I did on my branch, but maybe you've got a better approach in mind?
mattfelsen@bb3f814

Cheers!

Gui elements don't appear in example-GenerativeLines

The DatGui elements do not appear in the example-GenerativeLines. This appear to be due to the positioning on line 9 of ofApp.cpp, which has:

gui = new ofxDatGui( ofxDatGuiAnchor::TOP_RIGHT );

Change it to the following at the GUI appears:

gui = new ofxDatGui( ofxDatGuiAnchor::TOP_LEFT );

Data binding

Is there any reason data binding is limited to sliders? It is super useful and I did a quick implementation for the button as well but if it's in the works I'd rather hold back as I'm not sure I'm following your nullptr implementation very well.


#pragma once
#include "ofxDatGuiComponent.h"

class ofxDatGuiButton : public ofxDatGuiComponent {

    public:

        ofxDatGuiButton(string label, ofxDatGuiTemplate* tmplt=nullptr) : ofxDatGuiComponent(label, tmplt)
        {
            mType = ofxDatGuiType::BUTTON;
            mStripeColor = mTemplate->button.color.stripe;
            setWidth(mRow.width);
        }

        static ofxDatGuiButton* getInstance()
        {
            return new ofxDatGuiButton("X");
        }

        void setOrigin(int x, int y)
        {
            ofxDatGuiComponent::setOrigin(x, y);
            mLabelAreaWidth = mRow.width;
        }

        void draw()
        {
            if (!mVisible) return;
            ofPushStyle();
                drawBkgd();
                ofxDatGuiComponent::drawLabel();
                ofxDatGuiComponent::drawStripe();
            ofPopStyle();
        }

        void drawBkgd()
        {
        // anything that extends ofxDatGuiButton has the same rollover effect //
            if (mMouseDown){
                ofxDatGuiComponent::drawBkgd(mTemplate->row.color.mouseDown, 255);
            }   else if (mMouseOver){
                ofxDatGuiComponent::drawBkgd(mTemplate->row.color.mouseOver, 255);
            }   else{
                ofxDatGuiComponent::drawBkgd();
            }
        }

        bool hitTest(ofPoint m)
        {
            return (m.x>=x && m.x<= x+mRow.width && m.y>=y && m.y<= y+mRow.height);
        }

        void onMouseRelease(ofPoint m)
        {
            ofxDatGuiComponent::onMouseRelease(m);
        // dispatch event out to main application //
            if (buttonEventCallback != nullptr) {
                ofxDatGuiButtonEvent e(this);
                buttonEventCallback(e);
            }   else{
                ofxDatGuiLog::write(ofxDatGuiMsg::EVENT_HANDLER_NULL);
            }
        }

        virtual void toggle(){}
        virtual void setEnabled(bool enable){}
        virtual bool getEnabled(){return false;}

};

class ofxDatGuiToggle : public ofxDatGuiButton {

    public:

        ofxDatGuiToggle(string label, bool enabled, ofxDatGuiTemplate* tmplt=nullptr) : ofxDatGuiButton(label, tmplt)
        {
            mEnabled = enabled;
            mStripeColor = mTemplate->toggle.color.stripe;
            if (!radioOn.isAllocated()) radioOn.load(OFXDG_ASSET_DIR+"/icon-radio-on.png");
            if (!radioOff.isAllocated()) radioOff.load(OFXDG_ASSET_DIR+"/icon-radio-off.png");
        }

        void setOrigin(int x, int y)
        {
            ofxDatGuiComponent::setOrigin(x, y);
            mLabelMarginRight = mRow.width-mIcon.x;
        }

        void setTemplate(ofxDatGuiTemplate* tmplt)
        {
            ofxDatGuiButton::setTemplate(tmplt);
            setWidth(mRow.width);
        }

        void toggle()
        {
            mEnabled =!mEnabled;


            if (mBoundBool != nullptr) {
                *mBoundBool = mEnabled;
            }

        }

        void setEnabled(bool enable)
        {
            mEnabled = enable;


           if (mBoundBool != nullptr) {
                *mBoundBool = mEnabled;
            }

        }

        bool getEnabled()
        {
            return mEnabled;
        }

        void draw()
        {
            ofxDatGuiButton::drawBkgd();
            ofxDatGuiComponent::drawLabel();
            ofxDatGuiComponent::drawStripe();
            ofPushStyle();
                ofSetColor(mTemplate->row.color.label);
                if (mEnabled == true){
                    radioOn.draw(x+mIcon.x, y+mIcon.y, mIcon.size, mIcon.size);
                }   else{
                    radioOff.draw(x+mIcon.x, y+mIcon.y, mIcon.size, mIcon.size);
                }
            ofPopStyle();
        }

        void onMouseRelease(ofPoint m)
        {
            ofxDatGuiComponent::onMouseRelease(m);
            mEnabled = !mEnabled;
           //borg, check?
           if (mBoundBool != nullptr) {
                *mBoundBool = mEnabled;
            }
        // dispatch event out to main application //
            if (buttonEventCallback != nullptr) {
                ofxDatGuiButtonEvent e(this, mEnabled);
                buttonEventCallback(e);
            }   else{
                ofxDatGuiLog::write(ofxDatGuiMsg::EVENT_HANDLER_NULL);
            }
        }


        //borg added
        inline void bind(bool *val)
        {
            mBoundBool = val;
        }

    private:
        bool mEnabled;
        ofImage radioOn;
        ofImage radioOff;

        bool *mBoundBool = nullptr;;

};

Mouse Event doesn't stop

When you have more tan one panel overlapping, the mouse events should stop after the topmost element that receivet it.

You can actívate two buttons on top of each other or drag more tan one panel at the same time, for example.

Making `expandGui` and `collapseGui ` as public APIs?

I would like the default case of a panel to be collapsed to save space on the GUI.

But there doesn't seem to be a way so far (I may be missing something here). And it seems useful in general to make these two function calls public. I can make a pull request if that's helpful for you. Thanks!

Addon image and font resources not being loaded

I'm assuming this works on OSX, but is not cross-platform. I'm on Linux and the addon image resources weren't loading. I fixed this by setting the paths to be the following:

string rainbow = "../../../../../addons/ofxDatGui/ofxbraitsch/ofxdatgui/picker-rainbow.png";
string radioOn = "../../../../../addons/ofxDatGui/ofxbraitsch/ofxdatgui/icon-radio-on.png";
string radioOff = "../../../../../addons/ofxDatGui/ofxbraitsch/ofxdatgui/icon-radio-off.png";
string dropdown = "../../../../../addons/ofxDatGui/ofxbraitsch/ofxdatgui/icon-dropdown.png";

This is the normal OF behaviour, i.e. that file loading is relative to the data path.
Maybe there's a more elegant way to do this, but I'm not sure.

widgets resolution

hello,

i am facing a problem : when i build an example, widgets are small sized with a good resolution.

capture d ecran 2015-10-16 a 10 49 35

i have created a new project using project generator and i can't have the same result, my widgets seem oversized.

capture d ecran 2015-10-16 a 10 50 24

I copied the example code into my project, same issue...

is there a special xcode configuration ?

PS : using XCode 4.6.1 under yosemite with yesterday's OF nightly

support for iOS

Is there any plan to support for iOS in the future?
From a quick try I ran into bunch of errors, mostly regard to problem with openGL

screenshot 2016-01-18 12 14 18

ofxDatGuiSliderEvent spitting twice

The slider events seem to be getting called twice per click.

ofApp.h

ofxDatGui* gui;
ofxDatGuiSlider* guiMaxW;
ofxDatGuiSlider* guiMaxH;
void onSliderEvent(ofxDatGuiSliderEvent e);

ofApp.cpp

void ofApp::setup(){
    gui = new ofxDatGui( ofxDatGuiAnchor::TOP_LEFT );
    guiMaxW = gui->addSlider("Max Width", 1,200,64);
    guiMaxH = gui->addSlider("Max Height", 1, 200,32);
    gui->onSliderEvent(this, &ofApp::onSliderEvent);
}

void ofApp::onSliderEvent(ofxDatGuiSliderEvent e){
    if(e.target->is("Max Width")){
        cout<<ofToString(e.value)<<endl;
    }else if (e.target->is("Max Height")){
        cout<<ofToString(e.value)<<endl;
    }
}

If I click my slider it will print the value that the slider has when I first clicked, and then the value that I moved the slider to. Am I right in thinking it should only print the latter? Did I set something up incorrectly?

Edit: I should clarify that this only happens when clicking on the bar of the slider itself. Setting the numerical value in the box only triggers the event once, as does sliding the mouse side to side after an initial click. That initial click still triggers two events though.

I'm wondering if mousePressed and mouseDragged are both sending events?

click to expand color pickers

hello,

is it possible to force mouse click to open a color picker instead of auto expanding it on mouse hover ?

this can lead to problems when using two consecutive color pickers

thanks

compile on raspberry pi b+ raspbian jessie 4.1.13+ #826 OF090

i have this error when try to compile any example:

HOST_OS=Linux
HOST_ARCH=armv6l
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl libpulse-simple alsa gtk+-3.0
Compiling OF library for Release
make[1]: Entering directory '/home/pi/openFrameworks/libs/openFrameworksCompiled/project'
HOST_OS=Linux
HOST_ARCH=armv6l
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl libpulse-simple alsa gtk+-3.0
HOST_OS=Linux
HOST_ARCH=armv6l
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl libpulse-simple alsa gtk+-3.0
HOST_OS=Linux
HOST_ARCH=armv6l
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl libpulse-simple alsa gtk+-3.0
Done!
make[1]: Leaving directory '/home/pi/openFrameworks/libs/openFrameworksCompiled/project'

Compiling example-Matrices for Release
make[1]: Entering directory '/home/pi/openFrameworks/addons/ofxDatGui/example-Matrices'
HOST_OS=Linux
HOST_ARCH=armv6l
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl libpulse-simple alsa gtk+-3.0
cat: obj/linuxarmv6l/Release/.compiler_flags: No such file or directory
Compiling /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/main.cpp
g++ -c -O3 -DNDEBUG -Wall -std=c++14 -DGCC_HAS_REGEX -march=armv6 -mfpu=vfp -mfloat-abi=hard -fPIC -ftree-vectorize -Wno-psabi -pipe -DOF_USING_GTK -DOF_USING_GTK -DTARGET_RASPBERRY_PI -DSTANDALONE -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -I/opt/vc/include -I/opt/vc/include/IL -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -D_REENTRANT -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/AL -I/usr/include/alsa -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/home/pi/openFrameworks/libs/fmodex/include -I/home/pi/openFrameworks/libs/glfw/include -I/home/pi/openFrameworks/libs/glfw/include/GLFW -I/home/pi/openFrameworks/libs/kiss/include -I/home/pi/openFrameworks/libs/poco/include -I/home/pi/openFrameworks/libs/tess2/include -I/home/pi/openFrameworks/libs/utf8cpp/include -I/home/pi/openFrameworks/libs/utf8cpp/include/utf8 -I/home/pi/openFrameworks/libs/openFrameworks -I/home/pi/openFrameworks/libs/openFrameworks/gl -I/home/pi/openFrameworks/libs/openFrameworks/video -I/home/pi/openFrameworks/libs/openFrameworks/events -I/home/pi/openFrameworks/libs/openFrameworks/communication -I/home/pi/openFrameworks/libs/openFrameworks/math -I/home/pi/openFrameworks/libs/openFrameworks/sound -I/home/pi/openFrameworks/libs/openFrameworks/graphics -I/home/pi/openFrameworks/libs/openFrameworks/utils -I/home/pi/openFrameworks/libs/openFrameworks/types -I/home/pi/openFrameworks/libs/openFrameworks/app -I/home/pi/openFrameworks/libs/openFrameworks/3d -I/home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src -I/home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/example-Matrices.xcodeproj/xcshareddata -I/home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/example-Matrices.xcodeproj/xcshareddata/xcschemes -I/home/pi/openFrameworks/addons/ofxDatGui/src -I/home/pi/openFrameworks/addons/ofxDatGui/src/themes -I/home/pi/openFrameworks/addons/ofxDatGui/src/core -I/home/pi/openFrameworks/addons/ofxDatGui/src/components -MMD -MP -MF obj/linuxarmv6l/Release/src/main.d -MT obj/linuxarmv6l/Release/src/main.o -o obj/linuxarmv6l/Release/src/main.o -c /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/main.cpp
In file included from /opt/vc/include/interface/vcos/vcos.h:116:0,
from /opt/vc/include/interface/vmcs_host/vc_dispmanx.h:33,
from /opt/vc/include/bcm_host.h:50,
from /home/pi/openFrameworks/libs/openFrameworks/utils/ofConstants.h:169,
from /home/pi/openFrameworks/libs/openFrameworks/ofMain.h:5,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/main.cpp:1:
/opt/vc/include/interface/vcos/pthreads/vcos_platform.h: In function 'void vcos_event_signal(VCOS_EVENT_T_)':
/opt/vc/include/interface/vcos/pthreads/vcos_platform.h:535:8: warning: variable 'ok' set but not used [-Wunused-but-set-variable]
int ok = 0;
^
In file included from /home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:26:0,
from /home/pi/openFrameworks/addons/ofxDatGui/src/ofxDatGui.h:24,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/ofApp.h:4,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/main.cpp:2:
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiSlider.h: In member function 'void ofxDatGuiSlider::setTextInput()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiSlider.h:342:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(v.length() - p < (mPrecision+1)) v+='0';
^
In file included from /home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:31:0,
from /home/pi/openFrameworks/addons/ofxDatGui/src/ofxDatGui.h:24,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/ofApp.h:4,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/main.cpp:2:
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h: In member function 'virtual void ofxDatGuiMatrix::setWidth(int, float)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:178:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<btns.size(); i++){
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h: In member function 'virtual bool ofxDatGuiMatrix::hitTest(ofPoint)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:202:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<btns.size(); i++) btns[i].hitTest(m, mMouseDown);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:205:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<btns.size(); i++) btns[i].onMouseOut();
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h: In member function 'virtual void ofxDatGuiMatrix::draw()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:217:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<btns.size(); i++) btns[i].draw(x+mLabel.width, y);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h: In member function 'void ofxDatGuiMatrix::clear()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:223:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<btns.size(); i++) btns[i].setSelected(false);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h: In member function 'void ofxDatGuiMatrix::setSelected(std::vector)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:229:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<v.size(); i++) btns[v[i]].setSelected(true);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h: In member function 'std::vector ofxDatGuiMatrix::getSelected()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:235:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<btns.size(); i++) if (btns[i].getSelected()) selected.push_back(i);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h: In member function 'virtual void ofxDatGuiMatrix::onMouseRelease(ofPoint)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:252:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<btns.size(); i++) btns[i].onMouseRelease(m);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h: In member function 'void ofxDatGuiMatrix::onButtonSelected(ofxDatGuiInternalEvent)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiMatrix.h:259:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<btns.size(); i++) btns[i].setSelected(e.index == i);
^
In file included from /home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:32:0,
from /home/pi/openFrameworks/addons/ofxDatGui/src/ofxDatGui.h:24,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/ofApp.h:4,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/main.cpp:2:
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h: In member function 'virtual void ofxDatGuiTimeGraph::draw()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:80:74: error: 'glColor3ub' was not declared in this scope
glColor3ub(mColor.fills.r, mColor.fills.g, mColor.fills.b);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h: In member function 'void ofxDatGuiTimeGraph::drawFilled()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:89:46: error: 'GL_FILL' was not declared in this scope
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:89:53: error: 'glPolygonMode' was not declared in this scope
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:90:38: error: 'glBegin' was not declared in this scope
glBegin(GL_TRIANGLE_STRIP);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:91:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<pts.size(); i++) {
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:92:66: error: 'glVertex2f' was not declared in this scope
glVertex2f(px+ pts[i].x, py + mPlotterRect.height);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:95:19: error: 'glEnd' was not declared in this scope
glEnd();
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h: In member function 'void ofxDatGuiTimeGraph::drawOutline()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:103:33: error: 'glBegin' was not declared in this scope
glBegin(GL_LINE_LOOP);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:104:69: error: 'glVertex2f' was not declared in this scope
glVertex2f(px+mPlotterRect.width, py+mPlotterRect.height);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:105:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<pts.size(); i++) glVertex2f(px+pts[i].x, py+pts[i].y);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:107:19: error: 'glEnd' was not declared in this scope
glEnd();
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h: In member function 'void ofxDatGuiTimeGraph::drawLines()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:115:34: error: 'glBegin' was not declared in this scope
glBegin(GL_LINE_STRIP);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:116:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<pts.size(); i++) glVertex2f(px+pts[i].x, py+pts[i].y);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:116:81: error: 'glVertex2f' was not declared in this scope
for (int i=0; i<pts.size(); i++) glVertex2f(px+pts[i].x, py+pts[i].y);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:117:19: error: 'glEnd' was not declared in this scope
glEnd();
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h: In member function 'void ofxDatGuiTimeGraph::drawPoints()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:126:30: error: 'glBegin' was not declared in this scope
glBegin(GL_POINTS);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:127:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<pts.size(); i++) glVertex2f(px+pts[i].x, py+pts[i].y);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:127:81: error: 'glVertex2f' was not declared in this scope
for (int i=0; i<pts.size(); i++) glVertex2f(px+pts[i].x, py+pts[i].y);
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:128:19: error: 'glEnd' was not declared in this scope
glEnd();
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h: In member function 'virtual void ofxDatGuiValuePlotter::update(bool)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:286:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<pts.size(); i++) pts[i].x -= mSpeed;
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h:288:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(i < pts.size())
^
In file included from /home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:33:0,
from /home/pi/openFrameworks/addons/ofxDatGui/src/ofxDatGui.h:24,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/ofApp.h:4,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/main.cpp:2:
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h: In member function 'void ofxDatGuiScrollView::move(ofxDatGuiComponent_, int)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h:89:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<children.size(); i++){
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h: In member function 'void ofxDatGuiScrollView::remove(ofxDatGuiComponent*)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h:113:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<children.size(); i++){
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h: In member function 'void ofxDatGuiScrollView::onMouseScrolled(ofMouseEventArgs&)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h:259:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<children.size(); i++) children[i]->setPosition(0, topY + (btnH * i));
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h: In member function 'void ofxDatGuiScrollView::onButtonEvent(ofxDatGuiButtonEvent)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h:268:22: warning: statement has no effect [-Wunused-value]
for(i; i<children.size(); i++) if (children[i] == e.target) break;
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h:268:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i; i<children.size(); i++) if (children[i] == e.target) break;
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h: In member function 'bool ofxDatGuiScrollView::isValidIndex(int)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiScrollView.h:287:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
return index >= 0 && index < children.size();
^
In file included from /home/pi/openFrameworks/addons/ofxDatGui/src/ofxDatGui.h:24:0,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/ofApp.h:4,
from /home/pi/openFrameworks/addons/ofxDatGui/example-Matrices/src/main.cpp:2:
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h: In member function 'virtual void ofxDatGuiGroup::draw()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:83:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<children.size(); i++) {
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:87:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (i == children.size()-1) break;
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:91:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<children.size(); i++) children[i]->drawColorPicker();
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h: In member function 'void ofxDatGuiGroup::layout()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:102:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<children.size(); i++) {
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:110:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (i == children.size()-1) mHeight -= mStyle.vMargin;
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h: In member function 'virtual void ofxDatGuiFolder::drawColorPicker()':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:172:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<pickers.size(); i++) pickers[i]->drawColorPicker();
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h: In member function 'ofxDatGuiComponent* ofxDatGuiFolder::getComponent(ofxDatGuiType, std::string)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:351:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i=0; i<children.size(); i++) {
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h: In constructor 'ofxDatGuiDropdown::ofxDatGuiDropdown(std::string, const std::vector<std::basic_string >&)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:401:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<options.size(); i++){
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h: In member function 'void ofxDatGuiDropdown::select(int)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:429:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (cIndex < 0 || cIndex >= children.size()){
^
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h: In member function 'void ofxDatGuiDropdown::onOptionSelected(ofxDatGuiButtonEvent)':
/home/pi/openFrameworks/addons/ofxDatGui/src/components/ofxDatGuiGroups.h:457:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0; i<children.size(); i++) if (e.target == children[i]) mOption = i;
^
/home/pi/openFrameworks/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk:199: recipe for target 'obj/linuxarmv6l/Release/src/main.o' failed
make[1]: *** [obj/linuxarmv6l/Release/src/main.o] Error 1
make[1]: Leaving directory '/home/pi/openFrameworks/addons/ofxDatGui/example-Matrices'
/home/pi/openFrameworks/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk:126: recipe for target 'Release' failed
make: *** [Release] Error 2

fonts

I download this addon some weeks ago, and it was working fine in a multi window app. Now, when I pulled last changes, fonts are always invalid. It is like pointers to fonts are being deleted / lost somewhere. I am going to study this commit later:

2f6ad8e

Best,
Andrie

setStripeColor

I want to remove the stripe in a dropdown menu. I didn't find any options, so I've simply set the stripe color to the same color as the background, with

for (int i=0; i<menu->size(); i++) menu->getChildAt(i)->setStripeColor(ofColor(250,152,154, 100));

but I've 2 problems:

  1. The first voice did not change the stripe color
  2. My menu is transparent, but the stripe color is rendered with alpha 255.

reference to '_1' is ambiguous

Hi,

i just ran into an ambiguous reference. I'm using my own compiled boost version with openFrameworks which may couse this error.

(24)   .../ofxDatGui/src/ofxDatGui.h
(24)   .../ofxDatGui/src/components/ofxDatGuiGroups.h
(24)   .../ofxDatGui/src/components/ofxDatGuiLabel.h
(24)   .../ofxDatGui/src/core/ofxDatGuiComponent.h
Error:(79, 68) reference to '_1' is ambiguous

It would help to fully qualify the placeholder like this: std::placeholders::_1.
Does this make sense?

Constant POINTS redefinition conflict

Some constants causes redefinition conflicts, for example ofxDatGuiGraph::POINTS with and opencv POINTS definition.

I will send a PR to rename the enums to make them ofxDatGui specific.

Rotate icon.dropdown by 180 degrees when folder is expanded

I've got the arrow pointing up when a folder is expanded and I think it works better that way on folder-heavy UIs. I'd send a pull request but my hack involves a new image rather than a straightforward rotation (I'm just a beginner with C++). Any chance to add this as enhancement?

Precision of slider is causing non smooth programmatic fades of binded values

I'd much prefer the precision setting only to apply to the display and the input and not to truncate the underlying value.

In my case I will often bind the sliders to a value that might also get changed programmatically or I might have an ease or filter on the value changes. In the current implementation that results in non smooth animations unless I increase the precision on the slider. For any kind of transition I'd always want as high precision as possible, but on the input slider I might still prefer fewer decimals.

missing widgets

hello,

Very promising Gui, thanks for the hard work and for sharing.

Maybe i am wrong, but i can't see how to :

  • add a simple push button (without toggle)
  • make matrix buttons auto exclusive

thanks

widgets suggestion and small bug report

hello,
first of all thanks for this awesome addon!

I have a small liste of suggestions :

  • rotary sliders
  • the ability to set "ticks" on a slider
  • double-clic or left-clic on a slider to reset it to a default value
  • the ability to "fine-tune" a slider by shift+draging it

does that seem relevant/feasible?

also, i've noticed that when you stack three sliders on top of each other, if the one in the middle has the focus and you drag your mouse on the one on the top (with LMB pressed), it instantly takes focus. This does not seem to happen with the lower slider.

thanks!

Problem with mouse events and panels

This is probably related to #17

I have a matrix button that show and hide several GUI panels. When I hide a gui panel, without any initial interaction, it never gets the mouse events back when is shown; only the ones that I move in the first interaction work after being hidden and shown again.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.