[Summary] Changed class PersistentTooltip. Now it can be used for 'non-draggable...
authorNikolay <MPolianovskyi@wavesglobal.com>
Mon, 27 Apr 2015 15:32:00 +0000 (18:32 +0300)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 29 Jun 2015 18:18:09 +0000 (14:18 -0400)
[Feature reviewed] MKosharnyy
[Reviewed] VKamyshniy

Manually clean up merge mess, indentation, logic weakness, initializer order, etc.

Conflicts:
libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h
libs/gtkmm2ext/persistent_tooltip.cc

libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h
libs/gtkmm2ext/persistent_tooltip.cc

index 6507bbb4795021b4bac0c8042299a85af94b2a8a..7e8fae47d05fe99212de9e607a76bc0cbfc6eb0a 100644 (file)
@@ -31,15 +31,17 @@ namespace Gtkmm2ext {
  */
 class LIBGTKMM2EXT_API PersistentTooltip : public sigc::trackable
 {
-public:
-       PersistentTooltip (Gtk::Widget *, int margin_y = 0);
+  public:
+       PersistentTooltip (Gtk::Widget *, bool draggable = false);
        virtual ~PersistentTooltip ();
        
        void set_tip (std::string);
-
+       void set_font (Pango::FontDescription font);
+       void set_center_alignment (bool align_to_center);
+   
        virtual bool dragging () const;
 
-private:
+  private:
        bool timeout ();
        void show ();
        void hide ();
@@ -54,6 +56,10 @@ private:
        Gtk::Window* _window;
        /** Our label */
        Gtk::Label* _label;
+    
+       /** allow to drag
+        */
+       bool _draggable;
        /** true if we are `dragging', in the sense that button 1
            is being held over _target.
        */
@@ -62,7 +68,8 @@ private:
        sigc::connection _timeout;
        /** The tip text */
        std::string _tip;
-       int _margin_y;
+       Pango::FontDescription _font;
+       bool _align_to_center;
 };
 
 }
index 61eb4884f5b236a4c54fa59c580e8237b205c398..44cb95358895335c3bccd30ec49a3089c79d404f 100644 (file)
@@ -30,12 +30,13 @@ using namespace Gtk;
 using namespace Gtkmm2ext;
 
 /** @param target The widget to provide the tooltip for */
-PersistentTooltip::PersistentTooltip (Gtk::Widget* target, int margin_y)
+PersistentTooltip::PersistentTooltip (Gtk::Widget* target, bool draggable)
        : _target (target)
        , _window (0)
        , _label (0)
+       , _draggable (draggable)
        , _maybe_dragging (false)
-       , _margin_y (margin_y)
+       , _align_to_center (true)
 {
        target->signal_enter_notify_event().connect (sigc::mem_fun (*this, &PersistentTooltip::enter), false);
        target->signal_leave_notify_event().connect (sigc::mem_fun (*this, &PersistentTooltip::leave), false);
@@ -99,7 +100,7 @@ PersistentTooltip::release (GdkEventButton* ev)
 bool
 PersistentTooltip::dragging () const
 {
-       return _maybe_dragging;
+       return _maybe_dragging && _draggable;
 }
 
 void
@@ -124,6 +125,7 @@ PersistentTooltip::show ()
                _window->set_decorated (false);
 
                _label = manage (new Label);
+               _label->modify_font (_font);
                _label->set_use_markup (true);
 
                _window->set_border_width (6);
@@ -140,7 +142,7 @@ PersistentTooltip::show ()
 
        if (!_window->is_visible ()) {
                int rx, ry;
-               int sw = gdk_screen_width();
+               int sw = gdk_screen_width ();
 
                _target->get_window()->get_origin (rx, ry);
                
@@ -151,10 +153,17 @@ PersistentTooltip::show ()
                _window->present ();
 
                if (sw < rx + _window->get_width()) {
+                       /* right edge of window would be off the right edge of
+                          the screen, so don't show it in the usual place.
+                       */
                        rx = sw - _window->get_width();
                        _window->move (rx, ry + _target->get_height());
                } else {
-                       _window->move (rx + (_target->get_width () - _window->get_width ()) / 2, ry + _target->get_height());
+                       if (_align_to_center) {
+                               _window->move (rx + (_target->get_width () - _window->get_width ()) / 2, ry + _target->get_height());
+                       } else {
+                               _window->move (rx, ry + _target->get_height());
+                       }
                }
        }
 }
@@ -168,3 +177,19 @@ PersistentTooltip::set_tip (string t)
                _label->set_markup (t);
        }
 }
+
+void
+PersistentTooltip::set_font (Pango::FontDescription font)
+{
+       _font = font;
+
+       if (_label) {
+               _label->modify_font (_font);
+       }
+}
+
+void
+PersistentTooltip::set_center_alignment (bool align_to_center)
+{
+       _align_to_center = align_to_center;
+}