DO NOT REPLY TO THIS MESSAGE.  INSTEAD, POST ANY RESPONSES TO THE LINK BELOW.

[STR New]

Link: http://www.fltk.org/str.php?L1924
Version: 2.0-current





Link: http://www.fltk.org/str.php?L1924
Version: 2.0-current
//////////////////////////////////////////////////////////////
/// 
/// This program shows tablet message statistics,
/// using the FLTK2 tablet support.
/// 
/// 
/// 
//////////////////////////////////////////////////////////////

#include <fltk/Window.h>
#include <fltk/Widget.h>
#include <fltk/Group.h>
#include <fltk/run.h>
#include <fltk/events.h>
#include <fltk/Color.h>
#include <fltk/Output.h>
#include <fltk/ValueOutput.h>
using namespace fltk;



const float MESSAGE_FREQ_CHECK_TIME = 1.;

class MyWindow;

class TabletWidget: public Widget
{
public:
  TabletWidget(int x, int y, int w, int h, MyWindow *parent);
  virtual int handle ( int event );
private:
  MyWindow *parent_;
  int msgCount_;

};


class MyWindow : public Window
{
private:
  TabletWidget *tablInputWidget;

  Output *enabled_out;
  Group *outGroup;

public:
  Output *deviceName_out;
  ValueOutput *posX_out, *posXmax_out;
  ValueOutput *posY_out, *posYmax_out;
  ValueOutput *pressure_out;
  ValueOutput *tiltX_out;
  ValueOutput *tiltY_out;
  ValueOutput *msgFrequency_out;


  MyWindow(int w, int h, const char* name, bool tabletEnabled)
    : Window(w, h, name) {
    enabled_out = new Output(10, 10, 380, 20);

    if (tabletEnabled) {
      enabled_out->value("Tablet device enabled");
      enabled_out->color(GREEN);
    }
    else {
      enabled_out->value("Can't enable tablet device - check your drivers");
      enabled_out->color(RED);
    }
    add( enabled_out );

    tablInputWidget = new TabletWidget(10, 35, 380, 280, this);
    add( tablInputWidget );

    outGroup = new Group(10, 325, 380, 500-300);
    add( outGroup );

    int x_margin = 130;
    int length = 100;

                        
    deviceName_out = new Output(x_margin, 0, length, 20, "current device");

    posX_out = new ValueOutput(x_margin, 30, length, 20, "absolute position X");
    posY_out = new ValueOutput(x_margin, 55, length, 20, "absolute position Y");
    posXmax_out = new ValueOutput(x_margin+length+45, 30, length, 20, "max X");
    posYmax_out = new ValueOutput(x_margin+length+45 , 55, length, 20, "max Y");

    pressure_out = new ValueOutput(x_margin, 80, length, 20, "pressure");
    tiltX_out = new ValueOutput(x_margin, 105, length, 20, "tilt X");
    tiltY_out = new ValueOutput(x_margin, 130, length, 20, "tilt Y");

    msgFrequency_out = new ValueOutput(x_margin+150, 160, length, 20, "tablet 
messages per second (1 sec update time):");

    outGroup->add(deviceName_out);

    outGroup->add(posX_out);
    outGroup->add(posY_out);
    outGroup->add(posXmax_out);
    outGroup->add(posYmax_out);

    outGroup->add(pressure_out);
    outGroup->add(tiltX_out);
    outGroup->add(tiltY_out);

    outGroup->add(msgFrequency_out);

    tablInputWidget->add_timeout(MESSAGE_FREQ_CHECK_TIME);
  }
};



int main(int argc, char *argv[])
{
  bool tabletEnabled = enable_tablet_events();

  MyWindow wnd(400, 520, "tablet test", tabletEnabled);
  wnd.show();

  return run();
}



TabletWidget::TabletWidget(int x, int y, int w, int h, MyWindow *parent)
  : Widget(x, y, w, h, "Place your stylus here")
  , parent_(parent)
{
}


int TabletWidget::handle ( int event )
{
  if (event == TIMEOUT) {
    parent_->msgFrequency_out->value( 
((float)msgCount_)/MESSAGE_FREQ_CHECK_TIME );
    
    msgCount_ = 0;
    repeat_timeout(MESSAGE_FREQ_CHECK_TIME);
  }

  if (event == TABLET || event == MOVE) {
    switch( event_device() ) {
      case DEVICE_MOUSE:
        parent_->deviceName_out->value("MOUSE");
        break;
      case DEVICE_STYLUS:
        parent_->deviceName_out->value("STYLUS");
        break;
      case DEVICE_ERASER:
        parent_->deviceName_out->value("ERASER");
        break;
      case DEVICE_CURSOR:
        parent_->deviceName_out->value("CURSOR");
        break;
      case DEVICE_AIRBRUSH:
        parent_->deviceName_out->value("AIRBRUSH");
        break;
      default:
        parent_->deviceName_out->value("unknown device");
    }

    parent_->posX_out->value(event_x_tablet());
    parent_->posY_out->value(event_y_tablet());
    parent_->posXmax_out->value(tablet_x_max());
    parent_->posYmax_out->value(tablet_y_max());

    parent_->pressure_out->value(event_pressure());
    parent_->tiltX_out->value(event_x_tilt());
    parent_->tiltY_out->value(event_y_tilt());

    if (event == TABLET)
      msgCount_++;
  }
        
  return Widget::handle(event);
}
_______________________________________________
fltk-bugs mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-bugs

Reply via email to