]> git.r.bdr.sh - rbdr/Flat-Bezel.qsplugin/commitdiff
Initial Commit
authorRuben Beltran del Rio <redacted>
Wed, 8 Feb 2023 15:45:16 +0000 (16:45 +0100)
committerRuben Beltran del Rio <redacted>
Wed, 8 Feb 2023 15:45:16 +0000 (16:45 +0100)
18 files changed:
.gitignore [new file with mode: 0644]
Flat Bezel.xcodeproj/project.pbxproj [new file with mode: 0644]
Flat Bezel.xcodeproj/xcshareddata/xcschemes/Flat Bezel.xcscheme [new file with mode: 0644]
Flat Bezel/BBBackgroundView.h [new file with mode: 0644]
Flat Bezel/BBBackgroundView.m [new file with mode: 0644]
Flat Bezel/BBFlatBezelInterface.h [new file with mode: 0644]
Flat Bezel/BBFlatBezelInterface.m [new file with mode: 0644]
Flat Bezel/BBFlatBezelInterface.xib [new file with mode: 0644]
Flat Bezel/BBSearchObjectView.h [new file with mode: 0644]
Flat Bezel/BBSearchObjectView.m [new file with mode: 0644]
Flat Bezel/en.lproj/InfoPlist.strings [new file with mode: 0644]
Flat Bezel/gear-black.png [new file with mode: 0755]
Flat Bezel/gear-white.png [new file with mode: 0755]
Flat Bezel/search-black.png [new file with mode: 0755]
Flat Bezel/search-white.png [new file with mode: 0755]
Info.plist [new file with mode: 0644]
LICENSE [new file with mode: 0644]
README.md [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..45257f8
--- /dev/null
@@ -0,0 +1,19 @@
+.svn
+.DS_Store
+._.*
+*.o
+build
+Makefile
+autom4te.cache
+*~
+*.pbxuser
+*.perspectivev3
+*.mode1v3
+*.mode2v3
+*.pbxuser
+*.tm_build_errors
+*.tmproj
+Developer.xcconfig
+*.xcworkspace
+*.xcuserdatad
+/release
diff --git a/Flat Bezel.xcodeproj/project.pbxproj b/Flat Bezel.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..6c886d5
--- /dev/null
@@ -0,0 +1,335 @@
+// !$*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 */;
+}
diff --git a/Flat Bezel.xcodeproj/xcshareddata/xcschemes/Flat Bezel.xcscheme b/Flat Bezel.xcodeproj/xcshareddata/xcschemes/Flat Bezel.xcscheme
new file mode 100644 (file)
index 0000000..2812b46
--- /dev/null
@@ -0,0 +1,72 @@
+<?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>
diff --git a/Flat Bezel/BBBackgroundView.h b/Flat Bezel/BBBackgroundView.h
new file mode 100644 (file)
index 0000000..1c699a2
--- /dev/null
@@ -0,0 +1,5 @@
+#import <QSInterface/QSInterface.h>
+
+@interface BBBackgroundView : QSBezelBackgroundView
+
+@end
diff --git a/Flat Bezel/BBBackgroundView.m b/Flat Bezel/BBBackgroundView.m
new file mode 100644 (file)
index 0000000..7aff10b
--- /dev/null
@@ -0,0 +1,24 @@
+#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
diff --git a/Flat Bezel/BBFlatBezelInterface.h b/Flat Bezel/BBFlatBezelInterface.h
new file mode 100644 (file)
index 0000000..301542d
--- /dev/null
@@ -0,0 +1,9 @@
+@interface BBFlatBezelInterface : QSResizingInterfaceController {
+       NSRect standardRect;
+}
+
+@end
+
+@interface NSWindow (QSBCInterfaceController)
+- (NSTimeInterval)animationResizeTime:(NSRect)newWindowFrame;
+@end
diff --git a/Flat Bezel/BBFlatBezelInterface.m b/Flat Bezel/BBFlatBezelInterface.m
new file mode 100644 (file)
index 0000000..a191f81
--- /dev/null
@@ -0,0 +1,99 @@
+#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
diff --git a/Flat Bezel/BBFlatBezelInterface.xib b/Flat Bezel/BBFlatBezelInterface.xib
new file mode 100644 (file)
index 0000000..75378c6
--- /dev/null
@@ -0,0 +1,115 @@
+<?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>
diff --git a/Flat Bezel/BBSearchObjectView.h b/Flat Bezel/BBSearchObjectView.h
new file mode 100644 (file)
index 0000000..b60a637
--- /dev/null
@@ -0,0 +1,10 @@
+#import <QSInterface/QSInterface.h>
+
+@interface BBSearchObjectView : QSSearchObjectView
+@end
+
+@interface BBCollectingSearchObjectView : QSCollectingSearchObjectView
+@end
+
+@interface BBObjectCell : QSObjectCell
+@end
diff --git a/Flat Bezel/BBSearchObjectView.m b/Flat Bezel/BBSearchObjectView.m
new file mode 100644 (file)
index 0000000..ba88b0b
--- /dev/null
@@ -0,0 +1,176 @@
+#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
+
+
+
+
diff --git a/Flat Bezel/en.lproj/InfoPlist.strings b/Flat Bezel/en.lproj/InfoPlist.strings
new file mode 100644 (file)
index 0000000..477b28f
--- /dev/null
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/Flat Bezel/gear-black.png b/Flat Bezel/gear-black.png
new file mode 100755 (executable)
index 0000000..3ebdfe6
Binary files /dev/null and b/Flat Bezel/gear-black.png differ
diff --git a/Flat Bezel/gear-white.png b/Flat Bezel/gear-white.png
new file mode 100755 (executable)
index 0000000..169f6cb
Binary files /dev/null and b/Flat Bezel/gear-white.png differ
diff --git a/Flat Bezel/search-black.png b/Flat Bezel/search-black.png
new file mode 100755 (executable)
index 0000000..e85640e
Binary files /dev/null and b/Flat Bezel/search-black.png differ
diff --git a/Flat Bezel/search-white.png b/Flat Bezel/search-white.png
new file mode 100755 (executable)
index 0000000..e6048b7
Binary files /dev/null and b/Flat Bezel/search-white.png differ
diff --git a/Info.plist b/Info.plist
new file mode 100644 (file)
index 0000000..e6b3015
--- /dev/null
@@ -0,0 +1,78 @@
+<?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>&lt;h2&gt;Flat Bezel Interface&lt;/h2&gt;
+&lt;p&gt;A new take on the Bezel Interface, using a flatter look.&lt;/p&gt;
+&lt;h3&gt;Colors&lt;/h3&gt;
+&lt;p&gt;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 &apos;Customize&apos; button.&lt;/p&gt;
+
+
+&lt;h3&gt;Credits&lt;/h3&gt;
+
+This plugin was created by Ruben Beltran del Río, building on top of the Yosemite interface that was originally built by Mikkel Malmberg (&lt;a href=&quot;https://github.com/mikker/&quot;&gt;@mikker&lt;/a&gt;), 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>
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..8960702
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+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.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..b8e9d5e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,7 @@
+### Flat Bezel qsplugin
+
+**To-do: Add Screenshot**
+
+Pre-alpha development.
+
+A new take on the Bezel Interface, using a flatter look.