mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 02:42:44 +00:00 
			
		
		
		
	LibWeb: Include standard SVG user agent style sheet
For now, part of this is commented-out. Our current implementations of `<mask>` and `<symbol>` rely on creating layout nodes, so they can't be `display: none`.
This commit is contained in:
		
							parent
							
								
									a6131634f1
								
							
						
					
					
						commit
						ae4b8d86df
					
				
					 7 changed files with 68 additions and 2 deletions
				
			
		|  | @ -96,6 +96,14 @@ function (generate_css_implementation) | |||
|         NAMESPACE "Web::CSS" | ||||
|     ) | ||||
| 
 | ||||
|     embed_as_string_view( | ||||
|         "SVGStyleSheetSource.cpp" | ||||
|         "${LIBWEB_INPUT_FOLDER}/SVG/Default.css" | ||||
|         "SVG/SVGStyleSheetSource.cpp" | ||||
|         "svg_stylesheet_source" | ||||
|         NAMESPACE "Web::CSS" | ||||
|     ) | ||||
| 
 | ||||
|     set(CSS_GENERATED_TO_INSTALL | ||||
|         "CSS/EasingFunctions.h" | ||||
|         "CSS/Enums.h" | ||||
|  |  | |||
|  | @ -230,6 +230,13 @@ embed_as_string_view("generate_mathml_stylesheet_source") { | |||
|   namespace = "Web::CSS" | ||||
| } | ||||
| 
 | ||||
| embed_as_string_view("generate_svg_stylesheet_source") { | ||||
|   input = "SVG/Default.css" | ||||
|   output = "$target_gen_dir/SVG/SVGStyleSheetSource.cpp" | ||||
|   variable_name = "svg_stylesheet_source" | ||||
|   namespace = "Web::CSS" | ||||
| } | ||||
| 
 | ||||
| embed_as_string_view("generate_quirks_mode_stylesheet_source") { | ||||
|   input = "CSS/QuirksMode.css" | ||||
|   output = "$target_gen_dir/CSS/QuirksModeStyleSheetSource.cpp" | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline | |||
|         SVGSVGBox <svg> at (8,8) content-size 300x150 [SVG] children: inline | ||||
|           TextNode <#text> | ||||
|           Box <use> at (8,8) content-size 0x0 children: inline | ||||
|             Box <symbol#braces> at (8,8) content-size 0x0 children: inline | ||||
|             Box <symbol#braces> at (8,8) content-size 0x0 [BFC] children: inline | ||||
|               TextNode <#text> | ||||
|               SVGGeometryBox <path> at (92.375,26.75) content-size 131.25x112.15625 children: inline | ||||
|                 TextNode <#text> | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline | |||
|         frag 2 from SVGSVGBox start: 0, length: 0, rect: [16,21 0x0] | ||||
|       ImageBox <img> at (8,21) content-size 0x0 children: not-inline | ||||
|         (SVG-as-image isolated context) | ||||
|         Viewport <#document> at (0,0) content-size 0x0 children: inline | ||||
|         Viewport <#document> at (0,0) content-size 0x0 [BFC] children: inline | ||||
|           SVGSVGBox <svg> at (0,0) content-size 0x0 [SVG] children: inline | ||||
|             TextNode <#text> | ||||
|             SVGGeometryBox <rect> at (0,0) content-size 1x1 children: not-inline | ||||
|  |  | |||
|  | @ -655,6 +655,7 @@ set(GENERATED_SOURCES | |||
|     CSS/TransformFunctions.cpp | ||||
|     CSS/ValueID.cpp | ||||
|     MathML/MathMLStyleSheetSource.cpp | ||||
|     SVG/SVGStyleSheetSource.cpp | ||||
| ) | ||||
| 
 | ||||
| serenity_lib(LibWeb web) | ||||
|  |  | |||
|  | @ -239,6 +239,16 @@ static CSSStyleSheet& mathml_stylesheet(DOM::Document const& document) | |||
|     return *sheet; | ||||
| } | ||||
| 
 | ||||
| static CSSStyleSheet& svg_stylesheet(DOM::Document const& document) | ||||
| { | ||||
|     static JS::Handle<CSSStyleSheet> sheet; | ||||
|     if (!sheet.cell()) { | ||||
|         extern StringView svg_stylesheet_source; | ||||
|         sheet = JS::make_handle(parse_css_stylesheet(CSS::Parser::ParsingContext(document), svg_stylesheet_source)); | ||||
|     } | ||||
|     return *sheet; | ||||
| } | ||||
| 
 | ||||
| template<typename Callback> | ||||
| void StyleComputer::for_each_stylesheet(CascadeOrigin cascade_origin, Callback callback) const | ||||
| { | ||||
|  | @ -247,6 +257,7 @@ void StyleComputer::for_each_stylesheet(CascadeOrigin cascade_origin, Callback c | |||
|         if (document().in_quirks_mode()) | ||||
|             callback(quirks_mode_stylesheet(document())); | ||||
|         callback(mathml_stylesheet(document())); | ||||
|         callback(svg_stylesheet(document())); | ||||
|     } | ||||
|     if (cascade_origin == CascadeOrigin::User) { | ||||
|         if (m_user_style_sheet) | ||||
|  |  | |||
							
								
								
									
										39
									
								
								Userland/Libraries/LibWeb/SVG/Default.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Userland/Libraries/LibWeb/SVG/Default.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| /* https://svgwg.org/svg2-draft/styling.html#UAStyleSheet */ | ||||
| 
 | ||||
| @namespace url(http://www.w3.org/2000/svg); | ||||
| @namespace xml url(http://www.w3.org/XML/1998/namespace); | ||||
| 
 | ||||
| svg:not(:root), image, marker, pattern, symbol { overflow: hidden; } | ||||
| 
 | ||||
| *:not(svg), | ||||
| *:not(foreignObject) > svg { | ||||
|     transform-origin: 0 0; | ||||
| } | ||||
| 
 | ||||
| *[xml|space=preserve] { | ||||
|     text-space-collapse: preserve-spaces; | ||||
| } | ||||
| 
 | ||||
| /* FIXME: Allow setting the rest of these to `display: none`. | ||||
|           Currently that breaks <use> and <mask> and probably others. */ | ||||
| desc, title, metadata, | ||||
| pattern, linearGradient, radialGradient, | ||||
| script, style { | ||||
|     display: none !important; | ||||
| } | ||||
| /* | ||||
| defs, | ||||
| clipPath, mask, marker, | ||||
| desc, title, metadata, | ||||
| pattern, linearGradient, radialGradient, | ||||
| script, style, | ||||
| symbol { | ||||
|     display: none !important; | ||||
| } | ||||
| */ | ||||
| :host(use) > symbol { | ||||
|     display: inline !important; | ||||
| } | ||||
| :link, :visited { | ||||
|     cursor: pointer; | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sam Atkins
						Sam Atkins