X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fgui%2Fepositiongauge.cpp;h=e45d4a6c4e328ec4359d404fae2098bc1a72d4bf;hb=19a3bfd167508654566d8cf0ac32e9256839851c;hp=012fd87b235bd5d74b5c673b45ba26966a769a25;hpb=2dfef6e8b6feb651a83213860de491d1fcf5aed6;p=vuplus_dvbapp diff --git a/lib/gui/epositiongauge.cpp b/lib/gui/epositiongauge.cpp index 012fd87..e45d4a6 100644 --- a/lib/gui/epositiongauge.cpp +++ b/lib/gui/epositiongauge.cpp @@ -5,14 +5,20 @@ ePositionGauge::ePositionGauge(eWidget *parent) : eWidget(parent) { m_point_widget = new ePixmap(this); + m_seek_point_widget = new ePixmap(this); + m_seek_point_widget->hide(); m_point_widget->setAlphatest(1); + m_seek_point_widget->setAlphatest(1); m_position = 0; m_length = 0; + m_have_foreground_color = 0; + m_seek_position = 0; } ePositionGauge::~ePositionGauge() { delete m_point_widget; + delete m_seek_point_widget; } void ePositionGauge::setLength(const pts_t &len) @@ -37,15 +43,28 @@ void ePositionGauge::setInColor(const gRGB &color) invalidate(); } -void ePositionGauge::setPointer(gPixmap *pixmap, const ePoint ¢er) +void ePositionGauge::setPointer(int which, ePtr &pixmap, const ePoint ¢er) { - m_point_center = center; - m_point_widget->setPixmap(pixmap); - m_point_widget->resize(pixmap->size()); + setPointer(which, pixmap.operator->(), center); +} + +void ePositionGauge::setPointer(int which, gPixmap *pixmap, const ePoint ¢er) +{ + if (which == 0) + { + m_point_center = center; + m_point_widget->setPixmap(pixmap); + m_point_widget->resize(pixmap->size()); + } else + { + m_seek_point_center = center; + m_seek_point_widget->setPixmap(pixmap); + m_seek_point_widget->resize(pixmap->size()); + } updatePosition(); } -void ePositionGauge::setInOutList(PyObject *list) +void ePositionGauge::setInOutList(ePyObject list) { if (!PyList_Check(list)) return; @@ -56,14 +75,14 @@ void ePositionGauge::setInOutList(PyObject *list) for (i=0; i::iterator i(m_cue_entries.begin()); @@ -107,28 +127,45 @@ int ePositionGauge::event(int event, void *data, void *data2) continue; } else if (i->what == 1) /* out */ out = i++->where; - else /* mark */ + else /* mark or last */ { - int xm = scale(i->where); - painter.setForegroundColor(gRGB(0xFF8080)); - painter.fill(eRect(xm - 2, 0, 4, s.height())); + xm = scale(i->where); + if (i->what == 2) { + painter.setForegroundColor(gRGB(0xFF8080)); + if (xm - 2 < xm_last) /* Make sure last is not overdrawn */ + painter.fill(eRect(xm_last, 0, 2 + xm - xm_last, s.height())); + else + painter.fill(eRect(xm - 2, 0, 4, s.height())); + } else if (i->what == 3) { + painter.setForegroundColor(gRGB(0x80FF80)); + painter.fill(eRect(xm - 1, 0, 3, s.height())); + xm_last = xm + 2; + } i++; continue; } } - painter.setForegroundColor(gRGB(0x225b7395)); - int xi = scale(in), xo = scale(out); - painter.fill(eRect(xi, 10, xo-xi, s.height()-14)); + if (m_have_foreground_color) + { + painter.setForegroundColor(gRGB(m_foreground_color)); + int xi = scale(in), xo = scale(out); + painter.fill(eRect(xi, (s.height()-4) / 2, xo-xi, 4)); + } + in = m_length; if (i == m_cue_entries.end()) break; } // painter.setForegroundColor(gRGB(0x00000000)); - painter.setForegroundColor(gRGB(0x225b7395)); - painter.fill(eRect(s.width() - 2, 2, s.width() - 1, s.height() - 4)); - painter.fill(eRect(0, 2, 2, s.height() - 4)); + + if (m_have_foreground_color) + { + painter.setForegroundColor(gRGB(0x225b7395)); + painter.fill(eRect(s.width() - 2, 2, s.width() - 1, s.height() - 4)); + painter.fill(eRect(0, 2, 2, s.height() - 4)); + } #if 0 // border @@ -152,9 +189,11 @@ int ePositionGauge::event(int event, void *data, void *data2) void ePositionGauge::updatePosition() { m_pos = scale(m_position); + m_seek_pos = scale(m_seek_position); int base = (size().height() - 10) / 2; m_point_widget->move(ePoint(m_pos - m_point_center.x(), base - m_point_center.y())); + m_seek_point_widget->move(ePoint(m_seek_pos - m_seek_point_center.x(), base - m_seek_point_center.y())); } int ePositionGauge::scale(const pts_t &val) @@ -166,3 +205,29 @@ int ePositionGauge::scale(const pts_t &val) return width * val / m_length; } + +void ePositionGauge::setForegroundColor(const gRGB &col) +{ + if ((!m_have_foreground_color) || !(m_foreground_color == col)) + { + m_foreground_color = col; + m_have_foreground_color = 1; + invalidate(); + } +} + +void ePositionGauge::enableSeekPointer(int enable) +{ + if (enable) + m_seek_point_widget->show(); + else + m_seek_point_widget->hide(); +} + +void ePositionGauge::setSeekPosition(const pts_t &pos) +{ + if (m_seek_position == pos) + return; + m_seek_position = pos; + updatePosition(); +}