]> sigrok.org Git - pulseview.git/blobdiff - pv/signal.h
Cache signal label text size at draw time for later use
[pulseview.git] / pv / signal.h
index 1b2f5df92a7221813e0dbb6afbdb7de74eac172c..b4c4244ca3fc438f7a71441bfc0a7de80fec0674 100644 (file)
@@ -34,6 +34,7 @@ class Signal
 {
 private:
        static const QSizeF LabelPadding;
 {
 private:
        static const QSizeF LabelPadding;
+       static const int LabelHitPadding;
 
 protected:
        Signal(QString name);
 
 protected:
        Signal(QString name);
@@ -52,23 +53,39 @@ public:
        virtual void paint(QPainter &p, const QRect &rect, double scale,
                double offset) = 0;
 
        virtual void paint(QPainter &p, const QRect &rect, double scale,
                double offset) = 0;
 
+
+       /**
+        * Paints the signal label into a QGLWidget.
+        * @param p the QPainter to paint into.
+        * @param rect the rectangular area to draw the label into.
+        * @param hover true if the label is being hovered over by the mouse.
+        */
+       virtual void paint_label(QPainter &p, const QRect &rect,
+               bool hover);
+
+       /**
+        * Determines if a point is in the header label rect.
+        * @param rect the rectangular area to draw the label into.
+        * @param point the point to test.
+        */
+       bool pt_in_label_rect(const QRect &rect, const QPoint &point);
+
+private:
+
+       /**
+        * Computes an caches the size of the label text.
+        */
+       void compute_text_size(QPainter &p);
+
        /**
         * Computes the outline rectangle of a label.
         * @param p the QPainter to lay out text with.
         * @param rect The rectangle of the signal header.
         * @return Returns the rectangle of the signal label.
         */
        /**
         * Computes the outline rectangle of a label.
         * @param p the QPainter to lay out text with.
         * @param rect The rectangle of the signal header.
         * @return Returns the rectangle of the signal label.
         */
-       virtual QRectF get_label_rect(QPainter &p, const QRect &rect);
-       
-       /**
-        * Paints the signal label into a QGLWidget.
-        * @param p the QPainter to paint into.
-        * @param rect the rectangular area to draw the label into.
-        */
-       virtual void paint_label(QPainter &p, const QRect &rect);
+       QRectF get_label_rect(const QRect &rect);
 
 protected:
 
 protected:
-
        /**
         * Get the colour of the logic signal
         */
        /**
         * Get the colour of the logic signal
         */
@@ -82,6 +99,7 @@ protected:
 
 protected:
        QString _name;
 
 protected:
        QString _name;
+       QSizeF _text_size;
 };
 
 } // namespace pv
 };
 
 } // namespace pv