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, bool clear=true) { 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, clear); 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, clear); painter.clippop(); selected = 1; } } else if (selected) { style.setStyle(painter, eWindowStyle::styleListboxSelected); clearRegionSelectedHelper(painter, local_style, offset, pbackColorSelected, cursorValid, clear); 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, clear); } 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 { if (pforeColor) { unsigned int color = PyInt_AsUnsignedLongMask(pforeColor); 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.setForegroundColor(local_style->m_foreground_color); } }
eRect eRect::operator|(const eRect &r) const { if ( valid() ) { if ( r.valid() ) { eRect tmp; tmp.setLeft( MIN( x1, r.x1 ) ); tmp.setRight( MAX( x2, r.x2 ) ); tmp.setTop( MIN( y1, r.y1 ) ); tmp.setBottom( MAX( y2, r.y2 ) ); return tmp; } else { return *this; } } else { return r; } }