diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am
index cb2a5ef11..393a5bf8e 100644
--- a/src/driver/Makefile.am
+++ b/src/driver/Makefile.am
@@ -59,6 +59,7 @@ endif
if BOXTYPE_TRIPLE
libneutrino_driver_a_SOURCES += \
+ fb_accel_td.cpp \
newclock.cpp \
lcdd.cpp
endif
diff --git a/src/driver/fb_accel.h b/src/driver/fb_accel.h
index da7af9e9b..32991598f 100644
--- a/src/driver/fb_accel.h
+++ b/src/driver/fb_accel.h
@@ -150,4 +150,25 @@ class CFbAccelGLFB
fb_pixel_t * getBackBufferPointer() const;
};
+class CFbAccelTD
+ : public CFbAccel
+{
+ private:
+ fb_pixel_t lastcol;
+ void setColor(fb_pixel_t col);
+ fb_pixel_t *backbuffer;
+ public:
+ CFbAccelTD();
+ ~CFbAccelTD();
+ void init(const char * const);
+ int setMode(unsigned int xRes, unsigned int yRes, unsigned int bpp);
+ void paintPixel(int x, int y, const fb_pixel_t col);
+ void paintRect(const int x, const int y, const int dx, const int dy, const fb_pixel_t col);
+ void paintHLineRel(int x, int dx, int y, const fb_pixel_t col) { paintLine(x, y, x + dx, y, col); };
+ void paintVLineRel(int x, int y, int dy, const fb_pixel_t col) { paintLine(x, y, x, y + dy, col); };
+ void paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col);
+ void blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp, uint32_t yp, bool transp);
+ void waitForIdle(const char *func = NULL);
+};
+
#endif
diff --git a/src/driver/fb_accel_cs_hd1.cpp b/src/driver/fb_accel_cs_hd1.cpp
index a85072808..9f5f62527 100644
--- a/src/driver/fb_accel_cs_hd1.cpp
+++ b/src/driver/fb_accel_cs_hd1.cpp
@@ -150,10 +150,6 @@ CFbAccelCSHD1::~CFbAccelCSHD1()
munmap((void *)gxa_base, 0x40000);
if (devmem_fd != -1)
close(devmem_fd);
- if (lfb)
- munmap(lfb, available);
- if (fd > -1)
- close(fd);
}
void CFbAccelCSHD1::setColor(fb_pixel_t col)
@@ -344,7 +340,7 @@ int CFbAccelCSHD1::setMode(unsigned int, unsigned int, unsigned int)
xRes = screeninfo.xres;
yRes = screeninfo.yres;
bpp = screeninfo.bits_per_pixel;
- printf(LOGTAG "%dx%dx%d line length %d. using hd1 graphics accelerator.\n", xRes, yRes, bpp, stride);
+ printf(LOGTAG "%dx%dx%d line length %d. using %s graphics accelerator.\n", xRes, yRes, bpp, stride, _fix.id);
int needmem = stride * yRes * 2;
if (available >= needmem)
{
diff --git a/src/driver/fb_accel_td.cpp b/src/driver/fb_accel_td.cpp
new file mode 100644
index 000000000..7cddcfa3c
--- /dev/null
+++ b/src/driver/fb_accel_td.cpp
@@ -0,0 +1,176 @@
+/*
+ Framebuffer acceleration hardware abstraction functions.
+ The hardware dependent framebuffer acceleration functions for the
+ TripleDragon are represented in this class using DirectFB.
+
+ License: GPL
+
+ (C) 2017 Stefan Seyfried
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+#ifdef HAVE_CONFIG_H
+#include
+#endif
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+
+#define LOGTAG "[fb_accel_td] "
+
+#include
+#include
+extern IDirectFB *dfb;
+extern IDirectFBSurface *dfbdest;
+extern int gfxfd;
+void CFbAccelTD::waitForIdle(const char *)
+{
+#if 0
+ struct timeval ts, te;
+ gettimeofday(&ts, NULL);
+#endif
+ /* does not work: DFBResult r = dfb->WaitForSync(dfb); */
+ ioctl(gfxfd, STB04GFX_ENGINE_SYNC);
+#if 0
+ gettimeofday(&te, NULL);
+ printf("STB04GFX_ENGINE_SYNC took %lld us\n", (te.tv_sec * 1000000LL + te.tv_usec) - (ts.tv_sec * 1000000LL + ts.tv_usec));
+#endif
+}
+
+CFbAccelTD::CFbAccelTD()
+{
+ fb_name = "TripleDragon framebuffer";
+ lastcol = 0xffffffff;
+ lbb = lfb; /* the memory area to draw to... */
+};
+
+CFbAccelTD::~CFbAccelTD()
+{
+ if (lfb)
+ munmap(lfb, available);
+ if (fd > -1)
+ close(fd);
+}
+
+void CFbAccelTD::setColor(fb_pixel_t col)
+{
+ if (col == lastcol)
+ return;
+ char *c = (char *)&col;
+ dfbdest->SetColor(dfbdest, c[1], c[2], c[3], c[0]);
+ lastcol = col;
+}
+
+void CFbAccelTD::paintRect(const int x, const int y, const int dx, const int dy, const fb_pixel_t col)
+{
+ setColor(col);
+ dfbdest->FillRectangle(dfbdest, x, y, dx, dy);
+}
+
+void CFbAccelTD::paintPixel(const int x, const int y, const fb_pixel_t col)
+{
+ setColor(col);
+ dfbdest->DrawLine(dfbdest, x, y, x, y);
+}
+
+void CFbAccelTD::paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col)
+{
+ setColor(col);
+ dfbdest->DrawLine(dfbdest, xa, ya, xb, yb);
+}
+
+void CFbAccelTD::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp, uint32_t yp, bool transp)
+{
+ DFBRectangle src;
+ DFBResult err;
+ IDirectFBSurface *surf;
+ DFBSurfaceDescription dsc;
+
+ src.x = xp;
+ src.y = yp;
+ src.w = width - xp;
+ src.h = height - yp;
+
+ dsc.flags = (DFBSurfaceDescriptionFlags)(DSDESC_CAPS | DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PREALLOCATED);
+ dsc.caps = DSCAPS_NONE;
+ dsc.width = width;
+ dsc.height = height;
+ dsc.preallocated[0].data = fbbuff;
+ dsc.preallocated[0].pitch = width * sizeof(fb_pixel_t);
+ err = dfb->CreateSurface(dfb, &dsc, &surf);
+ /* TODO: maybe we should not die if this fails? */
+ if (err != DFB_OK) {
+ fprintf(stderr, LOGTAG "blit2FB: ");
+ DirectFBErrorFatal("dfb->CreateSurface(dfb, &dsc, &surf)", err);
+ }
+
+ if (transp)
+ {
+ surf->SetSrcColorKey(surf, 0, 0, 0);
+ dfbdest->SetBlittingFlags(dfbdest, DSBLIT_SRC_COLORKEY);
+ }
+ else
+ dfbdest->SetBlittingFlags(dfbdest, DSBLIT_BLEND_ALPHACHANNEL);
+
+ dfbdest->Blit(dfbdest, surf, &src, xoff, yoff);
+ surf->Release(surf);
+ return;
+}
+
+void CFbAccelTD::init(const char *)
+{
+ CFrameBuffer::init();
+ if (lfb == NULL) {
+ printf(LOGTAG "CFrameBuffer::init() failed.\n");
+ return; /* too bad... */
+ }
+ available = fix.smem_len;
+ printf(LOGTAG "%dk video mem\n", available / 1024);
+ memset(lfb, 0, available);
+
+ lbb = lfb; /* the memory area to draw to... */
+ available = fix.smem_len;
+ stride = fix.line_length;
+ xRes = screeninfo.xres;
+ yRes = screeninfo.yres;
+ bpp = screeninfo.bits_per_pixel;
+
+ return;
+}
+
+/* wrong name... */
+int CFbAccelTD::setMode(unsigned int, unsigned int, unsigned int)
+{
+ int needmem = stride * yRes * 2;
+ if (available >= needmem)
+ {
+ backbuffer = lfb + stride / sizeof(fb_pixel_t) * yRes;
+ return 0;
+ }
+ fprintf(stderr, LOGTAG " not enough FB memory (have %d, need %d)\n", available, needmem);
+ backbuffer = lfb; /* will not work well, but avoid crashes */
+ return 0;
+}
diff --git a/src/driver/fb_generic.cpp b/src/driver/fb_generic.cpp
index 39c44e0cd..8f90a29b9 100644
--- a/src/driver/fb_generic.cpp
+++ b/src/driver/fb_generic.cpp
@@ -133,6 +133,9 @@ CFrameBuffer* CFrameBuffer::getInstance()
#endif
#if HAVE_GENERIC_HARDWARE
frameBuffer = new CFbAccelGLFB();
+#endif
+#if HAVE_TRIPLEDRAGON
+ frameBuffer = new CFbAccelTD();
#endif
if (!frameBuffer)
frameBuffer = new CFrameBuffer();
@@ -145,7 +148,7 @@ void CFrameBuffer::init(const char * const fbDevice)
{
int tr = 0xFF;
- fd = open(fbDevice, O_RDWR);
+ fd = open(fbDevice, O_RDWR|O_CLOEXEC);
if (fd<0) {
perror(fbDevice);
@@ -157,17 +160,14 @@ void CFrameBuffer::init(const char * const fbDevice)
goto nolfb;
}
- memmove(&oldscreen, &screeninfo, sizeof(screeninfo));
-
if (ioctl(fd, FBIOGET_FSCREENINFO, &fix)<0) {
perror("FBIOGET_FSCREENINFO");
goto nolfb;
}
available=fix.smem_len;
- printf("[fb_generic] %dk video mem\n", available/1024);
+ printf("[fb_generic] [%s] framebuffer %dk video mem\n", fix.id, available/1024);
lbb = lfb = (fb_pixel_t*)mmap(0, available, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
-
if (!lfb) {
perror("mmap");
goto nolfb;
@@ -199,52 +199,6 @@ void CFrameBuffer::init(const char * const fbDevice)
useBackground(false);
m_transparent = m_transparent_default;
-#if 0
- if ((tty=open("/dev/vc/0", O_RDWR))<0) {
- perror("open (tty)");
- goto nolfb;
- }
-
- struct sigaction act;
-
- memset(&act,0,sizeof(act));
- act.sa_handler = switch_signal;
- sigemptyset(&act.sa_mask);
- sigaction(SIGUSR1,&act,NULL);
- sigaction(SIGUSR2,&act,NULL);
-
- struct vt_mode mode;
-
- if (-1 == ioctl(tty,KDGETMODE, &kd_mode)) {
- perror("ioctl KDGETMODE");
- goto nolfb;
- }
-
- if (-1 == ioctl(tty,VT_GETMODE, &vt_mode)) {
- perror("ioctl VT_GETMODE");
- goto nolfb;
- }
-
- if (-1 == ioctl(tty,VT_GETMODE, &mode)) {
- perror("ioctl VT_GETMODE");
- goto nolfb;
- }
-
- mode.mode = VT_PROCESS;
- mode.waitv = 0;
- mode.relsig = SIGUSR1;
- mode.acqsig = SIGUSR2;
-
- if (-1 == ioctl(tty,VT_SETMODE, &mode)) {
- perror("ioctl VT_SETMODE");
- goto nolfb;
- }
-
- if (-1 == ioctl(tty,KDSETMODE, KD_GRAPHICS)) {
- perror("ioctl KDSETMODE");
- goto nolfb;
- }
-#endif
return;
@@ -284,13 +238,6 @@ CFrameBuffer::~CFrameBuffer()
q_circle = NULL;
}
-#if 0
- if (-1 == ioctl(tty,VT_SETMODE, &vt_mode))
- perror("ioctl VT_SETMODE");
-
- if (available)
- ioctl(fd, FBIOPUT_VSCREENINFO, &oldscreen);
-#endif
if (lfb)
munmap(lfb, available);
@@ -387,31 +334,6 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign
if (!available&&!active)
return -1;
-#if 0
- screeninfo.xres_virtual=screeninfo.xres=nxRes;
- screeninfo.yres_virtual=screeninfo.yres=nyRes;
- screeninfo.height=0;
- screeninfo.width=0;
- screeninfo.xoffset=screeninfo.yoffset=0;
- screeninfo.bits_per_pixel=nbpp;
-
- if (ioctl(fd, FBIOPUT_VSCREENINFO, &screeninfo)<0) {
- perror("FBIOPUT_VSCREENINFO");
- }
-
- if(1) {
- printf("SetMode: %dbits, red %d:%d green %d:%d blue %d:%d transp %d:%d\n",
- screeninfo.bits_per_pixel, screeninfo.red.length, screeninfo.red.offset, screeninfo.green.length, screeninfo.green.offset, screeninfo.blue.length, screeninfo.blue.offset, screeninfo.transp.length, screeninfo.transp.offset);
- }
- if ((screeninfo.xres!=nxRes) && (screeninfo.yres!=nyRes) && (screeninfo.bits_per_pixel!=nbpp))
- {
- printf("SetMode failed: wanted: %dx%dx%d, got %dx%dx%d\n",
- nxRes, nyRes, nbpp,
- screeninfo.xres, screeninfo.yres, screeninfo.bits_per_pixel);
- return -1;
- }
-#endif
-
xRes = screeninfo.xres;
yRes = screeninfo.yres;
bpp = screeninfo.bits_per_pixel;
@@ -1560,33 +1482,6 @@ void CFrameBuffer::RestoreScreen(int x, int y, int dx, int dy, fb_pixel_t * cons
mark(x, y, x + dx, y + dy);
checkFbArea(x, y, dx, dy, false);
}
-#if 0
-//never used
-void CFrameBuffer::switch_signal (int signal)
-{
- CFrameBuffer * thiz = CFrameBuffer::getInstance();
- if (signal == SIGUSR1) {
- if (virtual_fb != NULL)
- delete[] virtual_fb;
- virtual_fb = new uint8_t[thiz->stride * thiz->yRes];
- thiz->active = false;
- if (virtual_fb != NULL)
- memmove(virtual_fb, thiz->lfb, thiz->stride * thiz->yRes);
- ioctl(thiz->tty, VT_RELDISP, 1);
- printf ("release display\n");
- }
- else if (signal == SIGUSR2) {
- ioctl(thiz->tty, VT_RELDISP, VT_ACKACQ);
- thiz->active = true;
- printf ("acquire display\n");
- thiz->paletteSet(NULL);
- if (virtual_fb != NULL)
- memmove(thiz->lfb, virtual_fb, thiz->stride * thiz->yRes);
- else
- memset(thiz->lfb, 0, thiz->stride * thiz->yRes);
- }
-}
-#endif
void CFrameBuffer::Clear()
{
diff --git a/src/driver/fb_generic.h b/src/driver/fb_generic.h
index 892e8b2fd..0506795e0 100644
--- a/src/driver/fb_generic.h
+++ b/src/driver/fb_generic.h
@@ -113,7 +113,7 @@ class CFrameBuffer : public sigc::trackable
std::string backgroundFilename;
bool useBackgroundPaint;
unsigned int xRes, yRes, stride, bpp;
- t_fb_var_screeninfo screeninfo, oldscreen;
+ t_fb_var_screeninfo screeninfo;
fb_cmap cmap;
__u16 red[256], green[256], blue[256], trans[256];
@@ -214,7 +214,7 @@ class CFrameBuffer : public sigc::trackable
inline void paintBox(int xa, int ya, int xb, int yb, const fb_pixel_t col, int radius, int type) { paintBoxRel(xa, ya, xb - xa, yb - ya, col, radius, type); }
void paintBoxFrame(const int x, const int y, const int dx, const int dy, const int px, const fb_pixel_t col, int radius = 0, int type = CORNER_ALL);
- void paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col);
+ virtual void paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col);
inline void paintVLine(int x, int ya, int yb, const fb_pixel_t col) { paintVLineRel(x, ya, yb - ya, col); }
virtual void paintVLineRel(int x, int y, int dy, const fb_pixel_t col);
diff --git a/src/driver/fontrenderer.cpp b/src/driver/fontrenderer.cpp
index 41932301a..8a03cdff4 100644
--- a/src/driver/fontrenderer.cpp
+++ b/src/driver/fontrenderer.cpp
@@ -425,7 +425,13 @@ void Font::RenderString(int x, int y, const int width, const char *text, const f
return;
const bool utf8_encoded = flags & IS_UTF8;
+#if HAVE_TRIPLEDRAGON
+ /* the TD Framebufffer is ARGB; the others are BGRA. The fullbg code does not handle that
+ * the quick workaround is to just disable the fullbg flag */
+ useFullBG = false;
+#else
useFullBG = flags & FULLBG;
+#endif
/*
useFullBg = false
fetch bgcolor from framebuffer, using lower left edge of the font
diff --git a/src/driver/neutrinofonts.cpp b/src/driver/neutrinofonts.cpp
index 2f4a3722c..80b40377e 100644
--- a/src/driver/neutrinofonts.cpp
+++ b/src/driver/neutrinofonts.cpp
@@ -142,7 +142,7 @@ void CNeutrinoFonts::SetupNeutrinoFonts(bool initRenderClass/*=true*/)
if (initRenderClass) {
if (g_fontRenderer != NULL)
delete g_fontRenderer;
- g_fontRenderer = new FBFontRenderClass(72 * g_settings.screen_xres / 100, 72 * g_settings.screen_yres / 100);
+ g_fontRenderer = new FBFontRenderClass(72 * g_settings.font_scaling_x / 100, 72 * g_settings.font_scaling_y / 100);
old_fontDescr.size_offset = fontDescr.size_offset;
old_fontDescr.filename = fontDescr.filename;
diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp
index 27873ddd6..f2b6cfd1f 100644
--- a/src/gui/osd_setup.cpp
+++ b/src/gui/osd_setup.cpp
@@ -276,26 +276,26 @@ int COsdSetup::exec(CMenuTarget* parent, const std::string &actionKey)
return res;
}
else if (actionKey == "font_scaling") {
- int xre = g_settings.screen_xres;
- int yre = g_settings.screen_yres;
+ int fs_x = g_settings.font_scaling_x;
+ int fs_y = g_settings.font_scaling_y;
CMenuWidget fontscale(LOCALE_FONTMENU_HEAD, NEUTRINO_ICON_COLORS, width, MN_WIDGET_ID_OSDSETUP_FONTSCALE);
fontscale.addIntroItems(LOCALE_FONTMENU_SCALING);
- CMenuOptionNumberChooser* mc = new CMenuOptionNumberChooser(LOCALE_FONTMENU_SCALING_X, &g_settings.screen_xres, true, 50, 200, this);
+ CMenuOptionNumberChooser* mc = new CMenuOptionNumberChooser(LOCALE_FONTMENU_SCALING_X, &g_settings.font_scaling_x, true, 50, 200, this);
mc->setNumericInput(true);
mc->setNumberFormat("%d%%");
fontscale.addItem(mc);
- mc = new CMenuOptionNumberChooser(LOCALE_FONTMENU_SCALING_Y, &g_settings.screen_yres, true, 50, 200, this);
+ mc = new CMenuOptionNumberChooser(LOCALE_FONTMENU_SCALING_Y, &g_settings.font_scaling_y, true, 50, 200, this);
mc->setNumericInput(true);
mc->setNumberFormat("%d%%");
fontscale.addItem(mc);
res = fontscale.exec(NULL, "");
- if (xre != g_settings.screen_xres || yre != g_settings.screen_yres) {
- printf("[neutrino] new font scale settings x: %d%% y: %d%%\n", g_settings.screen_xres, g_settings.screen_yres);
+ if (fs_x != g_settings.font_scaling_x || fs_y != g_settings.font_scaling_y) {
+ printf("[neutrino] new font scale settings x: %d%% y: %d%%\n", g_settings.font_scaling_x, g_settings.font_scaling_y);
CNeutrinoApp::getInstance()->SetupFonts(CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT | CNeutrinoFonts::FONTSETUP_NEUTRINO_FONT_INST | CNeutrinoFonts::FONTSETUP_DYN_FONT);
if (CNeutrinoApp::getInstance()->channelList)
CNeutrinoApp::getInstance()->channelList->ResetModules(); //force re init of all modules
diff --git a/src/neutrino.cpp b/src/neutrino.cpp
index aa647f6cb..1f324f57c 100644
--- a/src/neutrino.cpp
+++ b/src/neutrino.cpp
@@ -779,8 +779,6 @@ int CNeutrinoApp::loadSetup(const char * fname)
g_settings.channellist_show_numbers = configfile.getInt32("channellist_show_numbers", 1);
//screen configuration
- g_settings.screen_xres = configfile.getInt32("screen_xres", 105); //NI
- g_settings.screen_yres = configfile.getInt32("screen_yres", 105); //NI
g_settings.screen_StartX_crt = configfile.getInt32( "screen_StartX_crt", DEFAULT_X_START_SD);
g_settings.screen_StartY_crt = configfile.getInt32( "screen_StartY_crt", DEFAULT_Y_START_SD );
g_settings.screen_EndX_crt = configfile.getInt32( "screen_EndX_crt", DEFAULT_X_END_SD);
@@ -796,8 +794,14 @@ int CNeutrinoApp::loadSetup(const char * fname)
g_settings.screen_EndX = g_settings.screen_preset ? g_settings.screen_EndX_lcd : g_settings.screen_EndX_crt;
g_settings.screen_EndY = g_settings.screen_preset ? g_settings.screen_EndY_lcd : g_settings.screen_EndY_crt;
- g_settings.screen_width = configfile.getInt32("screen_width", 0);
- g_settings.screen_height = configfile.getInt32("screen_height", 0);
+ g_settings.screen_width = frameBuffer->getScreenWidth(true);
+ g_settings.screen_height = frameBuffer->getScreenHeight(true);
+
+ // avoid configuration mismatch
+ if (g_settings.screen_EndX > g_settings.screen_width)
+ g_settings.screen_EndX = g_settings.screen_width;
+ if (g_settings.screen_EndY > g_settings.screen_height)
+ g_settings.screen_EndY = g_settings.screen_height;
g_settings.bigFonts = configfile.getInt32("bigFonts", 1); //NI
g_settings.window_size = configfile.getInt32("window_size", 100);
@@ -841,6 +845,9 @@ int CNeutrinoApp::loadSetup(const char * fname)
g_settings.ttx_font_file = configfile.getString( "ttx_font_file", FONTDIR"/DejaVuLGCSansMono-Bold.ttf");
ttx_font_file = g_settings.ttx_font_file.c_str();
+ g_settings.font_scaling_x = configfile.getInt32("font_scaling_x", 105); //NI
+ g_settings.font_scaling_y = configfile.getInt32("font_scaling_y", 105); //NI
+
g_settings.update_dir = configfile.getString("update_dir", "/tmp");
g_settings.update_dir_opkg = configfile.getString("update_dir_opkg", g_settings.update_dir);
@@ -963,17 +970,6 @@ int CNeutrinoApp::loadSetup(const char * fname)
erg = 2;
}
- /* in case FB resolution changed */
- if((g_settings.screen_width && g_settings.screen_width != (int) frameBuffer->getScreenWidth(true))
- || (g_settings.screen_height && g_settings.screen_height != (int) frameBuffer->getScreenHeight(true))) {
- g_settings.screen_StartX = g_settings.screen_preset ? DEFAULT_X_START_HD : DEFAULT_X_START_SD;
- g_settings.screen_StartY = g_settings.screen_preset ? DEFAULT_Y_START_HD : DEFAULT_Y_START_SD;
- g_settings.screen_EndX = g_settings.screen_preset ? DEFAULT_X_END_HD : DEFAULT_X_END_SD;
- g_settings.screen_EndY = g_settings.screen_preset ? DEFAULT_Y_END_HD : DEFAULT_Y_END_SD;
-
- g_settings.screen_width = frameBuffer->getScreenWidth(true);
- g_settings.screen_height = frameBuffer->getScreenHeight(true);
- }
#ifdef BOXMODEL_APOLLO
g_settings.brightness = configfile.getInt32("brightness", 0);
g_settings.contrast = configfile.getInt32("contrast", 0);
@@ -1069,6 +1065,23 @@ void CNeutrinoApp::upgradeSetup(const char * fname)
configfile.deleteKey("progressbar_timescale_yellow");
configfile.deleteKey("progressbar_timescale_invert");
}
+ if (g_settings.version_pseudo < "20170209181001")
+ {
+ //convert screen_x/yres keys to font_scaling_x/y
+
+ g_settings.font_scaling_x = configfile.getInt32("screen_xres", 100);
+ g_settings.font_scaling_y = configfile.getInt32("screen_yres", 100);
+
+ configfile.deleteKey("screen_xres");
+ configfile.deleteKey("screen_yres");
+ }
+ if (g_settings.version_pseudo < "20170209181002")
+ {
+ //remove screen_width/height keys
+
+ configfile.deleteKey("screen_width");
+ configfile.deleteKey("screen_height");
+ }
g_settings.version_pseudo = NEUTRINO_VERSION_PSEUDO;
configfile.setString("version_pseudo", g_settings.version_pseudo);
@@ -1415,8 +1428,6 @@ void CNeutrinoApp::saveSetup(const char * fname)
configfile.setInt32("channellist_show_numbers", g_settings.channellist_show_numbers);
//screen configuration
- configfile.setInt32( "screen_xres", g_settings.screen_xres);
- configfile.setInt32( "screen_yres", g_settings.screen_yres);
configfile.setInt32( "screen_StartX_lcd", g_settings.screen_StartX_lcd );
configfile.setInt32( "screen_StartY_lcd", g_settings.screen_StartY_lcd );
configfile.setInt32( "screen_EndX_lcd", g_settings.screen_EndX_lcd );
@@ -1426,8 +1437,6 @@ void CNeutrinoApp::saveSetup(const char * fname)
configfile.setInt32( "screen_EndX_crt", g_settings.screen_EndX_crt );
configfile.setInt32( "screen_EndY_crt", g_settings.screen_EndY_crt );
configfile.setInt32( "screen_preset", g_settings.screen_preset );
- configfile.setInt32( "screen_width", g_settings.screen_width);
- configfile.setInt32( "screen_height", g_settings.screen_height);
//Software-update
configfile.setInt32 ("softupdate_mode" , g_settings.softupdate_mode );
@@ -1456,6 +1465,9 @@ void CNeutrinoApp::saveSetup(const char * fname)
configfile.setString("font_file", g_settings.font_file);
configfile.setString("ttx_font_file", g_settings.ttx_font_file);
+ configfile.setInt32( "font_scaling_x", g_settings.font_scaling_x);
+ configfile.setInt32( "font_scaling_y", g_settings.font_scaling_y);
+
//parentallock
configfile.setInt32( "parentallock_prompt", g_settings.parentallock_prompt );
configfile.setInt32( "parentallock_lockage", g_settings.parentallock_lockage );
diff --git a/src/system/settings.h b/src/system/settings.h
index a18658c2c..18cadd992 100644
--- a/src/system/settings.h
+++ b/src/system/settings.h
@@ -636,8 +636,6 @@ struct SNeutrinoSettings
int screen_preset;
int screen_width;
int screen_height;
- int screen_xres;
- int screen_yres;
//Software-update
int softupdate_mode;
@@ -800,9 +798,13 @@ struct SNeutrinoSettings
int zap_cycle;
int sms_channel;
int sms_movie;
+
std::string font_file;
std::string ttx_font_file;
+ int font_scaling_x;
+ int font_scaling_y;
+
//NI
int lcd4l_support;
std::string lcd4l_logodir;
diff --git a/version_pseudo.h b/version_pseudo.h
index bdfc25f5d..f72f31607 100644
--- a/version_pseudo.h
+++ b/version_pseudo.h
@@ -1 +1 @@
-#define NEUTRINO_VERSION_PSEUDO "20162912080000"
+#define NEUTRINO_VERSION_PSEUDO "20170209181002"