* Got rid of more UI globals.
* Cache more metrics in system/software selection menus.
* Don't lose a BDF font specified on the command line when changing font
size via the UI.
* For win32 debugger, behave as though most recent history item was just
entered when restoring session state.
Also reworked calculation of menu geometry in general, and limited width
of left panel on system/software selection menus.
Fixes images in the right panel and icons on the system/software
selection menus not being scaled correctly when the window is resized
(MT08539 is an example of this).
Fixes bad font size selection at low resolutions when using bitmap fonts
like uismall.bdf (GitHub #7105).
Fixes collapse/expand arrows on left/right panels of system/softwre
selection menus getting bigger if the window is made narrower.
This implements the same workaround for double lo-res that was already
used for double hi-res: shift the whole image right by one pixel (losing
the rightmost pixel) in monochrome mode so that the NTSC shader is
happy. This doesn't affect color mode.
Following the merge of text_update and plot_text_character (93500d7),
this merges apple2_state::screen_update{,_jp,_ultr},
apple2e_state::screen_update, and a2_video_device::screen_update_GS_8bit
into a single function in a2_video_device.
This algorithm decodes the scan line to 560 bits in the same way as the
hardware (and MAME's monochrome modes) and uses a 7-bit sliding window
on the decoded bits. The result is the same as before if all high bits
are clear. If high bits are set, the output is shifted right by one
pixel as it should be, and the unique artifact colors at the boundaries
between bytes with opposite high bits are simulated. (For more about
those colors see page 8-20 of Understanding the Apple II by Jim Sather.)
The monochrome modes are rewritten to use the same decoding logic, which
incidentally fixes some bugs: the left pixel of a 14-pixel group was not
updated at 0-to-1 bit-7 transitions (leaving old pixels on the screen),
the test against cliprect was incorrect, and m_dhires was ignored.
m_dhires_artifact_map was just a rotate-four-bits-by-2 lookup table.
The code that used it was already doing four-bit rotations by arbitrary
amounts, so it is slightly simplified by eliminating the table.
a2_video_device::{text_update,plot_text_character} already had a
template parameter to distinguish II/II+ from IIe/IIc. Extending it
enables {text_update,plot_text_character}{_ultr,_jplus,GS} to be merged
in as well.
It was not referenced anywhere in the source tree, and was just a copy
of hgr_update with the address of page 2 changed from $4000 to $A000.
If support for this is ever needed, it could be handled by adding a
parameter to hgr_update.