mirror of
https://github.com/DerKoun/bsnes-hd.git
synced 2025-04-02 10:52:49 -04:00
89 lines
2.8 KiB
C++
89 lines
2.8 KiB
C++
auto Program::showMessage(string text) -> void {
|
|
statusTime = chrono::millisecond();
|
|
statusMessage = text;
|
|
}
|
|
|
|
auto Program::showFrameRate(string text) -> void {
|
|
statusFrameRate = text;
|
|
}
|
|
|
|
auto Program::updateStatus() -> void {
|
|
string message;
|
|
if(chrono::millisecond() - statusTime <= 2000) {
|
|
message = statusMessage;
|
|
}
|
|
if(message != presentation.statusLeft.text()) {
|
|
presentation.statusLeft.setText(message);
|
|
}
|
|
|
|
string frameRate;
|
|
if(!emulator->loaded()) {
|
|
frameRate = tr("Unloaded");
|
|
} else if(presentation.frameAdvance.checked() && frameAdvanceLock) {
|
|
frameRate = tr("Frame Advance");
|
|
} else if(presentation.pauseEmulation.checked()) {
|
|
frameRate = tr("Paused");
|
|
} else if(!focused() && inputSettings.pauseEmulation.checked()) {
|
|
frameRate = tr("Paused");
|
|
} else {
|
|
frameRate = statusFrameRate;
|
|
}
|
|
if(frameRate != presentation.statusRight.text()) {
|
|
presentation.statusRight.setText(frameRate);
|
|
}
|
|
}
|
|
|
|
auto Program::captureScreenshot() -> bool {
|
|
if(emulator->loaded() && screenshot.data) {
|
|
if(auto filename = screenshotPath()) {
|
|
//RGB888 -> RGB888
|
|
image capture{0, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff};
|
|
capture.copy(screenshot.data, screenshot.pitch, screenshot.width, screenshot.height);
|
|
capture.transform(0, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
|
|
|
|
//normalize pixel aspect ratio to 1:1
|
|
if(capture.width() == 512 && capture.height() == 240) capture.scale(512, 480, false); //hires
|
|
if(capture.width() == 256 && capture.height() == 480) capture.scale(512, 480, false); //interlace
|
|
|
|
auto data = capture.data();
|
|
auto pitch = capture.pitch();
|
|
auto width = capture.width();
|
|
auto height = capture.height();
|
|
|
|
if(!presentation.showOverscanArea.checked()) {
|
|
if(height == 240) data += 8 * pitch, height -= 16;
|
|
if(height == 480) data += 16 * pitch, height -= 32;
|
|
}
|
|
|
|
if(Encode::BMP::create(filename, data, width << 2, width, height, /* alpha = */ false)) {
|
|
showMessage({"Captured screenshot [", Location::file(filename), "]"});
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
auto Program::inactive() -> bool {
|
|
if(locked()) return true;
|
|
if(!emulator->loaded()) return true;
|
|
if(presentation.pauseEmulation.checked()) return true;
|
|
if(presentation.frameAdvance.checked() && frameAdvanceLock) return true;
|
|
if(!focused() && inputSettings.pauseEmulation.checked()) return true;
|
|
return false;
|
|
}
|
|
|
|
auto Program::focused() -> bool {
|
|
//full-screen mode creates its own top-level window: presentation window will not have focus
|
|
if(video.fullScreen() || presentation.focused()) {
|
|
mute &= ~Mute::Unfocused;
|
|
return true;
|
|
} else {
|
|
if(settings.audio.muteUnfocused) {
|
|
mute |= Mute::Unfocused;
|
|
} else {
|
|
mute &= ~Mute::Unfocused;
|
|
}
|
|
return false;
|
|
}
|
|
}
|