- 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>
205 lines
7 KiB
C++
205 lines
7 KiB
C++
// wxColourPickerCtrl/wxFontPickerCtrl Test - Tests picker controls in WASM
|
|
// KiCad uses these for color preferences, layer colors, and font selection
|
|
|
|
#include "wx/wxprec.h"
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/wx.h"
|
|
#endif
|
|
|
|
#include "wx/clrpicker.h"
|
|
#include "wx/fontpicker.h"
|
|
|
|
#ifdef __EMSCRIPTEN__
|
|
#include <emscripten/emscripten.h>
|
|
#endif
|
|
|
|
class PickersTestApp : public wxApp
|
|
{
|
|
public:
|
|
virtual bool OnInit() override;
|
|
};
|
|
|
|
class PickersTestFrame : public wxFrame
|
|
{
|
|
public:
|
|
PickersTestFrame();
|
|
|
|
private:
|
|
wxColourPickerCtrl* m_colourPicker1;
|
|
wxColourPickerCtrl* m_colourPicker2;
|
|
wxColourPickerCtrl* m_colourPicker3;
|
|
wxFontPickerCtrl* m_fontPicker;
|
|
wxPanel* m_previewPanel;
|
|
wxStaticText* m_fontPreview;
|
|
wxTextCtrl* m_log;
|
|
|
|
void LogEvent(const wxString& msg);
|
|
void UpdatePreview();
|
|
|
|
void OnColourChanged(wxColourPickerEvent& evt);
|
|
void OnFontChanged(wxFontPickerEvent& evt);
|
|
|
|
wxDECLARE_EVENT_TABLE();
|
|
};
|
|
|
|
enum {
|
|
ID_COLOUR_PICKER_1 = wxID_HIGHEST + 1,
|
|
ID_COLOUR_PICKER_2,
|
|
ID_COLOUR_PICKER_3,
|
|
ID_FONT_PICKER
|
|
};
|
|
|
|
wxBEGIN_EVENT_TABLE(PickersTestFrame, wxFrame)
|
|
EVT_COLOURPICKER_CHANGED(ID_COLOUR_PICKER_1, PickersTestFrame::OnColourChanged)
|
|
EVT_COLOURPICKER_CHANGED(ID_COLOUR_PICKER_2, PickersTestFrame::OnColourChanged)
|
|
EVT_COLOURPICKER_CHANGED(ID_COLOUR_PICKER_3, PickersTestFrame::OnColourChanged)
|
|
EVT_FONTPICKER_CHANGED(ID_FONT_PICKER, PickersTestFrame::OnFontChanged)
|
|
wxEND_EVENT_TABLE()
|
|
|
|
wxIMPLEMENT_APP(PickersTestApp);
|
|
|
|
bool PickersTestApp::OnInit()
|
|
{
|
|
if (!wxApp::OnInit())
|
|
return false;
|
|
|
|
PickersTestFrame* frame = new PickersTestFrame();
|
|
frame->Show(true);
|
|
return true;
|
|
}
|
|
|
|
PickersTestFrame::PickersTestFrame()
|
|
: wxFrame(nullptr, wxID_ANY, "wxPicker Controls WASM Test",
|
|
wxDefaultPosition, wxSize(700, 600))
|
|
{
|
|
wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
wxStaticText* desc = new wxStaticText(this, wxID_ANY,
|
|
"Picker Controls Test\n\n"
|
|
"KiCad uses wxColourPickerCtrl for layer colors and color preferences.\n"
|
|
"wxFontPickerCtrl is used for text/label font settings.");
|
|
mainSizer->Add(desc, 0, wxALL, 10);
|
|
|
|
// Color pickers section (KiCad layer colors)
|
|
wxStaticBoxSizer* colourBox = new wxStaticBoxSizer(wxVERTICAL, this, "Layer Colors (wxColourPickerCtrl)");
|
|
|
|
wxFlexGridSizer* colourGrid = new wxFlexGridSizer(3, 3, 10, 20);
|
|
colourGrid->AddGrowableCol(1);
|
|
|
|
colourGrid->Add(new wxStaticText(this, wxID_ANY, "Front Copper (F.Cu):"), 0, wxALIGN_CENTER_VERTICAL);
|
|
m_colourPicker1 = new wxColourPickerCtrl(this, ID_COLOUR_PICKER_1, wxColour(255, 0, 0));
|
|
colourGrid->Add(m_colourPicker1, 0, wxEXPAND);
|
|
colourGrid->Add(new wxStaticText(this, wxID_ANY, "#FF0000"), 0, wxALIGN_CENTER_VERTICAL);
|
|
|
|
colourGrid->Add(new wxStaticText(this, wxID_ANY, "Back Copper (B.Cu):"), 0, wxALIGN_CENTER_VERTICAL);
|
|
m_colourPicker2 = new wxColourPickerCtrl(this, ID_COLOUR_PICKER_2, wxColour(0, 0, 255));
|
|
colourGrid->Add(m_colourPicker2, 0, wxEXPAND);
|
|
colourGrid->Add(new wxStaticText(this, wxID_ANY, "#0000FF"), 0, wxALIGN_CENTER_VERTICAL);
|
|
|
|
colourGrid->Add(new wxStaticText(this, wxID_ANY, "Silkscreen (F.SilkS):"), 0, wxALIGN_CENTER_VERTICAL);
|
|
m_colourPicker3 = new wxColourPickerCtrl(this, ID_COLOUR_PICKER_3, wxColour(255, 255, 255));
|
|
colourGrid->Add(m_colourPicker3, 0, wxEXPAND);
|
|
colourGrid->Add(new wxStaticText(this, wxID_ANY, "#FFFFFF"), 0, wxALIGN_CENTER_VERTICAL);
|
|
|
|
colourBox->Add(colourGrid, 0, wxEXPAND | wxALL, 10);
|
|
mainSizer->Add(colourBox, 0, wxEXPAND | wxALL, 10);
|
|
|
|
// Color preview panel
|
|
wxStaticBoxSizer* previewBox = new wxStaticBoxSizer(wxVERTICAL, this, "Color Preview");
|
|
m_previewPanel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 60));
|
|
m_previewPanel->SetBackgroundColour(wxColour(50, 50, 50));
|
|
previewBox->Add(m_previewPanel, 0, wxEXPAND | wxALL, 10);
|
|
mainSizer->Add(previewBox, 0, wxEXPAND | wxALL, 10);
|
|
|
|
// Font picker section
|
|
wxStaticBoxSizer* fontBox = new wxStaticBoxSizer(wxVERTICAL, this, "Text Font (wxFontPickerCtrl)");
|
|
|
|
wxBoxSizer* fontRow = new wxBoxSizer(wxHORIZONTAL);
|
|
fontRow->Add(new wxStaticText(this, wxID_ANY, "Schematic Text Font:"), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
|
|
m_fontPicker = new wxFontPickerCtrl(this, ID_FONT_PICKER,
|
|
wxFont(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL),
|
|
wxDefaultPosition, wxDefaultSize, wxFNTP_DEFAULT_STYLE);
|
|
fontRow->Add(m_fontPicker, 1, wxEXPAND);
|
|
fontBox->Add(fontRow, 0, wxEXPAND | wxALL, 10);
|
|
|
|
// Font preview
|
|
m_fontPreview = new wxStaticText(this, wxID_ANY, "Sample Text: KiCad WASM Port - R1 10k VCC GND");
|
|
m_fontPreview->SetFont(wxFont(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
|
|
fontBox->Add(m_fontPreview, 0, wxALL, 10);
|
|
|
|
mainSizer->Add(fontBox, 0, wxEXPAND | wxALL, 10);
|
|
|
|
// Event log
|
|
wxStaticBoxSizer* logBox = new wxStaticBoxSizer(wxVERTICAL, this, "Event Log");
|
|
m_log = new wxTextCtrl(this, wxID_ANY, "",
|
|
wxDefaultPosition, wxSize(-1, 100), wxTE_MULTILINE | wxTE_READONLY);
|
|
logBox->Add(m_log, 1, wxEXPAND | wxALL, 5);
|
|
mainSizer->Add(logBox, 0, wxEXPAND | wxALL, 10);
|
|
|
|
SetSizer(mainSizer);
|
|
CreateStatusBar();
|
|
SetStatusText("Ready - Picker controls test");
|
|
|
|
UpdatePreview();
|
|
LogEvent("Picker controls test app started");
|
|
|
|
#ifdef __EMSCRIPTEN__
|
|
EM_ASM({
|
|
console.log('[PICKERS_TEST] wxPicker controls test app started successfully');
|
|
});
|
|
#endif
|
|
}
|
|
|
|
void PickersTestFrame::LogEvent(const wxString& msg)
|
|
{
|
|
#ifdef __EMSCRIPTEN__
|
|
EM_ASM({
|
|
console.log('[PICKERS_EVENT] ' + UTF8ToString($0));
|
|
}, msg.c_str().AsChar());
|
|
#endif
|
|
|
|
if (!m_log)
|
|
return;
|
|
m_log->AppendText(msg + "\n");
|
|
SetStatusText(msg);
|
|
}
|
|
|
|
void PickersTestFrame::UpdatePreview()
|
|
{
|
|
// Update preview panel with gradient of selected colors
|
|
// For simplicity, just use the first color as background
|
|
if (m_previewPanel && m_colourPicker1) {
|
|
m_previewPanel->SetBackgroundColour(m_colourPicker1->GetColour());
|
|
m_previewPanel->Refresh();
|
|
}
|
|
}
|
|
|
|
void PickersTestFrame::OnColourChanged(wxColourPickerEvent& evt)
|
|
{
|
|
wxColour col = evt.GetColour();
|
|
wxString hexColor = wxString::Format("#%02X%02X%02X", col.Red(), col.Green(), col.Blue());
|
|
|
|
wxString pickerName;
|
|
switch (evt.GetId()) {
|
|
case ID_COLOUR_PICKER_1: pickerName = "Front Copper"; break;
|
|
case ID_COLOUR_PICKER_2: pickerName = "Back Copper"; break;
|
|
case ID_COLOUR_PICKER_3: pickerName = "Silkscreen"; break;
|
|
default: pickerName = "Unknown"; break;
|
|
}
|
|
|
|
LogEvent(wxString::Format("Color changed: %s = %s", pickerName, hexColor));
|
|
UpdatePreview();
|
|
}
|
|
|
|
void PickersTestFrame::OnFontChanged(wxFontPickerEvent& evt)
|
|
{
|
|
wxFont font = evt.GetFont();
|
|
m_fontPreview->SetFont(font);
|
|
m_fontPreview->Refresh();
|
|
|
|
LogEvent(wxString::Format("Font changed: %s, %dpt, %s",
|
|
font.GetFaceName(),
|
|
font.GetPointSize(),
|
|
font.GetWeight() == wxFONTWEIGHT_BOLD ? "Bold" : "Normal"));
|
|
}
|