13.2 Front End Overview

John Fultz, Wolfram Research

(RowDefault[, (Spacer1), , (Spacer1), ])  #WolframTechConf

Scope

Covering some changes in both 13.1 and 13.2

And some in-progress tech that’s beginning to show in 13.2 that I think will probably deliver in the spring.

The toolbar — new in 13.1

Wolfram-language native

Supports overflow indicators when resizing windows

Easy to toggle from the Window menu or Preferences dialog

It’s very performant

Noah Hardwicke will give a talk Thursday, 4:50pm, about how we achieved that performance

The toolbar — 13.2 improvements

Toolbar is now minimizable

Improved cell decoration controls

Print@Button["Example",CreateDocument[DocumentNotebook[{TextCell["Decorate me",64,CellMargins->{{Inherited,Inherited},{Inherited,40}},TextAlignment->Center]},Saveable->False]]]

Color fonts & updated text handling — new in 13.1

🙂🙀🎅🤯

Entering emojis works the standard way on your operating system

Windows:  + .

macOS: ⌃ ⌘ Space

Computation with color fonts

CharacterRange[128000,128100]

Some emoji characters have surprising implementations

ToCharacterCode["👩‍⚕️"]

Characters["👩‍⚕️"]

StringReverse["👩‍⚕️"]

We’re planning an update to kernel string functions to compensate

LibraryLink support — new in 13.1, updates continuing

Video player currently uses this to boost performance

FE only supports a subset, but we’re actively expanding support

Chris Cole will present more, Thursday, 4pm

Cell tray widgets — experimental in 13.2

More detailed presentation by Jason Abernathy, Thursday, 4:25pm

f[

2+2 (* suggestions bar *)

(CurrentValue[#,CellTrayWidgets]=<|"widget"-><|"Content"->ToBoxes[Button["abc"]]|>|>)&/@Cells[CellTags->"widget_cells"];

Convert To/From Canvas menu item — new in 13.1

Menu item under the Graphics menu

Convert a graphics output to a canvas that can be annotated using the canvas drawing tools

Or any other graphics output

Or literally any other cell

Print@Button["Example",CreateDocument[DocumentNotebook[{ExpressionCell[Expand[(((a+b))^15)],24]},Saveable->False]]]

Drop shadowing graphics directive — new in 13.1

Graphics[{DropShadowing[],FontSize->Scaled[.1],Text[Style["Drop Shadow"]]}]

Graphics[{,Inset[TraditionalForm[-b±((Sqrt[(b^2)-4a c])/(2a))]]}]

Graphics[{,Inset[]}]

Graphics[{,Inset[TextCell["Drop shadowing","Section"]]}]

Blurring graphics directive — new in 13.2

Graphics[{Blurring[],FontSize->Scaled[.1],Text[Style["Blurring"]]}]

Graphics[{,Inset[TraditionalForm[-b±((Sqrt[(b^2)-4a c])/(2a))]]}]

Graphics[{,Inset[]}]

Graphics[{,Inset[TextCell["Blurring","Section"]]}]

Implemented as shader programs running on your graphics card

DropShadow is great for emphasis

GeoGraphics[{GeoStyling["OutlineMap", 
   DropShadowing[{-3,-3},6],], 
  Polygon[(Entity["Missouri, United States", Entity["AdministrativeDivision",{"Missouri","UnitedStates"}], "Entity[\"AdministrativeDivision\", {\"Missouri\", \"UnitedStates\"}]", "administrative division"])]}]

Blurring is great for deemphasis

cloud=WordCloud[EntityValue[CountryData["Europe"],{"Name","LandArea"}]];
cloud/.x:Inset[Style[Except["Sweden"],__],__]:>{Blurring[5],x}

AxisObject — new in 13.1

Multiple axes

Plot[Sin[x],{x,0,2π},Axes->{True,False},Prolog->{AxisObject[{"Vertical",0}],AxisObject[{"Vertical",2.Pi}]},PlotRangePadding->{.5,Automatic}]

Shaped axes

Graphics[{AxisObject[Circle[{0,0},1],{0,2Pi},TickPositions->{{0,2Pi,Pi/8}},TickLabels->{Table[r,{r,0,2Pi-Pi/8,Pi/8}]},TicksStyle->16]}]

AxisObject — new in 13.1

Collision avoidance

Manipulate[Graphics[{AxisObject[Circle[{0,0},1],{0,2Pi},TickPositions->{{0,2Pi,Pi/8}},TickLabels->{Table[r,{r,0,2Pi,Pi/8}]},TicksStyle->fontsize]}],{fontsize,12,60,1}]

AxisObject in 3D — in progress in 13.2

Implemented in box form at present, but AxisObject typesetting isn’t yet turned on for it.

Graphics3D[{Sphere[RandomReal[1,{10,3}],.03],
RawBoxes[{
Axis3DBox[{"X",{0,0.5}}],
Axis3DBox[{"Y",{0,0.5}}],
Axis3DBox[{"Z",{0.5,0.5}}]}]},
PlotRange->{{0,1},{0,1},{0,1}}]

Like the 2D version, supports arbitrary shapes

Graphics3D[{Sphere[RandomReal[1,{10,3}],.03],
RawBoxes[{
Axis3DBox[BezierCurve3DBox[{{0,0,0},{.25,.25,.25},{.25,.25,.5},{.5,.5,.5},{.75,.75,.5},{1,1,1}}]]}]},
PlotRange->{{0,1},{0,1},{0,1}}]

Some other related talks to see

Upcoming talks

8:55am today — Ian Hojnicki, Software Development in the Notebook Front End

9:20am today — Noah Hardwicke, UX Projects

8:30am Friday — Yuzhu Lu, 13.2 Graphics

UI workshop, today, 2pm

FE office hour, Thursday 11am

UX focus group, Thursday, 2pm