Merge branch 'ni/tuxbox' into ni/mp/tuxbox

Origin commit data
------------------
Commit: b72cda244d
Author: vanhofen <vanhofen@gmx.de>
Date: 2017-09-14 (Thu, 14 Sep 2017)
This commit is contained in:
vanhofen
2017-09-14 22:02:00 +02:00
17 changed files with 235 additions and 192 deletions

View File

@@ -1,9 +1,9 @@
installdir = $(ICONSDIR) installdir = $(ICONSDIR)
install_DATA = \ install_DATA = \
volumebody.png \ slider_alpha.png \
volumeslider2.png \ slider_blue.png \
volumeslider2alpha.png \ slider_body.png \
volumeslider2blue.png \ slider_green.png \
volumeslider2green.png \ slider_inactive.png \
volumeslider2red.png slider_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

View File

Before

Width:  |  Height:  |  Size: 132 B

After

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

View File

@@ -59,8 +59,8 @@ CComponentsSlider::CComponentsSlider( const int& x_pos, const int& y_pos, const
csl_body_obj = NULL; csl_body_obj = NULL;
csl_slider_obj = NULL; csl_slider_obj = NULL;
csl_body_icon = NEUTRINO_ICON_VOLUMEBODY; csl_body_icon = NEUTRINO_ICON_SLIDER_BODY;
csl_slider_icon =NEUTRINO_ICON_VOLUMESLIDER2; csl_slider_icon =NEUTRINO_ICON_SLIDER_INACTIVE;
initCCSlItems(); initCCSlItems();
initParent(parent); initParent(parent);

View File

@@ -1,32 +1,22 @@
/* /*
Neutrino-GUI - DBoxII-Project Based up Neutrino-GUI - Tuxbox-Project
Copyright (C) 2001 Steffen Hehn 'McClean' Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/
Kommentar:
Diese GUI wurde von Grund auf neu programmiert und sollte nun vom
Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert
auf der Client-Server Idee, diese GUI ist also von der direkten DBox-
Steuerung getrennt. Diese wird dann von Daemons uebernommen.
License: GPL License: GPL
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or
it under the terms of the GNU General Public License as published by modify it under the terms of the GNU General Public
the Free Software Foundation; either version 2 of the License, or License as published by the Free Software Foundation; either
(at your option) any later version. version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
GNU General Public License for more details. General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program. If not, see <http://www.gnu.org/licenses/>.
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
@@ -46,55 +36,67 @@
#include <gui/widget/msgbox.h> #include <gui/widget/msgbox.h>
#include <gui/widget/icons.h> #include <gui/widget/icons.h>
static const char * const icon_names[VALUES] =
#define VALUE_R 0 {
#define VALUE_G 1 NEUTRINO_ICON_SLIDER_RED,
#define VALUE_B 2 NEUTRINO_ICON_SLIDER_GREEN,
#define VALUE_ALPHA 3 NEUTRINO_ICON_SLIDER_BLUE,
NEUTRINO_ICON_SLIDER_ALPHA
static const char * const iconnames[4] = {
NEUTRINO_ICON_VOLUMESLIDER2RED,
NEUTRINO_ICON_VOLUMESLIDER2GREEN,
NEUTRINO_ICON_VOLUMESLIDER2BLUE,
NEUTRINO_ICON_VOLUMESLIDER2ALPHA
}; };
static const neutrino_locale_t colorchooser_names[4] = static const neutrino_locale_t colorchooser_names[VALUES] =
{ {
LOCALE_COLORCHOOSER_RED , LOCALE_COLORCHOOSER_RED,
LOCALE_COLORCHOOSER_GREEN, LOCALE_COLORCHOOSER_GREEN,
LOCALE_COLORCHOOSER_BLUE , LOCALE_COLORCHOOSER_BLUE,
LOCALE_COLORCHOOSER_ALPHA LOCALE_COLORCHOOSER_ALPHA
}; };
CColorChooser::CColorChooser(const neutrino_locale_t Name, unsigned char *R, unsigned char *G, unsigned char *B, unsigned char* Alpha, CChangeObserver* Observer) // UTF-8 CColorChooser::CColorChooser(const neutrino_locale_t Name, unsigned char *R, unsigned char *G, unsigned char *B, unsigned char* A, CChangeObserver* Observer)
{ {
frameBuffer = CFrameBuffer::getInstance(); frameBuffer = CFrameBuffer::getInstance();
hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); header_height = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight();
mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); item_height = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight();
font_info = SNeutrinoSettings::FONT_TYPE_MENU;
observer = Observer; observer = Observer;
name = Name; name = Name;
//calculate max width of LOCALS // calculate max width of locals
offset = 0; text_width = 0;
for (int i = 0; i < 4; i++) { for (int i = 0; i < VALUES; i++)
int tmpoffset = g_Font[font_info]->getRenderWidth(g_Locale->getText(colorchooser_names[i])); {
if (tmpoffset > offset) { int tmp_text_width = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(colorchooser_names[i]));
offset = tmpoffset; if (tmp_text_width > text_width)
} text_width = tmp_text_width;
} }
width = w_max((offset + (162 + mheight*4 + 10)), 0); // assuming all sliders have same dimensions
height = h_max(hheight+ mheight* 4, 0); int dummy;
frameBuffer->getIconSize(NEUTRINO_ICON_SLIDER_ALPHA, &slider_width, &dummy);
x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth()-width) >> 1); bar_width = frameBuffer->scale2Res(150);
y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight()-height)>>1); /*
We have a half slider_width before and after the bar
to get the middle of the slider at the point of choise
*/
bar_offset = slider_width/2;
bar_full = bar_width + slider_width;
value[VALUE_R] = R; preview_w = VALUES*item_height;
value[VALUE_G] = G; preview_h = VALUES*item_height;
value[VALUE_B] = B;
value[VALUE_ALPHA] = Alpha; width = w_max((text_width + bar_full + preview_w + 4*OFFSET_INNER_MID), 0);
height = h_max((header_height + VALUES*item_height + 2*OFFSET_INNER_SMALL), 0);
x = getScreenStartX(width);
y = getScreenStartY(height);
preview_x = x + text_width + bar_full + 3*OFFSET_INNER_MID;
preview_y = y + header_height + OFFSET_INNER_SMALL;
value[VALUE_R] = R;
value[VALUE_G] = G;
value[VALUE_B] = B;
value[VALUE_A] = A;
chooser_gradient = gradient_none; chooser_gradient = gradient_none;
} }
@@ -102,13 +104,10 @@ CColorChooser::CColorChooser(const neutrino_locale_t Name, unsigned char *R, uns
void CColorChooser::setColor() void CColorChooser::setColor()
{ {
fb_pixel_t col = getColor(); fb_pixel_t col = getColor();
int x_col = x+offset+160;
int y_col = y+hheight+5;
int w_col = mheight*4;
int h_col = mheight*4-10;
if ((g_settings.theme.menu_Head_gradient) && ((chooser_gradient == gradient_head_body) || (chooser_gradient == gradient_head_text))) { if ((g_settings.theme.menu_Head_gradient) && ((chooser_gradient == gradient_head_body) || (chooser_gradient == gradient_head_text)))
CComponentsHeader header(x_col, y_col+((h_col-hheight)/2), w_col, hheight, "Head"); {
CComponentsHeader header(preview_x, preview_y+((preview_h-header_height)/2), preview_w, header_height, "Head");
if (chooser_gradient == gradient_head_body) if (chooser_gradient == gradient_head_body)
header.setColorBody(col); header.setColorBody(col);
else if (chooser_gradient == gradient_head_text) else if (chooser_gradient == gradient_head_text)
@@ -116,15 +115,20 @@ void CColorChooser::setColor()
header.paint(CC_SAVE_SCREEN_NO); header.paint(CC_SAVE_SCREEN_NO);
} }
else else
frameBuffer->paintBoxRel(x_col+2, y_col+2, w_col-4 , h_col-4, col); {
CComponentsShapeSquare preview(preview_x, preview_y, preview_w, preview_h, NULL, false, COL_FRAME_PLUS_0, col);
preview.setFrameThickness(1);
preview.setCorner(RADIUS_SMALL);
preview.paint(false);
}
} }
fb_pixel_t CColorChooser::getColor() fb_pixel_t CColorChooser::getColor()
{ {
int color = convertSetupColor2RGB(*(value[VALUE_R]), *(value[VALUE_G]), *(value[VALUE_B])); int color = convertSetupColor2RGB(*(value[VALUE_R]), *(value[VALUE_G]), *(value[VALUE_B]));
int tAlpha = (value[VALUE_ALPHA]) ? (convertSetupAlpha2Alpha(*(value[VALUE_ALPHA]))) : 0xFF; int alpha = (value[VALUE_A]) ? (convertSetupAlpha2Alpha(*(value[VALUE_A]))) : 0xFF;
return (((tAlpha << 24) & 0xFF000000) | color); return (((alpha << 24) & 0xFF000000) | color);
} }
int CColorChooser::exec(CMenuTarget* parent, const std::string &) int CColorChooser::exec(CMenuTarget* parent, const std::string &)
@@ -136,91 +140,94 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &)
if (parent) if (parent)
parent->hide(); parent->hide();
unsigned char r_alt= *value[VALUE_R]; unsigned char r_alt = *value[VALUE_R];
unsigned char g_alt= *value[VALUE_G]; unsigned char g_alt = *value[VALUE_G];
unsigned char b_alt= *value[VALUE_B]; unsigned char b_alt = *value[VALUE_B];
unsigned char a_null = 0; unsigned char a_null = 0;
unsigned char a_alt = (value[VALUE_ALPHA]) ? (*(value[VALUE_ALPHA])) : a_null; unsigned char a_alt = (value[VALUE_A]) ? (*(value[VALUE_A])) : a_null;
paint(); paint();
setColor(); setColor();
int selected = 0; int selected = 0;
uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]);
::TIMING_MENU]);
bool loop=true; bool loop=true;
while (loop) { while (loop) {
g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd, true); g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd, true);
if ( msg <= CRCInput::RC_MaxRC ) if ( msg <= CRCInput::RC_MaxRC )
timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]);
::TIMING_MENU]);
int val = (*value[selected]); int val = (*value[selected]);
switch ( msg ) { switch ( msg ) {
case CRCInput::RC_down: case CRCInput::RC_down:
{
if (selected < ((value[VALUE_A]) ? 3 : 2))
{ {
if (selected < ((value[VALUE_ALPHA]) ? 3 : 2)) paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], false);
{ selected++;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], false); paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
selected++;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
} else {
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], false);
selected = 0;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
}
break;
} }
else
{
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], false);
selected = 0;
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
}
break;
}
case CRCInput::RC_up: case CRCInput::RC_up:
{
if (selected > 0)
{ {
if (selected > 0) paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], false);
{ selected--;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], false); paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
selected--;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
} else {
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], false);
selected = ((value[VALUE_ALPHA]) ? 3 : 2);
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true);
}
break;
} }
else
{
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], false);
selected = ((value[VALUE_A]) ? 3 : 2);
paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
}
break;
}
case CRCInput::RC_right: case CRCInput::RC_right:
{
if (val < 100)
{ {
if (val < 100) if (val < 98)
{ val += 2;
if (val < 98) else
val += 2; val = 100;
else (*value[selected]) = (uint8_t)val;
val = 100;
(*value[selected]) = (uint8_t)val;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true); paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
setColor(); setColor();
}
break;
} }
break;
}
case CRCInput::RC_left: case CRCInput::RC_left:
{
if (val > 0)
{ {
if (val > 0) if (val > 2)
{ val -= 2;
if (val > 2) else
val -= 2; val = 0;
else (*value[selected]) = (uint8_t)val;
val = 0;
(*value[selected]) = (uint8_t)val;
paintSlider(x + 10, y + hheight + mheight * selected, value[selected], colorchooser_names[selected], iconnames[selected], true); paintSlider(x, y + header_height + OFFSET_INNER_SMALL + item_height * selected, value[selected], colorchooser_names[selected], icon_names[selected], true);
setColor(); setColor();
}
break;
} }
break;
}
case CRCInput::RC_home: case CRCInput::RC_home:
if (((*value[VALUE_R] != r_alt) || (*value[VALUE_G] != g_alt) || (*value[VALUE_B] != b_alt) || ((value[VALUE_ALPHA]) && (*(value[VALUE_ALPHA]) != a_alt))) && {
if (((*value[VALUE_R] != r_alt) || (*value[VALUE_G] != g_alt) || (*value[VALUE_B] != b_alt) || ((value[VALUE_A]) && (*(value[VALUE_A]) != a_alt))) &&
(ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel)) (ShowMsg(name, LOCALE_MESSAGEBOX_DISCARD, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel))
break; break;
@@ -228,15 +235,19 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &)
*value[VALUE_R] = r_alt; *value[VALUE_R] = r_alt;
*value[VALUE_G] = g_alt; *value[VALUE_G] = g_alt;
*value[VALUE_B] = b_alt; *value[VALUE_B] = b_alt;
if (value[VALUE_ALPHA]) if (value[VALUE_A])
*value[VALUE_ALPHA] = a_alt; *value[VALUE_A] = a_alt;
loop = false; loop = false;
break; break;
}
case CRCInput::RC_timeout: case CRCInput::RC_timeout:
case CRCInput::RC_ok: case CRCInput::RC_ok:
{
loop = false; loop = false;
break; break;
}
default: default:
{
if (CNeutrinoApp::getInstance()->listModeKey(msg)) if (CNeutrinoApp::getInstance()->listModeKey(msg))
{ {
break; break;
@@ -246,12 +257,13 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &)
loop = false; loop = false;
res = menu_return::RETURN_EXIT_ALL; res = menu_return::RETURN_EXIT_ALL;
} }
}
} }
} }
hide(); hide();
if(observer) if (observer)
observer->changeNotify(name, NULL); observer->changeNotify(name, NULL);
return res; return res;
@@ -259,33 +271,37 @@ int CColorChooser::exec(CMenuTarget* parent, const std::string &)
void CColorChooser::hide() void CColorChooser::hide()
{ {
frameBuffer->paintBackgroundBoxRel(x,y, width,height); frameBuffer->paintBackgroundBoxRel(x, y, width, height);
} }
void CColorChooser::paint() void CColorChooser::paint()
{ {
CComponentsHeader header(x, y, width, hheight, g_Locale->getText(name)); CComponentsHeader header(x, y, width, header_height, g_Locale->getText(name));
header.enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT);
header.paint(CC_SAVE_SCREEN_NO); header.paint(CC_SAVE_SCREEN_NO);
frameBuffer->paintBoxRel(x,y+hheight, width,height-hheight, COL_MENUCONTENT_PLUS_0, RADIUS_MID, CORNER_BOTTOM);//round PaintBoxRel(x, y + header_height, width, height - header_height, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM, CC_SHADOW_ON);
for (int i = 0; i < 4; i++) for (int i = 0; i < VALUES; i++)
paintSlider(x + 10, y + hheight + mheight * i, value[i], colorchooser_names[i], iconnames[i], (i == 0)); paintSlider(x, y + header_height + OFFSET_INNER_SMALL + i*item_height, value[i], colorchooser_names[i], icon_names[i], (i == 0));
if ((!g_settings.theme.menu_Head_gradient) || ((chooser_gradient != gradient_head_body) && (chooser_gradient != gradient_head_text))) {
//color preview
frameBuffer->paintBoxRel(x+offset+160,y+hheight+5, mheight*4, mheight*4-10, COL_MENUHEAD_PLUS_0);
frameBuffer->paintBoxRel(x+offset+162,y+hheight+2+5, mheight*4-4 ,mheight*4-4-10, 254);
}
} }
void CColorChooser::paintSlider(int px, int py, unsigned char *spos, const neutrino_locale_t text, const char * const iconname, const bool selected) void CColorChooser::paintSlider(int px, int py, unsigned char *spos, const neutrino_locale_t text, const char * const iconname, const bool selected)
{ {
if (!spos) if (!spos)
return; return;
frameBuffer->paintBoxRel(px+offset+10,py,120,mheight, COL_MENUCONTENT_PLUS_0);
frameBuffer->paintIcon(NEUTRINO_ICON_VOLUMEBODY,px+offset+10,py+2+mheight/4);
frameBuffer->paintIcon(selected ? iconname : NEUTRINO_ICON_VOLUMESLIDER2,px+offset+13+(*spos),py+mheight/4);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px,py+mheight, width, g_Locale->getText(text), COL_MENUCONTENT_TEXT); // clear area
frameBuffer->paintBoxRel(px + text_width + 2*OFFSET_INNER_MID, py, bar_full, item_height, COL_MENUCONTENT_PLUS_0);
// paint bar
/*
NEUTRINO_ICON_SLIDER_BODY should be scaled to bar_width.
So long we paint a simple frame. This is more save on higher resolutions.
*/
//frameBuffer->paintIcon(NEUTRINO_ICON_SLIDER_BODY, px + text_width + 2*OFFSET_INNER_MID + bar_offset, py, item_height);
frameBuffer->paintBoxFrame(px + text_width + 2*OFFSET_INNER_MID + bar_offset, py + item_height/3, bar_width, item_height/3, 1, COL_FRAME_PLUS_0);
// paint slider
frameBuffer->paintIcon(selected ? iconname : NEUTRINO_ICON_SLIDER_INACTIVE, px + text_width + 2*OFFSET_INNER_MID + ((*spos)*bar_width / 100), py, item_height);
g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(px + OFFSET_INNER_MID, py + item_height, text_width, g_Locale->getText(text), COL_MENUCONTENT_TEXT);
} }

