Commit Graph

229 Commits

Author SHA1 Message Date
Michael Drake
a885818d78 html: css: Update to new css_computed_width API 2024-05-27 13:51:31 +01:00
Daniel Silverstone
087f88ae8c
box_construct: clamp rowspan and colspan
In order to not blow up on massive rowspan/colspan values (which
could be an issue according to #2873) we clamp them according to
the HTML spec section 4.9.11

Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
2024-05-27 09:36:02 +01:00
Michael Drake
e1d7a346dd calc(): layout: find dimensions: Use new css width getter API 2024-05-26 13:30:19 +01:00
Michael Drake
68e6876c8d calc(): layout: table: Use new css width getter API 2024-05-26 11:50:12 +01:00
Michael Drake
052550c667 calc(): layout: minmax block: Use new css width getter API 2024-05-26 11:45:35 +01:00
Michael Drake
09b076c141 calc(): layout: minmax line: Use new css width getter API 2024-05-26 10:47:33 +01:00
Michael Drake
0f18e7a7fd calc(): layout: minmax table: Use new css width getter API 2024-05-26 10:11:31 +01:00
Michael Drake
9448c44bab css, html: Update to new LibCSS css_computed_width API
Currently using the static variant, but in future we'll
switch to using the one that resolves to pixels for us.
2024-05-25 22:41:57 +01:00
Michael Drake
120be3d771 html: layout: FPCT_OF_INT_TOINT is now in LibCSS 2024-05-25 22:41:57 +01:00
Vincent Sanders
b5f4d905f9 use attributes to indicate switch fall through instead of comments 2024-03-05 21:33:13 +00:00
Vincent Sanders
07d09bbdfc res variable could possibly be used without being set 2024-02-27 13:24:48 +00:00
John-Mark Bell
91b29b626f HTML/forms: fix radio button group handling 2024-02-25 15:00:39 +00:00
Vincent Sanders
bce0aa6fc9 Do not crash if radio form has no name attribute 2024-02-25 10:28:03 +00:00
Michael Drake
dcdd0148b2 html: css: Remove redundant origin filtering for author_level_css 2023-11-26 10:50:38 +00:00
Michael Drake
571a9ca0c9 html: Avoid processing STYLE elements if author_level_css disabled 2023-11-26 10:50:38 +00:00
Michael Drake
33bba1d9fd html: Avoid fetching (and decoding) linked stylesheets
When the `author_level_css` option is disabled, avoid fetching
stylesheets that won't be used for selection.
2023-11-26 10:50:38 +00:00
Michael Drake
74ab1eb244 html: css: Minor code style fix 2023-11-26 10:50:38 +00:00
Michael Drake
3f764b0459 html: layout: Ensure all object types are reflowed if appropriate
The SVGTiny content handler uses the reflow method to set the
content width/height. The when the content first broadcasts "done",
the HTML handler checks if there had already been a layout. If there
has, it calls the SVG's content reflow method with the box dimensions.
If not, it calls the reflow method with width/height zero.

Since the layout code was only reflowing objects if they were HTML,
these SVG contents were never getting their actual dimensions.

The result of this was that when we came to plot these SVGs we were
dividing by zero in the building of the transformation matrix:

    transform[0] = (float) width / (float) c->width;
...
    transform[3] = (float) height / (float) c->height;

These divided the plot size by the content size.

The result of this on the GTK front end was infinities in the
transformation matrix passed to Cairo, and the turning of the
whole nsgtk window into a glitchy ruin while the SVG was on
screen.

It may have affected other front ends too; these divide by zeros
were happening in the core, and passed to the front ends' plotters.

This issue only affected SVGs on HTML pages, and not when viewed
directly. Also the SVGs had to be completely fetched and converted
before the document had undergone layout.

This was the case with SVGs at the top of both Wikipedia and The
Register. In both cases the glitching window would be fixed by
scrolling down the page past the SVG.
2023-11-25 21:09:01 +00:00
Michael Drake
4cb38c4704 css: Add option to ignore author level CSS
This adds a new config option, `author_level_css`.

When it is disabled, NetSurf will ignore all CSS from the web
page. In this case only the default CSS rules from the browser
and user CSS rules will be applied. It is enabled by default.

Tested by running:

    ./nsgtk3 --author_level_css=0
2023-11-25 20:02:23 +00:00
Michael Drake
c987b043b1 Clean up print format specifier usage 2023-06-17 11:20:09 +01:00
DeltaVonNeumann
a16d5ff10b Avoid integer types with platform dependent size 2023-06-17 10:29:39 +01:00
Michael Drake
f7a0135300 html: layout: flex: Don't freeze already-frozen items
This fixes an error in the used main size tracking.
2022-12-16 14:18:46 +00:00
Michael Drake
73dab84ef8 html: layout: flex: shrink: Avoid rounding error accumulation 2022-12-16 14:18:46 +00:00
Michael Drake
dbd7f5bcd8 html: layout: flex: grow: Avoid rounding error accumulation 2022-12-16 14:18:46 +00:00
Michael Drake
71765dd1e8 html: layout: flex: Handle auto margins in main direction 2022-12-15 21:57:15 +00:00
Michael Drake
88e6fc918a html: layout: flex: Track used size and count auto margins for main 2022-12-15 21:57:15 +00:00
Michael Drake
cab66fb1ac html: layout: flex: Helper to get main margin end size 2022-12-15 21:57:15 +00:00
Michael Drake
e754f31cb7 html: layout: flex: Support reversed main direction 2022-12-14 22:53:35 +00:00
Michael Drake
fbc4f141f7 html: layout: Helpers to get cross/main box size 2022-12-14 22:53:35 +00:00
Michael Drake
25acf1a5dd html: layout: flex: Rename indirected box w/h functions 2022-12-14 22:53:35 +00:00
Michael Drake
73ce30325f html: layout: flex: Scope reduce variables 2022-12-14 22:53:35 +00:00
Michael Drake
3760bbcd2a html: layout: flex: Only distribute positive remaining cross space 2022-12-14 22:53:35 +00:00
Michael Drake
b07bda787c html: layout: flex: Minor code style change 2022-12-14 22:53:35 +00:00
Michael Drake
43d5ce44ac html: layout: flex: Add code documentation 2022-12-14 22:53:35 +00:00
Michael Drake
8d4176e4d4 html: layout: flex: Hoist item placement out of line resolver 2022-12-14 22:53:35 +00:00
Michael Drake
6da16e5648 html: layout: flex: Return NULL for pointer 2022-12-14 22:53:35 +00:00
Michael Drake
fbb39f0d49 html: layout: Helper for whether flex direction is reversed 2022-12-14 22:53:35 +00:00
Michael Drake
217f71357e html: layout: flex: Disable verbose logging 2022-11-02 20:16:41 +00:00
Michael Drake
45b68a3b50 html: layout: flex: Implement align-items and align-self 2022-11-02 20:16:41 +00:00
Michael Drake
47482bd539 html: layout: flex: Implement wrap-reverse 2022-11-02 20:16:41 +00:00
Michael Drake
e9147bdeea html: layout: flex: Don't pass content around unnecessarily 2022-11-02 20:16:41 +00:00
Michael Drake
b91d61b89f html: layout: flex: Compare line main size with available main
When deciding whether to use the grow or shrink flex factor we
we using the available width, rather than the space available in
the main direction.
2022-11-02 20:16:41 +00:00
Michael Drake
d0b1bcb01a html: layout: flex: Unify line item placement 2022-11-02 20:16:41 +00:00
Michael Drake
6c2f9f3285 html: layout helpers: Add helpers for width/height indirection 2022-11-02 20:16:41 +00:00
Michael Drake
991f657ecd html: layout: Remove duplicate typedefs 2022-10-29 22:28:49 +01:00
Michael Drake
094eb9ae48 layout: flex: Squash main is usually a function warning 2022-10-29 22:15:58 +01:00
Michael Drake
8615964c3f html: layout: Initial implementation of display: flex 2022-10-29 20:30:48 +01:00
Michael Drake
06eee4636f html: box_dump: Indicate descendant bounding box values 2022-10-29 20:30:48 +01:00
Michael Drake
6da0bf5b84 layout: minmax pass: Improve handling of {min|max}_width properties 2022-10-29 20:30:48 +01:00
Michael Drake
145d6dfc6c layout: minmax table: Change logging level to error 2022-10-29 20:30:48 +01:00