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