mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Imported svgviewer from qt4.8
This is from commit 543486a41963f8d20d9771d2107cdd5a22894bdb in the Qt git repository: git://gitorious.org/qt/qt.git
This commit is contained in:
		
							parent
							
								
									041c06bd9d
								
							
						
					
					
						commit
						62b9e16f87
					
				
					 11 changed files with 994 additions and 0 deletions
				
			
		
							
								
								
									
										215
									
								
								libs/svgviewer/files/bubbles.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								libs/svgviewer/files/bubbles.svg
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,215 @@ | ||||||
|  | <?xml version="1.0" standalone="no"?> | ||||||
|  | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> | ||||||
|  | <svg width="20cm" height="15cm" viewBox="0 0 800 600" | ||||||
|  |     xmlns="http://www.w3.org/2000/svg" | ||||||
|  |     xmlns:xlink="http://www.w3.org/1999/xlink/" | ||||||
|  |     baseProfile="tiny" version="1.2"> | ||||||
|  |   <title>Spheres</title> | ||||||
|  |   <desc>Semi-transparent bubbles on a colored background.</desc> | ||||||
|  |     <defs> | ||||||
|  |       <!-- Create radial gradients for each bubble. --> | ||||||
|  |       <radialGradient id="blueBubble" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" stop-opacity="1" /> | ||||||
|  |         <stop offset="25%" stop-color="#cdcdff" stop-opacity=".65" /> | ||||||
|  |         <stop offset="100%" stop-color="#cdaacd" stop-opacity=".75" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="redBubble" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" stop-opacity="1" /> | ||||||
|  |         <stop offset="25%" stop-color="#ffcdcd" stop-opacity=".65" /> | ||||||
|  |         <stop offset="100%" stop-color="#bbbb99" stop-opacity=".75" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="greenBubble" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" stop-opacity="1" /> | ||||||
|  |         <stop offset="25%" stop-color="#cdffcd" stop-opacity=".65" /> | ||||||
|  |         <stop offset="100%" stop-color="#99aaaa" stop-opacity=".75" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="yellowBubble" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" stop-opacity="1" /> | ||||||
|  |         <stop offset="25%" stop-color="#ffffcd" stop-opacity=".65" /> | ||||||
|  |         <stop offset="100%" stop-color="#bbbbaa" stop-opacity=".75" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="background" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="400" fx="250" fy="250"> | ||||||
|  |         <stop offset="0%" stop-color="#ffffee" /> | ||||||
|  |         <stop offset="100%" stop-color="#ccccaa" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <linearGradient id="surface" gradientUnits="userSpaceOnUse" | ||||||
|  |                       x1="-100" y1="200" x2="400" y2="200"> | ||||||
|  |         <stop offset="0%" stop-color="#ffffcc" /> | ||||||
|  |         <stop offset="100%" stop-color="#bbbb88" /> | ||||||
|  |       </linearGradient> | ||||||
|  | 
 | ||||||
|  |       <!-- Create radial gradients for each circle to make them look like | ||||||
|  |            spheres. --> | ||||||
|  |       <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" /> | ||||||
|  |         <stop offset="75%" stop-color="blue" /> | ||||||
|  |         <stop offset="100%" stop-color="#222244" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="redSphere" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" /> | ||||||
|  |         <stop offset="75%" stop-color="red" /> | ||||||
|  |         <stop offset="100%" stop-color="#442222" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="greenSphere" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" /> | ||||||
|  |         <stop offset="75%" stop-color="green" /> | ||||||
|  |         <stop offset="100%" stop-color="#113311" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="yellowSphere" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" /> | ||||||
|  |         <stop offset="75%" stop-color="yellow" /> | ||||||
|  |         <stop offset="100%" stop-color="#444422" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="shadowGrad" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="50"> | ||||||
|  |         <stop offset="0%" stop-color="black" stop-opacity="1.0" /> | ||||||
|  |         <stop offset="100%" stop-color="black" stop-opacity="0.0" /> | ||||||
|  |       </radialGradient> | ||||||
|  | 
 | ||||||
|  |       <!-- Define a shadow for each sphere. --> | ||||||
|  |       <circle id="shadow" fill="url(#shadowGrad)" cx="0" cy="0" r="100" /> | ||||||
|  |       <g id="bubble"> | ||||||
|  |         <circle fill="black" cx="0" cy="0" r="50" /> | ||||||
|  |         <circle fill="#a6ce39" cx="0" cy="0" r="33" /> | ||||||
|  |         <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10 | ||||||
|  |                               L -11,22 L -1,12 Z" /> | ||||||
|  |         <circle cx="0" cy="0" r="100" /> | ||||||
|  |       </g> | ||||||
|  |     </defs> | ||||||
|  |   <g> | ||||||
|  |     <rect fill="url(#background)" x="0" y="0" width="800" height="600" /> | ||||||
|  |   </g> | ||||||
|  | 
 | ||||||
|  |   <g transform="translate(200,700)"> | ||||||
|  |     <use xlink:href="#bubble" fill="url(#blueBubble)" /> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="1s" dur="10s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(315,700)"> | ||||||
|  |     <g transform="scale(0.5,0.5)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#redBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="3s" dur="7s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(80,700)"> | ||||||
|  |     <g transform="scale(0.65,0.65)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#greenBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="5s" dur="9s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(255,700)"> | ||||||
|  |     <g transform="scale(0.3,0.3)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#yellowBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="2s" dur="6s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(565,700)"> | ||||||
|  |     <g transform="scale(0.4,0.4)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#blueBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="4s" dur="8s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(715,700)"> | ||||||
|  |     <g transform="scale(0.6,0.6)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#redBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="1s" dur="4s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(645,700)"> | ||||||
|  |     <g transform="scale(0.375,0.375)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#greenBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="0s" dur="11s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(555,700)"> | ||||||
|  |     <g transform="scale(0.9,0.9)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#yellowBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="3s" dur="7.5s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  | 
 | ||||||
