Compare commits

...

8 commits

Author SHA1 Message Date
Benjamin Deroche
afcc5edd4e
Merge 4d59cdc860 into 51b6f4162d 2025-02-08 22:19:19 +08:00
pjft
51b6f4162d
Merge pull request #888 from cmitu/scraper-updates2
scraper: added FM Towns (Marty)
2024-12-12 14:00:49 +00:00
cmitu
803bad626e scraper: added FM Towns (Marty) 2024-12-11 05:16:57 +00:00
pjft
6b4281ac9f
Merge pull request #887 from GoldenPalazzo/ds4-rgp01-triggers
Detecting DS4 and Anbernic P01 analog triggers
2024-12-08 15:21:58 +00:00
Francesco Palazzo
894543cea6 Detecting DS4 and Anbernic P01 analog triggers 2024-12-08 15:16:52 +01:00
pjft
d46f04a25b
Merge pull request #883 from o-p-a/display_option
Add new option --monitor
2024-09-09 12:26:10 +01:00
opa
a7a9dec637 Add option --monitor N 2024-08-09 23:23:52 +09:00
Benjamin Deroche
4d59cdc860 Fix grid hang when scrolling at max scroll speed
Reset all tiles only when we hit max scroll speed
2020-06-30 22:22:05 +02:00
9 changed files with 85 additions and 42 deletions

View file

@ -92,6 +92,7 @@ namespace PlatformIds
"ti99",
"dragon32",
"zmachine",
"fmtowns",
"ignore", // do not allow scraping for this system
"invalid"

View file

@ -93,6 +93,7 @@ namespace PlatformIds
TI_99,
DRAGON32,
ZMACHINE,
FMTOWNS,
PLATFORM_IGNORE, // do not allow scraping for this system
PLATFORM_COUNT

View file

