Commit Graph
387 Commits
Author SHA1 Message Date
David Richardson 00851abfa9 AppKit: Model CPRulerView and CPRulerMarker on NSRulerView and NSRulerMarker
Ruler classes departed from canonical NS versions, resulting in functional and visual gaps.:

markers were views that drew text characters and ignored their location argument, the ruler rebuilt its subviews on every update and had no origin offset, measurement units or reserved thicknesses, and CPTextView updated the ruler only on focus and typing attribute changes, had no ruler control methods, and never showed a right indent marker.

* AppKit.j: Import CPRulerMarker and CPRulerView.

* CPScrollView.j: Tile rulers by their required thickness, and give a ruler its scroll view when it is set.

* CPTextView/CPRulerMarker.j: Add CPRulerMarker as an object drawn by its ruler, with a marker location, an image and image origin, movability and removability, and tracking that adds, moves and removes markers through the client view.

* CPTextView/CPRulerView.j: Rewrite CPRulerView with an origin offset, registered measurement units defaulting to the user's region, reserved thicknesses for markers and an accessory view, Cocoa's client view methods, temporary ruler lines, and drawing in a single pass.

* CPTextView/CPTextView.j: Add usesRuler, isRulerVisible, setRulerVisible: and toggleRuler: with a Show Ruler or Hide Ruler title; update the ruler on every selection change; place tab stop, first line, head and tail indent markers relative to the start of the text, with SVG marker images and a context menu for changing tab types and resetting indents.

* Tests/Manual/TextEditor/DocumentWindowController.j: Show the ruler through setRulerVisible:.
2026-10-23 19:30:48 -06:00
David Richardson 66ea130c8d AppKit: Disable Undo and Redo when a text view does not allow undo
A text view handled undo: and redo: and registered its changes even when allowsUndo was NO, so Edit > Undo stayed enabled and did nothing.

Behaviour now follows canonical Cocoa: a text view that does not allow undo registers nothing and passes undo: and redo: on to the window, and Undo and Redo are enabled only when there is a change to undo or redo.

* CPTextView/CPTextView.j: Register changes only when undo is allowed, stop responding to undo: and redo: when it is not, and validate the Undo and Redo items against the undo manager.

* CPWindow/CPWindow.j: Validate the Undo and Redo items against the window's undo manager.

* Tests/AppKit/CPTextViewTest.j: Add tests for responding to undo:, registering changes and validating the Undo item.

* Tests/Manual/TextEditor/DocumentWindowController.j: Add toggleAllowsUndo: and validateMenuItem:, so that undo can be turned on and off for the active document.

* Tests/Manual/TextEditor/Resources/MainMenu.xib, Resources/MainMenu.cib: Add Edit > Allow Undo.

* Tests/Manual/TextEditor/WORKLIST.md: Remove the entry for this gap, record Allow Undo as tested, and add the key equivalent behaviour of disabled menu items for discussion.
2026-10-23 17:20:27 -06:00
David Richardson 5b852ca765 AppKit: first method-definition gates removed (Increment A)
- CPTextField, CPTokenField, CPTextView: the PLATFORM(DOM) gates
  around _inputElement (superclass and override) and _cumulativeOffset
  are removed; the methods now exist under both targets with runtime
  CPDOMAvailable guards returning nil (object methods) or a zero
  point (struct method) when no DOM is present
- contract change: under CommonJS these methods change from absent to
  present-and-inert; all callers are browser event paths never
  exercised by the theme blender or nib2cib
- zero preprocessor directives remain in these three files
- work-in-progress towards complete removal of CPP directives
2026-10-01 16:03:10 -06:00
David Richardson eda11e38ba Merge main: Tests/Manual revival, functional fixes
Merges 71 commits from main. Headline content: the Tests/Manual
integration test suite revived and reorganized after long disuse
(renames, new applications, updated cibs), restoring a large
integration validation surface. Functional fixes include replacing
unload-based termination with pagehide (back/forward cache
compatibility) and hardening CPTextField's input-element handling.