|  |   <g transform="translate(360,700)"> | ||||||
|  |     <g transform="scale(0.5,0.5)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#blueBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="3s" dur="6s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(215,700)"> | ||||||
|  |     <g transform="scale(0.45,0.45)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#redBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="5.5s" dur="7s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(420,700)"> | ||||||
|  |     <g transform="scale(0.75,0.75)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#greenBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="1s" dur="9s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(815,700)"> | ||||||
|  |     <g transform="scale(0.6,0.6)"> | ||||||
|  |       <use xlink:href="#bubble" fill="url(#yellowBubble)" /> | ||||||
|  |     </g> | ||||||
|  |     <animateTransform attributeName="transform" type="translate" additive="sum" | ||||||
|  |         values="0,0; 0,-800" begin="2s" dur="9.5s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |   </g> | ||||||
|  | 
 | ||||||
|  |   <g transform="translate(225,375)" > | ||||||
|  |     <g transform="scale(1.0,0.5)" > | ||||||
|  |       <path d="M 0 0 L 350 0 L 450 450 L -100 450 z" | ||||||
|  |             fill="url(#surface)" stroke="none" /> | ||||||
|  |     </g> | ||||||
|  |   </g> | ||||||
|  |     <g transform="translate(200,0)" > | ||||||
|  |     <g transform="translate(200,490) scale(2.0,1.0) rotate(45)" > | ||||||
|  |       <rect fill="#a6ce39" x="-69" y="-69" width="138" height="138" /> | ||||||
|  |       <circle fill="black" cx="0" cy="0" r="50" /> | ||||||
|  |       <circle fill="#a6ce39" cx="0" cy="0" r="33" /> | ||||||
|  |       <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10 | ||||||
|  |                             L -11,22 L -1,12 Z" /> | ||||||
|  |       <animateTransform attributeName="transform"  type="rotate" additive="sum" values="0; 360" | ||||||
|  | 	         begin="0s" dur="10s" fill="freeze" repeatCount="indefinite" /> | ||||||
|  |     </g> | ||||||
|  |     <g transform="translate(200,375)"> | ||||||
|  |       <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" /> | ||||||
|  |       <circle fill="url(#blueSphere)" cx="0" cy="0" r="100" /> | ||||||
|  |     </g> | ||||||
|  |     <g transform="translate(315,440)"> | ||||||
|  |       <g transform="scale(0.5,0.5)"> | ||||||
|  |         <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" /> | ||||||
|  |         <circle fill="url(#redSphere)" cx="0" cy="0" r="100" /> | ||||||
|  |       </g> | ||||||
|  |     </g> | ||||||
|  |     <g transform="translate(80,475)"> | ||||||
|  |       <g transform="scale(0.65,0.65)"> | ||||||
|  |         <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" /> | ||||||
|  |         <circle fill="url(#greenSphere)" cx="0" cy="0" r="100" /> | ||||||
|  |       </g> | ||||||
|  |     </g> | ||||||
|  |     <g transform="translate(255,525)"> | ||||||
|  |       <g transform="scale(0.3,0.3)"> | ||||||
|  |         <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" /> | ||||||
|  |         <circle fill="url(#yellowSphere)" cx="0" cy="0" r="100" /> | ||||||
|  |       </g> | ||||||
|  |     </g> | ||||||
|  |   </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 9.9 KiB | 
							
								
								
									
										77
									
								
								libs/svgviewer/files/cubic.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								libs/svgviewer/files/cubic.svg
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | ||||||
|  | <?xml version="1.0" standalone="no"?> | ||||||
|  | <svg width="10cm" height="10cm" viewBox="0 0 1000 1000" | ||||||
|  |      xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny"> | ||||||
|  |   <title>Example cubic02 - cubic Bezier commands in path data</title> | ||||||
|  |   <desc>Picture showing examples of "C" and "S" commands, | ||||||
|  |         along with annotations showing the control points | ||||||
|  |         and end points</desc> | ||||||
|  | 
 | ||||||
|  |   <rect fill="none" stroke="blue" stroke-width="1" x="1" y="1" width="998" height="998" /> | ||||||
|  | 
 | ||||||
|  |   <!-- Path 1 --> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="100,200 100,100" /> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="400,100 400,200" /> | ||||||
|  |   <path fill="none" stroke="red" stroke-width="5" d="M100,200 C100,100 400,100 400,200" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="200" r="10" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="200" r="10" /> | ||||||
|  |   <circle class="CtlPoint" cx="100" cy="100" r="10" /> | ||||||
|  |   <circle class="CtlPoint" cx="400" cy="100" r="10" /> | ||||||
|  |   <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="275">M100,200 C100,100 400,100 400,200</text> | ||||||
|  | 
 | ||||||
|  |   <!-- Path 2 --> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="100,500 25,400" /> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="475,400 400,500" /> | ||||||
|  |   <path fill="none" stroke="red" stroke-width="5" d="M100,500 C25,400 475,400 400,500" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="500" r="10" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="500" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="25" cy="400" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="475" cy="400" r="10" /> | ||||||
|  |   <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="575">M100,500 C25,400 475,400 400,500</text> | ||||||
|  | 
 | ||||||
|  |   <!-- Path 3 --> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="100,800 175,700" /> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="325,700 400,800" /> | ||||||
|  |   <path fill="none" stroke="red" stroke-width="5" d="M100,800 C175,700 325,700 400,800" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="800" r="10" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="800" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="175" cy="700" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="325" cy="700" r="10" /> | ||||||
|  |   <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="875">M100,800 C175,700 325,700 400,800</text> | ||||||
|  | 
 | ||||||
