Added the Interception release files.

master
Pacman Ghost 7 years ago
commit f7704f53ad
  1. BIN
      _ARCHIVE_/Interception-src-1.0.0.zip
  2. BIN
      _ARCHIVE_/Interception.zip
  3. 4
      _ARCHIVE_/READ-ME.TXT
  4. 538
      _ARCHIVE_/index.html
  5. 19
      _ARCHIVE_/index_files/MathJax.js
  6. 9
      _ARCHIVE_/index_files/bootstrap-responsive.css
  7. 9
      _ARCHIVE_/index_files/bootstrap.css
  8. 6
      _ARCHIVE_/index_files/bootstrap.js
  9. 430
      _ARCHIVE_/index_files/darkstrap.css
  10. 119
      _ARCHIVE_/index_files/gruvbox.css
  11. 4
      _ARCHIVE_/index_files/jquery.js
  12. 16
      _ARCHIVE_/index_files/main.css
  13. 59
      _ARCHIVE_/index_files/pygments.css
  14. 405
      _ARCHIVE_/index_files/style.css
  15. 167
      _ARCHIVE_/index_files/zocial.css

Binary file not shown.

@ -0,0 +1,4 @@
http://www.oblita.com/interception.html
https://github.com/oblitum/Interception
NOTE: Testing in a VM might not work properly since VMware is doing funky stuff with the mouse/keyboard as well :-/

