Commit Graph
44 Commits
Author SHA1 Message Date
jwinterm 79daae6796 fix(send): the scene sits in the middle of the space below the form
It was butted straight up against the Clear/Send row, so a band of night
sky touched a button and read as part of the form. Now there is a fixed
14px gap under the buttons and a stretch either side of the scene, which
centres it in whatever space the form leaves.

And the coins come in handfuls. One at a time reads as a metronome, so
Send now has three of them: usually one goes past, sometimes two, and
about one time in seven all three, staggered by a beat so they arrive
together rather than in a rank. Each rolls its own height, size, duration
and spin direction.

Claude-Session: https://claude.ai/code/session_01VLQ5DsgKv23osGANoFT3zF
2026-09-03 15:10:48 -04:00
jwinterm f1144c483e fix(scene): the wipeout is a skid, the win says so, and each tab gets its own amount of scene
The crash launched him. Rotating 66 degrees about a pivot inside the
sprite, shearing him through the middle and scaling him about the same
point left him diagonal in mid-air, elongated, nowhere near the ground —
a stunt, not a trip.

It is now a face-plant and a skid: 26 degrees, a 21px drop so the snout
reaches the grass, and 26px of forward slide along the ground with the
dust coming up. The shear is gone entirely. The pivot is the snout at the
grass line rather than a point inside the body.

The other half of looking airborne was the frozen frame: stopping a run
cycle leaves whatever mid-stride pose the gif was on, legs extended. He
now lands on frame 4, the one with the legs tucked under him.

Clearing the field and getting across now says WIN, with the tally, the
way eating it says GAME OVER. Before, a won lap just ended and the next
one opened with a doge sitting down, which reads as nothing having
happened.

And the scene comes in three amounts, because a form should not have to
compete with a dog: History runs the whole thing, Receive is a doge
sitting in the field, Send is money blowing past and nothing else. One
QML file, gated by mode; the beat machine only runs where there is a run.

Claude-Session: https://claude.ai/code/session_01VLQ5DsgKv23osGANoFT3zF
2026-09-03 13:07:04 -04:00
jwinterm 252b358baa feat(scene): per-lap variety, the occasional face-plant, and a sky per tab
Every tab was running the identical eight seconds forever. Three changes:

- Each lap rolls its own timing: 3-5s of empty field, and the money now enters
  on its own delay at its own pace instead of shadowing the doge every time.
- Roughly one lap in six the doge eats it partway down the field: he tips
  nose-first onto the grass, GAME OVER comes up, and the coins he never reached
  are still sitting there. Costs no new art — it is the running sprite pivoted
  on its own feet.
- A `variant` on SceneWidget picks the sky: dusk (History, lock screen), dawn
  (Receive), night (Send, with stars and a moon instead of the sun).

The cycle is now a timer-driven state machine rather than one SequentialAnimation.
That is not stylistic: a lap that rolls its own durations has to assign them
somewhere, and assigning a duration to a child of a *running* SequentialAnimation
makes the group recompute and re-enter its own ScriptAction until the JS stack
blows. Qt flags the binding form of the same mistake as a binding loop.

Verified by headless qml6 render: a forced trip lap, and a clean run with no QML
warnings.
2026-08-31 13:23:41 -04:00
jwinterm 9bd8cb0676 feat(send,receive): the ambient scene, as a layout item this time
Send had a large empty region under the form doing nothing, and Receive had
nothing at all. Both get the scene back — but as real layout items, not as the
overlay that painted over the forms last time.

Send: the form only ever needed the top of the tab, so the QFormLayout is now
wrapped in a vbox and the scene takes the rest. The widget's vertical size
policy was Maximum, which made it hug the form; it owns the whole tab now. The
form itself is untouched, and nothing is drawn on top of the address or amount
fields.

Receive: a short banner under the address table.

Built and smoke-tested from the AppImage lane.
2026-08-31 12:48:41 -04:00
jwinterm 1828353d52 fix(send,receive): drop the corner doge that painted over the forms
IdleDoge scaled its movie from `currentImage()` after `jumpToFrame(0)`, but the
first frame is not decoded at that point, so the size came back null, the
scaling was skipped, and the QLabel ended up at the GIF's full 500x397. Parked
at the bottom-right of the form it painted an opaque 500x397 slab of window
background over the lower half of Send and over the Receive address table.

Send is the screen where money leaves the wallet; it does not get an overlay
sitting on top of the address and amount fields at all. Receive loses it for
the same reason. SendWidget.cpp and ReceiveWidget.cpp are back to exactly their
pre-ambient state, and the widget is removed rather than left unused.

The ambient scene keeps the places where it has its own real estate: the lock
screen, the History banner, and the mining tab.
2026-08-31 12:15:00 -04:00
jwinterm 6942cbb459 feat: ambient silliness across the app (reduced-motion aware)
- Lock screen: full ambient scene above the unlock form (the idle 'screensaver'
  — wallet auto-locks here) instead of a thin banner.
- History ('home'): full scene as a top banner.
- Send/Receive: IdleDoge — a small click-through sitting doge in the corner,
  the 'most quiet' idle for task screens.
