diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2009-02-11 12:52:48 +0100 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2009-02-11 12:52:48 +0100 |
| commit | bbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b (patch) | |
| tree | c5945c791698c14723e989449e6b4bfcc275c05d /lib/gui | |
| parent | 4f7990ff2a55874b9eb65e3c9cd47dacb9f76deb (diff) | |
| parent | 5e6f814d005a01caa437a532e61f4b338617ff67 (diff) | |
| download | enigma2-bbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b.tar.gz enigma2-bbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b.zip | |
Merge branch 'master' of /home/tmbinc/enigma2-git into tmbinc/FixTimingBugs
Conflicts:
lib/dvb/decoder.cpp
Diffstat (limited to 'lib/gui')
| -rw-r--r-- | lib/gui/elistbox.cpp | 2 | ||||
| -rw-r--r-- | lib/gui/elistboxcontent.cpp | 102 | ||||
| -rw-r--r-- | lib/gui/eslider.cpp | 15 | ||||
| -rw-r--r-- | lib/gui/eslider.h | 4 | ||||
| -rw-r--r-- | lib/gui/esubtitle.cpp | 1 |
5 files changed, 68 insertions, 56 deletions
diff --git a/lib/gui/elistbox.cpp b/lib/gui/elistbox.cpp index 5b05c028..e8a0dada 100644 --- a/lib/gui/elistbox.cpp +++ b/lib/gui/elistbox.cpp @@ -279,7 +279,7 @@ void eListbox::updateScrollBar() if ((pages*m_items_per_page) < entries) ++pages; int start=(m_top*100)/(pages*m_items_per_page); - int vis=(m_items_per_page*100)/(pages*m_items_per_page); + int vis=(m_items_per_page*100+pages*m_items_per_page-1)/(pages*m_items_per_page); if (vis < 3) vis=3; m_scrollbar->setStartEnd(start,start+vis); diff --git a/lib/gui/elistboxcontent.cpp b/lib/gui/elistboxcontent.cpp index beb12044..44973af7 100644 --- a/lib/gui/elistboxcontent.cpp +++ b/lib/gui/elistboxcontent.cpp @@ -467,7 +467,8 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, /* type is borrowed */ } else eWarning("eListboxPythonConfigContent: second value of tuple is not a tuple."); - /* value is borrowed */ + if (value) + Py_DECREF(value); } if (selected && (!local_style || !local_style->m_selection)) @@ -522,7 +523,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l style.setStyle(painter, eWindowStyle::styleListboxNormal); if (pbackColor) { - int color = PyInt_AsLong(pbackColor); + unsigned int color = PyInt_AsUnsignedLongMask(pbackColor); painter.setBackgroundColor(gRGB(color)); } // transparent background? // if we have a local background color set, use that. @@ -542,7 +543,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l style.setStyle(painter, eWindowStyle::styleListboxSelected); if (pbackColorSelected) { - int color = PyInt_AsLong(pbackColorSelected); + unsigned int color = PyInt_AsUnsignedLongMask(pbackColorSelected); painter.setBackgroundColor(gRGB(color)); } else if (local_style && local_style->m_background_color_selected_set) @@ -559,7 +560,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l style.setStyle(painter, eWindowStyle::styleListboxSelected); if (pbackColorSelected) { - int color = PyInt_AsLong(pbackColorSelected); + unsigned int color = PyInt_AsUnsignedLongMask(pbackColorSelected); painter.setBackgroundColor(gRGB(color)); } else if (local_style && local_style->m_background_color_selected_set) @@ -571,7 +572,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l style.setStyle(painter, eWindowStyle::styleListboxNormal); if (pbackColor) { - int color = PyInt_AsLong(pbackColor); + unsigned int color = PyInt_AsUnsignedLongMask(pbackColor); painter.setBackgroundColor(gRGB(color)); }/* if we have a local background color set, use that. */ else if (local_style && local_style->m_background_color_set) @@ -587,7 +588,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l { if (pforeColorSelected) { - int color = PyInt_AsLong(pforeColorSelected); + unsigned int color = PyInt_AsUnsignedLongMask(pforeColorSelected); painter.setForegroundColor(gRGB(color)); } /* if we have a local foreground color set, use that. */ @@ -598,7 +599,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l { if (pforeColor) { - int color = PyInt_AsLong(pforeColor); + unsigned int color = PyInt_AsUnsignedLongMask(pforeColor); painter.setForegroundColor(gRGB(color)); } /* if we have a local foreground color set, use that. */ @@ -607,6 +608,30 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l } } +static ePyObject lookupColor(ePyObject color, ePyObject data) +{ + if (color == Py_None) + return ePyObject(); + + if ((!color) && (!data)) + return color; + + unsigned int icolor = PyInt_AsUnsignedLongMask(color); + + /* check if we have the "magic" template color */ + if ((icolor & 0xFF000000) == 0xFF000000) + { + int index = icolor & 0xFFFFFF; + eDebug("[eListboxPythonMultiContent] template color index: %d", index); + return PyTuple_GetItem(data, index); + } + + if (color == Py_None) + return ePyObject(); + + return color; +} + void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected) { gRegion itemregion(eRect(offset, m_itemsize)); @@ -622,7 +647,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c painter.clip(itemregion); clearRegion(painter, style, local_style, ePyObject(), ePyObject(), ePyObject(), ePyObject(), selected, itemregion, sel_clip); - ePyObject items; + ePyObject items, buildfunc_ret; if (m_list && cursorValid()) { @@ -638,7 +663,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c if (PyCallable_Check(m_buildFunc)) // when we have a buildFunc then call it { if (PyTuple_Check(items)) - items = PyObject_CallObject(m_buildFunc, items); + buildfunc_ret = items = PyObject_CallObject(m_buildFunc, items); else eDebug("items is no tuple"); } @@ -731,29 +756,17 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c } if (size > 8) - { - pforeColor = PyTuple_GET_ITEM(item, 8); - if (pforeColor == Py_None) - pforeColor=ePyObject(); - } + pforeColor = lookupColor(PyTuple_GET_ITEM(item, 8), data); + if (size > 9) - { - pforeColorSelected = PyTuple_GET_ITEM(item, 9); - if (pforeColorSelected == Py_None) - pforeColorSelected=ePyObject(); - } + pforeColorSelected = lookupColor(PyTuple_GET_ITEM(item, 9), data); + if (size > 10) - { - pbackColor = PyTuple_GET_ITEM(item, 10); - if (pbackColor == Py_None) - pbackColor=ePyObject(); - } + pbackColor = lookupColor(PyTuple_GET_ITEM(item, 10), data); + if (size > 11) - { - pbackColorSelected = PyTuple_GET_ITEM(item, 11); - if (pbackColorSelected == Py_None) - pbackColorSelected=ePyObject(); - } + pbackColorSelected = lookupColor(PyTuple_GET_ITEM(item, 11), data); + if (size > 12) { pborderWidth = PyTuple_GET_ITEM(item, 12); @@ -761,11 +774,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c pborderWidth=ePyObject(); } if (size > 13) - { - pborderColor = PyTuple_GET_ITEM(item, 13); - if (pborderColor == Py_None) - pborderColor=ePyObject(); - } + pborderColor = lookupColor(PyTuple_GET_ITEM(item, 13), data); if (PyInt_Check(pstring) && data) /* if the string is in fact a number, it refers to the 'data' list. */ pstring = PyTuple_GetItem(data, PyInt_AsLong(pstring)); @@ -804,7 +813,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c painter.clip(rect); if (pborderColor) { - int color = PyInt_AsLong(pborderColor); + unsigned int color = PyInt_AsUnsignedLongMask(pborderColor); painter.setForegroundColor(gRGB(color)); } @@ -948,17 +957,10 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c } if (size > 6) - { - pbackColor = PyTuple_GET_ITEM(item, 6); - if (pbackColor == Py_None) - pbackColor=ePyObject(); - } + pbackColor = lookupColor(PyTuple_GET_ITEM(item, 6), data); + if (size > 7) - { - pbackColorSelected = PyTuple_GET_ITEM(item, 7); - if (pbackColorSelected == Py_None) - pbackColorSelected=ePyObject(); - } + pbackColorSelected = lookupColor(PyTuple_GET_ITEM(item, 7), data); eRect rect(x, y, width, height); painter.clip(rect); @@ -983,8 +985,8 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry); error_out: - if (m_buildFunc && PyCallable_Check(m_buildFunc) && items) - Py_DECREF(items); + if (buildfunc_ret) + Py_DECREF(buildfunc_ret); painter.clippop(); } @@ -1015,7 +1017,11 @@ int eListboxPythonMultiContent::currentCursorSelectable() { ePyObject ret = PyObject_CallObject(m_selectableFunc, args); if (ret) - return ret == Py_True; + { + bool retval = ret == Py_True; + Py_DECREF(ret); + return ret; + } eDebug("call m_selectableFunc failed!!! assume not callable"); } else diff --git a/lib/gui/eslider.cpp b/lib/gui/eslider.cpp index dd2aac9e..19097ad4 100644 --- a/lib/gui/eslider.cpp +++ b/lib/gui/eslider.cpp @@ -1,7 +1,7 @@ #include <lib/gui/eslider.h> eSlider::eSlider(eWidget *parent) - :eWidget(parent), m_have_border_color(false), m_start(0), m_orientation(orHorizontal), m_border_width(0) + :eWidget(parent), m_have_border_color(false), m_start(0), m_orientation(orHorizontal), m_orientation_swapped(0), m_border_width(0) { } @@ -70,10 +70,14 @@ int eSlider::event(int event, void *data, void *data2) if (m_min < m_max) { - num_pix = pixsize * (m_value - m_start) / (m_max - m_min); - start_pix = pixsize * m_start / (m_max - m_min); + int val_range = m_max - m_min; + num_pix = (pixsize * (m_value - m_start) + val_range - 1) / val_range; /* properly round up */ + start_pix = (pixsize * m_start + val_range - 1) / val_range; + + if (m_orientation_swapped) + start_pix = pixsize - num_pix - start_pix; } - + if (start_pix < 0) { num_pix += start_pix; @@ -113,9 +117,10 @@ void eSlider::setStartEnd(int start, int end) event(evtChangedSlider); } -void eSlider::setOrientation(int orientation) +void eSlider::setOrientation(int orientation, int swapped) { m_orientation = orientation; + m_orientation_swapped = swapped; event(evtChangedSlider); } diff --git a/lib/gui/eslider.h b/lib/gui/eslider.h index c5440726..9a3e8395 100644 --- a/lib/gui/eslider.h +++ b/lib/gui/eslider.h @@ -11,7 +11,7 @@ public: void setStartEnd(int start, int end); void setRange(int min, int max); enum { orHorizontal, orVertical }; - void setOrientation(int orientation); + void setOrientation(int orientation, int swapped = 0); void setBorderWidth(int pixel); void setBorderColor(const gRGB &color); void setPixmap(gPixmap *pixmap); @@ -24,7 +24,7 @@ private: evtChangedSlider = evtUserWidget }; bool m_have_border_color; - int m_min, m_max, m_value, m_start, m_orientation, m_border_width; + int m_min, m_max, m_value, m_start, m_orientation, m_orientation_swapped, m_border_width; ePtr<gPixmap> m_pixmap; gRegion m_currently_filled; diff --git a/lib/gui/esubtitle.cpp b/lib/gui/esubtitle.cpp index c837afc6..085a749a 100644 --- a/lib/gui/esubtitle.cpp +++ b/lib/gui/esubtitle.cpp @@ -16,6 +16,7 @@ eSubtitleWidget::eSubtitleWidget(eWidget *parent) setBackgroundColor(gRGB(0,0,0,255)); m_page_ok = 0; m_dvb_page_ok = 0; + m_pango_page_ok = 0; CONNECT(m_hide_subtitles_timer->timeout, eSubtitleWidget::clearPage); } |