Conflict resolutions (local versions retained):

- AppKit/CPTextField.j: main's input-element logic carried, with this
  branch's preprocessor-removal sweep re-applied on top. Main's
  conditionals are re-expressed as runtime CPDOMAvailable guards; the
  _inputElement method-definition gate is retained.

- AppKit/Platform/CPPlatform.j: the DOM platform implementation stays
  inlined under the PLATFORM(DOM) gate. The split layout breaks the
  legacy build: the include fragment is compiled standalone by the
  source walk and cannot resolve its superclass. Main's pagehide
  termination fix is ported into the inlined section; the restored
  AppKit/Platform/DOM/CPPlatform.j fragment is deleted.

Verified: legacy build green through Foundation, AppKit and Tools;
Tests/Manual suite passing.
2026-10-01 14:44:51 -06:00
daboe01 55ee6de9cd fixed: copy could crash when first responder did not implement isRichText 2026-09-12 07:30:29 +02:00
David Richardson 61e885db5f Merge branch 'main' into refactor-remove-nativehost-target 2026-08-27 13:28:50 -06:00
daboe01 acf410776d Merge pull request #3279 from daboe01/whitespace-cleanup
fixed: usage of tab character instead of 4 spaces
2026-08-26 20:46:52 +02:00
daboe01 f85ac1ea10 new: constrain tab stop marker movement between preceding text and adjacent tab stops 2026-08-26 19:16:12 +02:00
daboe01 874792fa6e new: constrain tab stop marker dragging to preceding text boundary 2026-08-26 19:01:32 +02:00
daboe01 9ffa4decd4 fixed: indentation paddle dragging and clientView binding 2026-08-26 17:06:34 +02:00
David Richardson 1ffdcfc89e AppKit: CPTextView PLATFORM conditional removal
- CPTextView.j: 11 PLATFORM blocks resolved;
- work-in-progress towards complete removal of CPP directives
2026-08-24 08:45:35 -06:00
daboe01 567ec55875 fixed: usage of tab character instead of 4 spaces 2026-08-18 19:46:22 +02:00
David Richardson e5c34e3dd7 Remove NativeHost platform target; require CommonJS/Node for tooling
Cappuccino previously supported three platform contexts behind the
PLATFORM() preprocessor macro: Browser, CommonJS/Node, and a NativeHost
target. NativeHost is no longer supported; this removes it and
consolidates on Browser (for the app) and CommonJS/Node (still needed
by the toolchain itself, for theme compilation and testing).

PLATFORM(DOM) conditionals throughout AppKit governed both distinctions
at once - Browser vs NativeHost, and separately, DOM-dependent code vs
the CommonJS/Node build. Each conditional was reviewed individually:
NativeHost-only branches were removed, while branches needed for
CommonJS/Node were kept intact rather than collapsed to Browser-only.

Also included, found in the course of this work:
- Fixed two pre-existing duplicate instance-variable declarations
  (_ephemeralSubviews in CPView, _scrollingTimer in CPTextView)
- Added a missing @import for CPTextContainer.j in CPTextView.j so
  it resolves when compiled outside the full framework bundle
