diff options
Diffstat (limited to 'src/drivers/Base/Fl_Base_Pen_Events.H')
| -rw-r--r-- | src/drivers/Base/Fl_Base_Pen_Events.H | 85 |
1 files changed, 42 insertions, 43 deletions
diff --git a/src/drivers/Base/Fl_Base_Pen_Events.H b/src/drivers/Base/Fl_Base_Pen_Events.H index ba4882d0b..2259c51aa 100644 --- a/src/drivers/Base/Fl_Base_Pen_Events.H +++ b/src/drivers/Base/Fl_Base_Pen_Events.H @@ -22,37 +22,32 @@ #include <FL/core/pen_events.H> #include <FL/Fl.H> -#include <map> -#include <memory> - class Fl_Widget; -namespace Fl { - -namespace Pen { - /* Pen event data storage. A second storage may be useful if the driver needs to collect pen data from multiple events, or if one system event can send multiple FLTK events. */ -typedef struct EventData { - double x { 0.0 }; - double y { 0.0 }; - double rx { 0.0 }; - double ry { 0.0 }; - double tilt_x { 0.0 }; - double tilt_y { 0.0 }; - double pressure { 1.0 }; - double proximity { 0.0 }; - double barrel_pressure { 0.0 }; - double twist { 0.0 }; - int pen_id { 0 }; - Fl::Pen::State state { (Fl::Pen::State)0 }; - Fl::Pen::State trigger { (Fl::Pen::State)0 }; -} EventData; - -extern EventData e; +typedef struct Fl_Pen_EventData { + double x; + double y; + double rx; + double ry; + double tilt_x; + double tilt_y; + double pressure; + double proximity; + double barrel_pressure; + double twist; + int pen_id; + Fl_Pen_State state; + Fl_Pen_State trigger; +} Fl_Pen_EventData; + +extern Fl_Pen_EventData fl_pen_event_data; + +void fl_pen_event_data_init(Fl_Pen_EventData *d); /* @@ -66,51 +61,55 @@ extern EventData e; including during event handling, the driver will remove the subscription. There is no need to explicitly unsubscribe. */ -class Subscriber : public Fl_Widget_Tracker { +class Fl_Pen_Subscriber : public Fl_Widget_Tracker { public: - Subscriber(Fl_Widget *w) : Fl_Widget_Tracker(w) { } + Fl_Pen_Subscriber(Fl_Widget *w) : Fl_Widget_Tracker(w) { } }; /* - Manage a list of subscribers. + Manage a list of subscribers using a simple array. */ -class SubscriberList : public std::map<Fl_Widget*, std::shared_ptr<Subscriber>> { +class Fl_Pen_SubscriberList { + Fl_Pen_Subscriber **items_; + Fl_Widget **widgets_; + int count_; + int alloc_; public: - SubscriberList() = default; + Fl_Pen_SubscriberList(); + ~Fl_Pen_SubscriberList(); void cleanup(); - std::shared_ptr<Subscriber> add(Fl_Widget *w); + Fl_Pen_Subscriber *add(Fl_Widget *w); void remove(Fl_Widget *w); + Fl_Pen_Subscriber *find(Fl_Widget *w); + int count() const { return count_; } + Fl_Pen_Subscriber *get(int i) const { return (i >= 0 && i < count_) ? items_[i] : 0; } }; -extern SubscriberList subscriber_list_; -extern std::shared_ptr<Subscriber> pushed_; -extern std::shared_ptr<Subscriber> below_pen_; +extern Fl_Pen_SubscriberList fl_pen_subscriber_list; +extern Fl_Pen_Subscriber *fl_pen_pushed; +extern Fl_Pen_Subscriber *fl_pen_below; /* The base driver for calls by apps into the pen system. Most traffic is generated by system events. The data is then converted - for the FLTK API and stored in Fl::Pen::e. The Pen interface then sends + for the FLTK API and stored in fl_pen_event_data. The Pen interface then sends the appropriate FLTK events to the subscribers. This driver class manages calls from the app into FLTK, including subscriber management and queries for driver an pen abilities. */ -class Driver { +class Fl_Pen_Driver { public: - Driver() = default; + Fl_Pen_Driver() { } virtual void subscribe(Fl_Widget* widget); virtual void unsubscribe(Fl_Widget* widget); virtual void release(); - virtual Trait traits(); - virtual Trait pen_traits(int pen_id); + virtual Fl_Pen_Trait traits(); + virtual Fl_Pen_Trait pen_traits(int pen_id); }; -extern Driver& driver; - -} // namespace Pen - -} // namespace Fl +extern Fl_Pen_Driver *fl_pen_driver; #endif // FL_BASE_PEN_EVENTS_H |
