--- /dev/null
+.svn
+.DS_Store
+._.*
+*.o
+build
+Makefile
+autom4te.cache
+*~
+*.pbxuser
+*.perspectivev3
+*.mode1v3
+*.mode2v3
+*.pbxuser
+*.tm_build_errors
+*.tmproj
+Developer.xcconfig
+*.xcworkspace
+*.xcuserdatad
+/release
--- /dev/null
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 42447D7A193F6C9D0077B4B2 /* BBBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 42447D79193F6C9D0077B4B2 /* BBBackgroundView.m */; };
+ 42447D7D19407DA00077B4B2 /* BBSearchObjectView.m in Sources */ = {isa = PBXBuildFile; fileRef = 42447D7C19407DA00077B4B2 /* BBSearchObjectView.m */; };
+ 42447D821940935E0077B4B2 /* gear-black.png in Resources */ = {isa = PBXBuildFile; fileRef = 42447D7F1940935E0077B4B2 /* gear-black.png */; };
+ 42447D831940935E0077B4B2 /* search-black.png in Resources */ = {isa = PBXBuildFile; fileRef = 42447D801940935E0077B4B2 /* search-black.png */; };
+ 42663058193CC1FA00C0DD31 /* BBFlatBezelInterface.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42663057193CC1FA00C0DD31 /* BBFlatBezelInterface.xib */; };
+ CD3B1BE2285F2E8C004862D7 /* search-white.png in Resources */ = {isa = PBXBuildFile; fileRef = CD3B1BE0285F2E8C004862D7 /* search-white.png */; };
+ CD3B1BE3285F2E8C004862D7 /* gear-white.png in Resources */ = {isa = PBXBuildFile; fileRef = CD3B1BE1285F2E8C004862D7 /* gear-white.png */; };
+ E470B7E31709F3A0000169F2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E470B7E21709F3A0000169F2 /* Cocoa.framework */; };
+ E470B7E91709F3A0000169F2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E470B7E71709F3A0000169F2 /* InfoPlist.strings */; };
+ E470B7F81709F3A0000169F2 /* BBFlatBezelInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = E470B7F71709F3A0000169F2 /* BBFlatBezelInterface.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 42447D78193F6C9D0077B4B2 /* BBBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBBackgroundView.h; sourceTree = "<group>"; };
+ 42447D79193F6C9D0077B4B2 /* BBBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBBackgroundView.m; sourceTree = "<group>"; };
+ 42447D7B19407DA00077B4B2 /* BBSearchObjectView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBSearchObjectView.h; sourceTree = "<group>"; };
+ 42447D7C19407DA00077B4B2 /* BBSearchObjectView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBSearchObjectView.m; sourceTree = "<group>"; };
+ 42447D7F1940935E0077B4B2 /* gear-black.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "gear-black.png"; sourceTree = "<group>"; };
+ 42447D801940935E0077B4B2 /* search-black.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "search-black.png"; sourceTree = "<group>"; };
+ 42663057193CC1FA00C0DD31 /* BBFlatBezelInterface.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BBFlatBezelInterface.xib; sourceTree = "<group>"; };
+ CD3B1BE0285F2E8C004862D7 /* search-white.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "search-white.png"; sourceTree = "<group>"; };
+ CD3B1BE1285F2E8C004862D7 /* gear-white.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "gear-white.png"; sourceTree = "<group>"; };
+ E470B7DF1709F3A0000169F2 /* Flat Bezel.qsplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Flat Bezel.qsplugin"; sourceTree = BUILT_PRODUCTS_DIR; };
+ E470B7E21709F3A0000169F2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+ E470B7E61709F3A0000169F2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
+ E470B7E81709F3A0000169F2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ E470B7EB1709F3A0000169F2 /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = "<group>"; };
+ E470B7EC1709F3A0000169F2 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
+ E470B7ED1709F3A0000169F2 /* Developer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Developer.xcconfig; sourceTree = "<group>"; };
+ E470B7EE1709F3A0000169F2 /* QSPlugIn.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = QSPlugIn.xcconfig; sourceTree = "<group>"; };
+ E470B7EF1709F3A0000169F2 /* Quicksilver.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Quicksilver.pch; sourceTree = "<group>"; };
+ E470B7F01709F3A0000169F2 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
+ E470B7F61709F3A0000169F2 /* BBFlatBezelInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBFlatBezelInterface.h; sourceTree = "<group>"; };
+ E470B7F71709F3A0000169F2 /* BBFlatBezelInterface.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBFlatBezelInterface.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ E470B7DC1709F3A0000169F2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E470B7E31709F3A0000169F2 /* Cocoa.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ E470B7D51709F3A0000169F2 = {
+ isa = PBXGroup;
+ children = (
+ E470B7E11709F3A0000169F2 /* Frameworks */,
+ E470B7E01709F3A0000169F2 /* Products */,
+ E470B7E41709F3A0000169F2 /* Flat Bezel */,
+ );
+ sourceTree = "<group>";
+ };
+ E470B7E01709F3A0000169F2 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ E470B7DF1709F3A0000169F2 /* Flat Bezel.qsplugin */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ E470B7E11709F3A0000169F2 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ E470B7E21709F3A0000169F2 /* Cocoa.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ E470B7E41709F3A0000169F2 /* Flat Bezel */ = {
+ isa = PBXGroup;
+ children = (
+ E470B7EA1709F3A0000169F2 /* Configuration */,
+ E470B7E51709F3A0000169F2 /* Supporting Files */,
+ 42447D78193F6C9D0077B4B2 /* BBBackgroundView.h */,
+ 42447D79193F6C9D0077B4B2 /* BBBackgroundView.m */,
+ 42447D7B19407DA00077B4B2 /* BBSearchObjectView.h */,
+ 42447D7C19407DA00077B4B2 /* BBSearchObjectView.m */,
+ E470B7F61709F3A0000169F2 /* BBFlatBezelInterface.h */,
+ E470B7F71709F3A0000169F2 /* BBFlatBezelInterface.m */,
+ 42663057193CC1FA00C0DD31 /* BBFlatBezelInterface.xib */,
+ CD3B1BE1285F2E8C004862D7 /* gear-white.png */,
+ CD3B1BE0285F2E8C004862D7 /* search-white.png */,
+ 42447D7F1940935E0077B4B2 /* gear-black.png */,
+ 42447D801940935E0077B4B2 /* search-black.png */,
+ );
+ path = "Flat Bezel";
+ sourceTree = "<group>";
+ };
+ E470B7E51709F3A0000169F2 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ E470B7E61709F3A0000169F2 /* Info.plist */,
+ E470B7E71709F3A0000169F2 /* InfoPlist.strings */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ E470B7EA1709F3A0000169F2 /* Configuration */ = {
+ isa = PBXGroup;
+ children = (
+ E470B7EB1709F3A0000169F2 /* Common.xcconfig */,
+ E470B7EC1709F3A0000169F2 /* Debug.xcconfig */,
+ E470B7ED1709F3A0000169F2 /* Developer.xcconfig */,
+ E470B7EE1709F3A0000169F2 /* QSPlugIn.xcconfig */,
+ E470B7EF1709F3A0000169F2 /* Quicksilver.pch */,
+ E470B7F01709F3A0000169F2 /* Release.xcconfig */,
+ );
+ name = Configuration;
+ path = /private/tmp/QS/Configuration;
+ sourceTree = "<absolute>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ E470B7DE1709F3A0000169F2 /* Flat Bezel */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E470B7FB1709F3A0000169F2 /* Build configuration list for PBXNativeTarget "Flat Bezel" */;
+ buildPhases = (
+ E470B7DA1709F3A0000169F2 /* ShellScript */,
+ E470B7DB1709F3A0000169F2 /* Sources */,
+ E470B7DC1709F3A0000169F2 /* Frameworks */,
+ E470B7DD1709F3A0000169F2 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Flat Bezel";
+ productName = SquareBezel;
+ productReference = E470B7DF1709F3A0000169F2 /* Flat Bezel.qsplugin */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ E470B7D61709F3A0000169F2 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1120;
+ ORGANIZATIONNAME = BRNBW;
+ TargetAttributes = {
+ E470B7DE1709F3A0000169F2 = {
+ LastSwiftMigration = 1410;
+ ProvisioningStyle = Manual;
+ };
+ };
+ };
+ buildConfigurationList = E470B7D91709F3A0000169F2 /* Build configuration list for PBXProject "Flat Bezel" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ English,
+ en,
+ );
+ mainGroup = E470B7D51709F3A0000169F2;
+ productRefGroup = E470B7E01709F3A0000169F2 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ E470B7DE1709F3A0000169F2 /* Flat Bezel */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ E470B7DD1709F3A0000169F2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ CD3B1BE3285F2E8C004862D7 /* gear-white.png in Resources */,
+ 42663058193CC1FA00C0DD31 /* BBFlatBezelInterface.xib in Resources */,
+ E470B7E91709F3A0000169F2 /* InfoPlist.strings in Resources */,
+ CD3B1BE2285F2E8C004862D7 /* search-white.png in Resources */,
+ 42447D821940935E0077B4B2 /* gear-black.png in Resources */,
+ 42447D831940935E0077B4B2 /* search-black.png in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ E470B7DA1709F3A0000169F2 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ shellPath = /bin/sh;
+ shellScript = "\"$QS_BUILD_ROOT/Tools/bltrversion\"";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ E470B7DB1709F3A0000169F2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 42447D7A193F6C9D0077B4B2 /* BBBackgroundView.m in Sources */,
+ 42447D7D19407DA00077B4B2 /* BBSearchObjectView.m in Sources */,
+ E470B7F81709F3A0000169F2 /* BBFlatBezelInterface.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ E470B7E71709F3A0000169F2 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ E470B7E81709F3A0000169F2 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ E470B7F91709F3A0000169F2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E470B7EC1709F3A0000169F2 /* Debug.xcconfig */;
+ buildSettings = {
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ };
+ name = Debug;
+ };
+ E470B7FA1709F3A0000169F2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E470B7F01709F3A0000169F2 /* Release.xcconfig */;
+ buildSettings = {
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ };
+ name = Release;
+ };
+ E470B7FC1709F3A0000169F2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E470B7EE1709F3A0000169F2 /* QSPlugIn.xcconfig */;
+ buildSettings = {
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "pizza.unlimited.${PRODUCT_NAME:rfc1034identifier}";
+ PRODUCT_NAME = "Flat Bezel";
+ SWIFT_OBJC_BRIDGING_HEADER = "Flat Bezel/FlatBezel-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ E470B7FD1709F3A0000169F2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E470B7EE1709F3A0000169F2 /* QSPlugIn.xcconfig */;
+ buildSettings = {
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
+ PRODUCT_BUNDLE_IDENTIFIER = "pizza.unlimited.${PRODUCT_NAME:rfc1034identifier}";
+ PRODUCT_NAME = "Flat Bezel";
+ SWIFT_OBJC_BRIDGING_HEADER = "Flat Bezel/FlatBezel-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ E470B7D91709F3A0000169F2 /* Build configuration list for PBXProject "Flat Bezel" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E470B7F91709F3A0000169F2 /* Debug */,
+ E470B7FA1709F3A0000169F2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ E470B7FB1709F3A0000169F2 /* Build configuration list for PBXNativeTarget "Flat Bezel" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E470B7FC1709F3A0000169F2 /* Debug */,
+ E470B7FD1709F3A0000169F2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = E470B7D61709F3A0000169F2 /* Project object */;
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "1120"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E470B7DE1709F3A0000169F2"
+ BuildableName = "Flat Bezel.qsplugin"
+ BlueprintName = "Flat Bezel"
+ ReferencedContainer = "container:Flat Bezel.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ </Testables>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <PathRunnable
+ runnableDebuggingMode = "0"
+ BundleIdentifier = "com.blacktree.Quicksilver"
+ FilePath = "/tmp/QS/build/Debug/Quicksilver.app">
+ </PathRunnable>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E470B7DE1709F3A0000169F2"
+ BuildableName = "Flat Bezel.qsplugin"
+ BlueprintName = "Flat Bezel"
+ ReferencedContainer = "container:Flat Bezel.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
--- /dev/null
+#import <QSInterface/QSInterface.h>
+
+@interface BBBackgroundView : QSBezelBackgroundView
+
+@end
--- /dev/null
+#import "BBBackgroundView.h"
+
+@implementation BBBackgroundView
+
+- (void)drawRect:(NSRect)rect {
+ rect = [self bounds];
+
+ NSBezierPath *roundRect = [NSBezierPath bezierPath];
+
+ [roundRect appendBezierPathWithRoundedRectangle:rect withRadius:8];
+ [roundRect addClip];
+
+ BOOL darkMode = [[NSUserDefaults standardUserDefaults] boolForKey:@"QSFlatBezelDarkMode"];
+ if (darkMode) {
+ [[NSColor colorWithRed:.1 green:.1 blue:.1 alpha:.99] set];
+ } else {
+ [[NSColor colorWithRed:1 green:1 blue:1 alpha:.99] set];
+ }
+ NSRectFill(rect);
+
+ [super drawRect:rect];
+}
+
+@end
--- /dev/null
+@interface BBFlatBezelInterface : QSResizingInterfaceController {
+ NSRect standardRect;
+}
+
+@end
+
+@interface NSWindow (QSBCInterfaceController)
+- (NSTimeInterval)animationResizeTime:(NSRect)newWindowFrame;
+@end
--- /dev/null
+#import "BBFlatBezelInterface.h"
+
+@interface BBFlatBezelInterface () {
+ CGRect initialRect;
+}
+@end
+
+@implementation BBFlatBezelInterface
+
+- (id)init {
+ return [self initWithWindowNibName:@"BBFlatBezelInterface"];
+}
+
+- (void)windowDidLoad {
+ initialRect = centerRectInRect([[self window] frame], [[NSScreen mainScreen] frame]);
+
+ [super windowDidLoad];
+
+ QSWindow *window = (QSWindow *)[self window];
+ [window setLevel:NSPopUpMenuWindowLevel];
+ [window setBackgroundColor:[NSColor clearColor]];
+ [window setOpaque:NO];
+
+ [window setHideOffset:NSMakePoint(0, 0)];
+ [window setShowOffset:NSMakePoint(0, 0)];
+
+ [window setMovableByWindowBackground:NO];
+ [window setFastShow:YES];
+ [window setHasShadow:YES];
+
+ [window setFrame:standardRect display:YES];
+
+ NSArray *theControls = [NSArray arrayWithObjects:dSelector, aSelector, iSelector, nil];
+ for(QSSearchObjectView *theControl in theControls) {
+ QSObjectCell *theCell = [theControl cell];
+
+ [theControl setPreferredEdge:NSMinYEdge];
+ [(QSWindow *)[(theControl)->resultController window] setHideOffset:NSMakePoint(0, NSMinY([iSelector frame]))];
+ [(QSWindow *)[(theControl)->resultController window] setShowOffset:NSMakePoint(0, NSMinY([dSelector frame]))];
+
+ [theCell setBackgroundColor:[NSColor clearColor]];
+ [theCell setFont:[NSFont systemFontOfSize:11 weight:NSFontWeightLight]];
+ [theCell setCellRadiusFactor:8];
+
+ [theCell setHighlightColor:[NSColor colorWithRed:1 green:1 blue:1 alpha:.15]];
+ [theCell setTextColor:[NSColor colorWithWhite:.8 alpha:1]];
+ [theCell setShowDetails:NO];
+ [theCell setState:NSControlStateValueOn];
+ [theCell setIconSize:QSSize128];
+ [theCell setImagePosition:NSImageAbove];
+ }
+
+ [self contractWindow:nil];
+}
+
+- (NSSize) maxIconSize {
+ return QSSize32;
+}
+
+- (void)showMainWindow:(id)sender {
+ [[self window] setFrame:[self rectForState:[self expanded]] display:YES];
+ if ([[self window] isVisible]) [[self window] pulse:self];
+ [super showMainWindow:sender];
+ // Does this need to be here?
+ [[[self window] contentView] setNeedsDisplay:YES];
+}
+
+- (void)expandWindow:(id)sender {
+ if (![self expanded])
+ [[self window] setFrame:[self rectForState:YES] display:YES animate:YES];
+ [super expandWindow:sender];
+}
+
+- (void)contractWindow:(id)sender {
+ if ([self expanded])
+ [[self window] setFrame:[self rectForState:NO] display:YES animate:YES];
+ [super contractWindow:sender];
+}
+
+- (NSRect)rectForState:(BOOL)shouldExpand {
+ NSRect newRect = initialRect;
+ NSRect screenRect = [[NSScreen mainScreen] frame];
+
+ if (!shouldExpand) {
+ newRect.size.width -= 208;
+ }
+
+ return NSOffsetRect(centerRectInRect(newRect, screenRect), 0, (NSHeight(screenRect) / 5));
+}
+
+- (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect {
+ return NSOffsetRect(NSInsetRect(rect, 8, 0), 0, 0);
+}
+
+- (NSTimeInterval)animationResizeTime:(NSRect)newWindowFrame {
+ return 0.01;
+}
+
+@end
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+ <dependencies>
+ <deployment identifier="macosx"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <objects>
+ <customObject id="-2" userLabel="File's Owner" customClass="BBFlatBezelInterface">
+ <connections>
+ <outlet property="aSelector" destination="69" id="79"/>
+ <outlet property="commandView" destination="191" id="207"/>
+ <outlet property="dSelector" destination="68" id="75"/>
+ <outlet property="iSelector" destination="70" id="80"/>
+ <outlet property="menuButton" destination="209" id="210"/>
+ <outlet property="progressIndicator" destination="192" id="211"/>
+ <outlet property="window" destination="9" id="78"/>
+ </connections>
+ </customObject>
+ <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+ <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+ <window title="Bezel Interface" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="9" userLabel="mainWindow" customClass="QSBorderlessWindow">
+ <windowStyleMask key="styleMask" titled="YES" closable="YES" nonactivatingPanel="YES"/>
+ <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+ <rect key="contentRect" x="530" y="653" width="648" height="200"/>
+ <rect key="screenRect" x="0.0" y="0.0" width="1512" height="944"/>
+ <value key="minSize" type="size" width="440" height="200"/>
+ <view key="contentView" id="6" customClass="BBBackgroundView">
+ <rect key="frame" x="0.0" y="0.0" width="648" height="200"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <customView translatesAutoresizingMaskIntoConstraints="NO" id="68" customClass="BBCollectingSearchObjectView">
+ <rect key="frame" x="0.0" y="0.0" width="200" height="200"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="200" id="SwQ-fC-3aw"/>
+ <constraint firstAttribute="width" constant="200" id="Zol-hr-3Bk"/>
+ </constraints>
+ <connections>
+ <outlet property="nextKeyView" destination="69" id="105"/>
+ </connections>
+ </customView>
+ <customView translatesAutoresizingMaskIntoConstraints="NO" id="69" customClass="BBSearchObjectView">
+ <rect key="frame" x="208" y="0.0" width="200" height="200"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="200" id="O3w-M3-b05"/>
+ <constraint firstAttribute="height" constant="200" id="XPL-72-l7r"/>
+ </constraints>
+ <connections>
+ <outlet property="nextKeyView" destination="70" id="106"/>
+ </connections>
+ </customView>
+ <customView translatesAutoresizingMaskIntoConstraints="NO" id="70" customClass="BBCollectingSearchObjectView">
+ <rect key="frame" x="416" y="0.0" width="200" height="200"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="200" id="Jbn-VW-sSJ"/>
+ <constraint firstAttribute="height" constant="200" id="X3X-S6-KrY"/>
+ </constraints>
+ <connections>
+ <outlet property="nextKeyView" destination="68" id="104"/>
+ </connections>
+ </customView>
+ <progressIndicator horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="192">
+ <rect key="frame" x="624" y="8" width="16" height="16"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="16" id="Py4-hV-7HG"/>
+ </constraints>
+ </progressIndicator>
+ <button translatesAutoresizingMaskIntoConstraints="NO" id="209" customClass="QSMenuButton">
+ <rect key="frame" x="624" y="176" width="16" height="16"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="16" id="cvg-xh-bvD"/>
+ <constraint firstAttribute="width" constant="16" id="w12-Bf-x2f"/>
+ </constraints>
+ <buttonCell key="cell" type="square" title="▾" bezelStyle="shadowlessSquare" alignment="center" transparent="YES" inset="2" id="216">
+ <behavior key="behavior" lightByContents="YES"/>
+ <font key="font" metaFont="system"/>
+ </buttonCell>
+ <color key="contentTintColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+ </button>
+ <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="191">
+ <rect key="frame" x="622" y="176" width="20" height="16"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="16" id="Yy8-MR-Hc2"/>
+ <constraint firstAttribute="width" constant="16" id="coj-vh-kaj"/>
+ </constraints>
+ <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" alignment="center" title="⏷" id="214">
+ <font key="font" metaFont="system"/>
+ <color key="textColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+ </textFieldCell>
+ </textField>
+ </subviews>
+ <constraints>
+ <constraint firstItem="209" firstAttribute="top" secondItem="6" secondAttribute="top" constant="8" id="1uj-pU-uJB"/>
+ <constraint firstItem="70" firstAttribute="leading" secondItem="69" secondAttribute="trailing" constant="8" id="3iK-bw-ky1"/>
+ <constraint firstAttribute="bottom" secondItem="192" secondAttribute="bottom" constant="8" id="ASY-5E-0bJ"/>
+ <constraint firstAttribute="trailing" secondItem="191" secondAttribute="trailing" constant="8" id="EMC-Sk-VX7"/>
+ <constraint firstAttribute="trailing" secondItem="192" secondAttribute="trailing" constant="8" id="S36-iH-Apn"/>
+ <constraint firstItem="69" firstAttribute="leading" secondItem="68" secondAttribute="trailing" constant="8" id="VOZ-kp-hVQ"/>
+ <constraint firstAttribute="trailing" secondItem="209" secondAttribute="trailing" constant="8" id="ZBS-80-x88"/>
+ <constraint firstItem="69" firstAttribute="top" secondItem="6" secondAttribute="top" id="Zec-BE-M9X"/>
+ <constraint firstItem="70" firstAttribute="top" secondItem="6" secondAttribute="top" id="jQN-Vd-Qm0"/>
+ <constraint firstItem="191" firstAttribute="top" secondItem="209" secondAttribute="bottom" constant="-16" id="jqz-xK-7Wg"/>
+ <constraint firstItem="68" firstAttribute="leading" secondItem="6" secondAttribute="leading" id="m72-ls-RGc"/>
+ <constraint firstItem="68" firstAttribute="top" secondItem="6" secondAttribute="top" id="msf-m2-n1U"/>
+ </constraints>
+ </view>
+ <connections>
+ <outlet property="delegate" destination="-2" id="81"/>
+ <outlet property="initialFirstResponder" destination="68" id="111"/>
+ </connections>
+ <point key="canvasLocation" x="76" y="-42"/>
+ </window>
+ </objects>
+</document>
--- /dev/null
+#import <QSInterface/QSInterface.h>
+
+@interface BBSearchObjectView : QSSearchObjectView
+@end
+
+@interface BBCollectingSearchObjectView : QSCollectingSearchObjectView
+@end
+
+@interface BBObjectCell : QSObjectCell
+@end
--- /dev/null
+#import "BBSearchObjectView.h"
+
+@implementation BBSearchObjectView
++ (Class)cellClass { return [BBObjectCell class]; }
+
+@end
+
+@implementation BBCollectingSearchObjectView
++ (Class)cellClass { return [BBObjectCell class]; }
+
+- (void)drawRect:(NSRect)rect {
+ NSRect frame = [self frame];
+ NSInteger count = [collection count];
+ if (![self currentEditor] && count) {
+ frame.origin = NSZeroPoint;
+ [[self cell] drawWithFrame:frame inView:self];
+ NSInteger i;
+ CGFloat iconSize = collectionSpace?collectionSpace:16;
+ CGFloat opacity = collecting?1.0:0.75;
+ QSObject *object;
+ CGFloat totalWidth = iconSize + 2;
+ for (i = 0; i<count; i++) {
+ object = [collection objectAtIndex:i];
+ NSImage *icon = [object icon];
+ [icon setSize:QSSize16];
+ [icon drawInRect:NSMakeRect(frame.size.width-totalWidth*(count-i), frame.origin.y+2, iconSize, iconSize) fromRect:rectFromSize([icon size]) operation:NSCompositingOperationSourceOver fraction:opacity];
+ }
+ } else {
+ [super drawRect:rect];
+ }
+}
+
+- (NSRect)textEditorFrame {
+ NSRect titleFrame = [self frame];
+ NSRect editorFrame = NSInsetRect(titleFrame, 8, 8);
+ editorFrame.origin = NSMakePoint(8, 8);
+ editorFrame = NSIntegralRect(editorFrame);
+ return editorFrame;
+}
+
+
+@end
+
+@implementation BBObjectCell
+
+- (NSCellImagePosition)preferredImagePosition {
+ return NSImageAbove;
+}
+
+- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
+ BOOL isFirstResponder = [[controlView window] firstResponder] == controlView && ![controlView isKindOfClass:[NSTableView class]];
+ BOOL dropTarget = ([self isHighlighted] && ([self highlightsBy] & NSChangeBackgroundCellMask) && ![self isBezeled]);
+
+ NSColor *fillColor;
+ NSColor *strokeColor = [NSColor clearColor];
+
+ if (isFirstResponder) {
+ fillColor = [self highlightColor];
+ } else {
+ fillColor = [self backgroundColor];
+ }
+
+ if (dropTarget) {
+ fillColor = [NSColor colorWithRed:0.77 green:0.91 blue:0.96 alpha:1];
+ }
+
+ [fillColor setFill];
+ [strokeColor setStroke];
+
+ NSBezierPath *roundRect = [NSBezierPath bezierPath];
+ [roundRect appendBezierPathWithRoundedRectangle:cellFrame withRadius:cellRadiusFactor];
+ [roundRect fill];
+
+ [self drawInteriorWithFrame:[self drawingRectForBounds:cellFrame] inView:controlView];
+}
+
+- (NSRect)titleRectForBounds:(NSRect)theRect
+{
+ NSRect rect = theRect;
+ rect = NSOffsetRect(rect, 0, -4);
+ return [super titleRectForBounds: rect];
+}
+
+- (void)drawTextForObject:(QSObject *)drawObject withFrame:(NSRect)cellFrame inView:(NSView *)controlView {
+ if ([self imagePosition] == NSImageOnly) return;
+
+ NSString *abbrString = nil;
+ if ([controlView respondsToSelector:@selector(matchedString)])
+ abbrString = [(QSSearchObjectView *)controlView matchedString];
+
+ NSString *nameString = nil;
+ NSIndexSet *hitMask = nil;
+
+ id ranker = [drawObject ranker];
+ if (ranker && abbrString)
+ nameString = [ranker matchedStringForAbbreviation:abbrString hitmask:&hitMask inContext:nil];
+
+ if (!nameString)
+ nameString = [drawObject displayName];
+
+ BOOL rankedStringIsName = [nameString isEqualToString:[drawObject displayName]] || nameString == nil;
+ if (!nameString) {
+ // fall back to the identifier if no reasonable name can be found
+ nameString = [drawObject identifier];
+ }
+ if (!nameString) {
+ // Couldn't find anything sensible to use for the name, fallback to avoid a crash
+ nameString = @"Unknown";
+ }
+
+ BOOL useAlternateColor = [controlView isKindOfClass:[NSTableView class]] && [(NSTableView *)controlView isRowSelected:[(NSTableView *)controlView rowAtPoint:cellFrame.origin]];
+ NSColor *mainColor = (textColor ? textColor : (useAlternateColor ? [NSColor alternateSelectedControlTextColor] : [NSColor controlTextColor]));
+ NSColor *fadedColor = [mainColor colorWithAlphaComponent:0.50];
+ NSRect textDrawRect = [self titleRectForBounds:cellFrame];
+
+ NSMutableAttributedString *titleString = [[[NSMutableAttributedString alloc] initWithString:nameString] autorelease];
+ [titleString setAttributes:rankedStringIsName ? nameAttributes : detailsAttributes range:NSMakeRange(0, [titleString length])];
+
+ // Bring out the matched letters
+ if (abbrString && ![abbrString hasPrefix:@"QSActionMnemonic"]) {
+ [titleString addAttribute:NSForegroundColorAttributeName value:rankedStringIsName ? fadedColor : [fadedColor colorWithAlphaComponent:0.8] range:NSMakeRange(0, [titleString length])];
+
+ NSUInteger i = 0;
+ NSUInteger j = 0;
+ NSUInteger hits[[titleString length]];
+ NSUInteger count = [hitMask getIndexes:(NSUInteger *)&hits maxCount:[titleString length] inIndexRange:nil];
+ NSDictionary *attributes = @{
+ NSForegroundColorAttributeName: rankedStringIsName ? mainColor : fadedColor
+ };
+ for(i = 0; i<count; i += j) {
+ for (j = 1; i+j<count && hits[i+j-1] +1 == hits[i+j]; j++);
+ [titleString addAttributes:attributes range:NSMakeRange(hits[i], j)];
+ }
+ } else {
+ [titleString addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithDouble:-1.0] range:NSMakeRange(0, [titleString length])];
+ }
+//
+// // Ranked string and nameString aren't the same. Show 'nameString ⟷ rankedString' in the UI
+// if (!rankedStringIsName && [drawObject displayName].length) {
+// [titleString addAttribute:NSFontAttributeName value:detailsFont range:NSMakeRange(0,[titleString length])];
+// NSMutableAttributedString *attributedNameString = [[NSMutableAttributedString alloc] initWithString:[drawObject displayName]];
+// [attributedNameString setAttributes:nameAttributes range:NSMakeRange(0, [[drawObject displayName] length])];
+//
+// [attributedNameString appendAttributedString:[[[NSAttributedString alloc] initWithString:@" ⟷ " attributes:rankedNameAttributes] autorelease]];
+// // the replaceCharacters... method inserts the new string into the receiver at the start of the work (range.location and range.length are 0)
+// [titleString replaceCharactersInRange:NSMakeRange(0,0) withAttributedString:attributedNameString];
+// [attributedNameString release];
+// }
+
+ if (showDetails) {
+ NSString *detailsString = [drawObject details];
+
+ NSRange returnRange = [detailsString rangeOfString:@"\n"];
+ if (returnRange.location != NSNotFound) {
+ detailsString = [detailsString substringToIndex:returnRange.location];
+ }
+
+ detailsAttributes = [detailsAttributes mutableCopy];
+ [detailsAttributes setValue:[NSColor grayColor] forKey:NSForegroundColorAttributeName];
+
+ if (detailsString && detailsString.length && ![detailsString isEqualToString:nameString]) {
+ [titleString appendAttributedString:[[[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"\n%@",detailsString] attributes:detailsAttributes] autorelease]];
+ }
+ }
+
+ NSRect centerRect = rectFromSize([titleString size]);
+ centerRect.size.width = NSWidth(textDrawRect);
+ centerRect.size.height = MIN(NSHeight(textDrawRect), centerRect.size.height);
+ [titleString drawInRect:centerRectInRect(centerRect, textDrawRect)];
+}
+
+@end
+
+
+
+
--- /dev/null
+/* Localized versions of Info.plist keys */
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDisplayName</key>
+ <string>Flat Bezel Interface</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Flat Bezel Interface</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>2.0</string>
+ <key>CFBundleVersion</key>
+ <string>6</string>
+ <key>QSRequirements</key>
+ <dict>
+ <key>minHostVersion</key>
+ <string>4039</string>
+ </dict>
+ <key>QSPlugIn</key>
+ <dict>
+ <key>author</key>
+ <string>Ruben Beltran del Rio</string>
+ <key>categories</key>
+ <array>
+ <string>Interfaces</string>
+ </array>
+ <key>description</key>
+ <string>A new take on the Bezel Interface, using a flatter look.</string>
+ <key>extendedDescription</key>
+ <string><h2>Flat Bezel Interface</h2>
+<p>A new take on the Bezel Interface, using a flatter look.</p>
+<h3>Colors</h3>
+<p>Both light mode and dark mode are supported by this plugin. Choose your color preferences by enabling the Flat Bezel interface in the Appearance preferences, and then clicking the 'Customize' button.</p>
+
+
+<h3>Credits</h3>
+
+This plugin was created by Ruben Beltran del Río, building on top of the Yosemite interface that was originally built by Mikkel Malmberg (<a href="https://github.com/mikker/">@mikker</a>), and updated by the Patrick Robertson and the Quicksilver Development Team.</string>
+ </dict>
+ <key>QSRegistration</key>
+ <dict>
+ <key>QSPreferencePanes</key>
+ <dict>
+ <key>BBFlatBezelPrefs</key>
+ <dict>
+ <key>class</key>
+ <string>BBFlatBezelPrefs</string>
+ <key>description</key>
+ <string>Flat Bezel interface preferences</string>
+ <key>icon</key>
+ <string></string>
+ <key>name</key>
+ <string>Flat Bezel</string>
+ <key>nibBundle</key>
+ <string>pizza.unlimited.Flat-Bezel</string>
+ <key>nibName</key>
+ <string>BBFlatBezelPrefs</string>
+ <key>type</key>
+ <string>hidden</string>
+ </dict>
+ </dict>
+ <key>QSCommandInterfaceControllers</key>
+ <dict>
+ <key>Flat Bezel</key>
+ <string>BBFlatBezelInterface</string>
+ </dict>
+ </dict>
+</dict>
+</plist>
--- /dev/null
+The MIT License (MIT)
+
+Copyright (c) 2015 Mikkel Malmberg
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null
+### Flat Bezel qsplugin
+
+**To-do: Add Screenshot**
+
+Pre-alpha development.
+
+A new take on the Bezel Interface, using a flatter look.