X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/29ec53f34486f08c1655b64ba95a949c1e1094af..ea9231ad7229f47ebf117a3b4894a9e4e7a3c40a:/lib/gui/elistboxcontent.cpp diff --git a/lib/gui/elistboxcontent.cpp b/lib/gui/elistboxcontent.cpp index 9bfe81df..191bc7e1 100644 --- a/lib/gui/elistboxcontent.cpp +++ b/lib/gui/elistboxcontent.cpp @@ -262,7 +262,8 @@ void eListboxPythonStringContent::invalidate() int s = size(); if ( m_cursor >= s ) m_listbox->moveSelectionTo(s?s-1:0); - m_listbox->invalidate(); + else + m_listbox->invalidate(); } } @@ -504,33 +505,42 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l { if (selected && sel_clip.valid()) { - painter.clip(rc-sel_clip); - if (pbackColor) + gRegion part = rc - sel_clip; + if (!part.empty()) { - int color = PyInt_AsLong(pbackColor); - painter.setBackgroundColor(gRGB(color)); - } // transparent background? - // if we have a local background color set, use that. - else if (local_style && local_style->m_background_color_set) - painter.setBackgroundColor(local_style->m_background_color); - else + painter.clip(part); style.setStyle(painter, eWindowStyle::styleListboxNormal); - if (local_style && local_style->m_transparent_background) - ; - else - painter.clear(); - painter.clippop(); - painter.clip(rc&sel_clip); - style.setStyle(painter, eWindowStyle::styleListboxSelected); - if (pbackColorSelected) + if (pbackColor) + { + int color = PyInt_AsLong(pbackColor); + painter.setBackgroundColor(gRGB(color)); + } // transparent background? + // if we have a local background color set, use that. + else if (local_style && local_style->m_background_color_set) + painter.setBackgroundColor(local_style->m_background_color); + if (!pbackColor && local_style && local_style->m_transparent_background) + ; + else + painter.clear(); + painter.clippop(); + selected = 0; + } + part = rc & sel_clip; + if (!part.empty()) { - int color = PyInt_AsLong(pbackColorSelected); - painter.setBackgroundColor(gRGB(color)); + painter.clip(part); + style.setStyle(painter, eWindowStyle::styleListboxSelected); + if (pbackColorSelected) + { + int color = PyInt_AsLong(pbackColorSelected); + painter.setBackgroundColor(gRGB(color)); + } + else if (local_style && local_style->m_background_color_selected_set) + painter.setBackgroundColor(local_style->m_background_color_selected); + painter.clear(); + painter.clippop(); + selected = 1; } - else if (local_style && local_style->m_background_color_selected_set) - painter.setBackgroundColor(local_style->m_background_color_selected); - painter.clear(); - painter.clippop(); } else { @@ -557,7 +567,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l else if (local_style && local_style->m_background_color_set) painter.setBackgroundColor(local_style->m_background_color); /* if we have no transparent background */ - if (local_style && local_style->m_transparent_background) + if (!pbackColor && local_style && local_style->m_transparent_background) ; else painter.clear(); @@ -567,7 +577,7 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l { if (pforeColorSelected) { - int color = PyInt_AsLong(pforeColor); + int color = PyInt_AsLong(pforeColorSelected); painter.setForegroundColor(gRGB(color)); } /* if we have a local foreground color set, use that. */ @@ -600,7 +610,6 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c local_style = m_listbox->getLocalStyle(); painter.clip(itemregion); - clearRegion(painter, style, local_style, ePyObject(), ePyObject(), ePyObject(), ePyObject(), selected, itemregion, sel_clip); ePyObject items; @@ -638,7 +647,6 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c for (int i = 1; i < size; ++i) { ePyObject item = PyList_GET_ITEM(items, i); // borrowed reference! - bool reset_colors=false; if (!item) { @@ -738,11 +746,10 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c eRect rect(x+bwidth, y+bwidth, width-bwidth*2, height-bwidth*2); painter.clip(rect); - if (pbackColor || pbackColorSelected || pforeColor || pforeColorSelected) + { gRegion rc(rect); clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip); - reset_colors=true; } painter.setFont(m_font[fnt]); @@ -759,8 +766,6 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c int color = PyInt_AsLong(pborderColor); painter.setForegroundColor(gRGB(color)); } - else if (pforeColor) // reset to normal color - style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal); rect.setRect(x, y, width, bwidth); painter.fill(rect); @@ -836,11 +841,10 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c eRect rect(x, y, width, height); painter.clip(rect); - if (pbackColor || pbackColorSelected || pforeColor || pforeColorSelected) + { gRegion rc(rect); clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip); - reset_colors=true; } // border @@ -910,13 +914,12 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c eRect rect(x, y, width, height); painter.clip(rect); - if (pbackColor || pbackColorSelected) + { gRegion rc(rect); clearRegion(painter, style, local_style, ePyObject(), ePyObject(), pbackColor, pbackColorSelected, selected, rc, sel_clip); - reset_colors=true; } - + painter.blit(pixmap, rect.topLeft(), rect, (type == TYPE_PIXMAP_ALPHATEST) ? gPainter::BT_ALPHATEST : 0); painter.clippop(); break; @@ -925,8 +928,6 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c eWarning("eListboxPythonMultiContent received unknown type (%d)", type); goto error_out; } - if (reset_colors) - style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal); } } @@ -1021,3 +1022,9 @@ void eListboxPythonMultiContent::updateClip(gRegion &clip) else m_old_clip = m_clip = gRegion::invalidRegion(); } + +void eListboxPythonMultiContent::entryRemoved(int idx) +{ + if (m_listbox) + m_listbox->entryRemoved(idx); +}