Merge branch 'master' into pu/mp

This commit is contained in:
M. Liebmann
2017-06-29 15:06:39 +02:00
10 changed files with 103 additions and 65 deletions

View File

@@ -47,6 +47,9 @@ static int cfg_national_subset;
static int screen_x, screen_y, screen_w, screen_h;
void FillRect(int x, int y, int w, int h, fb_pixel_t color, bool modeFullColor=false);
void FillBorder(fb_pixel_t color, bool modeFullColor=false);
fb_pixel_t *getFBp(int *y)
{
if (*y < (int)var_screeninfo.yres)
@@ -56,34 +59,31 @@ fb_pixel_t *getFBp(int *y)
return lbb;
}
void FillRect(int x, int y, int w, int h, int color)
void FillRect(int x, int y, int w, int h, fb_pixel_t color, bool modeFullColor/*=false*/)
{
if(color < 0 || SIZECOLTABLE < color){
printf("FIXME array size %i color %i not in range\n",SIZECOLTABLE,color);
return;
}
fb_pixel_t *p = getFBp(&y);
MARK_FB(x, y, w, h);
p += x + y * stride;
if (w > 0)
if (w > 0) {
fb_pixel_t col = (modeFullColor) ? color : bgra[color];
for (int count = 0; count < h; count++) {
fb_pixel_t *dest0 = p;
for (int i = 0; i < w; i++)
*(dest0++) = bgra[color];
*(dest0++) = col;
p += stride;
}
}
}
void FillBorder(int color)
void FillBorder(fb_pixel_t color, bool modeFullColor/*=false*/)
{
int ys = (var_screeninfo.yres-var_screeninfo.yoffset);
FillRect(0 , ys ,StartX ,var_screeninfo.yres ,color);
FillRect(StartX, ys ,displaywidth,StartY ,color);
FillRect(StartX, ys+StartY+25*fontheight,displaywidth,var_screeninfo.yres-(StartY+25*fontheight),color);
FillRect(0 , ys ,StartX ,var_screeninfo.yres ,color, modeFullColor);
FillRect(StartX, ys ,displaywidth,StartY ,color, modeFullColor);
FillRect(StartX, ys+StartY+25*fontheight,displaywidth,var_screeninfo.yres-(StartY+25*fontheight),color, modeFullColor);
if (screenmode == 0 )
FillRect(StartX+displaywidth, ys,var_screeninfo.xres-(StartX+displaywidth),var_screeninfo.yres ,color);
FillRect(StartX+displaywidth, ys,var_screeninfo.xres-(StartX+displaywidth),var_screeninfo.yres ,color, modeFullColor);
}
int getIndexOfPageInHotlist()
@@ -258,7 +258,7 @@ void RenderClearMenuLineBB(char *p, tstPageAttr *attrcol, tstPageAttr *attr)
memset(p-TOPMENUCHARS, ' ', TOPMENUCHARS); /* init with spaces */
}
void ClearBB(int color)
void ClearBB(fb_pixel_t color)
{
FillRect(0, (var_screeninfo.yres - var_screeninfo.yoffset), var_screeninfo.xres, var_screeninfo.yres, color);
}
@@ -270,7 +270,7 @@ void ClearFB(int /*color*/)
}
#if 0
//never used
void ClearB(int color)
void ClearB(fb_pixel_t color)
{
FillRect(0, 0, var_screeninfo.xres, var_screeninfo.yres, color); /* framebuffer */
FillRect(0, var_screeninfo.yres, var_screeninfo.xres, var_screeninfo.yres, color); /* backbuffer */
@@ -841,7 +841,7 @@ int eval_triplet(int iOData, tstCachedPage *pstCachedPage,
{
*pAPy = RowAddress2Row(iAddress); /* new Active Row */
int color = iData & 0x1f;
fb_pixel_t color = iData & 0x1f;
int row = *pAPy0 + *pAPy;
int maxrow;
#if TUXTXT_DEBUG
@@ -892,7 +892,7 @@ int eval_triplet(int iOData, tstCachedPage *pstCachedPage,
*pAPx = *pAPy = 0; /* new Active Position 0,0 */
if (*endcol == 40) /* active object */
{
int color = iData & 0x1f;
fb_pixel_t color = iData & 0x1f;
int row = *pAPy0; // + *pAPy;
int maxrow;
@@ -4096,7 +4096,7 @@ void RenderDRCS( //FIX ME
}
void DrawVLine(int x, int y, int l, int color)
void DrawVLine(int x, int y, int l, fb_pixel_t color)
{
fb_pixel_t *p = getFBp(&y);
MARK_FB(x, y, 0, l);
@@ -4109,7 +4109,7 @@ void DrawVLine(int x, int y, int l, int color)
}
}
void DrawHLine(int x, int y, int l, int color)
void DrawHLine(int x, int y, int l, fb_pixel_t color)
{
int ltmp;
fb_pixel_t *p = getFBp(&y);
@@ -4130,7 +4130,7 @@ void FillRectMosaicSeparated(int x, int y, int w, int h, int fgcolor, int bgcolo
}
}
void FillTrapez(int x0, int y0, int l0, int xoffset1, int h, int l1, int color)
void FillTrapez(int x0, int y0, int l0, int xoffset1, int h, int l1, fb_pixel_t color)
{
fb_pixel_t *p = getFBp(&y0);
MARK_FB(x0, y0, l0, h);
@@ -4789,7 +4789,7 @@ void RenderChar(int Char, tstPageAttr *Attribute, int zoom, int yoffset)
{
for (Bit = 0x80; Bit; Bit >>= 1)
{
int color;
fb_pixel_t color;
if (--pixtodo < 0)
break;
@@ -5559,7 +5559,7 @@ void CopyBB2FB()
/* adapt background of backbuffer if changed */
if (StartX > 0 && *lfb != *lbb) {
FillBorder(*lbb);
FillBorder(*lbb, true);
// ClearBB(*(lfb + var_screeninfo.xres * var_screeninfo.yoffset));
}

View File

@@ -33,15 +33,19 @@
#include <cstring>
#include <errno.h>
#include <sstream>
#include <global.h>
#include <driver/audioplay.h>
#include <zapit/include/audio.h>
#include <eitd/edvbstring.h> // UTF8
#include "ffmpegdec.h"
extern "C" {
#include <libavutil/opt.h>
#include <libavutil/samplefmt.h>
#include <libswresample/swresample.h>
}
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 28, 1)
#define av_frame_alloc avcodec_alloc_frame
#define av_frame_unref avcodec_get_frame_defaults
@@ -63,8 +67,6 @@ extern cAudio * audioDecoder;
#define ProgName "FfmpegDec"
#define COVERDIR "/tmp/cover"
static OpenThreads::Mutex mutex;
static int cover_count = 0;
@@ -517,7 +519,7 @@ bool CFfmpegDec::SetMetaData(FILE *_in, CAudioMetaData* m, bool save_cover)
if (save_cover && (avc->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC)) {
mkdir(COVERDIR, 0755);
std::string cover(COVERDIR);
cover += "/" + to_string(cover_count++) + ".jpg";
cover += "/cover_" + to_string(cover_count++) + ".jpg";
FILE *f = fopen(cover.c_str(), "wb");
if (f) {
AVPacket *pkt = &avc->streams[i]->attached_pic;

View File

@@ -1389,9 +1389,10 @@ bool CMP3Dec::SaveCover(FILE * in, CAudioMetaData * const m)
data = id3_field_getbinarydata(field, &size);
if ( data )
{
mkdir(COVERDIR, 0755);
std::ostringstream cover;
cover.str("");
cover << "/tmp/cover_" << cover_count++ << ".jpg";
cover.str(COVERDIR);
cover << "/cover_" << cover_count++ << ".jpg";
FILE * pFile;
pFile = fopen ( cover.str().c_str() , "wb" );
if (pFile)

View File

@@ -64,6 +64,7 @@ CAudioMetaData::CAudioMetaData( const CAudioMetaData& src )
hasInfoOrXingTag( src.hasInfoOrXingTag ), artist( src.artist ),
title( src.title ), album( src.album ), sc_station( src.sc_station ),
date( src.date ), genre( src.genre ), track( src.track ),cover(src.cover),
logo( src.logo ), url( src.url ),
cover_temporary( false ),
changed( src.changed )
{
@@ -97,9 +98,10 @@ void CAudioMetaData::operator=( const CAudioMetaData& src )
genre = src.genre;
track = src.track;
cover = src.cover;
logo = src.logo;
url = src.url;
sc_station = src.sc_station;
changed = src.changed;
changed = src.changed;
cover_temporary = false;
}
@@ -125,6 +127,8 @@ void CAudioMetaData::clear()
if (cover_temporary && !cover.empty())
unlink(cover.c_str());
cover.clear();
logo.clear();
url.clear();
cover_temporary=false;
changed=false;
}

View File

@@ -96,6 +96,8 @@ public:
std::string genre;
std::string track;
std::string cover;
std::string logo;
std::string url;
bool cover_temporary;
bool changed;
};

View File

@@ -47,6 +47,8 @@
#define NEUTRINO_SCAN_SETTINGS_FILE CONFIGDIR "/scan.conf"
#define NEUTRINO_PARENTALLOCKED_FILE DATADIR "/neutrino/.plocked"
#define COVERDIR "/tmp/cover"
#define LOGODIR ICONSDIR "/logo"
#define LOGODIR_VAR ICONSDIR_VAR "/logo"

View File

@@ -155,6 +155,7 @@ CAudioPlayerGui::CAudioPlayerGui(bool inetmode)
m_inetmode = inetmode;
m_detailsline = NULL;
m_infobox = NULL;
m_titlebox = NULL;
Init();
}
@@ -210,6 +211,7 @@ CAudioPlayerGui::~CAudioPlayerGui()
m_title2Pos.clear();
delete m_detailsline;
delete m_infobox;
delete m_titlebox;
}
const struct button_label AudioPlayerButtons[][4] =
@@ -1142,7 +1144,7 @@ void CAudioPlayerGui::readDir_ic(void)
{
xmlDocPtr answer_parser = parseXml(answer.c_str());
scanBox->hide();
scanXmlData(answer_parser, "server_name", "listen_url", "bitrate", true);
scanXmlData(answer_parser, "listen_url", "server_name", "bitrate", true);
}
else
scanBox->hide();
@@ -1153,10 +1155,10 @@ void CAudioPlayerGui::readDir_ic(void)
void CAudioPlayerGui::scanXmlFile(std::string filename)
{
xmlDocPtr answer_parser = parseXmlFile(filename.c_str());
scanXmlData(answer_parser, "name", "url");
scanXmlData(answer_parser, "url", "name");
}
void CAudioPlayerGui::scanXmlData(xmlDocPtr answer_parser, const char *nametag, const char *urltag, const char *bitratetag, bool usechild)
void CAudioPlayerGui::scanXmlData(xmlDocPtr answer_parser, const char *urltag, const char *nametag, const char *bitratetag, bool usechild)
{
#define IC_typetag "server_type"
@@ -1452,6 +1454,7 @@ bool CAudioPlayerGui::openFilebrowser(void)
result = true;
}
m_idletime = time(NULL);
CVFD::getInstance()->setMode(CVFD::MODE_AUDIO);
paintLCD();
// if playlist is turned off -> start playing immediately
@@ -1523,6 +1526,7 @@ bool CAudioPlayerGui::openSCbrowser(void)
#endif
result = true;
}
m_idletime = time(NULL);
CVFD::getInstance()->setMode(CVFD::MODE_AUDIO);
paintLCD();
// if playlist is turned off -> start playing immediately
@@ -1605,7 +1609,6 @@ void CAudioPlayerGui::paintHead()
CComponentsHeader header(m_x, m_y + m_title_height + OFFSET_SHADOW + OFFSET_INTER, m_width, m_header_height, LOCALE_AUDIOPLAYER_HEAD, NEUTRINO_ICON_AUDIO);
header.enableShadow( CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT, -1, true);
header.setCorner(RADIUS_MID, CORNER_TOP);
if (m_inetmode)
header.setCaption(LOCALE_INETRADIO_NAME);
@@ -1630,52 +1633,61 @@ void CAudioPlayerGui::paintFoot()
{ NEUTRINO_ICON_BUTTON_INFO, LOCALE_PICTUREVIEWER_HEAD }
};
int radius = RADIUS_LARGE;
int button_y = m_y + m_height - OFFSET_SHADOW - m_info_height - OFFSET_INTER - OFFSET_SHADOW - 2*m_button_height;
int button_x = m_x;
int button_width = m_width;
// ensure to get round corners in footer
if (!m_show_playlist && radius)
{
button_x += radius;
button_width -= 2*radius;
}
// shadow
m_frameBuffer->paintBoxRel(m_x + OFFSET_SHADOW, button_y + OFFSET_SHADOW, m_width, 2*m_button_height, COL_SHADOW_PLUS_0, RADIUS_MID, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL));
m_frameBuffer->paintBoxRel(m_x, button_y, m_width, 2*m_button_height, COL_MENUFOOT_PLUS_0, RADIUS_MID, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL));
m_frameBuffer->paintBoxRel(m_x + OFFSET_SHADOW, button_y + OFFSET_SHADOW, m_width, 2*m_button_height, COL_SHADOW_PLUS_0, radius, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL));
m_frameBuffer->paintBoxRel(m_x, button_y, m_width, 2*m_button_height, COL_MENUFOOT_PLUS_0, radius, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL));
if (!m_playlist.empty())
::paintButtons(m_x, button_y + m_button_height, m_width, 3, SecondLineButtons, m_width, m_button_height);
::paintButtons(button_x, button_y + m_button_height, button_width, 3, SecondLineButtons, button_width, m_button_height);
if (m_key_level == 0)
{
if (m_playlist.empty())
{
if (m_inetmode)
::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[7], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[7], button_width, m_button_height);
else
::paintButtons(m_x, button_y, m_width, 1, &(AudioPlayerButtons[7][0]), m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 1, &(AudioPlayerButtons[7][0]), button_width, m_button_height);
}
else if (m_inetmode)
::paintButtons(m_x, button_y, m_width, 4, AudioPlayerButtons[8], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 4, AudioPlayerButtons[8], button_width, m_button_height);
else
::paintButtons(m_x, button_y, m_width, 4, AudioPlayerButtons[1], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 4, AudioPlayerButtons[1], button_width, m_button_height);
}
else if (m_key_level == 1)
{
if (m_curr_audiofile.FileType != CFile::STREAM_AUDIO)
::paintButtons(m_x, button_y, m_width, 4, AudioPlayerButtons[0], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 4, AudioPlayerButtons[0], button_width, m_button_height);
else
::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[6], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[6], button_width, m_button_height);
}
else // key_level == 2
{
if (m_state == CAudioPlayerGui::STOP)
{
if (m_select_title_by_name)
::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[5], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[5], button_width, m_button_height);
else
::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[4], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[4], button_width, m_button_height);
}
else
{
if (m_select_title_by_name)
::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[3], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[3], button_width, m_button_height);
else
::paintButtons(m_x, button_y, m_width, 2, AudioPlayerButtons[2], m_width, m_button_height);
::paintButtons(button_x, button_y, button_width, 2, AudioPlayerButtons[2], button_width, m_button_height);
}
}
}
@@ -1698,15 +1710,23 @@ void CAudioPlayerGui::paintTitleBox()
return;
if (m_state == CAudioPlayerGui::STOP && m_show_playlist)
m_frameBuffer->paintBackgroundBoxRel(m_x, m_y, m_width, m_title_height);
{
if (m_titlebox)
{
m_titlebox->kill();
delete m_titlebox; m_titlebox = NULL;
}
}
else
{
// shadow
m_frameBuffer->paintBoxRel(m_x + OFFSET_SHADOW, m_y + OFFSET_SHADOW, m_width, m_title_height, COL_SHADOW_PLUS_0, RADIUS_MID);
m_frameBuffer->paintBoxRel(m_x, m_y, m_width, m_title_height, COL_MENUHEAD_PLUS_0, RADIUS_MID);
m_frameBuffer->paintBoxFrame(m_x, m_y, m_width, m_title_height, OFFSET_INNER_MIN, COL_FRAME_PLUS_0, RADIUS_MID);
// title box
if (!m_titlebox)
{
m_titlebox = new CComponentsShapeSquare(m_x, m_y, m_width, m_title_height, NULL, CC_SHADOW_ON);
m_titlebox->enableFrame(true, FRAME_MIN_WIDTH);
m_titlebox->setCorner(RADIUS_LARGE);
}
m_titlebox->paint(false);
paintCover();
// first line (Track number)
@@ -1729,7 +1749,7 @@ void CAudioPlayerGui::paintTitleBox()
int xstart = (m_width - w)/2;
if (xstart < OFFSET_INNER_MID)
xstart = OFFSET_INNER_MID;
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 1*m_item_height, m_width - 2*OFFSET_INNER_MID, tmp, COL_MENUHEAD_TEXT);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 1*m_item_height, m_width - 2*OFFSET_INNER_MID, tmp, COL_MENUHEAD_TEXT); //caption "current track"
// second line (Artist/Title...)
GetMetaData(m_curr_audiofile);
@@ -1754,7 +1774,7 @@ void CAudioPlayerGui::paintTitleBox()
xstart = (m_width - w)/2;
if (xstart < OFFSET_INNER_MID)
xstart = OFFSET_INNER_MID;
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 2*m_item_height, m_width - 2*OFFSET_INNER_MID, tmp, COL_MENUHEAD_TEXT);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 2*m_item_height, m_width - 2*OFFSET_INNER_MID, tmp, COL_MENUHEAD_TEXT); //artist - title
// reset so fields get painted always
m_metainfo.clear();
@@ -2094,8 +2114,12 @@ void CAudioPlayerGui::updateMetaData()
if (updateMeta || updateScreen)
{
int cover_width = m_title_height + 2*OFFSET_INNER_MID;
m_frameBuffer->paintBoxRel(m_x + cover_width, m_y + OFFSET_INNER_SMALL + 2*m_item_height + OFFSET_INNER_SMALL, m_width - cover_width - OFFSET_INNER_MID, m_meta_height, COL_MENUHEAD_PLUS_0);
int xstart = ((m_width - 2*OFFSET_INNER_MID - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(m_metainfo))/2);
m_frameBuffer->paintBoxRel(m_x + cover_width, m_y + OFFSET_INNER_SMALL + 2*m_item_height + OFFSET_INNER_SMALL, m_width - OFFSET_INNER_MID - cover_width, m_meta_height, m_titlebox->getColorBody());
int w = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getRenderWidth(m_metainfo);
int xstart = (m_width - w)/2;
if (xstart < OFFSET_INNER_MID)
xstart = OFFSET_INNER_MID;
g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->RenderString(m_x + xstart, m_y + OFFSET_INNER_SMALL + 2*m_item_height + OFFSET_INNER_SMALL + m_meta_height, m_width - 2*xstart, m_metainfo, COL_MENUHEAD_TEXT);
}
}
@@ -2138,7 +2162,7 @@ void CAudioPlayerGui::updateTimes(const bool force)
if (m_inetmode)
w_total_time = 0;
int x_total_time = m_x + m_width - OFFSET_INNER_MID - w_total_time;
int x_total_time = m_x + m_width - OFFSET_INNER_MID - w_total_time - 2*m_titlebox->getFrameThickness();
// played time offset to align this value on the right side
int o_played_time = std::max(w_faked_time - w_played_time, 0);
int x_faked_time = m_x + m_width - OFFSET_INNER_MID - w_total_time - w_faked_time;
@@ -2147,20 +2171,20 @@ void CAudioPlayerGui::updateTimes(const bool force)
if (updateTotal && !m_inetmode)
{
m_frameBuffer->paintBoxRel(x_total_time, y_times, w_total_time + OFFSET_INNER_MID, m_item_height, COL_MENUHEAD_PLUS_0);
m_frameBuffer->paintBoxRel(x_total_time, y_times, w_total_time + OFFSET_INNER_MID, m_item_height, m_titlebox->getColorBody());
if (m_time_total > 0)
{
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_total_time, y_times + m_item_height, w_total_time, total_time, COL_MENUHEAD_TEXT);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_total_time, y_times + m_item_height, w_total_time, total_time, COL_MENUHEAD_TEXT); //total time
}
}
if (updatePlayed || (m_state == CAudioPlayerGui::PAUSE))
{
m_frameBuffer->paintBoxRel(x_faked_time, y_times, w_faked_time, m_item_height, COL_MENUHEAD_PLUS_0);
m_frameBuffer->paintBoxRel(x_faked_time, y_times, w_faked_time, m_item_height, m_titlebox->getColorBody());
struct timeval tv;
gettimeofday(&tv, NULL);
if ((m_state != CAudioPlayerGui::PAUSE) || (tv.tv_sec & 1))
{
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_played_time, y_times + m_item_height, w_played_time, played_time, COL_MENUHEAD_TEXT);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x_played_time, y_times + m_item_height, w_played_time, played_time, COL_MENUHEAD_TEXT); //elapsed time
}
}
}

