/* same for foreground */
if (local_style && local_style->m_foreground_color_set)
- painter.setBackgroundColor(local_style->m_foreground_color);
+ painter.setForegroundColor(local_style->m_foreground_color);
/* if we have no transparent background */
if (!local_style || !local_style->m_transparent_background)
painter.clear();
} else
{
- if (local_style && local_style->m_background)
+ if (local_style->m_background)
painter.blit(local_style->m_background, offset, eRect(), gPainter::BT_ALPHATEST);
+ else if (selected && !local_style->m_selection)
+ painter.clear();
}
if (m_list && cursorValid())
/* same for foreground */
if (local_style && local_style->m_foreground_color_set)
- painter.setBackgroundColor(local_style->m_foreground_color);
+ painter.setForegroundColor(local_style->m_foreground_color);
if (!local_style || !local_style->m_transparent_background)
/* if we have no transparent background */
painter.clear();
} else
{
- if (local_style && local_style->m_background)
+ if (local_style->m_background)
painter.blit(local_style->m_background, offset, eRect(), gPainter::BT_ALPHATEST);
+ else if (selected && !local_style->m_selection)
+ painter.clear();
}
if (m_list && cursorValid())
RESULT SwigFromPython(ePtr<gPixmap> &res, PyObject *obj);
eListboxPythonMultiContent::eListboxPythonMultiContent()
- :m_temp_clip(gRegion::invalidRegion())
+ :m_clip(gRegion::invalidRegion()), m_old_clip(gRegion::invalidRegion())
{
}
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);
- }
+ m_selection_clip = rect;
+ if (m_listbox)
+ rect.moveBy(ePoint(0, m_listbox->getEntryTop()));
+ if (m_clip.valid())
+ m_clip |= rect;
else
- m_selection_clip = rect;
+ m_clip = rect;
+ if (update && m_listbox)
+ m_listbox->entryChanged(m_cursor);
}
static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *local_style, ePyObject pforeColor, ePyObject pbackColor, ePyObject pbackColorSelected, int selected, gRegion &rc, eRect &sel_clip)
{
- /* if we have a local background color set, use that. */
- if (local_style && local_style->m_background_color_set)
- painter.setBackgroundColor(local_style->m_background_color);
-
if (selected && sel_clip.valid())
{
- /* if we have no transparent background */
- if (!local_style || !local_style->m_transparent_background)
+ bool clear=true;
+ painter.clip(rc-sel_clip);
+ if (pbackColor)
{
- painter.clip(rc-sel_clip);
- if (pbackColor)
- {
- int color = PyInt_AsLong(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)
- painter.setBackgroundColor(local_style->m_background_color);
- else
- style.setStyle(painter, eWindowStyle::styleListboxNormal);
+ int color = PyInt_AsLong(pbackColor);
+ painter.setBackgroundColor(gRGB(color));
+ } // transparent background?
+ else if (local_style && local_style->m_transparent_background)
+ clear=false;
+ // 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
+ style.setStyle(painter, eWindowStyle::styleListboxNormal);
+ if (clear)
painter.clear();
- painter.clippop();
- }
+ painter.clippop();
painter.clip(rc&sel_clip);
style.setStyle(painter, eWindowStyle::styleListboxSelected);
if (pbackColorSelected)
}
else
{
+ bool clear=true;
style.setStyle(painter, eWindowStyle::styleListboxNormal);
if (pbackColor)
{
int color = PyInt_AsLong(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)
- painter.setBackgroundColor(local_style->m_background_color);
+ else if (local_style)
+ {
+ if (local_style->m_transparent_background)
+ clear=false;
+ else if (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 (clear)
painter.clear();
}
}
painter.setForegroundColor(gRGB(color));
}/* if we have a local foreground color set, use that. */
else if (local_style && local_style->m_foreground_color_set)
- painter.setBackgroundColor(local_style->m_foreground_color);
+ painter.setForegroundColor(local_style->m_foreground_color);
}
void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)
if (sel_clip.valid())
sel_clip.moveBy(offset);
- if (m_temp_clip.valid())
- {
- m_temp_clip.moveBy(offset);
- itemregion &= m_temp_clip;
- m_temp_clip = eRect();
- }
-
/* get local listbox style, if present */
if (m_listbox)
local_style = m_listbox->getLocalStyle();
if (m_listbox)
m_listbox->setItemHeight(height);
}
+
+void eListboxPythonMultiContent::setList(ePyObject list)
+{
+ m_old_clip = m_clip = gRegion::invalidRegion();
+ eListboxPythonStringContent::setList(list);
+}
+
+void eListboxPythonMultiContent::updateClip(gRegion &clip)
+{
+ if (m_clip.valid())
+ {
+ clip &= m_clip;
+ if (m_old_clip.valid() && !(m_clip-m_old_clip).empty())
+ m_clip -= m_old_clip;
+ m_old_clip = m_clip;
+ }
+ else
+ m_old_clip = m_clip = gRegion::invalidRegion();
+}