Add slider for fullscreen ratio
This commit is contained in:
parent
996ac3dab2
commit
7773c9ccca
4 changed files with 115 additions and 43 deletions
|
@ -397,6 +397,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
|
||||||
|
|
||||||
#ifdef RASPBERRY
|
#ifdef RASPBERRY
|
||||||
cfgfile_write (f, _T("gfx_correct_aspect"), _T("%d"), p->gfx_correct_aspect);
|
cfgfile_write (f, _T("gfx_correct_aspect"), _T("%d"), p->gfx_correct_aspect);
|
||||||
|
cfgfile_write (f, _T("gfx_fullscreen_ratio"), _T("%d"), p->gfx_fullscreen_ratio);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
cfgfile_write_bool (f, _T("immediate_blits"), p->immediate_blits);
|
cfgfile_write_bool (f, _T("immediate_blits"), p->immediate_blits);
|
||||||
|
@ -704,6 +705,9 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value)
|
||||||
#ifdef RASPBERRY
|
#ifdef RASPBERRY
|
||||||
if (cfgfile_intval (option, value, "gfx_correct_aspect", &p->gfx_correct_aspect, 1))
|
if (cfgfile_intval (option, value, "gfx_correct_aspect", &p->gfx_correct_aspect, 1))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
if (cfgfile_intval (option, value, "gfx_fullscreen_ratio", &p->gfx_fullscreen_ratio, 1))
|
||||||
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (cfgfile_string (option, value, _T("config_info"), p->info, sizeof p->info / sizeof (TCHAR))
|
if (cfgfile_string (option, value, _T("config_info"), p->info, sizeof p->info / sizeof (TCHAR))
|
||||||
|
@ -1757,6 +1761,7 @@ void default_prefs (struct uae_prefs *p, int type)
|
||||||
p->gfx_resolution = RES_LORES;
|
p->gfx_resolution = RES_LORES;
|
||||||
#ifdef RASPBERRY
|
#ifdef RASPBERRY
|
||||||
p->gfx_correct_aspect = 1;
|
p->gfx_correct_aspect = 1;
|
||||||
|
p->gfx_fullscreen_ratio = 100;
|
||||||
#endif
|
#endif
|
||||||
p->immediate_blits = 0;
|
p->immediate_blits = 0;
|
||||||
p->chipset_refreshrate = 50;
|
p->chipset_refreshrate = 50;
|
||||||
|
|
|
@ -89,7 +89,8 @@ struct uae_prefs {
|
||||||
int gfx_resolution;
|
int gfx_resolution;
|
||||||
|
|
||||||
#ifdef RASPBERRY
|
#ifdef RASPBERRY
|
||||||
int gfx_correct_aspect;
|
int gfx_correct_aspect;
|
||||||
|
int gfx_fullscreen_ratio;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool immediate_blits;
|
bool immediate_blits;
|
||||||
|
|
|
@ -20,6 +20,10 @@
|
||||||
|
|
||||||
const int amigawidth_values[] = { 320, 352, 384, 640, 704, 768 };
|
const int amigawidth_values[] = { 320, 352, 384, 640, 704, 768 };
|
||||||
const int amigaheight_values[] = { 200, 216, 240, 256, 262, 270 };
|
const int amigaheight_values[] = { 200, 216, 240, 256, 262, 270 };
|
||||||
|
#ifdef RASPBERRY
|
||||||
|
const int FullscreenRatio[] = { 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
|
||||||
|
90, 91, 92, 93, 94, 95, 96, 97 ,98, 99 ,100 };
|
||||||
|
#endif
|
||||||
|
|
||||||
static gcn::Window *grpAmigaScreen;
|
static gcn::Window *grpAmigaScreen;
|
||||||
static gcn::Label* lblAmigaWidth;
|
static gcn::Label* lblAmigaWidth;
|
||||||
|
@ -32,6 +36,11 @@ static gcn::Label* lblVertPos;
|
||||||
static gcn::Label* lblVertPosInfo;
|
static gcn::Label* lblVertPosInfo;
|
||||||
static gcn::Slider* sldVertPos;
|
static gcn::Slider* sldVertPos;
|
||||||
static gcn::UaeCheckBox* chkFrameskip;
|
static gcn::UaeCheckBox* chkFrameskip;
|
||||||
|
#ifdef RASPBERRY
|
||||||
|
static gcn::Label* lblFSRatio;
|
||||||
|
static gcn::Label* lblFSRatioInfo;
|
||||||
|
static gcn::Slider* sldFSRatio;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
class AmigaScreenActionListener : public gcn::ActionListener
|
class AmigaScreenActionListener : public gcn::ActionListener
|
||||||
|
@ -67,6 +76,16 @@ class AmigaScreenActionListener : public gcn::ActionListener
|
||||||
{
|
{
|
||||||
changed_prefs.gfx_framerate = chkFrameskip->isSelected() ? 1 : 0;
|
changed_prefs.gfx_framerate = chkFrameskip->isSelected() ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
#ifdef RASPBERRY
|
||||||
|
else if (actionEvent.getSource() == sldFSRatio)
|
||||||
|
{
|
||||||
|
if(changed_prefs.gfx_fullscreen_ratio != FullscreenRatio[(int)(sldFSRatio->getValue())])
|
||||||
|
{
|
||||||
|
changed_prefs.gfx_fullscreen_ratio = FullscreenRatio[(int)(sldFSRatio->getValue())];
|
||||||
|
RefreshPanelDisplay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
AmigaScreenActionListener* amigaScreenActionListener;
|
AmigaScreenActionListener* amigaScreenActionListener;
|
||||||
|
@ -76,64 +95,87 @@ void InitPanelDisplay(const struct _ConfigCategory& category)
|
||||||
{
|
{
|
||||||
amigaScreenActionListener = new AmigaScreenActionListener();
|
amigaScreenActionListener = new AmigaScreenActionListener();
|
||||||
|
|
||||||
lblAmigaWidth = new gcn::Label("Width:");
|
lblAmigaWidth = new gcn::Label("Width:");
|
||||||
lblAmigaWidth->setSize(80, LABEL_HEIGHT);
|
lblAmigaWidth->setSize(150, LABEL_HEIGHT);
|
||||||
lblAmigaWidth->setAlignment(gcn::Graphics::RIGHT);
|
lblAmigaWidth->setAlignment(gcn::Graphics::RIGHT);
|
||||||
sldAmigaWidth = new gcn::Slider(0, 5);
|
sldAmigaWidth = new gcn::Slider(0, 5);
|
||||||
sldAmigaWidth->setSize(160, SLIDER_HEIGHT);
|
sldAmigaWidth->setSize(160, SLIDER_HEIGHT);
|
||||||
sldAmigaWidth->setBaseColor(gui_baseCol);
|
sldAmigaWidth->setBaseColor(gui_baseCol);
|
||||||
sldAmigaWidth->setMarkerLength(20);
|
sldAmigaWidth->setMarkerLength(20);
|
||||||
sldAmigaWidth->setStepLength(1);
|
sldAmigaWidth->setStepLength(1);
|
||||||
sldAmigaWidth->setId("sldWidth");
|
sldAmigaWidth->setId("sldWidth");
|
||||||
sldAmigaWidth->addActionListener(amigaScreenActionListener);
|
sldAmigaWidth->addActionListener(amigaScreenActionListener);
|
||||||
lblAmigaWidthInfo = new gcn::Label("320");
|
lblAmigaWidthInfo = new gcn::Label("320");
|
||||||
|
|
||||||
lblAmigaHeight = new gcn::Label("Height:");
|
lblAmigaHeight = new gcn::Label("Height:");
|
||||||
lblAmigaHeight->setSize(80, LABEL_HEIGHT);
|
lblAmigaHeight->setSize(150, LABEL_HEIGHT);
|
||||||
lblAmigaHeight->setAlignment(gcn::Graphics::RIGHT);
|
lblAmigaHeight->setAlignment(gcn::Graphics::RIGHT);
|
||||||
sldAmigaHeight = new gcn::Slider(0, 5);
|
sldAmigaHeight = new gcn::Slider(0, 5);
|
||||||
sldAmigaHeight->setSize(160, SLIDER_HEIGHT);
|
sldAmigaHeight->setSize(160, SLIDER_HEIGHT);
|
||||||
sldAmigaHeight->setBaseColor(gui_baseCol);
|
sldAmigaHeight->setBaseColor(gui_baseCol);
|
||||||
sldAmigaHeight->setMarkerLength(20);
|
sldAmigaHeight->setMarkerLength(20);
|
||||||
sldAmigaHeight->setStepLength(1);
|
sldAmigaHeight->setStepLength(1);
|
||||||
sldAmigaHeight->setId("sldHeight");
|
sldAmigaHeight->setId("sldHeight");
|
||||||
sldAmigaHeight->addActionListener(amigaScreenActionListener);
|
sldAmigaHeight->addActionListener(amigaScreenActionListener);
|
||||||
lblAmigaHeightInfo = new gcn::Label("200");
|
lblAmigaHeightInfo = new gcn::Label("200");
|
||||||
|
|
||||||
lblVertPos = new gcn::Label("Vert. offset:");
|
lblVertPos = new gcn::Label("Vert. offset:");
|
||||||
lblVertPos->setSize(80, LABEL_HEIGHT);
|
lblVertPos->setSize(150, LABEL_HEIGHT);
|
||||||
lblVertPos->setAlignment(gcn::Graphics::RIGHT);
|
lblVertPos->setAlignment(gcn::Graphics::RIGHT);
|
||||||
sldVertPos = new gcn::Slider(-16, 16);
|
sldVertPos = new gcn::Slider(-16, 16);
|
||||||
sldVertPos->setSize(160, SLIDER_HEIGHT);
|
sldVertPos->setSize(160, SLIDER_HEIGHT);
|
||||||
sldVertPos->setBaseColor(gui_baseCol);
|
sldVertPos->setBaseColor(gui_baseCol);
|
||||||
sldVertPos->setMarkerLength(20);
|
sldVertPos->setMarkerLength(20);
|
||||||
sldVertPos->setStepLength(1);
|
sldVertPos->setStepLength(1);
|
||||||
sldVertPos->setId("sldVertPos");
|
sldVertPos->setId("sldVertPos");
|
||||||
sldVertPos->addActionListener(amigaScreenActionListener);
|
sldVertPos->addActionListener(amigaScreenActionListener);
|
||||||
lblVertPosInfo = new gcn::Label("000");
|
lblVertPosInfo = new gcn::Label("000");
|
||||||
|
|
||||||
chkFrameskip = new gcn::UaeCheckBox("Frameskip");
|
|
||||||
|
#ifdef RASPBERRY
|
||||||
|
lblFSRatio = new gcn::Label("Fullscreen Ratio:");
|
||||||
|
lblFSRatio->setSize(150, LABEL_HEIGHT);
|
||||||
|
lblFSRatio->setAlignment(gcn::Graphics::RIGHT);
|
||||||
|
sldFSRatio = new gcn::Slider(0, 20);
|
||||||
|
sldFSRatio->setSize(160, SLIDER_HEIGHT);
|
||||||
|
sldFSRatio->setBaseColor(gui_baseCol);
|
||||||
|
sldFSRatio->setMarkerLength(20);
|
||||||
|
sldFSRatio->setStepLength(1);
|
||||||
|
sldFSRatio->setId("FSRatio");
|
||||||
|
sldFSRatio->addActionListener(amigaScreenActionListener);
|
||||||
|
lblFSRatioInfo = new gcn::Label("100%%");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
chkFrameskip = new gcn::UaeCheckBox("Frameskip");
|
||||||
chkFrameskip->addActionListener(amigaScreenActionListener);
|
chkFrameskip->addActionListener(amigaScreenActionListener);
|
||||||
|
|
||||||
grpAmigaScreen = new gcn::Window("Amiga Screen");
|
grpAmigaScreen = new gcn::Window("Amiga Screen");
|
||||||
grpAmigaScreen->setPosition(DISTANCE_BORDER, DISTANCE_BORDER);
|
grpAmigaScreen->setPosition(DISTANCE_BORDER, DISTANCE_BORDER);
|
||||||
|
|
||||||
int posY = 10;
|
int posY = 10;
|
||||||
grpAmigaScreen->add(lblAmigaWidth, 8, posY);
|
grpAmigaScreen->add(lblAmigaWidth, 0, posY);
|
||||||
grpAmigaScreen->add(sldAmigaWidth, 100, posY);
|
grpAmigaScreen->add(sldAmigaWidth, 160, posY);
|
||||||
grpAmigaScreen->add(lblAmigaWidthInfo, 100 + sldAmigaWidth->getWidth() + 12, posY);
|
grpAmigaScreen->add(lblAmigaWidthInfo, 160 + sldAmigaWidth->getWidth() + 12, posY);
|
||||||
posY += sldAmigaWidth->getHeight() + DISTANCE_NEXT_Y;
|
posY += sldAmigaWidth->getHeight() + DISTANCE_NEXT_Y;
|
||||||
grpAmigaScreen->add(lblAmigaHeight, 8, posY);
|
grpAmigaScreen->add(lblAmigaHeight, 0, posY);
|
||||||
grpAmigaScreen->add(sldAmigaHeight, 100, posY);
|
grpAmigaScreen->add(sldAmigaHeight, 160, posY);
|
||||||
grpAmigaScreen->add(lblAmigaHeightInfo, 100 + sldAmigaHeight->getWidth() + 12, posY);
|
grpAmigaScreen->add(lblAmigaHeightInfo, 160 + sldAmigaHeight->getWidth() + 12, posY);
|
||||||
posY += sldAmigaHeight->getHeight() + DISTANCE_NEXT_Y;
|
posY += sldAmigaHeight->getHeight() + DISTANCE_NEXT_Y;
|
||||||
grpAmigaScreen->add(lblVertPos, 8, posY);
|
grpAmigaScreen->add(lblVertPos, 0, posY);
|
||||||
grpAmigaScreen->add(sldVertPos, 100, posY);
|
grpAmigaScreen->add(sldVertPos, 160, posY);
|
||||||
grpAmigaScreen->add(lblVertPosInfo, 100 + sldVertPos->getWidth() + 12, posY);
|
grpAmigaScreen->add(lblVertPosInfo, 160 + sldVertPos->getWidth() + 12, posY);
|
||||||
posY += sldVertPos->getHeight() + DISTANCE_NEXT_Y;
|
posY += sldVertPos->getHeight() + DISTANCE_NEXT_Y;
|
||||||
|
|
||||||
|
#ifdef RASPBERRY
|
||||||
|
grpAmigaScreen->add(lblFSRatio, 0, posY);
|
||||||
|
grpAmigaScreen->add(sldFSRatio, 160, posY);
|
||||||
|
grpAmigaScreen->add(lblFSRatioInfo, 160 + sldFSRatio->getWidth() + 12, posY);
|
||||||
|
posY += sldFSRatio->getHeight() + DISTANCE_NEXT_Y;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
grpAmigaScreen->setMovable(false);
|
grpAmigaScreen->setMovable(false);
|
||||||
grpAmigaScreen->setSize(320, posY + DISTANCE_BORDER);
|
grpAmigaScreen->setSize(460, posY + DISTANCE_BORDER);
|
||||||
grpAmigaScreen->setBaseColor(gui_baseCol);
|
grpAmigaScreen->setBaseColor(gui_baseCol);
|
||||||
|
|
||||||
category.panel->add(grpAmigaScreen);
|
category.panel->add(grpAmigaScreen);
|
||||||
|
@ -157,6 +199,11 @@ void ExitPanelDisplay(void)
|
||||||
delete grpAmigaScreen;
|
delete grpAmigaScreen;
|
||||||
delete chkFrameskip;
|
delete chkFrameskip;
|
||||||
delete amigaScreenActionListener;
|
delete amigaScreenActionListener;
|
||||||
|
#ifdef RASPBERRY
|
||||||
|
delete lblFSRatio;
|
||||||
|
delete sldFSRatio;
|
||||||
|
delete lblFSRatioInfo;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -187,6 +234,19 @@ void RefreshPanelDisplay(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef RASPBERRY
|
||||||
|
for(i=0; i<21; ++i)
|
||||||
|
{
|
||||||
|
if(changed_prefs.gfx_fullscreen_ratio == FullscreenRatio[i])
|
||||||
|
{
|
||||||
|
sldFSRatio->setValue(i);
|
||||||
|
snprintf(tmp, 32, "%d%%", changed_prefs.gfx_fullscreen_ratio);
|
||||||
|
lblFSRatioInfo->setCaption(tmp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
sldVertPos->setValue(changed_prefs.pandora_vertical_offset);
|
sldVertPos->setValue(changed_prefs.pandora_vertical_offset);
|
||||||
snprintf(tmp, 32, "%d", changed_prefs.pandora_vertical_offset);
|
snprintf(tmp, 32, "%d", changed_prefs.pandora_vertical_offset);
|
||||||
lblVertPosInfo->setCaption(tmp);
|
lblVertPosInfo->setCaption(tmp);
|
||||||
|
|
|
@ -189,7 +189,8 @@ static void open_screen(struct uae_prefs *p)
|
||||||
|
|
||||||
// check if resolution hasn't change in menu. otherwise free the resources so that they will be re-generated with new resolution.
|
// check if resolution hasn't change in menu. otherwise free the resources so that they will be re-generated with new resolution.
|
||||||
if ((dispmanxresource_amigafb_1 != 0) &&
|
if ((dispmanxresource_amigafb_1 != 0) &&
|
||||||
((blit_rect.width != width) || (blit_rect.height != height) || (currprefs.gfx_correct_aspect != changed_prefs.gfx_correct_aspect)))
|
((blit_rect.width != width) || (blit_rect.height != height) || (currprefs.gfx_correct_aspect != changed_prefs.gfx_correct_aspect) ||
|
||||||
|
(currprefs.gfx_fullscreen_ratio != changed_prefs.gfx_fullscreen_ratio)))
|
||||||
{
|
{
|
||||||
printf("Emulation resolution change detected.\n");
|
printf("Emulation resolution change detected.\n");
|
||||||
if(prSDLScreen != NULL )
|
if(prSDLScreen != NULL )
|
||||||
|
@ -208,6 +209,7 @@ static void open_screen(struct uae_prefs *p)
|
||||||
{
|
{
|
||||||
printf("Emulation resolution: Width %i Height: %i\n",width,height);
|
printf("Emulation resolution: Width %i Height: %i\n",width,height);
|
||||||
currprefs.gfx_correct_aspect = changed_prefs.gfx_correct_aspect;
|
currprefs.gfx_correct_aspect = changed_prefs.gfx_correct_aspect;
|
||||||
|
currprefs.gfx_fullscreen_ratio = changed_prefs.gfx_fullscreen_ratio;
|
||||||
prSDLScreen = SDL_CreateRGBSurface(SDL_SWSURFACE,width,height,16,
|
prSDLScreen = SDL_CreateRGBSurface(SDL_SWSURFACE,width,height,16,
|
||||||
Dummy_prSDLScreen->format->Rmask,
|
Dummy_prSDLScreen->format->Rmask,
|
||||||
Dummy_prSDLScreen->format->Gmask,
|
Dummy_prSDLScreen->format->Gmask,
|
||||||
|
@ -232,18 +234,22 @@ static void open_screen(struct uae_prefs *p)
|
||||||
if (currprefs.gfx_correct_aspect == 0)
|
if (currprefs.gfx_correct_aspect == 0)
|
||||||
{
|
{
|
||||||
// Fullscreen.
|
// Fullscreen.
|
||||||
vc_dispmanx_rect_set( &dst_rect, (dispmanxdinfo.width * 1)/100,
|
int scaled_width = dispmanxdinfo.width * currprefs.gfx_fullscreen_ratio/100;
|
||||||
(dispmanxdinfo.height * 2)/100 ,
|
int scaled_height = dispmanxdinfo.height * currprefs.gfx_fullscreen_ratio/100;
|
||||||
dispmanxdinfo.width - (dispmanxdinfo.width * 2)/100 ,
|
vc_dispmanx_rect_set( &dst_rect, (dispmanxdinfo.width - scaled_width)/2 ,
|
||||||
dispmanxdinfo.height - (dispmanxdinfo.height * 4)/100 );
|
(dispmanxdinfo.height - scaled_height)/2 ,
|
||||||
|
scaled_width ,
|
||||||
|
scaled_height );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 4/3 shrink.
|
// 4/3 shrink.
|
||||||
vc_dispmanx_rect_set( &dst_rect, ((dispmanxdinfo.width * 13)/100) ,
|
int scaled_width = dispmanxdinfo.width * currprefs.gfx_fullscreen_ratio/100;
|
||||||
(dispmanxdinfo.height * 2)/100 ,
|
int scaled_height = dispmanxdinfo.height * currprefs.gfx_fullscreen_ratio/100;
|
||||||
(dispmanxdinfo.width - ((dispmanxdinfo.width * 26)/100)) ,
|
vc_dispmanx_rect_set( &dst_rect, (dispmanxdinfo.width - scaled_width/16*12)/2 ,
|
||||||
dispmanxdinfo.height - (dispmanxdinfo.height * 4)/100 );
|
(dispmanxdinfo.height - scaled_height)/2 ,
|
||||||
|
scaled_width/16*12 ,
|
||||||
|
scaled_height );
|
||||||
}
|
}
|
||||||
|
|
||||||
// For debug, in order to avoid full screen.
|
// For debug, in order to avoid full screen.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue