From bb5daa2e90623691a5259700b9d388d2d21f46d3 Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Thu, 4 Sep 2025 11:11:37 +0200 Subject: Rename to Liquid Glass Bezel, add preferences --- Flat Bezel.xcodeproj/project.pbxproj | 355 -------------------- .../xcshareddata/xcschemes/Flat Bezel.xcscheme | 72 ---- Flat Bezel/BBFlatBezelInterface.h | 9 - Flat Bezel/BBFlatBezelInterface.m | 99 ------ Flat Bezel/BBFlatBezelInterface.xib | 103 ------ Flat Bezel/BBObjectCell.h | 4 - Flat Bezel/BBObjectCell.m | 211 ------------ Flat Bezel/BackgroundView.swift | 88 ----- Flat Bezel/FlatBezel-Bridging-Header.h | 2 - .../FlatBezelCollectingSearchObjectView.swift | 38 --- Flat Bezel/FlatBezelObjectCell.swift | 164 --------- Flat Bezel/FlatBezelSearchObjectView.swift | 6 - Flat Bezel/en.lproj/InfoPlist.strings | 2 - Info.plist | 30 +- .../BBLiquidGlassBezelPrefs.h | 18 + .../BBLiquidGlassBezelPrefs.m | 21 ++ Liquid Glass Bezel.xcodeproj/project.pbxproj | 369 +++++++++++++++++++++ .../xcschemes/Liquid Glass Bezel.xcscheme | 72 ++++ Liquid Glass Bezel/BBLiquidGlassBezelInterface.h | 9 + Liquid Glass Bezel/BBLiquidGlassBezelInterface.m | 103 ++++++ Liquid Glass Bezel/BBLiquidGlassBezelInterface.xib | 102 ++++++ Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h | 6 + Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m | 10 + Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h | 10 + Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m | 13 + Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib | 56 ++++ Liquid Glass Bezel/BBObjectCell.h | 4 + Liquid Glass Bezel/BBObjectCell.m | 211 ++++++++++++ Liquid Glass Bezel/BackgroundView.swift | 88 +++++ .../LiquidGlassBezel-Bridging-Header.h | 2 + ...iquidGlassBezelCollectingSearchObjectView.swift | 38 +++ .../LiquidGlassBezelObjectCell.swift | 164 +++++++++ .../LiquidGlassBezelSearchObjectView.swift | 6 + Liquid Glass Bezel/en.lproj/InfoPlist.strings | 2 + README.md | 6 +- scripts/build.sh | 6 +- 36 files changed, 1324 insertions(+), 1175 deletions(-) delete mode 100644 Flat Bezel.xcodeproj/project.pbxproj delete mode 100644 Flat Bezel.xcodeproj/xcshareddata/xcschemes/Flat Bezel.xcscheme delete mode 100644 Flat Bezel/BBFlatBezelInterface.h delete mode 100644 Flat Bezel/BBFlatBezelInterface.m delete mode 100644 Flat Bezel/BBFlatBezelInterface.xib delete mode 100644 Flat Bezel/BBObjectCell.h delete mode 100644 Flat Bezel/BBObjectCell.m delete mode 100644 Flat Bezel/BackgroundView.swift delete mode 100644 Flat Bezel/FlatBezel-Bridging-Header.h delete mode 100644 Flat Bezel/FlatBezelCollectingSearchObjectView.swift delete mode 100644 Flat Bezel/FlatBezelObjectCell.swift delete mode 100644 Flat Bezel/FlatBezelSearchObjectView.swift delete mode 100644 Flat Bezel/en.lproj/InfoPlist.strings create mode 100644 Liquid Glass Bezel.xcodeproj/BBLiquidGlassBezelPrefs.h create mode 100644 Liquid Glass Bezel.xcodeproj/BBLiquidGlassBezelPrefs.m create mode 100644 Liquid Glass Bezel.xcodeproj/project.pbxproj create mode 100644 Liquid Glass Bezel.xcodeproj/xcshareddata/xcschemes/Liquid Glass Bezel.xcscheme create mode 100644 Liquid Glass Bezel/BBLiquidGlassBezelInterface.h create mode 100644 Liquid Glass Bezel/BBLiquidGlassBezelInterface.m create mode 100644 Liquid Glass Bezel/BBLiquidGlassBezelInterface.xib create mode 100644 Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h create mode 100644 Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m create mode 100644 Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h create mode 100644 Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m create mode 100644 Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib create mode 100644 Liquid Glass Bezel/BBObjectCell.h create mode 100644 Liquid Glass Bezel/BBObjectCell.m create mode 100644 Liquid Glass Bezel/BackgroundView.swift create mode 100644 Liquid Glass Bezel/LiquidGlassBezel-Bridging-Header.h create mode 100644 Liquid Glass Bezel/LiquidGlassBezelCollectingSearchObjectView.swift create mode 100644 Liquid Glass Bezel/LiquidGlassBezelObjectCell.swift create mode 100644 Liquid Glass Bezel/LiquidGlassBezelSearchObjectView.swift create mode 100644 Liquid Glass Bezel/en.lproj/InfoPlist.strings diff --git a/Flat Bezel.xcodeproj/project.pbxproj b/Flat Bezel.xcodeproj/project.pbxproj deleted file mode 100644 index 9dd19c0..0000000 --- a/Flat Bezel.xcodeproj/project.pbxproj +++ /dev/null @@ -1,355 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 42447D7D19407DA00077B4B2 /* BBObjectCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42447D7C19407DA00077B4B2 /* BBObjectCell.m */; }; - 42663058193CC1FA00C0DD31 /* BBFlatBezelInterface.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42663057193CC1FA00C0DD31 /* BBFlatBezelInterface.xib */; }; - B576D2F52993FBD400A8B645 /* BackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576D2F42993FBD400A8B645 /* BackgroundView.swift */; }; - B59AD27F2997AC2F006DA797 /* FlatBezelSearchObjectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AD27E2997AC2F006DA797 /* FlatBezelSearchObjectView.swift */; }; - B59AD2812997AE4A006DA797 /* FlatBezelCollectingSearchObjectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AD2802997AE4A006DA797 /* FlatBezelCollectingSearchObjectView.swift */; }; - B59AD2852997B860006DA797 /* FlatBezelObjectCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AD2842997B860006DA797 /* FlatBezelObjectCell.swift */; }; - 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 */ - 42447D7B19407DA00077B4B2 /* BBObjectCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBObjectCell.h; sourceTree = ""; }; - 42447D7C19407DA00077B4B2 /* BBObjectCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBObjectCell.m; sourceTree = ""; }; - 42663057193CC1FA00C0DD31 /* BBFlatBezelInterface.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BBFlatBezelInterface.xib; sourceTree = ""; }; - B576D2F42993FBD400A8B645 /* BackgroundView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundView.swift; sourceTree = ""; }; - B576D2F62993FD7500A8B645 /* FlatBezel-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FlatBezel-Bridging-Header.h"; sourceTree = ""; }; - B59AD27E2997AC2F006DA797 /* FlatBezelSearchObjectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlatBezelSearchObjectView.swift; sourceTree = ""; }; - B59AD2802997AE4A006DA797 /* FlatBezelCollectingSearchObjectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlatBezelCollectingSearchObjectView.swift; sourceTree = ""; }; - B59AD2842997B860006DA797 /* FlatBezelObjectCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlatBezelObjectCell.swift; sourceTree = ""; }; - 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 = ""; }; - E470B7EB1709F3A0000169F2 /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; }; - E470B7EC1709F3A0000169F2 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E470B7ED1709F3A0000169F2 /* Developer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Developer.xcconfig; sourceTree = ""; }; - E470B7EE1709F3A0000169F2 /* QSPlugIn.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = QSPlugIn.xcconfig; sourceTree = ""; }; - E470B7EF1709F3A0000169F2 /* Quicksilver.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Quicksilver.pch; sourceTree = ""; }; - E470B7F01709F3A0000169F2 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - E470B7F61709F3A0000169F2 /* BBFlatBezelInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBFlatBezelInterface.h; sourceTree = ""; }; - E470B7F71709F3A0000169F2 /* BBFlatBezelInterface.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBFlatBezelInterface.m; sourceTree = ""; }; -/* 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 = ""; - }; - E470B7E01709F3A0000169F2 /* Products */ = { - isa = PBXGroup; - children = ( - E470B7DF1709F3A0000169F2 /* Flat Bezel.qsplugin */, - ); - name = Products; - sourceTree = ""; - }; - E470B7E11709F3A0000169F2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E470B7E21709F3A0000169F2 /* Cocoa.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E470B7E41709F3A0000169F2 /* Flat Bezel */ = { - isa = PBXGroup; - children = ( - E470B7EA1709F3A0000169F2 /* Configuration */, - E470B7E51709F3A0000169F2 /* Supporting Files */, - 42447D7B19407DA00077B4B2 /* BBObjectCell.h */, - 42447D7C19407DA00077B4B2 /* BBObjectCell.m */, - E470B7F61709F3A0000169F2 /* BBFlatBezelInterface.h */, - E470B7F71709F3A0000169F2 /* BBFlatBezelInterface.m */, - 42663057193CC1FA00C0DD31 /* BBFlatBezelInterface.xib */, - B576D2F42993FBD400A8B645 /* BackgroundView.swift */, - B59AD27E2997AC2F006DA797 /* FlatBezelSearchObjectView.swift */, - B59AD2802997AE4A006DA797 /* FlatBezelCollectingSearchObjectView.swift */, - B59AD2842997B860006DA797 /* FlatBezelObjectCell.swift */, - ); - path = "Flat Bezel"; - sourceTree = ""; - }; - E470B7E51709F3A0000169F2 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - E470B7E61709F3A0000169F2 /* Info.plist */, - E470B7E71709F3A0000169F2 /* InfoPlist.strings */, - B576D2F62993FD7500A8B645 /* FlatBezel-Bridging-Header.h */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 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 = ""; - }; -/* 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 = 1420; - ORGANIZATIONNAME = BRNBW; - TargetAttributes = { - E470B7DE1709F3A0000169F2 = { - DevelopmentTeam = S68NHQVJXW; - LastSwiftMigration = 1410; - ProvisioningStyle = Automatic; - }; - }; - }; - 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 = ( - 42663058193CC1FA00C0DD31 /* BBFlatBezelInterface.xib in Resources */, - E470B7E91709F3A0000169F2 /* InfoPlist.strings 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 = ( - B59AD2812997AE4A006DA797 /* FlatBezelCollectingSearchObjectView.swift in Sources */, - B576D2F52993FBD400A8B645 /* BackgroundView.swift in Sources */, - 42447D7D19407DA00077B4B2 /* BBObjectCell.m in Sources */, - E470B7F81709F3A0000169F2 /* BBFlatBezelInterface.m in Sources */, - B59AD2852997B860006DA797 /* FlatBezelObjectCell.swift in Sources */, - B59AD27F2997AC2F006DA797 /* FlatBezelSearchObjectView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - E470B7E71709F3A0000169F2 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - E470B7E81709F3A0000169F2 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - DEAD_CODE_STRIPPING = 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - DEAD_CODE_STRIPPING = YES; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - SWIFT_COMPILATION_MODE = wholemodule; - }; - name = Release; - }; - E470B7FC1709F3A0000169F2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E470B7EE1709F3A0000169F2 /* QSPlugIn.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 10; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = S68NHQVJXW; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 26; - MARKETING_VERSION = 1.1.0; - PRODUCT_BUNDLE_IDENTIFIER = "pizza.unlimited.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "Flat Bezel"; - PROVISIONING_PROFILE_SPECIFIER = ""; - 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; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 10; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = S68NHQVJXW; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 26; - MARKETING_VERSION = 1.1.0; - PRODUCT_BUNDLE_IDENTIFIER = "pizza.unlimited.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "Flat Bezel"; - PROVISIONING_PROFILE_SPECIFIER = ""; - 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 deleted file mode 100644 index 3a26b25..0000000 --- a/Flat Bezel.xcodeproj/xcshareddata/xcschemes/Flat Bezel.xcscheme +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Flat Bezel/BBFlatBezelInterface.h b/Flat Bezel/BBFlatBezelInterface.h deleted file mode 100644 index 301542d..0000000 --- a/Flat Bezel/BBFlatBezelInterface.h +++ /dev/null @@ -1,9 +0,0 @@ -@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 deleted file mode 100644 index 47af67f..0000000 --- a/Flat Bezel/BBFlatBezelInterface.m +++ /dev/null @@ -1,99 +0,0 @@ -#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:32]; - - [theCell setHighlightColor:[NSColor colorWithRed:1 green:1 blue:1 alpha:.15]]; - [theCell setTextColor:[NSColor textColor]]; - [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 -= 192; - } - - 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 deleted file mode 100644 index b6fd59e..0000000 --- a/Flat Bezel/BBFlatBezelInterface.xib +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Flat Bezel/BBObjectCell.h b/Flat Bezel/BBObjectCell.h deleted file mode 100644 index 3fa67c6..0000000 --- a/Flat Bezel/BBObjectCell.h +++ /dev/null @@ -1,4 +0,0 @@ -#import - -@interface BBObjectCell : QSObjectCell -@end diff --git a/Flat Bezel/BBObjectCell.m b/Flat Bezel/BBObjectCell.m deleted file mode 100644 index 7bf1b3c..0000000 --- a/Flat Bezel/BBObjectCell.m +++ /dev/null @@ -1,211 +0,0 @@ -#import "BBObjectCell.h" - -@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 = [NSColor selectedTextBackgroundColor]; - } else { - fillColor = [NSColor clearColor]; - } - - if (dropTarget) { - fillColor = [NSColor controlAccentColor]; - } - - [fillColor setFill]; - [strokeColor setStroke]; - - NSBezierPath *roundRect = [NSBezierPath bezierPath]; - [roundRect appendBezierPathWithRoundedRectangle:cellFrame withRadius:NSHeight(cellFrame)/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 NSControl.ImagePosition { - return .imageAbove - } - - override func draw(withFrame cellFrame: NSRect, in controlView: NSView?) { - if let controlView { - - let isFirstResponder = controlView.window?.firstResponder == controlView && !(controlView is NSTableView) - let dropTarget = isHighlighted && ((highlightsBy.rawValue & NSCell.StyleMask.changeBackgroundCellMask.rawValue) != 0) && !isBezeled - - var fillColor: NSColor? - let strokeColor = NSColor.clear - - if isFirstResponder { - fillColor = self.highlightColor() - } else { - fillColor = self.backgroundColor - } - - if dropTarget { - fillColor = NSColor(red: 0.77, green: 0.91, blue: 0.96, alpha: 1) - } - - fillColor?.setFill() - strokeColor.setStroke() - - let roundRect = NSBezierPath() - roundRect.append(withRoundedRectangle: cellFrame, withRadius: cellRadiusFactor()) - roundRect.fill() - - drawInterior(withFrame: drawingRect(forBounds: cellFrame), in: controlView) - } - } - - override func titleRect(forBounds _rect: NSRect) -> NSRect { - var rect = _rect - rect = NSOffsetRect(rect, 0, -4) - return super.titleRect(forBounds: rect) - } - - override func drawText(for drawObject: QSObject!, withFrame cellFrame: NSRect, in controlView: NSView!) { - if imagePosition == .imageOnly { - return - } - - var abbrString: String? = nil - - if controlView.responds(to: #selector(QSSearchObjectView.matchedString)) { - abbrString = (controlView as! QSSearchObjectView).matchedString() - } - - var nameString: String? = nil - var hitMask: NSIndexSet? = nil - - let ranker = drawObject.ranker() - if ranker != nil && abbrString != nil { - nameString = ranker?.matchedString(forAbbreviation: abbrString, hitmask: &hitMask, inContext: nil) - } - - if (nameString == nil) { - nameString = drawObject.displayName() - } - - let rankedStringIsName = nameString == drawObject.displayName() || nameString == nil - - if nameString == nil { - nameString = drawObject.identifier() ?? "Unknown" - } - - let useAlternateColor = controlView is NSTableView && (controlView as! NSTableView).isRowSelected((controlView as! NSTableView).row(at: cellFrame.origin)) - let mainColor = textColor() ?? (useAlternateColor ? .alternateSelectedControlTextColor : .controlTextColor) - let fadedColor = mainColor.withAlphaComponent(0.50) - let textDrawRect = titleRect(forBounds: cellFrame) - - - let titleString = NSMutableAttributedString(string: nameString!) - let nameAttributes = (value(forKey: "nameAttributes") as? [NSAttributedString.Key : Any]) - let detailsAttributes = (value(forKey: "detailsAttributes") as? [NSAttributedString.Key : Any]) - titleString.setAttributes(rankedStringIsName ? nameAttributes : detailsAttributes, range: NSMakeRange(0, titleString.length)) - - if abbrString != nil && abbrString!.hasPrefix("QSActionMnemonic") { - titleString.addAttribute(.foregroundColor, value: rankedStringIsName ? fadedColor : fadedColor.withAlphaComponent(0.8), range: NSMakeRange(0, titleString.length)) - - var hits: Int = 0 - let count = hitMask?.getIndexes(&hits, maxCount: titleString.length, inIndexRange: nil) - for i in 0..<(count ?? 0) { - for j in 1.. { - } - } - } -} - - 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; iCFBundleDevelopmentRegion English CFBundleDisplayName - Flat Bezel Interface + Liquid Glass Bezel Interface CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier @@ -13,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - Flat Bezel Interface + Liquid Glass Bezel Interface CFBundlePackageType BNDL CFBundleShortVersionString @@ -29,41 +29,41 @@ Interfaces description - A new take on the Bezel Interface, using a flatter look. + The classic Bezel Quicksilver interface, but now in liquid glass. extendedDescription - <h2>Flat Bezel Interface</h2> -<p>A new take on the Bezel Interface, using a flatter look.</p> + <h2>Liquid Glass Bezel Interface</h2> +<p>The classic Bezel Quicksilver interface, but now in liquid glass.</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> +<p>Both light mode and dark mode are supported by this plugin. Choose your color preferences by enabling the Liquid Glass 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. +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. QSRegistration QSCommandInterfaceControllers - Flat Bezel - BBFlatBezelInterface + Liquid Glass Bezel + BBLiquidGlassBezelInterface QSPreferencePanes - BBFlatBezelPrefs + BBLiquidGlassBezelPrefs class - BBFlatBezelPrefs + BBLiquidGlassBezelPrefs description - Flat Bezel interface preferences + Liquid Glass Bezel interface preferences icon name - Flat Bezel + Liquid Glass Bezel nibBundle - pizza.unlimited.Flat-Bezel + pizza.unlimited.Liquid-Glass-Bezel nibName - BBFlatBezelPrefs + BBLiquidGlassBezelPrefs type hidden diff --git a/Liquid Glass Bezel.xcodeproj/BBLiquidGlassBezelPrefs.h b/Liquid Glass Bezel.xcodeproj/BBLiquidGlassBezelPrefs.h new file mode 100644 index 0000000..bf14a58 --- /dev/null +++ b/Liquid Glass Bezel.xcodeproj/BBLiquidGlassBezelPrefs.h @@ -0,0 +1,18 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BBLiquidGlassBezelPrefs : QSPreferencePane { + // Add your preference outlets here + // For example: + // IBOutlet NSButton *enableEffectsButton; + // IBOutlet NSSlider *opacitySlider; +} + +// Add any preference action methods here +// - (IBAction)toggleEffects:(id)sender; +// - (IBAction)adjustOpacity:(id)sender; + +@end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Liquid Glass Bezel.xcodeproj/BBLiquidGlassBezelPrefs.m b/Liquid Glass Bezel.xcodeproj/BBLiquidGlassBezelPrefs.m new file mode 100644 index 0000000..88d838d --- /dev/null +++ b/Liquid Glass Bezel.xcodeproj/BBLiquidGlassBezelPrefs.m @@ -0,0 +1,21 @@ +// +// BBLiquidGlassBezelPrefs.m +// Liquid Glass Bezel +// +// Created by Ruben Beltran del Rio on 2025-09-04. +// Copyright © 2025 BRNBW. All rights reserved. +// + +#import "BBLiquidGlassBezelPrefs.h" + +@implementation BBLiquidGlassBezelPrefs + +- (id)init { + return [self initWithBundle:[NSBundle bundleForClass:[self class]]]; +} + +- (NSString *)mainNibName { + return @"BBLiquidGlassBezelPrefs"; +} + +@end \ No newline at end of file diff --git a/Liquid Glass Bezel.xcodeproj/project.pbxproj b/Liquid Glass Bezel.xcodeproj/project.pbxproj new file mode 100644 index 0000000..4ac4f8a --- /dev/null +++ b/Liquid Glass Bezel.xcodeproj/project.pbxproj @@ -0,0 +1,369 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 42447D7D19407DA00077B4B2 /* BBObjectCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42447D7C19407DA00077B4B2 /* BBObjectCell.m */; }; + 42663058193CC1FA00C0DD31 /* BBLiquidGlassBezelInterface.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42663057193CC1FA00C0DD31 /* BBLiquidGlassBezelInterface.xib */; }; + B576D2F52993FBD400A8B645 /* BackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576D2F42993FBD400A8B645 /* BackgroundView.swift */; }; + B57CEE502E698DEC00628387 /* BBLiquidGlassBezelPrefs 2.m in Sources */ = {isa = PBXBuildFile; fileRef = B57CEE4F2E698DEC00628387 /* BBLiquidGlassBezelPrefs 2.m */; }; + B57CEE522E698E7100628387 /* BBLiquidGlassBezelPrefs.xib in Resources */ = {isa = PBXBuildFile; fileRef = B57CEE512E698E7100628387 /* BBLiquidGlassBezelPrefs.xib */; }; + B59AD27F2997AC2F006DA797 /* LiquidGlassBezelSearchObjectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AD27E2997AC2F006DA797 /* LiquidGlassBezelSearchObjectView.swift */; }; + B59AD2812997AE4A006DA797 /* LiquidGlassBezelCollectingSearchObjectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AD2802997AE4A006DA797 /* LiquidGlassBezelCollectingSearchObjectView.swift */; }; + B59AD2852997B860006DA797 /* LiquidGlassBezelObjectCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B59AD2842997B860006DA797 /* LiquidGlassBezelObjectCell.swift */; }; + E470B7E31709F3A0000169F2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E470B7E21709F3A0000169F2 /* Cocoa.framework */; }; + E470B7E91709F3A0000169F2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E470B7E71709F3A0000169F2 /* InfoPlist.strings */; }; + E470B7F81709F3A0000169F2 /* BBLiquidGlassBezelInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = E470B7F71709F3A0000169F2 /* BBLiquidGlassBezelInterface.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 42447D7B19407DA00077B4B2 /* BBObjectCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBObjectCell.h; sourceTree = ""; }; + 42447D7C19407DA00077B4B2 /* BBObjectCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBObjectCell.m; sourceTree = ""; }; + 42663057193CC1FA00C0DD31 /* BBLiquidGlassBezelInterface.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BBLiquidGlassBezelInterface.xib; sourceTree = ""; }; + B576D2F42993FBD400A8B645 /* BackgroundView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundView.swift; sourceTree = ""; }; + B576D2F62993FD7500A8B645 /* LiquidGlassBezel-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "LiquidGlassBezel-Bridging-Header.h"; sourceTree = ""; }; + B57CEE4A2E6987E700628387 /* BBLiquidGlassBezelPrefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBLiquidGlassBezelPrefs.h; sourceTree = ""; }; + B57CEE4B2E69881000628387 /* BBLiquidGlassBezelPrefs.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBLiquidGlassBezelPrefs.m; sourceTree = ""; }; + B57CEE4E2E698DE900628387 /* BBLiquidGlassBezelPrefs 2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BBLiquidGlassBezelPrefs 2.h"; sourceTree = ""; }; + B57CEE4F2E698DEC00628387 /* BBLiquidGlassBezelPrefs 2.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "BBLiquidGlassBezelPrefs 2.m"; sourceTree = ""; }; + B57CEE512E698E7100628387 /* BBLiquidGlassBezelPrefs.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BBLiquidGlassBezelPrefs.xib; sourceTree = ""; }; + B59AD27E2997AC2F006DA797 /* LiquidGlassBezelSearchObjectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidGlassBezelSearchObjectView.swift; sourceTree = ""; }; + B59AD2802997AE4A006DA797 /* LiquidGlassBezelCollectingSearchObjectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidGlassBezelCollectingSearchObjectView.swift; sourceTree = ""; }; + B59AD2842997B860006DA797 /* LiquidGlassBezelObjectCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidGlassBezelObjectCell.swift; sourceTree = ""; }; + E470B7DF1709F3A0000169F2 /* Liquid Glass Bezel.qsplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Liquid Glass 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 = ""; }; + E470B7EB1709F3A0000169F2 /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; }; + E470B7EC1709F3A0000169F2 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + E470B7ED1709F3A0000169F2 /* Developer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Developer.xcconfig; sourceTree = ""; }; + E470B7EE1709F3A0000169F2 /* QSPlugIn.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = QSPlugIn.xcconfig; sourceTree = ""; }; + E470B7EF1709F3A0000169F2 /* Quicksilver.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Quicksilver.pch; sourceTree = ""; }; + E470B7F01709F3A0000169F2 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + E470B7F61709F3A0000169F2 /* BBLiquidGlassBezelInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBLiquidGlassBezelInterface.h; sourceTree = ""; }; + E470B7F71709F3A0000169F2 /* BBLiquidGlassBezelInterface.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBLiquidGlassBezelInterface.m; sourceTree = ""; }; +/* 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 /* Liquid Glass Bezel */, + ); + sourceTree = ""; + }; + E470B7E01709F3A0000169F2 /* Products */ = { + isa = PBXGroup; + children = ( + E470B7DF1709F3A0000169F2 /* Liquid Glass Bezel.qsplugin */, + ); + name = Products; + sourceTree = ""; + }; + E470B7E11709F3A0000169F2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E470B7E21709F3A0000169F2 /* Cocoa.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E470B7E41709F3A0000169F2 /* Liquid Glass Bezel */ = { + isa = PBXGroup; + children = ( + B57CEE4A2E6987E700628387 /* BBLiquidGlassBezelPrefs.h */, + B57CEE4B2E69881000628387 /* BBLiquidGlassBezelPrefs.m */, + E470B7EA1709F3A0000169F2 /* Configuration */, + E470B7E51709F3A0000169F2 /* Supporting Files */, + 42447D7B19407DA00077B4B2 /* BBObjectCell.h */, + 42447D7C19407DA00077B4B2 /* BBObjectCell.m */, + E470B7F61709F3A0000169F2 /* BBLiquidGlassBezelInterface.h */, + E470B7F71709F3A0000169F2 /* BBLiquidGlassBezelInterface.m */, + 42663057193CC1FA00C0DD31 /* BBLiquidGlassBezelInterface.xib */, + B576D2F42993FBD400A8B645 /* BackgroundView.swift */, + B59AD27E2997AC2F006DA797 /* LiquidGlassBezelSearchObjectView.swift */, + B59AD2802997AE4A006DA797 /* LiquidGlassBezelCollectingSearchObjectView.swift */, + B59AD2842997B860006DA797 /* LiquidGlassBezelObjectCell.swift */, + B57CEE4E2E698DE900628387 /* BBLiquidGlassBezelPrefs 2.h */, + B57CEE4F2E698DEC00628387 /* BBLiquidGlassBezelPrefs 2.m */, + B57CEE512E698E7100628387 /* BBLiquidGlassBezelPrefs.xib */, + ); + path = "Liquid Glass Bezel"; + sourceTree = ""; + }; + E470B7E51709F3A0000169F2 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + E470B7E61709F3A0000169F2 /* Info.plist */, + E470B7E71709F3A0000169F2 /* InfoPlist.strings */, + B576D2F62993FD7500A8B645 /* LiquidGlassBezel-Bridging-Header.h */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 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 = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E470B7DE1709F3A0000169F2 /* Liquid Glass Bezel */ = { + isa = PBXNativeTarget; + buildConfigurationList = E470B7FB1709F3A0000169F2 /* Build configuration list for PBXNativeTarget "Liquid Glass Bezel" */; + buildPhases = ( + E470B7DA1709F3A0000169F2 /* ShellScript */, + E470B7DB1709F3A0000169F2 /* Sources */, + E470B7DC1709F3A0000169F2 /* Frameworks */, + E470B7DD1709F3A0000169F2 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Liquid Glass Bezel"; + productName = SquareBezel; + productReference = E470B7DF1709F3A0000169F2 /* Liquid Glass Bezel.qsplugin */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E470B7D61709F3A0000169F2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1420; + ORGANIZATIONNAME = BRNBW; + TargetAttributes = { + E470B7DE1709F3A0000169F2 = { + DevelopmentTeam = S68NHQVJXW; + LastSwiftMigration = 1410; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = E470B7D91709F3A0000169F2 /* Build configuration list for PBXProject "Liquid Glass Bezel" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + ); + mainGroup = E470B7D51709F3A0000169F2; + productRefGroup = E470B7E01709F3A0000169F2 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E470B7DE1709F3A0000169F2 /* Liquid Glass Bezel */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E470B7DD1709F3A0000169F2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 42663058193CC1FA00C0DD31 /* BBLiquidGlassBezelInterface.xib in Resources */, + B57CEE522E698E7100628387 /* BBLiquidGlassBezelPrefs.xib in Resources */, + E470B7E91709F3A0000169F2 /* InfoPlist.strings 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 = ( + B59AD2812997AE4A006DA797 /* LiquidGlassBezelCollectingSearchObjectView.swift in Sources */, + B576D2F52993FBD400A8B645 /* BackgroundView.swift in Sources */, + 42447D7D19407DA00077B4B2 /* BBObjectCell.m in Sources */, + B57CEE502E698DEC00628387 /* BBLiquidGlassBezelPrefs 2.m in Sources */, + E470B7F81709F3A0000169F2 /* BBLiquidGlassBezelInterface.m in Sources */, + B59AD2852997B860006DA797 /* LiquidGlassBezelObjectCell.swift in Sources */, + B59AD27F2997AC2F006DA797 /* LiquidGlassBezelSearchObjectView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + E470B7E71709F3A0000169F2 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + E470B7E81709F3A0000169F2 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + DEAD_CODE_STRIPPING = 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + DEAD_CODE_STRIPPING = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + SWIFT_COMPILATION_MODE = wholemodule; + }; + name = Release; + }; + E470B7FC1709F3A0000169F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E470B7EE1709F3A0000169F2 /* QSPlugIn.xcconfig */; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 10; + DEAD_CODE_STRIPPING = YES; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = S68NHQVJXW; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 26; + MARKETING_VERSION = 1.1.0; + PRODUCT_BUNDLE_IDENTIFIER = "pizza.unlimited.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "Liquid Glass Bezel"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Liquid Glass Bezel/LiquidGlassBezel-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; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 10; + DEAD_CODE_STRIPPING = YES; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = S68NHQVJXW; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 26; + MARKETING_VERSION = 1.1.0; + PRODUCT_BUNDLE_IDENTIFIER = "pizza.unlimited.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "Liquid Glass Bezel"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Liquid Glass Bezel/LiquidGlasssBezel-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E470B7D91709F3A0000169F2 /* Build configuration list for PBXProject "Liquid Glass Bezel" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E470B7F91709F3A0000169F2 /* Debug */, + E470B7FA1709F3A0000169F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E470B7FB1709F3A0000169F2 /* Build configuration list for PBXNativeTarget "Liquid Glass Bezel" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E470B7FC1709F3A0000169F2 /* Debug */, + E470B7FD1709F3A0000169F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E470B7D61709F3A0000169F2 /* Project object */; +} diff --git a/Liquid Glass Bezel.xcodeproj/xcshareddata/xcschemes/Liquid Glass Bezel.xcscheme b/Liquid Glass Bezel.xcodeproj/xcshareddata/xcschemes/Liquid Glass Bezel.xcscheme new file mode 100644 index 0000000..758e9cf --- /dev/null +++ b/Liquid Glass Bezel.xcodeproj/xcshareddata/xcschemes/Liquid Glass Bezel.xcscheme @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelInterface.h b/Liquid Glass Bezel/BBLiquidGlassBezelInterface.h new file mode 100644 index 0000000..d4671fd --- /dev/null +++ b/Liquid Glass Bezel/BBLiquidGlassBezelInterface.h @@ -0,0 +1,9 @@ +@interface BBLiquidGlassBezelInterface : QSResizingInterfaceController { + NSRect standardRect; +} + +@end + +@interface NSWindow (QSBCInterfaceController) +- (NSTimeInterval)animationResizeTime:(NSRect)newWindowFrame; +@end diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelInterface.m b/Liquid Glass Bezel/BBLiquidGlassBezelInterface.m new file mode 100644 index 0000000..335eacd --- /dev/null +++ b/Liquid Glass Bezel/BBLiquidGlassBezelInterface.m @@ -0,0 +1,103 @@ +#import "BBLiquidGlassBezelInterface.h" + +@interface BBLiquidGlassBezelInterface () { + CGRect initialRect; +} +@end + +@implementation BBLiquidGlassBezelInterface + +- (id)init { + return [self initWithWindowNibName:@"BBLiquidGlassBezelInterface"]; +} + +- (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:32]; + + [theCell setHighlightColor:[NSColor colorWithRed:1 green:1 blue:1 alpha:.15]]; + [theCell setTextColor:[NSColor textColor]]; + [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 -= 192; + } + + 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; +} + +- (IBAction)customize:(id)sender{ + [[NSClassFromString(@"QSPreferencesController") sharedInstance] showPaneWithIdentifier:@"BBLiquidGlassBezelPrefs"]; +} + +@end diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelInterface.xib b/Liquid Glass Bezel/BBLiquidGlassBezelInterface.xib new file mode 100644 index 0000000..db6f979 --- /dev/null +++ b/Liquid Glass Bezel/BBLiquidGlassBezelInterface.xib @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h new file mode 100644 index 0000000..36c5177 --- /dev/null +++ b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.h @@ -0,0 +1,6 @@ +#import +NS_ASSUME_NONNULL_BEGIN +@interface BBLiquidGlassBezelPrefs : QSPreferencePane { +} +@end +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m new file mode 100644 index 0000000..4e57c7a --- /dev/null +++ b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs 2.m @@ -0,0 +1,10 @@ +// +// BBLiquidGlassBezelPrefs.h +// Liquid Glass Bezel +// +// Created by Ruben Beltran del Rio on 2025-09-04. +// Copyright © 2025 BRNBW. All rights reserved. +// +#import "BBLiquidGlassBezelPrefs.h" +@implementation BBLiquidGlassBezelPrefs +@end \ No newline at end of file diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h new file mode 100644 index 0000000..2ce6bb6 --- /dev/null +++ b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.h @@ -0,0 +1,10 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BBLiquidGlassBezelPrefs : QSPreferencePane { + +} +@end + +NS_ASSUME_NONNULL_END diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m new file mode 100644 index 0000000..1deb432 --- /dev/null +++ b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.m @@ -0,0 +1,13 @@ +// +// BBLiquidGlassBezelPrefs.h +// Liquid Glass Bezel +// +// Created by Ruben Beltran del Rio on 2025-09-04. +// Copyright © 2025 BRNBW. All rights reserved. +// + +#import "BBLiquidGlassBezelPrefs.h" + +@implementation BBLiquidGlassBezelPrefs + +@end diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib new file mode 100644 index 0000000..41e51fd --- /dev/null +++ b/Liquid Glass Bezel/BBLiquidGlassBezelPrefs.xib @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Liquid Glass Bezel/BBObjectCell.h b/Liquid Glass Bezel/BBObjectCell.h new file mode 100644 index 0000000..3fa67c6 --- /dev/null +++ b/Liquid Glass Bezel/BBObjectCell.h @@ -0,0 +1,4 @@ +#import + +@interface BBObjectCell : QSObjectCell +@end diff --git a/Liquid Glass Bezel/BBObjectCell.m b/Liquid Glass Bezel/BBObjectCell.m new file mode 100644 index 0000000..7bf1b3c --- /dev/null +++ b/Liquid Glass Bezel/BBObjectCell.m @@ -0,0 +1,211 @@ +#import "BBObjectCell.h" + +@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 = [NSColor selectedTextBackgroundColor]; + } else { + fillColor = [NSColor clearColor]; + } + + if (dropTarget) { + fillColor = [NSColor controlAccentColor]; + } + + [fillColor setFill]; + [strokeColor setStroke]; + + NSBezierPath *roundRect = [NSBezierPath bezierPath]; + [roundRect appendBezierPathWithRoundedRectangle:cellFrame withRadius:NSHeight(cellFrame)/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 NSControl.ImagePosition { + return .imageAbove + } + + override func draw(withFrame cellFrame: NSRect, in controlView: NSView?) { + if let controlView { + + let isFirstResponder = controlView.window?.firstResponder == controlView && !(controlView is NSTableView) + let dropTarget = isHighlighted && ((highlightsBy.rawValue & NSCell.StyleMask.changeBackgroundCellMask.rawValue) != 0) && !isBezeled + + var fillColor: NSColor? + let strokeColor = NSColor.clear + + if isFirstResponder { + fillColor = self.highlightColor() + } else { + fillColor = self.backgroundColor + } + + if dropTarget { + fillColor = NSColor(red: 0.77, green: 0.91, blue: 0.96, alpha: 1) + } + + fillColor?.setFill() + strokeColor.setStroke() + + let roundRect = NSBezierPath() + roundRect.append(withRoundedRectangle: cellFrame, withRadius: cellRadiusFactor()) + roundRect.fill() + + drawInterior(withFrame: drawingRect(forBounds: cellFrame), in: controlView) + } + } + + override func titleRect(forBounds _rect: NSRect) -> NSRect { + var rect = _rect + rect = NSOffsetRect(rect, 0, -4) + return super.titleRect(forBounds: rect) + } + + override func drawText(for drawObject: QSObject!, withFrame cellFrame: NSRect, in controlView: NSView!) { + if imagePosition == .imageOnly { + return + } + + var abbrString: String? = nil + + if controlView.responds(to: #selector(QSSearchObjectView.matchedString)) { + abbrString = (controlView as! QSSearchObjectView).matchedString() + } + + var nameString: String? = nil + var hitMask: NSIndexSet? = nil + + let ranker = drawObject.ranker() + if ranker != nil && abbrString != nil { + nameString = ranker?.matchedString(forAbbreviation: abbrString, hitmask: &hitMask, inContext: nil) + } + + if (nameString == nil) { + nameString = drawObject.displayName() + } + + let rankedStringIsName = nameString == drawObject.displayName() || nameString == nil + + if nameString == nil { + nameString = drawObject.identifier() ?? "Unknown" + } + + let useAlternateColor = controlView is NSTableView && (controlView as! NSTableView).isRowSelected((controlView as! NSTableView).row(at: cellFrame.origin)) + let mainColor = textColor() ?? (useAlternateColor ? .alternateSelectedControlTextColor : .controlTextColor) + let fadedColor = mainColor.withAlphaComponent(0.50) + let textDrawRect = titleRect(forBounds: cellFrame) + + + let titleString = NSMutableAttributedString(string: nameString!) + let nameAttributes = (value(forKey: "nameAttributes") as? [NSAttributedString.Key : Any]) + let detailsAttributes = (value(forKey: "detailsAttributes") as? [NSAttributedString.Key : Any]) + titleString.setAttributes(rankedStringIsName ? nameAttributes : detailsAttributes, range: NSMakeRange(0, titleString.length)) + + if abbrString != nil && abbrString!.hasPrefix("QSActionMnemonic") { + titleString.addAttribute(.foregroundColor, value: rankedStringIsName ? fadedColor : fadedColor.withAlphaComponent(0.8), range: NSMakeRange(0, titleString.length)) + + var hits: Int = 0 + let count = hitMask?.getIndexes(&hits, maxCount: titleString.length, inIndexRange: nil) + for i in 0..<(count ?? 0) { + for j in 1.. { + } + } + } +} + + 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 /dev/stderr output_path="/tmp/QS/build/Release/Quicksilver.app/Contents/PlugIns/" -plugin_name="Flat Bezel.qsplugin" +plugin_name="Liquid Glass Bezel.qsplugin" codesign --force -vvv --deep --sign ${SIGNING_IDENTITY} "${output_path}${plugin_name}" echo "Signing complete, archiving." > /dev/stderr -archive_name="Flat_Bezel.qsplugin.tar.gz" +archive_name="Liquid_Glass_Bezel.qsplugin.tar.gz" pushd "${output_path}" tar -czvf "${archive_name}" "${plugin_name}" popd -- cgit