#include "canvas/root_group.h"
+namespace Gtk {
+ class Window;
+ class Label;
+}
+
namespace ArdourCanvas
{
struct Rect;
return &_root;
}
+ void set_background_color (ArdourCanvas::Color);
+ ArdourCanvas::Color background_color() const { return _bg_color; }
+
/** Called when an item is being destroyed */
virtual void item_going_away (Item *, boost::optional<Rect>) {}
void item_shown_or_hidden (Item *);
void item_changed (Item *, boost::optional<Rect>);
void item_moved (Item *, boost::optional<Rect>);
- virtual Cairo::RefPtr<Cairo::Context> context () = 0;
-
Duple canvas_to_window (Duple const&, bool rounded = true) const;
Duple window_to_canvas (Duple const&) const;
std::string indent() const;
std::string render_indent() const;
void dump (std::ostream&) const;
-
-protected:
- void queue_draw_item_area (Item *, Rect);
+
+ /** Ask the canvas to pick the current item again, and generate
+ an enter event for it.
+ */
+ virtual void re_enter () = 0;
+
+ virtual void start_tooltip_timeout (Item*) {}
+ virtual void stop_tooltip_timeout () {}
+
+ /** Set the timeout used to display tooltips, in milliseconds
+ */
+ static void set_tooltip_timeout (uint32_t msecs);
- /** our root item */
- Root _root;
+protected:
+ Root _root;
+ Color _bg_color;
+
+ static uint32_t tooltip_timeout_msecs;
+ void queue_draw_item_area (Item *, Rect);
virtual void pick_current_item (int state) = 0;
virtual void pick_current_item (Duple const &, int state) = 0;
void focus (Item *);
void unfocus (Item*);
- Cairo::RefPtr<Cairo::Context> context ();
-
Rect visible_area () const;
Coord width() const;
Coord height() const;
bool get_mouse_position (Duple& winpos) const;
+ void set_single_exposure (bool s) { _single_exposure = s; }
+ bool single_exposure () { return _single_exposure; }
+
+ void re_enter ();
+
+ void start_tooltip_timeout (Item*);
+ void stop_tooltip_timeout ();
+
protected:
+ void on_size_allocate (Gtk::Allocation&);
bool on_scroll_event (GdkEventScroll *);
bool on_expose_event (GdkEventExpose *);
+ bool on_key_press_event (GdkEventKey *);
+ bool on_key_release_event (GdkEventKey *);
bool on_button_press_event (GdkEventButton *);
bool on_button_release_event (GdkEventButton* event);
bool on_motion_notify_event (GdkEventMotion *);
void item_going_away (Item *, boost::optional<Rect>);
bool send_leave_event (Item const *, double, double) const;
+ Cairo::RefPtr<Cairo::Surface> canvas_image;
+
/** Item currently chosen for event delivery based on pointer position */
Item * _current_item;
/** Item pending as _current_item */
Item * _grabbed_item;
/** the item that currently has key focus or 0 */
Item * _focused_item;
+
+ bool _single_exposure;
+
+ sigc::connection tooltip_timeout_connection;
+ Item* current_tooltip_item;
+ Gtk::Window* tooltip_window;
+ Gtk::Label* tooltip_label;
+ bool show_tooltip ();
+ void hide_tooltip ();
+ bool really_start_tooltip_timeout ();
};
/** A GTK::Alignment with a GtkCanvas inside it plus some Gtk::Adjustments for