diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a4acfb..df01221 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,68 +20,44 @@ and **bold**. ## 1.3.1 - 5 September 2026 ### KQL joins DAX and SQL in text containers -A text container can now be Kusto Query Language. Paste a query or drop a `.kql` file, -choose **KQL** from the title-bar chip, and it is highlighted like the rest: operators, -functions, columns, string literals, and the comments between them. **F6** formats it, -and a query that does not parse is left exactly as it was rather than half rewritten. -The spacing you chose around a join hint, as in `kind=inner`, survives formatting, because -that is how the queries people bring to a session are usually written. Highlighting and -formatting both read Kusto through Microsoft's own parser, and both run locally. +A text container can now be KQL: paste a query or drop a `.kql` file and choose **KQL** +from the title-bar chip. It is highlighted, **F6** formats it, and a query that does not +parse is left unchanged. Both use Microsoft's Kusto parser and run locally. ## 1.3.0 - 3 September 2026 ### Export a board to PowerPoint -**File → Export** (Ctrl+E) turns the board into a deck. The board is cut into areas -wherever it is empty: a picture or a note keeps the ink drawn on it, and a stroke that -spans two of them keeps them together. Each area becomes a slide, drawn exactly as the -screen draws it, with the text containers in the speaker notes so that DAX and SQL can be -copied, and an overview slide first shows where every slide sits on the board. The dialog -previews the areas, numbered, and updates as you move the gap and text-size settings. -[How areas are chosen](https://github.com/sql-bi/SQLBI-Whiteboard/blob/main/docs/export.md) -is written down, with the alternatives. +**File → Export** (Ctrl+E) turns the board into a deck. The board is cut into areas where +it is empty, one slide per area, with an overview slide first. Text containers go in the +speaker notes. The dialog shows the areas on the board and updates as you change the +settings. ### Export a board to PDF -Choose **PDF** in the same dialog for a document: the same areas, one per A4 or Letter -page in landscape, each with a bookmark and a footer with the board name, the date, and -the page number. **Whole board on one page** writes a single page the shape of the board, -to be read by zooming, for a board that is one drawing. +Choose **PDF** in the same dialog: one A4 or Letter page per area, with a bookmark and a +footer, or the whole board on one page to zoom into. ### A deck you can rework -**Slide content → Editable** puts images and text containers on the slide as PowerPoint -objects, keeps the DAX and SQL colors as text runs, and lays all the ink over them as one -transparent picture. It is the default; Picture, one choice away, is the exact rendering -for a deck that will be shown as is. +**Slide content → Editable**, the default, puts images and text containers on the slide +as objects, keeps DAX and SQL colors, and lays the ink over them as one picture. +**Picture** is one exact picture of the area. ### PDF pages that stay sharp -**Page content → Vector** draws the ink as paths and the text as text, so a page stays -sharp at any zoom and DAX or SQL can be selected and copied from it. The fonts travel with -the file. +**Page content → Vector** draws the ink as paths and the text as text, so the page stays +sharp at any zoom and code can be selected and copied. ### Slides drawn on the board -**View → Frame** adds a frame the size of the screen: a slide drawn by hand. Whatever sits -inside a frame is that slide, frames come first, and the rest of the board is still cut -automatically. A frame is selected by its edge or its title tab, never by its inside, so -everything in it stays reachable; F2 renames it. A board with a frame is saved in a new -format version, so it needs this release to open; a board without one still opens in the -releases before it. - -### An SVG with pictures inside draws them where, and as large as, the author placed them -An SVG that embeds a bitmap and clips it, the way an illustration frames a screenshot, -drew the bitmap shifted and partly missing. The renderer applied the clip inside the -scaling it builds for the picture, so a clip written in page coordinates moved with the -picture. The clip is now lifted onto a group around the picture before drawing, which is -what the markup means, and the picture lands where the author put it. - -An embedded logo saved at 72 or 216 DPI came out a third larger, or less than half the -size, of the box the SVG gave it, because the renderer measured the picture in screen -units rather than pixels. The pictures are now measured in pixels, as browsers do, so a -logo fills exactly the box it was given. +**View → Frame** adds a frame the size of the screen. Whatever is inside a frame is that +slide; the rest of the board is still cut automatically. Select a frame by its edge or its +title tab, and press F2 to rename it. A board with a frame needs this release to open. + +### SVG pictures land where the author put them +An SVG with an embedded, clipped bitmap drew it shifted and partly missing, and an +embedded picture saved at a DPI other than 96 came out the wrong size. Both now draw where, +and as large as, the SVG says. ### A centred, letter-spaced label no longer collapses -A heading such as `THE INTERFACE` set with `letter-spacing` and centred with -`text-anchor="middle"` piled its letters up in half the width, or all on one spot when -anchored at the end. The letter-spacing is dropped for such text before drawing, so the -label appears where it was placed, set a little tighter than the author asked. +A label with `letter-spacing` and `text-anchor="middle"` or `end` piled its letters up. +It now appears where it was placed, set slightly tighter. ## 1.2.2 - 2 September 2026 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e3ca848..7b8f422 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -90,6 +90,25 @@ channels and a tested build can be promoted without rebuilding. anything else naming internal infrastructure. Signing coordinates belong in the team's internal notes, not here. +## Writing for people + +Three places carry text read by people who did not write the code, and each has its own +length. Internal documentation under `docs/` is where reasoning, alternatives, and +mechanism belong, at whatever length they need. The other two are short: + +- **The site (`site/*.html`)** speaks to the person using the application: what they do + and what they get. A feature is one paragraph of two to four sentences, in the voice + and at the length of the paragraphs around it. No reasoning, no alternatives, no + mechanism, no history. +- **`CHANGELOG.md`**, which becomes the GitHub release body and the What's new page, is + plain and technically accurate: one `###` per thing a person notices, two to four lines + each, saying what changed and what it is for. A bug entry names the symptom and the fix, + not the diagnosis. Link to `docs/` for anything longer. + +The test is the neighbours: if a new paragraph is noticeably longer than the ones beside +it, cut it. This has been asked for twice; the 1.3.0 notes as first written are what it +looks like when it slips, and their shortened form is what was wanted. + ## Code style Match the surrounding code. Nullable reference types and implicit usings are enabled. diff --git a/site/guide.html b/site/guide.html index 074568d..64cb47c 100644 --- a/site/guide.html +++ b/site/guide.html @@ -691,7 +691,7 @@

