diff --git a/CHANGELOG.md b/CHANGELOG.md index 3631dc4..7f6def4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,17 @@ broke. The heading is parsed by `scripts/release-notes.ps1`, so keep its shape; under it is ordinary Markdown, and the renderer handles paragraphs, lists, links, `code` and **bold**. +## 1.7.2 - 30 September 2026 + +### Draw a rectangle with square corners +**Insert** now offers **Rectangle** before **Rounded**. Rectangles imported from Microsoft +Whiteboard keep their square corners. + +### Older Microsoft Whiteboard boards look as they did +Highlighter scribbles that filled frames and regions on boards made with older versions of +Microsoft Whiteboard now come across, as pictures. Their handwritten text keeps its Ink Free +font, now one of the label fonts, and the lines it had instead of wrapping onto two. + ## 1.7.1 - 29 September 2026 ### Import boards made with older versions of Microsoft Whiteboard diff --git a/Directory.Build.props b/Directory.Build.props index 47c1830..090c45e 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,7 +5,7 @@ scripts/build-installer.ps1 both read it from here, so releasing is a reviewed change to this line rather than an edit in a pipeline variable group. --> - 1.7.1 + 1.7.2 latest enable enable diff --git a/README.md b/README.md index 4accacd..5fef552 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ How the project is developed and shipped is documented separately: - Image selection, movement, resizing, and deletion - Text containers created by pasting plain text, with display and in-place edit modes - Seventeen text-container types: fifteen languages with live syntax highlighting, plus Prompt and Markdown, and local F6 formatting for DAX, SQL Server, and KQL -- An **Insert** tab with eight shapes drawn by dragging, with outline color, fill, line thickness, and text of their own in nine fonts; three connectors that bind wherever an end is dropped on a shape or a container, follow it, and can be drawn from the four arrows on a selected shape; and text labels typed on the board. A shape or a label turns to any angle by its handle, and the pin at the end of the row makes it a palette you can move +- An **Insert** tab with nine shapes drawn by dragging, with outline color, fill, line thickness, and text of their own in ten fonts; three connectors that bind wherever an end is dropped on a shape or a container, follow it, and can be drawn from the four arrows on a selected shape; and text labels typed on the board. A shape or a label turns to any angle by its handle, and the pin at the end of the row makes it a palette you can move - Selection by area: drag with Select for a rectangle, or hold Select for a freehand outline. Ctrl+A takes everything and Ctrl+Shift+A the ink alone, and the **…** on the selection offers Delete, Copy, Duplicate, and the four depth commands. Ink is taken too, and everything the area takes moves, resizes, recolors, reorders, and deletes as one - An optional background grid, Lines or Dots, whose spacing is fixed in board pixels and coarsens as the zoom goes out. It is drawn on screen only and never appears in an export or a preview - Containers automatically carry strokes that touch only that container when moved or resized @@ -222,7 +222,7 @@ Use **Copy settings** after finding a useful combination so the exact values can | … on the property bar | Delete, Copy, Duplicate, and the four depth commands for whatever is selected | | Alt+L | Laser pointer | | File / Edit / View / Insert / Help | Tab strip. Click a tab for a one-row command strip over the canvas. Click the canvas to hide it | -| Insert tab | Alt+I: the eight shapes, the three connectors, and Text. The tool returns to Select after one object unless **After inserting an object** says to keep it | +| Insert tab | Alt+I: the nine shapes, the three connectors, and Text. The tool returns to Select after one object unless **After inserting an object** says to keep it | | Insert > Palette | Pin the Insert row into a floating palette that drags anywhere in the window and comes back where it was left. Letter P while the Insert strip is open, or **Preferences → Toolbar → Insert palette** | | Hold Select, or tap it again | Switch what a drag on empty canvas takes, between a rectangle and a freehand lasso. The hold is 600 ms; the button's glyph and its tooltip say which one is armed | | Rotation handle | The circle above a selected shape or label turns it to any angle; Shift snaps to 15°, and the property bar's two buttons step by 45° | diff --git a/docs/design-objects.md b/docs/design-objects.md index 1a7fb97..6d5a00d 100644 --- a/docs/design-objects.md +++ b/docs/design-objects.md @@ -59,7 +59,8 @@ a change to one is a change to this file first. an object** (Keep the tool / Return to Select), gives the one-shot behaviour. 4. **The shape set** is the eight in the issue's screenshot: rounded rectangle, ellipse, triangle, pentagon, block arrow, parallelogram, diamond, stadium. The first is a - rectangle with rounded corners, not a square. + rectangle with rounded corners, not a square. 1.7.2 adds a rectangle with square + corners, first in the row, so that imported boards keep their frames square. 5. **Colors.** The six pen swatches for shape outline, connector, and text, and the same six as a translucent tint plus **None** for a shape's fill. Default outline and connector color and thickness: the current pen's. Default fill: None. Default text: @@ -72,7 +73,8 @@ a change to one is a change to this file first. drawing, Ctrl at mouse-down still borrows Select, so the gesture starts without it. 7. **Fonts.** A curated list — Segoe UI, Calibri, Arial, Georgia, Times New Roman, Consolas, Cascadia Mono, Comic Sans MS, Segoe Print — with Segoe UI when a saved font - is not installed. Consolas and Cascadia Mono are the monospace entries. + is not installed. Consolas and Cascadia Mono are the monospace entries. 1.7.2 adds + Ink Free, the handwriting of boards imported from older Microsoft Whiteboard versions. 8. **What an area picks up.** Two settings under **Preferences → Selection**. **Area selects**: objects partly inside (default) or only objects fully inside. **Extend to touching**: Ignore (default), Single, or Recursive. An object touches another when its @@ -115,7 +117,8 @@ ConnectorAnchor(ObjectId, U, V) // a point on that object's bounds, 0..1 eac ``` - `ShapeKind`: RoundedRectangle, Ellipse, Triangle, Pentagon, BlockArrow, Parallelogram, - Diamond, Stadium, in the flyout's order. The outline geometry of each is a function of its + Diamond, Stadium, and Rectangle. A board stores the kind by name, so a new kind goes at + the end, and the flyout lists them in its own order with Rectangle first. The outline geometry of each is a function of its `Bounds` in `Core` (`ShapeGeometry`), returned as a polygon or a list of segments and arcs, so hit testing and the vector export share it with the renderer. - `ConnectorKind`: Line, Arrow, CurvedArrow. A curved connector is one cubic Bézier whose @@ -206,7 +209,7 @@ and they persist in `AppSettings` (`Shape`, `Connector`, `Label`), settings vers ### The Insert tab, and the optional toolbar button An **Insert** tab joins the tab strip between View and Help (`SessionChrome`, with its -own row and Alt mnemonic like the others). Its row holds the eight shapes, a separator, +own row and Alt mnemonic like the others). Its row holds the shapes, a separator, the three connectors, a separator, and Text — the issue's screenshot, laid out as one row of the strip's buttons. Picking one selects that tool, which then behaves as decision 3 says: it stays until Escape or another tool, unless the **After inserting an @@ -508,7 +511,7 @@ The Insert row opens like a menu, far from the pen, and it covers the toolbar. F designs for a palette were considered: - **A. Pin the Insert row into a floating palette.** A pin at the end of the Insert row - turns its content, the eight shapes, the three connectors, and Text in two short rows, + turns its content, the shapes, the three connectors, and Text in two short rows, into a second floating palette that is dragged by a grip, kept anywhere in the window, remembered in settings, shown or hidden from the pin, the View row, or Preferences. It reuses the shared button list the toolbar flyout is built from, never touches the main diff --git a/docs/export.md b/docs/export.md index c1363da..fa75269 100644 --- a/docs/export.md +++ b/docs/export.md @@ -189,6 +189,7 @@ way on the slide: | Shape | Preset | | --- | --- | +| Rectangle | `rect` | | Rounded rectangle | `roundRect`, corner adjust 20000 | | Ellipse | `ellipse` | | Triangle | `triangle` | @@ -223,7 +224,7 @@ shape and carries none. | Preset | Where the board binds, and the site it is | | --- | --- | -| `rect`, `roundRect` — rounded rectangle, stadium, and a label's box | top 0, left 1, bottom 2, right 3 | +| `rect`, `roundRect` — rectangle, rounded rectangle, stadium, and a label's box | top 0, left 1, bottom 2, right 3 | | `diamond` | top 0, left 1, bottom 2, right 3 | | `ellipse` | top 0, left 2, bottom 4, right 6 | | `triangle` | apex 0, bottom-left corner 2, bottom midpoint 3, bottom-right corner 4 | @@ -296,8 +297,9 @@ The faces are read from the Windows fonts folder and embedded, so a label stays and stays searchable. Segoe UI, Calibri, Arial, Georgia, Times New Roman, Consolas, Comic Sans MS, and Segoe Print each embed their own regular, bold, italic, and bold italic; Segoe Print has no italic file on Windows, so an italic Segoe Print label is -upright on the page, and Cascadia Mono is written in Consolas, because Windows ships it -only as a variable font whose bold and italic are axes rather than files. Any other +upright on the page, Ink Free has only its regular face, which every style of it uses, +and Cascadia Mono is written in Consolas, because Windows ships it only as a variable +font whose bold and italic are axes rather than files. Any other family a board names falls back to Segoe UI, as the page furniture already does. ### Writing the file diff --git a/docs/microsoft-whiteboard-import.md b/docs/microsoft-whiteboard-import.md index 375d381..4a81eac 100644 --- a/docs/microsoft-whiteboard-import.md +++ b/docs/microsoft-whiteboard-import.md @@ -1,13 +1,14 @@ # Microsoft Whiteboard import -**Implemented in 1.7.0**, with the objects of older versions of the app in 1.7.1. This -document records what a Microsoft Whiteboard export contains, how the importer maps it -onto a board, and what it cannot carry over. Microsoft retires its standalone Whiteboard -apps on 16 October 2026 (see [retirement](retirement/README.md)), and the export is the -only way to take a board out of it. The format is undocumented. Everything below was established from eight exports of -real teaching boards and one test board holding every kind of object the Windows client -offers, made between 20 and 27 September 2026. Six more teaching boards, exported on 29 -September, added the objects that older versions of the app wrote, which 1.7.1 reads. +**Implemented in 1.7.0**, with the objects of older versions of the app in 1.7.1 and +1.7.2. This document records what a Microsoft Whiteboard export contains, how the +importer maps it onto a board, and what it cannot carry over. Microsoft retires its +standalone Whiteboard apps on 16 October 2026 (see [retirement](retirement/README.md)), +and the export is the only way to take a board out of it. The format is undocumented. +Everything below was established from eight exports of real teaching boards and one test +board holding every kind of object the Windows client offers, made between 20 and 27 +September 2026. Six more teaching boards, exported on 29 September, added the objects +that older versions of the app wrote. ## Where it starts @@ -75,6 +76,12 @@ no model of the board beyond what it draws. - **Highlighter outline.** The tip is an axis-aligned rectangle twice as tall as it is wide, drawn once at the start and swept along the centerline. Its height follows pressure. The fill is the color at 0.4 alpha. +- **Highlighter without a centerline.** Older versions of the app wrote some highlighter + strokes with an empty `polyline` and a scale other than 1/128. The outline is a square + tip followed by the sweep, as overlapping pieces, and the path cannot be recovered from + it reliably. Seven samples on three boards are scribbles that fill a frame, a region, + or a table, or mark a few words. `Whiteboard 1` had lost its three until 1.7.2, with no + message, because such a stroke was taken for an empty one. - **Arrowheads** on a pen are part of the centerline: it runs out to each barb's tip and back, so they need nothing of their own. - **Rainbow and Galaxy** ink fill the outline with a `url(#…)` pattern that uses @@ -105,11 +112,13 @@ Windows client offers, from `paleYellowGradient` (#FEE15A) to `grayGradient` (#C | --- | --- | | Pen stroke | `InkStrokeObject`, `PenKind.Pen`, the fill as its color | | Highlighter stroke, or a translucent stroke in a `Mixed` group | `InkStrokeObject`, `PenKind.Highlighter`, the color made opaque | +| Highlighter stroke without a centerline | An SVG asset of its outline, in its color and opacity, in the box it covers | | Rainbow or Galaxy stroke | A pen stroke in violet (#8B5CF6) or indigo (#312E81) | | Picture, document page, sticker | `BoardAsset` with the sniffed type, and an `ImageBoardObject` | | Turned picture | An SVG asset that draws the picture turned, in the box it covers | | Shape | `ShapeBoardObject` of the kind its outline has, with fill, outline, angle, and text | | Older ellipse or polygon | `ShapeBoardObject`, an oval with the ellipse's radii or the kind the polygon's corners have, without text | +| Rectangle, in either form | `ShapeBoardObject`, `ShapeKind.Rectangle`, with square corners | | Sticky note | `ShapeBoardObject`, rounded rectangle in the note's color, with the note's text | | Note grid | A white rounded rectangle for the panel, a label for the title, and one note per cell | | Text box | `FreeTextBoardObject`, wrapped into the lines the box showed | @@ -138,8 +147,12 @@ anchor's angle and swaps the box's sides. measure text, so the window passes in `IBoardTextMeasure`, backed by the same WPF layout that draws labels and containers. A label here keeps the lines it is given, so the importer wraps the text at the box's width first, word by word. A label's font is the nearest of -the label fonts: Simple (Aptos) and anything unknown become Segoe UI, Handwritten -(Segoe Print, Ink Free) becomes Segoe Print, and a serif family becomes Georgia. +the label fonts: Simple (Aptos) and anything unknown become Segoe UI, Handwritten is +Segoe Print or, on older boards, Ink Free, both of which are label fonts, and a serif +family becomes Georgia. The lines are found by measuring in the family the page names, +because that is where the text box broke them. Until 1.7.2 Ink Free became Segoe Print, +which is wider, and measuring in it split single-line titles in two. A family that is +not installed is measured in WPF's fallback. **Width.** WPF draws a point at the style's thickness × (0.25 + 1.5 × pressure), so pressure 0.5 is the thickness itself. Each centerline point takes twice the radius of the @@ -173,8 +186,10 @@ parses in about 160 ms. further out. A vertical highlight comes out four times as wide as the original. A highlight has one width throughout. - **Rainbow and Galaxy** are one color each. -- **Rectangles and notes have rounded corners**, because the board's rectangle has them. - The rounding shows most on large frames, such as a template's columns. +- **Notes and note grids have rounded corners**, because they are rounded rectangles here. +- **An old highlighter scribble is a picture**, not ink, because its path is not in the + export. It moves and deletes as a picture, and it keeps the few small gaps the page + shows where the outline's pieces overlap. - **Note text is centered** in the note, where Microsoft puts it at the top left, and text too large for its note overflows it rather than being cut off. - **Elbow connectors are straight.** Their ends stay where they were and stay bound. @@ -209,7 +224,8 @@ Each sample was opened in the application and compared with the same page render Edge, fitted to the same content. Positions, picture sizes, scaled ink groups, and colors matched on all eight teaching boards. The six later boards were opened in the application, where the older ellipses, rectangles, and pictures sit in place against the -ink drawn around them. Regions with pressure-drawn handwriting and with highlighters were +ink drawn around them. The highlighter pictures, square frames, and one-line titles of +FEvsSE, Venn diagrams, and Whiteboard 1 were compared with Edge at the same fit. Regions with pressure-drawn handwriting and with highlighters were compared at 150% against a WPF rendering that uses the application's own drawing attributes. The test board was compared region by region in the application: ink, text boxes, notes, the note grid, shapes, connectors, pictures, the template, and the diff --git a/site/export-microsoft-whiteboard.html b/site/export-microsoft-whiteboard.html index f607f9c..c26f0ea 100644 --- a/site/export-microsoft-whiteboard.html +++ b/site/export-microsoft-whiteboard.html @@ -226,7 +226,7 @@

