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 *posXabs_out, *posXabsMax_out;
  ValueOutput *posYabs_out, *posYabsMax_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, w-20, 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, w-20, 280, this);
    add( tablInputWidget );

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

    int x_margin = 130;
    int length = 100;
    int skip_x = 110;
    int y_pos = 0;

    int widg_h = 20;
    int skip_h = 10;
                        
    deviceName_out = new Output(x_margin, y_pos, length, widg_h, "current 
device");
    y_pos += widg_h+skip_h;

    posX_out = new ValueOutput(x_margin, y_pos, length, widg_h, "position X");
    posXmax_out = new ValueOutput(x_margin+length+skip_x, y_pos, length, 
widg_h, "max X");
    y_pos += widg_h+skip_h;

    posY_out = new ValueOutput(x_margin, y_pos, length, widg_h, "position Y");
    posYmax_out = new ValueOutput(x_margin+length+skip_x, y_pos, length, 
widg_h, "max Y");
    y_pos += widg_h+skip_h;

    posXabs_out = new ValueOutput(x_margin, y_pos, length, widg_h, "absolute 
position X");
    posXabsMax_out = new ValueOutput(x_margin+length+skip_x, y_pos, length, 
widg_h, "max absolute X");
    y_pos += widg_h+skip_h;

    posYabs_out = new ValueOutput(x_margin, y_pos, length, widg_h, "absolute 
position Y");
    posYabsMax_out = new ValueOutput(x_margin+length+skip_x , y_pos, length, 
widg_h, "max absolute Y");
    y_pos += widg_h+skip_h;

    pressure_out = new ValueOutput(x_margin, y_pos, length, widg_h, "pressure");
    y_pos += widg_h+skip_h;

    tiltX_out = new ValueOutput(x_margin, y_pos, length, widg_h, "tilt X");
    y_pos += widg_h+skip_h;

    tiltY_out = new ValueOutput(x_margin, y_pos, length, widg_h, "tilt Y");
    y_pos += widg_h+skip_h;

    y_pos += widg_h+skip_h;
    msgFrequency_out = new ValueOutput(x_margin+210, y_pos, length, widg_h, 
"tablet messages per second (1 sec update time):");
    y_pos += widg_h+skip_h;


    outGroup->add(deviceName_out);

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

    outGroup->add(posXabs_out);
    outGroup->add(posYabs_out);
    outGroup->add(posXabsMax_out);
    outGroup->add(posYabsMax_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(470, 650, "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_->posXmax_out->value(tablet_x_max());
    parent_->posY_out->value(event_y_tablet());
    parent_->posYmax_out->value(tablet_y_max());

    parent_->posXabs_out->value(event_x_root_tablet());
    parent_->posXabsMax_out->value(tablet_root_x_max());
    parent_->posYabs_out->value(event_y_root_tablet());
    parent_->posYabsMax_out->value(tablet_root_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