- Merged two Platform/DOM/*.j files into their parents to resolve a
  build-tool basename collision, preserving the CommonJS fallback path
2026-08-12 13:25:52 -06:00
David Richardson 1a9a42ff54 Replace #pragma mark with // MARK:
Replace objc directive with native Javascript version // MARK: to facilitate elimination of preproccsing pass.
2026-07-21 15:15:53 -06:00
daboe01 429dfd7467 new: Prefer e.data to capture the exact inserted character(s) from key entry 2026-06-24 16:50:05 +02:00
daboe01 535315485a Merge pull request #3235 from daboe01/paste-as-plain-text
New: standard key binding for pasteAsPlainText:
2026-06-20 14:10:49 +02:00
daboe01 c8789c5450 formatting 2026-06-20 12:32:10 +02:00
daboe01 766035f4b7 Fixed: baseline alignment in _CPLineFragment to prevent overlapping text descenders 2026-06-20 12:06:24 +02:00
daboe01 d40a151e05 new: colorpanel sync 2026-06-19 07:18:52 +02:00
daboe01 4c8fd58471 fixed: leaky abstraction 2026-06-17 19:22:36 +02:00
daboe01 d75c0ac452 improved: tab management 2026-06-16 17:28:03 +02:00
daboe01 77433a3a1c fixed: scrolling glitch 2026-06-16 07:16:14 +02:00
daboe01 1cad83aba8 initial display of the table 2026-06-14 21:06:51 +02:00
daboe01 14b5a67bf5 new: Clear the cached visible rect so it gets recalculated after size changes 2026-06-13 15:42:48 +02:00
daboe01 5c7215c455 new: apply ruler to current paragraph in case of no selection 2026-05-30 09:25:26 +02:00
daboe01 3b1c1c0886 fixed: tab could not be entered using the keyboard 2026-05-29 22:08:00 +02:00
daboe01 10bb6723f3 fixed: missing global symbols 2026-05-29 20:02:13 +02:00
daboe01 c58a5b520e fixed: tab copypaste 2026-05-29 18:19:03 +02:00
daboe01 c704880e13 improved: tabstop handles 2026-05-29 11:41:39 +02:00
daboe01 c94ed00f41 fixed: basic ruler view support 2026-05-29 10:46:10 +02:00
daboe01 453e8dbd2e Merge remote-tracking branch 'upstream/main' into new-cprulerview 2026-05-28 21:22:55 +02:00
daboe01 3aecb3ea98 fixed: missing import 2026-05-28 21:11:51 +02:00
daboe01 b39c3e8d4b fixed: caret is invisible at the end of the line 2026-03-14 13:01:58 +01:00
daboe01 5b820b270c fixed: smartpaste crash 2026-03-13 16:03:30 +01:00
daboe01 fca30325e4 Use setTimeout to prevent flickering on copy/paste 2026-03-03 18:18:32 +01:00
daboe01 d583403195 fixed: crash when changing typing attributes without selection 2026-02-01 19:43:17 +01:00
daboe01 6800472725 fixed: keystrokes from menu shortcuts are inserted into textviews 2026-01-30 22:40:35 +01:00
daboe01 f19901c214 new: action methods for format menu 2026-01-28 21:23:03 +01:00
daboe01 e198fbdc40 Merge pull request #3122 from daboe01/fixed-keycode-management-in-cptextview
fixed: Keyboard-event handling is based on the deprecated charCode
2026-01-28 20:57:07 +01:00
daboe01 45162a3fcb fixed: acceptsFirstMouse was missing 2026-01-28 19:24:29 +01:00
daboe01 0b4d156b5b fixed: keyboard issues on ipad 2025-07-19 14:19:46 +02:00
daboe01 76ba6a4e64 fixed: ipad issue with backspace 2025-07-19 13:53:28 +02:00
daboe01 46bab97b49 fixed: backspace issue on ipad 2025-07-19 13:51:58 +02:00
daboe01 2a32934f86 fixed: ipad backspace issue 2025-07-19 09:40:14 +02:00
daboe01 bda5594f0c fixed: ipad softkeyboard trigger 2025-07-18 22:05:12 +02:00
daboe01 e3fd7a295c fixed: ipad keyboard does not show 2025-07-17 19:41:48 +02:00
daboe01 570c31f248 fixed: richtext copypaste 2025-07-06 14:04:35 +02:00
daboe01 ce00fdaae8 fixed: copy-paste-issues 2025-07-05 15:37:32 +02:00
daboe01 b0186bf4f2 fixed: smart copy/paste 2025-07-05 08:49:08 +02:00
daboe01 9e15700f93 cleanup stuff 2025-07-03 22:10:57 +02:00