@ -52,7 +52,18 @@ bool parseArgs(int argc, char* argv[])
for(int i = 1; i < argc; i++)
{
if(strcmp(argv[i], "--resolution") == 0)
if(strcmp(argv[i], "--monitor") == 0)
{
if (i >= argc - 1)
{
std::cerr << "Invalid monitor supplied.";
return false;
}
int monitor = atoi(argv[i + 1]);
i++; // skip the argument value
Settings::getInstance()->setInt("MonitorID", monitor);
}else if(strcmp(argv[i], "--resolution") == 0)
{
if(i >= argc - 2)
{
@ -182,6 +193,7 @@ bool parseArgs(int argc, char* argv[])
"--screenoffset X Y move the canvas by x,y pixels\n"
"--fullscreen-borderless borderless fullscreen window\n"
"--windowed not fullscreen, should be used with --resolution\n"
"--monitor N monitor index (0-)\n"
"\nGame and settings visibility in ES and behaviour of ES:\n"
"--force-disable-filters force the UI to ignore applied filters on\n"
" gamelist (p)\n"

View file

@ -109,6 +109,7 @@ const std::map<PlatformId, std::string> gamesdb_new_platformid_map{
{ TRS80_COLOR_COMPUTER, "4941" },
{ TI_99, "4953" },
{ TANDY, "4941" },
{ FMTOWNS, "4932" },
};
void thegamesdb_generate_json_scraper_requests(const ScraperSearchParams& params,

View file

@ -100,7 +100,8 @@ const std::map<PlatformId, unsigned short> screenscraper_platformid_map{
{ TANDY, 144 },
{ TI_99, 205 },
{ DRAGON32, 91 },
{ ZMACHINE, 21 }
{ ZMACHINE, 21 },
{ FMTOWNS, 253 }
};

View file

@ -13,27 +13,28 @@ Settings* Settings::sInstance = NULL;
// these values are NOT saved to es_settings.xml
// since they're set through command-line arguments, and not the in-program settings menu
std::vector<const char*> settings_dont_save {
"Debug" ,
"DebugGrid" ,
"DebugText" ,
"DebugImage" ,
"ForceKid" ,
"ForceKiosk" ,
"IgnoreGamelist" ,
"HideConsole" ,
"ShowExit" ,
"ConfirmQuit" ,
"SplashScreen" ,
"VSync" ,
"FullscreenBorderless" ,
"Windowed" ,
"WindowWidth" ,
"WindowHeight" ,
"ScreenWidth" ,
"ScreenHeight" ,
"ScreenOffsetX" ,
"ScreenOffsetY" ,
"ScreenRotate"
"Debug",
"DebugGrid",
"DebugText",
"DebugImage",
"ForceKid",
"ForceKiosk",
"IgnoreGamelist",
"HideConsole",
"ShowExit",
"ConfirmQuit",
"SplashScreen",
"VSync",
"FullscreenBorderless",
"Windowed",
"WindowWidth",
"WindowHeight",
"ScreenWidth",
"ScreenHeight",
"ScreenOffsetX",
"ScreenOffsetY",
"ScreenRotate",
"MonitorID"
};
Settings::Settings()
@ -178,6 +179,7 @@ void Settings::setDefaults()
mIntMap["ScreenOffsetX"] = 0;
mIntMap["ScreenOffsetY"] = 0;
mIntMap["ScreenRotate"] = 0;
mIntMap["MonitorID"] = 0;
mBoolMap["UseFullscreenPaging"] = false;

View file

@ -86,6 +86,7 @@ private:
bool mLastRowPartial;
Vector2f mAutoLayout;
float mAutoLayoutZoom;
int mLastScrollTier;
Vector4f mPadding;
Vector2f mMargin;
@ -119,6 +120,7 @@ ImageGridComponent<T>::ImageGridComponent(Window* window) : IList<ImageGridData,
mAutoLayout = Vector2f::Zero();
mAutoLayoutZoom = 1.0;
mLastScrollTier = 0;
mStartPosition = 0;
mEntriesDirty = true;
@ -580,19 +582,24 @@ void ImageGridComponent<T>::updateTiles(bool allowAnimation, bool updateSelected
if (!mTiles.size())
return;
// Stop updating the tiles at highest scroll speed
if (mScrollTier == 3)
{
for (int ti = 0; ti < (int)mTiles.size(); ti++)
// Stop updating the tiles at highest scroll speed
if (mLastScrollTier != 3)
{
std::shared_ptr<GridTileComponent> tile = mTiles.at(ti);
for (int ti = 0; ti < (int) mTiles.size(); ti++)
{
std::shared_ptr<GridTileComponent> tile = mTiles.at(ti);
tile->setSelected(false);
tile->setImage(mDefaultGameTexture);
tile->setVisible(false);
tile->setSelected(false);
tile->setImage(mDefaultGameTexture);
tile->setVisible(false);
}
}
mLastScrollTier = mScrollTier;
return;
}
mLastScrollTier = mScrollTier;
// Temporary store previous textures so they can't be unloaded
std::vector<std::shared_ptr<TextureResource>> previousTextures;

View file

@ -342,27 +342,39 @@ bool GuiInputConfig::filterTrigger(Input input, InputConfig* config, int inputId
#if defined(__linux__)
// on Linux, some gamepads return both an analog axis and a digital button for the trigger;
// we want the analog axis only, so this function removes the button press event
bool isPlaystation = (
// match PlayStation joystick with 6 axes only
strstr(config->getDeviceName().c_str(), "PLAYSTATION") != NULL
|| strstr(config->getDeviceName().c_str(), "Sony Interactive") != NULL // Official dualshock 4
|| strstr(config->getDeviceName().c_str(), "PS3 Ga") != NULL
|| strstr(config->getDeviceName().c_str(), "PS(R) Ga") != NULL
// BigBen kid's PS3 gamepad 146b:0902, matched on SDL GUID because its name "Bigben Interactive Bigben Game Pad" may be too generic
|| strcmp(config->getDeviceGUIDString().c_str(), "030000006b1400000209000011010000") == 0
);
bool isAnbernic = (
strcmp(config->getDeviceGUIDString().c_str(), "03004ab1020500000913000010010000") == 0 // Anbernic RG P01 has same issue
);
if((
// match PlayStation joystick with 6 axes only
strstr(config->getDeviceName().c_str(), "PLAYSTATION") != NULL
|| strstr(config->getDeviceName().c_str(), "PS3 Ga") != NULL
|| strstr(config->getDeviceName().c_str(), "PS(R) Ga") != NULL
// BigBen kid's PS3 gamepad 146b:0902, matched on SDL GUID because its name "Bigben Interactive Bigben Game Pad" may be too generic
|| strcmp(config->getDeviceGUIDString().c_str(), "030000006b1400000209000011010000") == 0
) && InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6)
if((isPlaystation || isAnbernic)
&& InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6)
{
// digital triggers are unwanted
if(input.type == TYPE_BUTTON && (input.id == 6 || input.id == 7))
if((
(isPlaystation && (input.id == 6 || input.id == 7))
|| (isAnbernic && (input.id == 8 || input.id == 9))
) && input.type == TYPE_BUTTON)
{
mHoldingInput = false;
return true;
}
}
// ignore negative pole for axes 2/5 only when triggers are being configured
if(input.type == TYPE_AXIS && (input.id == 2 || input.id == 5))
bool genericTrigger = !isAnbernic && (input.id == 2 || input.id == 5);
bool anbernicTrigger = isAnbernic && (input.id == 4 || input.id == 5);
// ignore negative pole for axes only when triggers are being configured
if(input.type == TYPE_AXIS && (genericTrigger || anbernicTrigger))
{
if(strstr(GUI_INPUT_CONFIG_LIST[inputId].name, "Trigger") != NULL)
{
if(input.value == 1)

View file

@ -75,8 +75,14 @@ namespace Renderer
initialCursorState = (SDL_ShowCursor(0) != 0);
int displayIndex = Settings::getInstance()->getInt("MonitorID");
if(displayIndex < 0 || displayIndex >= SDL_GetNumVideoDisplays()){
displayIndex = 0;
}
SDL_DisplayMode dispMode;
SDL_GetDesktopDisplayMode(0, &dispMode);
SDL_GetDesktopDisplayMode(displayIndex, &dispMode);
windowWidth = Settings::getInstance()->getInt("WindowWidth") ? Settings::getInstance()->getInt("WindowWidth") : dispMode.w;
windowHeight = Settings::getInstance()->getInt("WindowHeight") ? Settings::getInstance()->getInt("WindowHeight") : dispMode.h;
screenWidth = Settings::getInstance()->getInt("ScreenWidth") ? Settings::getInstance()->getInt("ScreenWidth") : windowWidth;
@ -89,7 +95,7 @@ namespace Renderer
const unsigned int windowFlags = (Settings::getInstance()->getBool("Windowed") ? 0 : (Settings::getInstance()->getBool("FullscreenBorderless") ? SDL_WINDOW_BORDERLESS : SDL_WINDOW_FULLSCREEN)) | getWindowFlags();
if((sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, windowWidth, windowHeight, windowFlags)) == nullptr)
if((sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), windowWidth, windowHeight, windowFlags)) == nullptr)
{
LOG(LogError) << "Error creating SDL window!\n\t" << SDL_GetError();
return false;