Disabled external gits
This commit is contained in:
		
							
								
								
									
										862
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										862
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,862 @@
 | 
			
		||||
/*
 | 
			
		||||
  Icon Font: entypo
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
  font-family: "entypo";
 | 
			
		||||
  src: url("./entypo.eot");
 | 
			
		||||
  src: url("./entypo.eot?#iefix") format("embedded-opentype"),
 | 
			
		||||
       url("./entypo.woff2") format("woff2"),
 | 
			
		||||
       url("./entypo.woff") format("woff"),
 | 
			
		||||
       url("./entypo.ttf") format("truetype"),
 | 
			
		||||
       url("./entypo.svg#entypo") format("svg");
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
  font-style: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
 | 
			
		||||
  @font-face {
 | 
			
		||||
    font-family: "entypo";
 | 
			
		||||
    src: url("./entypo.svg#entypo") format("svg");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[data-icon]:before { content: attr(data-icon); }
 | 
			
		||||
 | 
			
		||||
[data-icon]:before,
 | 
			
		||||
.entypo-icon-500px:before,
 | 
			
		||||
.entypo-icon-500px-with-circle:before,
 | 
			
		||||
.entypo-icon-add-to-list:before,
 | 
			
		||||
.entypo-icon-add-user:before,
 | 
			
		||||
.entypo-icon-address:before,
 | 
			
		||||
.entypo-icon-adjust:before,
 | 
			
		||||
.entypo-icon-air:before,
 | 
			
		||||
.entypo-icon-aircraft:before,
 | 
			
		||||
.entypo-icon-aircraft-landing:before,
 | 
			
		||||
.entypo-icon-aircraft-take-off:before,
 | 
			
		||||
.entypo-icon-align-bottom:before,
 | 
			
		||||
.entypo-icon-align-horizontal-middle:before,
 | 
			
		||||
.entypo-icon-align-left:before,
 | 
			
		||||
.entypo-icon-align-right:before,
 | 
			
		||||
.entypo-icon-align-top:before,
 | 
			
		||||
.entypo-icon-align-vertical-middle:before,
 | 
			
		||||
.entypo-icon-app-store:before,
 | 
			
		||||
.entypo-icon-archive:before,
 | 
			
		||||
.entypo-icon-area-graph:before,
 | 
			
		||||
.entypo-icon-arrow-bold-down:before,
 | 
			
		||||
.entypo-icon-arrow-bold-left:before,
 | 
			
		||||
.entypo-icon-arrow-bold-right:before,
 | 
			
		||||
.entypo-icon-arrow-bold-up:before,
 | 
			
		||||
.entypo-icon-arrow-down:before,
 | 
			
		||||
.entypo-icon-arrow-left:before,
 | 
			
		||||
.entypo-icon-arrow-long-down:before,
 | 
			
		||||
.entypo-icon-arrow-long-left:before,
 | 
			
		||||
.entypo-icon-arrow-long-right:before,
 | 
			
		||||
.entypo-icon-arrow-long-up:before,
 | 
			
		||||
.entypo-icon-arrow-right:before,
 | 
			
		||||
.entypo-icon-arrow-up:before,
 | 
			
		||||
.entypo-icon-arrow-with-circle-down:before,
 | 
			
		||||
.entypo-icon-arrow-with-circle-left:before,
 | 
			
		||||
.entypo-icon-arrow-with-circle-right:before,
 | 
			
		||||
.entypo-icon-arrow-with-circle-up:before,
 | 
			
		||||
.entypo-icon-attachment:before,
 | 
			
		||||
.entypo-icon-awareness-ribbon:before,
 | 
			
		||||
.entypo-icon-back:before,
 | 
			
		||||
.entypo-icon-back-in-time:before,
 | 
			
		||||
.entypo-icon-baidu:before,
 | 
			
		||||
.entypo-icon-bar-graph:before,
 | 
			
		||||
.entypo-icon-basecamp:before,
 | 
			
		||||
.entypo-icon-battery:before,
 | 
			
		||||
.entypo-icon-beamed-note:before,
 | 
			
		||||
.entypo-icon-behance:before,
 | 
			
		||||
.entypo-icon-bell:before,
 | 
			
		||||
.entypo-icon-blackboard:before,
 | 
			
		||||
.entypo-icon-block:before,
 | 
			
		||||
.entypo-icon-book:before,
 | 
			
		||||
.entypo-icon-bookmark:before,
 | 
			
		||||
.entypo-icon-bookmarks:before,
 | 
			
		||||
.entypo-icon-bowl:before,
 | 
			
		||||
.entypo-icon-box:before,
 | 
			
		||||
.entypo-icon-briefcase:before,
 | 
			
		||||
.entypo-icon-browser:before,
 | 
			
		||||
.entypo-icon-brush:before,
 | 
			
		||||
.entypo-icon-bucket:before,
 | 
			
		||||
.entypo-icon-bug:before,
 | 
			
		||||
.entypo-icon-cake:before,
 | 
			
		||||
.entypo-icon-calculator:before,
 | 
			
		||||
.entypo-icon-calendar:before,
 | 
			
		||||
.entypo-icon-camera:before,
 | 
			
		||||
.entypo-icon-ccw:before,
 | 
			
		||||
.entypo-icon-chat:before,
 | 
			
		||||
.entypo-icon-check:before,
 | 
			
		||||
.entypo-icon-chevron-down:before,
 | 
			
		||||
.entypo-icon-chevron-left:before,
 | 
			
		||||
.entypo-icon-chevron-right:before,
 | 
			
		||||
.entypo-icon-chevron-small-down:before,
 | 
			
		||||
.entypo-icon-chevron-small-left:before,
 | 
			
		||||
.entypo-icon-chevron-small-right:before,
 | 
			
		||||
.entypo-icon-chevron-small-up:before,
 | 
			
		||||
.entypo-icon-chevron-thin-down:before,
 | 
			
		||||
.entypo-icon-chevron-thin-left:before,
 | 
			
		||||
.entypo-icon-chevron-thin-right:before,
 | 
			
		||||
.entypo-icon-chevron-thin-up:before,
 | 
			
		||||
.entypo-icon-chevron-up:before,
 | 
			
		||||
.entypo-icon-chevron-with-circle-down:before,
 | 
			
		||||
.entypo-icon-chevron-with-circle-left:before,
 | 
			
		||||
.entypo-icon-chevron-with-circle-right:before,
 | 
			
		||||
.entypo-icon-chevron-with-circle-up:before,
 | 
			
		||||
.entypo-icon-circle:before,
 | 
			
		||||
.entypo-icon-circle-with-cross:before,
 | 
			
		||||
.entypo-icon-circle-with-minus:before,
 | 
			
		||||
.entypo-icon-circle-with-plus:before,
 | 
			
		||||
.entypo-icon-circular-graph:before,
 | 
			
		||||
.entypo-icon-clapperboard:before,
 | 
			
		||||
.entypo-icon-classic-computer:before,
 | 
			
		||||
.entypo-icon-clipboard:before,
 | 
			
		||||
.entypo-icon-clock:before,
 | 
			
		||||
.entypo-icon-cloud:before,
 | 
			
		||||
.entypo-icon-code:before,
 | 
			
		||||
.entypo-icon-cog:before,
 | 
			
		||||
.entypo-icon-colours:before,
 | 
			
		||||
.entypo-icon-compass:before,
 | 
			
		||||
.entypo-icon-controller-fast-backward:before,
 | 
			
		||||
.entypo-icon-controller-fast-forward:before,
 | 
			
		||||
.entypo-icon-controller-jump-to-start:before,
 | 
			
		||||
.entypo-icon-controller-next:before,
 | 
			
		||||
.entypo-icon-controller-paus:before,
 | 
			
		||||
.entypo-icon-controller-play:before,
 | 
			
		||||
.entypo-icon-controller-record:before,
 | 
			
		||||
.entypo-icon-controller-stop:before,
 | 
			
		||||
.entypo-icon-controller-volume:before,
 | 
			
		||||
.entypo-icon-copy:before,
 | 
			
		||||
.entypo-icon-creative-cloud:before,
 | 
			
		||||
.entypo-icon-creative-commons:before,
 | 
			
		||||
.entypo-icon-creative-commons-attribution:before,
 | 
			
		||||
.entypo-icon-creative-commons-noderivs:before,
 | 
			
		||||
.entypo-icon-creative-commons-noncommercial-eu:before,
 | 
			
		||||
.entypo-icon-creative-commons-noncommercial-us:before,
 | 
			
		||||
.entypo-icon-creative-commons-public-domain:before,
 | 
			
		||||
.entypo-icon-creative-commons-remix:before,
 | 
			
		||||
.entypo-icon-creative-commons-share:before,
 | 
			
		||||
.entypo-icon-creative-commons-sharealike:before,
 | 
			
		||||
.entypo-icon-credit:before,
 | 
			
		||||
.entypo-icon-credit-card:before,
 | 
			
		||||
.entypo-icon-crop:before,
 | 
			
		||||
.entypo-icon-cross:before,
 | 
			
		||||
.entypo-icon-cup:before,
 | 
			
		||||
.entypo-icon-cw:before,
 | 
			
		||||
.entypo-icon-cycle:before,
 | 
			
		||||
.entypo-icon-database:before,
 | 
			
		||||
.entypo-icon-dial-pad:before,
 | 
			
		||||
.entypo-icon-direction:before,
 | 
			
		||||
.entypo-icon-document:before,
 | 
			
		||||
.entypo-icon-document-landscape:before,
 | 
			
		||||
.entypo-icon-documents:before,
 | 
			
		||||
.entypo-icon-dot-single:before,
 | 
			
		||||
.entypo-icon-dots-three-horizontal:before,
 | 
			
		||||
.entypo-icon-dots-three-vertical:before,
 | 
			
		||||
.entypo-icon-dots-two-horizontal:before,
 | 
			
		||||
.entypo-icon-dots-two-vertical:before,
 | 
			
		||||
.entypo-icon-download:before,
 | 
			
		||||
.entypo-icon-dribbble:before,
 | 
			
		||||
.entypo-icon-dribbble-with-circle:before,
 | 
			
		||||
.entypo-icon-drink:before,
 | 
			
		||||
.entypo-icon-drive:before,
 | 
			
		||||
.entypo-icon-drop:before,
 | 
			
		||||
.entypo-icon-dropbox:before,
 | 
			
		||||
.entypo-icon-edit:before,
 | 
			
		||||
.entypo-icon-email:before,
 | 
			
		||||
.entypo-icon-emoji-flirt:before,
 | 
			
		||||
.entypo-icon-emoji-happy:before,
 | 
			
		||||
.entypo-icon-emoji-neutral:before,
 | 
			
		||||
.entypo-icon-emoji-sad:before,
 | 
			
		||||
.entypo-icon-erase:before,
 | 
			
		||||
.entypo-icon-eraser:before,
 | 
			
		||||
.entypo-icon-evernote:before,
 | 
			
		||||
.entypo-icon-export:before,
 | 
			
		||||
.entypo-icon-eye:before,
 | 
			
		||||
.entypo-icon-eye-with-line:before,
 | 
			
		||||
.entypo-icon-facebook:before,
 | 
			
		||||
.entypo-icon-facebook-with-circle:before,
 | 
			
		||||
.entypo-icon-feather:before,
 | 
			
		||||
.entypo-icon-fingerprint:before,
 | 
			
		||||
.entypo-icon-flag:before,
 | 
			
		||||
.entypo-icon-flash:before,
 | 
			
		||||
.entypo-icon-flashlight:before,
 | 
			
		||||
.entypo-icon-flat-brush:before,
 | 
			
		||||
.entypo-icon-flattr:before,
 | 
			
		||||
.entypo-icon-flickr:before,
 | 
			
		||||
.entypo-icon-flickr-with-circle:before,
 | 
			
		||||
.entypo-icon-flow-branch:before,
 | 
			
		||||
.entypo-icon-flow-cascade:before,
 | 
			
		||||
.entypo-icon-flow-line:before,
 | 
			
		||||
.entypo-icon-flow-parallel:before,
 | 
			
		||||
.entypo-icon-flow-tree:before,
 | 
			
		||||
.entypo-icon-flower:before,
 | 
			
		||||
.entypo-icon-folder:before,
 | 
			
		||||
.entypo-icon-folder-images:before,
 | 
			
		||||
.entypo-icon-folder-music:before,
 | 
			
		||||
.entypo-icon-folder-video:before,
 | 
			
		||||
.entypo-icon-forward:before,
 | 
			
		||||
.entypo-icon-foursquare:before,
 | 
			
		||||
.entypo-icon-funnel:before,
 | 
			
		||||
.entypo-icon-game-controller:before,
 | 
			
		||||
.entypo-icon-gauge:before,
 | 
			
		||||
.entypo-icon-github:before,
 | 
			
		||||
.entypo-icon-github-with-circle:before,
 | 
			
		||||
.entypo-icon-globe:before,
 | 
			
		||||
.entypo-icon-google-drive:before,
 | 
			
		||||
.entypo-icon-google-hangouts:before,
 | 
			
		||||
.entypo-icon-google-play:before,
 | 
			
		||||
.entypo-icon-google-plus:before,
 | 
			
		||||
.entypo-icon-google-plus-with-circle:before,
 | 
			
		||||
.entypo-icon-graduation-cap:before,
 | 
			
		||||
.entypo-icon-grid:before,
 | 
			
		||||
.entypo-icon-grooveshark:before,
 | 
			
		||||
.entypo-icon-hair-cross:before,
 | 
			
		||||
.entypo-icon-hand:before,
 | 
			
		||||
.entypo-icon-heart:before,
 | 
			
		||||
.entypo-icon-heart-outlined:before,
 | 
			
		||||
.entypo-icon-help:before,
 | 
			
		||||
.entypo-icon-help-with-circle:before,
 | 
			
		||||
.entypo-icon-home:before,
 | 
			
		||||
.entypo-icon-hour-glass:before,
 | 
			
		||||
.entypo-icon-houzz:before,
 | 
			
		||||
.entypo-icon-icloud:before,
 | 
			
		||||
.entypo-icon-image:before,
 | 
			
		||||
.entypo-icon-image-inverted:before,
 | 
			
		||||
.entypo-icon-images:before,
 | 
			
		||||
.entypo-icon-inbox:before,
 | 
			
		||||
.entypo-icon-infinity:before,
 | 
			
		||||
.entypo-icon-info:before,
 | 
			
		||||
.entypo-icon-info-with-circle:before,
 | 
			
		||||
.entypo-icon-instagram:before,
 | 
			
		||||
.entypo-icon-instagram-with-circle:before,
 | 
			
		||||
.entypo-icon-install:before,
 | 
			
		||||
.entypo-icon-key:before,
 | 
			
		||||
.entypo-icon-keyboard:before,
 | 
			
		||||
.entypo-icon-lab-flask:before,
 | 
			
		||||
.entypo-icon-landline:before,
 | 
			
		||||
.entypo-icon-language:before,
 | 
			
		||||
.entypo-icon-laptop:before,
 | 
			
		||||
.entypo-icon-lastfm:before,
 | 
			
		||||
.entypo-icon-lastfm-with-circle:before,
 | 
			
		||||
.entypo-icon-layers:before,
 | 
			
		||||
.entypo-icon-leaf:before,
 | 
			
		||||
.entypo-icon-level-down:before,
 | 
			
		||||
.entypo-icon-level-up:before,
 | 
			
		||||
.entypo-icon-lifebuoy:before,
 | 
			
		||||
.entypo-icon-light-bulb:before,
 | 
			
		||||
.entypo-icon-light-down:before,
 | 
			
		||||
.entypo-icon-light-up:before,
 | 
			
		||||
.entypo-icon-line-graph:before,
 | 
			
		||||
.entypo-icon-link:before,
 | 
			
		||||
.entypo-icon-linkedin:before,
 | 
			
		||||
.entypo-icon-linkedin-with-circle:before,
 | 
			
		||||
.entypo-icon-list:before,
 | 
			
		||||
.entypo-icon-location:before,
 | 
			
		||||
.entypo-icon-location-pin:before,
 | 
			
		||||
.entypo-icon-lock:before,
 | 
			
		||||
.entypo-icon-lock-open:before,
 | 
			
		||||
.entypo-icon-log-out:before,
 | 
			
		||||
.entypo-icon-login:before,
 | 
			
		||||
.entypo-icon-loop:before,
 | 
			
		||||
.entypo-icon-magnet:before,
 | 
			
		||||
.entypo-icon-magnifying-glass:before,
 | 
			
		||||
.entypo-icon-mail:before,
 | 
			
		||||
.entypo-icon-mail-with-circle:before,
 | 
			
		||||
.entypo-icon-man:before,
 | 
			
		||||
.entypo-icon-map:before,
 | 
			
		||||
.entypo-icon-mask:before,
 | 
			
		||||
.entypo-icon-medal:before,
 | 
			
		||||
.entypo-icon-medium:before,
 | 
			
		||||
.entypo-icon-medium-with-circle:before,
 | 
			
		||||
.entypo-icon-megaphone:before,
 | 
			
		||||
.entypo-icon-menu:before,
 | 
			
		||||
.entypo-icon-merge:before,
 | 
			
		||||
.entypo-icon-message:before,
 | 
			
		||||
.entypo-icon-mic:before,
 | 
			
		||||
.entypo-icon-minus:before,
 | 
			
		||||
.entypo-icon-mixi:before,
 | 
			
		||||
.entypo-icon-mobile:before,
 | 
			
		||||
.entypo-icon-modern-mic:before,
 | 
			
		||||
.entypo-icon-moon:before,
 | 
			
		||||
.entypo-icon-mouse:before,
 | 
			
		||||
.entypo-icon-mouse-pointer:before,
 | 
			
		||||
.entypo-icon-music:before,
 | 
			
		||||
.entypo-icon-network:before,
 | 
			
		||||
.entypo-icon-new:before,
 | 
			
		||||
.entypo-icon-new-message:before,
 | 
			
		||||
.entypo-icon-news:before,
 | 
			
		||||
.entypo-icon-newsletter:before,
 | 
			
		||||
.entypo-icon-note:before,
 | 
			
		||||
.entypo-icon-notification:before,
 | 
			
		||||
.entypo-icon-notifications-off:before,
 | 
			
		||||
.entypo-icon-old-mobile:before,
 | 
			
		||||
.entypo-icon-old-phone:before,
 | 
			
		||||
.entypo-icon-onedrive:before,
 | 
			
		||||
.entypo-icon-open-book:before,
 | 
			
		||||
.entypo-icon-palette:before,
 | 
			
		||||
.entypo-icon-paper-plane:before,
 | 
			
		||||
.entypo-icon-paypal:before,
 | 
			
		||||
.entypo-icon-pencil:before,
 | 
			
		||||
.entypo-icon-phone:before,
 | 
			
		||||
.entypo-icon-picasa:before,
 | 
			
		||||
.entypo-icon-pie-chart:before,
 | 
			
		||||
.entypo-icon-pin:before,
 | 
			
		||||
.entypo-icon-pinterest:before,
 | 
			
		||||
.entypo-icon-pinterest-with-circle:before,
 | 
			
		||||
.entypo-icon-plus:before,
 | 
			
		||||
.entypo-icon-popup:before,
 | 
			
		||||
.entypo-icon-power-plug:before,
 | 
			
		||||
.entypo-icon-price-ribbon:before,
 | 
			
		||||
.entypo-icon-price-tag:before,
 | 
			
		||||
.entypo-icon-print:before,
 | 
			
		||||
.entypo-icon-progress-empty:before,
 | 
			
		||||
.entypo-icon-progress-full:before,
 | 
			
		||||
.entypo-icon-progress-one:before,
 | 
			
		||||
.entypo-icon-progress-two:before,
 | 
			
		||||
.entypo-icon-publish:before,
 | 
			
		||||
.entypo-icon-qq:before,
 | 
			
		||||
.entypo-icon-qq-with-circle:before,
 | 
			
		||||
.entypo-icon-quote:before,
 | 
			
		||||
.entypo-icon-radio:before,
 | 
			
		||||
.entypo-icon-raft:before,
 | 
			
		||||
.entypo-icon-raft-with-circle:before,
 | 
			
		||||
.entypo-icon-rainbow:before,
 | 
			
		||||
.entypo-icon-rdio:before,
 | 
			
		||||
.entypo-icon-rdio-with-circle:before,
 | 
			
		||||
.entypo-icon-remove-user:before,
 | 
			
		||||
.entypo-icon-renren:before,
 | 
			
		||||
.entypo-icon-reply:before,
 | 
			
		||||
.entypo-icon-reply-all:before,
 | 
			
		||||
.entypo-icon-resize-100-percent:before,
 | 
			
		||||
.entypo-icon-resize-full-screen:before,
 | 
			
		||||
.entypo-icon-retweet:before,
 | 
			
		||||
.entypo-icon-rocket:before,
 | 
			
		||||
.entypo-icon-round-brush:before,
 | 
			
		||||
.entypo-icon-rss:before,
 | 
			
		||||
.entypo-icon-ruler:before,
 | 
			
		||||
.entypo-icon-save:before,
 | 
			
		||||
.entypo-icon-scissors:before,
 | 
			
		||||
.entypo-icon-scribd:before,
 | 
			
		||||
.entypo-icon-select-arrows:before,
 | 
			
		||||
.entypo-icon-share:before,
 | 
			
		||||
.entypo-icon-share-alternative:before,
 | 
			
		||||
.entypo-icon-shareable:before,
 | 
			
		||||
.entypo-icon-shield:before,
 | 
			
		||||
.entypo-icon-shop:before,
 | 
			
		||||
.entypo-icon-shopping-bag:before,
 | 
			
		||||
.entypo-icon-shopping-basket:before,
 | 
			
		||||
.entypo-icon-shopping-cart:before,
 | 
			
		||||
.entypo-icon-shuffle:before,
 | 
			
		||||
.entypo-icon-signal:before,
 | 
			
		||||
.entypo-icon-sina-weibo:before,
 | 
			
		||||
.entypo-icon-skype:before,
 | 
			
		||||
.entypo-icon-skype-with-circle:before,
 | 
			
		||||
.entypo-icon-slideshare:before,
 | 
			
		||||
.entypo-icon-smashing:before,
 | 
			
		||||
.entypo-icon-sound:before,
 | 
			
		||||
.entypo-icon-sound-mix:before,
 | 
			
		||||
.entypo-icon-sound-mute:before,
 | 
			
		||||
.entypo-icon-soundcloud:before,
 | 
			
		||||
.entypo-icon-sports-club:before,
 | 
			
		||||
.entypo-icon-spotify:before,
 | 
			
		||||
.entypo-icon-spotify-with-circle:before,
 | 
			
		||||
.entypo-icon-spreadsheet:before,
 | 
			
		||||
.entypo-icon-squared-cross:before,
 | 
			
		||||
.entypo-icon-squared-minus:before,
 | 
			
		||||
.entypo-icon-squared-plus:before,
 | 
			
		||||
.entypo-icon-star:before,
 | 
			
		||||
.entypo-icon-star-outlined:before,
 | 
			
		||||
.entypo-icon-stopwatch:before,
 | 
			
		||||
.entypo-icon-stumbleupon:before,
 | 
			
		||||
.entypo-icon-stumbleupon-with-circle:before,
 | 
			
		||||
.entypo-icon-suitcase:before,
 | 
			
		||||
.entypo-icon-swap:before,
 | 
			
		||||
.entypo-icon-swarm:before,
 | 
			
		||||
.entypo-icon-sweden:before,
 | 
			
		||||
.entypo-icon-switch:before,
 | 
			
		||||
.entypo-icon-tablet:before,
 | 
			
		||||
.entypo-icon-tablet-mobile-combo:before,
 | 
			
		||||
.entypo-icon-tag:before,
 | 
			
		||||
.entypo-icon-text:before,
 | 
			
		||||
.entypo-icon-text-document:before,
 | 
			
		||||
.entypo-icon-text-document-inverted:before,
 | 
			
		||||
.entypo-icon-thermometer:before,
 | 
			
		||||
.entypo-icon-thumbs-down:before,
 | 
			
		||||
.entypo-icon-thumbs-up:before,
 | 
			
		||||
.entypo-icon-thunder-cloud:before,
 | 
			
		||||
.entypo-icon-ticket:before,
 | 
			
		||||
.entypo-icon-time-slot:before,
 | 
			
		||||
.entypo-icon-tools:before,
 | 
			
		||||
.entypo-icon-traffic-cone:before,
 | 
			
		||||
.entypo-icon-trash:before,
 | 
			
		||||
.entypo-icon-tree:before,
 | 
			
		||||
.entypo-icon-triangle-down:before,
 | 
			
		||||
.entypo-icon-triangle-left:before,
 | 
			
		||||
.entypo-icon-triangle-right:before,
 | 
			
		||||
.entypo-icon-triangle-up:before,
 | 
			
		||||
.entypo-icon-tripadvisor:before,
 | 
			
		||||
.entypo-icon-trophy:before,
 | 
			
		||||
.entypo-icon-tumblr:before,
 | 
			
		||||
.entypo-icon-tumblr-with-circle:before,
 | 
			
		||||
.entypo-icon-tv:before,
 | 
			
		||||
.entypo-icon-twitter:before,
 | 
			
		||||
.entypo-icon-twitter-with-circle:before,
 | 
			
		||||
.entypo-icon-typing:before,
 | 
			
		||||
.entypo-icon-uninstall:before,
 | 
			
		||||
.entypo-icon-unread:before,
 | 
			
		||||
.entypo-icon-untag:before,
 | 
			
		||||
.entypo-icon-upload:before,
 | 
			
		||||
.entypo-icon-upload-to-cloud:before,
 | 
			
		||||
.entypo-icon-user:before,
 | 
			
		||||
.entypo-icon-users:before,
 | 
			
		||||
.entypo-icon-v-card:before,
 | 
			
		||||
.entypo-icon-video:before,
 | 
			
		||||
.entypo-icon-video-camera:before,
 | 
			
		||||
.entypo-icon-vimeo:before,
 | 
			
		||||
.entypo-icon-vimeo-with-circle:before,
 | 
			
		||||
.entypo-icon-vine:before,
 | 
			
		||||
.entypo-icon-vine-with-circle:before,
 | 
			
		||||
.entypo-icon-vinyl:before,
 | 
			
		||||
.entypo-icon-vk:before,
 | 
			
		||||
.entypo-icon-vk-alternitive:before,
 | 
			
		||||
.entypo-icon-vk-with-circle:before,
 | 
			
		||||
.entypo-icon-voicemail:before,
 | 
			
		||||
.entypo-icon-wallet:before,
 | 
			
		||||
.entypo-icon-warning:before,
 | 
			
		||||
.entypo-icon-water:before,
 | 
			
		||||
.entypo-icon-windows-store:before,
 | 
			
		||||
.entypo-icon-xing:before,
 | 
			
		||||
.entypo-icon-xing-with-circle:before,
 | 
			
		||||
.entypo-icon-yelp:before,
 | 
			
		||||
.entypo-icon-youko:before,
 | 
			
		||||
.entypo-icon-youko-with-circle:before,
 | 
			
		||||
.entypo-icon-youtube:before,
 | 
			
		||||
.entypo-icon-youtube-with-circle:before {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  font-family: "entypo";
 | 
			
		||||
  font-style: normal;
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
  font-variant: normal;
 | 
			
		||||
  line-height: 1;
 | 
			
		||||
  text-decoration: inherit;
 | 
			
		||||
  text-rendering: optimizeLegibility;
 | 
			
		||||
  text-transform: none;
 | 
			
		||||
  -moz-osx-font-smoothing: grayscale;
 | 
			
		||||
  -webkit-font-smoothing: antialiased;
 | 
			
		||||
  font-smoothing: antialiased;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.entypo-icon-500px:before { content: "\f100"; }
 | 
			
		||||
.entypo-icon-500px-with-circle:before { content: "\f101"; }
 | 
			
		||||
.entypo-icon-add-to-list:before { content: "\f102"; }
 | 
			
		||||
.entypo-icon-add-user:before { content: "\f103"; }
 | 
			
		||||
.entypo-icon-address:before { content: "\f104"; }
 | 
			
		||||
.entypo-icon-adjust:before { content: "\f105"; }
 | 
			
		||||
.entypo-icon-air:before { content: "\f106"; }
 | 
			
		||||
.entypo-icon-aircraft:before { content: "\f107"; }
 | 
			
		||||
.entypo-icon-aircraft-landing:before { content: "\f108"; }
 | 
			
		||||
.entypo-icon-aircraft-take-off:before { content: "\f109"; }
 | 
			
		||||
.entypo-icon-align-bottom:before { content: "\f10a"; }
 | 
			
		||||
.entypo-icon-align-horizontal-middle:before { content: "\f10b"; }
 | 
			
		||||
.entypo-icon-align-left:before { content: "\f10c"; }
 | 
			
		||||
.entypo-icon-align-right:before { content: "\f10d"; }
 | 
			
		||||
.entypo-icon-align-top:before { content: "\f10e"; }
 | 
			
		||||
.entypo-icon-align-vertical-middle:before { content: "\f10f"; }
 | 
			
		||||
.entypo-icon-app-store:before { content: "\f110"; }
 | 
			
		||||
.entypo-icon-archive:before { content: "\f111"; }
 | 
			
		||||
.entypo-icon-area-graph:before { content: "\f112"; }
 | 
			
		||||
.entypo-icon-arrow-bold-down:before { content: "\f113"; }
 | 
			
		||||
.entypo-icon-arrow-bold-left:before { content: "\f114"; }
 | 
			
		||||
.entypo-icon-arrow-bold-right:before { content: "\f115"; }
 | 
			
		||||
.entypo-icon-arrow-bold-up:before { content: "\f116"; }
 | 
			
		||||
.entypo-icon-arrow-down:before { content: "\f117"; }
 | 
			
		||||
.entypo-icon-arrow-left:before { content: "\f118"; }
 | 
			
		||||
.entypo-icon-arrow-long-down:before { content: "\f119"; }
 | 
			
		||||
.entypo-icon-arrow-long-left:before { content: "\f11a"; }
 | 
			
		||||
.entypo-icon-arrow-long-right:before { content: "\f11b"; }
 | 
			
		||||
.entypo-icon-arrow-long-up:before { content: "\f11c"; }
 | 
			
		||||
.entypo-icon-arrow-right:before { content: "\f11d"; }
 | 
			
		||||
.entypo-icon-arrow-up:before { content: "\f11e"; }
 | 
			
		||||
.entypo-icon-arrow-with-circle-down:before { content: "\f11f"; }
 | 
			
		||||
.entypo-icon-arrow-with-circle-left:before { content: "\f120"; }
 | 
			
		||||
.entypo-icon-arrow-with-circle-right:before { content: "\f121"; }
 | 
			
		||||
.entypo-icon-arrow-with-circle-up:before { content: "\f122"; }
 | 
			
		||||
.entypo-icon-attachment:before { content: "\f123"; }
 | 
			
		||||
.entypo-icon-awareness-ribbon:before { content: "\f124"; }
 | 
			
		||||
.entypo-icon-back:before { content: "\f125"; }
 | 
			
		||||
.entypo-icon-back-in-time:before { content: "\f126"; }
 | 
			
		||||
.entypo-icon-baidu:before { content: "\f127"; }
 | 
			
		||||
.entypo-icon-bar-graph:before { content: "\f128"; }
 | 
			
		||||
.entypo-icon-basecamp:before { content: "\f129"; }
 | 
			
		||||
.entypo-icon-battery:before { content: "\f12a"; }
 | 
			
		||||
.entypo-icon-beamed-note:before { content: "\f12b"; }
 | 
			
		||||
.entypo-icon-behance:before { content: "\f12c"; }
 | 
			
		||||
.entypo-icon-bell:before { content: "\f12d"; }
 | 
			
		||||
.entypo-icon-blackboard:before { content: "\f12e"; }
 | 
			
		||||
.entypo-icon-block:before { content: "\f12f"; }
 | 
			
		||||
.entypo-icon-book:before { content: "\f130"; }
 | 
			
		||||
.entypo-icon-bookmark:before { content: "\f131"; }
 | 
			
		||||
.entypo-icon-bookmarks:before { content: "\f132"; }
 | 
			
		||||
.entypo-icon-bowl:before { content: "\f133"; }
 | 
			
		||||
.entypo-icon-box:before { content: "\f134"; }
 | 
			
		||||
.entypo-icon-briefcase:before { content: "\f135"; }
 | 
			
		||||
.entypo-icon-browser:before { content: "\f136"; }
 | 
			
		||||
.entypo-icon-brush:before { content: "\f137"; }
 | 
			
		||||
.entypo-icon-bucket:before { content: "\f138"; }
 | 
			
		||||
.entypo-icon-bug:before { content: "\f139"; }
 | 
			
		||||
.entypo-icon-cake:before { content: "\f13a"; }
 | 
			
		||||
.entypo-icon-calculator:before { content: "\f13b"; }
 | 
			
		||||
.entypo-icon-calendar:before { content: "\f13c"; }
 | 
			
		||||
.entypo-icon-camera:before { content: "\f13d"; }
 | 
			
		||||
.entypo-icon-ccw:before { content: "\f13e"; }
 | 
			
		||||
.entypo-icon-chat:before { content: "\f13f"; }
 | 
			
		||||
.entypo-icon-check:before { content: "\f140"; }
 | 
			
		||||
.entypo-icon-chevron-down:before { content: "\f141"; }
 | 
			
		||||
.entypo-icon-chevron-left:before { content: "\f142"; }
 | 
			
		||||
.entypo-icon-chevron-right:before { content: "\f143"; }
 | 
			
		||||
.entypo-icon-chevron-small-down:before { content: "\f144"; }
 | 
			
		||||
.entypo-icon-chevron-small-left:before { content: "\f145"; }
 | 
			
		||||
.entypo-icon-chevron-small-right:before { content: "\f146"; }
 | 
			
		||||
.entypo-icon-chevron-small-up:before { content: "\f147"; }
 | 
			
		||||
.entypo-icon-chevron-thin-down:before { content: "\f148"; }
 | 
			
		||||
.entypo-icon-chevron-thin-left:before { content: "\f149"; }
 | 
			
		||||
.entypo-icon-chevron-thin-right:before { content: "\f14a"; }
 | 
			
		||||
.entypo-icon-chevron-thin-up:before { content: "\f14b"; }
 | 
			
		||||
.entypo-icon-chevron-up:before { content: "\f14c"; }
 | 
			
		||||
.entypo-icon-chevron-with-circle-down:before { content: "\f14d"; }
 | 
			
		||||
.entypo-icon-chevron-with-circle-left:before { content: "\f14e"; }
 | 
			
		||||
.entypo-icon-chevron-with-circle-right:before { content: "\f14f"; }
 | 
			
		||||
.entypo-icon-chevron-with-circle-up:before { content: "\f150"; }
 | 
			
		||||
.entypo-icon-circle:before { content: "\f151"; }
 | 
			
		||||
.entypo-icon-circle-with-cross:before { content: "\f152"; }
 | 
			
		||||
.entypo-icon-circle-with-minus:before { content: "\f153"; }
 | 
			
		||||
.entypo-icon-circle-with-plus:before { content: "\f154"; }
 | 
			
		||||
.entypo-icon-circular-graph:before { content: "\f155"; }
 | 
			
		||||
.entypo-icon-clapperboard:before { content: "\f156"; }
 | 
			
		||||
.entypo-icon-classic-computer:before { content: "\f157"; }
 | 
			
		||||
.entypo-icon-clipboard:before { content: "\f158"; }
 | 
			
		||||
.entypo-icon-clock:before { content: "\f159"; }
 | 
			
		||||
.entypo-icon-cloud:before { content: "\f15a"; }
 | 
			
		||||
.entypo-icon-code:before { content: "\f15b"; }
 | 
			
		||||
.entypo-icon-cog:before { content: "\f15c"; }
 | 
			
		||||
.entypo-icon-colours:before { content: "\f15d"; }
 | 
			
		||||
.entypo-icon-compass:before { content: "\f15e"; }
 | 
			
		||||
.entypo-icon-controller-fast-backward:before { content: "\f15f"; }
 | 
			
		||||
.entypo-icon-controller-fast-forward:before { content: "\f160"; }
 | 
			
		||||
.entypo-icon-controller-jump-to-start:before { content: "\f161"; }
 | 
			
		||||
.entypo-icon-controller-next:before { content: "\f162"; }
 | 
			
		||||
.entypo-icon-controller-paus:before { content: "\f163"; }
 | 
			
		||||
.entypo-icon-controller-play:before { content: "\f164"; }
 | 
			
		||||
.entypo-icon-controller-record:before { content: "\f165"; }
 | 
			
		||||
.entypo-icon-controller-stop:before { content: "\f166"; }
 | 
			
		||||
.entypo-icon-controller-volume:before { content: "\f167"; }
 | 
			
		||||
.entypo-icon-copy:before { content: "\f168"; }
 | 
			
		||||
.entypo-icon-creative-cloud:before { content: "\f169"; }
 | 
			
		||||
.entypo-icon-creative-commons:before { content: "\f16a"; }
 | 
			
		||||
.entypo-icon-creative-commons-attribution:before { content: "\f16b"; }
 | 
			
		||||
.entypo-icon-creative-commons-noderivs:before { content: "\f16c"; }
 | 
			
		||||
.entypo-icon-creative-commons-noncommercial-eu:before { content: "\f16d"; }
 | 
			
		||||
.entypo-icon-creative-commons-noncommercial-us:before { content: "\f16e"; }
 | 
			
		||||
.entypo-icon-creative-commons-public-domain:before { content: "\f16f"; }
 | 
			
		||||
.entypo-icon-creative-commons-remix:before { content: "\f170"; }
 | 
			
		||||
.entypo-icon-creative-commons-share:before { content: "\f171"; }
 | 
			
		||||
.entypo-icon-creative-commons-sharealike:before { content: "\f172"; }
 | 
			
		||||
.entypo-icon-credit:before { content: "\f173"; }
 | 
			
		||||
.entypo-icon-credit-card:before { content: "\f174"; }
 | 
			
		||||
.entypo-icon-crop:before { content: "\f175"; }
 | 
			
		||||
.entypo-icon-cross:before { content: "\f176"; }
 | 
			
		||||
.entypo-icon-cup:before { content: "\f177"; }
 | 
			
		||||
.entypo-icon-cw:before { content: "\f178"; }
 | 
			
		||||
.entypo-icon-cycle:before { content: "\f179"; }
 | 
			
		||||
.entypo-icon-database:before { content: "\f17a"; }
 | 
			
		||||
.entypo-icon-dial-pad:before { content: "\f17b"; }
 | 
			
		||||
.entypo-icon-direction:before { content: "\f17c"; }
 | 
			
		||||
.entypo-icon-document:before { content: "\f17d"; }
 | 
			
		||||
.entypo-icon-document-landscape:before { content: "\f17e"; }
 | 
			
		||||
.entypo-icon-documents:before { content: "\f17f"; }
 | 
			
		||||
.entypo-icon-dot-single:before { content: "\f180"; }
 | 
			
		||||
.entypo-icon-dots-three-horizontal:before { content: "\f181"; }
 | 
			
		||||
.entypo-icon-dots-three-vertical:before { content: "\f182"; }
 | 
			
		||||
.entypo-icon-dots-two-horizontal:before { content: "\f183"; }
 | 
			
		||||
.entypo-icon-dots-two-vertical:before { content: "\f184"; }
 | 
			
		||||
.entypo-icon-download:before { content: "\f185"; }
 | 
			
		||||
.entypo-icon-dribbble:before { content: "\f186"; }
 | 
			
		||||
.entypo-icon-dribbble-with-circle:before { content: "\f187"; }
 | 
			
		||||
.entypo-icon-drink:before { content: "\f188"; }
 | 
			
		||||
.entypo-icon-drive:before { content: "\f189"; }
 | 
			
		||||
.entypo-icon-drop:before { content: "\f18a"; }
 | 
			
		||||
.entypo-icon-dropbox:before { content: "\f18b"; }
 | 
			
		||||
.entypo-icon-edit:before { content: "\f18c"; }
 | 
			
		||||
.entypo-icon-email:before { content: "\f18d"; }
 | 
			
		||||
.entypo-icon-emoji-flirt:before { content: "\f18e"; }
 | 
			
		||||
.entypo-icon-emoji-happy:before { content: "\f18f"; }
 | 
			
		||||
.entypo-icon-emoji-neutral:before { content: "\f190"; }
 | 
			
		||||
.entypo-icon-emoji-sad:before { content: "\f191"; }
 | 
			
		||||
.entypo-icon-erase:before { content: "\f192"; }
 | 
			
		||||
.entypo-icon-eraser:before { content: "\f193"; }
 | 
			
		||||
.entypo-icon-evernote:before { content: "\f194"; }
 | 
			
		||||
.entypo-icon-export:before { content: "\f195"; }
 | 
			
		||||
.entypo-icon-eye:before { content: "\f196"; }
 | 
			
		||||
.entypo-icon-eye-with-line:before { content: "\f197"; }
 | 
			
		||||
.entypo-icon-facebook:before { content: "\f198"; }
 | 
			
		||||
.entypo-icon-facebook-with-circle:before { content: "\f199"; }
 | 
			
		||||
.entypo-icon-feather:before { content: "\f19a"; }
 | 
			
		||||
.entypo-icon-fingerprint:before { content: "\f19b"; }
 | 
			
		||||
.entypo-icon-flag:before { content: "\f19c"; }
 | 
			
		||||
.entypo-icon-flash:before { content: "\f19d"; }
 | 
			
		||||
.entypo-icon-flashlight:before { content: "\f19e"; }
 | 
			
		||||
.entypo-icon-flat-brush:before { content: "\f19f"; }
 | 
			
		||||
.entypo-icon-flattr:before { content: "\f1a0"; }
 | 
			
		||||
.entypo-icon-flickr:before { content: "\f1a1"; }
 | 
			
		||||
.entypo-icon-flickr-with-circle:before { content: "\f1a2"; }
 | 
			
		||||
.entypo-icon-flow-branch:before { content: "\f1a3"; }
 | 
			
		||||
.entypo-icon-flow-cascade:before { content: "\f1a4"; }
 | 
			
		||||
.entypo-icon-flow-line:before { content: "\f1a5"; }
 | 
			
		||||
.entypo-icon-flow-parallel:before { content: "\f1a6"; }
 | 
			
		||||
.entypo-icon-flow-tree:before { content: "\f1a7"; }
 | 
			
		||||
.entypo-icon-flower:before { content: "\f1a8"; }
 | 
			
		||||
.entypo-icon-folder:before { content: "\f1a9"; }
 | 
			
		||||
.entypo-icon-folder-images:before { content: "\f1aa"; }
 | 
			
		||||
.entypo-icon-folder-music:before { content: "\f1ab"; }
 | 
			
		||||
.entypo-icon-folder-video:before { content: "\f1ac"; }
 | 
			
		||||
.entypo-icon-forward:before { content: "\f1ad"; }
 | 
			
		||||
.entypo-icon-foursquare:before { content: "\f1ae"; }
 | 
			
		||||
.entypo-icon-funnel:before { content: "\f1af"; }
 | 
			
		||||
.entypo-icon-game-controller:before { content: "\f1b0"; }
 | 
			
		||||
.entypo-icon-gauge:before { content: "\f1b1"; }
 | 
			
		||||
.entypo-icon-github:before { content: "\f1b2"; }
 | 
			
		||||
.entypo-icon-github-with-circle:before { content: "\f1b3"; }
 | 
			
		||||
.entypo-icon-globe:before { content: "\f1b4"; }
 | 
			
		||||
.entypo-icon-google-drive:before { content: "\f1b5"; }
 | 
			
		||||
.entypo-icon-google-hangouts:before { content: "\f1b6"; }
 | 
			
		||||
.entypo-icon-google-play:before { content: "\f1b7"; }
 | 
			
		||||
.entypo-icon-google-plus:before { content: "\f1b8"; }
 | 
			
		||||
.entypo-icon-google-plus-with-circle:before { content: "\f1b9"; }
 | 
			
		||||
.entypo-icon-graduation-cap:before { content: "\f1ba"; }
 | 
			
		||||
.entypo-icon-grid:before { content: "\f1bb"; }
 | 
			
		||||
.entypo-icon-grooveshark:before { content: "\f1bc"; }
 | 
			
		||||
.entypo-icon-hair-cross:before { content: "\f1bd"; }
 | 
			
		||||
.entypo-icon-hand:before { content: "\f1be"; }
 | 
			
		||||
.entypo-icon-heart:before { content: "\f1bf"; }
 | 
			
		||||
.entypo-icon-heart-outlined:before { content: "\f1c0"; }
 | 
			
		||||
.entypo-icon-help:before { content: "\f1c1"; }
 | 
			
		||||
.entypo-icon-help-with-circle:before { content: "\f1c2"; }
 | 
			
		||||
.entypo-icon-home:before { content: "\f1c3"; }
 | 
			
		||||
.entypo-icon-hour-glass:before { content: "\f1c4"; }
 | 
			
		||||
.entypo-icon-houzz:before { content: "\f1c5"; }
 | 
			
		||||
.entypo-icon-icloud:before { content: "\f1c6"; }
 | 
			
		||||
.entypo-icon-image:before { content: "\f1c7"; }
 | 
			
		||||
.entypo-icon-image-inverted:before { content: "\f1c8"; }
 | 
			
		||||
.entypo-icon-images:before { content: "\f1c9"; }
 | 
			
		||||
.entypo-icon-inbox:before { content: "\f1ca"; }
 | 
			
		||||
.entypo-icon-infinity:before { content: "\f1cb"; }
 | 
			
		||||
.entypo-icon-info:before { content: "\f1cc"; }
 | 
			
		||||
.entypo-icon-info-with-circle:before { content: "\f1cd"; }
 | 
			
		||||
.entypo-icon-instagram:before { content: "\f1ce"; }
 | 
			
		||||
.entypo-icon-instagram-with-circle:before { content: "\f1cf"; }
 | 
			
		||||
.entypo-icon-install:before { content: "\f1d0"; }
 | 
			
		||||
.entypo-icon-key:before { content: "\f1d1"; }
 | 
			
		||||
.entypo-icon-keyboard:before { content: "\f1d2"; }
 | 
			
		||||
.entypo-icon-lab-flask:before { content: "\f1d3"; }
 | 
			
		||||
.entypo-icon-landline:before { content: "\f1d4"; }
 | 
			
		||||
.entypo-icon-language:before { content: "\f1d5"; }
 | 
			
		||||
.entypo-icon-laptop:before { content: "\f1d6"; }
 | 
			
		||||
.entypo-icon-lastfm:before { content: "\f1d7"; }
 | 
			
		||||
.entypo-icon-lastfm-with-circle:before { content: "\f1d8"; }
 | 
			
		||||
.entypo-icon-layers:before { content: "\f1d9"; }
 | 
			
		||||
.entypo-icon-leaf:before { content: "\f1da"; }
 | 
			
		||||
.entypo-icon-level-down:before { content: "\f1db"; }
 | 
			
		||||
.entypo-icon-level-up:before { content: "\f1dc"; }
 | 
			
		||||
.entypo-icon-lifebuoy:before { content: "\f1dd"; }
 | 
			
		||||
.entypo-icon-light-bulb:before { content: "\f1de"; }
 | 
			
		||||
.entypo-icon-light-down:before { content: "\f1df"; }
 | 
			
		||||
.entypo-icon-light-up:before { content: "\f1e0"; }
 | 
			
		||||
.entypo-icon-line-graph:before { content: "\f1e1"; }
 | 
			
		||||
.entypo-icon-link:before { content: "\f1e2"; }
 | 
			
		||||
.entypo-icon-linkedin:before { content: "\f1e3"; }
 | 
			
		||||
.entypo-icon-linkedin-with-circle:before { content: "\f1e4"; }
 | 
			
		||||
.entypo-icon-list:before { content: "\f1e5"; }
 | 
			
		||||
.entypo-icon-location:before { content: "\f1e6"; }
 | 
			
		||||
.entypo-icon-location-pin:before { content: "\f1e7"; }
 | 
			
		||||
.entypo-icon-lock:before { content: "\f1e8"; }
 | 
			
		||||
.entypo-icon-lock-open:before { content: "\f1e9"; }
 | 
			
		||||
.entypo-icon-log-out:before { content: "\f1ea"; }
 | 
			
		||||
.entypo-icon-login:before { content: "\f1eb"; }
 | 
			
		||||
.entypo-icon-loop:before { content: "\f1ec"; }
 | 
			
		||||
.entypo-icon-magnet:before { content: "\f1ed"; }
 | 
			
		||||
.entypo-icon-magnifying-glass:before { content: "\f1ee"; }
 | 
			
		||||
.entypo-icon-mail:before { content: "\f1ef"; }
 | 
			
		||||
.entypo-icon-mail-with-circle:before { content: "\f1f0"; }
 | 
			
		||||
.entypo-icon-man:before { content: "\f1f1"; }
 | 
			
		||||
.entypo-icon-map:before { content: "\f1f2"; }
 | 
			
		||||
.entypo-icon-mask:before { content: "\f1f3"; }
 | 
			
		||||
.entypo-icon-medal:before { content: "\f1f4"; }
 | 
			
		||||
.entypo-icon-medium:before { content: "\f1f5"; }
 | 
			
		||||
.entypo-icon-medium-with-circle:before { content: "\f1f6"; }
 | 
			
		||||
.entypo-icon-megaphone:before { content: "\f1f7"; }
 | 
			
		||||
.entypo-icon-menu:before { content: "\f1f8"; }
 | 
			
		||||
.entypo-icon-merge:before { content: "\f1f9"; }
 | 
			
		||||
.entypo-icon-message:before { content: "\f1fa"; }
 | 
			
		||||
.entypo-icon-mic:before { content: "\f1fb"; }
 | 
			
		||||
.entypo-icon-minus:before { content: "\f1fc"; }
 | 
			
		||||
.entypo-icon-mixi:before { content: "\f1fd"; }
 | 
			
		||||
.entypo-icon-mobile:before { content: "\f1fe"; }
 | 
			
		||||
.entypo-icon-modern-mic:before { content: "\f1ff"; }
 | 
			
		||||
.entypo-icon-moon:before { content: "\f200"; }
 | 
			
		||||
.entypo-icon-mouse:before { content: "\f201"; }
 | 
			
		||||
.entypo-icon-mouse-pointer:before { content: "\f202"; }
 | 
			
		||||
.entypo-icon-music:before { content: "\f203"; }
 | 
			
		||||
.entypo-icon-network:before { content: "\f204"; }
 | 
			
		||||
.entypo-icon-new:before { content: "\f205"; }
 | 
			
		||||
.entypo-icon-new-message:before { content: "\f206"; }
 | 
			
		||||
.entypo-icon-news:before { content: "\f207"; }
 | 
			
		||||
.entypo-icon-newsletter:before { content: "\f208"; }
 | 
			
		||||
.entypo-icon-note:before { content: "\f209"; }
 | 
			
		||||
.entypo-icon-notification:before { content: "\f20a"; }
 | 
			
		||||
.entypo-icon-notifications-off:before { content: "\f20b"; }
 | 
			
		||||
.entypo-icon-old-mobile:before { content: "\f20c"; }
 | 
			
		||||
.entypo-icon-old-phone:before { content: "\f20d"; }
 | 
			
		||||
.entypo-icon-onedrive:before { content: "\f20e"; }
 | 
			
		||||
.entypo-icon-open-book:before { content: "\f20f"; }
 | 
			
		||||
.entypo-icon-palette:before { content: "\f210"; }
 | 
			
		||||
.entypo-icon-paper-plane:before { content: "\f211"; }
 | 
			
		||||
.entypo-icon-paypal:before { content: "\f212"; }
 | 
			
		||||
.entypo-icon-pencil:before { content: "\f213"; }
 | 
			
		||||
.entypo-icon-phone:before { content: "\f214"; }
 | 
			
		||||
.entypo-icon-picasa:before { content: "\f215"; }
 | 
			
		||||
.entypo-icon-pie-chart:before { content: "\f216"; }
 | 
			
		||||
.entypo-icon-pin:before { content: "\f217"; }
 | 
			
		||||
.entypo-icon-pinterest:before { content: "\f218"; }
 | 
			
		||||
.entypo-icon-pinterest-with-circle:before { content: "\f219"; }
 | 
			
		||||
.entypo-icon-plus:before { content: "\f21a"; }
 | 
			
		||||
.entypo-icon-popup:before { content: "\f21b"; }
 | 
			
		||||
.entypo-icon-power-plug:before { content: "\f21c"; }
 | 
			
		||||
.entypo-icon-price-ribbon:before { content: "\f21d"; }
 | 
			
		||||
.entypo-icon-price-tag:before { content: "\f21e"; }
 | 
			
		||||
.entypo-icon-print:before { content: "\f21f"; }
 | 
			
		||||
.entypo-icon-progress-empty:before { content: "\f220"; }
 | 
			
		||||
.entypo-icon-progress-full:before { content: "\f221"; }
 | 
			
		||||
.entypo-icon-progress-one:before { content: "\f222"; }
 | 
			
		||||
.entypo-icon-progress-two:before { content: "\f223"; }
 | 
			
		||||
.entypo-icon-publish:before { content: "\f224"; }
 | 
			
		||||
.entypo-icon-qq:before { content: "\f225"; }
 | 
			
		||||
.entypo-icon-qq-with-circle:before { content: "\f226"; }
 | 
			
		||||
.entypo-icon-quote:before { content: "\f227"; }
 | 
			
		||||
.entypo-icon-radio:before { content: "\f228"; }
 | 
			
		||||
.entypo-icon-raft:before { content: "\f229"; }
 | 
			
		||||
.entypo-icon-raft-with-circle:before { content: "\f22a"; }
 | 
			
		||||
.entypo-icon-rainbow:before { content: "\f22b"; }
 | 
			
		||||
.entypo-icon-rdio:before { content: "\f22c"; }
 | 
			
		||||
.entypo-icon-rdio-with-circle:before { content: "\f22d"; }
 | 
			
		||||
.entypo-icon-remove-user:before { content: "\f22e"; }
 | 
			
		||||
.entypo-icon-renren:before { content: "\f22f"; }
 | 
			
		||||
.entypo-icon-reply:before { content: "\f230"; }
 | 
			
		||||
.entypo-icon-reply-all:before { content: "\f231"; }
 | 
			
		||||
.entypo-icon-resize-100-percent:before { content: "\f232"; }
 | 
			
		||||
.entypo-icon-resize-full-screen:before { content: "\f233"; }
 | 
			
		||||
.entypo-icon-retweet:before { content: "\f234"; }
 | 
			
		||||
.entypo-icon-rocket:before { content: "\f235"; }
 | 
			
		||||
.entypo-icon-round-brush:before { content: "\f236"; }
 | 
			
		||||
.entypo-icon-rss:before { content: "\f237"; }
 | 
			
		||||
.entypo-icon-ruler:before { content: "\f238"; }
 | 
			
		||||
.entypo-icon-save:before { content: "\f239"; }
 | 
			
		||||
.entypo-icon-scissors:before { content: "\f23a"; }
 | 
			
		||||
.entypo-icon-scribd:before { content: "\f23b"; }
 | 
			
		||||
.entypo-icon-select-arrows:before { content: "\f23c"; }
 | 
			
		||||
.entypo-icon-share:before { content: "\f23d"; }
 | 
			
		||||
.entypo-icon-share-alternative:before { content: "\f23e"; }
 | 
			
		||||
.entypo-icon-shareable:before { content: "\f23f"; }
 | 
			
		||||
.entypo-icon-shield:before { content: "\f240"; }
 | 
			
		||||
.entypo-icon-shop:before { content: "\f241"; }
 | 
			
		||||
.entypo-icon-shopping-bag:before { content: "\f242"; }
 | 
			
		||||
.entypo-icon-shopping-basket:before { content: "\f243"; }
 | 
			
		||||
.entypo-icon-shopping-cart:before { content: "\f244"; }
 | 
			
		||||
.entypo-icon-shuffle:before { content: "\f245"; }
 | 
			
		||||
.entypo-icon-signal:before { content: "\f246"; }
 | 
			
		||||
.entypo-icon-sina-weibo:before { content: "\f247"; }
 | 
			
		||||
.entypo-icon-skype:before { content: "\f248"; }
 | 
			
		||||
.entypo-icon-skype-with-circle:before { content: "\f249"; }
 | 
			
		||||
.entypo-icon-slideshare:before { content: "\f24a"; }
 | 
			
		||||
.entypo-icon-smashing:before { content: "\f24b"; }
 | 
			
		||||
.entypo-icon-sound:before { content: "\f24c"; }
 | 
			
		||||
.entypo-icon-sound-mix:before { content: "\f24d"; }
 | 
			
		||||
.entypo-icon-sound-mute:before { content: "\f24e"; }
 | 
			
		||||
.entypo-icon-soundcloud:before { content: "\f24f"; }
 | 
			
		||||
.entypo-icon-sports-club:before { content: "\f250"; }
 | 
			
		||||
.entypo-icon-spotify:before { content: "\f251"; }
 | 
			
		||||
.entypo-icon-spotify-with-circle:before { content: "\f252"; }
 | 
			
		||||
.entypo-icon-spreadsheet:before { content: "\f253"; }
 | 
			
		||||
.entypo-icon-squared-cross:before { content: "\f254"; }
 | 
			
		||||
.entypo-icon-squared-minus:before { content: "\f255"; }
 | 
			
		||||
.entypo-icon-squared-plus:before { content: "\f256"; }
 | 
			
		||||
.entypo-icon-star:before { content: "\f257"; }
 | 
			
		||||
.entypo-icon-star-outlined:before { content: "\f258"; }
 | 
			
		||||
.entypo-icon-stopwatch:before { content: "\f259"; }
 | 
			
		||||
.entypo-icon-stumbleupon:before { content: "\f25a"; }
 | 
			
		||||
.entypo-icon-stumbleupon-with-circle:before { content: "\f25b"; }
 | 
			
		||||
.entypo-icon-suitcase:before { content: "\f25c"; }
 | 
			
		||||
.entypo-icon-swap:before { content: "\f25d"; }
 | 
			
		||||
.entypo-icon-swarm:before { content: "\f25e"; }
 | 
			
		||||
.entypo-icon-sweden:before { content: "\f25f"; }
 | 
			
		||||
.entypo-icon-switch:before { content: "\f260"; }
 | 
			
		||||
.entypo-icon-tablet:before { content: "\f261"; }
 | 
			
		||||
.entypo-icon-tablet-mobile-combo:before { content: "\f262"; }
 | 
			
		||||
.entypo-icon-tag:before { content: "\f263"; }
 | 
			
		||||
.entypo-icon-text:before { content: "\f264"; }
 | 
			
		||||
.entypo-icon-text-document:before { content: "\f265"; }
 | 
			
		||||
.entypo-icon-text-document-inverted:before { content: "\f266"; }
 | 
			
		||||
.entypo-icon-thermometer:before { content: "\f267"; }
 | 
			
		||||
.entypo-icon-thumbs-down:before { content: "\f268"; }
 | 
			
		||||
.entypo-icon-thumbs-up:before { content: "\f269"; }
 | 
			
		||||
.entypo-icon-thunder-cloud:before { content: "\f26a"; }
 | 
			
		||||
.entypo-icon-ticket:before { content: "\f26b"; }
 | 
			
		||||
.entypo-icon-time-slot:before { content: "\f26c"; }
 | 
			
		||||
.entypo-icon-tools:before { content: "\f26d"; }
 | 
			
		||||
.entypo-icon-traffic-cone:before { content: "\f26e"; }
 | 
			
		||||
.entypo-icon-trash:before { content: "\f26f"; }
 | 
			
		||||
.entypo-icon-tree:before { content: "\f270"; }
 | 
			
		||||
.entypo-icon-triangle-down:before { content: "\f271"; }
 | 
			
		||||
.entypo-icon-triangle-left:before { content: "\f272"; }
 | 
			
		||||
.entypo-icon-triangle-right:before { content: "\f273"; }
 | 
			
		||||
.entypo-icon-triangle-up:before { content: "\f274"; }
 | 
			
		||||
.entypo-icon-tripadvisor:before { content: "\f275"; }
 | 
			
		||||
.entypo-icon-trophy:before { content: "\f276"; }
 | 
			
		||||
.entypo-icon-tumblr:before { content: "\f277"; }
 | 
			
		||||
.entypo-icon-tumblr-with-circle:before { content: "\f278"; }
 | 
			
		||||
.entypo-icon-tv:before { content: "\f279"; }
 | 
			
		||||
.entypo-icon-twitter:before { content: "\f27a"; }
 | 
			
		||||
.entypo-icon-twitter-with-circle:before { content: "\f27b"; }
 | 
			
		||||
.entypo-icon-typing:before { content: "\f27c"; }
 | 
			
		||||
.entypo-icon-uninstall:before { content: "\f27d"; }
 | 
			
		||||
.entypo-icon-unread:before { content: "\f27e"; }
 | 
			
		||||
.entypo-icon-untag:before { content: "\f27f"; }
 | 
			
		||||
.entypo-icon-upload:before { content: "\f280"; }
 | 
			
		||||
.entypo-icon-upload-to-cloud:before { content: "\f281"; }
 | 
			
		||||
.entypo-icon-user:before { content: "\f282"; }
 | 
			
		||||
.entypo-icon-users:before { content: "\f283"; }
 | 
			
		||||
.entypo-icon-v-card:before { content: "\f284"; }
 | 
			
		||||
.entypo-icon-video:before { content: "\f285"; }
 | 
			
		||||
.entypo-icon-video-camera:before { content: "\f286"; }
 | 
			
		||||
.entypo-icon-vimeo:before { content: "\f287"; }
 | 
			
		||||
.entypo-icon-vimeo-with-circle:before { content: "\f288"; }
 | 
			
		||||
.entypo-icon-vine:before { content: "\f289"; }
 | 
			
		||||
.entypo-icon-vine-with-circle:before { content: "\f28a"; }
 | 
			
		||||
.entypo-icon-vinyl:before { content: "\f28b"; }
 | 
			
		||||
.entypo-icon-vk:before { content: "\f28c"; }
 | 
			
		||||
.entypo-icon-vk-alternitive:before { content: "\f28d"; }
 | 
			
		||||
.entypo-icon-vk-with-circle:before { content: "\f28e"; }
 | 
			
		||||
.entypo-icon-voicemail:before { content: "\f28f"; }
 | 
			
		||||
.entypo-icon-wallet:before { content: "\f290"; }
 | 
			
		||||
.entypo-icon-warning:before { content: "\f291"; }
 | 
			
		||||
.entypo-icon-water:before { content: "\f292"; }
 | 
			
		||||
.entypo-icon-windows-store:before { content: "\f293"; }
 | 
			
		||||
.entypo-icon-xing:before { content: "\f294"; }
 | 
			
		||||
.entypo-icon-xing-with-circle:before { content: "\f295"; }
 | 
			
		||||
.entypo-icon-yelp:before { content: "\f296"; }
 | 
			
		||||
.entypo-icon-youko:before { content: "\f297"; }
 | 
			
		||||
.entypo-icon-youko-with-circle:before { content: "\f298"; }
 | 
			
		||||
.entypo-icon-youtube:before { content: "\f299"; }
 | 
			
		||||
.entypo-icon-youtube-with-circle:before { content: "\f29a"; }
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.eot
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.eot
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2003
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2003
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
		 After Width: | Height: | Size: 340 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.ttf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.ttf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.woff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.woff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.woff2
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cs440-acg/ext/nanogui/docs/_static/entypo.woff2
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										330
									
								
								cs440-acg/ext/nanogui/docs/compilation.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								cs440-acg/ext/nanogui/docs/compilation.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,330 @@
 | 
			
		||||
Compilation
 | 
			
		||||
========================================================================================
 | 
			
		||||
 | 
			
		||||
NanoGUI uses a CMake build system to ensure portability. All dependencies are
 | 
			
		||||
cloned and compiled in one batch, which should generally reduce the amount of
 | 
			
		||||
configuration effort to zero. Assuming that NanoGUI was cloned into the current
 | 
			
		||||
working directory, the following commands need to be executed:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # enter the top-level NanoGUI directory
 | 
			
		||||
   $ cd nanogui
 | 
			
		||||
 | 
			
		||||
   # make a build directory and enter that
 | 
			
		||||
   $ mkdir build
 | 
			
		||||
   $ cd build
 | 
			
		||||
 | 
			
		||||
   # generate your Makefile
 | 
			
		||||
   $ cmake ..
 | 
			
		||||
 | 
			
		||||
   # now that you have a Makefile, use that to build
 | 
			
		||||
   $ make -j 4
 | 
			
		||||
 | 
			
		||||
For Windows, the process is nearly the same:
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # enter the top-level NanoGUI directory
 | 
			
		||||
   $ cd nanogui
 | 
			
		||||
 | 
			
		||||
   # make a build directory and enter that
 | 
			
		||||
   $ mkdir build
 | 
			
		||||
   $ cd build
 | 
			
		||||
 | 
			
		||||
   # Specify VS Version AND 64bit, otherwise it defaults to 32.
 | 
			
		||||
   # The version number and year may be different for you, Win64
 | 
			
		||||
   # can be appended to any of them.  Execute `cmake -G` to get
 | 
			
		||||
   # a listing of the available generators.
 | 
			
		||||
   #
 | 
			
		||||
   # 32 bit Windows builds are /not/ supported
 | 
			
		||||
   $ cmake -G "Visual Studio 14 2015 Win64" ..
 | 
			
		||||
 | 
			
		||||
   # Either open the .sln with Visual Studio, or run
 | 
			
		||||
   $ cmake --build . --config Release
 | 
			
		||||
 | 
			
		||||
Default Configurations
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
By default, NanoGUI will
 | 
			
		||||
 | 
			
		||||
+---------------------------------+---------------------------+
 | 
			
		||||
| Impact / effect                 | CMake Option              |
 | 
			
		||||
+=================================+===========================+
 | 
			
		||||
| Build the example programs.     | ``NANOGUI_BUILD_EXAMPLE`` |
 | 
			
		||||
+---------------------------------+---------------------------+
 | 
			
		||||
| Build as a *shared* library.    | ``NANOGUI_BUILD_SHARED``  |
 | 
			
		||||
+---------------------------------+---------------------------+
 | 
			
		||||
| Build the Python plugins.       | ``NANOGUI_BUILD_PYTHON``  |
 | 
			
		||||
+---------------------------------+---------------------------+
 | 
			
		||||
| Use GLAD if on Windows.         | ``NANOGUI_USE_GLAD``      |
 | 
			
		||||
+---------------------------------+---------------------------+
 | 
			
		||||
| Generate an ``install`` target. | ``NANOGUI_INSTALL``       |
 | 
			
		||||
+---------------------------------+---------------------------+
 | 
			
		||||
 | 
			
		||||
Users developing projects that reference NanoGUI as a ``git submodule`` (this
 | 
			
		||||
is **strongly** encouraged) can set up the parent project's CMake configuration
 | 
			
		||||
file as follows (this assumes that ``nanogui`` lives in the directory
 | 
			
		||||
``ext/nanogui`` relative to the parent project):
 | 
			
		||||
 | 
			
		||||
.. code-block:: cmake
 | 
			
		||||
 | 
			
		||||
    # Disable building extras we won't need (pure C++ project)
 | 
			
		||||
    set(NANOGUI_BUILD_EXAMPLE OFF CACHE BOOL " " FORCE)
 | 
			
		||||
    set(NANOGUI_BUILD_PYTHON  OFF CACHE BOOL " " FORCE)
 | 
			
		||||
    set(NANOGUI_INSTALL       OFF CACHE BOOL " " FORCE)
 | 
			
		||||
 | 
			
		||||
    # Add the configurations from nanogui
 | 
			
		||||
    add_subdirectory(ext/nanogui)
 | 
			
		||||
 | 
			
		||||
    # For reliability of parallel build, make the NanoGUI targets dependencies
 | 
			
		||||
    set_property(TARGET glfw glfw_objects nanogui PROPERTY FOLDER "dependencies")
 | 
			
		||||
 | 
			
		||||
Required Variables Exposed
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Due to the nature of building an OpenGL application for different platforms, three
 | 
			
		||||
variables are populated to allow for easy incorporation with your CMake build.  After
 | 
			
		||||
you have executed ``add_subdirectory`` as shown above, you will need to add the
 | 
			
		||||
following (assuming the target you are building is called ``myTarget``):
 | 
			
		||||
 | 
			
		||||
.. code-block:: cmake
 | 
			
		||||
 | 
			
		||||
   # Various preprocessor definitions have been generated by NanoGUI
 | 
			
		||||
   add_definitions(${NANOGUI_EXTRA_DEFS})
 | 
			
		||||
 | 
			
		||||
   # On top of adding the path to nanogui/include, you may need extras
 | 
			
		||||
   include_directories(${NANOGUI_EXTRA_INCS})
 | 
			
		||||
 | 
			
		||||
   # Compile a target using NanoGUI
 | 
			
		||||
   add_executable(myTarget myTarget.cpp)
 | 
			
		||||
 | 
			
		||||
   # Lastly, additional libraries may have been built for you.  In addition to linking
 | 
			
		||||
   # against NanoGUI, we need to link against those as well.
 | 
			
		||||
   target_link_libraries(myTarget nanogui ${NANOGUI_EXTRA_LIBS})
 | 
			
		||||
 | 
			
		||||
Advanced Compilation Details
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
NanoGUI and Python
 | 
			
		||||
****************************************************************************************
 | 
			
		||||
 | 
			
		||||
Although it is |year|, you may still for example wish to build the Python bindings for
 | 
			
		||||
Python 2.7.  The variable you would set **before** ``add_subdirectory`` is
 | 
			
		||||
``NANOGUI_PYTHON_VERSION``.  For example,
 | 
			
		||||
 | 
			
		||||
.. code-block:: cmake
 | 
			
		||||
 | 
			
		||||
   set(NANOGUI_PYTHON_VERSION "2.7")
 | 
			
		||||
   # can also use minor versions
 | 
			
		||||
   set(NANOGUI_PYTHON_VERSION "3.6.2")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
NanoGUI and Eigen
 | 
			
		||||
****************************************************************************************
 | 
			
		||||
 | 
			
		||||
NanoGUI uses Eigen_ internally for various vector types.  Eigen is an advanced header
 | 
			
		||||
only template library, which NanoGUI vendors in the ``ext`` folder.  It is important to
 | 
			
		||||
understand the implication of Eigen being header only: **only one version of Eigen can
 | 
			
		||||
be included**.
 | 
			
		||||
 | 
			
		||||
There is a CMake bypass variable available in NanoGUI: ``NANOGUI_EIGEN_INCLUDE_DIR``.
 | 
			
		||||
You would set this variable **before** ``add_subdirectory``.  Since you will want to
 | 
			
		||||
provide the same kind of bypass for users of your library, the following snippet is a
 | 
			
		||||
good starting point.  For this example code:
 | 
			
		||||
 | 
			
		||||
1. The parent CMake project is called ``myproj``.  A good CMake practice to adopt is to
 | 
			
		||||
   prefix your project's name to any variables you intend to expose.  This allows parent
 | 
			
		||||
   projects to know where the variable came from, and avoids name collisions.
 | 
			
		||||
2. First ``find_package`` is used to try and find Eigen.  The philosophy is that the
 | 
			
		||||
   user is responsible for ensuring that the version of Eigen they want to use will be
 | 
			
		||||
   found.
 | 
			
		||||
3. Since NanoGUI needs to remain self-contained, the side-effect is that even if the
 | 
			
		||||
   user does *not* have Eigen installed, you can fallback and use the one vendored with
 | 
			
		||||
   NanoGUI.
 | 
			
		||||
4. The following directory structure:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: none
 | 
			
		||||
 | 
			
		||||
      myproj/
 | 
			
		||||
          CMakeLists.txt         <- Where this example code is
 | 
			
		||||
          ext/
 | 
			
		||||
              nanogui/
 | 
			
		||||
                  CMakeLists.txt <- NanoGUI's build system
 | 
			
		||||
                  ext/
 | 
			
		||||
                      eigen/     <- NanoGUI's internal copy of Eigen
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.. code-block:: cmake
 | 
			
		||||
 | 
			
		||||
   # `if NOT` is what enables the same bypass for your project
 | 
			
		||||
   if(NOT MYPROJ_EIGEN3_INCLUDE_DIR)
 | 
			
		||||
     # Grab or find the Eigen3 include directory.
 | 
			
		||||
     find_package(Eigen3 QUIET)
 | 
			
		||||
     if(EIGEN3_INCLUDE_DIR)
 | 
			
		||||
       set(MYPROJ_EIGEN3_INCLUDE_DIR ${EIGEN3_INCLUDE_DIR})
 | 
			
		||||
     else()
 | 
			
		||||
       # use the internal NanoGUI copy of Eigen
 | 
			
		||||
       set(MYPROJ_EIGEN3_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ext/nanogui/ext/eigen)
 | 
			
		||||
     endif()
 | 
			
		||||
   endif()
 | 
			
		||||
 | 
			
		||||
   message(STATUS "Using Eigen3 from directory: ${MYPROJ_EIGEN3_INCLUDE_DIR}")
 | 
			
		||||
   set(NANOGUI_EIGEN_INCLUDE_DIR ${EIGEN3_INCLUDE_DIR} CACHE BOOL " " FORCE)
 | 
			
		||||
   # set any other NanoGUI specific variables you need (shown in above sections)
 | 
			
		||||
   add_subdirectory(ext/nanogui)
 | 
			
		||||
 | 
			
		||||
   # include it for your project as well (or append to a list
 | 
			
		||||
   # and include that list later, depending on your setup)
 | 
			
		||||
   include_directories(${MYPROJ_EIGEN3_INCLUDE_DIR})
 | 
			
		||||
 | 
			
		||||
.. _Eigen: https://eigen.tuxfamily.org/dox/
 | 
			
		||||
 | 
			
		||||
NanoGUI, GLFW, and Other Projects
 | 
			
		||||
****************************************************************************************
 | 
			
		||||
 | 
			
		||||
Suppose you want to use NanoGUI as your GUI toolkit, but you also have another library
 | 
			
		||||
you want to use that depends on ``glfw``.  Call the second library Foo.  Generally
 | 
			
		||||
speaking, it is unlikely that library Foo will provide you with mechanisms to explicitly
 | 
			
		||||
specify where ``glfw`` comes from.  You could try to work on a patch with the developers
 | 
			
		||||
of library Foo to allow this to be overridden, but you may need to maintain your own
 | 
			
		||||
fork of library Foo.  There is just as much justification to allow the bypass as there
 | 
			
		||||
is to not want it in a build system.
 | 
			
		||||
 | 
			
		||||
Since NanoGUI merges the ``glfw`` objects into the library being built, you can actually
 | 
			
		||||
just specify ``nanogui`` as the ``glfw`` dependency directly.  So lets suppose that
 | 
			
		||||
library Foo was looking for ``glfw`` like this:
 | 
			
		||||
 | 
			
		||||
.. code-block:: cmake
 | 
			
		||||
 | 
			
		||||
   find_package(GLFW3)
 | 
			
		||||
   if(GLFW3_FOUND)
 | 
			
		||||
     include_directories(${GLFW3_INCLUDE_DIRS})
 | 
			
		||||
     target_link_libraries(foo ${GLFW3_LIBRARIES})
 | 
			
		||||
   endif()
 | 
			
		||||
 | 
			
		||||
You can cheat around this pretty easily.  For the modification to library Foo's build
 | 
			
		||||
system, all we do is wrap ``find_package``:
 | 
			
		||||
 | 
			
		||||
.. code-block:: diff
 | 
			
		||||
 | 
			
		||||
   + if(NOT GLFW3_FOUND)
 | 
			
		||||
       find_package(GLFW3)
 | 
			
		||||
   + endif()
 | 
			
		||||
     if(GLFW3_FOUND)
 | 
			
		||||
       include_directories(${GLFW3_INCLUDE_DIRS})
 | 
			
		||||
       target_link_libraries(foo ${GLFW3_LIBRARIES})
 | 
			
		||||
     endif()
 | 
			
		||||
 | 
			
		||||
Now that ``find_package`` will only execute if ``NOT GLFW3_FOUND``, in your build system
 | 
			
		||||
you make sure to set all three ``glfw`` variables (found, include, and libraries).  It
 | 
			
		||||
might look something like this:
 | 
			
		||||
 | 
			
		||||
.. code-block:: cmake
 | 
			
		||||
 | 
			
		||||
   # ... any other nanogui configs ...
 | 
			
		||||
   # same directory structure as Eigen example
 | 
			
		||||
   add_subdirectory(ext/nanogui)
 | 
			
		||||
 | 
			
		||||
   # nanogui needs to be added first so the 'nanogui' target is defined
 | 
			
		||||
   # and can be used in the generator expression for the libraries
 | 
			
		||||
   set(GLFW3_FOUND ON)
 | 
			
		||||
   set(GLFW3_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/ext/nanogui/ext/glfw/include)
 | 
			
		||||
   set(GLFW3_LIBRARIES $<TARGET_FILE:nanogui>)
 | 
			
		||||
 | 
			
		||||
   add_subdirectory(ext/foo)
 | 
			
		||||
 | 
			
		||||
   # IMPORTANT! You need to force NanoGUI to build first
 | 
			
		||||
   # Assuming their library target is called 'foo'
 | 
			
		||||
   add_dependencies(foo nanogui)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Depending on what you need to do, the above may not be sufficient.  But it is at least
 | 
			
		||||
a starting point to being able to "share" NanoGUI as the vendor of ``glfw``.
 | 
			
		||||
 | 
			
		||||
.. _nanogui_including_custom_fonts:
 | 
			
		||||
 | 
			
		||||
Including Custom Fonts
 | 
			
		||||
****************************************************************************************
 | 
			
		||||
 | 
			
		||||
NanoGUI uses the Roboto_ font for text, and Entypo_ font for icons.  If you wish to add
 | 
			
		||||
your own custom font, all you need is a True Type file (a ``.ttf`` extension).  NanoGUI
 | 
			
		||||
will glob all fonts found in ``resources`` by expanding ``resources/*.ttf``.  So if you
 | 
			
		||||
had the directory structure
 | 
			
		||||
 | 
			
		||||
.. code-block:: none
 | 
			
		||||
 | 
			
		||||
   myproject/
 | 
			
		||||
       CMakeLists.txt      <- where this code is
 | 
			
		||||
       fonts/
 | 
			
		||||
           superfont.ttf
 | 
			
		||||
       ext/
 | 
			
		||||
           nanogui/
 | 
			
		||||
               resources/
 | 
			
		||||
 | 
			
		||||
You simply need to copy the ``superfont.ttf`` to NanoGUI's resources directory:
 | 
			
		||||
 | 
			
		||||
.. code-block:: cmake
 | 
			
		||||
 | 
			
		||||
   file(
 | 
			
		||||
     COPY ${CMAKE_CURRENT_SOURCE_DIR}/fonts/superfont.ttf
 | 
			
		||||
     DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/ext/nanogui/resources/superfont.ttf
 | 
			
		||||
   )
 | 
			
		||||
 | 
			
		||||
When you build the code, there should be a file ``nanogui_resources.h`` generated.  If
 | 
			
		||||
everything worked, your new font should have been included.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   Since NanoGUI can support images as icons, you will want to make sure that the
 | 
			
		||||
   *codepoint* for any *icon* fonts you create is greater than ``1024``.  See
 | 
			
		||||
   :func:`nanogui::nvgIsImageIcon`.
 | 
			
		||||
 | 
			
		||||
.. tip::
 | 
			
		||||
 | 
			
		||||
   Some widgets allow you to set fonts directly, but if you want to apply the font
 | 
			
		||||
   globally, you should create a sub-class of :class:`nanogui::Theme` and explicitly
 | 
			
		||||
   call :func:`nanogui::Widget::setTheme` for each widget you create.
 | 
			
		||||
 | 
			
		||||
.. _Roboto: https://fonts.google.com/specimen/Roboto
 | 
			
		||||
 | 
			
		||||
.. _Entypo: http://www.entypo.com
 | 
			
		||||
 | 
			
		||||
.. _utf8: http://www.utf8-chartable.de/
 | 
			
		||||
 | 
			
		||||
.. _nanogui_compiling_the_docs:
 | 
			
		||||
 | 
			
		||||
Compiling the Documentation
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
The documentation system relies on 'Doxygen', 'Sphinx', 'Breathe', and
 | 
			
		||||
'Exhale'.  It uses the 'Read the Docs' theme for the layout of the generated
 | 
			
		||||
html.  So you will need to first
 | 
			
		||||
 | 
			
		||||
1. Install Doxygen for your operating system.  On Unix based systems, this
 | 
			
		||||
   should be available through your package manager (apt-get, brew, dnf, etc).
 | 
			
		||||
 | 
			
		||||
2. Install Sphinx, Breathe, Exhale, and the theme:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: py
 | 
			
		||||
 | 
			
		||||
      pip3 install -r <path/to/nanogui>/docs/requirements.txt
 | 
			
		||||
 | 
			
		||||
Now that you have the relevant tools, you can build the documentation with
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   # Enter the documentation directory
 | 
			
		||||
   $ cd <path/to/nanogui>/docs
 | 
			
		||||
 | 
			
		||||
   # Build the documentation
 | 
			
		||||
   $ make html
 | 
			
		||||
 | 
			
		||||
The output will be generated in ``_build``, the root html document is located
 | 
			
		||||
at ``_build/html/index.html``.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   When building the documentation locally, there can be subtle differences in
 | 
			
		||||
   the rendered pages than what is hosted online.  You should largely be able
 | 
			
		||||
   to ignore this.
 | 
			
		||||
							
								
								
									
										372
									
								
								cs440-acg/ext/nanogui/docs/conf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										372
									
								
								cs440-acg/ext/nanogui/docs/conf.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,372 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
#
 | 
			
		||||
# NanoGUI documentation build configuration file, created by
 | 
			
		||||
# sphinx-quickstart on Mon Aug 22 20:05:54 2016.
 | 
			
		||||
#
 | 
			
		||||
# This file is execfile()d with the current directory set to its
 | 
			
		||||
# containing dir.
 | 
			
		||||
#
 | 
			
		||||
# Note that not all possible configuration values are present in this
 | 
			
		||||
# autogenerated file.
 | 
			
		||||
#
 | 
			
		||||
# All configuration values have a default; values that are commented out
 | 
			
		||||
# serve to show the default.
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import os
 | 
			
		||||
import shlex
 | 
			
		||||
import textwrap
 | 
			
		||||
 | 
			
		||||
# If extensions (or modules to document with autodoc) are in another directory,
 | 
			
		||||
# add these directories to sys.path here. If the directory is relative to the
 | 
			
		||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
 | 
			
		||||
# sys.path.insert(0, os.path.abspath('.'))
 | 
			
		||||
 | 
			
		||||
# -- General configuration ------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# If your documentation needs a minimal Sphinx version, state it here.
 | 
			
		||||
needs_sphinx = '1.0'
 | 
			
		||||
 | 
			
		||||
# Add any Sphinx extension module names here, as strings. They can be
 | 
			
		||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 | 
			
		||||
# ones.
 | 
			
		||||
extensions = [
 | 
			
		||||
    'sphinx.ext.ifconfig',
 | 
			
		||||
    'breathe',
 | 
			
		||||
    'exhale'
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# Setup the `breathe` extension
 | 
			
		||||
breathe_projects = { "NanoGUI": "./doxyoutput/xml" }
 | 
			
		||||
breathe_default_project = "NanoGUI"
 | 
			
		||||
 | 
			
		||||
# Setup the `exhale` extension
 | 
			
		||||
exhale_args = {
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    # These arguments are required.                                            #
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    "containmentFolder":     "./api",
 | 
			
		||||
    "rootFileName":          "library_root.rst",
 | 
			
		||||
    "rootFileTitle":         "Library API",
 | 
			
		||||
    "doxygenStripFromPath":  "../include",
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    # Suggested optional arguments.                                            #
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    "createTreeView":        True,
 | 
			
		||||
    "exhaleExecutesDoxygen": True,
 | 
			
		||||
    "exhaleDoxygenStdin": textwrap.dedent('''
 | 
			
		||||
        # Tell Doxygen where the source code is (yours may be different).
 | 
			
		||||
        INPUT                  = ../include
 | 
			
		||||
        # Doxygen chokes on `NAMESPACE_BEGIN`, predfine all of these
 | 
			
		||||
        PREDEFINED            += NAMESPACE_BEGIN(nanogui)="namespace nanogui {"
 | 
			
		||||
        PREDEFINED            += NAMESPACE_END(nanogui)="}"
 | 
			
		||||
        PREDEFINED            += NAMESPACE_BEGIN(detail)="namespace detail {"
 | 
			
		||||
        PREDEFINED            += NAMESPACE_END(detail)="}"
 | 
			
		||||
        PREDEFINED            += DOXYGEN_SHOULD_SKIP_THIS
 | 
			
		||||
        PREDEFINED            += DOXYGEN_DOCUMENTATION_BUILD
 | 
			
		||||
        PREDEFINED            += NANOGUI_EXPORT
 | 
			
		||||
    '''),
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    # HTML Theme specific configurations.                                      #
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    # Fix broken Sphinx RTD Theme 'Edit on GitHub' links
 | 
			
		||||
    # Search for 'Edit on GitHub' on the FAQ:
 | 
			
		||||
    #     http://exhale.readthedocs.io/en/latest/faq.html
 | 
			
		||||
    "pageLevelConfigMeta": ":github_url: https://github.com/wjakob/nanogui",
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    # Main library page layout example configuration.                          #
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    "afterTitleDescription": textwrap.dedent(u'''
 | 
			
		||||
        Welcome to the developer reference to NanoGUI.  The documentation is
 | 
			
		||||
        actively being developed / updated.  If you would like to help document
 | 
			
		||||
        any part of the project you may be familiar with, please refer to the
 | 
			
		||||
        :ref:`developer_contribution` page.
 | 
			
		||||
 | 
			
		||||
        .. note::
 | 
			
		||||
 | 
			
		||||
           Presented below is only the C++ API. If you are using the Python API,
 | 
			
		||||
           the contents below are still applicable for understanding what
 | 
			
		||||
           methods are available.  While the documentation for the C++ API is
 | 
			
		||||
           useful as a reference for understanding what a given class does, the
 | 
			
		||||
           Python API does differ.  Please refer to the more concise
 | 
			
		||||
           :ref:`nanogui_example_2` for comparing the differences between the
 | 
			
		||||
           C++ and Python interfaces.
 | 
			
		||||
    '''),
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    # Individual page layout example configuration.                            #
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    # Example of adding contents directives on custom kinds with custom title
 | 
			
		||||
    "contentsTitle": "Page Contents",
 | 
			
		||||
    "kindsWithContentsDirectives": ["class", "file", "namespace", "struct"],
 | 
			
		||||
    ############################################################################
 | 
			
		||||
    # useful to see ;)
 | 
			
		||||
    # "verboseBuild": True
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Tell sphinx what the primary language being documented is.
 | 
			
		||||
primary_domain = 'cpp'
 | 
			
		||||
 | 
			
		||||
# Tell sphinx what the pygments highlight language should be.
 | 
			
		||||
highlight_language = 'cpp'
 | 
			
		||||
 | 
			
		||||
# Add any paths that contain templates here, relative to this directory.
 | 
			
		||||
# templates_path = ['_templates']
 | 
			
		||||
 | 
			
		||||
# The suffix(es) of source filenames.
 | 
			
		||||
# You can specify multiple suffix as a list of string:
 | 
			
		||||
# source_suffix = ['.rst', '.md']
 | 
			
		||||
source_suffix = '.rst'
 | 
			
		||||
 | 
			
		||||
# The encoding of source files.
 | 
			
		||||
#source_encoding = 'utf-8-sig'
 | 
			
		||||
 | 
			
		||||
# The master toctree document.
 | 
			
		||||
master_doc = 'index'
 | 
			
		||||
 | 
			
		||||
# General information about the project.
 | 
			
		||||
project = u'NanoGUI'
 | 
			
		||||
copyright = u'2017, Wenzel Jakob'
 | 
			
		||||
author = u'Wenzel Jakob'
 | 
			
		||||
 | 
			
		||||
# The version info for the project you're documenting, acts as replacement for
 | 
			
		||||
# |version| and |release|, also used in various other places throughout the
 | 
			
		||||
# built documents.
 | 
			
		||||
#
 | 
			
		||||
# The short X.Y version.
 | 
			
		||||
version = '0.1.0'
 | 
			
		||||
# The full version, including alpha/beta/rc tags.
 | 
			
		||||
release = '0.1.0'
 | 
			
		||||
 | 
			
		||||
# The language for content autogenerated by Sphinx. Refer to documentation
 | 
			
		||||
# for a list of supported languages.
 | 
			
		||||
#
 | 
			
		||||
# This is also used if you do content translation via gettext catalogs.
 | 
			
		||||
# Usually you set "language" from the command line for these cases.
 | 
			
		||||
language = None
 | 
			
		||||
 | 
			
		||||
# There are two options for replacing |today|: either, you set today to some
 | 
			
		||||
# non-false value, then it is used:
 | 
			
		||||
#today = ''
 | 
			
		||||
# Else, today_fmt is used as the format for a strftime call.
 | 
			
		||||
#today_fmt = '%B %d, %Y'
 | 
			
		||||
 | 
			
		||||
# List of patterns, relative to source directory, that match files and
 | 
			
		||||
# directories to ignore when looking for source files.
 | 
			
		||||
exclude_patterns = ['_build']
 | 
			
		||||
 | 
			
		||||
# The reST default role (used for this markup: `text`) to use for all
 | 
			
		||||
# documents.
 | 
			
		||||
#default_role = None
 | 
			
		||||
 | 
			
		||||
# If true, '()' will be appended to :func: etc. cross-reference text.
 | 
			
		||||
#add_function_parentheses = True
 | 
			
		||||
 | 
			
		||||
# If true, the current module name will be prepended to all description
 | 
			
		||||
# unit titles (such as .. function::).
 | 
			
		||||
#add_module_names = True
 | 
			
		||||
 | 
			
		||||
# If true, sectionauthor and moduleauthor directives will be shown in the
 | 
			
		||||
# output. They are ignored by default.
 | 
			
		||||
#show_authors = False
 | 
			
		||||
 | 
			
		||||
# The name of the Pygments (syntax highlighting) style to use.
 | 
			
		||||
pygments_style = 'sphinx'
 | 
			
		||||
 | 
			
		||||
# A list of ignored prefixes for module index sorting.
 | 
			
		||||
#modindex_common_prefix = []
 | 
			
		||||
 | 
			
		||||
# If true, keep warnings as "system message" paragraphs in the built documents.
 | 
			
		||||
#keep_warnings = False
 | 
			
		||||
 | 
			
		||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
 | 
			
		||||
todo_include_todos = False
 | 
			
		||||
 | 
			
		||||
# -- Options for HTML output ----------------------------------------------
 | 
			
		||||
 | 
			
		||||
# The theme to use for HTML and HTML Help pages.  See the documentation for
 | 
			
		||||
# a list of builtin themes.
 | 
			
		||||
html_theme = 'sphinx_rtd_theme'
 | 
			
		||||
 | 
			
		||||
# Theme options are theme-specific and customize the look and feel of a theme
 | 
			
		||||
# further.  For a list of options available for each theme, see the
 | 
			
		||||
# documentation.
 | 
			
		||||
#html_theme_options = {}
 | 
			
		||||
 | 
			
		||||
# Add any paths that contain custom themes here, relative to this directory.
 | 
			
		||||
#html_theme_path = []
 | 
			
		||||
 | 
			
		||||
# The name for this set of Sphinx documents.  If None, it defaults to
 | 
			
		||||
# "<project> v<release> documentation".
 | 
			
		||||
#html_title = None
 | 
			
		||||
 | 
			
		||||
# A shorter title for the navigation bar.  Default is the same as html_title.
 | 
			
		||||
#html_short_title = None
 | 
			
		||||
 | 
			
		||||
# The name of an image file (relative to this directory) to place at the top
 | 
			
		||||
# of the sidebar.
 | 
			
		||||
#html_logo = None
 | 
			
		||||
 | 
			
		||||
# The name of an image file (within the static path) to use as favicon of the
 | 
			
		||||
# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
 | 
			
		||||
# pixels large.
 | 
			
		||||
html_favicon = '../resources/icons/icon6.ico'
 | 
			
		||||
 | 
			
		||||
# Add any paths that contain custom static files (such as style sheets) here,
 | 
			
		||||
# relative to this directory. They are copied after the builtin static files,
 | 
			
		||||
# so a file named "default.css" will overwrite the builtin "default.css".
 | 
			
		||||
html_static_path = ['_static']
 | 
			
		||||
 | 
			
		||||
# Add any extra paths that contain custom files (such as robots.txt or
 | 
			
		||||
# .htaccess) here, relative to this directory. These files are copied
 | 
			
		||||
# directly to the root of the documentation.
 | 
			
		||||
#html_extra_path = []
 | 
			
		||||
 | 
			
		||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
 | 
			
		||||
# using the given strftime format.
 | 
			
		||||
#html_last_updated_fmt = '%b %d, %Y'
 | 
			
		||||
 | 
			
		||||
# If true, SmartyPants will be used to convert quotes and dashes to
 | 
			
		||||
# typographically correct entities.
 | 
			
		||||
#html_use_smartypants = True
 | 
			
		||||
 | 
			
		||||
# Custom sidebar templates, maps document names to template names.
 | 
			
		||||
#html_sidebars = {}
 | 
			
		||||
 | 
			
		||||
# Additional templates that should be rendered to pages, maps page names to
 | 
			
		||||
# template names.
 | 
			
		||||
#html_additional_pages = {}
 | 
			
		||||
 | 
			
		||||
# If false, no module index is generated.
 | 
			
		||||
#html_domain_indices = True
 | 
			
		||||
 | 
			
		||||
# If false, no index is generated.
 | 
			
		||||
#html_use_index = True
 | 
			
		||||
 | 
			
		||||
# If true, the index is split into individual pages for each letter.
 | 
			
		||||
#html_split_index = False
 | 
			
		||||
 | 
			
		||||
# If true, links to the reST sources are added to the pages.
 | 
			
		||||
#html_show_sourcelink = True
 | 
			
		||||
 | 
			
		||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
 | 
			
		||||
#html_show_sphinx = True
 | 
			
		||||
 | 
			
		||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
 | 
			
		||||
#html_show_copyright = True
 | 
			
		||||
 | 
			
		||||
# If true, an OpenSearch description file will be output, and all pages will
 | 
			
		||||
# contain a <link> tag referring to it.  The value of this option must be the
 | 
			
		||||
# base URL from which the finished HTML is served.
 | 
			
		||||
#html_use_opensearch = ''
 | 
			
		||||
 | 
			
		||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
 | 
			
		||||
#html_file_suffix = None
 | 
			
		||||
 | 
			
		||||
# Language to be used for generating the HTML full-text search index.
 | 
			
		||||
# Sphinx supports the following languages:
 | 
			
		||||
#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
 | 
			
		||||
#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
 | 
			
		||||
#html_search_language = 'en'
 | 
			
		||||
 | 
			
		||||
# A dictionary with options for the search language support, empty by default.
 | 
			
		||||
# Now only 'ja' uses this config value
 | 
			
		||||
#html_search_options = {'type': 'default'}
 | 
			
		||||
 | 
			
		||||
# The name of a javascript file (relative to the configuration directory) that
 | 
			
		||||
# implements a search results scorer. If empty, the default will be used.
 | 
			
		||||
#html_search_scorer = 'scorer.js'
 | 
			
		||||
 | 
			
		||||
# Output file base name for HTML help builder.
 | 
			
		||||
htmlhelp_basename = 'NanoGUIdoc'
 | 
			
		||||
 | 
			
		||||
# -- Options for LaTeX output ---------------------------------------------
 | 
			
		||||
 | 
			
		||||
latex_elements = {
 | 
			
		||||
# The paper size ('letterpaper' or 'a4paper').
 | 
			
		||||
#'papersize': 'letterpaper',
 | 
			
		||||
 | 
			
		||||
# The font size ('10pt', '11pt' or '12pt').
 | 
			
		||||
#'pointsize': '10pt',
 | 
			
		||||
 | 
			
		||||
# Additional stuff for the LaTeX preamble.
 | 
			
		||||
#'preamble': '',
 | 
			
		||||
 | 
			
		||||
# Latex figure (float) alignment
 | 
			
		||||
#'figure_align': 'htbp',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Grouping the document tree into LaTeX files. List of tuples
 | 
			
		||||
# (source start file, target name, title,
 | 
			
		||||
#  author, documentclass [howto, manual, or own class]).
 | 
			
		||||
latex_documents = [
 | 
			
		||||
  (master_doc, 'NanoGUI.tex', u'NanoGUI Documentation',
 | 
			
		||||
   u'Wenzel Jakob', 'manual'),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# The name of an image file (relative to this directory) to place at the top of
 | 
			
		||||
# the title page.
 | 
			
		||||
#latex_logo = None
 | 
			
		||||
 | 
			
		||||
# For "manual" documents, if this is true, then toplevel headings are parts,
 | 
			
		||||
# not chapters.
 | 
			
		||||
#latex_use_parts = False
 | 
			
		||||
 | 
			
		||||
# If true, show page references after internal links.
 | 
			
		||||
#latex_show_pagerefs = False
 | 
			
		||||
 | 
			
		||||
# If true, show URL addresses after external links.
 | 
			
		||||
#latex_show_urls = False
 | 
			
		||||
 | 
			
		||||
# Documents to append as an appendix to all manuals.
 | 
			
		||||
#latex_appendices = []
 | 
			
		||||
 | 
			
		||||
# If false, no module index is generated.
 | 
			
		||||
#latex_domain_indices = True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for manual page output ---------------------------------------
 | 
			
		||||
 | 
			
		||||
# One entry per manual page. List of tuples
 | 
			
		||||
# (source start file, name, description, authors, manual section).
 | 
			
		||||
man_pages = [
 | 
			
		||||
    (master_doc, 'nanogui', u'NanoGUI Documentation',
 | 
			
		||||
     [author], 1)
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# If true, show URL addresses after external links.
 | 
			
		||||
#man_show_urls = False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for Texinfo output -------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Grouping the document tree into Texinfo files. List of tuples
 | 
			
		||||
# (source start file, target name, title, author,
 | 
			
		||||
#  dir menu entry, description, category)
 | 
			
		||||
texinfo_documents = [
 | 
			
		||||
  (master_doc, 'NanoGUI', u'NanoGUI Documentation',
 | 
			
		||||
   author, 'NanoGUI', 'One line description of project.',
 | 
			
		||||
   'Miscellaneous'),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# Documents to append as an appendix to all manuals.
 | 
			
		||||
#texinfo_appendices = []
 | 
			
		||||
 | 
			
		||||
# If false, no module index is generated.
 | 
			
		||||
#texinfo_domain_indices = True
 | 
			
		||||
 | 
			
		||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
 | 
			
		||||
#texinfo_show_urls = 'footnote'
 | 
			
		||||
 | 
			
		||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
 | 
			
		||||
#texinfo_no_detailmenu = False
 | 
			
		||||
import datetime
 | 
			
		||||
rst_epilog = textwrap.dedent('''
 | 
			
		||||
    .. |year| replace:: {year}
 | 
			
		||||
'''.format(
 | 
			
		||||
    year=datetime.datetime.now().year
 | 
			
		||||
))
 | 
			
		||||
 | 
			
		||||
# auto-magically called by sphinx-build
 | 
			
		||||
def setup(app):
 | 
			
		||||
    # this looks in html_static_path (_static directory as set above)
 | 
			
		||||
    app.add_stylesheet("entypo.css")
 | 
			
		||||
							
								
								
									
										346
									
								
								cs440-acg/ext/nanogui/docs/contributing.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										346
									
								
								cs440-acg/ext/nanogui/docs/contributing.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,346 @@
 | 
			
		||||
.. _developer_contribution:
 | 
			
		||||
 | 
			
		||||
Contributing
 | 
			
		||||
========================================================================================
 | 
			
		||||
 | 
			
		||||
Thank you for your interest in this project! Please refer to the following sections on
 | 
			
		||||
how to contribute code and bug reports.
 | 
			
		||||
 | 
			
		||||
Reporting bugs
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
At the moment, this project is run in the spare time of a single person
 | 
			
		||||
(`Wenzel Jakob <http://rgl.epfl.ch/people/wjakob>`_) with very limited resources for
 | 
			
		||||
issue tracker tickets. Thus, before submitting a question or bug report, please take a
 | 
			
		||||
moment of your time and ensure that your issue isn't already discussed in the project
 | 
			
		||||
documentation elsewhere on this site.
 | 
			
		||||
 | 
			
		||||
Feature requests are generally closed unless they come with a pull request
 | 
			
		||||
that implements the desired functionality.
 | 
			
		||||
 | 
			
		||||
Assuming that you have identified a previously unknown problem or an important question,
 | 
			
		||||
it's essential that you submit a self-contained and minimal piece of code that
 | 
			
		||||
reproduces the problem. In other words: no external dependencies, isolate the
 | 
			
		||||
function(s) that cause breakage, submit matched and complete C++ or Python snippets
 | 
			
		||||
(depending on how you are using NanoGUI) that can be easily compiled and run on my end.
 | 
			
		||||
 | 
			
		||||
Pull requests
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
Contributions are submitted, reviewed, and accepted using Github pull requests. Please
 | 
			
		||||
refer to `this article <https://help.github.com/articles/using-pull-requests>`_ for
 | 
			
		||||
details and adhere to the following rules to make the process as smooth as possible:
 | 
			
		||||
 | 
			
		||||
- Make a new branch for every feature you're working on.
 | 
			
		||||
- Make small and clean pull requests that are easy to review but make sure they do add
 | 
			
		||||
  value by themselves.
 | 
			
		||||
- Make sure you have tested any new functionality (e.g. if you made a new Widget).
 | 
			
		||||
- This project has a strong focus on providing general solutions using a minimal amount
 | 
			
		||||
  of code, thus small pull requests are greatly preferred.
 | 
			
		||||
- Read the remainder of this document, adhering to the bindings and documentation
 | 
			
		||||
  requirements.
 | 
			
		||||
- If making a purely documentation PR, please prefix the commit with ``[docs]``
 | 
			
		||||
 | 
			
		||||
  - E.g. ``[docs] Adding documentation for class X.``
 | 
			
		||||
 | 
			
		||||
Python Binding Requirements
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Since NanoGUI builds for both C++, as well as produces Python bindings, you **must**
 | 
			
		||||
account for both sides of the API regardless of how you use the project.  If you are
 | 
			
		||||
adding a new method, class, etc (not fixing an existing one), you must write the code
 | 
			
		||||
to produce the relevant binding in ``python/python.cpp``.
 | 
			
		||||
 | 
			
		||||
Code Style Requirements
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
- Tabs are 4 spaces -- please do not submit PRs with *tab* characters.
 | 
			
		||||
- Most code follows an 80 column ruler, wherever reasonable.
 | 
			
		||||
- Pointers and references have modifiers next to variable name, not the type:
 | 
			
		||||
 | 
			
		||||
  - **Yes**: ``void *p``, **No**: ``void* p``
 | 
			
		||||
  - **Yes**: ``Color &c``, **No**: ``Color& c``
 | 
			
		||||
 | 
			
		||||
- Template classes / functions: ``template <typename T> method()``
 | 
			
		||||
 | 
			
		||||
  - Space between template and ``<``, on same line where reasonable
 | 
			
		||||
 | 
			
		||||
- Opening curly braces for definitions / loops / ifs are on the same line as the statement
 | 
			
		||||
 | 
			
		||||
  - **Yes**:
 | 
			
		||||
 | 
			
		||||
    .. code-block:: cpp
 | 
			
		||||
 | 
			
		||||
       for (auto &&c : myVec) {
 | 
			
		||||
           // ... computation ...
 | 
			
		||||
       }
 | 
			
		||||
  - **No**:
 | 
			
		||||
 | 
			
		||||
    .. code-block:: cpp
 | 
			
		||||
 | 
			
		||||
       for(auto &&c : myVec)
 | 
			
		||||
       {
 | 
			
		||||
           // ... computation ...
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
Code Documentation Requirements
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
When adding new classes, methods, etc please provide meaningful and well formatted
 | 
			
		||||
documentation of the new functionality.  We use Doxygen comments to document the code,
 | 
			
		||||
using the "JavaDoc" style.  For consistency, please do not use the QT or other formats.
 | 
			
		||||
 | 
			
		||||
If you are familiar with how to use Doxygen-style comments:
 | 
			
		||||
 | 
			
		||||
- You should indent by four spaces for things like ``param``, etc.
 | 
			
		||||
- ``\brief``: a brief description.
 | 
			
		||||
- ``\tparam``: a template parameter.
 | 
			
		||||
- ``\param``: a parameter.
 | 
			
		||||
- ``\return``: what the return value represents (where applicable).
 | 
			
		||||
 | 
			
		||||
For a quick crash-course on documenting using Doxygen:
 | 
			
		||||
 | 
			
		||||
1. If you are adding a new file, please include the disclaimer at the top **immediately**
 | 
			
		||||
   followed by ``/** \file */``.  So if you are creating the file ``nanogui/file.h``
 | 
			
		||||
 | 
			
		||||
   .. code-block:: cpp
 | 
			
		||||
 | 
			
		||||
      /*
 | 
			
		||||
       nanogui/file.h -- A brief description of what the file contains.
 | 
			
		||||
 | 
			
		||||
       NanoGUI was developed by Wenzel Jakob <wenzel.jakob@epfl.ch>.
 | 
			
		||||
       The widget drawing code is based on the NanoVG demo application
 | 
			
		||||
       by Mikko Mononen.
 | 
			
		||||
 | 
			
		||||
       All rights reserved. Use of this source code is governed by a
 | 
			
		||||
       BSD-style license that can be found in the LICENSE.txt file.
 | 
			
		||||
      */
 | 
			
		||||
      /** \file */
 | 
			
		||||
 | 
			
		||||
   changing the first line to the right name / description of your file.
 | 
			
		||||
 | 
			
		||||
