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"