- Mining keeps its own scene.
All gated by Config::reducedMotion (scenes freeze, doge shows a still frame).
2026-08-31 11:10:25 -04:00
jwinterm 527bcfae57 wowlet: wownero loose-string sweep + P0 send fix. Bump monero submodule -> gui@1ed9d64c (drops feather's monero-checkpoint check_rct_distribution() that made every send throw 'Output distribution size too small'). feather-src: local-node probe + wizard port 18081->34568 (Utils.cpp getDefaultRpcPort, PageNetwork.ui); confirmationsRequired + lock display 10->4 = wownero spendable age (TransactionRow, TxInfoDialog, BalanceDialog, SendWidget); amount precision 12->11 (config, SettingsDialog); tx-pool backlog x2->x5 (5-min blocks); revuo + CCS off default plugins 2026-06-19 14:10:58 -04:00
jwinterm ccd53f59af wowlet: branding sweep — XMR→WOW, title/dir, .ui+wizard text Feather→wowlet/Monero→Wownero, flip+recolor sidebar (M→W, pink/yellow) 2026-06-18 18:27:28 -04:00
tobtoht 5f239d80b4 main: remove donations 2025-08-03 19:27:12 +02:00
tobtoht dff4752e82 update copyright for 2025 2025-02-20 18:52:03 +01:00
tobtoht 796d4dd3f0 send: fix uri handling from scanned QR code 2024-10-10 14:03:46 +02:00
tobtoht 8deae7398d build: fix WITH_SCANNER=OFF 2024-10-02 00:06:14 +02:00
tobtoht 7c4bffe5dd contacts: fill description on pay to 2024-08-15 20:12:54 +02:00
tobtoht 5ba53a3702 send: set pay to many output limit to 15 2024-05-03 21:32:26 +02:00
tobtoht deb9d7ff63 manual input selection, subtract fee from amount 2024-04-28 21:28:09 +02:00
tobtoht 4c7015f76f update copyright to 2024 2024-01-01 18:07:58 +01:00
tobtoht 55a8955377 send: disable send button during tx broadcast 2023-12-15 14:13:14 +01:00
tobtoht 51b0fcc19d airgapped signing with UR 2023-12-04 16:06:33 +01:00
tobtoht 9b5aae486f send: improve error messages for not_enough_unlocked_money 2023-10-26 01:24:01 +02:00
tobtoht a5135ecf8e Send: clear donate description if address was changed 2023-10-16 22:13:59 +02:00
tobtoht dabe88340f cmake: drop support for Qt 5 2023-10-13 00:12:42 +02:00
tobtoht 8a634dae13 scanner: replace zbar with zxing 2023-10-10 14:41:45 +02:00
tobtoht 951f16e602 Documentation browser, improved error messages 2023-10-03 21:00:12 +02:00
tobtoht 32fa222c8d refactor: misc cleanup 2023-03-29 11:00:41 +02:00
tobtoht ba826c7705 refactor: merge qrcode directories 2023-03-29 09:39:03 +02:00
tobtoht 402bea3fd6 refactor: remove appcontext, cleanup Wallet 2023-03-01 03:05:56 +01:00
tobtoht 199e085709 send: don't allow fiat conversion if websocket is disabled 2023-02-13 10:41:07 +01:00
tobtoht 64f425badf update copyright for 2023 2023-01-02 20:31:22 +01:00
tobtoht 23d4b0cd1c Enable webcam QR scanner 2022-12-27 17:46:14 +01:00
tobtoht 952d8d9654 Bootstrappable builds (WIP) [2] 2022-12-21 16:21:27 +01:00
tobtoht c26793da56 Send: allow 'all' in Fiat mode 2022-05-22 19:13:19 +02:00
tobtoht 28c1973405 Show warning on corrupted keys 2022-03-12 13:53:46 +01:00
tobtoht fc0d5c2021 Qt6: remove QRegExp 2022-03-04 11:05:20 +01:00
tobtoht f8bc335720 Send: don't allow tx construction before sync is complete 2022-02-25 16:24:27 +01:00
tobtoht 4f4bb95b32 Fix a few clang-tidy inspections 2022-02-14 12:43:35 +01:00
tobtoht 938d2ddb4e Update copyright to 2022 2022-02-10 11:26:41 +01:00
tobtoht 0bc873c5cc Send: disable openalias button on resolve 2021-10-23 01:46:38 +02:00
tobtoht 779ae278f9 Send: resolve alias don't hang UI 2021-10-23 00:14:34 +02:00
tobtoht e512e539b6 PaymentRequestDialog 2021-10-01 19:10:46 +02:00
tobtoht 1816abc150 Send: don't open QrCodeScanDialog if no available cameras 2021-07-10 22:53:36 +02:00
tobtoht 5262e388f1 Send: clear all lines on data paste 2021-07-09 23:43:59 +02:00
tobtoht fe4d531b73 Send: paste Qr code image in pay to field 2021-07-08 00:48:17 +02:00
tobtoht a7333e5065 Send: focus amount field on fill 2021-07-02 18:01:11 +02:00
tobtoht 531cc5f980 Widgets: rename & cleanup 2021-06-28 19:48:23 +02:00