summaryrefslogtreecommitdiff
path: root/libs/gtkmm2ext/pane.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-05-27 11:16:01 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:45 -0400
commit9694a3181b4754aad039c844af690c43687e2005 (patch)
tree4eeceb0c5a07d42fbad335b07503cd8573ac9129 /libs/gtkmm2ext/pane.cc
parent91a95b086aa38477dc57f7ffc3466e38aa218d9f (diff)
Pane: use style-provided colors, and change colors on enter/leave/dragging
Diffstat (limited to 'libs/gtkmm2ext/pane.cc')
-rw-r--r--libs/gtkmm2ext/pane.cc42
1 files changed, 33 insertions, 9 deletions
diff --git a/libs/gtkmm2ext/pane.cc b/libs/gtkmm2ext/pane.cc
index 8c13fe55d3..2472d0257d 100644
--- a/libs/gtkmm2ext/pane.cc
+++ b/libs/gtkmm2ext/pane.cc
@@ -28,9 +28,9 @@ using namespace std;
Pane::Pane (bool h)
: horizontal (h)
- , dragging (false)
, divider_width (5)
{
+ set_name ("Pane");
set_has_window (false);
}
@@ -228,24 +228,27 @@ Pane::on_expose_event (GdkEventExpose* ev)
}
bool
-Pane::handle_press_event (GdkEventButton* ev, Divider*)
+Pane::handle_press_event (GdkEventButton* ev, Divider* d)
{
- dragging = true;
+ d->dragging = true;
+ d->queue_draw ();
+
return false;
}
bool
-Pane::handle_release_event (GdkEventButton* ev, Divider*)
+Pane::handle_release_event (GdkEventButton* ev, Divider* d)
{
+ d->dragging = false;
children.front()->queue_resize ();
- dragging = false;
+
return false;
}
bool
Pane::handle_motion_event (GdkEventMotion* ev, Divider* d)
{
- if (!dragging) {
+ if (!d->dragging) {
return true;
}
@@ -344,19 +347,40 @@ Pane::forall_vfunc (gboolean include_internals, GtkCallback callback, gpointer c
Pane::Divider::Divider ()
: fract (0.0)
+ , dragging (false)
{
- set_events (Gdk::EventMask (Gdk::BUTTON_PRESS|Gdk::BUTTON_RELEASE|Gdk::MOTION_NOTIFY));
+ set_events (Gdk::EventMask (Gdk::BUTTON_PRESS|
+ Gdk::BUTTON_RELEASE|
+ Gdk::MOTION_NOTIFY|
+ Gdk::ENTER_NOTIFY|
+ Gdk::LEAVE_NOTIFY));
}
bool
Pane::Divider::on_expose_event (GdkEventExpose* ev)
{
- Widget::on_expose_event (ev);
+ Gdk::Color c = (dragging ? get_style()->get_fg (Gtk::STATE_ACTIVE) :
+ get_style()->get_fg (get_state()));
Cairo::RefPtr<Cairo::Context> draw_context = get_window()->create_cairo_context ();
draw_context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height);
draw_context->clip_preserve ();
- draw_context->set_source_rgba (1.0, 0.0, 0.0, 0.6);
+ draw_context->set_source_rgba (c.get_red_p(), c.get_green_p(), c.get_blue_p(), 1.0);
draw_context->fill ();
+
+ return true;
+}
+
+bool
+Pane::Divider::on_enter_notify_event (GdkEventCrossing*)
+{
+ set_state (Gtk::STATE_SELECTED);
+ return true;
+}
+
+bool
+Pane::Divider::on_leave_notify_event (GdkEventCrossing*)
+{
+ set_state (Gtk::STATE_NORMAL);
return true;
}