|  |   <!-- Path 4 --> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="600,200 675,100" /> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="975,100 900,200" /> | ||||||
|  |   <path fill="none" stroke="red" stroke-width="5" d="M600,200 C675,100 975,100 900,200" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="200" r="10" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="200" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="675" cy="100" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="975" cy="100" r="10" /> | ||||||
|  |   <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="275">M600,200 C675,100 975,100 900,200</text> | ||||||
|  | 
 | ||||||
|  |   <!-- Path 5 --> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="600,500 600,350" /> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="900,650 900,500" /> | ||||||
|  |   <path fill="none" stroke="red" stroke-width="5" d="M600,500 C600,350 900,650 900,500" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="500" r="10" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="500" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="600" cy="350" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="900" cy="650" r="10" /> | ||||||
|  |   <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="575">M600,500 C600,350 900,650 900,500</text> | ||||||
|  | 
 | ||||||
|  |   <!-- Path 6 (C and S command) --> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="600,800 625,700" /> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="725,700 750,800" /> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="750,800 775,900" /> | ||||||
|  |   <polyline fill="none" stroke="#888888" stroke-width="2" points="875,900 900,800" /> | ||||||
|  |   <path fill="none" stroke="red" stroke-width="5" d="M600,800 C625,700 725,700 750,800 | ||||||
|  |                                        S875,900 900,800" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="800" r="10" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="750" cy="800" r="10" /> | ||||||
|  |   <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="800" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="625" cy="700" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="725" cy="700" r="10" /> | ||||||
|  |   <circle fill="#888888" stroke="none" cx="875" cy="900" r="10" /> | ||||||
|  |   <circle fill="none" stroke="blue" stroke-width="4" cx="775" cy="900" r="9" /> | ||||||
|  |   <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="945">M600,800 C625,700 725,700 750,800</text> | ||||||
|  |   <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="975">S875,900 900,800</text> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 5.2 KiB | 
							
								
								
									
										72
									
								
								libs/svgviewer/files/spheres.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								libs/svgviewer/files/spheres.svg
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | ||||||
|  | <?xml version="1.0" standalone="no"?> | ||||||
|  | <svg width="8cm" height="8cm" viewBox="0 0 400 400" | ||||||
|  |     xmlns="http://www.w3.org/2000/svg" | ||||||
|  |     xmlns:xlink="http://www.w3.org/1999/xlink/" | ||||||
|  |     baseProfile="tiny" version="1.2"> | ||||||
|  |   <title>Spheres</title> | ||||||
|  |   <desc>Gradient filled spheres with different colors.</desc> | ||||||
|  |     <defs> | ||||||
|  |       <!-- Create radial gradients for each circle to make them look like | ||||||
|  |            spheres. --> | ||||||
|  |       <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" /> | ||||||
|  |         <stop offset="75%" stop-color="blue" /> | ||||||
|  |         <stop offset="100%" stop-color="#222244" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="redSphere" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" /> | ||||||
|  |         <stop offset="75%" stop-color="red" /> | ||||||
|  |         <stop offset="100%" stop-color="#442222" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="greenSphere" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" /> | ||||||
|  |         <stop offset="75%" stop-color="green" /> | ||||||
|  |         <stop offset="100%" stop-color="#113311" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="yellowSphere" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="-50"> | ||||||
|  |         <stop offset="0%" stop-color="white" /> | ||||||
|  |         <stop offset="75%" stop-color="yellow" /> | ||||||
|  |         <stop offset="100%" stop-color="#444422" /> | ||||||
|  |       </radialGradient> | ||||||
|  |       <radialGradient id="shadowGrad" gradientUnits="userSpaceOnUse" | ||||||
|  |                       cx="0" cy="0" r="100" fx="-50" fy="50"> | ||||||
|  |         <stop offset="0%" stop-color="black" stop-opacity="1.0" /> | ||||||
|  |         <stop offset="100%" stop-color="white" stop-opacity="0.0" /> | ||||||
|  |       </radialGradient> | ||||||
|  | 
 | ||||||
|  |       <!-- Define a shadow for each sphere. --> | ||||||
|  |       <circle id="shadow" fill="url(#shadowGrad)" cx="0" cy="0" r="100" /> | ||||||
|  |     </defs> | ||||||
|  |   <g fill="#ffee99" stroke="none" > | ||||||
|  |     <rect x="0" y="0" width="400" height="400" /> | ||||||
|  |   </g> | ||||||
|  |   <g fill="white" stroke="none" > | ||||||
|  |     <rect x="0" y="175" width="400" height="225" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(200,175)"> | ||||||
|  |     <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" /> | ||||||
|  |     <circle fill="url(#blueSphere)" cx="0" cy="0" r="100" /> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(315,240)"> | ||||||
|  |     <g transform="scale(0.5,0.5)"> | ||||||
|  |       <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" /> | ||||||
|  |       <circle fill="url(#redSphere)" cx="0" cy="0" r="100" /> | ||||||
|  |     </g> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(80,275)"> | ||||||
|  |     <g transform="scale(0.65,0.65)"> | ||||||
|  |       <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" /> | ||||||
|  |       <circle fill="url(#greenSphere)" cx="0" cy="0" r="100" /> | ||||||
|  |     </g> | ||||||
|  |   </g> | ||||||
|  |   <g transform="translate(255,325)"> | ||||||
|  |     <g transform="scale(0.3,0.3)"> | ||||||
|  |       <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" /> | ||||||
|  |       <circle fill="url(#yellowSphere)" cx="0" cy="0" r="100" /> | ||||||
|  |     </g> | ||||||
|  |   </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 3.1 KiB | 
							
								
								
									
										66
									
								
								libs/svgviewer/main.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								libs/svgviewer/main.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | ||||||