View File

@@ -1,32 +1,22 @@
/* /*
Neutrino-GUI - DBoxII-Project Based up Neutrino-GUI - Tuxbox-Project
Copyright (C) 2001 Steffen Hehn 'McClean' Copyright (C) 2001 Steffen Hehn 'McClean'
Homepage: http://dbox.cyberphoria.org/
Kommentar:
Diese GUI wurde von Grund auf neu programmiert und sollte nun vom
Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert
auf der Client-Server Idee, diese GUI ist also von der direkten DBox-
Steuerung getrennt. Diese wird dann von Daemons uebernommen.
License: GPL License: GPL
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or
it under the terms of the GNU General Public License as published by modify it under the terms of the GNU General Public
the Free Software Foundation; either version 2 of the License, or License as published by the Free Software Foundation; either
(at your option) any later version. version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
GNU General Public License for more details. General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program. If not, see <http://www.gnu.org/licenses/>.
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
@@ -38,21 +28,40 @@
#include <string> #include <string>
enum {
VALUE_R = 0, // red
VALUE_G = 1, // green
VALUE_B = 2, // blue
VALUE_A = 3, // alpha
VALUES
};
class CFrameBuffer; class CFrameBuffer;
class CColorChooser : public CMenuTarget class CColorChooser : public CMenuTarget
{ {
private: private:
CFrameBuffer *frameBuffer; CFrameBuffer *frameBuffer;
int x; int x;
int y; int y;
int width; int width;
int height; int height;
int hheight,mheight; // head/menu font height int header_height;
int offset; int item_height;
int font_info; int text_width;
int bar_width;
int bar_offset;
int bar_full;
int slider_width;
int slider_step;
int preview_x;
int preview_y;
int preview_w;
int preview_h;
int chooser_gradient; int chooser_gradient;
unsigned char * value[4]; // r, g, b, alpha unsigned char * value[VALUES];
neutrino_locale_t name; neutrino_locale_t name;
@@ -63,8 +72,7 @@ class CColorChooser : public CMenuTarget
void paintSlider(int x, int y, unsigned char *spos, const neutrino_locale_t text, const char * const iconname, const bool selected); void paintSlider(int x, int y, unsigned char *spos, const neutrino_locale_t text, const char * const iconname, const bool selected);
public: public:
CColorChooser(const neutrino_locale_t Name, unsigned char *R, unsigned char *G, unsigned char *B, unsigned char* A, CChangeObserver* Observer = NULL);
CColorChooser(const neutrino_locale_t Name, unsigned char *R, unsigned char *G, unsigned char *B, unsigned char* Alpha, CChangeObserver* Observer = NULL); // UTF-8
void hide(); void hide();
int exec(CMenuTarget* parent, const std::string & actionKey); int exec(CMenuTarget* parent, const std::string & actionKey);
@@ -78,6 +86,4 @@ class CColorChooser : public CMenuTarget
void setGradient(int gradient = gradient_none) { chooser_gradient = gradient; }; void setGradient(int gradient = gradient_none) { chooser_gradient = gradient; };
}; };
#endif #endif

View File

@@ -131,12 +131,6 @@
#define NEUTRINO_ICON_UPDATE "softupdate" #define NEUTRINO_ICON_UPDATE "softupdate"
#define NEUTRINO_ICON_UPNP "upnp" #define NEUTRINO_ICON_UPNP "upnp"
#define NEUTRINO_ICON_VIDEO "video" #define NEUTRINO_ICON_VIDEO "video"
#define NEUTRINO_ICON_VOLUMEBODY "volumebody"
#define NEUTRINO_ICON_VOLUMESLIDER2 "volumeslider2"
#define NEUTRINO_ICON_VOLUMESLIDER2ALPHA "volumeslider2alpha"
#define NEUTRINO_ICON_VOLUMESLIDER2BLUE "volumeslider2blue"
#define NEUTRINO_ICON_VOLUMESLIDER2GREEN "volumeslider2green"
#define NEUTRINO_ICON_VOLUMESLIDER2RED "volumeslider2red"
#define NEUTRINO_ICON_VTXT "vtxt" #define NEUTRINO_ICON_VTXT "vtxt"
#define NEUTRINO_ICON_VTXT_GREY "vtxt_gray" #define NEUTRINO_ICON_VTXT_GREY "vtxt_gray"
#define NEUTRINO_ICON_PARTITION "partition" #define NEUTRINO_ICON_PARTITION "partition"
@@ -187,6 +181,13 @@
#define DUMMY_ICON "dummy" #define DUMMY_ICON "dummy"
/* sliders */
#define NEUTRINO_ICON_SLIDER_BODY "slider_body"
#define NEUTRINO_ICON_SLIDER_INACTIVE "slider_inactive"
#define NEUTRINO_ICON_SLIDER_RED "slider_red"
#define NEUTRINO_ICON_SLIDER_GREEN "slider_green"
#define NEUTRINO_ICON_SLIDER_BLUE "slider_blue"
#define NEUTRINO_ICON_SLIDER_ALPHA "slider_alpha"
#define NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE "mute_zap_green" #define NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE "mute_zap_green"
#define NEUTRINO_ICON_BUTTON_MUTE_ZAP_INACTIVE "mute_zap_gray" #define NEUTRINO_ICON_BUTTON_MUTE_ZAP_INACTIVE "mute_zap_gray"

