mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-08-12 00:44:16 +02:00
Update to v106r48 release.
byuu says: The problems with the Windows and Qt4 ports have all been resolved, although there's a fairly gross hack on a few Qt widgets to not destruct once Application::quit() is called to avoid a double free crash (I'm unsure where Qt is destructing the widgets internally.) The Cocoa port compiles again at least, though it's bound to have endless problems. I improved the Label painting in the GTK ports, which fixes the background color on labels inside TabFrame widgets. I've optimized the Makefile system even further. I added a "redo state" command to bsnes, which is created whenever you load the undo state. There are also hotkeys for both now, although I don't think they're really something you want to map hotkeys to. I moved the nall::Locale object inside hiro::Application, so that it can be used to translate the BrowserDialog and MessageDialog window strings. I improved the Super Game Boy emulation of `MLT_REQ`, fixing Pokemon Yellow's custom border and probably more stuff. Lots of other small fixes and improvements. Things are finally stable once again after the harrowing layout redesign catastrophe. Errata: - ICD::joypID should be set to 3 on reset(). joypWrite() may as well take uint1 instead of bool. - hiro/Qt: remove pWindow::setMaximumSize() comment; found a workaround for it - nall/GNUmakefile: don't set object.path if it's already set (allow overrides before including the file)
This commit is contained in:
@@ -5,6 +5,19 @@ namespace hiro {
|
||||
static const uint FixedStyle = WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX | WS_BORDER | WS_CLIPCHILDREN;
|
||||
static const uint ResizableStyle = WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CLIPCHILDREN;
|
||||
|
||||
uint pWindow::minimumStatusHeight = 0;
|
||||
|
||||
auto pWindow::initialize() -> void {
|
||||
HWND hwnd = CreateWindow(L"hiroWindow", L"", ResizableStyle, 128, 128, 256, 256, 0, 0, GetModuleHandle(0), 0);
|
||||
HWND hstatus = CreateWindow(STATUSCLASSNAME, L"", WS_CHILD, 0, 0, 0, 0, hwnd, nullptr, GetModuleHandle(0), 0);
|
||||
SetWindowPos(hstatus, nullptr, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED);
|
||||
RECT rc;
|
||||
GetWindowRect(hstatus, &rc);
|
||||
minimumStatusHeight = rc.bottom - rc.top;
|
||||
DestroyWindow(hstatus);
|
||||
DestroyWindow(hwnd);
|
||||
}
|
||||
|
||||
auto pWindow::construct() -> void {
|
||||
hwnd = CreateWindow(L"hiroWindow", L"", ResizableStyle, 128, 128, 256, 256, 0, 0, GetModuleHandle(0), 0);
|
||||
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)&reference);
|
||||
@@ -35,21 +48,11 @@ auto pWindow::focused() const -> bool {
|
||||
}
|
||||
|
||||
auto pWindow::frameMargin() const -> Geometry {
|
||||
unsigned style = state().resizable ? ResizableStyle : FixedStyle;
|
||||
if(state().fullScreen) style = 0;
|
||||
RECT rc{0, 0, 640, 480};
|
||||
AdjustWindowRect(&rc, style, (bool)GetMenu(hwnd));
|
||||
signed statusHeight = 0;
|
||||
if(auto& statusBar = state().statusBar) {
|
||||
if(auto self = statusBar->self()) {
|
||||
if(statusBar->visible()) {
|
||||
RECT src;
|
||||
GetClientRect(self->hwnd, &src);
|
||||
statusHeight = src.bottom - src.top;
|
||||
}
|
||||
}
|
||||
}
|
||||
return {abs(rc.left), abs(rc.top), (rc.right - rc.left) - 640, (rc.bottom - rc.top) + statusHeight - 480};
|
||||
uint style = state().fullScreen ? 0 : state().resizable ? ResizableStyle : FixedStyle;
|
||||
bool menuVisible = state().menuBar && state().menuBar->visible();
|
||||
AdjustWindowRect(&rc, style, menuVisible);
|
||||
return {abs(rc.left), abs(rc.top), (rc.right - rc.left) - 640, (rc.bottom - rc.top) + _statusHeight() - 480};
|
||||
}
|
||||
|
||||
auto pWindow::remove(sMenuBar menuBar) -> void {
|
||||
@@ -183,14 +186,9 @@ auto pWindow::setTitle(string text) -> void {
|
||||
}
|
||||
|
||||
auto pWindow::setVisible(bool visible) -> void {
|
||||
lock();
|
||||
auto lock = acquire();
|
||||
ShowWindow(hwnd, visible ? SW_SHOWNORMAL : SW_HIDE);
|
||||
if(!visible) setModal(false);
|
||||
|
||||
if(auto& sizable = state().sizable) {
|
||||
if(auto self = sizable->self()) self->setVisible(sizable->visible(true));
|
||||
}
|
||||
unlock();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -301,6 +299,18 @@ auto pWindow::_modalityUpdate() -> void {
|
||||
}
|
||||
}
|
||||
|
||||
auto pWindow::_statusHeight() const -> int {
|
||||
int height = 0;
|
||||
if(auto& statusBar = state().statusBar) {
|
||||
if(statusBar->visible()) {
|
||||
auto& text = statusBar->state.text;
|
||||
height = statusBar->font(true).size(text ? text : " ").height();
|
||||
height = max(height, minimumStatusHeight);
|
||||
}
|
||||
}
|
||||
return height;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user