2015-06-12 13:14:38 +00:00
|
|
|
#if defined(Hiro_Label)
|
2013-03-15 13:11:33 +00:00
|
|
|
|
2015-06-12 13:14:38 +00:00
|
|
|
namespace hiro {
|
|
|
|
|
|
|
|
auto pLabel::construct() -> void {
|
|
|
|
hwnd = CreateWindow(L"hiroLabel", L"",
|
Update to v106r44 release.
byuu says:
Changelog:
- hiro/Windows: use `WS_CLIPSIBLINGS` on Label to prevent resize
drawing issues
- bsnes: correct viewport resizing
- bsnes: speed up window resizing a little bit
- bsnes: fix the cheat editor list enable checkbox
- bsnes: fix the state manager filename display in game ROM mode
- bsnes: fix the state manager save/rename/remove functionality in
game ROM mode
- bsnes: correct path searching for IPS and BPS patches in game ROM
mode
- bsnes: patch BS-X town cartridge to disable play limits
- bsnes: do not load (program,data,expansion).(rom,flash) from disk in
game pak mode
- this is required to support soft-patching and ROM hacks
- bsnes: added speed mode selection (50%, 75%, 100%, 150%, 200%);
maintains proper pitch
- bsnes: added icons to the menubar
- this is particularly useful to tell game ROMs from game paks in
the load recent game menu
- bsnes: added emblem at bottom left of status bar to indicate if a
game is verified or not
- verified means it is in the icarus verified game dump database
- the verified diamond is orange; the unverified diamond is blue
- bsnes: added an option (which defaults to off) to warn when loading
unverified games
- working around a bug in GTK, I have to use the uglier
MessageWindow instead of MessageDialog
- bsnes: added (non-functional) link to <https://doc.byuu.org/bsnes/>
to the help menu
- bsnes: added GUI setting to toggle memory auto-save feature
- bsnes: added GUI setting to toggle capturing a backup save state
when closing the emulator
- bsnes: made auto-saving states on exit an option
- bsnes: added an option to auto-load the auto-saved state on load
- basically, the two combined implements auto-resume
- bsnes: when firmware is missing, offer to take the user to the
online help documentation
- bsnes: added fast PPU option to disable the sprite limit
- increase from 32 items/line + 34 tiles/line to 128 items/line +
128 tiles/line
- technically, 1024 tiles/line are possible with 128 sprites at
64-width
- but this is just a waste of cache locality and worst-case
performance; it'll never happen
Errata:
- hiro/Windows: fallthrough on Canvas `WM_ERASEBKGND` to prevent
startup flicker
2018-06-28 06:28:27 +00:00
|
|
|
WS_CHILD | WS_CLIPSIBLINGS,
|
2015-06-12 13:14:38 +00:00
|
|
|
0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0);
|
|
|
|
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)&reference);
|
|
|
|
pWidget::_setState();
|
|
|
|
setText(state().text);
|
2011-03-22 12:56:49 +00:00
|
|
|
}
|
|
|
|
|
2015-06-12 13:14:38 +00:00
|
|
|
auto pLabel::destruct() -> void {
|
|
|
|
DestroyWindow(hwnd);
|
2011-02-24 09:25:20 +00:00
|
|
|
}
|
|
|
|
|
2015-06-12 13:14:38 +00:00
|
|
|
auto pLabel::minimumSize() const -> Size {
|
Update to v100 release.
byuu says:
higan has finally reached v100!
I feel it's important to stress right away that this is not "version
1.00", nor is it a major milestone release. Rather than arbitrary version
numbers, all of my software simply bumps version numbers by one for each
official release. As such, higan v100 is simply higan's 100th release.
That said, the primary focus of this release has been code
clean-ups. These are always somewhat dangerous in that regressions are
possible. We've tested through sixteen WIP revisions, one of which was
open to the public, to try and minimize any regressions. But all the same,
please report any regressions if you discover any.
Changelog (since v099):
FC: render during pixels 1-256 instead of 0-255 [hex_usr]
FC: rewrote controller emulation code
SFC: 8% speedup over the previous release thanks to PPU optimizations
SFC: fixed nasty DB address wrapping regression from v099
SFC: USART developer controller removed; superseded by 21fx
SFC: Super Multitap option removed from controller port 1; ports
renamed 2-5
SFC: hidden option to experiment with 128KB VRAM (strictly for novelty)
higan: audio volume no longer divided by number of audio streams
higan: updated controller polling code to fix possible future mapping
issues
higan: replaced nall/stream with nall/vfs for file-loading subsystem
tomoko: can now load multi-slotted games via command-line
tomoko: synchronize video removed from UI; still available in the
settings file
tomoko, icarus: can navigate to root drive selection on Windows
all: major code cleanups and refactoring (~1MB diff against v099)
Note 1: the audio volume change means that SGB and MSU1 games won't
lose half the volume on the SNES sounds anymore. However, if one goes
overboard and drives the sound all the way to max volume with the MSU1,
clamping may occur. The obvious solution is not to drive volume that high
(it will vastly overpower the SNES audio, which usually never exceeds
25% volume.) Another option is to lower the volume in the audio settings
panel to 50%. In general, neither is likely to ever be necessary.
Note 2: the synchronize video option was hidden from the UI because it
is no longer useful. With the advent of compositors, the loss of the
complicated timing settings panel, support for the WonderSwan and its
75hz display, the need to emulate variable refresh rate behaviors in the
Game Boy, the unfortunate latency spike and audio distortion caused by
long Vsync pauses, and the arrival of adaptive sync technology ... it
no longer makes sense to present this option. However, as stated, you
can edit settings.bml to enable this option anyway if you insist and
understand the aforementioned risks.
Changelog (since v099r16 open beta):
- fixed MSU1 audio sign extension
- fixed compilation with SGB support disabled
- icarus can now navigate to root directory
- fixed compilation issues with OS X port
- (hopefully) fixed label height issue with hiro that affected icarus
import dialog
- (mostly) fixed BS Memory, Sufami Turbo slot loading
Errata:
- forgot to remove the " - Slot A", " - Slot B" suffixes for Sufami
Turbo slot loading
- this means you have to navigate up one folder and then into Sufami
Turbo/ to load games for this system
- moving WonderSwan orientation controls to the device slot is causing
some nastiness
- can now select orientation from the main menu, but it doesn't rotate
the display
2016-07-08 12:04:32 +00:00
|
|
|
auto size = pFont::size(self().font(true), state().text ? state().text : " ");
|
2015-06-12 13:14:38 +00:00
|
|
|
return {size.width(), size.height()};
|
2011-09-05 03:48:23 +00:00
|
|
|
}
|
|
|
|
|
Update to v094r40 release.
byuu says:
Changelog:
- updated to newest hiro API
- SFC performance profile builds once again
- hiro: Qt port completed
Errata 1: the hiro/Qt target won't run tomoko just yet. Starts by
crashing inside InputSettings because hiro/Qt isn't forcefully selecting
the first item added to a ComboButton just yet. Even with a monkey patch
to get around that, the UI is incredibly unstable. Lots of geometry
calculation bugs, and a crash when you try and access certain folders in
the browser dialog. Lots of work left to be done there, sadly.
Errata 2: the hiro/Windows port has black backgrounds on all ListView
items. It's because I need to test for unassigned colors and grab the
default Windows brush colors in those cases.
Note: alternating row colors on multi-column ListView widgets is gone
now. Not a bug. May add it back later, but I'm not sure. It doesn't
interact nicely with per-cell background colors.
Things left to do:
First, I have to fix the Windows and Qt target bugs.
Next, I need to go through and revise the hiro API even more (nothing
too major.)
Next, I need to update icarus to use the new hiro API, and add support
for the SFC games database.
Next, I have to rewrite my TSV->BML cheat code tool.
Next, I need to post a final WIP of higan+icarus publicly and wait a few
days.
Next, I need to fix any bugs reported from the final WIP that I can.
Finally, I should be able to release v095.
2015-08-18 10:18:00 +00:00
|
|
|
auto pLabel::setAlignment(Alignment alignment) -> void {
|
|
|
|
InvalidateRect(hwnd, 0, false);
|
2015-06-12 13:14:38 +00:00
|
|
|
}
|
|
|
|
|
2018-06-24 04:53:44 +00:00
|
|
|
auto pLabel::setBackgroundColor(Color color) -> void {
|
|
|
|
InvalidateRect(hwnd, 0, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
auto pLabel::setForegroundColor(Color color) -> void {
|
|
|
|
InvalidateRect(hwnd, 0, false);
|
|
|
|
}
|
|
|
|
|
2015-06-12 13:14:38 +00:00
|
|
|
auto pLabel::setText(const string& text) -> void {
|
|
|
|
SetWindowText(hwnd, utf16_t(text));
|
|
|
|
InvalidateRect(hwnd, 0, false);
|
2011-09-05 03:48:23 +00:00
|
|
|
}
|
|
|
|
|
2015-06-12 13:14:38 +00:00
|
|
|
static auto CALLBACK Label_windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT {
|
|
|
|
auto label = (mLabel*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
|
|
|
|
if(!label) return DefWindowProc(hwnd, msg, wparam, lparam);
|
|
|
|
auto window = label->parentWindow(true);
|
|
|
|
if(!window) return DefWindowProc(hwnd, msg, wparam, lparam);
|
2011-02-24 09:25:20 +00:00
|
|
|
|
2013-11-28 10:32:53 +00:00
|
|
|
switch(msg) {
|
|
|
|
case WM_GETDLGCODE: return DLGC_STATIC | DLGC_WANTCHARS;
|
Update to v106r42 release.
byuu says:
Changelog:
- emulator: added `Thread::setHandle(cothread_t)`
- icarus: added special heuristics support for the Tengai Maykou Zero
fan translation
- board identifier is: EXSPC7110-RAM-EPSONRTC (match on SPC7110 +
ROM size=56mbit)
- board ROM contents are: 8mbit program, 40mbit data, 8mbit
expansion (sizes are fixed)
- bsnes: show messages on game load, unload, and reset
- bsnes: added support for BS Memory and Sufami Turbo games
- bsnes: added support for region selection (Auto [default], NTSC,
PAL)
- bsnes: correct presentation window size from 223/239 to 224/240
- bsnes: add SA-1 internal RAM on cartridges with BS Memory slot
- bsnes: fixed recovery state to store inside .bsz archive
- bsnes: added support for custom manifests in both game pak and game
ROM modes
- bsnes: added icarus game database support (manifest → database →
heuristics)
- bsnes: added flexible SuperFX overclocking
- bsnes: added IPS and BPS soft-patching support to all ROM types
(sfc,smc,gb,gbc,bs,st)
- can load patches inside of ZIP archives (matches first “.ips” or
“.bps” file)
- bsnes/ppu: cache interlace/overscan/vdisp (277 → 291fps with fast
PPU)
- hiro/Windows: faster painting of Label widget on expose
- hiro/Windows: immediately apply LineEdit::setBackgroundColor changes
- hiro/Qt: inherit Window backgroundColor when one is not assigned to
Label
Errata:
- sfc/ppu-fast: remove `renderMode7Hires()` function (the body isn't in
the codebase)
- bsnes: advanced note label should probably use a lighter text color
and/or smaller font size instead of italics
I didn't test the soft-patching at all, as I don't have any patches on
my dev box. If anyone wants to test, that'd be great. The Tengai Makyou
Zero fan translation would be a great test case.
2018-06-26 03:17:26 +00:00
|
|
|
case WM_ERASEBKGND:
|
2013-11-28 10:32:53 +00:00
|
|
|
case WM_PAINT: {
|
2011-02-24 09:25:20 +00:00
|
|
|
PAINTSTRUCT ps;
|
|
|
|
BeginPaint(hwnd, &ps);
|
2013-11-28 10:32:53 +00:00
|
|
|
RECT rc;
|
2011-02-24 09:25:20 +00:00
|
|
|
GetClientRect(hwnd, &rc);
|
2018-06-24 04:53:44 +00:00
|
|
|
|
|
|
|
auto hdcMemory = CreateCompatibleDC(ps.hdc);
|
|
|
|
auto hbmMemory = CreateCompatibleBitmap(ps.hdc, rc.right - rc.left, rc.bottom - rc.top);
|
|
|
|
SelectObject(hdcMemory, hbmMemory);
|
|
|
|
|
2016-08-08 10:04:15 +00:00
|
|
|
uint length = GetWindowTextLength(hwnd);
|
2011-02-24 09:25:20 +00:00
|
|
|
wchar_t text[length + 1];
|
|
|
|
GetWindowText(hwnd, text, length + 1);
|
|
|
|
text[length] = 0;
|
2018-06-24 04:53:44 +00:00
|
|
|
|
|
|
|
//todo: use DrawThemeParentBackground if Label is inside TabFrame
|
|
|
|
if(auto color = label->backgroundColor()) {
|
|
|
|
auto brush = CreateSolidBrush(CreateRGB(color));
|
|
|
|
FillRect(hdcMemory, &rc, brush);
|
|
|
|
DeleteObject(brush);
|
|
|
|
} else if(auto brush = window->self()->hbrush) {
|
|
|
|
FillRect(hdcMemory, &rc, brush);
|
|
|
|
} else {
|
|
|
|
DrawThemeParentBackground(hwnd, hdcMemory, &rc);
|
|
|
|
}
|
|
|
|
|
|
|
|
SetBkMode(hdcMemory, TRANSPARENT);
|
|
|
|
SelectObject(hdcMemory, label->self()->hfont);
|
|
|
|
DrawText(hdcMemory, text, -1, &rc, DT_CALCRECT | DT_END_ELLIPSIS);
|
2016-08-08 10:04:15 +00:00
|
|
|
uint height = rc.bottom;
|
2018-06-24 04:53:44 +00:00
|
|
|
|
2011-02-24 09:25:20 +00:00
|
|
|
GetClientRect(hwnd, &rc);
|
|
|
|
rc.top = (rc.bottom - height) / 2;
|
|
|
|
rc.bottom = rc.top + height;
|
2016-08-08 10:04:15 +00:00
|
|
|
uint horizontalAlignment = DT_CENTER;
|
|
|
|
if(label->alignment().horizontal() < 0.333) horizontalAlignment = DT_LEFT;
|
|
|
|
if(label->alignment().horizontal() > 0.666) horizontalAlignment = DT_RIGHT;
|
|
|
|
uint verticalAlignment = DT_VCENTER;
|
|
|
|
if(label->alignment().vertical() < 0.333) verticalAlignment = DT_TOP;
|
|
|
|
if(label->alignment().vertical() > 0.666) verticalAlignment = DT_BOTTOM;
|
2018-06-24 04:53:44 +00:00
|
|
|
if(auto color = label->foregroundColor()) {
|
|
|
|
SetTextColor(hdcMemory, CreateRGB(color));
|
|
|
|
}
|
|
|
|
DrawText(hdcMemory, text, -1, &rc, DT_END_ELLIPSIS | horizontalAlignment | verticalAlignment);
|
|
|
|
|
|
|
|
GetClientRect(hwnd, &rc);
|
|
|
|
BitBlt(ps.hdc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, hdcMemory, 0, 0, SRCCOPY);
|
|
|
|
DeleteObject(hbmMemory);
|
|
|
|
DeleteObject(hdcMemory);
|
2011-02-24 09:25:20 +00:00
|
|
|
EndPaint(hwnd, &ps);
|
Update to v106r42 release.
byuu says:
Changelog:
- emulator: added `Thread::setHandle(cothread_t)`
- icarus: added special heuristics support for the Tengai Maykou Zero
fan translation
- board identifier is: EXSPC7110-RAM-EPSONRTC (match on SPC7110 +
ROM size=56mbit)
- board ROM contents are: 8mbit program, 40mbit data, 8mbit
expansion (sizes are fixed)
- bsnes: show messages on game load, unload, and reset
- bsnes: added support for BS Memory and Sufami Turbo games
- bsnes: added support for region selection (Auto [default], NTSC,
PAL)
- bsnes: correct presentation window size from 223/239 to 224/240
- bsnes: add SA-1 internal RAM on cartridges with BS Memory slot
- bsnes: fixed recovery state to store inside .bsz archive
- bsnes: added support for custom manifests in both game pak and game
ROM modes
- bsnes: added icarus game database support (manifest → database →
heuristics)
- bsnes: added flexible SuperFX overclocking
- bsnes: added IPS and BPS soft-patching support to all ROM types
(sfc,smc,gb,gbc,bs,st)
- can load patches inside of ZIP archives (matches first “.ips” or
“.bps” file)
- bsnes/ppu: cache interlace/overscan/vdisp (277 → 291fps with fast
PPU)
- hiro/Windows: faster painting of Label widget on expose
- hiro/Windows: immediately apply LineEdit::setBackgroundColor changes
- hiro/Qt: inherit Window backgroundColor when one is not assigned to
Label
Errata:
- sfc/ppu-fast: remove `renderMode7Hires()` function (the body isn't in
the codebase)
- bsnes: advanced note label should probably use a lighter text color
and/or smaller font size instead of italics
I didn't test the soft-patching at all, as I don't have any patches on
my dev box. If anyone wants to test, that'd be great. The Tengai Makyou
Zero fan translation would be a great test case.
2018-06-26 03:17:26 +00:00
|
|
|
|
|
|
|
return msg == WM_ERASEBKGND;
|
2013-11-28 10:32:53 +00:00
|
|
|
}
|
2011-02-24 09:25:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return DefWindowProc(hwnd, msg, wparam, lparam);
|
|
|
|
}
|
2013-03-15 13:11:33 +00:00
|
|
|
|
|
|
|
}
|
2015-06-12 13:14:38 +00:00
|
|
|
|
|
|
|
#endif
|