- Bitmap favicon support added
- Anchor
<a href>
elements can now be clicked upon to navigate to another page
- Complex selector support added (
h1 > p.title
,form input
,label + input
, etc.) - Aliased
flow-root
asflow
(for the time being) to improve general layout of websites - Default background color restored (from magenta back to white)
- Monospace fonts are now also preloaded
- Reduced line length when displaying CSS parse errors, which would otherwise - in cases of minified files - print out the whole CSS stylesheet
- Physical units are now supported:
in
,cm
,pt
,mm
,Q
- Font faces are now correctly case-insensitively matched
- Avoid loading the same font when the load was started in a previous cycle, but not yet finished
- All generic font families are now recognized and translated per platform
- CSS-wide keywords are now recognized (
inherit
,initial
, etc.) to e.g. avoid searching for fonts named"inherit"
. Note that this does not imply the semantics of the values are supported. - Empty style rules are now not registered in the
Stylesheet
structure to improve selector matching performance @font-face
rules are now supported, meaning you can use the fonts of e.g. Google Fonts or your own to improve the visuals of websites- Fix broken CSS-wide keyword recognition
- Absolute CSS font sizes are supported (e.g.
medium
,x-large
,xx-small
) - Fix broken
text-decoration
shorthand property. - Fix crash in CSS parse error logging
- Fix crash in anonymous layout that starts with whitespace (occurred e.g. on Wikipedia)
- Screen scaling (DPI) solves the text issue
- CSS
cursor
property is now supported - Relative
font-size
s (e.g. theem
unit) are not resolved at compute time, so that they cascade correctly. white-space: pre
will now correctly honor forced line breaks (e.g. with the use of theU+000A LINE FEED '\n'
character).- Fix: emoji will no longer break lines unnecessarily.
- Implemented styles for
<input type="text">
,<input type="checkbox">
,<input type="radio">
and buttons. - Support pseudo class
:checked
- Support pseudo class
:placeholder-shown
- Display placeholder if
value
is empty - Add UA style for greying out the placeholder text color
- Fixed incorrect assumption that the first node of a document is the
<html>
node (it can also be a<!-- comment -->
) - Add support for
<input type="hidden">
- Initial support for SVG 2 on Windows (using Direct2D)
- Support the
<rect>
element - Support the
<path>
element- MoveTo (
M
/m
) - ClosePath (
Z
/z
) - LineTo (
L
/l
,H
/h
andV
/v
) - CurveTo (
C
/c
andT
/t
) - Quadratic Bezier CurveTo (
Q
/q
andS
/s
) - Elliptic Arc (
A
/a
)
- MoveTo (
- Basic
paint
support - Shape stroke support
viewBox
support on the<svg>
element- Support the
circle
element - Support the
ellipse
element - Support the
line
element - Support the
polyline
element - Support the
polygon
element
ColorMaterialRenderer
andTextureMaterialRenderer
are now globally shared instead of perArtwork
, which previously made the creation time of tiles significantly slower.- Replace some
.expect(&format(...))
calls with a conditionallet Ok(..) = .. else { panic!(...) }
calls to avoid String allocations in normal cases. - Image bitmaps with the same URL share the same resources & only fetches once
- Document URLs without a scheme (e.g.
https
,ftp
) are now prefixed withhttps://
in order to be more relaxed with URLs given to theRETINA_URL
environment variable. - Provide standard HTTP headers with fetch, e.g.
Accept
,User-Agent
- Provide Fetch Metadata HTTP headers, e.g.
Sec-Fetch-Dest
,Sec-Fetch-Mode
- Requests are now possibly associated with a referrer (HTTP, Fetch), which makes some sites work load their fonts correctly.
Content-Encoding
is now supported (br
,gzip
,deflate
)
- Added a crash screen, displaying where the error in source code occurred
- Updated dependencies, namely moved
boa
from Git checkout to crates.io release - Bitmap images are now freed from the main memory after they've been uploaded to the GPU
- The keybinding
F10
now displays a memory occupancy for the DOM and Layout tree - FreeType segmentation fault solved by loading glyphs on those systems serially instead of parallel (as on Windows with DirectWrite)
- Crash solved for default fonts that could not be found (namely default emoji fonts)
- Line-based scrolling, which is the type of scrolling emitted by a mouse, is now fixed. Previously only pixel-based scrolling was supported (emitted by track pads and touch screens).
- Silenced warning on FreeType systems when requesting the origin of a glyph.
- Support WOFF and WOFF2 font compressions
- Honor screen scaling (DPI) (fixes #23)
- Composited emoji (like π©πΌβπ») are now properly recognized
- Support changing the cursor of the windows
- Anchor elements (
<a href="..">
) can now be clicked to navigate - Hit-testing now honors the scroll position as well
- Fix rare crash when GIFs have 0 frames
- Avoiding redraws for GIFs with only one frame (static image)
- Added a special JSON translator that creates a special DOM with pretty-printed JSON output
- Fixed crash in
DocumentWrapper
which prevented some pages with<!-- comments -->
to load. - Implemented proper support for Unicode UTS #51. This fixed another emoji sequence bug, where a grapheme of only
Emoji_Component
s would get recognized as emoji, e.g. β100β
This is the first official release!
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!
[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 of elements[page]
Load sources after the HTML was parsed[dom]
: Adddata_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
- After this version, the project was completely restructured
- Simply CI created
- Initial creation