View File

@@ -128,6 +128,7 @@ class CAudioPlayerGui : public CMenuTarget
bool m_inetmode;
CComponentsDetailsLine *m_detailsline;
CComponentsInfoBox *m_infobox;
CComponentsShapeSquare *m_titlebox;
SMSKeyInput m_SMSKeyInput;
@@ -176,7 +177,7 @@ class CAudioPlayerGui : public CMenuTarget
/**
* Processes a loaded XML file/data of internet audiostreams or playlists
*/
void scanXmlData(xmlDocPtr answer_parser, const char *nametag, const char *urltag, const char *bitratetag = NULL, bool usechild = false);
void scanXmlData(xmlDocPtr answer_parser, const char *urltag, const char *nametag, const char *bitratetag = NULL, bool usechild = false);
/**
* Reads the icecast directory (XML file) and calls scanXmlData

View File

@@ -123,8 +123,8 @@ void CComponentsFooter::setButtonLabels(const struct button_label_cc * const con
* If already existing some items then subtract those width from footer width.
* ...so we have the possible usable size for button container.
*/
if(!v_cc_items.empty()){ //FIXME: footer container seems always not empty here, so here j initialized with = 1. I dont't know where it comes from! dbt!
for (size_t j= 1; j< size(); j++)
if(!v_cc_items.empty()){
for (size_t j= 0; j< size(); j++)
w_chain -= getCCItem(j)->getWidth();
}

View File

@@ -940,6 +940,8 @@ const time_settings_struct_t timing_setting[SNeutrinoSettings::TIMING_SETTING_CO
#define SCROLLBAR_WIDTH (OFFSET_INNER_MID + 2*OFFSET_INNER_MIN)
#define FRAME_MIN_WIDTH CFrameBuffer::getInstance()->scale2Res(2)
#define DETAILSLINE_WIDTH CFrameBuffer::getInstance()->scale2Res(16)
#define BIGFONT_FACTOR 1.5