Repository navigation
M3: group, layer and type appearance with Contents and Characters rows (M3.68) - #26
Merged
Merged
Conversation
…cts, with Contents and Characters rows A group's or layer's own fills and strokes paint every member's geometry, below or above the members as the new contents slot (Appearance.contents_index) says; its geometry effects reshape the members as one piece and its raster effects apply to the composite (one combined shadow), respecting knockout groups. Type's own fills and strokes paint under or over its characters. Render, SVG/PDF (via bake) and Expand Appearance evaluate them alike. Commands: appearance.* / effect.* take target: "object"|"contents" and layer ids; appearance.moveItem moves the Contents slot (from: "contents") or an item across it (contents); appearance.targetContents selects a group's members. Graphic styles applied to a group now style the group itself. The Appearance panel shows Contents/Characters rows that drag, and double-click to target the members or edit the characters' paint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
apexmiguel9-hub
pushed a commit
to apexmiguel9-hub/vectorcraft-android
that referenced
this pull request
Oct 6, 2026
MEDIDO en el movil. La app entra en `android_main` —el punto de entrada funciona— y
muere asi:
Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 24081 (android_main)
storytold#26 pc ... base.apk (offset 0xb0000) (android_main+320)
**Y no hay ningun mensaje de panic en el logcat.** Ni una linea.
La razon es la misma que ya se pago en el otro repo: **el gancho por defecto de
Rust escribe en `stderr`, y en Android `stderr` no llega a logcat** si el proceso
no tiene stdout asociado. Ahi un `eprintln!` en un bucle de diez mil llamadas no
aparecio ni una vez y se tomo como evidencia de que el codigo no se llamaba.
Aqui el sintoma es peor: se sabe que hay panic y que esta dentro de `android_main`,
y no se sabe que linea ni por que. `android_main+320` son 320 bytes de codigo sin
nombre.
## El arreglo
Un hook de panic que manda el mensaje al log de Android, que si llega, y tambien a
`stderr` por si hay un debugger enganchado:
std::panic::set_hook(Box::new(|info| {
log::error!("PANIC de Rust: {info}");
eprintln!("PANIC de Rust: {info}");
}));
Se pone **antes de nada mas**, y antes del `log::info!` de arranque, para que el
siguiente run diga en que punto se llega.
**Instrumentacion que no funciona es peor que no tenerla**, y esta vez costaba el
siguiente paso entero: sin el mensaje, todo lo que se puede decir del fallo es que
ocurre 320 bytes dentro de una funcion.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of M3 (Paint & appearance). Groups, layers and type objects get an appearance of their own, as in Illustrator, with Contents and Characters rows in the Appearance panel.
effects::evaluate_container.Appearance.contents_index: Option<usize>(None= every item above the contents). It is only written when set, and there is a native round-trip test.appearance.*,effect.*andgraphicStyle.applytaketarget: "object"|"contents"and accept layer ids. They work without a selection when givenids, and error when there is no target.appearance.moveItem {from: "contents"}moves the Contents slot, andcontents?lets an item cross the slot in one undo step.appearance.targetContentsselects a group's members.appearance.addFill/addStrokeon type copies the characters' paint.target: "contents"styles the members as before. A group with no appearance of its own still counts as linked when all its members match.docs/mcp.mdcovers targeting, the Contents slot and the commands.Known limits:
ids.Checks
Rebased onto
25c8f32(#23).cargo xtask cipasses all 7 steps on this commit stacked with the swatch libraries PR that follows it: 1,530 tests, 0 failed. It also passed on its own one21ff60with 1,505 tests.New tests:
🤖 Generated with Claude Code