pcbjam/tests/apps/standalone/maximize/maximize_test.cpp
Viktor Vaczi a26b40c063 Reorganize project structure for clarity
- Rename tests/wasm-app/ to tests/apps/ for brevity
- Move lib/gl_immediate_shim.js to wasm/shims/ (consolidates WASM files)
- Delete docs/ directory (outdated Nov 2024 research docs)
- Delete patches/ directory (already applied to fork submodules)
- Delete wasm/patches/ and wasm/config/ (empty/unused)
- Update all file references in scripts, configs, and documentation
- Update .gitignore for new tests/apps/ paths

Verified both build workflows pass:
- wxWidgets tests: 255 passed
- Docker KiCad build: completed successfully

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 14:06:23 +01:00

179 lines
5.1 KiB
C++

// Maximize Test - Tests wxFrame::Maximize() which KiCad uses
// This reproduces the bug where Maximize() returns a tiny window when
// GetScreenSize() returns incorrect values at startup.
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/display.h"
#ifdef __EMSCRIPTEN__
#include <emscripten/emscripten.h>
#endif
class MaximizeTestApp : public wxApp
{
public:
virtual bool OnInit() override;
};
class MaximizeTestFrame : public wxFrame
{
public:
MaximizeTestFrame();
private:
wxStaticText* m_sizeLabel;
wxStaticText* m_displayLabel;
void UpdateSizeDisplay();
void OnSize(wxSizeEvent& evt);
void OnMaximize(wxCommandEvent& evt);
void OnRestore(wxCommandEvent& evt);
wxDECLARE_EVENT_TABLE();
};
enum {
ID_MAXIMIZE = wxID_HIGHEST + 1,
ID_RESTORE
};
wxBEGIN_EVENT_TABLE(MaximizeTestFrame, wxFrame)
EVT_SIZE(MaximizeTestFrame::OnSize)
EVT_BUTTON(ID_MAXIMIZE, MaximizeTestFrame::OnMaximize)
EVT_BUTTON(ID_RESTORE, MaximizeTestFrame::OnRestore)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MaximizeTestApp);
bool MaximizeTestApp::OnInit()
{
if (!wxApp::OnInit())
return false;
// Create frame WITHOUT explicit size - uses wxDefaultSize
// This is what KiCad does
MaximizeTestFrame* frame = new MaximizeTestFrame();
// KiCad calls Maximize() after creation
frame->Maximize(true);
frame->Show(true);
return true;
}
MaximizeTestFrame::MaximizeTestFrame()
: wxFrame(nullptr, wxID_ANY, "Maximize Test",
wxDefaultPosition, wxDefaultSize) // No explicit size!
{
wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
wxStaticText* desc = new wxStaticText(this, wxID_ANY,
"Maximize Test\n\n"
"This test reproduces the KiCad startup issue.\n"
"The frame is created with wxDefaultSize and Maximize() is called.\n"
"If display size detection works, the window should be fullscreen.");
mainSizer->Add(desc, 0, wxALL, 10);
// Display info
wxStaticBoxSizer* infoBox = new wxStaticBoxSizer(wxVERTICAL, this, "Display Info");
m_displayLabel = new wxStaticText(this, wxID_ANY, "Display: querying...");
infoBox->Add(m_displayLabel, 0, wxALL, 5);
m_sizeLabel = new wxStaticText(this, wxID_ANY, "Window size: querying...");
infoBox->Add(m_sizeLabel, 0, wxALL, 5);
mainSizer->Add(infoBox, 0, wxEXPAND | wxALL, 10);
// Buttons
wxBoxSizer* btnSizer = new wxBoxSizer(wxHORIZONTAL);
btnSizer->Add(new wxButton(this, ID_MAXIMIZE, "Maximize"), 0, wxALL, 5);
btnSizer->Add(new wxButton(this, ID_RESTORE, "Restore"), 0, wxALL, 5);
mainSizer->Add(btnSizer, 0, wxALIGN_CENTER | wxALL, 10);
SetSizer(mainSizer);
// Query display info
wxDisplay display(wxDisplay::GetFromWindow(this));
wxRect geom = display.GetGeometry();
wxRect client = display.GetClientArea();
wxString displayInfo = wxString::Format(
"Display geometry: %dx%d, Client area: %dx%d",
geom.GetWidth(), geom.GetHeight(),
client.GetWidth(), client.GetHeight());
m_displayLabel->SetLabel(displayInfo);
#ifdef __EMSCRIPTEN__
EM_ASM({
console.log('[MAXIMIZE_TEST] Display geometry: ' + $0 + 'x' + $1);
console.log('[MAXIMIZE_TEST] Client area: ' + $2 + 'x' + $3);
}, geom.GetWidth(), geom.GetHeight(), client.GetWidth(), client.GetHeight());
#endif
// Update size display after creation
CallAfter(&MaximizeTestFrame::UpdateSizeDisplay);
#ifdef __EMSCRIPTEN__
EM_ASM({
console.log('[MAXIMIZE_TEST] Maximize test app started');
});
#endif
}
void MaximizeTestFrame::UpdateSizeDisplay()
{
wxSize size = GetSize();
wxSize clientSize = GetClientSize();
wxString sizeInfo = wxString::Format(
"Window size: %dx%d, Client: %dx%d, Maximized: %s",
size.GetWidth(), size.GetHeight(),
clientSize.GetWidth(), clientSize.GetHeight(),
IsMaximized() ? "YES" : "NO");
m_sizeLabel->SetLabel(sizeInfo);
#ifdef __EMSCRIPTEN__
EM_ASM({
console.log('[MAXIMIZE_TEST] Window size: ' + $0 + 'x' + $1);
console.log('[MAXIMIZE_TEST] Client size: ' + $2 + 'x' + $3);
console.log('[MAXIMIZE_TEST] Is maximized: ' + ($4 ? 'YES' : 'NO'));
// Test assertion: window should be larger than 100px if maximize worked
if ($0 < 100 || $1 < 100) {
console.error('[MAXIMIZE_TEST] FAIL: Window is too small! Expected fullscreen, got ' + $0 + 'x' + $1);
} else {
console.log('[MAXIMIZE_TEST] PASS: Window size is reasonable');
}
}, size.GetWidth(), size.GetHeight(),
clientSize.GetWidth(), clientSize.GetHeight(),
IsMaximized() ? 1 : 0);
#endif
}
void MaximizeTestFrame::OnSize(wxSizeEvent& evt)
{
evt.Skip();
CallAfter(&MaximizeTestFrame::UpdateSizeDisplay);
}
void MaximizeTestFrame::OnMaximize(wxCommandEvent& WXUNUSED(evt))
{
#ifdef __EMSCRIPTEN__
EM_ASM({ console.log('[MAXIMIZE_TEST] Maximize button clicked'); });
#endif
Maximize(true);
}
void MaximizeTestFrame::OnRestore(wxCommandEvent& WXUNUSED(evt))
{
#ifdef __EMSCRIPTEN__
EM_ASM({ console.log('[MAXIMIZE_TEST] Restore button clicked'); });
#endif
Maximize(false);
}