2. Documenting a newly added Struct or Class requires special attention.  If you are
 | 
			
		||||
   adding a class ``Thing`` in file ``nanogui/thing.h``, the class level documentation
 | 
			
		||||
   needs to explicitly declare the location for Doxygen to parse everything correctly.
 | 
			
		||||
 | 
			
		||||
   .. code-block:: cpp
 | 
			
		||||
 | 
			
		||||
      /**
 | 
			
		||||
       * \class Thing thing.h nanogui/thing.h
 | 
			
		||||
       *
 | 
			
		||||
       * This is the actual documentation for the thing.
 | 
			
		||||
       */
 | 
			
		||||
      class Thing { ... };
 | 
			
		||||
 | 
			
		||||
   This simply tells Doxygen how to format the various ``include`` directives.  If you
 | 
			
		||||
   are writing a Struct, replace ``\class`` with ``\struct``.
 | 
			
		||||
 | 
			
		||||
3. Please fully document all parameters, template parameters, and return types where
 | 
			
		||||
   applicable.  In some cases it is sufficient to include just a brief one-line
 | 
			
		||||
   documentation string, e.g. the for the :func:`nanogui::Screen::caption` method, it
 | 
			
		||||
   is simple enough that the following is sufficient (note the **three** ``///``):
 | 
			
		||||
 | 
			
		||||
   .. code-block:: cpp
 | 
			
		||||
 | 
			
		||||
      /// Get the window title bar caption
 | 
			
		||||
      const std::string &caption() const { return mCaption; }
 | 
			
		||||
 | 
			
		||||
   However, more complicated methods should be thoroughly documented.  As an example,
 | 
			
		||||
   this method demonstrates template parameters, parameters, and return value documentation:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: cpp
 | 
			
		||||
 | 
			
		||||
      /**
 | 
			
		||||
       * \brief A useless function for getting sizes.
 | 
			
		||||
       *
 | 
			
		||||
       * This method has specific things that must be pointed out, but they
 | 
			
		||||
       * were too long to include in the 'brief' documentation.
 | 
			
		||||
       *
 | 
			
		||||
       * \tparam T
 | 
			
		||||
       *     The type we are evaluating the size of.
 | 
			
		||||
       *
 | 
			
		||||
       * \param returnFake
 | 
			
		||||
       *     If set to true, a random positive number will be returned. This
 | 
			
		||||
       *     comment is a bit longer and can span multiple lines, making sure
 | 
			
		||||
       *     to indent each new line.
 | 
			
		||||
       *
 | 
			
		||||
       *     Warning: this had an empty line before it and will NOT appear in
 | 
			
		||||
       *     the documentation of this parameter, but instead it will appear
 | 
			
		||||
       *     in the documentation of the method!
 | 
			
		||||
       *
 | 
			
		||||
       * \return
 | 
			
		||||
       *     The result of ``sizeof(T)``.
 | 
			
		||||
       */
 | 
			
		||||
      template <typename T>
 | 
			
		||||
      size_t exampleTemplateFunction(bool returnFake = false) { ... }
 | 
			
		||||
 | 
			
		||||
Styling the Code
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Since we are using both Doxygen and Sphinx, we have access to a wealth of interesting
 | 
			
		||||
documentation styling.
 | 
			
		||||
 | 
			
		||||
:From Doxygen:
 | 
			
		||||
    You can use things like ``\throws``, ``\remark``, and even ``\ref`` to generate html
 | 
			
		||||
    links to other items.
 | 
			
		||||
 | 
			
		||||
:From Sphinx:
 | 
			
		||||
    On the Sphinx side, you now have access to full reStructuredText syntax.  This
 | 
			
		||||
    includes:
 | 
			
		||||
 | 
			
		||||
    - ``**bold**`` to make **bold** text
 | 
			
		||||
    - ``*italics*`` for *italics*
 | 
			
		||||
    - ````teletype```` for ``teletype`` text.
 | 
			
		||||
 | 
			
		||||
    You can additionally include more complex reStructuredText such as grid tables, as
 | 
			
		||||
    well as Sphinx directives.  You will need to use the ``\rst`` and ``\endrst``
 | 
			
		||||
    commands for these:
 | 
			
		||||
 | 
			
		||||
    .. code-block:: cpp
 | 
			
		||||
 | 
			
		||||
       /**
 | 
			
		||||
        * \brief Some method you are documenting.
 | 
			
		||||
        *
 | 
			
		||||
        * \rst
 | 
			
		||||
        * I am now in a verbatim reStructuredText environment, and can create a grid table.
 | 
			
		||||
        *
 | 
			
		||||
        * I could create a python code listing using
 | 
			
		||||
        *
 | 
			
		||||
        * .. code-block:: py
 | 
			
		||||
        *
 | 
			
		||||
        *    print("Some python code.")
 | 
			
		||||
        *
 | 
			
		||||
        * You can also use the note or warning directives to highlight important concepts:
 | 
			
		||||
        *
 | 
			
		||||
        * .. note::
 | 
			
		||||
        *    You may or may not segfault.
 | 
			
		||||
        *
 | 
			
		||||
        * .. warning::
 | 
			
		||||
        *    I guarantee you will segfault.
 | 
			
		||||
        * \endrst
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
    .. warning::
 | 
			
		||||
       In normal reStructuredText, if you simply indent a block of code by four spaces
 | 
			
		||||
       it will render as a code listing.  While this will build as expected for the
 | 
			
		||||
       C++ documentation on RTD, it will **fail** to build ``py_doc.h`` correctly.
 | 
			
		||||
 | 
			
		||||
       For code listings, **always** begin an ``\rst`` section and use ``.. code-block``
 | 
			
		||||
       as shown above.
 | 
			
		||||
 | 
			
		||||
TODO
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Documentation Completion
 | 
			
		||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 | 
			
		||||
 | 
			
		||||
Already familiar with NanoGUI or a subset of its classes?  The documentation for the
 | 
			
		||||
following files is incomplete, waiting for your PR.  Document a whole class, or even
 | 
			
		||||
just a method of a given class.
 | 
			
		||||
 | 
			
		||||
If you make progress on / complete an item with your PR, please update / remove it from
 | 
			
		||||
the table on this page (``docs/contributing.rst``).
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
   The NanoGUI documentation hosted online does not include ``private`` methods or
 | 
			
		||||
   member variables at this time.  However, documentation for these is welcome!
 | 
			
		||||
 | 
			
		||||
.. warning::
 | 
			
		||||
   In some of these files, you will see preprocessor blocks like
 | 
			
		||||
 | 
			
		||||
   .. code-block:: cpp
 | 
			
		||||
 | 
			
		||||
      #ifndef DOXYGEN_SHOULD_SKIP_THIS
 | 
			
		||||
      ... code that the breaks the documentation ...
 | 
			
		||||
      #endif // DOXYGEN_SHOULD_SKIP_THIS
 | 
			
		||||
 | 
			
		||||
   Please take care not to remove these!
 | 
			
		||||
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| Filename        | Action Item                                                |
 | 
			
		||||
+=================+============================================================+
 | 
			
		||||
| button.h        | - Most member methods.                                     |
 | 
			
		||||
|                 | - All member variables.                                    |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| checkbox.h      | - All member methods and variables.                        |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| colorpicker.h   | - Constructor and callback.                                |
 | 
			
		||||
|                 | - All member variables.                                    |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| colorwheel.h    | - Most methods and member variables.                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| combobox.h      | - Most member methods and variables.                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| formhelper.h    | - More detailed documentation explaining parameters        |
 | 
			
		||||
|                 |   for ``FormHelper`` methods.                              |
 | 
			
		||||
|                 | - Most member variables.                                   |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| graph.h         | - All member methods and variables.                        |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| imagepanel.h    | - All member methods and variables.                        |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| imageview.h     | - Most member methods.                                     |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| label.h         | - Some member methods and variables.                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| layout.h        | - Nearly everything.                                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| popup.h         | - Some member methods and variables.                       |
 | 
			
		||||
|                 | - Explicit parameter documentation would be very useful.   |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| popupbutton.h   | - Almost everything.                                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| progressbar.h   | - Almost everything.                                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| screen.h        | - Documentation for the manual GLFW API.                   |
 | 
			
		||||
|                 | - All member variables.                                    |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| slider.h        | - Almost everything.                                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| stackedwidget.h | - Almost everything.                                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| tabheader.h     | - Some member methods.                                     |
 | 
			
		||||
|                 | - Some reformatting of existing documentation to           |
 | 
			
		||||
|                 |   use ``\param`` or ``\return`` etc.                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| tabwidget.h     | - Some member methods.                                     |
 | 
			
		||||
|                 | - Some reformatting of existing documentation to           |
 | 
			
		||||
|                 |   use ``\param`` or ``\return`` etc.                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| textbox.h       | - Almost everything.                                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| theme.h         | - Explicit documentation for what these all represent.     |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| toolbutton.h    | - Documentation of the constructor explaining the range of |
 | 
			
		||||
|                 |   values that can be used for ``icon``.  Or at least where |
 | 
			
		||||
|                 |   to look for that?                                        |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| vscrollpanel.h  | - Almost everything.                                       |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| widget.h        | - Member variables.                                        |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
| window.h        | - Some member methods.                                     |
 | 
			
		||||
|                 | - All member variables.                                    |
 | 
			
		||||
+-----------------+------------------------------------------------------------+
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Advanced Contribution Opportunity
 | 
			
		||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 | 
			
		||||
 | 
			
		||||
Currently, all partial and full template specializations are skipped.  Specifically,
 | 
			
		||||
nearly everything in ``include/nanogui/serializer/*``.  According to the
 | 
			
		||||
`Breathe documentation <https://breathe.readthedocs.io/en/latest/doxygen.html#template>`_
 | 
			
		||||
this should be possible.  The likely cause of this issue is that the version of Breathe
 | 
			
		||||
packaged for use with ``pip`` is not up to date.  Your task would be to find a way
 | 
			
		||||
to use ``docs/requirements.txt`` to install the **current source** from the master
 | 
			
		||||
branch of Breathe instead of using PyPi.
 | 
			
		||||
 | 
			
		||||
You can test locally by making sure you do not have Breathe installed with ``pip``, and
 | 
			
		||||
compiling it yourself (make sure you add it to your ``PATH`` so you can use it in
 | 
			
		||||
Python).
 | 
			
		||||
 | 
			
		||||
Then try moving the ``#ifndef DOXYGEN_SHOULD_SKIP_THIS`` to expose a single template
 | 
			
		||||
specialization in a file of your choice, and try and get the documentation to build.
 | 
			
		||||
If you succeed with this, the next step will be to find a way to get Read the Docs to
 | 
			
		||||
build the current source of Breathe rather than using PyPi.
 | 
			
		||||
 | 
			
		||||
In theory, all of these are possible.
 | 
			
		||||
							
								
								
									
										88
									
								
								cs440-acg/ext/nanogui/docs/examples.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								cs440-acg/ext/nanogui/docs/examples.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
.. _nanogui_example_programs:
 | 
			
		||||
 | 
			
		||||
Examples
 | 
			
		||||
========================================================================================
 | 
			
		||||
 | 
			
		||||
There are example programs available for you to play with / understand how the different
 | 
			
		||||
pieces fit together.  The C++ examples are in ``nanogui/src/``, and the equivalent
 | 
			
		||||
Python examples are in ``nanogui/python``.
 | 
			
		||||
 | 
			
		||||
.. _nanogui_example_1:
 | 
			
		||||
 | 
			
		||||
Example 1
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
.. image:: ../resources/screenshot.png
 | 
			
		||||
   :alt: Screenshot of Example 1.
 | 
			
		||||
   :align: center
 | 
			
		||||
 | 
			
		||||
The first example program is rather long, but not altogether complicated.  It
 | 
			
		||||
is effectively an enumeration of how one would go about adding various different kinds
 | 
			
		||||
of Widgets to the window being displayed.
 | 
			
		||||
 | 
			
		||||
- `Example 1 in C++ <https://github.com/wjakob/nanogui/blob/master/src/example1.cpp>`_
 | 
			
		||||
- `Example 1 in Python <https://github.com/wjakob/nanogui/blob/master/python/example1.py>`_
 | 
			
		||||
 | 
			
		||||
.. _nanogui_example_2:
 | 
			
		||||
 | 
			
		||||
Example 2
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
.. image:: ../resources/screenshot2.png
 | 
			
		||||
   :alt: Screenshot of Example 2.
 | 
			
		||||
   :align: center
 | 
			
		||||
 | 
			
		||||
The second program demonstrates how simple label/editor widget-type layouts can
 | 
			
		||||
be written in a very concise manner.
 | 
			
		||||
 | 
			
		||||
- `Example 2 in C++ <https://github.com/wjakob/nanogui/blob/master/src/example2.cpp>`_
 | 
			
		||||
- `Example 2 in Python <https://github.com/wjakob/nanogui/blob/master/python/example2.py>`_
 | 
			
		||||
 | 
			
		||||
.. _nanogui_example_3:
 | 
			
		||||
 | 
			
		||||
Example 3
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
The third example program demonstrates how to manage OpenGL / GLFW on your own for the
 | 
			
		||||
C++ side, and how to detach the NanoGUI ``mainloop()`` on the Python side.
 | 
			
		||||
 | 
			
		||||
- `Example 3 in C++ <https://github.com/wjakob/nanogui/blob/master/src/example3.cpp>`_
 | 
			
		||||
- `Example 3 in Python <https://github.com/wjakob/nanogui/blob/master/python/example3.py>`_
 | 
			
		||||
 | 
			
		||||
.. _nanogui_example_4:
 | 
			
		||||
 | 
			
		||||
Example 4
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
The fourth example program demonstrates the GLCanvas widget, which renders an
 | 
			
		||||
arbitrary sequence of OpenGL commands into a NanoGUI widget.
 | 
			
		||||
 | 
			
		||||
- `Example 4 in C++ <https://github.com/wjakob/nanogui/blob/master/src/example4.cpp>`_
 | 
			
		||||
- `Example 4 in Python <https://github.com/wjakob/nanogui/blob/master/python/example4.py>`_
 | 
			
		||||
 | 
			
		||||
.. _nanogui_example_icons:
 | 
			
		||||
 | 
			
		||||
Example Icons
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
NanoGUI includes various icons made available from :ref:`file_nanogui_entypo.h`,
 | 
			
		||||
courtesy of `Daniel Bruce's Entypo <http://www.entypo.com/>`_ glyphs.  The file level
 | 
			
		||||
documentation is useful as a reference for selecting an icon, but the web rendering may
 | 
			
		||||
be misleading --- NanoGUI uses a dark background for widgets by default.
 | 
			
		||||
 | 
			
		||||
Run the ``exampleIcon`` executable to see what the icons look like in NanoGUI.  The
 | 
			
		||||
setup of this file may also be helpful in understanding how to control the
 | 
			
		||||
:class:`nanogui::VScrollPanel`.
 | 
			
		||||
 | 
			
		||||
- `Example Icons in C++ <https://github.com/wjakob/nanogui/blob/master/src/example_icons.cpp>`_
 | 
			
		||||
- `Example Icons in Python <https://github.com/wjakob/nanogui/blob/master/python/example_icons.py>`_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.. _nanogui_example_repository:
 | 
			
		||||
 | 
			
		||||
Example Repository
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Darren Mothersele has put together a compact and informative example repository that
 | 
			
		||||
demonstrates how easy it is to include NanoGUI into your project.  You download / browse
 | 
			
		||||
the source on `GitHub <https://github.com/darrenmothersele/nanogui-test.git>`_.
 | 
			
		||||
							
								
								
									
										63
									
								
								cs440-acg/ext/nanogui/docs/index.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								cs440-acg/ext/nanogui/docs/index.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
NanoGUI
 | 
			
		||||
========================================================================================
 | 
			
		||||
 | 
			
		||||
.. include:: ../README.rst
 | 
			
		||||
   :start-after: begin_brief_description
 | 
			
		||||
   :end-before:  end_brief_description
 | 
			
		||||
 | 
			
		||||
Example Screenshot
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
.. image:: ../resources/screenshot.png
 | 
			
		||||
   :alt: Screenshot of Example 1.
 | 
			
		||||
   :align: center
 | 
			
		||||
 | 
			
		||||
Description
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
.. include:: ../README.rst
 | 
			
		||||
   :start-after: begin_long_description
 | 
			
		||||
   :end-before:  end_long_description
 | 
			
		||||
 | 
			
		||||
"Simple mode"
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Christian Schüller contributed a convenience class that makes it possible to create
 | 
			
		||||
AntTweakBar-style variable manipulators using just a few lines of code. Refer to
 | 
			
		||||
:ref:`nanogui_example_2` for how to create the image below.
 | 
			
		||||
 | 
			
		||||
.. image:: ../resources/screenshot2.png
 | 
			
		||||
   :alt: Screenshot of Example 2.
 | 
			
		||||
   :align: center
 | 
			
		||||
 | 
			
		||||
License
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
.. include:: ../README.rst
 | 
			
		||||
   :start-after: begin_license
 | 
			
		||||
   :end-before:  end_license
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   The CC BY-SA 4.0 license should not be an issue for most projects.  However, you can
 | 
			
		||||
   adopt a different font for icons if you need.  See :ref:`nanogui_including_custom_fonts`.
 | 
			
		||||
 | 
			
		||||
Contents
 | 
			
		||||
========================================================================================
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 2
 | 
			
		||||
 | 
			
		||||
   usage
 | 
			
		||||
   compilation
 | 
			
		||||
   examples
 | 
			
		||||
   api/library_root
 | 
			
		||||
   contributing
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Indices and tables
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
* :ref:`genindex`
 | 
			
		||||
* :ref:`modindex`
 | 
			
		||||
* :ref:`search`
 | 
			
		||||
							
								
								
									
										36
									
								
								cs440-acg/ext/nanogui/docs/make.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								cs440-acg/ext/nanogui/docs/make.bat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
@ECHO OFF
 | 
			
		||||
 | 
			
		||||
pushd %~dp0
 | 
			
		||||
 | 
			
		||||
REM Command file for Sphinx documentation
 | 
			
		||||
 | 
			
		||||
if "%SPHINXBUILD%" == "" (
 | 
			
		||||
	set SPHINXBUILD=python -msphinx
 | 
			
		||||
)
 | 
			
		||||
set SOURCEDIR=.
 | 
			
		||||
set BUILDDIR=_build
 | 
			
		||||
set SPHINXPROJ=NanoGUI
 | 
			
		||||
 | 
			
		||||
if "%1" == "" goto help
 | 
			
		||||
 | 
			
		||||
%SPHINXBUILD% >NUL 2>NUL
 | 
			
		||||
if errorlevel 9009 (
 | 
			
		||||
	echo.
 | 
			
		||||
	echo.The Sphinx module was not found. Make sure you have Sphinx installed,
 | 
			
		||||
	echo.then set the SPHINXBUILD environment variable to point to the full
 | 
			
		||||
	echo.path of the 'sphinx-build' executable. Alternatively you may add the
 | 
			
		||||
	echo.Sphinx directory to PATH.
 | 
			
		||||
	echo.
 | 
			
		||||
	echo.If you don't have Sphinx installed, grab it from
 | 
			
		||||
	echo.http://sphinx-doc.org/
 | 
			
		||||
	exit /b 1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
 | 
			
		||||
goto end
 | 
			
		||||
 | 
			
		||||
:help
 | 
			
		||||
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
 | 
			
		||||
 | 
			
		||||
:end
 | 
			
		||||
popd
 | 
			
		||||
							
								
								
									
										4
									
								
								cs440-acg/ext/nanogui/docs/requirements.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								cs440-acg/ext/nanogui/docs/requirements.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
# Breathe and Sphinx 2.x are incompatible at this time
 | 
			
		||||
Sphinx==1.8.5
 | 
			
		||||
exhale
 | 
			
		||||
sphinx_rtd_theme
 | 
			
		||||
							
								
								
									
										49
									
								
								cs440-acg/ext/nanogui/docs/usage.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								cs440-acg/ext/nanogui/docs/usage.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
Usage
 | 
			
		||||
========================================================================================
 | 
			
		||||
 | 
			
		||||
C++
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
There are effectively two ways that you can use NanoGUI in C++: have NanoGUI initialize
 | 
			
		||||
and manage the OpenGL context (and GLFW), or you do it manually.
 | 
			
		||||
 | 
			
		||||
1. If you are letting NanoGUI take over, you **must** call :ref:`function_nanogui__init`
 | 
			
		||||
   before trying to do anything else.  If you are managing OpenGL / GLFW yourself, make
 | 
			
		||||
   sure you **avoid** calling this method.
 | 
			
		||||
 | 
			
		||||
2. Create an instance of :ref:`class_nanogui__Screen` (or a derivative class you have
 | 
			
		||||
   written).
 | 
			
		||||
 | 
			
		||||
   - NanoGUI managed OpenGL: call the explicit constructor.
 | 
			
		||||
   - Self managed OpenGL: call the empty constructor.
 | 
			
		||||
       - You must call the :func:`nanogui::Screen::initialize` method.
 | 
			
		||||
 | 
			
		||||
3. Add any Widgets, Buttons, etc. you want to the screen instance, and call the
 | 
			
		||||
   :func:`nanogui::Screen::setVisible` and :func:`nanogui::Screen::performLayout`
 | 
			
		||||
   methods of your instance.
 | 
			
		||||
 | 
			
		||||
4. Now that everything is ready, call :ref:`function_nanogui__mainloop`.
 | 
			
		||||
 | 
			
		||||
5. When all windows are closed, this function will exit, and you should follow it up
 | 
			
		||||
   with a call to :ref:`function_nanogui__shutdown`.
 | 
			
		||||
 | 
			
		||||
:NanoGUI Managed OpenGL / GLFW:
 | 
			
		||||
    Refer to :ref:`nanogui_example_2` for a concise example of what that all looks like.
 | 
			
		||||
 | 
			
		||||
:Self Managed OpenGL / GLFW:
 | 
			
		||||
    Refer to :ref:`nanogui_example_3` for an as concise as possible example of what you
 | 
			
		||||
    will need to do to get the :ref:`class_nanogui__Screen` to work.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Python
 | 
			
		||||
----------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
The Python interface is very similar to the C++ API.  When you build NanoGUI with CMake,
 | 
			
		||||
a ``python`` folder is created with the library you ``import nanogui`` from.  Though
 | 
			
		||||
there are implementation details that differ greatly, the documentation and build
 | 
			
		||||
process for the Python side is roughly the same.  Refer to the
 | 
			
		||||
:ref:`nanogui_example_programs` and compare the source code for the two.
 | 
			
		||||
 | 
			
		||||
:ref:`nanogui_example_3` highlights the more notable differences between the APIs.
 | 
			
		||||
Specifically, that managing GLFW from Python has no meaning, as well as the main loop
 | 
			
		||||
for Python can easily be detached.
 | 
			
		||||
		Reference in New Issue
	
	Block a user