diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-11-09 00:13:20 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-11-09 00:13:20 +0000 |
| commit | 612e765ceb09fce886ffc02120f039f7d880048f (patch) | |
| tree | 2b0bb67fe3e1a4e81b21b12bd57293caf1038c23 /lib | |
| parent | bae4b8c8df551c8a32ce9611ad1691ccb405791a (diff) | |
| download | enigma2-612e765ceb09fce886ffc02120f039f7d880048f.tar.gz enigma2-612e765ceb09fce886ffc02120f039f7d880048f.zip | |
add foregroundcolor selected and backgroundcolor selected to local listbox
styles (backgroundColorSelected, foregroundColorSelected in skin)
add EntryForegroundColorSelected support to GraphMultiEPG
add possibility to set selected foregroundcolor for listboxmulticontent
entries
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/gui/elistbox.cpp | 12 | ||||
| -rw-r--r-- | lib/gui/elistbox.h | 6 | ||||
| -rw-r--r-- | lib/gui/elistboxcontent.cpp | 155 | ||||
| -rw-r--r-- | lib/python/Components/MultiContent.py | 17 | ||||
| -rw-r--r-- | lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py | 17 |
5 files changed, 146 insertions, 61 deletions
diff --git a/lib/gui/elistbox.cpp b/lib/gui/elistbox.cpp index c7a46baa..383ac42d 100644 --- a/lib/gui/elistbox.cpp +++ b/lib/gui/elistbox.cpp @@ -483,12 +483,24 @@ void eListbox::setBackgroundColor(gRGB &col) m_style.m_background_color_set = 1; } +void eListbox::setBackgroundColorSelected(gRGB &col) +{ + m_style.m_background_color_selected = col; + m_style.m_background_color_selected_set = 1; +} + void eListbox::setForegroundColor(gRGB &col) { m_style.m_foreground_color = col; m_style.m_foreground_color_set = 1; } +void eListbox::setForegroundColorSelected(gRGB &col) +{ + m_style.m_foreground_color_selected = col; + m_style.m_foreground_color_selected_set = 1; +} + void eListbox::setBackgroundPicture(ePtr<gPixmap> &pm) { m_style.m_background = pm; diff --git a/lib/gui/elistbox.h b/lib/gui/elistbox.h index 20f23b5b..e3234322 100644 --- a/lib/gui/elistbox.h +++ b/lib/gui/elistbox.h @@ -59,8 +59,8 @@ struct eListboxStyle { ePtr<gPixmap> m_background, m_selection; int m_transparent_background; - gRGB m_background_color, m_foreground_color; - int m_background_color_set, m_foreground_color_set; + gRGB m_background_color, m_background_color_selected, m_foreground_color, m_foreground_color_selected; + int m_background_color_set, m_foreground_color_set, m_background_color_selected_set, m_foreground_color_selected_set; /* {m_transparent_background m_background_color_set m_background} @@ -120,7 +120,9 @@ public: void setSelectionEnable(int en); void setBackgroundColor(gRGB &col); + void setBackgroundColorSelected(gRGB &col); void setForegroundColor(gRGB &col); + void setForegroundColorSelected(gRGB &col); void setBackgroundPicture(ePtr<gPixmap> &pixmap); void setSelectionPicture(ePtr<gPixmap> &pixmap); diff --git a/lib/gui/elistboxcontent.cpp b/lib/gui/elistboxcontent.cpp index 8331ca11..39509064 100644 --- a/lib/gui/elistboxcontent.cpp +++ b/lib/gui/elistboxcontent.cpp @@ -147,15 +147,29 @@ void eListboxPythonStringContent::paint(gPainter &painter, eWindowStyle &style, if (m_listbox) local_style = m_listbox->getLocalStyle(); - /* 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); - - /* same for foreground */ - if (local_style && local_style->m_foreground_color_set) - painter.setForegroundColor(local_style->m_foreground_color); + if (local_style) + { + if (selected) + { + /* if we have a local background color set, use that. */ + if (local_style->m_background_color_selected_set) + painter.setBackgroundColor(local_style->m_background_color_selected); + /* same for foreground */ + if (local_style->m_foreground_color_selected_set) + painter.setForegroundColor(local_style->m_foreground_color_selected); + } + else + { + /* if we have a local background color set, use that. */ + if (local_style->m_background_color_set) + painter.setBackgroundColor(local_style->m_background_color); + /* same for foreground */ + if (local_style->m_foreground_color_set) + painter.setForegroundColor(local_style->m_foreground_color); + } + } - /* if we have no transparent background */ + /* if we have no transparent background */ if (!local_style || !local_style->m_transparent_background) { /* blit background picture, if available (otherwise, clear only) */ @@ -268,13 +282,27 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style, if (m_listbox) local_style = m_listbox->getLocalStyle(); - /* 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); - - /* same for foreground */ - if (local_style && local_style->m_foreground_color_set) - painter.setForegroundColor(local_style->m_foreground_color); + if (local_style) + { + if (selected) + { + /* if we have a local background color set, use that. */ + if (local_style->m_background_color_selected_set) + painter.setBackgroundColor(local_style->m_background_color_selected); + /* same for foreground */ + if (local_style->m_foreground_color_selected_set) + painter.setForegroundColor(local_style->m_foreground_color_selected); + } + else + { + /* if we have a local background color set, use that. */ + if (local_style->m_background_color_set) + painter.setBackgroundColor(local_style->m_background_color); + /* same for foreground */ + if (local_style->m_foreground_color_set) + painter.setForegroundColor(local_style->m_foreground_color); + } + } if (!local_style || !local_style->m_transparent_background) /* if we have no transparent background */ @@ -472,7 +500,7 @@ void eListboxPythonMultiContent::setSelectionClip(eRect &rect, bool update) 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) +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) { if (selected && sel_clip.valid()) { @@ -500,6 +528,8 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l 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(); } @@ -513,6 +543,8 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l 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(); } else @@ -536,13 +568,28 @@ static void clearRegion(gPainter &painter, eWindowStyle &style, eListboxStyle *l painter.clear(); } } - if (pforeColor) + if (selected) { - int color = PyInt_AsLong(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); + if (pforeColorSelected) + { + int color = PyInt_AsLong(pforeColor); + 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) + { + int color = PyInt_AsLong(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); + } } void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected) @@ -559,7 +606,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c painter.clip(itemregion); - clearRegion(painter, style, local_style, ePyObject(), ePyObject(), ePyObject(), selected, itemregion, sel_clip); + clearRegion(painter, style, local_style, ePyObject(), ePyObject(), ePyObject(), ePyObject(), selected, itemregion, sel_clip); ePyObject items; @@ -625,7 +672,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c case TYPE_TEXT: // text { /* - (0, x, y, width, height, fnt, flags, "bla" [, color, backColor, backColorSelected, borderWidth, borderColor] ) + (0, x, y, width, height, fnt, flags, "bla" [, color, colorSelected, backColor, backColorSelected, borderWidth, borderColor] ) */ ePyObject px = PyTuple_GET_ITEM(item, 1), py = PyTuple_GET_ITEM(item, 2), @@ -634,7 +681,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c pfnt = PyTuple_GET_ITEM(item, 5), pflags = PyTuple_GET_ITEM(item, 6), pstring = PyTuple_GET_ITEM(item, 7), - pforeColor, pbackColor, pbackColorSelected, pborderWidth, pborderColor; + pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, pborderWidth, pborderColor; if (!(px && py && pwidth && pheight && pfnt && pflags && pstring)) { @@ -650,20 +697,34 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c } if (size > 9) { - pbackColor = PyTuple_GET_ITEM(item, 9); + pforeColorSelected = PyTuple_GET_ITEM(item, 9); + if (pforeColorSelected == Py_None) + pforeColorSelected=ePyObject(); + } + if (size > 10) + { + pbackColor = PyTuple_GET_ITEM(item, 10); if (pbackColor == Py_None) pbackColor=ePyObject(); } - if (size > 10) + if (size > 11) { - pbackColorSelected = PyTuple_GET_ITEM(item, 10); + pbackColorSelected = PyTuple_GET_ITEM(item, 11); if (pbackColorSelected == Py_None) pbackColorSelected=ePyObject(); } - if (size > 11) - pborderWidth = PyTuple_GET_ITEM(item, 11); if (size > 12) - pborderColor = PyTuple_GET_ITEM(item, 12); + { + pborderWidth = PyTuple_GET_ITEM(item, 12); + if (pborderWidth == Py_None) + pborderWidth=ePyObject(); + } + if (size > 13) + { + pborderColor = PyTuple_GET_ITEM(item, 13); + if (pborderColor == Py_None) + pborderColor=ePyObject(); + } const char *string = (PyString_Check(pstring)) ? PyString_AsString(pstring) : "<not-a-string>"; int x = PyInt_AsLong(px) + offset.x(); @@ -682,10 +743,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) + if (pbackColor || pbackColorSelected || pforeColor || pforeColorSelected) { gRegion rc(rect); - clearRegion(painter, style, local_style, pforeColor, pbackColor, pbackColorSelected, selected, rc, sel_clip); + clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip); reset_colors=true; } @@ -732,7 +793,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c pwidth = PyTuple_GET_ITEM(item, 3), pheight = PyTuple_GET_ITEM(item, 4), pfilled_perc = PyTuple_GET_ITEM(item, 5), - pborderWidth, pforeColor, pbackColor, pbackColorSelected; + pborderWidth, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected; if (!(px && py && pwidth && pheight && pfilled_perc)) { @@ -741,18 +802,32 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c } if (size > 6) + { pborderWidth = PyTuple_GET_ITEM(item, 6); + if (pborderWidth == Py_None) + pborderWidth = ePyObject(); + } if (size > 7) + { pforeColor = PyTuple_GET_ITEM(item, 7); + if (pforeColor == Py_None) + pforeColor = ePyObject(); + } if (size > 8) { - pbackColor = PyTuple_GET_ITEM(item, 8); + pforeColorSelected = PyTuple_GET_ITEM(item, 8); + if (pforeColorSelected == Py_None) + pforeColorSelected=ePyObject(); + } + if (size > 9) + { + pbackColor = PyTuple_GET_ITEM(item, 9); if (pbackColor == Py_None) pbackColor=ePyObject(); } - if (size > 9) + if (size > 10) { - pbackColorSelected = PyTuple_GET_ITEM(item, 9); + pbackColorSelected = PyTuple_GET_ITEM(item, 10); if (pbackColorSelected == Py_None) pbackColorSelected=ePyObject(); } @@ -766,10 +841,10 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c eRect rect(x, y, width, height); painter.clip(rect); - if (pbackColor || pbackColorSelected || pforeColor) + if (pbackColor || pbackColorSelected || pforeColor || pforeColorSelected) { gRegion rc(rect); - clearRegion(painter, style, local_style, pforeColor, pbackColor, pbackColorSelected, selected, rc, sel_clip); + clearRegion(painter, style, local_style, pforeColor, pforeColorSelected, pbackColor, pbackColorSelected, selected, rc, sel_clip); reset_colors=true; } @@ -843,7 +918,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c if (pbackColor || pbackColorSelected) { gRegion rc(rect); - clearRegion(painter, style, local_style, ePyObject(), pbackColor, pbackColorSelected, selected, rc, sel_clip); + clearRegion(painter, style, local_style, ePyObject(), ePyObject(), pbackColor, pbackColorSelected, selected, rc, sel_clip); reset_colors=true; } diff --git a/lib/python/Components/MultiContent.py b/lib/python/Components/MultiContent.py index 3031fb3a..71096df8 100644 --- a/lib/python/Components/MultiContent.py +++ b/lib/python/Components/MultiContent.py @@ -1,15 +1,10 @@ from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, RT_VALIGN_TOP -def MultiContentEntryText(pos = (0, 0), size = (0, 0), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP, text = "", color = None): - add = () - if color is not None: - add = (color, ) - return (eListboxPythonMultiContent.TYPE_TEXT, pos[0], pos[1], size[0], size[1], font, flags, text) + add +def MultiContentEntryText(pos = (0, 0), size = (0, 0), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP, text = "", color = None, color_sel = None, backcolor = None, backcolor_sel = None, border_width = None, border_color = None): + return (eListboxPythonMultiContent.TYPE_TEXT, pos[0], pos[1], size[0], size[1], font, flags, text, color, color_sel, backcolor, backcolor_sel, border_width, border_color) -def MultiContentEntryPixmap(pos = (0, 0), size = (0, 0), png = None): - return (eListboxPythonMultiContent.TYPE_PIXMAP, pos[0], pos[1], size[0], size[1], png) +def MultiContentEntryPixmap(pos = (0, 0), size = (0, 0), png = None, backcolor = None, backcolor_sel = None): + return (eListboxPythonMultiContent.TYPE_PIXMAP, pos[0], pos[1], size[0], size[1], png, backcolor, backcolor_sel) -def MultiContentEntryPixmapAlphaTest(pos = (0, 0), size = (0, 0), png = None): - return (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, pos[0], pos[1], size[0], size[1], png) - -
\ No newline at end of file +def MultiContentEntryPixmapAlphaTest(pos = (0, 0), size = (0, 0), png = None, backcolor = None, backcolor_sel = None): + return (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, pos[0], pos[1], size[0], size[1], png, backcolor, backcolor_sel) diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py index 9040539a..72b69450 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -8,6 +8,7 @@ from Components.GUIComponent import GUIComponent from Components.EpgList import Rect from Components.Sources.Event import Event from Components.Sources.Source import ObsoleteSource +from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from Screens.Screen import Screen from Screens.EventView import EventViewSimple from Screens.TimeDateInput import TimeDateInput @@ -16,7 +17,7 @@ from Screens.EpgSelection import EPGSelection from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE from RecordTimer import RecordTimerEntry, parseEvent from ServiceReference import ServiceReference -from enigma import eEPGCache, eListbox, eListboxPythonMultiContent, gFont, loadPNG, \ +from enigma import eEPGCache, eListbox, gFont, loadPNG, eListboxPythonMultiContent, \ RT_HALIGN_LEFT, RT_HALIGN_CENTER, RT_VALIGN_CENTER, RT_WRAP, eRect, eTimer from time import localtime, time, strftime @@ -44,6 +45,7 @@ class EPGList(HTMLComponent, GUIComponent): self.event_rect = None self.foreColor = None + self.foreColorSelected = None self.borderColor = None self.backColor = 0x586d88 self.backColorSelected = 0x808080 @@ -54,6 +56,8 @@ class EPGList(HTMLComponent, GUIComponent): for (attrib, value) in self.skinAttributes: if attrib == "EntryForegroundColor": self.foreColor = parseColor(value).argb() + elif attrib == "EntryForegroundColorSelected": + self.foreColorSelected = parseColor(value).argb() elif attrib == "EntryBorderColor": self.borderColor = parseColor(value).argb() elif attrib == "EntryBackgroundColor": @@ -182,8 +186,7 @@ class EPGList(HTMLComponent, GUIComponent): def buildEntry(self, service, service_name, events): r1=self.service_rect r2=self.event_rect - res = [ None ] # no private data needed - res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, service_name)) + res = [ None, MultiContentEntryText(pos = (r1.left(),r1.top()), size = (r1.width(), r1.height()), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_CENTER, text = service_name) ] if events: start = self.time_base+self.offs*self.time_epoch*60 @@ -193,6 +196,7 @@ class EPGList(HTMLComponent, GUIComponent): width = r2.width() height = r2.height() foreColor = self.foreColor + foreColorSelected = self.foreColorSelected backColor = self.backColor backColorSelected = self.backColorSelected borderColor = self.borderColor @@ -200,12 +204,9 @@ class EPGList(HTMLComponent, GUIComponent): for ev in events: #(event_id, event_title, begin_time, duration) rec=self.timer.isInTimer(ev[0], ev[2], ev[3], service) > ((ev[3]/10)*8) xpos, ewidth = self.calcEntryPosAndWidthHelper(ev[2], ev[3], start, end, width) - if self.borderColor is None: - res.append((eListboxPythonMultiContent.TYPE_TEXT, left+xpos, top, ewidth, height, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, ev[1], foreColor, backColor, backColorSelected, 1)) - else: - res.append((eListboxPythonMultiContent.TYPE_TEXT, left+xpos, top, ewidth, height, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, ev[1], foreColor, backColor, backColorSelected, 1, borderColor)) + res.append(MultiContentEntryText(pos = (left+xpos, top), size = (ewidth, height), font = 1, flags = RT_HALIGN_CENTER | RT_VALIGN_CENTER | RT_WRAP, text = ev[1], color = foreColor, color_sel = foreColorSelected, backcolor = backColor, backcolor_sel = backColorSelected, border_width = 1, border_color = borderColor)) if rec and ewidth > 23: - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, left+xpos+ewidth-22, top+height-22, 21, 21, self.clock_pixmap, backColor, backColorSelected)) + res.append(MultiContentEntryPixmapAlphaTest(pos = (left+xpos+ewidth-22, top+height-22), size = (21, 21), png = self.clock_pixmap, backcolor = backColor, backcolor_selected = backColorSelected)) return res def selEntry(self, dir, visible=True): |
