This is the first official release!
General Information
Version 0.1.0 was before the project was restructured to which it is today. In this version, there are a couple notable features:
- HTML is parsed into a reference-counted DOM
- Basic CSS parser
- Simple CSS selector matcher, only
<simple selector> - Style collection & cascading
@mediaquery support forscreenandalltypes- Text & whitespace transformations
- User Agent style sheet
- Internal Fetch API implementation
- Remote & local document & resource fetch
- Window resize is acted upon
- Logging using the
logcrate - Window title is based upon the
<title>element or the URL - A simple DOM inspector with F12
- Basic CSS box-model
- Shortcuts like Ctrl+W, F5, F12
- Extensive Font API
- Text hints (e.g. ligatures, CJK character forms)
- Text shaping using harfbuzz
- Still bitmap image support (JPG, PNG, BMP, WebP, etc.)
- Animated GIF support
- HTML
<img>element support - CSS
background-imagesupport (non-gradients) - Basic compositor with parallel tiles of 256x256
- Ctrl+V to paste a URL to open
- Scrolling support
- Parallelized glyph rasterization
- Improved text anti-aliasing
- Non-colored emoji support
text-decorationsupport- And a lot of performance improvements!
Changes
[deps]Update dependencies[page]Accept continuous task messages when no timeout expired[page]Document the DirtyState mechanism[gfx+page]Remove redundant debug messages[app]Count FPS for paint-heavy scenario's[page]Time scroll responsiveness[app]Fix incorrectAppcreation[page]Animate through each frame of GIFs[dom+gfx+page]Generate textures from GIF frames[dom]Special support for decoding GIF animated images[ci]Add GitHub Pages link for Rustdoc[app+page]Show backtrace of page crash in Window[app]Show a crash screen when the pages crashes, instead of halting[compositor]Ensure bottommost text fragments are continued on a vertical tile boundary[layout]Support emoji text fragments[font]Debug FontDescriptor with FontHandle[font]AddFamilyName::Emoji[layout]Remove fast path of anonymous layout algorithm[page]Reduce maximum delay between paints[compositor]Recall staging belt after awaiting SubmissionFuture[compositor]Enablewgputracing/profiling[compositor]Ensure composition of the last tiles are submitted correctly[font]Improve glyph rendering by eliminating double AA[compositor]Remove dependency on retina-gfx-font-backend-font-kit[gfx+font]Move font descriptors and hints back to retina-gfx-font![font]Move the font rendering code to a separate crate[gfx]Decouplefont-kitbackend from the main crate[layout]Hot fix crash in subtendril'ing[font]Reduce locking overhead for FontKitFont and GlyphAtlas[font]Add instrumentation to backend font implementation[compositor]Allow tracing of composition cycles[gfx]Cull textured rects outside the viewport[compositor]Cull out tile-non-intersecting text fragments[compositor]Fix some clippy hints[compositor]Use stdlib's thread scope instead of crossbeam's[compositor]Hide most messages behindtracelog level[compositor]Re-enable background color filling[compositor]Clear the tile's background a normal color[compositor]Document the publicly accessible API[compositor]Don't request a composition cycle when the tile was cached[compositor]Delay waiting on submit until next composite cycle[compositor]Keep bottom tiles in cache when scrolling up[page]Don't resubmit the composited page[compositor]Mergepaintandcompositeinto one[gfx]Rename common log message to clear up confusion[compositor]Composite tiles in parallel[compositor]Composite immediately when a tile is ready[compositor]Debug the times taken per tile[compositor]Only paint tiles that intersect the viewport[compositor]Paint tiles according to the viewport's vertical position[compositor]Use a tile-based system for rendering the screen[font]Prepare basic latin by also including the U+0020 SPACE glyph[ua]Update test according to the CSS parsing improvements![gfx]Trace bind & draw commands[gfx]Create a sampler once per texture renderer[gfx-font]Prepare renderer once per text run[gfx]Instrument more functions[style]Support compoundp.blue#mainselectors![style]Move simple selector matching to a separate function[style+page]Load correct fonts using the givenfont-weight[font]Better propagate succes status for font loading[gfx+style]Supportfont-variant-position[gfx]Support East Asian glyph substitution[style]Supportfont-variant-east-asian[dom+i18n+layout]Supporttext-transformCSS property[style]Supporttext-transform[compositor]Supporttext-decoration: line-through and overline[style-parser]Supportfont-weight[compositor]Support basictext-decorationproperties[font]Add accessors for baseline, underline offset+thickness[style]Addtext-decorationproperties[layout]Remove old debug logging[common+layout]Fix crash for multi-byte character index[woff]Start working on an WOFF(2) decompressor[layout]Translatefont-variant-capstogfx-fontformat[gfx-font]Support capital letter font hints[style]Supportfont-variant-caps[page]Add a CSS missing font loading mechanism[gfx]Font description should beHashandEq[gfx-font]AddFontProvider::load_from_system()API[page]Fix page task message timeout system[page]Generalize style resource loading into a separate function[gfx-font]Don't load fonts in the background if they don't exist[style]Supportfont-kerningandfont-variant-ligatures[gfx-font]Add ability to change ligatures & kerning hints[gfx+font+gui]Removewgpu_glyphdependency[gfx-font]Diverge path for grayscale or anti-aliasing[gfx-font]Remove oldascentper glyph from the font[gfx-font]Tidy upglyph_iter[gfx]Use HarfBuzz offsets & advances instead of the defaults[gfx-font]Fix baseline correction in text painting[gfx-font]Fix font height calculation[gfx-font]Use HarfBuzz for text shaping[gfx-font]Use the font size for atlas cache matching[gfx-font]Calculate alpha channel based on avg glyph mask[gfx-font]Use alpha blending for glyph painting[gfx]Allow color blending inTextureMaterialRenderer[gfx-font]Paint using the text color supplied[gfx]GiveTextureMaterialRendererbetter debug WebGPU labels[gfx]Fix incorrect resource reference inpaint_rect_textured_with[gfx]Give texture paint resources a better name[gfx-font]Implement glyph position correctly[gfx-font]Chore: clean-up font_kit backend glue[gfx-font]Re-enable parallelized glyph rasterization[gfx-font]Remove debugabortin Glyph loading[gfx]Makepaint_rect_texturedextensible[gfx]Streamline material rendering code[gfx-font]Custom text rendering withfont_kitglyph rasterization[gfx+font]AbstractFontpainting[gfx-font]RenameFonttoWgpuFont[svg]Start working on an SVG implementation[gfx]Don't emit scroll events if the cursor is outside the window[fetch]Special path for local page URL parsing[layout]Use serif font as the default[style]Support<body>presentational hints[ci]Install XCB package on Linux for clipboard to work[app]Usecopypastainstead ofclipboard[ua]Update stylesheet test because of CSS parser improvements[app+page]Open a website using an URL of the clipboard (Control+V)[app+page]Add keybind F6 to dump the style sheets[page]Set the URL as the title on (re)load[style-comp]Support pseudo selector specificity[gfx-font]MoveFontKitAbGlyphFontBridge::new()outside the Windows cfg[style-comp]Support pseudo selector matching for links and empty elements[style]Support parsing pseudo class selectors[gfx]Fix incorrect text color[layout]Add struct ActualValues[layout]Pass the IFC state to the LayoutBox::run_layout() function[layout]Describe crash (panic) for subtendril errors in line box fragmentation[style-parser]SupportcurrentColor[style-parser]Extract color parsing into a separate function[layout+compositor]Support CSScurrentColor[gfx-font]Begin working onfont-kitrendering support[style]Supportmargin-blockandmargin-inlineproperties[style]Parse<body>presentationalbackgroundandtexthints[layout]Run special path (replaced) for<img>elements[page]Don't crash on a network error in Fetch[page]Follow redirect URLs in HTTP responses[fetch]Add redirect URL getter forResponse[page]Scroll to top on page (re)load[page]Warn if there isn't a layout root when calling paint()[page]Always clean dirty state before entering command/task loop[common]Remove failing example of StrExt::index_of_substring()[page]Queue relayout, repaint, etc. by keeping track of the dirty state[app]Map keys to PageUp, PageDown, Home, End[page]Add actions Page{Up,Down} and ScrollTo{Bottom,Top} (Home & End)[page]Construct the scroller with the initial viewport size[page]Ensure scroll position isn't negative[layout]Implement the line box fragment algorithm![layout]Block formatting context: calculate the width of the container[compositor]Draw theLineBoxFragments instead of the whole text[layout]Add a base constructor for FormattingContext[layout]Add the LineBoxFragment vector to LayoutBox[layout]Add theLineBoxFragmenttype[gfx-font]Calculate the width of the U+0020 space character beforehand[layout]Dimensions: add utilities for the combined edges[common]Add some substring utilities[common]Addstr::index_of_substring()[gfx]Don't bound the text painting to the canvas size[style-comp]Inherited props should be applied cascaded before rule declarations[style-comp]Font properties should be inherited[layout]Fix CSS to ab_glyph font weight mapping[page]Remove the debug log of the stylesheets[gfx+page]Add scrolling input events and move viewport[page]Add Scroller construct[gfx]Add viewport position API[style-comp]Computate@mediarules[style-parser]Parse simple@media {screen,print,all}rules[style]Add@mediarules[page]Generate textures for loadedbackground-images[compositor]Drawbackground-images[layout]Loadbackground-images[style]Add thebackground-imageproperty[style]Support CSS<image>values[fetch]Handle unknown schemes[fetch]Extract the HTTP-version out of the publicfetchAPI[compositor]Render the images ofelements
[page]Loadsources after the HTML was parsed
[dom]: Add
data_ref()API to get the ImageData as reference[gfx]Create texture view atTexturecreation[fetch]Fetch local non-document files[fetch]Prevent panic on Request building[layout]Default background color of the page should be white[gfx]Add theTextureAPI for uploading textures[gfx]AddContextaccessor to theCanvasPaintingContext[dom]Extend APIs of ImageData[dom]Accessor for the image data directly, instead of the APIs[dom]Add helper to recurse children with theNodehandle[media-type]Fix media type sniffing not rewinding the seek buffer[dom]Add<img>element and image loading algorithm[fetch]AddContent-Type(MIME) getter toResponse[media-type]Add image media type sniffer[fetch]Fix url of the request initiator[gfx]Include win32 module[gfx]Introduce a GUI system interface[gfx]Rewrite painter to streamline canvas & window rendering[gfx]Render textured rects using the actual given rect[gfx]Fix textured vertices for matrix transform[gfx]Store viewport size in render pass[gfx]Remove clear color debug log[gfx]Move transformation math to amathmodule[deps]Update dependencies[ci]Use[rust-cache](https://github.com/Swatinem/rust-cache)[compositor+gfx+layout]Skip painting layout boxes outside the viewport[dom+layout]Make nodes implementPartialEq[gfx+page]Make submitting async for completion[gfx+layout+page]Use bg color of<html>as canvas clear color[docs]Add page that tracks the environment variables that are used[compositor+gfx]Trace compositor calls into a chrome://tracing format[gitignore]Ignore trace JSON files[deps]Addtracingdependencies & tracing feature flag for wgpu[retina]Update default env log filters[gfx]Prevent triple resize event when the window opens[gfx]Don't submit every draw call[page]Print warning when layout paint takes more than 200ms[page+layout]Don't regenerate layout tree on resize[retina-style]Parsefloatproperty & value[style-*]Cascade HTMLstyleattributes[user-agent]Fix the failing UA stylesheet test[layout]Remove anonymous layout debuginfo![gfx]Make window resizable[layout]IFC: Specify the origin of line boxes based on previous ones[layout]UseLineBoxes in the Inline Formatting Context[layout]Correctly wrap whitespace[layout]Pass the base FC to the child layout[layout]Add shared base for BFC and IFC[gfx-font]Size calculation should use 1.5x multiplier[layout]Start implementing the IFC[style-comp]The initial value ofdisplaymust beinline[ua]Add more styles for phrasing content to the UASS[layout]BorderStyle of None should discardborder-width[layout]Fix box internal calculation bugs[layout]Start implementing the BFC[gfx+layout]Find font based on the CSS computed style[style]Parse & resolve font-* properties[style-comp]font-sizeshould be inheritable[gfx]Multiply the CSS font size with 1.5x[gfx]Fix text color bug[cargo]Update dependencies[gfx+layout+page]Paint text using the provided CSS font[compositor+gfx]Paint the text of layout nodes[page]Initialize aBrowsingContextafter page load[scripting]Add scripting & platform object crates[gfx-font]Implement APIs for loading and retrieving fonts[gfx]Sketch out gfx-font crate[layout]Use content box instead of padding box for child boxes layout[compositor]Usepaddingproperties for border placement[layout]Calculate padding box edges[style+comp]Parsepaddingdeclarations[compositor+layout]Correctly paint background[style-comp]Fix bug withmarginshorthand[app+page]Reload page with the F5 key[retina+page]Dump layout tree with key F1[ci]continue-on-error: truefor Rust channel fallbacks[style-parser]Refactor code for cssparser version upgrade[cargo]Update dependencies[ci]Use toolchain fallbacks if nightly channel is unavailable[compositor+layout]Usemarginwith layout calculation[style]Parsemarginproperties[compositor]Paint borders of layout nodes[gfx]Fix incorrect position and size of painting a colored rect[layout+style]Calculate border sizes with content size[style]Parseborderproperties[layout]Correctly compute CSS<length>s[page]Regenerate layout tree on canvas resize[style]Parse percentage (25.5%) values[style]Parsevhandvwunits[style]Parseemandremunits[style]Parsefont-sizeproperties[page]Load<link rel="stylesheet">stylesheets[fetch]AddurlandnewAPIs forRequest[dom]Support<link>elements and theirrelattributes[style-parser]Don't panic on unknown color values[dom]ImplementSyncforNodeandNodeKind[everywhere]Use atomicStrTendril[docs]Add license and CI badges[docs]Fix README crate link[docs]Add README with an introduction to the project[docs]Add Apache 2.0 license[node]Use atomicRwLockinstead of syncRefCell[dom]Use atomic reference counting forNodehandles[page]Introduce the PageTaskMessage pipeline[debug]Include attributes with elements[dom]ImplementDisplayforAttributeList[compositor]Fix incorrect height of content[style-computation]Implement selector specificity[layout]Don't warn ondisplay: none[dom]Decouple theRc'ness ofNodeKind[dom]RenameNodetoNodeInterface[dom]Add & parse theCommentnode[dom]SubclassCharacterDataforText[debug]Fix compile error forcfg!if statement[debug+gfx+page]Add a simple Win32 DOM tree viewer[main+gfx+page]Move to event-based window architecture[dom]Fix broken concatenation of adjacent Text nodes[fetch]Supportfile://document URLs[fetch+page]Load pages using the newfetchcrate[page]Paint canvas' background as specified by HTML[gfx+compositor]Paint colored rect with actual rect dimensions[compositor+gfx]Render background colors[dom]Combine adjacent text nodes[retina]Set page URL to the window title[style-parser]Move style parsing to a separate crate- Merge remote-tracking branch 'origin/fetch'
[style]Improve declaration parsing[layout]Update generation for newCssDisplaytypes[style+more]Replace custom color parsing withcssparser[fetch]Introduce Fetch API crate[layout+style]Add formatting contexts and pseudo elements- Merge branch 'main' of github.com:usadson/retina
[style]Parse<length>values[style-comp]Addwidthandheightcomputed properties[retina]Delete old files[gfx]Uselogcrate for logging[layout]Uselogcrate for logging[gfx]Uselogcrate for logging[retina]Uselogcrate for logging[page]Uselogcrate for logging[gfx+page]Handle resizing of the window/surface[style]Parsedisplayas<display-inside>and<display-outside>[style]Parse attribute selectors[style]Parse#idand.classselectors[style+comp]Add#id,.classand[attr]selectors[dom]Add missing utilities forNodeKindandAttributeList[page]Dump stylesheets after they've been parsed[style]Warn on parse error and empty declarations[user agent]Extend the stylesheet to hide[ci]Use Rust nightly for compilation[user agent]Move theabout:pages to retina-user-agent[main]Default log level towarnon debug builds[dom]Warn about quirks mode & parse errors[dom]Store parsed attributes and display on dump[dom]Separate element creation by following the spec.[dom]ImplementDumpableNodeforNodeKind[layout]ImplementDumpableNodeforLayoutBox[common]AddDumpableNodetrait for dumping node-trees[layout]IntroduceLineBoxtype of inline boxes[layout]Fix generated layout box kinds[user-agent]Add User Agent stylesheet[layout+dom]Improve DOM tag in layout dump[style]Add type selectors (e.g.h1,p)[layout]Add dumping mechanism[layout]Append child layout boxes toLayoutBox::children[layout]Correction: initial containing block is parent of element[layout+more]Add box dimensions to theBox[style]Addbackground-colorproperty[compositor]Introduce the concept of the compositor[gfx+page]Add Canvas to draw the page to[page]Add basic Page infrastructure[test/html]Add simple<br>line break test[layout]Pass parent node to layout generator[dom]Add mutable children getter forParentNode[style-comp]Inherit properties after cascading[style]Addwhite-spaceproperty[style]Addwhite-spacevalue kind[dom]UseTendrilinstead ofStringfor text nodes[layout]Sketch out basicBoxstructure[style]Adddisplayproperty[style-comp]ReplaceComputedStylewithPropertyMap[style]AddRule::Atfor@rules[style-comp]Cascade collected styles[style]AssociateCascadeOriginwithStyleRule[style]Introduce cascade origin[style-comp]Add style collector[style-comp]Add selector matcher[style]Add CSS parser[gfx]MoveColorto retina-common crate[dom]Use test intest/htmlas input[dom]Add simple DOM component[gfx]Handle keyboard events (e.g. Ctrl+W)[gfx]Separate components into different structures[gfx]Add initial data and code for graphics[retina]Initializeenv_logger[everywhere]Restructure directories