@ -0,0 +1,538 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>
Interception -
Francisco Lopes
</title>
<meta name="description" content="">
<meta name="author" content="Francisco Lopes">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- HTML5 shim, for IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href="http://www.oblita.com/assets/themes/hooligan/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="http://www.oblita.com/assets/themes/hooligan/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="http://www.oblita.com/assets/themes/hooligan/css-social-buttons/css/zocial.stripped.css">
<link href="http://www.oblita.com/assets/themes/hooligan/css/pygments.css" rel="stylesheet" type="text/css" media="all">
<link href="http://www.oblita.com/assets/themes/hooligan/css/darkstrap.css" rel="stylesheet" type="text/css" media="all">
<link href="http://www.oblita.com/assets/themes/hooligan/css/style.css?body=1" rel="stylesheet" type="text/css" media="all">
<link href="http://www.oblita.com/assets/css/main.css" rel="stylesheet">
<link href="http://www.oblita.com/assets/css/gruvbox.css" rel="stylesheet">
<!-- fav and touch icons -->
<!-- Update these with your own images
<link rel="shortcut icon" href="images/favicon.ico">
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-114x114.png">
-->
<!-- MathJax -->
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
MathJax.Hub.Config({messageStyle: "none"});
</script>
</head>
<body>
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<!-- .btn-navbar is used as the toggle for collapsed navbar content -->
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="http://www.oblita.com">Francisco Lopes</a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="http://www.oblita.com/archive.html">Archive</a></li>
<li><a href="http://www.oblita.com/categories.html">Categories</a></li>
<li><a href="http://www.oblita.com/pages.html">Pages</a></li>
<li><a href="http://www.oblita.com/tags.html">Tags</a></li>
</ul>
<ul class="nav pull-right social visible-desktop">
<li class="divider-vertical"></li>
<li>
<a href="https://github.com/oblitum" class="zocial github icon" target="_blank">
<span class="hidden-desktop">Github</span>
</a>
</li>
<li>
<a href="https://twitter.com/pepper_chico" class="zocial twitter icon" target="_blank">
<span class="hidden-desktop">Twitter</span>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="content">
<div class="page-header-wrapper">
<div class="page-header">
<h1>Interception </h1>
</div>
</div>
<div class="row">
<div class="span12">
<h3 id="whats-interception">What’s Interception?</h3>
<p>A programming interface for intercepting input device communication.</p>
<h3 id="what-can-i-do-with-that">What can I do with that?</h3>
<p>Currently, with Interception you are able to intercept and transform input data from keyboard and mouse.
Support is still Windows only (from Windows XP to Windows 10).</p>
<h3 id="i-can-use-windows-hooks-for-that-so-whats-up">I can use Windows hooks for that, so, what’s up?</h3>
<p>Yes, you can, but…</p>
<ul>
<li>You’re not able to identify from which device some event is coming when you connect multiple keyboard/mouse.
With generic user-mode hooks you are able to identify that a keyboard/mouse event has arrived, but not from which keyboard/mouse it’s coming. </li>
<li>With Windows Raw Input you can identify but cannot <em>intercept</em> (and then mutate) input. </li>
<li>You can’t intercept CTRL-ALT-DELETE with user-mode hooks, for example, and do other stuff like peering while at the login screen.</li>
<li>You can’t hook old DirectInput games.</li>
</ul>
<h3 id="ok-but-how-do-you-achieve-this">Ok, but, how do you achieve this?</h3>
<p>The Interception API provides a simple interface of communication with kernel-mode components, and those components are powerful.
They intercept data in a early stage, before it reaches the core of OS input processing.</p>
<h3 id="i-have-a-x64-windows-box-ive-heard-that-it-cannot-load-kernel-mode-components-indiscriminately">I have a x64 Windows box, I’ve heard that it cannot load kernel-mode components indiscriminately.</h3>
<p>Yes, indeed. The Interception core is built upon properly signed drivers, so that’s not a problem!</p>
<h3 id="ok-then-lets-get-to-work">Ok then, let’s get to work.</h3>
<p>First, you must download and extract the <a href="https://github.com/oblitum/Interception/releases/latest">Interception assets</a>
and then run <code>install-interception</code>. This tool must be run from an administrator command line (you must run cmd as administrator).
Just run it without arguments to receive instructions.</p>
<p>Second, you must link against the Interception library, which is provided in the assets, or you may build it from <a href="https://github.com/oblitum/Interception">sources</a>.</p>
<p>Third, you must include interception.h in your applications.</p>
<p>The following sample shows how to intercept the x key and turn it into y:</p>
<pre>
<span class="Include">#include </span><span class="String">&lt;interception.h&gt;</span>
<span class="Include">#include </span><span class="String">&quot;utils.h&quot;</span>
<span class="Structure">enum</span> ScanCode
<span class="lv16c">{</span>
SCANCODE_X <span class="op_lv16">=</span> <span class="Number">0x2D</span><span class="op_lv16">,</span>
SCANCODE_Y <span class="op_lv16">=</span> <span class="Number">0x15</span><span class="op_lv16">,</span>
SCANCODE_ESC <span class="op_lv16">=</span> <span class="Number">0x01</span>
<span class="lv16c">}</span><span class="op_lv0">;</span>
<span class="Type">int</span> main<span class="lv16c">()</span>
<span class="lv16c">{</span>
InterceptionContext context<span class="op_lv16">;</span>
InterceptionDevice device<span class="op_lv16">;</span>
InterceptionKeyStroke stroke<span class="op_lv16">;</span>
raise_process_priority<span class="lv15c">()</span><span class="op_lv16">;</span>
context <span class="op_lv16">=</span> interception_create_context<span class="lv15c">()</span><span class="op_lv16">;</span>
interception_set_filter<span class="lv15c">(</span>context<span class="op_lv15">,</span> interception_is_keyboard<span class="op_lv15">,</span> INTERCEPTION_FILTER_KEY_DOWN <span class="op_lv15">|</span> INTERCEPTION_FILTER_KEY_UP<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Repeat">while</span><span class="lv15c">(</span>interception_receive<span class="lv14c">(</span>context<span class="op_lv14">,</span> device <span class="op_lv14">=</span> interception_wait<span class="lv13c">(</span>context<span class="lv13c">)</span><span class="op_lv14">,</span> <span class="lv13c">(</span>InterceptionStroke <span class="op_lv13">*</span><span class="lv13c">)</span><span class="op_lv14">&amp;</span>stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span> <span class="op_lv15">&gt;</span> <span class="Number">0</span><span class="lv15c">)</span>
<span class="lv15c">{</span>
<span class="Conditional">if</span><span class="lv14c">(</span>stroke<span class="op_lv14">.</span>code <span class="op_lv14">==</span> SCANCODE_X<span class="lv14c">)</span> stroke<span class="op_lv15">.</span>code <span class="op_lv15">=</span> SCANCODE_Y<span class="op_lv15">;</span>
interception_send<span class="lv14c">(</span>context<span class="op_lv14">,</span> device<span class="op_lv14">,</span> <span class="lv13c">(</span>InterceptionStroke <span class="op_lv13">*</span><span class="lv13c">)</span><span class="op_lv14">&amp;</span>stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span><span class="op_lv15">;</span>
<span class="Conditional">if</span><span class="lv14c">(</span>stroke<span class="op_lv14">.</span>code <span class="op_lv14">==</span> SCANCODE_ESC<span class="lv14c">)</span> <span class="Statement">break</span><span class="op_lv15">;</span>
<span class="lv15c">}</span>
interception_destroy_context<span class="lv15c">(</span>context<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Statement">return</span> <span class="Number">0</span><span class="op_lv16">;</span>
<span class="lv16c">}</span>
</pre>
<p>There are some concepts you need to know to use Interception well:</p>
<ul>
<li>Contexts<br />
You need to create a context of communication with the core components, most functions will require it.</li>
<li>Filters<br />
Filters are a way to indicate what kind of events you want to intercept, for example, in the last sample
we were interested in simple key up’s and key down’s, some special keys would not trigger events through this
filter, like the DELETE key, because it needs the E0 flag too. If you do not set a filter for at last one
device, you won’t be notified of any events.</li>
<li>Device selection predicate<br />
The interception_set_filter function has three parameters, the context of communication, a function pointer
and a desired filter. This second parameter, the function pointer, is a device selection predicate, a function
that receives a device id (like INTERCEPTION_KEYBOARD(0), INTERCEPTION_KEYBOARD(1), etc) as parameter and returns
true if the device id passed is one of a device that must be filtered through the chosen filter, or false for the
devices that are not to be filtered through this filter.
So the interception_set_filter works by scanning all possible devices, and using the provided predicate as the
criteria to know for which devices the provided filter should be applied.</li>
<li>Precedence<br />
There’s an old explanation <a href="https://sites.google.com/a/oblita.com/yorick/hooking-part1">here</a>.</li>
</ul>
<p>The following sample shows how to invert the vertical mouse axis:</p>
<pre>
<span class="Include">#include </span><span class="String">&lt;interception.h&gt;</span>
<span class="Include">#include </span><span class="String">&quot;utils.h&quot;</span>
<span class="Structure">enum</span> ScanCode
<span class="lv16c">{</span>
SCANCODE_ESC <span class="op_lv16">=</span> <span class="Number">0x01</span>
<span class="lv16c">}</span><span class="op_lv0">;</span>
<span class="Type">int</span> main<span class="lv16c">()</span>
<span class="lv16c">{</span>
InterceptionContext context<span class="op_lv16">;</span>
InterceptionDevice device<span class="op_lv16">;</span>
InterceptionStroke stroke<span class="op_lv16">;</span>
raise_process_priority<span class="lv15c">()</span><span class="op_lv16">;</span>
context <span class="op_lv16">=</span> interception_create_context<span class="lv15c">()</span><span class="op_lv16">;</span>
interception_set_filter<span class="lv15c">(</span>context<span class="op_lv15">,</span> interception_is_keyboard<span class="op_lv15">,</span> INTERCEPTION_FILTER_KEY_DOWN <span class="op_lv15">|</span> INTERCEPTION_FILTER_KEY_UP<span class="lv15c">)</span><span class="op_lv16">;</span>
interception_set_filter<span class="lv15c">(</span>context<span class="op_lv15">,</span> interception_is_mouse<span class="op_lv15">,</span> INTERCEPTION_FILTER_MOUSE_MOVE<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Repeat">while</span><span class="lv15c">(</span>interception_receive<span class="lv14c">(</span>context<span class="op_lv14">,</span> device <span class="op_lv14">=</span> interception_wait<span class="lv13c">(</span>context<span class="lv13c">)</span><span class="op_lv14">,</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span> <span class="op_lv15">&gt;</span> <span class="Number">0</span><span class="lv15c">)</span>
<span class="lv15c">{</span>
<span class="Conditional">if</span><span class="lv14c">(</span>interception_is_mouse<span class="lv13c">(</span>device<span class="lv13c">)</span><span class="lv14c">)</span>
<span class="lv14c">{</span>
InterceptionMouseStroke <span class="op_lv14">&amp;</span>mstroke <span class="op_lv14">=</span> <span class="op_lv14">*</span><span class="lv13c">(</span>InterceptionMouseStroke <span class="op_lv13">*</span><span class="lv13c">)</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">;</span>
<span class="Conditional">if</span><span class="lv13c">(</span><span class="op_lv13">!</span><span class="lv12c">(</span>mstroke<span class="op_lv12">.</span>flags <span class="op_lv12">&amp;</span> INTERCEPTION_MOUSE_MOVE_ABSOLUTE<span class="lv12c">)</span><span class="lv13c">)</span> mstroke<span class="op_lv14">.</span>y <span class="op_lv14">*=</span> <span class="op_lv14">-</span><span class="Number">1</span><span class="op_lv14">;</span>
interception_send<span class="lv13c">(</span>context<span class="op_lv13">,</span> device<span class="op_lv13">,</span> <span class="op_lv13">&amp;</span>stroke<span class="op_lv13">,</span> <span class="Number">1</span><span class="lv13c">)</span><span class="op_lv14">;</span>
<span class="lv14c">}</span>
<span class="Conditional">if</span><span class="lv14c">(</span>interception_is_keyboard<span class="lv13c">(</span>device<span class="lv13c">)</span><span class="lv14c">)</span>
<span class="lv14c">{</span>
InterceptionKeyStroke <span class="op_lv14">&amp;</span>kstroke <span class="op_lv14">=</span> <span class="op_lv14">*</span><span class="lv13c">(</span>InterceptionKeyStroke <span class="op_lv13">*</span><span class="lv13c">)</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">;</span>
interception_send<span class="lv13c">(</span>context<span class="op_lv13">,</span> device<span class="op_lv13">,</span> <span class="op_lv13">&amp;</span>stroke<span class="op_lv13">,</span> <span class="Number">1</span><span class="lv13c">)</span><span class="op_lv14">;</span>
<span class="Conditional">if</span><span class="lv13c">(</span>kstroke<span class="op_lv13">.</span>code <span class="op_lv13">==</span> SCANCODE_ESC<span class="lv13c">)</span> <span class="Statement">break</span><span class="op_lv14">;</span>
<span class="lv14c">}</span>
<span class="lv15c">}</span>
interception_destroy_context<span class="lv15c">(</span>context<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Statement">return</span> <span class="Number">0</span><span class="op_lv16">;</span>
<span class="lv16c">}</span>
</pre>
<p>The following sample shows how to intercept and block the CTRL-ALT-DEL sequence:</p>
<pre>
<span class="Include">#include </span><span class="String">&lt;interception.h&gt;</span>
<span class="Include">#include </span><span class="String">&quot;utils.h&quot;</span>
<span class="Include">#include </span><span class="String">&lt;iostream&gt;</span>
<span class="Include">#include </span><span class="String">&lt;deque&gt;</span>
<span class="Structure">enum</span> ScanCode
<span class="lv16c">{</span>
SCANCODE_ESC <span class="op_lv16">=</span> <span class="Number">0x01</span>
<span class="lv16c">}</span><span class="op_lv0">;</span>
InterceptionKeyStroke nothing <span class="op_lv0">=</span> <span class="lv16c">{}</span><span class="op_lv0">;</span>
InterceptionKeyStroke ctrl_down <span class="op_lv0">=</span> <span class="lv16c">{</span><span class="Number">0x1D</span><span class="op_lv16">,</span> INTERCEPTION_KEY_DOWN<span class="lv16c">}</span><span class="op_lv0">;</span>
InterceptionKeyStroke alt_down <span class="op_lv0">=</span> <span class="lv16c">{</span><span class="Number">0x38</span><span class="op_lv16">,</span> INTERCEPTION_KEY_DOWN<span class="lv16c">}</span><span class="op_lv0">;</span>
InterceptionKeyStroke del_down <span class="op_lv0">=</span> <span class="lv16c">{</span><span class="Number">0x53</span><span class="op_lv16">,</span> INTERCEPTION_KEY_DOWN <span class="op_lv16">|</span> INTERCEPTION_KEY_E0<span class="lv16c">}</span><span class="op_lv0">;</span>
<span class="Type">bool</span> <span class="Normal">operator</span> <span class="op_lv0">==</span> <span class="lv16c">(</span><span class="StorageClass">const</span> InterceptionKeyStroke <span class="op_lv16">&amp;</span>first<span class="op_lv16">,</span> <span class="StorageClass">const</span> InterceptionKeyStroke <span class="op_lv16">&amp;</span>second<span class="lv16c">)</span>
<span class="lv16c">{</span>
<span class="Statement">return</span> first<span class="op_lv16">.</span>code <span class="op_lv16">==</span> second<span class="op_lv16">.</span>code <span class="op_lv16">&amp;&amp;</span> first<span class="op_lv16">.</span>state <span class="op_lv16">==</span> second<span class="op_lv16">.</span>state<span class="op_lv16">;</span>
<span class="lv16c">}</span>
<span class="Type">bool</span> <span class="Normal">operator</span> <span class="op_lv0">!=</span> <span class="lv16c">(</span><span class="StorageClass">const</span> InterceptionKeyStroke <span class="op_lv16">&amp;</span>first<span class="op_lv16">,</span> <span class="StorageClass">const</span> InterceptionKeyStroke <span class="op_lv16">&amp;</span>second<span class="lv16c">)</span>
<span class="lv16c">{</span>
<span class="Statement">return</span> <span class="op_lv16">!</span><span class="lv15c">(</span>first <span class="op_lv15">==</span> second<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="lv16c">}</span>
<span class="Type">int</span> main<span class="lv16c">()</span>
<span class="lv16c">{</span>
<span class="Statement">using</span> <span class="Structure">namespace</span> std<span class="op_lv16">;</span>
InterceptionContext context<span class="op_lv16">;</span>
InterceptionDevice device<span class="op_lv16">;</span>
InterceptionKeyStroke new_stroke<span class="op_lv16">,</span> last_stroke<span class="op_lv16">;</span>
deque<span class="lv15c">&lt;</span>InterceptionKeyStroke<span class="lv15c">&gt;</span> stroke_sequence<span class="op_lv16">;</span>
stroke_sequence<span class="op_lv16">.</span>push_back<span class="lv15c">(</span>nothing<span class="lv15c">)</span><span class="op_lv16">;</span>
stroke_sequence<span class="op_lv16">.</span>push_back<span class="lv15c">(</span>nothing<span class="lv15c">)</span><span class="op_lv16">;</span>
stroke_sequence<span class="op_lv16">.</span>push_back<span class="lv15c">(</span>nothing<span class="lv15c">)</span><span class="op_lv16">;</span>
raise_process_priority<span class="lv15c">()</span><span class="op_lv16">;</span>
context <span class="op_lv16">=</span> interception_create_context<span class="lv15c">()</span><span class="op_lv16">;</span>
interception_set_filter<span class="lv15c">(</span>context<span class="op_lv15">,</span> interception_is_keyboard<span class="op_lv15">,</span> INTERCEPTION_FILTER_KEY_ALL<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Repeat">while</span><span class="lv15c">(</span>interception_receive<span class="lv14c">(</span>context<span class="op_lv14">,</span> device <span class="op_lv14">=</span> interception_wait<span class="lv13c">(</span>context<span class="lv13c">)</span><span class="op_lv14">,</span> <span class="lv13c">(</span>InterceptionStroke <span class="op_lv13">*</span><span class="lv13c">)</span><span class="op_lv14">&amp;</span>new_stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span> <span class="op_lv15">&gt;</span> <span class="Number">0</span><span class="lv15c">)</span>
<span class="lv15c">{</span>
<span class="Conditional">if</span><span class="lv14c">(</span>new_stroke <span class="op_lv14">!=</span> last_stroke<span class="lv14c">)</span>
<span class="lv14c">{</span>
stroke_sequence<span class="op_lv14">.</span>pop_front<span class="lv13c">()</span><span class="op_lv14">;</span>
stroke_sequence<span class="op_lv14">.</span>push_back<span class="lv13c">(</span>new_stroke<span class="lv13c">)</span><span class="op_lv14">;</span>
<span class="lv14c">}</span>
<span class="Conditional">if</span><span class="lv14c">(</span>stroke_sequence<span class="lv13c">[</span><span class="Number">0</span><span class="lv13c">]</span> <span class="op_lv14">==</span> ctrl_down <span class="op_lv14">&amp;&amp;</span> stroke_sequence<span class="lv13c">[</span><span class="Number">1</span><span class="lv13c">]</span> <span class="op_lv14">==</span> alt_down <span class="op_lv14">&amp;&amp;</span> stroke_sequence<span class="lv13c">[</span><span class="Number">2</span><span class="lv13c">]</span> <span class="op_lv14">==</span> del_down<span class="lv14c">)</span>
cout <span class="op_lv15">&lt;&lt;</span> <span class="String">&quot;ctrl-alt-del pressed&quot;</span> <span class="op_lv15">&lt;&lt;</span> endl<span class="op_lv15">;</span>
<span class="Conditional">else</span> <span class="Conditional">if</span><span class="lv14c">(</span>stroke_sequence<span class="lv13c">[</span><span class="Number">0</span><span class="lv13c">]</span> <span class="op_lv14">==</span> alt_down <span class="op_lv14">&amp;&amp;</span> stroke_sequence<span class="lv13c">[</span><span class="Number">1</span><span class="lv13c">]</span> <span class="op_lv14">==</span> ctrl_down <span class="op_lv14">&amp;&amp;</span> stroke_sequence<span class="lv13c">[</span><span class="Number">2</span><span class="lv13c">]</span> <span class="op_lv14">==</span> del_down<span class="lv14c">)</span>
cout <span class="op_lv15">&lt;&lt;</span> <span class="String">&quot;alt-ctrl-del pressed&quot;</span> <span class="op_lv15">&lt;&lt;</span> endl<span class="op_lv15">;</span>
<span class="Conditional">else</span>
interception_send<span class="lv14c">(</span>context<span class="op_lv14">,</span> device<span class="op_lv14">,</span> <span class="lv13c">(</span>InterceptionStroke <span class="op_lv13">*</span><span class="lv13c">)</span><span class="op_lv14">&amp;</span>new_stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span><span class="op_lv15">;</span>
<span class="Conditional">if</span><span class="lv14c">(</span>new_stroke<span class="op_lv14">.</span>code <span class="op_lv14">==</span> SCANCODE_ESC<span class="lv14c">)</span> <span class="Statement">break</span><span class="op_lv15">;</span>
last_stroke <span class="op_lv15">=</span> new_stroke<span class="op_lv15">;</span>
<span class="lv15c">}</span>
interception_destroy_context<span class="lv15c">(</span>context<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Statement">return</span> <span class="Number">0</span><span class="op_lv16">;</span>
<span class="lv16c">}</span>
</pre>
<p>The following sample identify multiple mice through left clicking (worked well for my magic mouse and touch pad):</p>
<pre>
<span class="Include">#include </span><span class="String">&lt;interception.h&gt;</span>
<span class="Include">#include </span><span class="String">&quot;utils.h&quot;</span>
<span class="Include">#include </span><span class="String">&lt;iostream&gt;</span>
<span class="Structure">enum</span> ScanCode
<span class="lv16c">{</span>
SCANCODE_ESC <span class="op_lv16">=</span> <span class="Number">0x01</span>
<span class="lv16c">}</span><span class="op_lv0">;</span>
<span class="Type">int</span> main<span class="lv16c">()</span>
<span class="lv16c">{</span>
<span class="Statement">using</span> <span class="Structure">namespace</span> std<span class="op_lv16">;</span>
InterceptionContext context<span class="op_lv16">;</span>
InterceptionDevice device<span class="op_lv16">;</span>
InterceptionStroke stroke<span class="op_lv16">;</span>
raise_process_priority<span class="lv15c">()</span><span class="op_lv16">;</span>
context <span class="op_lv16">=</span> interception_create_context<span class="lv15c">()</span><span class="op_lv16">;</span>
interception_set_filter<span class="lv15c">(</span>context<span class="op_lv15">,</span> interception_is_keyboard<span class="op_lv15">,</span> INTERCEPTION_FILTER_KEY_DOWN <span class="op_lv15">|</span> INTERCEPTION_FILTER_KEY_UP<span class="lv15c">)</span><span class="op_lv16">;</span>
interception_set_filter<span class="lv15c">(</span>context<span class="op_lv15">,</span> interception_is_mouse<span class="op_lv15">,</span> INTERCEPTION_FILTER_MOUSE_LEFT_BUTTON_DOWN<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Repeat">while</span><span class="lv15c">(</span>interception_receive<span class="lv14c">(</span>context<span class="op_lv14">,</span> device <span class="op_lv14">=</span> interception_wait<span class="lv13c">(</span>context<span class="lv13c">)</span><span class="op_lv14">,</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span> <span class="op_lv15">&gt;</span> <span class="Number">0</span><span class="lv15c">)</span>
<span class="lv15c">{</span>
<span class="Conditional">if</span><span class="lv14c">(</span>interception_is_keyboard<span class="lv13c">(</span>device<span class="lv13c">)</span><span class="lv14c">)</span>
<span class="lv14c">{</span>
InterceptionKeyStroke <span class="op_lv14">&amp;</span>keystroke <span class="op_lv14">=</span> <span class="op_lv14">*</span><span class="lv13c">(</span>InterceptionKeyStroke <span class="op_lv13">*</span><span class="lv13c">)</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">;</span>
<span class="Conditional">if</span><span class="lv13c">(</span>keystroke<span class="op_lv13">.</span>code <span class="op_lv13">==</span> SCANCODE_ESC<span class="lv13c">)</span> <span class="Statement">break</span><span class="op_lv14">;</span>
<span class="lv14c">}</span>
<span class="Conditional">if</span><span class="lv14c">(</span>interception_is_mouse<span class="lv13c">(</span>device<span class="lv13c">)</span><span class="lv14c">)</span>
<span class="lv14c">{</span>
InterceptionMouseStroke <span class="op_lv14">&amp;</span>mousestroke <span class="op_lv14">=</span> <span class="op_lv14">*</span><span class="lv13c">(</span>InterceptionMouseStroke <span class="op_lv13">*</span><span class="lv13c">)</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">;</span>
cout <span class="op_lv14">&lt;&lt;</span> <span class="String">&quot;INTERCEPTION_MOUSE(&quot;</span> <span class="op_lv14">&lt;&lt;</span> device <span class="op_lv14">-</span> INTERCEPTION_MOUSE<span class="lv13c">(</span><span class="Number">0</span><span class="lv13c">)</span> <span class="op_lv14">&lt;&lt;</span> <span class="String">&quot;)&quot;</span> <span class="op_lv14">&lt;&lt;</span> endl<span class="op_lv14">;</span>
<span class="lv14c">}</span>
interception_send<span class="lv14c">(</span>context<span class="op_lv14">,</span> device<span class="op_lv14">,</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span><span class="op_lv15">;</span>
<span class="lv15c">}</span>
interception_destroy_context<span class="lv15c">(</span>context<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Statement">return</span> <span class="Number">0</span><span class="op_lv16">;</span>
<span class="lv16c">}</span>
</pre>
<p>As you can see interception_is_keyboard and interception_is_mouse are convenience device selection predicates, but you can implement your own.</p>
<p>The following sample allows one to query for a device’s “hardware id”, which may help on disambiguation of device input.<br />
Just remember this hardware id’s are not required to be unique, but mostly will when you have at last two different device models.</p>
<pre>
<span class="Include">#include </span><span class="String">&lt;interception.h&gt;</span>
<span class="Include">#include </span><span class="String">&quot;utils.h&quot;</span>
<span class="Include">#include </span><span class="String">&lt;iostream&gt;</span>
<span class="Structure">enum</span> ScanCode
<span class="lv16c">{</span>
SCANCODE_ESC <span class="op_lv16">=</span> <span class="Number">0x01</span>
<span class="lv16c">}</span><span class="op_lv0">;</span>
<span class="Type">int</span> main<span class="lv16c">()</span>
<span class="lv16c">{</span>
<span class="Statement">using</span> <span class="Structure">namespace</span> std<span class="op_lv16">;</span>
InterceptionContext context<span class="op_lv16">;</span>
InterceptionDevice device<span class="op_lv16">;</span>
InterceptionStroke stroke<span class="op_lv16">;</span>
<span class="Type">wchar_t</span> hardware_id<span class="lv15c">[</span><span class="Number">500</span><span class="lv15c">]</span><span class="op_lv16">;</span>
raise_process_priority<span class="lv15c">()</span><span class="op_lv16">;</span>
context <span class="op_lv16">=</span> interception_create_context<span class="lv15c">()</span><span class="op_lv16">;</span>
interception_set_filter<span class="lv15c">(</span>context<span class="op_lv15">,</span> interception_is_keyboard<span class="op_lv15">,</span> INTERCEPTION_FILTER_KEY_DOWN <span class="op_lv15">|</span> INTERCEPTION_FILTER_KEY_UP<span class="lv15c">)</span><span class="op_lv16">;</span>
interception_set_filter<span class="lv15c">(</span>context<span class="op_lv15">,</span> interception_is_mouse<span class="op_lv15">,</span> INTERCEPTION_FILTER_MOUSE_LEFT_BUTTON_DOWN<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Repeat">while</span><span class="lv15c">(</span>interception_receive<span class="lv14c">(</span>context<span class="op_lv14">,</span> device <span class="op_lv14">=</span> interception_wait<span class="lv13c">(</span>context<span class="lv13c">)</span><span class="op_lv14">,</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span> <span class="op_lv15">&gt;</span> <span class="Number">0</span><span class="lv15c">)</span>
<span class="lv15c">{</span>
<span class="Conditional">if</span><span class="lv14c">(</span>interception_is_keyboard<span class="lv13c">(</span>device<span class="lv13c">)</span><span class="lv14c">)</span>
<span class="lv14c">{</span>
InterceptionKeyStroke <span class="op_lv14">&amp;</span>keystroke <span class="op_lv14">=</span> <span class="op_lv14">*</span><span class="lv13c">(</span>InterceptionKeyStroke <span class="op_lv13">*</span><span class="lv13c">)</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">;</span>
<span class="Conditional">if</span><span class="lv13c">(</span>keystroke<span class="op_lv13">.</span>code <span class="op_lv13">==</span> SCANCODE_ESC<span class="lv13c">)</span> <span class="Statement">break</span><span class="op_lv14">;</span>
<span class="lv14c">}</span>
<span class="Type">size_t</span> length <span class="op_lv15">=</span> interception_get_hardware_id<span class="lv14c">(</span>context<span class="op_lv14">,</span> device<span class="op_lv14">,</span> hardware_id<span class="op_lv14">,</span> <span class="Normal">sizeof</span><span class="lv13c">(</span>hardware_id<span class="lv13c">)</span><span class="lv14c">)</span><span class="op_lv15">;</span>
<span class="Conditional">if</span><span class="lv14c">(</span>length <span class="op_lv14">&gt;</span> <span class="Number">0</span> <span class="op_lv14">&amp;&amp;</span> length <span class="op_lv14">&lt;</span> <span class="Normal">sizeof</span><span class="lv13c">(</span>hardware_id<span class="lv13c">)</span><span class="lv14c">)</span>
wcout <span class="op_lv15">&lt;&lt;</span> hardware_id <span class="op_lv15">&lt;&lt;</span> endl<span class="op_lv15">;</span>
interception_send<span class="lv14c">(</span>context<span class="op_lv14">,</span> device<span class="op_lv14">,</span> <span class="op_lv14">&amp;</span>stroke<span class="op_lv14">,</span> <span class="Number">1</span><span class="lv14c">)</span><span class="op_lv15">;</span>
<span class="lv15c">}</span>
interception_destroy_context<span class="lv15c">(</span>context<span class="lv15c">)</span><span class="op_lv16">;</span>
<span class="Statement">return</span> <span class="Number">0</span><span class="op_lv16">;</span>
<span class="lv16c">}</span>
</pre>
</div>
</div>
</div>
<footer>
<p>&copy; 2015 Francisco Lopes
with help from <a href="http://jekyllbootstrap.com" target="_blank" title="The Definitive Jekyll Blogging Framework">Jekyll Bootstrap</a>
and <a href="http://github.com/dhulihan/hooligan" target="_blank">The Hooligan Theme</a>
</p>
</footer>
</div> <!-- /container -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="http://www.oblita.com/assets/themes/hooligan/js/jquery.min.js"><\/script>')</script>
<script src="http://www.oblita.com/assets/themes/hooligan/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-6791370-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,430 @@
/* line 31, ../sass/darkstrap.scss */
.well, .breadcrumb, input,
input[type="file"],
select,
textarea, .progress, code, pre {
-moz-box-shadow: rgba(225, 225, 225, 0.1) 0 1px 0, rgba(15, 15, 15, 0.8) 0 1px 3px 0px inset;
-webkit-box-shadow: rgba(225, 225, 225, 0.1) 0 1px 0, rgba(15, 15, 15, 0.8) 0 1px 3px 0px inset;
-o-box-shadow: rgba(225, 225, 225, 0.1) 0 1px 0, rgba(15, 15, 15, 0.8) 0 1px 3px 0px inset;
box-shadow: rgba(225, 225, 225, 0.1) 0 1px 0, rgba(15, 15, 15, 0.8) 0 1px 3px 0px inset;
background: #282828;
background-color: rgba(0, 0, 0, 0.2);
}
/* line 33, ../sass/darkstrap.scss */
body {
background: #2f2f2f;
color: #c6c6c6;
}
/* line 39, ../sass/darkstrap.scss */
.breadcrumb {
border: 0;
}
/* line 42, ../sass/darkstrap.scss */
.breadcrumb li {
text-shadow: 0 1px 0 #000;
}
/* line 48, ../sass/darkstrap.scss */
.page-header {
-moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-o-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
border-bottom: 1px solid #121212;
}
/* line 49, ../sass/darkstrap.scss */
h1, h2, h3, h4, h5, h6 {
color: white;
}
/* line 50, ../sass/darkstrap.scss */
h6 {
color: #999;
}
/* line 57, ../sass/darkstrap.scss */
.nav-tabs .open .dropdown-toggle,
.nav-pills .open .dropdown-toggle,
.nav > .open.active > a:hover {
background-color: #222222;
border-color: #2f2f2f #2f2f2f transparent #2f2f2f;
}
/* line 61, ../sass/darkstrap.scss */
.nav > .dropdown.active > a:hover {
color: #fff;
}
/* line 65, ../sass/darkstrap.scss */
.nav-tabs .active .dropdown-toggle .caret,
.nav-pills .active .dropdown-toggle .caret {
border-top-color: #fff;
}
/* line 68, ../sass/darkstrap.scss */
.nav-tabs {
border-bottom: 1px solid #666;
}
/* line 71, ../sass/darkstrap.scss */
.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
background-color: #2f2f2f;
color: #fff;
border-color: #666 #666 transparent #666;
}
/* line 76, ../sass/darkstrap.scss */
.nav-tabs > li > a:hover {
border-color: #2f2f2f #2f2f2f #666666 #2f2f2f;
background-color: #222222;
color: #00aaff;
}
/* line 83, ../sass/darkstrap.scss */
.nav-tabs.nav-stacked > li > a, .nav-tabs.nav-stacked > li > a:hover {
border-color: #666;
}
/* line 89, ../sass/darkstrap.scss */
.nav-pills > li > a:hover {
background-color: #222222;
color: #00aaff;
}
/* line 95, ../sass/darkstrap.scss */
.nav-list > li > a,
.nav-list .nav-header {
text-shadow: 0 1px 0 #000;
}
/* line 98, ../sass/darkstrap.scss */
.nav-list > li > a:hover {
background-color: #161616;
color: #00aaff;
}
/* line 103, ../sass/darkstrap.scss */
.nav-list .active > a:hover {
background-color: #0088cc;
color: white;
}
/* line 109, ../sass/darkstrap.scss */
.tabs-below .nav-tabs {
border-top: 1px solid #666;
}
/* line 110, ../sass/darkstrap.scss */
.tabs-left .nav-tabs {
border-right: 1px solid #666;
}
/* line 111, ../sass/darkstrap.scss */
.tabs-right .nav-tabs {
border-left: 1px solid #666;
}
/* line 113, ../sass/darkstrap.scss */
.tabs-below .nav-tabs > li > a:hover {
border-top: 1px solid #666;
}
/* line 116, ../sass/darkstrap.scss */
.tabs-left .nav-tabs > li > a:hover {
border-color: transparent #666 transparent transparent;
}
/* line 119, ../sass/darkstrap.scss */
.tabs-right .nav-tabs > li > a:hover {
border-color: transparent transparent transparent #666;
}
/* line 124, ../sass/darkstrap.scss */
.tabs-below .nav-tabs .active > a,
.tabs-below .nav-tabs .active > a:hover {
border-color: transparent #666 #666 #666;
}
/* line 128, ../sass/darkstrap.scss */
.tabs-left .nav-tabs .active > a,
.tabs-left .nav-tabs .active > a:hover {
border-color: #666 transparent #666 #666;
}
/* line 132, ../sass/darkstrap.scss */
.tabs-right .nav-tabs .active > a,
.tabs-right .nav-tabs .active > a:hover {
border-color: #666 #666 #666 transparent;
}
/* line 2, ../sass/mixins.scss */
:-moz-placeholder {
color: #666666;
}
/* line 5, ../sass/mixins.scss */
::-webkit-input-placeholder {
color: #666666;
}
/* line 140, ../sass/darkstrap.scss */
.input-prepend .add-on,
.input-append .add-on {
background: #444;
color: #c6c6c6;
border-color: #111;
text-shadow: 0 1px 0 black;
}
/* line 147, ../sass/darkstrap.scss */
label {
color: #c6c6c6;
}
/* line 154, ../sass/darkstrap.scss */
input,
input[type="file"],
select,
textarea {
color: white;
border-color: #111111;
}
/* line 160, ../sass/darkstrap.scss */
.search-query {
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0) 0 1px 7px 0px inset;
}
/* line 163, ../sass/darkstrap.scss */
legend {
color: white;
-moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-o-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
border-bottom: 1px solid #121212;
}
/* line 167, ../sass/darkstrap.scss */
.form-actions {
border-top-color: #222;
background-color: #444;
}
/* line 172, ../sass/darkstrap.scss */
.help-inline {
color: #999;
}
/* line 12, ../sass/mixins.scss */
.control-group.warning > label,
.control-group.warning .help-block,
.control-group.warning .help-inline {
color: #faa732;
}
/* line 13, ../sass/mixins.scss */
.control-group.warning input, .control-group.warning select, .control-group.warning textarea {
color: #faa732;
border-color: #faa732;
}
/* line 20, ../sass/mixins.scss */
.control-group.warning input:focus,
.control-group.warning select:focus,
.control-group.warning textarea:focus {
border-color: #faa732;
-moz-box-shadow: 0 0 6px #faa732;
-webkit-box-shadow: 0 0 6px #faa732;
-o-box-shadow: 0 0 6px #faa732;
box-shadow: 0 0 6px #faa732;
}
/* line 12, ../sass/mixins.scss */
.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline {
color: #5bb75b;
}
/* line 13, ../sass/mixins.scss */
.control-group.success input, .control-group.success select, .control-group.success textarea {
color: #5bb75b;
border-color: #5bb75b;
}
/* line 20, ../sass/mixins.scss */
.control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus {
border-color: #5bb75b;
-moz-box-shadow: 0 0 6px #5bb75b;
-webkit-box-shadow: 0 0 6px #5bb75b;
-o-box-shadow: 0 0 6px #5bb75b;
box-shadow: 0 0 6px #5bb75b;
}
/* line 12, ../sass/mixins.scss */
.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline {
color: #fc5b5e;
}
/* line 13, ../sass/mixins.scss */
.control-group.error input, .control-group.error select, .control-group.error textarea {
color: #fc5b5e;
border-color: #fc5b5e;
}
/* line 20, ../sass/mixins.scss */
.control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus {
border-color: #fc5b5e;
-moz-box-shadow: 0 0 6px #fc5b5e;
-webkit-box-shadow: 0 0 6px #fc5b5e;
-o-box-shadow: 0 0 6px #fc5b5e;
box-shadow: 0 0 6px #fc5b5e;
}
/* line 182, ../sass/darkstrap.scss */
.table thead {
color: white;
}
/* line 185, ../sass/darkstrap.scss */
.table td {
border-top-color: #666;
}
/* line 191, ../sass/darkstrap.scss */
.table-striped tbody tr:nth-child(2n+1) td, .table-striped tbody tr:nth-child(2n+1) th {
background-color: #444;
}
/* line 197, ../sass/darkstrap.scss */
.table-bordered {
border: 1px solid #666;
}
/* line 202, ../sass/darkstrap.scss */
.table-bordered th + th,
.table-bordered td + td,
.table-bordered th + td,
.table-bordered td + th {
border-left: 1px solid #666;
}
/* line 208, ../sass/darkstrap.scss */
.pagination a:hover {
color: #00aaff;
background-color: #222222;
}
/* line 212, ../sass/darkstrap.scss */
.pagination .active a {
color: #fff;
background-color: #222222;
}
/* line 216, ../sass/darkstrap.scss */
.pagination a {
border-color: #666;
}
/* line 219, ../sass/darkstrap.scss */
.pager a {
background-color: #2f2f2f;
border-color: #666;
}
/* line 222, ../sass/darkstrap.scss */
.pager a:hover {
background-color: #222222;
color: #00aaff;
}
/* line 238, ../sass/darkstrap.scss */
.alert {
color: #fff;
background-color: #faa732;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
border-color: #a86404;
}
/* line 234, ../sass/darkstrap.scss */
.alert h4 {
color: #c17305;
}
/* line 239, ../sass/darkstrap.scss */
.alert-success {
color: #fff;
background-color: #5bb75b;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
border-color: #2d662d;
}
/* line 234, ../sass/darkstrap.scss */
.alert-success h4 {
color: #347834;
}
/* line 240, ../sass/darkstrap.scss */
.alert-error {
color: #fff;
background-color: #fc5b5e;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
border-color: #d40408;
}
/* line 234, ../sass/darkstrap.scss */
.alert-error h4 {
color: #ed0409;
}
/* line 241, ../sass/darkstrap.scss */
.alert-info {
color: #fff;
background-color: #3a87ad;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
border-color: #1a3c4e;
}
/* line 234, ../sass/darkstrap.scss */
.alert-info h4 {
color: #204b61;
}
/* line 245, ../sass/darkstrap.scss */
.modal {
background-color: #444;
}
/* line 248, ../sass/darkstrap.scss */
.modal-header {
border-bottom: 1px solid #222;
}
/* line 251, ../sass/darkstrap.scss */
.modal-body p {
color: #c6c6c6;
}
/* line 254, ../sass/darkstrap.scss */
.modal-footer {
background-color: #373737;
border-top: 1px solid #222;
-moz-box-shadow: 0 1px 0 #333333 inset;
-webkit-box-shadow: 0 1px 0 #333333 inset;
-o-box-shadow: 0 1px 0 #333333 inset;
box-shadow: 0 1px 0 #333333 inset;
}
/* line 266, ../sass/darkstrap.scss */
blockquote {
border-left-color: #111;
}
/* line 268, ../sass/darkstrap.scss */
blockquote.pull-right {
border-right-color: #111;
}
/* line 271, ../sass/darkstrap.scss */
hr {
-moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-o-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
border-bottom: 1px solid #121212;
border-top: none;
}
/* line 277, ../sass/darkstrap.scss */
code {
border: none;
}
/* line 281, ../sass/darkstrap.scss */
pre {
border: none;
color: #c6c6c6;
}

@ -0,0 +1,119 @@
pre
{
font-family: 'consolas', 'Inconsolata', 'Anonymous Pro', 'Ubuntu Mono', monospace;
font-size: 10pt;
-webkit-font-smoothing: antialiased;
color: #ebdbb2;
text-shadow: none;
}
pre .Normal { color: #ebdbb2 ; background-color: transparent; }
pre .CursorLine { color: transparent; background-color: #3c3836; }
pre .CursorColumn { color: transparent; background-color: #3c3836; }
pre .MatchParen { color: transparent; background-color: #665c54 ; font-weight: bold; }
pre .ColorColumn { color: transparent; background-color: #3c3836; }
pre .Conceal { color: #83a598 ; background-color: transparent; }
pre .CursorLineNr { color: #fabd2f ; background-color: #3c3836; }
pre .NonText { color: #504945; }
pre .SpecialKey { color: #504945; }
pre .Search { color: #282828 ; background-color: #fabd2f; }
pre .IncSearch { color: #282828 ; background-color: #fabd2f; }
pre .Underlined { color: #83a598 ; background-color: transparent; text-decoration: underline; }
pre .StatusLine { color: #282828 ; background-color: #7c6f64 ; font-weight: bold; }
pre .StatusLineNC { color: #a89984 ; background-color: #504945 ; font-weight: bold; }
pre .VertSplit { color: #a89984 ; background-color: #504945; }
pre .WildMenu { color: #83a598 ; background-color: #504945 ; font-weight: bold; }
pre .Directory { color: #b8bb26 ; background-color: transparent; font-weight: bold; }
pre .Title { color: #b8bb26 ; background-color: transparent; font-weight: bold; }
pre .MoreMsg { color: #fabd2f ; background-color: transparent; font-weight: bold; }
pre .ModeMsg { color: #fabd2f ; background-color: transparent; font-weight: bold; }
pre .Question { color: #fe8019 ; background-color: transparent; font-weight: bold; }
pre .WarningMsg { color: #fb4934 ; background-color: transparent; font-weight: bold; }
pre .LineNr { color: #7c6f64; }
pre .Folded { color: #928374 ; background-color: #3c3836 ; font-style: italic; }
pre .FoldColumn { color: #928374 ; background-color: #3c3836; }
pre .Special { color: #fe8019; }
pre .Comment { color: #928374 ; background-color: transparent; font-style: italic; }
pre .Todo { color: #ebdbb2 ; background-color: transparent; font-weight: bold; }
pre .Statement { color: #fb4934; }
pre .Conditional { color: #fb4934; }
pre .Repeat { color: #fb4934; }
pre .Label { color: #fb4934; }
pre .Exception { color: #fb4934; }
pre .Keyword { color: #fb4934; }
pre .Identifier { color: #83a598; }
pre .Function { color: #b8bb26 ; background-color: transparent; font-weight: bold; }
pre .PreProc { color: #8ec07c; }
pre .Include { color: #8ec07c; }
pre .Define { color: #8ec07c; }
pre .Macro { color: #8ec07c; }
pre .PreCondit { color: #8ec07c; }
pre .Constant { color: #d3869b; }
pre .Character { color: #d3869b; }
pre .String { color: #b8bb26; }
pre .Boolean { color: #d3869b; }
pre .Number { color: #d3869b; }
pre .Float { color: #d3869b; }
pre .Type { color: #fabd2f; }
pre .StorageClass { color: #fe8019; }
pre .Structure { color: #8ec07c; }
pre .Typedef { color: #fabd2f; }
pre .Pmenu { color: #ebdbb2 ; background-color: #504945; }
pre .PmenuSel { color: #504945 ; background-color: #83a598 ; font-weight: bold; }
pre .PmenuSbar { color: transparent; background-color: #504945; }
pre .PmenuThumb { color: transparent; background-color: #7c6f64; }
pre .DiffDelete { color: #282828 ; background-color: #fb4934; }
pre .DiffAdd { color: #282828 ; background-color: #b8bb26; }
pre .DiffChange { color: #282828 ; background-color: #8ec07c; }
pre .DiffText { color: #282828 ; background-color: #fabd2f; }
pre .diffAdded { color: #b8bb26; }
pre .diffRemoved { color: #fb4934; }
pre .diffChanged { color: #8ec07c; }
pre .diffFile { color: #fe8019; }
pre .diffNewFile { color: #fabd2f; }
pre .diffLine { color: #83a598; }
pre .htmlTag { color: #83a598; }
pre .htmlEndTag { color: #83a598; }
pre .htmlTagName { color: #8ec07c ; background-color: # ; font-weight: bold; }
pre .htmlArg { color: #8ec07c; }
pre .htmlScriptTag { color: #d3869b; }
pre .htmlTagN { color: #ebdbb2; }
pre .htmlSpecialTagName { color: #8ec07c ; background-color: # ; font-weight: bold; }
pre .htmlLink { color: #a89984 ; background-color: # ; text-decoration: underline; }
pre .htmlSpecialChar { color: #fe8019; }
pre .vimCommentTitle { color: #a89984 ; background-color: # ; font-weight: bold ; font-style: italic; }
pre .lv1c { color: #d65d0e; }
pre .lv2c { color: #cc241d; }
pre .lv3c { color: #b16286; }
pre .lv4c { color: #458588; }
pre .lv5c { color: #d65d0e; }
pre .lv6c { color: #cc241d; }
pre .lv7c { color: #b16286; }
pre .lv8c { color: #458588; }
pre .lv9c { color: #d65d0e; }
pre .lv10c { color: #cc241d; }
pre .lv11c { color: #b16286; }
pre .lv12c { color: #458588; }
pre .lv13c { color: #d65d0e; }
pre .lv14c { color: #cc241d; }
pre .lv15c { color: #b16286; }
pre .lv16c { color: #458588; }
pre .op_lv0 { color: #d65d0e; }
pre .op_lv1 { color: #d65d0e; }
pre .op_lv2 { color: #cc241d; }
pre .op_lv3 { color: #b16286; }
pre .op_lv4 { color: #458588; }
pre .op_lv5 { color: #d65d0e; }
pre .op_lv6 { color: #cc241d; }
pre .op_lv7 { color: #b16286; }
pre .op_lv8 { color: #458588; }
pre .op_lv9 { color: #d65d0e; }
pre .op_lv10 { color: #cc241d; }
pre .op_lv11 { color: #b16286; }
pre .op_lv12 { color: #458588; }
pre .op_lv13 { color: #d65d0e; }
pre .op_lv14 { color: #cc241d; }
pre .op_lv15 { color: #b16286; }
pre .op_lv16 { color: #458588; }

File diff suppressed because one or more lines are too long

@ -0,0 +1,16 @@
.youtube
{
position:relative;
width:100%;
padding-top:56.25%;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.8);
}
.youtube iframe
{
position:absolute;
width:100%;
height:100%;
top:0;
left:0;
}

@ -0,0 +1,59 @@
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
.highlight .kt { color: #66d9ef } /* Keyword.Type */
.highlight .ld { color: #e6db74 } /* Literal.Date */
.highlight .m { color: #ae81ff } /* Literal.Number */
.highlight .s { color: #e6db74 } /* Literal.String */
.highlight .na { color: #a6e22e } /* Name.Attribute */
.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
.highlight .nc { color: #a6e22e } /* Name.Class */
.highlight .no { color: #66d9ef } /* Name.Constant */
.highlight .nd { color: #a6e22e } /* Name.Decorator */
.highlight .ni { color: #f8f8f2 } /* Name.Entity */
.highlight .ne { color: #a6e22e } /* Name.Exception */
.highlight .nf { color: #a6e22e } /* Name.Function */
.highlight .nl { color: #f8f8f2 } /* Name.Label */
.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
.highlight .nx { color: #a6e22e } /* Name.Other */
.highlight .py { color: #f8f8f2 } /* Name.Property */
.highlight .nt { color: #f92672 } /* Name.Tag */
.highlight .nv { color: #f8f8f2 } /* Name.Variable */
.highlight .ow { color: #f92672 } /* Operator.Word */
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
.highlight .sc { color: #e6db74 } /* Literal.String.Char */
.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
.highlight .se { color: #ae81ff } /* Literal.String.Escape */
.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
.highlight .sx { color: #e6db74 } /* Literal.String.Other */
.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */

@ -0,0 +1,405 @@
@import url(http://fonts.googleapis.com/css?family=Advent+Pro);
@import url(http://fonts.googleapis.com/css?family=Oxygen);
/* Partials */
/* Theme Vars */
/* Compass Vars */
/* Override some defaults */
/* line 13, ../_sass/_base.scss */
html, body {
background-color: #2a2a2a;
background: url(../images/bgs/body.png) repeat;
}
/* line 18, ../_sass/_base.scss */
body {
color: #bbb;
text-shadow: 1px 1px 1px #000;
height: 100%;
font-family: 'Oxygen', sans-serif;
font-size: 14px;
}
/* line 26, ../_sass/_base.scss */
h1, h2, h3, h4, h5, h6 {
margin: 0;
font-weight: normal;
color: #999;
text-rendering: optimizelegibility;
font-family: 'Advent Pro', sans-serif;
/*font-family: 'Pontano Sans', sans-serif;*/
}
/* line 35, ../_sass/_base.scss */
a {
color: #4cb4e8;
-webkit-transition: all 0.3s;
-moz-transition: all 0.3s;
-ms-transition: all 0.3s;
-o-transition: all 0.3s;
transition: all 0.3s;
}
/* line 37, ../_sass/_base.scss */
a:hover {
color: #d4edf9;
text-decoration: none;
}
/* line 44, ../_sass/_base.scss */
h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
font-weight: normal;
color: #999999;
}
/* line 49, ../_sass/_base.scss */
h1, h2 {
margin: 0 0 15px;
}
/* line 53, ../_sass/_base.scss */
h1 {
font-size: 40px;
}
/* line 57, ../_sass/_base.scss */
h2 {
font-size: 30px;
}
/* line 61, ../_sass/_base.scss */
pre, code {
color: #ccc;
}
/* line 65, ../_sass/_base.scss */
pre > code {
/* Reset box-shadow for pygments */
background: none;
box-shadow: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
-o-box-shadow: none;
}
/* line 74, ../_sass/_base.scss */
hr {
border: none;
background: rgba(0, 0, 0, 0.7);
height: 1px;
}
/* Layout */
/* line 81, ../_sass/_base.scss */
.navbar {
margin-bottom: 0;
}
/* line 83, ../_sass/_base.scss */
.navbar div.navbar-inner {
-webkit-border-radius: 0;
-moz-border-radius: 0;
-ms-border-radius: 0;
-o-border-radius: 0;
border-radius: 0;
}
/* line 85, ../_sass/_base.scss */
.navbar div.navbar-inner a.brand {
padding: 10px 20px;
}
/* line 90, ../_sass/_base.scss */
.navbar div.navbar-inner ul.nav:first-child li a {
padding: 12px 10px 8px;
}
/* line 99, ../_sass/_base.scss */
.container > footer {
margin-top: 20px;
clear: both;
}
/* line 103, ../_sass/_base.scss */
.container > footer p {
text-align: center;
/* center align it with the container */
}
/* Content */
/* line 110, ../_sass/_base.scss */
.content {
/* when there's no page-header */
/* Wide column content */
}
/* line 111, ../_sass/_base.scss */
.content img {
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.8);
}
/* line 115, ../_sass/_base.scss */
.content.no-header {
padding-top: 40px;
}
/* line 122, ../_sass/_base.scss */
.content div.row div.span8 > img {
display: block;
margin: 10px auto;
}
/* line 128, ../_sass/_base.scss */
.content div.row div.span4 h4 {
margin-top: 10px;
}
/* line 130, ../_sass/_base.scss */
.content div.row div.span4 h4:first {
margin-top: 0;
}
/* line 134, ../_sass/_base.scss */
.content p {
padding-bottom: 15px;
line-height: 25px;
margin: 0;
}
/* Page header tweaks */
/* line 142, ../_sass/_base.scss */
.page-header {
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
border: none;
padding: 20px 20px 10px;
margin: 0px -20px 20px;
z-index: 0;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
-ms-border-bottom-left-radius: 5px;
-o-border-bottom-left-radius: 5px;
border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px;
-webkit-border-bottom-right-radius: 5px;
-ms-border-bottom-right-radius: 5px;
-o-border-bottom-right-radius: 5px;
border-bottom-right-radius: 5px;
}
/* line 155, ../_sass/_base.scss */
.page-header h1 {
color: #eee;
margin-bottom: 0;
}
/* line 161, ../_sass/_base.scss */
.topbar .btn {
border: 0;
}
/* Pagination */
/* line 168, ../_sass/_base.scss */
div.pagination li a {
-webkit-box-shadow: 0px 1px 1px black;
-moz-box-shadow: 0px 1px 1px black;
box-shadow: 0px 1px 1px black;
}
/* Buttons */
/* line 176, ../_sass/_base.scss */
a.btn, a.btn.disabled {
color: rgba(255, 255, 255, 0.7);
text-shadow: 1px 1px 2px #000;
background: rgba(0, 0, 0, 0.2);
border: none;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-webkit-box-shadow: rgba(0, 0, 0, 0.8) 0 1px 0, rgba(255, 255, 255, 0.5) 0 1px 1px 0px inset;
-o-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
}
/* line 187, ../_sass/_base.scss */
a.btn:hover, a.btn.disabled:hover {
background: rgba(255, 255, 255, 0.05);
}
/* line 190, ../_sass/_base.scss */
a.btn.disabled, a.btn.disabled.disabled {
color: rgba(255, 255, 255, 0.3);
}
/* Tags */
/* line 196, ../_sass/_base.scss */
.tag_box {
list-style: none;
margin: 0;
padding: 5px 0;
overflow: hidden;
}
/* line 202, ../_sass/_base.scss */
.tag_box.inline li {
float: left;
}
/* line 206, ../_sass/_base.scss */
.tag_box li {
line-height: 28px;
}
/* line 210, ../_sass/_base.scss */
.tag_box a.active {
background: #57A957;
border: 1px solid #4C964D;
color: #FFF;
}
/* line 215, ../_sass/_base.scss */
.tag_box a span {
vertical-align: super;
font-size: 0.8em;
}
/* line 223, ../_sass/_base.scss */
.tag_box.inline a,
.tag_box a {
padding: 3px 6px;
margin: 2px;
background: rgba(255, 255, 255, 0.2);
color: white;
border-radius: 3px;
text-decoration: none;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-webkit-box-shadow: rgba(0, 0, 0, 0.8) 0 1px 0, rgba(255, 255, 255, 0.5) 0 1px 1px 0px inset;
-o-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
}
/* line 235, ../_sass/_base.scss */
.tag_box.inline a:hover,
.tag_box a:hover {
background: rgba(255, 255, 255, 0.3);
}
/* Page-specific */
/* line 242, ../_sass/_base.scss */
div.content div#page-index {
padding-top: 30px !important;
}
/* Zocial Overrides */
/* line 248, ../_sass/_base.scss */
.navbar a.zocial {
padding-left: 0 !important;
padding-right: 0 !important;
}
/* line 254, ../_sass/_base.scss */
.zocial.googleplus:focus,
.zocial.googleplus:hover {
color: #e01d30 !important;
}
/* line 259, ../_sass/_base.scss */
.zocial.twitter:focus,
.zocial.twitter:hover {
color: #46c0fb !important;
}
/* line 265, ../_sass/_base.scss */
.zocial.linkedin:focus,
.zocial.linkedin:hover {
color: #50a1cb !important;
}
/* Layout */
/* line 2, ../_sass/_responsive.scss */
.navbar {
margin-bottom: 0;
}
/* line 4, ../_sass/_responsive.scss */
.navbar div.navbar-inner {
-webkit-border-radius: 0;
-moz-border-radius: 0;
-ms-border-radius: 0;
-o-border-radius: 0;
border-radius: 0;
}
/* line 7, ../_sass/_responsive.scss */
.navbar ul.social {
/* Hide social menu on low-res screens */
}
@media (min-width: 240px) and (max-width: 979px) {
/* line 7, ../_sass/_responsive.scss */
.navbar ul.social {
display: none !important;
}
}
/* Responsive Overrides */
@media (max-width: 767px) {
/* line 18, ../_sass/_responsive.scss */
body {
padding-right: 0px;
padding-left: 0px;
}
/* line 23, ../_sass/_responsive.scss */
div.container {
padding: 0px 20px;
}
/* line 25, ../_sass/_responsive.scss */
div.container div.page-header {
-webkit-border-radius: 0;
-moz-border-radius: 0;
-ms-border-radius: 0;
-o-border-radius: 0;
border-radius: 0;
}
}
/* Posts */
/* line 3, ../_sass/_post.scss */
article.post header {
margin-bottom: 10px;
}
/* line 5, ../_sass/_post.scss */
article.post header h1, article.post header h2 {
margin: 0;
}
/* line 8, ../_sass/_post.scss */
article.post header .category {
display: inline-block;
color: white;
border-left: 1px solid rgba(255, 255, 255, 0.2);
padding-left: 6px;
margin-left: 3px;
}
/* line 25, ../_sass/_post.scss */
div.posts article div.date {
font-size: 10px;
padding: 10px 0;
}
/* line 28, ../_sass/_post.scss */
div.posts article div.date time {
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
padding: 5px 10px;
}
/* This is for your site's custom styling */
/* line 3, ../_sass/_custom.scss */
div.sidebar section {
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
padding: 15px;
}
/* line 12, ../_sass/_custom.scss */
div.sidebar section img.icon {
float: left;
margin: 7px 15px 0 0;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
border-radius: 5px;
}

@ -0,0 +1,167 @@
@charset "UTF-8";
/*!
Code written by Sam Collins (@smcllns) of www.eventasaur.us
You are free to use this work commercially
You are free to extend this work without permissions from the author (just do so tastefully eh?)
Enjoy
*/
/* Reference icons from font-files */
@font-face {
font-family: 'zocial';
font-style: normal;
font-weight: normal;
src: url('zocial-regular-webfont.eot');
src: url('zocial-regular-webfont.eot?#iefix') format('embedded-opentype'),
url('zocial-regular-webfont.woff') format('woff'),
url('zocial-regular-webfont.ttf') format('truetype'),
url('zocial-regular-webfont.svg#ZocialRegular') format('svg');
unicode-range: U+0-U+10FFFF;
}
.zocial,
a.zocial {
cursor: pointer;
display: inline-block;
font: bold 100%/2.1 "Lucida Grande", Tahoma, sans-serif;
text-align: center;
text-decoration: none;
text-shadow: 0 1px 0 rgba(0,0,0,0.5);
white-space: nowrap;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
position: relative;
-moz-border-radius: .3em;
-webkit-border-radius: .3em;
border-radius: .3em;
}
.zocial:before {
content: "";
border-right: 0.075em solid rgba(0,0,0,0.1);
float: left;
font: 120%/1.65 zocial;
font-style: normal;
font-weight: normal;
margin: 0 0.5em 0 0;
padding: 0 0.5em;
text-align: center;
text-decoration: none;
text-transform: none;
/*-moz-box-shadow: 0.075em 0 0 rgba(255,255,255,0.25);
-webkit-box-shadow: 0.075em 0 0 rgba(255,255,255,0.25);
box-shadow: 0.075em 0 0 rgba(255,255,255,0.25);*/
-webkit-font-smoothing: antialiased;
}
.zocial:active {
outline: none; /* outline is visible on :focus */
}
/* Buttons can be displayed as standalone icons by adding a class of "icon" */
.zocial.icon {
}
.zocial.icon:before {
box-shadow: none;
border: none;
}
/* Button icon and color */
/* Icon characters are stored in unicode private area */
.zocial.amazon:before {content: "\E040";}
.zocial.android:before {content: "\E005";}
.zocial.angellist:before {content: "\E06C";}
.zocial.aol:before {content: "\E001";}
.zocial.appstore:before {content: "\E020";}
.zocial.bitcoin:before {content: "\E011"; color: #f7931a;}
.zocial.blogger:before {content: "\E021";}
.zocial.call:before {content: "\E016";}
.zocial.cal:before {content: "\E00D";}
.zocial.cart:before {content: "\E06A";}
.zocial.chrome:before {content: "\E03A";}
.zocial.cloudapp:before {content: "\E042";}
.zocial.creativecommons:before {content: "\E022";}
.zocial.delicious:before {content: "\E002";}
.zocial.digg:before {content: "\E01A";}
.zocial.disqus:before {content: "\E030";}
.zocial.dribbble:before {content: "\E023";}
.zocial.dropbox:before {content: "\E043"; color: #1f75cc;}
.zocial.email:before {content: "\E03C"; color: #312c2a;}
.zocial.eventasaurus:before {content: "\E055"; color: #9de428;}
.zocial.eventbrite:before {content: "\E05B";}
.zocial.eventful:before {content: "\E006"; color: #0066CC;}
.zocial.evernote:before {content: "\E024";}
.zocial.facebook:before {content: "\E045";}
.zocial.fivehundredpx:before {content: "\E00F"; color: #29b6ff;}
.zocial.flattr:before {content: "\E004";}
.zocial.flickr:before {content: "\E025";}
.zocial.forrst:before {content: "\E019"; color: #50894f;}
.zocial.foursquare:before {content: "\E013";}
.zocial.github:before {content: "\E046";}
.zocial.gmail:before {content: "\E04C"; color: #f00;}
.zocial.google:before {content: "\E026";}
.zocial.googleplay:before {content: "\E05E";}
.zocial.googleplus:before {content: "\E00A";}
.zocial.gowalla:before {content: "\E01F";}
.zocial.grooveshark:before {content: "\E017";}
.zocial.guest:before {content: "\E01E";}
.zocial.html5:before {content: "\E014";}
.zocial.ie:before {content: "\E015";}
.zocial.instagram:before {content: "\E06D";}
.zocial.instapaper:before {content: "\E028";}
.zocial.intensedebate:before {content: "\E05A";}
.zocial.itunes:before {content: "\E048"; color: #1a6dd2;}
.zocial.klout:before {content: "\E02A"; }
.zocial.lanyrd:before {content: "\E00C";}
.zocial.lastfm:before {content: "\E04B";}
.zocial.linkedin:before {content: "\E02B";}
.zocial.macstore:before {content: "\E03D";}
.zocial.meetup:before {content: "\E02C";}
.zocial.myspace:before {content: "\E03E";}
.zocial.ninetyninedesigns:before {content: "\E018"; color: #f50;}
.zocial.openid:before {content: "\E04E"; color: #ff921d;}
.zocial.opentable:before {content: "\E05F";}
.zocial.paypal:before {content: "\E003";}
.zocial.pinboard:before {content: "\E04D";}
.zocial.pinterest:before {content: "\E010";}
.zocial.plancast:before {content: "\E02F";}
.zocial.plurk:before {content: "\E049";}
.zocial.podcast:before {content: "\E03F";}
.zocial.posterous:before {content: "\E05D";}
.zocial.print:before {content: "\E06B";}
.zocial.quora:before {content: "\E050";}
.zocial.reddit:before {content: "\E01D"; color: red;}
.zocial.rss:before {content: "\E031";}
.zocial.scribd:before {content: "\E05C"; color: #00d5ea;}
.zocial.skype:before {content: "\E032";}
.zocial.smashing:before {content: "\E009";}
.zocial.songkick:before {content: "\E04A";}
.zocial.soundcloud:before {content: "\E052";}
.zocial.spotify:before {content: "\E01C";}
.zocial.stumbleupon:before {content: "\E00E";}
.zocial.tumblr:before {content: "\E053";}
.zocial.twitter:before {content: "\E033";}
.zocial.viadeo:before {content: "\E027"; color: #f59b20;}
.zocial.vimeo:before {content: "\E035";}
.zocial.weibo:before {content: "\E029"; color: #e6162d;}
.zocial.wikipedia:before {content: "\E00B";}
.zocial.windows:before {content: "\E036";}
.zocial.xing:before {content: "\E037"}
.zocial.wordpress:before {content: "\E056";}
.zocial.yahoo:before {content: "\E038";}
.zocial.yelp:before {content: "\E058";}
.zocial.youtube:before {content: "\E034";}
Loading…
Cancel
Save