What comes across

  • Text boxes, connectors, and links.
  • Comments, as text beside the board with the names of their authors.
  • -

    A highlighter stroke has one width, and Rainbow and Galaxy ink become one color. Rectangles and notes have rounded corners, and elbow connectors become straight. The background color and reactions are left out. After the import, a message lists anything the board did not bring across.

    +

    A highlighter stroke has one width, and Rainbow and Galaxy ink become one color. Notes have rounded corners, and elbow connectors become straight. The background color and reactions are left out. After the import, a message lists anything the board did not bring across.

    SQLBI Whiteboard keeps each board in a file on your PC and has no real-time collaboration. Compare lists the differences from Microsoft Whiteboard.

    diff --git a/site/guide.html b/site/guide.html index 6a46fcc..fac712a 100644 --- a/site/guide.html +++ b/site/guide.html @@ -962,7 +962,7 @@

    Text and code

    The chip also offers Python, C, C++, Java, C#, JavaScript, TypeScript, Visual Basic .NET, R, Rust, and PHP. These are highlighted but not formatted, and paste never picks one for you. F6 on one of them opens a link to that language's issue on GitHub, where thumbs-up votes set the order in which formatters are added.

    Shapes, connectors, and text

    -

    The Insert tab holds eight shapes, three connectors, and Text. Drag on the board to draw a shape — hold Shift for a square — and choose its outline color, fill, and thickness with it selected. Type into it, or press F2, and the words sit inside the shape, in a font, a size, a color, bold, italic, and underline; the circle above it turns it to any angle, with Shift for 15° steps. Click with Text for a label on its own, which takes the same font and the same handle.

    +

    The Insert tab holds nine shapes, three connectors, and Text. Drag on the board to draw a shape — hold Shift for a square — and choose its outline color, fill, and thickness with it selected. Type into it, or press F2, and the words sit inside the shape, in a font, a size, a color, bold, italic, and underline; the circle above it turns it to any angle, with Shift for 15° steps. Click with Text for a label on its own, which takes the same font and the same handle.

    Drop a connector's end anywhere on a shape and it binds there and follows, so moving the shape takes the arrow with it; hold Ctrl at release to bind to the nearest point on the border instead, or choose Anchors → Auto to let a bound end move to the side facing the other end. A selected shape also carries four small arrows, one to a side, and dragging one out draws a bound arrow without leaving Select.

    Select comes back once one object is drawn, and Escape returns to Select at any time. Preferences → Toolbar keeps it for the next one instead, adds Insert to the floating palette, or pins the Insert row into a second palette you can drag anywhere. Shapes, connectors, and labels are saved in the board, undone with everything else, and exported to a deck or a PDF as objects you can select and change — in PowerPoint the straight arrows are still attached to their shapes.

    diff --git a/site/shortcuts.html b/site/shortcuts.html index 5f00d74..9643398 100644 --- a/site/shortcuts.html +++ b/site/shortcuts.html @@ -153,7 +153,7 @@