View File

@@ -304,25 +304,45 @@ void CMenuItem::prepareItem(const bool select_mode, const int &item_height)
void CMenuItem::paintItemSlider( const bool select_mode, const int &item_height, const int &optionvalue, const int &factor, const char * left_text, const char * right_text) void CMenuItem::paintItemSlider( const bool select_mode, const int &item_height, const int &optionvalue, const int &factor, const char * left_text, const char * right_text)
{ {
CFrameBuffer *frameBuffer = CFrameBuffer::getInstance(); CFrameBuffer *frameBuffer = CFrameBuffer::getInstance();
int slider_lenght = 0, h = 0;
frameBuffer->getIconSize(NEUTRINO_ICON_VOLUMEBODY, &slider_lenght, &h);
if(slider_lenght == 0 || factor < optionvalue )
return;
int stringwidth = 0;
if (right_text != NULL) {
stringwidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("U999");
}
int stringwidth2 = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(left_text);
int maxspace = dx - stringwidth - icon_frame_w - stringwidth2 - OFFSET_INNER_MID; // assuming all sliders have same dimensions
if(maxspace < slider_lenght) int slider_width, dummy;
frameBuffer->getIconSize(NEUTRINO_ICON_SLIDER_ALPHA, &slider_width, &dummy);
int bar_width = frameBuffer->scale2Res(100);
/*
We have a half slider_width before and after the bar
to get the middle of the slider at the point of choise
*/
int bar_offset = slider_width/2;
int bar_full = bar_width + slider_width;
// avoid division by zero
if (factor < optionvalue || factor < 1)
return;
int right_needed = 0;
if (right_text != NULL)
{
right_needed = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("U999");
}
int left_needed = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(left_text);
int space = dx - right_needed - icon_frame_w - left_needed - OFFSET_INNER_MID;
if (space < bar_full)
return ; return ;
int stringstartposOption = x + dx - stringwidth - slider_lenght; int bar_x = x + dx - right_needed - bar_full;
// FIXME: negative optionvalues falsifies the slider on the right side
int optionV = (optionvalue < 0) ? 0 : optionvalue; int optionV = (optionvalue < 0) ? 0 : optionvalue;
frameBuffer->paintBoxRel(stringstartposOption, y, slider_lenght, item_height, item_bgcolor);
frameBuffer->paintIcon(NEUTRINO_ICON_VOLUMEBODY, stringstartposOption, y+2+item_height/4); // clear area
frameBuffer->paintIcon(select_mode ? NEUTRINO_ICON_VOLUMESLIDER2BLUE : NEUTRINO_ICON_VOLUMESLIDER2, (stringstartposOption + (optionV * 100 / factor)), y+item_height/4); frameBuffer->paintBoxRel(bar_x, y, bar_full, item_height, item_bgcolor);
// paint bar
frameBuffer->paintBoxFrame(bar_x + bar_offset, y + item_height/3, bar_width, item_height/3, 1, COL_MENUCONTENT_TEXT);
// paint slider
frameBuffer->paintIcon(select_mode ? NEUTRINO_ICON_SLIDER_ALPHA : NEUTRINO_ICON_SLIDER_INACTIVE, bar_x + (optionV*bar_width / factor), y, item_height);
} }
void CMenuItem::paintItemButton(const bool select_mode, int item_height, const char * const icon_Name) void CMenuItem::paintItemButton(const bool select_mode, int item_height, const char * const icon_Name)