Drawing with a mouse

Containers

Images, LiveViews, and text blocks are containers. With a mouse, click to move, drag the circular handle to resize while keeping aspect ratio — hold Ctrl too with Mouse drawing on. Releasing the mouse returns to the drawing tool you had. Imported images accept PNG, JPEG, BMP, GIF, and SVG, including clipboard paste and Explorer drag-and-drop. An SVG is kept as its markup and redrawn at every size, so enlarging one costs it nothing.

View → Bring to front and View → Send to back reorder the selected container and its linked strokes. Strokes cannot be reordered on their own.

-

View → Frame adds a frame the size of the screen: a slide drawn on the board. A frame is selected by its dashed edge or by its title tab, never by its inside, so everything in it stays reachable; drag it to move it, drag the handle to resize it, press F2 to rename it, and Delete removes the frame alone. Moving a frame moves nothing inside it: it is a label over content. Export takes frames as they are, first and in the order they were added, and cuts the rest of the board automatically. Frames never appear in an export or in a preview.

+

View → Frame adds a frame the size of the screen: a slide drawn on the board. Select it by its dashed edge or its title tab, drag to move or resize it, and press F2 to rename it. Export uses frames as they are, first, and cuts the rest of the board automatically. Frames never appear in an export.

Text, DAX, SQL, and KQL

Paste prefers an image when the clipboard has one, including a file SnagIt or another capture tool left on the clipboard. Paste plain text to create a selected text container.

@@ -764,9 +764,9 @@

LiveView

Files

The File row holds five commands: New, Open, Save, Save As, and Export. Ctrl+S and Ctrl+O save and open a .wboard without opening the row at all.

-

Export (Ctrl+E) writes the board as a PowerPoint deck. The board is cut into areas wherever it is empty: a picture or a note keeps the ink drawn on it, and a stroke that spans two of them keeps them together. Each area becomes a slide, with the text containers in the speaker notes so that DAX and SQL can be copied, and an overview slide first shows where every slide sits on the board. The dialog previews the areas, numbered, and the Gap between areas slider and Smallest text on a slide change the cut as you move them. Drawing order puts slides in the order the areas were begun; Reading order goes top-left to bottom-right.

-

Slide content chooses between Picture, one exact picture of the area, and Editable, which puts images and text containers on the slide as PowerPoint objects, keeps the DAX and SQL colors as text runs, and lays all the ink over them as one transparent picture. Editable is for a deck that will be reworked; Picture is for one that will be shown.

-

Choose PDF in the same dialog for a document instead: the same areas, one per A4 or Letter page in landscape, each with a bookmark, and a footer with the board name, the date, and the page number. Whole board on one page writes a single page the shape of the board, to be read by zooming, which suits a board that is one drawing. Page content chooses between Picture, exact, and Vector, which draws the ink as paths and the text as text, so the page stays sharp at any zoom and DAX or SQL can be selected and copied from it.

+

Export (Ctrl+E) writes the board as a PowerPoint deck or a PDF. The board is cut into areas where it is empty, one slide or page per area, with an overview first. The dialog shows the areas numbered on the board; the gap and text-size settings change the cut as you move them, and the order can follow the drawing or the reading direction.

+

Slide content → Editable, the default, puts images and text containers on the slide as objects with the ink over them; Picture is one exact picture of the area. Text containers also go in the speaker notes.

+

PDF writes one A4 or Letter page per area, each with a bookmark and a footer, or the whole board on one page. Vector pages keep the ink as paths and the text selectable.

The released installer registers that type and .wimport. The pre-release (Dev) channel does not, so it can sit beside a released copy without stealing the file association.