diff --git a/src/common/ConfigManager.cpp b/src/common/ConfigManager.cpp index 322ba952..251f0fb2 100644 --- a/src/common/ConfigManager.cpp +++ b/src/common/ConfigManager.cpp @@ -133,6 +133,8 @@ bool mirroringEnable = true; bool parseDebug = true; bool speedHack = false; bool speedup = false; +bool gbaLcdFilter = true; +bool gbLcdFilter = false; const char* aviRecordDir; const char* batteryDir; const char* biosFileNameGB; diff --git a/src/common/ConfigManager.h b/src/common/ConfigManager.h index d7fbe81d..0b7e5974 100644 --- a/src/common/ConfigManager.h +++ b/src/common/ConfigManager.h @@ -25,6 +25,8 @@ extern bool mirroringEnable; extern bool parseDebug; extern bool speedHack; extern bool speedup; +extern bool gbaLcdFilter; +extern bool gbLcdFilter; extern char *rewindMemory; extern const char *aviRecordDir; extern const char *biosFileNameGB; diff --git a/src/wx/cmdevents.cpp b/src/wx/cmdevents.cpp index b99a7c5c..d3efceb5 100644 --- a/src/wx/cmdevents.cpp +++ b/src/wx/cmdevents.cpp @@ -2883,6 +2883,26 @@ EVT_HANDLER(AGBPrinter, "Enable AGB printer") update_opts(); } +EVT_HANDLER(GBALcdFilter, "Enable LCD filter") +{ + GetMenuOptionBool("GBALcdFilter", gbaLcdFilter); + utilUpdateSystemColorMaps(gbaLcdFilter); + update_opts(); +} + +EVT_HANDLER(GBLcdFilter, "Enable LCD filter") +{ + GetMenuOptionBool("GBLcdFilter", gbLcdFilter); + utilUpdateSystemColorMaps(gbLcdFilter); + update_opts(); +} + +EVT_HANDLER(GBColorOption, "Enable GB color option") +{ + GetMenuOptionInt("GBColorOption", gbColorOption, 1); + update_opts(); +} + EVT_HANDLER(ApplyPatches, "Apply IPS/UPS/IPF patches if found") { GetMenuOptionInt("ApplyPatches", autoPatch, 1); diff --git a/src/wx/opts.cpp b/src/wx/opts.cpp index 9e770c9b..f9155814 100644 --- a/src/wx/opts.cpp +++ b/src/wx/opts.cpp @@ -208,6 +208,8 @@ opt_desc opts[] = { /// GB STROPT("GB/BiosFile", "", wxTRANSLATE("BIOS file to use for GB, if enabled"), gopts.gb_bios), + INTOPT("GB/ColorOption", "GBColorOption", wxTRANSLATE("GB color enhancement, if enabled"), gbColorOption, 0, 1), + BOOLOPT("GB/LCDFilter", "GBLcdFilter", wxTRANSLATE("Apply LCD filter, if enabled"), gbLcdFilter), STROPT("GB/GBCBiosFile", "", wxTRANSLATE("BIOS file to use for GBC, if enabled"), gopts.gbc_bios), NOOPT(wxT("GB/Palette0"), "", wxTRANSLATE("The default palette, as 8 comma-separated 4-digit hex integers (rgb555).")), NOOPT(wxT("GB/Palette1"), "", wxTRANSLATE("The first user palette, as 8 comma-separated 4-digit hex integers (rgb555).")), @@ -219,6 +221,7 @@ opt_desc opts[] = { /// GBA STROPT("GBA/BiosFile", "", wxTRANSLATE("BIOS file to use, if enabled"), gopts.gba_bios), + BOOLOPT("GBA/LCDFilter", "GBALcdFilter", wxTRANSLATE("Apply LCD filter, if enabled"), gbaLcdFilter), #ifndef NO_LINK BOOLOPT("GBA/LinkAuto", "LinkAuto", wxTRANSLATE("Enable link at boot"), gopts.link_auto), INTOPT("GBA/LinkFast", "SpeedOn", wxTRANSLATE("Enable faster network protocol by default"), linkHacks, 0, 1), diff --git a/src/wx/panel.cpp b/src/wx/panel.cpp index 037f610a..92fd377e 100644 --- a/src/wx/panel.cpp +++ b/src/wx/panel.cpp @@ -1082,6 +1082,9 @@ void GameArea::OnIdle(wxIdleEvent& event) mf->PollJoysticks(); + if (loaded == IMAGE_GBA) utilUpdateSystemColorMaps(gbaLcdFilter); + else if (loaded == IMAGE_GB) utilUpdateSystemColorMaps(gbLcdFilter); + if (!paused) { HidePointer(); event.RequestMore(); @@ -1469,8 +1472,7 @@ DrawingPanelBase::DrawingPanelBase(int _width, int _height) RGB_LOW_BITS_MASK = 0x0421; } - // FIXME: should be "true" for GBA carts if lcd mode selected - // which means this needs to be re-run at pref change time + // needs to be run once before the first draw utilUpdateSystemColorMaps(false); } diff --git a/src/wx/xrc/MainMenu.xrc b/src/wx/xrc/MainMenu.xrc index 9aeadd6c..92e20416 100644 --- a/src/wx/xrc/MainMenu.xrc +++ b/src/wx/xrc/MainMenu.xrc @@ -508,6 +508,10 @@ 1 + + + 1 + @@ -515,6 +519,14 @@ + + + 1 + + + + 1 + 1