I used the pi version in a project a while back and I remember some similar problems (I can't check the project any more because it went to a client). I was running without an x session, that I do remember, and to stop the cropping I think I had to adjust the overscan settings for the pi itself, which can be done with config.txt
https://www.raspberrypi.org/documentation/configuration/config-txt/video.md
Window creation looked something like:
const sf::Vector2f ScreenArea(1920.f, 1080.f);
auto mode = sf::VideoMode::getDesktopMode();
sf::RenderWindow window;
window.create(mode, "Buns.");
window.setVerticalSyncEnabled(true);
//fix the view at 1080p
auto vModeWidth = static_cast<float>(mode.width);
auto vModeHeight = static_cast<float>(mode.height);
if(mode.width == 720)
{
//we're using composite output so the display handles letterboxing
//we just need to adjust the pixel aspect ratio
sf::View view({0.f, 0.f, ScreenArea.x, ScreenArea.y});
view.setCenter(ScreenArea / 2.f);
window.setView(view);
}
else
{
float windowRatio = vModeWidth / vModeHeight;
float viewRatio = 16.f / 9.f;
float sizeY = windowRatio / viewRatio;
float top = (1.f - sizeY) / 2.f;
sf::View view({0.f, 0.f, ScreenArea.x, ScreenArea.y});
view.setCenter(ScreenArea / 2.f);
view.setViewport({ { 0.f, top }, { 1.f, sizeY } });
window.setView(view);
}
Hope this is some help