X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fruler.cpp;h=e0ee753138df1c6495e686070262481188d87648;hp=7018c212db52f8b72f1449400b9160594a746dde;hb=249229ecc727b4e6198afac942b230ca2ac6f0b8;hpb=819e2e95555b2b3c2190f24a3cfa82250d1f34e5 diff --git a/pv/view/ruler.cpp b/pv/view/ruler.cpp index 7018c212..e0ee7531 100644 --- a/pv/view/ruler.cpp +++ b/pv/view/ruler.cpp @@ -38,7 +38,7 @@ using std::vector; namespace pv { namespace view { -const int Ruler::RulerHeight = 30; +const float Ruler::RulerHeight = 2.5f; // x Text Height const int Ruler::MinorTickSubdivision = 4; const int Ruler::HoverArrowSize = 5; @@ -47,8 +47,7 @@ const int Ruler::Padding = 20; const int Ruler::BaselineOffset = 5; Ruler::Ruler(View &parent) : - MarginWidget(parent), - text_height_(calculate_text_height()) + MarginWidget(parent) { setMouseTracking(true); @@ -66,13 +65,15 @@ void Ruler::clear_selection() QSize Ruler::sizeHint() const { - return QSize(0, RulerHeight); + const int text_height = calculate_text_height(); + return QSize(0, RulerHeight * text_height); } QSize Ruler::extended_size_hint() const { - return QSize(0, RulerHeight + - (text_height_ + Padding + BaselineOffset) / 2); + const int text_height = calculate_text_height(); + return QSize(0, RulerHeight * text_height + + (text_height + Padding + BaselineOffset) / 2); } void Ruler::paintEvent(QPaintEvent*) @@ -98,9 +99,10 @@ void Ruler::paintEvent(QPaintEvent*) int division = (int)round(first_minor_division - first_major_division * MinorTickSubdivision) - 1; - const int major_tick_y1 = text_height_ + ValueMargin * 2; - const int tick_y2 = RulerHeight; - const int minor_tick_y1 = (major_tick_y1 + tick_y2) / 2; + const int text_height = calculate_text_height(); + const int ruler_height = RulerHeight * text_height; + const int major_tick_y1 = text_height + ValueMargin * 2; + const int minor_tick_y1 = (major_tick_y1 + ruler_height) / 2; double x; @@ -111,17 +113,17 @@ void Ruler::paintEvent(QPaintEvent*) if (division % MinorTickSubdivision == 0) { // Draw a major tick - p.drawText(x, ValueMargin, 0, text_height_, + p.drawText(x, ValueMargin, 0, text_height, AlignCenter | AlignTop | TextDontClip, pv::util::format_time(t, prefix)); p.drawLine(QPointF(x, major_tick_y1), - QPointF(x, tick_y2)); + QPointF(x, ruler_height)); } else { // Draw a minor tick p.drawLine(QPointF(x, minor_tick_y1), - QPointF(x, tick_y2)); + QPointF(x, ruler_height)); } division++; @@ -129,7 +131,7 @@ void Ruler::paintEvent(QPaintEvent*) } while (x < width()); // Draw the hover mark - draw_hover_mark(p); + draw_hover_mark(p, text_height); // The cursor labels are not drawn with the arrows exactly on the // bottom line of the widget, because then the selection shadow @@ -138,8 +140,11 @@ void Ruler::paintEvent(QPaintEvent*) // Draw the items const vector< shared_ptr > items(view_.time_items()); - for (auto &i : items) - i->paint_label(p, r); + for (auto &i : items) { + const bool highlight = !dragging_ && + i->label_rect(r).contains(mouse_point_); + i->paint_label(p, r, highlight); + } } void Ruler::mouseMoveEvent(QMouseEvent *e) @@ -236,7 +241,7 @@ void Ruler::keyPressEvent(QKeyEvent *e) } } -void Ruler::draw_hover_mark(QPainter &p) +void Ruler::draw_hover_mark(QPainter &p, int text_height) { const int x = view_.hover_point().x(); @@ -246,7 +251,7 @@ void Ruler::draw_hover_mark(QPainter &p) p.setPen(QPen(Qt::NoPen)); p.setBrush(QBrush(palette().color(foregroundRole()))); - const int b = RulerHeight; + const int b = RulerHeight * text_height; const QPointF points[] = { QPointF(x, b), QPointF(x - HoverArrowSize, b - HoverArrowSize), @@ -255,11 +260,9 @@ void Ruler::draw_hover_mark(QPainter &p) p.drawPolygon(points, countof(points)); } -int Ruler::calculate_text_height() +int Ruler::calculate_text_height() const { - QFontMetrics fm(font()); - return fm.boundingRect(0, 0, INT_MAX, INT_MAX, - Qt::AlignLeft | Qt::AlignTop, "8").height(); + return QFontMetrics(font()).ascent(); } void Ruler::hover_point_changed()