+}
+
+static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *local_style, ePyObject pforeColor, ePyObject pforeColorSelected, ePyObject pbackColor, ePyObject pbackColorSelected, int selected, gRegion &rc, eRect &sel_clip, const ePoint &offset, bool cursorValid)
+{
+ if (selected && sel_clip.valid())
+ {
+ gRegion part = rc - sel_clip;
+ if (!part.empty())
+ {
+ painter.clip(part);
+ style.setStyle(painter, eWindowStyle::styleListboxNormal);
+ clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid);
+ painter.clippop();
+ selected = 0;
+ }
+ part = rc & sel_clip;
+ if (!part.empty())
+ {
+ painter.clip(part);
+ style.setStyle(painter, eWindowStyle::styleListboxSelected);
+ clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid);
+ painter.clippop();
+ selected = 1;
+ }
+ }
+ else if (selected)
+ {
+ style.setStyle(painter, eWindowStyle::styleListboxSelected);
+ clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid);
+ if (local_style && local_style->m_selection)
+ painter.blit(local_style->m_selection, offset, eRect(), gPainter::BT_ALPHATEST);
+ }
+ else
+ {
+ style.setStyle(painter, eWindowStyle::styleListboxNormal);
+ clearRegionHelper(painter, local_style, offset, pbackColor, cursorValid);
+ }
+
+ if (selected)
+ {
+ if (pforeColorSelected)
+ {
+ unsigned int color = PyInt_AsUnsignedLongMask(pforeColorSelected);
+ painter.setForegroundColor(gRGB(color));
+ }
+ /* if we have a local foreground color set, use that. */
+ else if (local_style && local_style->m_foreground_color_selected_set)
+ painter.setForegroundColor(local_style->m_foreground_color_selected);
+ }
+ else