|  | /****************************************************************************
 | ||||||
|  | ** | ||||||
|  | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | ||||||
|  | ** Contact: http://www.qt-project.org/legal
 | ||||||
|  | ** | ||||||
|  | ** This file is part of the examples of the Qt Toolkit. | ||||||
|  | ** | ||||||
|  | ** $QT_BEGIN_LICENSE:BSD$ | ||||||
|  | ** You may use this file under the terms of the BSD license as follows: | ||||||
|  | ** | ||||||
|  | ** "Redistribution and use in source and binary forms, with or without | ||||||
|  | ** modification, are permitted provided that the following conditions are | ||||||
|  | ** met: | ||||||
|  | **   * Redistributions of source code must retain the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer. | ||||||
|  | **   * Redistributions in binary form must reproduce the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer in | ||||||
|  | **     the documentation and/or other materials provided with the | ||||||
|  | **     distribution. | ||||||
|  | **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names | ||||||
|  | **     of its contributors may be used to endorse or promote products derived | ||||||
|  | **     from this software without specific prior written permission. | ||||||
|  | ** | ||||||
|  | ** | ||||||
|  | ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||||
|  | ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||||
|  | ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||||
|  | ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||||
|  | ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||||
|  | ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||||
|  | ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||||
|  | ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||||
|  | ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." | ||||||
|  | ** | ||||||
|  | ** $QT_END_LICENSE$ | ||||||
|  | ** | ||||||
|  | ****************************************************************************/ | ||||||
|  | 
 | ||||||
|  | #include <QApplication> | ||||||
|  | #include <QString> | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  | #include <QGLFormat> | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "mainwindow.h" | ||||||
|  | 
 | ||||||
|  | int main(int argc, char **argv) | ||||||
|  | { | ||||||
|  |     Q_INIT_RESOURCE(svgviewer); | ||||||
|  | 
 | ||||||
|  |     QApplication app(argc, argv); | ||||||
|  | 
 | ||||||
|  |     MainWindow window; | ||||||
|  |     if (argc == 2) | ||||||
|  |         window.openFile(argv[1]); | ||||||
|  |     else | ||||||
|  |         window.openFile(":/files/bubbles.svg"); | ||||||
|  | #if defined(Q_OS_SYMBIAN) | ||||||
|  |     window.showMaximized(); | ||||||
|  | #else | ||||||
|  |     window.show(); | ||||||
|  | #endif | ||||||
|  |     return app.exec(); | ||||||
|  | } | ||||||
							
								
								
									
										163
									
								
								libs/svgviewer/mainwindow.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								libs/svgviewer/mainwindow.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,163 @@ | ||||||
|  | /****************************************************************************
 | ||||||
|  | ** | ||||||
|  | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | ||||||
|  | ** Contact: http://www.qt-project.org/legal
 | ||||||
|  | ** | ||||||
|  | ** This file is part of the examples of the Qt Toolkit. | ||||||
|  | ** | ||||||
|  | ** $QT_BEGIN_LICENSE:BSD$ | ||||||
|  | ** You may use this file under the terms of the BSD license as follows: | ||||||
|  | ** | ||||||
|  | ** "Redistribution and use in source and binary forms, with or without | ||||||
|  | ** modification, are permitted provided that the following conditions are | ||||||
|  | ** met: | ||||||
|  | **   * Redistributions of source code must retain the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer. | ||||||
|  | **   * Redistributions in binary form must reproduce the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer in | ||||||
|  | **     the documentation and/or other materials provided with the | ||||||
|  | **     distribution. | ||||||
|  | **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names | ||||||
|  | **     of its contributors may be used to endorse or promote products derived | ||||||
|  | **     from this software without specific prior written permission. | ||||||
|  | ** | ||||||
|  | ** | ||||||
|  | ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||||
|  | ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||||
|  | ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||||
|  | ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||||
|  | ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||||
|  | ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||||
|  | ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||||
|  | ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||||
|  | ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." | ||||||
|  | ** | ||||||
|  | ** $QT_END_LICENSE$ | ||||||
|  | ** | ||||||
|  | ****************************************************************************/ | ||||||
|  | 
 | ||||||
|  | #include "mainwindow.h" | ||||||
|  | 
 | ||||||
|  | #include <QtGui> | ||||||
|  | 
 | ||||||
|  | #include "svgview.h" | ||||||
|  | 
 | ||||||
