+eListboxPythonMultiContent::eListboxPythonMultiContent()
+ :m_temp_clip(gRegion::invalidRegion())
+{
+}
+
+eListboxPythonMultiContent::~eListboxPythonMultiContent()
+{
+ Py_XDECREF(m_buildFunc);
+ Py_XDECREF(m_selectableFunc);
+}
+
+void eListboxPythonMultiContent::setSelectionClip(eRect &rect, bool update)
+{
+ if (update && m_selection_clip.valid())
+ {
+ m_temp_clip = m_selection_clip;
+ m_temp_clip |= rect;
+ m_selection_clip = rect;
+ if (m_listbox)
+ m_listbox->entryChanged(m_cursor);
+ }
+ else
+ m_selection_clip = rect;
+}
+
+static void clearRegion(gPainter &painter, eWindowStyle &style, ePyObject pforeColor, ePyObject pbackColor, ePyObject pbackColorSelected, int selected, gRegion &rc, eRect &sel_clip)
+{
+ if (selected && sel_clip.valid())
+ {
+ painter.clip(rc-sel_clip);
+ if (pbackColor)
+ {
+ int color = PyInt_AsLong(pbackColor);
+ painter.setBackgroundColor(gRGB(color));
+ }
+ else
+ style.setStyle(painter, eWindowStyle::styleListboxNormal);
+ painter.clear();
+ painter.clippop();
+ painter.clip(rc&sel_clip);
+ style.setStyle(painter, eWindowStyle::styleListboxSelected);
+ if (pbackColorSelected)
+ {
+ int color = PyInt_AsLong(pbackColorSelected);
+ painter.setBackgroundColor(gRGB(color));
+ }
+ painter.clear();
+ painter.clippop();
+ }
+ else
+ {
+ if (selected)
+ {
+ style.setStyle(painter, eWindowStyle::styleListboxSelected);
+ if (pbackColorSelected)
+ {
+ int color = PyInt_AsLong(pbackColorSelected);
+ painter.setBackgroundColor(gRGB(color));
+ }
+ }
+ else
+ {
+ style.setStyle(painter, eWindowStyle::styleListboxNormal);
+ if (pbackColor)
+ {
+ int color = PyInt_AsLong(pbackColor);
+ painter.setBackgroundColor(gRGB(color));
+ }
+ }
+ painter.clear();
+ }
+ if (pforeColor)
+ {
+ int color = PyInt_AsLong(pforeColor);
+ painter.setForegroundColor(gRGB(color));
+ }
+}
+