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
@media
query support forscreen
andall
types- Text & whitespace transformations
- User Agent style sheet
- Internal Fetch API implementation
- Remote & local document & resource fetch
- Window resize is acted upon
- Logging using the
log
crate - 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-image
support (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-decoration
support- 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 incorrectApp
creation[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]
Enablewgpu
tracing/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-kit
backend 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 behindtrace
log 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]
Mergepaint
andcomposite
into 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#main
selectors![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-transform
CSS property[style]
Supporttext-transform
[compositor]
Supporttext-decoration
: line-through and overline[style-parser]
Supportfont-weight
[compositor]
Support basictext-decoration
properties[font]
Add accessors for baseline, underline offset+thickness[style]
Addtext-decoration
properties[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-caps
togfx-font
format[gfx-font]
Support capital letter font hints[style]
Supportfont-variant-caps
[page]
Add a CSS missing font loading mechanism[gfx]
Font description should beHash
andEq
[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-kerning
andfont-variant-ligatures
[gfx-font]
Add ability to change ligatures & kerning hints[gfx+font+gui]
Removewgpu_glyph
dependency[gfx-font]
Diverge path for grayscale or anti-aliasing[gfx-font]
Remove oldascent
per 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]
GiveTextureMaterialRenderer
better 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 debugabort
in Glyph loading[gfx]
Makepaint_rect_textured
extensible[gfx]
Streamline material rendering code[gfx-font]
Custom text rendering withfont_kit
glyph rasterization[gfx+font]
AbstractFont
painting[gfx-font]
RenameFont
toWgpuFont
[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]
Usecopypasta
instead 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-kit
rendering support[style]
Supportmargin-block
andmargin-inline
properties[style]
Parse<body>
presentationalbackground
andtext
hints[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 theLineBoxFragment
s instead of the whole text[layout]
Add a base constructor for FormattingContext[layout]
Add the LineBoxFragment vector to LayoutBox[layout]
Add theLineBoxFragment
type[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@media
rules[style-parser]
Parse simple@media {screen,print,all}
rules[style]
Add@media
rules[page]
Generate textures for loadedbackground-image
s[compositor]
Drawbackground-image
s[layout]
Loadbackground-image
s[style]
Add thebackground-image
property[style]
Support CSS<image>
values[fetch]
Handle unknown schemes[fetch]
Extract the HTTP-version out of the publicfetch
API[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 atTexture
creation[fetch]
Fetch local non-document files[fetch]
Prevent panic on Request building[layout]
Default background color of the page should be white[gfx]
Add theTexture
API for uploading textures[gfx]
AddContext
accessor 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 theNode
handle[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 amath
module[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]
Addtracing
dependencies & 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]
Parsefloat
property & value[style-*]
Cascade HTMLstyle
attributes[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]
UseLineBox
es 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 ofdisplay
must 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-size
should 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 aBrowsingContext
after 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]
Usepadding
properties for border placement[layout]
Calculate padding box edges[style+comp]
Parsepadding
declarations[compositor+layout]
Correctly paint background[style-comp]
Fix bug withmargin
shorthand[app+page]
Reload page with the F5 key[retina+page]
Dump layout tree with key F1[ci]
continue-on-error: true
for 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]
Usemargin
with layout calculation[style]
Parsemargin
properties[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]
Parseborder
properties[layout]
Correctly compute CSS<length>
s[page]
Regenerate layout tree on canvas resize[style]
Parse percentage (25.5%
) values[style]
Parsevh
andvw
units[style]
Parseem
andrem
units[style]
Parsefont-size
properties[page]
Load<link rel="stylesheet">
stylesheets[fetch]
Addurl
andnew
APIs forRequest
[dom]
Support<link>
elements and theirrel
attributes[style-parser]
Don't panic on unknown color values[dom]
ImplementSync
forNode
andNodeKind
[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 atomicRwLock
instead of syncRefCell
[dom]
Use atomic reference counting forNode
handles[page]
Introduce the PageTaskMessage pipeline[debug]
Include attributes with elements[dom]
ImplementDisplay
forAttributeList
[compositor]
Fix incorrect height of content[style-computation]
Implement selector specificity[layout]
Don't warn ondisplay: none
[dom]
Decouple theRc
'ness ofNodeKind
[dom]
RenameNode
toNodeInterface
[dom]
Add & parse theComment
node[dom]
SubclassCharacterData
forText
[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 newfetch
crate[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 newCssDisplay
types[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]
Addwidth
andheight
computed properties[retina]
Delete old files[gfx]
Uselog
crate for logging[layout]
Uselog
crate for logging[gfx]
Uselog
crate for logging[retina]
Uselog
crate for logging[page]
Uselog
crate for logging[gfx+page]
Handle resizing of the window/surface[style]
Parsedisplay
as<display-inside>
and<display-outside>
[style]
Parse attribute selectors[style]
Parse#id
and.class
selectors[style+comp]
Add#id
,.class
and[attr]
selectors[dom]
Add missing utilities forNodeKind
andAttributeList
[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 towarn
on 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]
ImplementDumpableNode
forNodeKind
[layout]
ImplementDumpableNode
forLayoutBox
[common]
AddDumpableNode
trait for dumping node-trees[layout]
IntroduceLineBox
type 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-color
property[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-space
property[style]
Addwhite-space
value kind[dom]
UseTendril
instead ofString
for text nodes[layout]
Sketch out basicBox
structure[style]
Adddisplay
property[style-comp]
ReplaceComputedStyle
withPropertyMap
[style]
AddRule::At
for@rules
[style-comp]
Cascade collected styles[style]
AssociateCascadeOrigin
withStyleRule
[style]
Introduce cascade origin[style-comp]
Add style collector[style-comp]
Add selector matcher[style]
Add CSS parser[gfx]
MoveColor
to retina-common crate[dom]
Use test intest/html
as 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