|  | MainWindow::MainWindow() | ||||||
|  |     : QMainWindow() | ||||||
|  |     , m_view(new SvgView) | ||||||
|  | { | ||||||
|  |     QMenu *fileMenu = new QMenu(tr("&File"), this); | ||||||
|  |     QAction *openAction = fileMenu->addAction(tr("&Open...")); | ||||||
|  |     openAction->setShortcut(QKeySequence(tr("Ctrl+O"))); | ||||||
|  |     QAction *quitAction = fileMenu->addAction(tr("E&xit")); | ||||||
|  |     quitAction->setShortcuts(QKeySequence::Quit); | ||||||
|  | 
 | ||||||
|  |     menuBar()->addMenu(fileMenu); | ||||||
|  | 
 | ||||||
|  |     QMenu *viewMenu = new QMenu(tr("&View"), this); | ||||||
|  |     m_backgroundAction = viewMenu->addAction(tr("&Background")); | ||||||
|  |     m_backgroundAction->setEnabled(false); | ||||||
|  |     m_backgroundAction->setCheckable(true); | ||||||
|  |     m_backgroundAction->setChecked(false); | ||||||
|  |     connect(m_backgroundAction, SIGNAL(toggled(bool)), m_view, SLOT(setViewBackground(bool))); | ||||||
|  | 
 | ||||||
|  |     m_outlineAction = viewMenu->addAction(tr("&Outline")); | ||||||
|  |     m_outlineAction->setEnabled(false); | ||||||
|  |     m_outlineAction->setCheckable(true); | ||||||
|  |     m_outlineAction->setChecked(true); | ||||||
|  |     connect(m_outlineAction, SIGNAL(toggled(bool)), m_view, SLOT(setViewOutline(bool))); | ||||||
|  | 
 | ||||||
|  |     menuBar()->addMenu(viewMenu); | ||||||
|  | 
 | ||||||
|  |     QMenu *rendererMenu = new QMenu(tr("&Renderer"), this); | ||||||
|  |     m_nativeAction = rendererMenu->addAction(tr("&Native")); | ||||||
|  |     m_nativeAction->setCheckable(true); | ||||||
|  |     m_nativeAction->setChecked(true); | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  |     m_glAction = rendererMenu->addAction(tr("&OpenGL")); | ||||||
|  |     m_glAction->setCheckable(true); | ||||||
|  | #endif | ||||||
|  |     m_imageAction = rendererMenu->addAction(tr("&Image")); | ||||||
|  |     m_imageAction->setCheckable(true); | ||||||
|  | 
 | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  |     rendererMenu->addSeparator(); | ||||||
|  |     m_highQualityAntialiasingAction = rendererMenu->addAction(tr("&High Quality Antialiasing")); | ||||||
|  |     m_highQualityAntialiasingAction->setEnabled(false); | ||||||
|  |     m_highQualityAntialiasingAction->setCheckable(true); | ||||||
|  |     m_highQualityAntialiasingAction->setChecked(false); | ||||||
|  |     connect(m_highQualityAntialiasingAction, SIGNAL(toggled(bool)), m_view, SLOT(setHighQualityAntialiasing(bool))); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  |     QActionGroup *rendererGroup = new QActionGroup(this); | ||||||
|  |     rendererGroup->addAction(m_nativeAction); | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  |     rendererGroup->addAction(m_glAction); | ||||||
|  | #endif | ||||||
|  |     rendererGroup->addAction(m_imageAction); | ||||||
|  | 
 | ||||||
|  |     menuBar()->addMenu(rendererMenu); | ||||||
|  | 
 | ||||||
|  |     connect(openAction, SIGNAL(triggered()), this, SLOT(openFile())); | ||||||
|  |     connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); | ||||||
|  |     connect(rendererGroup, SIGNAL(triggered(QAction*)), | ||||||
|  |             this, SLOT(setRenderer(QAction*))); | ||||||
|  | 
 | ||||||
