Merge branch 'master' into pu/mp

This commit is contained in:
svenhoefer
2017-04-10 21:43:33 +02:00
4 changed files with 81 additions and 35 deletions

View File

@@ -231,7 +231,7 @@ void Rgb2Hsv(RgbColor *rgb, HsvColor *hsv)
hsv->v = f_V; hsv->v = f_V;
} }
void getItemColors(fb_pixel_t &t, fb_pixel_t &b, bool selected, bool marked, bool switch_background) void getItemColors(fb_pixel_t &t, fb_pixel_t &b, bool selected, bool marked, bool toggle_background, bool toggle_enlighten)
{ {
if (selected && marked) if (selected && marked)
{ {
@@ -255,6 +255,6 @@ void getItemColors(fb_pixel_t &t, fb_pixel_t &b, bool selected, bool marked, boo
} }
// default // default
t = switch_background ? COL_MENUCONTENTDARK_TEXT : COL_MENUCONTENT_TEXT; t = toggle_background ? (toggle_enlighten ? COL_MENUCONTENT_TEXT : COL_MENUCONTENTDARK_TEXT) : COL_MENUCONTENT_TEXT;
b = switch_background ? COL_MENUCONTENTDARK_PLUS_0 : COL_MENUCONTENT_PLUS_0; b = toggle_background ? (toggle_enlighten ? COL_MENUCONTENT_PLUS_1 : COL_MENUCONTENTDARK_PLUS_0) : COL_MENUCONTENT_PLUS_0;
} }

View File

@@ -161,6 +161,6 @@ uint8_t SysColor2Hsv(fb_pixel_t color, HsvColor *hsv);
void Hsv2Rgb(HsvColor *hsv, RgbColor *rgb); void Hsv2Rgb(HsvColor *hsv, RgbColor *rgb);
void Rgb2Hsv(RgbColor *rgb, HsvColor *hsv); void Rgb2Hsv(RgbColor *rgb, HsvColor *hsv);
void getItemColors(fb_pixel_t &t, fb_pixel_t &b, bool selected = false, bool marked = false, bool switch_background = false); void getItemColors(fb_pixel_t &t, fb_pixel_t &b, bool selected = false, bool marked = false, bool toggle_background = false, bool toggle_enlighten = false);
#endif #endif

View File

@@ -55,6 +55,7 @@
#include <zapit/satconfig.h> #include <zapit/satconfig.h>
#include <zapit/getservices.h> #include <zapit/getservices.h>
#include <eitd/sectionsd.h> #include <eitd/sectionsd.h>
#include <system/helpers.h>
#include <algorithm> #include <algorithm>
#include <sstream> #include <sstream>
@@ -68,6 +69,7 @@ time_t EpgPlus::duration = 0;
int EpgPlus::sliderWidth = 0; int EpgPlus::sliderWidth = 0;
int EpgPlus::channelsTableWidth = 0; int EpgPlus::channelsTableWidth = 0;
int EpgPlus::entryFontSize = 0; int EpgPlus::entryFontSize = 0;
int EpgPlus::channelNumberOffset = 0;
/* negative size means "screen width in percent" */ /* negative size means "screen width in percent" */
static EpgPlus::SizeSetting sizeSettingTable[] = static EpgPlus::SizeSetting sizeSettingTable[] =
@@ -87,15 +89,15 @@ EpgPlus::Header::Header(CFrameBuffer * pframeBuffer __attribute__((unused)), int
this->x = px; this->x = px;
this->y = py; this->y = py;
this->width = pwidth; this->width = pwidth;
this->header = NULL; this->head = NULL;
} }
EpgPlus::Header::~Header() EpgPlus::Header::~Header()
{ {
if (this->header) if (this->head)
{ {
delete this->header; delete this->head;
this->header = NULL; this->head = NULL;
} }
} }
@@ -106,18 +108,18 @@ void EpgPlus::Header::init()
void EpgPlus::Header::paint(const char * Name) void EpgPlus::Header::paint(const char * Name)
{ {
std::string headerCaption = Name ? Name : g_Locale->getText(LOCALE_EPGPLUS_HEAD); std::string caption = Name ? Name : g_Locale->getText(LOCALE_EPGPLUS_HEAD);
if (this->header == NULL) if (this->head == NULL)
this->header = new CComponentsHeader(); this->head = new CComponentsHeader();
if (this->header) if (this->head)
{ {
this->header->setDimensionsAll(this->x, this->y, this->width, this->font->getHeight()); this->head->setDimensionsAll(this->x, this->y, this->width, this->font->getHeight());
this->header->setCaption(headerCaption, CTextBox::NO_AUTO_LINEBREAK); this->head->setCaption(caption, CTextBox::NO_AUTO_LINEBREAK);
this->header->setContextButton(CComponentsHeader::CC_BTN_HELP); this->head->setContextButton(CComponentsHeader::CC_BTN_HELP);
this->header->enableClock(true, "%H:%M", "%H %M", true); this->head->enableClock(true, "%H:%M", "%H %M", true);
this->header->paint(CC_SAVE_SCREEN_NO); this->head->paint(CC_SAVE_SCREEN_NO);
} }
} }
@@ -266,6 +268,13 @@ void EpgPlus::TimeLine::clearMark()
{ {
this->frameBuffer->paintBoxRel(this->x, this->y + this->font->getHeight(), this->frameBuffer->paintBoxRel(this->x, this->y + this->font->getHeight(),
this->width, this->font->getHeight() , COL_MENUCONTENT_PLUS_0); this->width, this->font->getHeight() , COL_MENUCONTENT_PLUS_0);
// paint the separation line
if (separationLineThickness > 0)
{
this->frameBuffer->paintBoxRel(this->x, this->y + this->font->getHeight() + this->font->getHeight(),
this->width, this->separationLineThickness, COL_MENUCONTENTDARK_PLUS_0);
}
} }
int EpgPlus::TimeLine::getUsedHeight() int EpgPlus::TimeLine::getUsedHeight()
@@ -307,11 +316,17 @@ bool EpgPlus::ChannelEventEntry::isSelected(time_t _selectedTime) const
void EpgPlus::ChannelEventEntry::paint(bool pisSelected, bool toggleColor) void EpgPlus::ChannelEventEntry::paint(bool pisSelected, bool toggleColor)
{ {
this->frameBuffer->paintBoxRel(this->x, this->y, this->width, this->font->getHeight(), bool selected = this->channelEvent.description.empty() ? false : pisSelected;
this->channelEvent.description.empty()? COL_MENUCONTENT_PLUS_0 : (pisSelected ? COL_MENUCONTENTSELECTED_PLUS_0 : (toggleColor ? COL_MENUCONTENT_PLUS_0 : COL_MENUCONTENT_PLUS_1)));
fb_pixel_t color;
fb_pixel_t bgcolor;
getItemColors(color, bgcolor, selected, false, toggleColor, true /* toggle enlighten */);
this->frameBuffer->paintBoxRel(this->x, this->y, this->width, this->font->getHeight(), bgcolor);
this->font->RenderString(this->x + OFFSET_INNER_SMALL, this->y + this->font->getHeight(), this->font->RenderString(this->x + OFFSET_INNER_SMALL, this->y + this->font->getHeight(),
this->width - 2*OFFSET_INNER_SMALL > 0 ? this->width - 2*OFFSET_INNER_SMALL : 0, this->channelEvent.description, pisSelected ? COL_MENUCONTENTSELECTED_TEXT : COL_MENUCONTENT_TEXT); this->width - 2*OFFSET_INNER_SMALL > 0 ? this->width - 2*OFFSET_INNER_SMALL : 0, this->channelEvent.description, color);
// paint the separation lines // paint the separation lines
if (separationLineThickness > 0) if (separationLineThickness > 0)
@@ -325,7 +340,8 @@ void EpgPlus::ChannelEventEntry::paint(bool pisSelected, bool toggleColor)
this->width, this->separationLineThickness, COL_MENUCONTENTDARK_PLUS_0); this->width, this->separationLineThickness, COL_MENUCONTENTDARK_PLUS_0);
} }
if (pisSelected) { if (pisSelected)
{
if (this->channelEvent.description.empty()) if (this->channelEvent.description.empty())
{ // dummy channel event { // dummy channel event
this->timeLine->clearMark(); this->timeLine->clearMark();
@@ -356,16 +372,12 @@ EpgPlus::ChannelEntry::ChannelEntry(const CZapitChannel * pchannel, int pindex,
{ {
this->channel = pchannel; this->channel = pchannel;
this->displayNumber = "";
this->displayName = "";
if (pchannel != NULL) if (pchannel != NULL)
{ {
std::stringstream pdisplayName; this->displayNumber = to_string(pchannel->number);
//pdisplayName << pindex + 1 << " " << pchannel->getName(); this->displayName = pchannel->getName();
if (g_settings.channellist_show_numbers)
pdisplayName << pchannel->number << " " << pchannel->getName();
else
pdisplayName << pchannel->getName();
this->displayName = pdisplayName.str();
} }
this->index = pindex; this->index = pindex;
@@ -407,11 +419,29 @@ EpgPlus::ChannelEntry::~ChannelEntry()
void EpgPlus::ChannelEntry::paint(bool isSelected, time_t _selectedTime) void EpgPlus::ChannelEntry::paint(bool isSelected, time_t _selectedTime)
{ {
this->frameBuffer->paintBoxRel(this->x, this->y, this->width, this->font->getHeight(), fb_pixel_t color;
isSelected ? COL_MENUCONTENTSELECTED_PLUS_0 : COL_MENUCONTENT_PLUS_0); fb_pixel_t bgcolor;
this->font->RenderString(this->x + OFFSET_INNER_MID, this->y + this->font->getHeight(), int radius = isSelected ? RADIUS_MID : RADIUS_NONE;
this->width - 2*OFFSET_INNER_MID, this->displayName, isSelected ? COL_MENUCONTENTSELECTED_TEXT : COL_MENUCONTENT_TEXT);
getItemColors(color, bgcolor, isSelected);
this->frameBuffer->paintBoxRel(this->x, this->y, this->width, this->font->getHeight(), bgcolor, radius, CORNER_LEFT);
int xPos = this->x + OFFSET_INNER_MID;
int numberWidth = 0;
if (g_settings.channellist_show_numbers)
{
// display channelnumber
int xOffset = EpgPlus::channelNumberOffset - this->font->getRenderWidth(this->displayNumber);
this->font->RenderString(xPos + xOffset, this->y + this->font->getHeight(), this->width - 2*OFFSET_INNER_MID, this->displayNumber, color);
numberWidth = EpgPlus::channelNumberOffset + OFFSET_INNER_SMALL;
xPos += numberWidth;
}
// display channelname
this->font->RenderString(xPos, this->y + this->font->getHeight(), this->width - numberWidth - 2*OFFSET_INNER_MID, this->displayName, color);
if (isSelected) if (isSelected)
{ {
@@ -471,7 +501,7 @@ void EpgPlus::ChannelEntry::paint(bool isSelected, time_t _selectedTime)
// paint detailsline // paint detailsline
if (isSelected) if (isSelected)
{ {
int xPos = this->x - DETAILSLINE_WIDTH; xPos = this->x - DETAILSLINE_WIDTH;
int yPosTop = this->y + this->font->getHeight()/2; int yPosTop = this->y + this->font->getHeight()/2;
int yPosBottom = this->footer->y + this->footer->getUsedHeight()/2; int yPosBottom = this->footer->y + this->footer->getUsedHeight()/2;
@@ -712,6 +742,16 @@ void EpgPlus::createChannelEntries(int selectedChannelEntryIndex)
this->selectedChannelEntry = this->displayedChannelEntries[selectedChannelEntryIndex - this->channelListStartIndex]; this->selectedChannelEntry = this->displayedChannelEntries[selectedChannelEntryIndex - this->channelListStartIndex];
} }
// get largest channelnumber
int n = 1;
for (TChannelEntries::iterator It = this->displayedChannelEntries.begin();
It != this->displayedChannelEntries.end();
++It)
{
n = std::max(n, (*It)->channel->number);
}
channelNumberOffset = ChannelEntry::font->getRenderWidth(to_string(n));
} }
void EpgPlus::init() void EpgPlus::init()
@@ -1308,6 +1348,10 @@ EpgPlus::TCChannelEventEntries::const_iterator EpgPlus::getSelectedEvent() const
void EpgPlus::hide() void EpgPlus::hide()
{ {
if (this->header->head)
{
this->header->head->kill();
}
this->frameBuffer->paintBackgroundBoxRel(this->usableScreenX - DETAILSLINE_WIDTH, this->usableScreenY, DETAILSLINE_WIDTH + this->usableScreenWidth, this->usableScreenHeight); this->frameBuffer->paintBackgroundBoxRel(this->usableScreenX - DETAILSLINE_WIDTH, this->usableScreenY, DETAILSLINE_WIDTH + this->usableScreenWidth, this->usableScreenHeight);
} }

View File

@@ -95,7 +95,7 @@ class EpgPlus
int width; int width;
static Font* font; static Font* font;
CComponentsHeader *header; CComponentsHeader *head;
}; };
@@ -211,6 +211,7 @@ class EpgPlus
//// attributes //// attributes
public: public:
const CZapitChannel * channel; const CZapitChannel * channel;
std::string displayNumber;
std::string displayName; std::string displayName;
int index; int index;
@@ -420,6 +421,7 @@ class EpgPlus
int channelListStartIndex; int channelListStartIndex;
int maxNumberOfDisplayableEntries; // maximal number of displayable entrys int maxNumberOfDisplayableEntries; // maximal number of displayable entrys
static int channelNumberOffset;
time_t startTime; time_t startTime;
time_t firstStartTime; time_t firstStartTime;