|  |     setCentralWidget(m_view); | ||||||
|  |     setWindowTitle(tr("SVG Viewer")); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void MainWindow::openFile(const QString &path) | ||||||
|  | { | ||||||
|  |     QString fileName; | ||||||
|  |     if (path.isNull()) | ||||||
|  |         fileName = QFileDialog::getOpenFileName(this, tr("Open SVG File"), | ||||||
|  |                 m_currentPath, "SVG files (*.svg *.svgz *.svg.gz)"); | ||||||
|  |     else | ||||||
|  |         fileName = path; | ||||||
|  | 
 | ||||||
|  |     if (!fileName.isEmpty()) { | ||||||
|  |         QFile file(fileName); | ||||||
|  |         if (!file.exists()) { | ||||||
|  |             QMessageBox::critical(this, tr("Open SVG File"), | ||||||
|  |                            QString("Could not open file '%1'.").arg(fileName)); | ||||||
|  | 
 | ||||||
|  |             m_outlineAction->setEnabled(false); | ||||||
|  |             m_backgroundAction->setEnabled(false); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         m_view->openFile(file); | ||||||
|  | 
 | ||||||
|  |         if (!fileName.startsWith(":/")) { | ||||||
|  |             m_currentPath = fileName; | ||||||
|  |             setWindowTitle(tr("%1 - SVGViewer").arg(m_currentPath)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         m_outlineAction->setEnabled(true); | ||||||
|  |         m_backgroundAction->setEnabled(true); | ||||||
|  | 
 | ||||||
|  |         resize(m_view->sizeHint() + QSize(80, 80 + menuBar()->height())); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void MainWindow::setRenderer(QAction *action) | ||||||
|  | { | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  |     m_highQualityAntialiasingAction->setEnabled(false); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  |     if (action == m_nativeAction) | ||||||
|  |         m_view->setRenderer(SvgView::Native); | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  |     else if (action == m_glAction) { | ||||||
|  |         m_highQualityAntialiasingAction->setEnabled(true); | ||||||
|  |         m_view->setRenderer(SvgView::OpenGL); | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  |     else if (action == m_imageAction) { | ||||||
|  |         m_view->setRenderer(SvgView::Image); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										80
									
								
								libs/svgviewer/mainwindow.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								libs/svgviewer/mainwindow.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,80 @@ | ||||||
|  | /****************************************************************************
 | ||||||
|  | ** | ||||||
|  | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | ||||||
|  | ** Contact: http://www.qt-project.org/legal
 | ||||||
|  | ** | ||||||
|  | ** This file is part of the examples of the Qt Toolkit. | ||||||
|  | ** | ||||||
|  | ** $QT_BEGIN_LICENSE:BSD$ | ||||||
|  | ** You may use this file under the terms of the BSD license as follows: | ||||||
|  | ** | ||||||
|  | ** "Redistribution and use in source and binary forms, with or without | ||||||
|  | ** modification, are permitted provided that the following conditions are | ||||||
|  | ** met: | ||||||
|  | **   * Redistributions of source code must retain the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer. | ||||||
|  | **   * Redistributions in binary form must reproduce the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer in | ||||||
|  | **     the documentation and/or other materials provided with the | ||||||
|  | **     distribution. | ||||||
|  | **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names | ||||||
|  | **     of its contributors may be used to endorse or promote products derived | ||||||
|  | **     from this software without specific prior written permission. | ||||||
|  | ** | ||||||
|  | ** | ||||||
|  | ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||||
|  | ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||||
|  | ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||||
|  | ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||||
|  | ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||||
|  | ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||||
|  | ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||||
|  | ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||||
|  | ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." | ||||||
|  | ** | ||||||
|  | ** $QT_END_LICENSE$ | ||||||
|  | ** | ||||||
|  | ****************************************************************************/ | ||||||
|  | 
 | ||||||
|  | #ifndef MAINWINDOW_H | ||||||
|  | #define MAINWINDOW_H | ||||||
|  | 
 | ||||||
|  | #include <QMainWindow> | ||||||
|  | #include <QString> | ||||||
|  | 
 | ||||||
|  | class SvgView; | ||||||
|  | 
 | ||||||
|  | QT_BEGIN_NAMESPACE | ||||||
|  | class QAction; | ||||||
|  | class QGraphicsView; | ||||||
|  | class QGraphicsScene; | ||||||
|  | class QGraphicsRectItem; | ||||||
|  | QT_END_NAMESPACE | ||||||
|  | 
 | ||||||
|  | class MainWindow : public QMainWindow | ||||||
|  | { | ||||||
|  |     Q_OBJECT | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     MainWindow(); | ||||||
|  | 
 | ||||||
|  | public slots: | ||||||
|  |     void openFile(const QString &path = QString()); | ||||||
|  |     void setRenderer(QAction *action); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     QAction *m_nativeAction; | ||||||
|  |     QAction *m_glAction; | ||||||
|  |     QAction *m_imageAction; | ||||||
|  |     QAction *m_highQualityAntialiasingAction; | ||||||
|  |     QAction *m_backgroundAction; | ||||||
|  |     QAction *m_outlineAction; | ||||||
|  | 
 | ||||||
|  |     SvgView *m_view; | ||||||
|  | 
 | ||||||
|  |     QString m_currentPath; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
							
								
								
									
										188
									
								
								libs/svgviewer/svgview.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								libs/svgviewer/svgview.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,188 @@ | ||||||
|  | /****************************************************************************
 | ||||||
|  | ** | ||||||
|  | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | ||||||
|  | ** Contact: http://www.qt-project.org/legal
 | ||||||
|  | ** | ||||||
|  | ** This file is part of the examples of the Qt Toolkit. | ||||||
|  | ** | ||||||
|  | ** $QT_BEGIN_LICENSE:BSD$ | ||||||
|  | ** You may use this file under the terms of the BSD license as follows: | ||||||
|  | ** | ||||||
|  | ** "Redistribution and use in source and binary forms, with or without | ||||||
|  | ** modification, are permitted provided that the following conditions are | ||||||
|  | ** met: | ||||||
|  | **   * Redistributions of source code must retain the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer. | ||||||
|  | **   * Redistributions in binary form must reproduce the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer in | ||||||
|  | **     the documentation and/or other materials provided with the | ||||||
|  | **     distribution. | ||||||
|  | **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names | ||||||
|  | **     of its contributors may be used to endorse or promote products derived | ||||||
|  | **     from this software without specific prior written permission. | ||||||
|  | ** | ||||||
|  | ** | ||||||
|  | ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||||
|  | ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||||
|  | ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||||
|  | ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||||
|  | ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||||
|  | ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||||
|  | ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||||
|  | ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||||
|  | ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." | ||||||
|  | ** | ||||||
|  | ** $QT_END_LICENSE$ | ||||||
|  | ** | ||||||
|  | ****************************************************************************/ | ||||||
|  | #include "svgview.h" | ||||||
|  | 
 | ||||||
|  | #include <QFile> | ||||||
|  | #include <QWheelEvent> | ||||||
|  | #include <QMouseEvent> | ||||||
|  | #include <QGraphicsRectItem> | ||||||
|  | #include <QGraphicsSvgItem> | ||||||
|  | #include <QPaintEvent> | ||||||
|  | #include <qmath.h> | ||||||
|  | 
 | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  | #include <QGLWidget> | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | SvgView::SvgView(QWidget *parent) | ||||||
|  |     : QGraphicsView(parent) | ||||||
|  |     , m_renderer(Native) | ||||||
|  |     , m_svgItem(0) | ||||||
|  |     , m_backgroundItem(0) | ||||||
|  |     , m_outlineItem(0) | ||||||
|  | { | ||||||
|  |     setScene(new QGraphicsScene(this)); | ||||||
|  |     setTransformationAnchor(AnchorUnderMouse); | ||||||
|  |     setDragMode(ScrollHandDrag); | ||||||
|  |     setViewportUpdateMode(FullViewportUpdate); | ||||||
|  | 
 | ||||||
|  |     // Prepare background check-board pattern
 | ||||||
|  |     QPixmap tilePixmap(64, 64); | ||||||
|  |     tilePixmap.fill(Qt::white); | ||||||
|  |     QPainter tilePainter(&tilePixmap); | ||||||
|  |     QColor color(220, 220, 220); | ||||||
|  |     tilePainter.fillRect(0, 0, 32, 32, color); | ||||||
|  |     tilePainter.fillRect(32, 32, 32, 32, color); | ||||||
|  |     tilePainter.end(); | ||||||
|  | 
 | ||||||
|  |     setBackgroundBrush(tilePixmap); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void SvgView::drawBackground(QPainter *p, const QRectF &) | ||||||
|  | { | ||||||
|  |     p->save(); | ||||||
|  |     p->resetTransform(); | ||||||
|  |     p->drawTiledPixmap(viewport()->rect(), backgroundBrush().texture()); | ||||||
|  |     p->restore(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void SvgView::openFile(const QFile &file) | ||||||
|  | { | ||||||
|  |     if (!file.exists()) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|  |     QGraphicsScene *s = scene(); | ||||||
|  | 
 | ||||||
|  |     bool drawBackground = (m_backgroundItem ? m_backgroundItem->isVisible() : false); | ||||||
|  |     bool drawOutline = (m_outlineItem ? m_outlineItem->isVisible() : true); | ||||||
|  | 
 | ||||||
|  |     s->clear(); | ||||||
|  |     resetTransform(); | ||||||
|  | 
 | ||||||
|  |     m_svgItem = new QGraphicsSvgItem(file.fileName()); | ||||||
|  |     m_svgItem->setFlags(QGraphicsItem::ItemClipsToShape); | ||||||
|  |     m_svgItem->setCacheMode(QGraphicsItem::NoCache); | ||||||
|  |     m_svgItem->setZValue(0); | ||||||
|  | 
 | ||||||
|  |     m_backgroundItem = new QGraphicsRectItem(m_svgItem->boundingRect()); | ||||||
|  |     m_backgroundItem->setBrush(Qt::white); | ||||||
|  |     m_backgroundItem->setPen(Qt::NoPen); | ||||||
|  |     m_backgroundItem->setVisible(drawBackground); | ||||||
|  |     m_backgroundItem->setZValue(-1); | ||||||
|  | 
 | ||||||
|  |     m_outlineItem = new QGraphicsRectItem(m_svgItem->boundingRect()); | ||||||
|  |     QPen outline(Qt::black, 2, Qt::DashLine); | ||||||
|  |     outline.setCosmetic(true); | ||||||
|  |     m_outlineItem->setPen(outline); | ||||||
|  |     m_outlineItem->setBrush(Qt::NoBrush); | ||||||
|  |     m_outlineItem->setVisible(drawOutline); | ||||||
|  |     m_outlineItem->setZValue(1); | ||||||
|  | 
 | ||||||
|  |     s->addItem(m_backgroundItem); | ||||||
|  |     s->addItem(m_svgItem); | ||||||
|  |     s->addItem(m_outlineItem); | ||||||
|  | 
 | ||||||
|  |     s->setSceneRect(m_outlineItem->boundingRect().adjusted(-10, -10, 10, 10)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void SvgView::setRenderer(RendererType type) | ||||||
|  | { | ||||||
|  |     m_renderer = type; | ||||||
|  | 
 | ||||||
|  |     if (m_renderer == OpenGL) { | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  |         setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); | ||||||
|  | #endif | ||||||
|  |     } else { | ||||||
|  |         setViewport(new QWidget); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void SvgView::setHighQualityAntialiasing(bool highQualityAntialiasing) | ||||||
|  | { | ||||||
|  | #ifndef QT_NO_OPENGL | ||||||
|  |     setRenderHint(QPainter::HighQualityAntialiasing, highQualityAntialiasing); | ||||||
|  | #else | ||||||
|  |     Q_UNUSED(highQualityAntialiasing); | ||||||
|  | #endif | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void SvgView::setViewBackground(bool enable) | ||||||
|  | { | ||||||
|  |     if (!m_backgroundItem) | ||||||
|  |           return; | ||||||
|  | 
 | ||||||
|  |     m_backgroundItem->setVisible(enable); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void SvgView::setViewOutline(bool enable) | ||||||
|  | { | ||||||
|  |     if (!m_outlineItem) | ||||||
|  |         return; | ||||||
|  | 
 | ||||||
|  |     m_outlineItem->setVisible(enable); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void SvgView::paintEvent(QPaintEvent *event) | ||||||
|  | { | ||||||
|  |     if (m_renderer == Image) { | ||||||
|  |         if (m_image.size() != viewport()->size()) { | ||||||
|  |             m_image = QImage(viewport()->size(), QImage::Format_ARGB32_Premultiplied); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         QPainter imagePainter(&m_image); | ||||||
|  |         QGraphicsView::render(&imagePainter); | ||||||
|  |         imagePainter.end(); | ||||||
|  | 
 | ||||||
|  |         QPainter p(viewport()); | ||||||
|  |         p.drawImage(0, 0, m_image); | ||||||
|  | 
 | ||||||
|  |     } else { | ||||||
|  |         QGraphicsView::paintEvent(event); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void SvgView::wheelEvent(QWheelEvent *event) | ||||||
|  | { | ||||||
|  |     qreal factor = qPow(1.2, event->delta() / 240.0); | ||||||
|  |     scale(factor, factor); | ||||||
|  |     event->accept(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										83
									
								
								libs/svgviewer/svgview.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								libs/svgviewer/svgview.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | ||||||
|  | /****************************************************************************
 | ||||||
|  | ** | ||||||
|  | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | ||||||
|  | ** Contact: http://www.qt-project.org/legal
 | ||||||
|  | ** | ||||||
|  | ** This file is part of the examples of the Qt Toolkit. | ||||||
|  | ** | ||||||
|  | ** $QT_BEGIN_LICENSE:BSD$ | ||||||
|  | ** You may use this file under the terms of the BSD license as follows: | ||||||
|  | ** | ||||||
|  | ** "Redistribution and use in source and binary forms, with or without | ||||||
|  | ** modification, are permitted provided that the following conditions are | ||||||
|  | ** met: | ||||||
|  | **   * Redistributions of source code must retain the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer. | ||||||
|  | **   * Redistributions in binary form must reproduce the above copyright | ||||||
|  | **     notice, this list of conditions and the following disclaimer in | ||||||
|  | **     the documentation and/or other materials provided with the | ||||||
|  | **     distribution. | ||||||
|  | **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names | ||||||
|  | **     of its contributors may be used to endorse or promote products derived | ||||||
|  | **     from this software without specific prior written permission. | ||||||
|  | ** | ||||||
|  | ** | ||||||
|  | ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||||
|  | ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||||
|  | ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||||
|  | ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||||
|  | ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||||
|  | ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||||
|  | ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||||
|  | ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||||
|  | ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||||
|  | ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." | ||||||
|  | ** | ||||||
|  | ** $QT_END_LICENSE$ | ||||||
|  | ** | ||||||
|  | ****************************************************************************/ | ||||||
|  | 
 | ||||||
|  | #ifndef SVGVIEW_H | ||||||
|  | #define SVGVIEW_H | ||||||
|  | 
 | ||||||
|  | #include <QGraphicsView> | ||||||
|  | 
 | ||||||
|  | QT_BEGIN_NAMESPACE | ||||||
|  | class QWheelEvent; | ||||||
|  | class QPaintEvent; | ||||||
|  | class QFile; | ||||||
|  | QT_END_NAMESPACE | ||||||
|  | 
 | ||||||
|  | class SvgView : public QGraphicsView | ||||||
|  | { | ||||||
|  |     Q_OBJECT | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     enum RendererType { Native, OpenGL, Image }; | ||||||
|  | 
 | ||||||
|  |     SvgView(QWidget *parent = 0); | ||||||
|  | 
 | ||||||
|  |     void openFile(const QFile &file); | ||||||
|  |     void setRenderer(RendererType type = Native); | ||||||
|  |     void drawBackground(QPainter *p, const QRectF &rect); | ||||||
|  | 
 | ||||||
|  | public slots: | ||||||
|  |     void setHighQualityAntialiasing(bool highQualityAntialiasing); | ||||||
|  |     void setViewBackground(bool enable); | ||||||
|  |     void setViewOutline(bool enable); | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  |     void wheelEvent(QWheelEvent *event); | ||||||
|  |     void paintEvent(QPaintEvent *event); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     RendererType m_renderer; | ||||||
|  | 
 | ||||||
|  |     QGraphicsItem *m_svgItem; | ||||||
|  |     QGraphicsRectItem *m_backgroundItem; | ||||||
|  |     QGraphicsRectItem *m_outlineItem; | ||||||
|  | 
 | ||||||
|  |     QImage m_image; | ||||||
|  | }; | ||||||
|  | #endif // SVGVIEW_H
 | ||||||
							
								
								
									
										11
									
								
								libs/svgviewer/svgviewer.desktop
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								libs/svgviewer/svgviewer.desktop
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | [Desktop Entry] | ||||||
|  | Encoding=UTF-8 | ||||||
|  | Version=1.0 | ||||||
|  | Type=Application | ||||||
|  | Terminal=false | ||||||
|  | Name=SVG Viewer | ||||||
|  | Exec=/opt/usr/bin/svgviewer | ||||||
|  | Icon=svgviewer | ||||||
|  | X-Window-Icon= | ||||||
|  | X-HildonDesk-ShowInToolbar=true | ||||||
|  | X-Osso-Type=application/x-executable | ||||||
							
								
								
									
										33
									
								
								libs/svgviewer/svgviewer.pro
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								libs/svgviewer/svgviewer.pro
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | HEADERS       = mainwindow.h \ | ||||||
|  |                 svgview.h | ||||||
|  | RESOURCES     = svgviewer.qrc | ||||||
|  | SOURCES       = main.cpp \ | ||||||
|  |                 mainwindow.cpp \ | ||||||
|  |                 svgview.cpp | ||||||
|  | QT           += svg xml | ||||||
|  | 
 | ||||||
|  | contains(QT_CONFIG, opengl): QT += opengl | ||||||
|  | 
 | ||||||
|  | CONFIG += console | ||||||
|  | 
 | ||||||
|  | # install | ||||||
|  | target.path = $$[QT_INSTALL_EXAMPLES]/painting/svgviewer | ||||||
|  | sources.files = $$SOURCES $$HEADERS $$RESOURCES svgviewer.pro files | ||||||
|  | sources.path = $$[QT_INSTALL_EXAMPLES]/painting/svgviewer | ||||||
|  | INSTALLS += target sources | ||||||
|  | 
 | ||||||
|  | wince*: { | ||||||
|  |      addFiles.files = files\\*.svg | ||||||
|  |      addFiles.path = "\\My Documents" | ||||||
|  |      DEPLOYMENT += addFiles | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | symbian: { | ||||||
|  |      TARGET.UID3 = 0xA000A64E | ||||||
|  |      include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) | ||||||
|  |      addFiles.files = files\\*.svg | ||||||
|  |      addFiles.path = . | ||||||
|  |      DEPLOYMENT += addFiles | ||||||
|  | } | ||||||
|  | maemo5: include($$QT_SOURCE_TREE/examples/maemo5pkgrules.pri) | ||||||
|  | 
 | ||||||
							
								
								
									
										6
									
								
								libs/svgviewer/svgviewer.qrc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								libs/svgviewer/svgviewer.qrc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | <!DOCTYPE RCC><RCC version="1.0"> | ||||||
|  | <qresource prefix="/"> | ||||||
|  |   <file>files/bubbles.svg</file> | ||||||
|  | </qresource> | ||||||
|  | </RCC> | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue