diff --git a/AppKit/AppKit.j b/AppKit/AppKit.j index e73d58c53..43427701a 100644 --- a/AppKit/AppKit.j +++ b/AppKit/AppKit.j @@ -107,6 +107,7 @@ @import "CPView.j" @import "CPViewAnimation.j" @import "CPViewController.j" +@import "CPVisualEffectView.j" @import "CPWebView.j" @import "CPWindow.j" @import "CPWindowController.j" diff --git a/AppKit/CPVisualEffectView.j b/AppKit/CPVisualEffectView.j new file mode 100644 index 000000000..80d522e7c --- /dev/null +++ b/AppKit/CPVisualEffectView.j @@ -0,0 +1,236 @@ +/* + * CPVisualEffectView.j + * AppKit + * + * Created by Antoine Mercadal. + * Copyright 2015, 280 Cappuccino Project. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import +@import "CPAppearance.j" +@import "CPView.j" + +@typedef CPVisualEffectMaterial +CPVisualEffectMaterialAppearanceBased = 0; +CPVisualEffectMaterialLight = 1; +CPVisualEffectMaterialDark = 2; +CPVisualEffectMaterialTitlebar = 3; + +@typedef CPVisualEffectBlendingMode +CPVisualEffectBlendingModeBehindWindow = 0; +CPVisualEffectBlendingModeWithinWindow = 1; + +@typedef CPVisualEffectState +CPVisualEffectStateFollowsWindowActiveState = 0; +CPVisualEffectStateActive = 1; +CPVisualEffectStateInactive = 2; + + +/*! @ingroup appkit + + Very naive implementation of CPVisualEffectView. This view allows + to use vibrancy effect. This is only working with Safari 9+ and the + support in Chrome/ium should come quite soon. + Using this class with a browser that doesn't support backdrop-filter + While still work, but you will not get the blurry effect. +*/ +@implementation CPVisualEffectView : CPView +{ + CPImage _maskImage @accessors(property=maskImage); + CPVisualEffectBlendingMode _blendingMode @accessors(property=blendingMode); + CPVisualEffectMaterial _material @accessors(property=material); + CPVisualEffectState _state @accessors(property=state); +} + + +#pragma mark - +#pragma mark Initialization + +- (id)initWithFrame:(CGRect)aFrame +{ + if (self = [super initWithFrame:aFrame]) + { + _material = CPVisualEffectMaterialAppearanceBased; + _blendingMode = CPVisualEffectBlendingModeWithinWindow; + _state = CPVisualEffectStateFollowsWindowActiveState; + _appearance = [CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]; + } + + return self; +} + + +#pragma mark - +#pragma mark CPVisualEffectView API + +/*! Sets the appearance of the CPVisualEffectView. + + Only CPAppearance named CPAppearanceNameVibrantDark or CPAppearanceNameVibrantLight are valid + + @param anAppearance the CPAppearance. +*/ +- (void)setAppearance:(CPAppearance)anAppearance +{ + if (![self _validAppearance:anAppearance]) + [CPException raise:CPInvalidArgumentException reason:"Appearance can only be CPAppearanceNameVibrantDark or CPAppearanceNameVibrantLight in CPVisualEffectView, but is " + anAppearance]; + + [super setAppearance:anAppearance]; + [self _applyVibrancyState]; +} + +/*! Sets the received effect state. + Possible values: +
+    CPVisualEffectStateFollowsWindowActiveState (default)
+    CPVisualEffectStateActive
+    CPVisualEffectStateInactive
+    
+*/ +- (void)setState:(CPVisualEffectState)aState +{ + if (_state == aState) + return; + + [self willChangeValueForKey:"state"]; + _state = aState; + [self didChangeValueForKey:"state"]; + + [self _applyVibrancyState]; +} + + +#pragma mark - +#pragma mark Utilities + +- (void)_setEffectEnabled:(BOOL)shouldEnable +{ + var prop = CPBrowserStyleProperty("backdrop-filter"), + dark = [[self appearance] isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]], + darkColor = [CPColor colorWithHexString:@"1e1e1e"], + lightColor = [CPColor whiteColor]; + + if (shouldEnable) + { + if (prop) + self._DOMElement.style[prop] = "blur(30px)"; + [self setBackgroundColor:[(dark ? darkColor : lightColor) colorWithAlphaComponent:0.6]]; + } + else + { + if (prop) + self._DOMElement.style[prop] = nil; + + [self setBackgroundColor:(dark ? darkColor : lightColor)]; + } +} + +- (void)_applyVibrancyState +{ + switch (_state) + { + case CPVisualEffectStateFollowsWindowActiveState: + [self _setEffectEnabled:[self hasThemeState:CPThemeStateKeyWindow]]; + break; + + case CPVisualEffectStateActive: + [self _setEffectEnabled:YES]; + break; + + case CPVisualEffectStateInactive: + [self _setEffectEnabled:NO]; + break; + } +} + +- (BOOL)_validAppearance:(CPAppearance)anAppearance +{ + return [anAppearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantDark]] || [anAppearance isEqual:[CPAppearance appearanceNamed:CPAppearanceNameVibrantLight]]; +} + + +#pragma mark - +#pragma mark Overrides + +- (BOOL)setThemeState:(ThemeState)aState +{ + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + + var ret = [super setThemeState:aState]; + + [self _applyVibrancyState]; + + return ret; +} + +- (BOOL)unsetThemeState:(ThemeState)aState +{ + if (aState.isa && [aState isKindOfClass:CPArray]) + aState = CPThemeState.apply(null, aState); + + var ret = [super unsetThemeState:aState]; + + [self _applyVibrancyState]; + + return ret; +} + +- (void)viewDidMoveToSuperview +{ + [super viewDidMoveToSuperview]; + + if (_superview) + [self _applyVibrancyState]; +} + +- (void)viewDidMoveToWindow +{ + [super viewDidMoveToWindow]; + + if (_window) + [self _applyVibrancyState]; +} + + +#pragma mark - +#pragma mark CPCoding + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super initWithCoder:aCoder]) + { + _blendingMode = [aCoder decodeIntForKey:@"_blendingMode"] || CPVisualEffectBlendingModeWithinWindow; + _maskImage = [aCoder decodeObjectForKey:@"_maskImage"]; + _material = [aCoder decodeIntForKey:@"_material"] || CPVisualEffectMaterialAppearanceBased; + _state = [aCoder decodeIntForKey:@"_state"] || CPVisualEffectStateFollowsWindowActiveState; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [super encodeWithCoder:aCoder]; + + [aCoder encodeObject:_maskImage forKey:@"_maskImage"]; + [aCoder encodeInt:_blendingMode forKey:@"_blendingMode"]; + [aCoder encodeInt:_material forKey:@"_material"]; + [aCoder encodeInt:_state forKey:@"_state"]; +} + + +@end \ No newline at end of file diff --git a/Tests/Manual/CPVisualEffectViewTest/AppController.j b/Tests/Manual/CPVisualEffectViewTest/AppController.j new file mode 100644 index 000000000..7e5b0b159 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/AppController.j @@ -0,0 +1,14 @@ +/* + * AppController.j + * CPVisualEffectViewTest + * + * Created by You on August 13, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + +@implementation AppController : CPObject +// everything in the xib +@end diff --git a/Tests/Manual/CPVisualEffectViewTest/Info.plist b/Tests/Manual/CPVisualEffectViewTest/Info.plist new file mode 100644 index 000000000..074f91770 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/Info.plist @@ -0,0 +1,14 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + CPVisualEffectViewTest + CPBundleVersion + 1.0 + CPHumanReadableCopyright + Copyright © 2015, Your Company All rights reserved. + + diff --git a/Tests/Manual/CPVisualEffectViewTest/Jakefile b/Tests/Manual/CPVisualEffectViewTest/Jakefile new file mode 100644 index 000000000..690674428 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/Jakefile @@ -0,0 +1,184 @@ +/* + * Jakefile + * CPVisualEffectViewTest + * + * Created by You on August 13, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"), + projectName = "CPVisualEffectViewTest"; + +app (projectName, function(task) +{ + ENV["OBJJ_INCLUDE_PATHS"] = "Frameworks"; + + if (configuration === "Debug") + ENV["OBJJ_INCLUDE_PATHS"] = FILE.join(ENV["OBJJ_INCLUDE_PATHS"], configuration); + + task.setBuildIntermediatesPath(FILE.join("Build", "CPVisualEffectViewTest.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("CPVisualEffectViewTest"); + task.setIdentifier("com.yourcompany.CPVisualEffectViewTest"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("CPVisualEffectViewTest"); + task.setSources(new FileList("**/*.j").exclude(FILE.join("Build", "**")).exclude(FILE.join("Frameworks", "Source", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", [projectName], function() +{ + printResults(configuration); +}); + +task ("build", ["default"], function() +{ + updateApplicationSize(); +}); + +task ("debug", function() +{ + configuration = ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + configuration = ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", projectName, "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", projectName, "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", projectName)); + OS.system(["press", "-f", FILE.join("Build", "Release", projectName), FILE.join("Build", "Deployment", projectName)]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", projectName)); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", projectName), FILE.join("Build", "Desktop", projectName, "CPVisualEffectViewTest.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", projectName, "CPVisualEffectViewTest.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, projectName)); + print("----------------------------"); +} + +function updateApplicationSize() +{ + print("Calculating application file sizes..."); + + var contents = FILE.read(FILE.join("Build", configuration, projectName, "Info.plist"), { charset:"UTF-8" }), + format = CFPropertyList.sniffedFormatOfString(contents), + plist = CFPropertyList.propertyListFromString(contents), + totalBytes = {executable:0, data:0, mhtml:0}; + + // Get the size of all framework executables and sprite data + var frameworksDir = "Frameworks"; + + if (configuration === "Debug") + frameworksDir = FILE.join(frameworksDir, "Debug"); + + var frameworks = FILE.list(frameworksDir); + + frameworks.forEach(function(framework) + { + if (framework !== "Source") + addBundleFileSizes(FILE.join(frameworksDir, framework), totalBytes); + }); + + // Read in the default theme name, and attempt to get its size + var themeName = plist.valueForKey("CPDefaultTheme") || "Aristo2", + themePath = nil; + + if (themeName === "Aristo" || themeName === "Aristo2") + themePath = FILE.join(frameworksDir, "AppKit", "Resources", themeName + ".blend"); + else + themePath = FILE.join("Frameworks", "Resources", themeName + ".blend"); + + if (FILE.isDirectory(themePath)) + addBundleFileSizes(themePath, totalBytes); + + // Add sizes for the app + addBundleFileSizes(FILE.join("Build", configuration, projectName), totalBytes); + + print("Executables: " + totalBytes.executable + ", sprite data: " + totalBytes.data + ", total: " + (totalBytes.executable + totalBytes.data)); + + var dict = new CFMutableDictionary(); + + dict.setValueForKey("executable", totalBytes.executable); + dict.setValueForKey("data", totalBytes.data); + dict.setValueForKey("mhtml", totalBytes.mhtml); + + plist.setValueForKey("CPApplicationSize", dict); + + FILE.write(FILE.join("Build", configuration, projectName, "Info.plist"), CFPropertyList.stringFromPropertyList(plist, format), { charset:"UTF-8" }); +} + +function addBundleFileSizes(bundlePath, totalBytes) +{ + var bundleName = FILE.basename(bundlePath), + environment = bundleName === "Foundation" ? "Objj" : "Browser", + bundlePath = FILE.join(bundlePath, environment + ".environment"); + + if (FILE.isDirectory(bundlePath)) + { + var filename = bundleName + ".sj", + filePath = new FILE.Path(FILE.join(bundlePath, filename)); + + if (filePath.exists()) + totalBytes.executable += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "dataURLs.txt")); + + if (filePath.exists()) + totalBytes.data += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLData.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + + filePath = new FILE.Path(FILE.join(bundlePath, "MHTMLPaths.txt")); + + if (filePath.exists()) + totalBytes.mhtml += filePath.size(); + } +} diff --git a/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.cib b/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.cib new file mode 100644 index 000000000..13dbf7c19 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.cib @@ -0,0 +1,7 @@ +280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;0E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;0E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;4E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;0E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;1;7E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;11E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;13E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;15E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;1;0E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;11E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;41E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;12E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;42E;E;D;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;14E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;11E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;17E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;2;43E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;41E;E;D;K;6;$classD;K;6;CP$UIDd;2;10E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;44E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;45E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;46E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;47E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;48E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;49E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;50E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;21E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;53E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;53E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;54E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;21E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;58E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;59E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;21E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;61E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;63E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;66E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;68E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;63E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;52E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;69E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;57E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;71E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;64E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;63E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;57E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;57E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;45E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;46E;K;30;_CPCibWindowTemplateWTFlagsKeyD;K;6;CP$UIDd;2;72E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;73E;K;33;_CPCibWindowTemplateScreenRectKeyD;K;6;CP$UIDd;2;49E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;74E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;51E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;25E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;75E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;75E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;76E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;26E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;75E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;75E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;77E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;52E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;52E;K;15;$aimage-scalingD;K;6;CP$UIDd;2;78E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;80E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;63E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;52E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;69E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;K;28;CPImageViewImageAlignmentKeyD;K;6;CP$UIDd;2;52E;E;D;K;10;$classnameS;18;CPVisualEffectViewK;8;$classesA;S;18;CPVisualEffectViewS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;81E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;83E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;2;85E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;2;86E;K;9;_materialD;K;6;CP$UIDd;2;52E;K;6;_stateD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;29E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;87E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;29E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;61E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;2;89E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;90E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;63E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;52E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;69E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;57E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;71E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;64E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;64E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;57E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;57E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;91E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;92E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;2;93E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;2;86E;K;9;_materialD;K;6;CP$UIDd;2;52E;K;6;_stateD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;31E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;87E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;31E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;61E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;64E;K;12;$atext-colorD;K;6;CP$UIDd;2;95E;K;6;$afontD;K;6;CP$UIDd;2;96E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;2;97E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;63E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;52E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;69E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;57E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;71E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;64E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;64E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;57E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;57E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;98E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;99E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;2;85E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;2;86E;K;9;_materialD;K;6;CP$UIDd;2;52E;K;6;_stateD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;33E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;87E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;33E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;61E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;3;100E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;101E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;63E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;52E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;69E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;57E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;71E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;64E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;64E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;57E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;57E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;102E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;103E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;2;93E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;2;86E;K;9;_materialD;K;6;CP$UIDd;2;52E;K;6;_stateD;K;6;CP$UIDd;2;86E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;35E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;87E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;35E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;61E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;64E;K;12;$atext-colorD;K;6;CP$UIDd;3;104E;K;6;$afontD;K;6;CP$UIDd;3;105E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;106E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;63E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;52E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;69E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;57E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;71E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;64E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;64E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;57E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;57E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;107E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;108E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;2;85E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;2;86E;K;9;_materialD;K;6;CP$UIDd;2;52E;K;6;_stateD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;37E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;87E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;37E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;61E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;64E;K;6;$afontD;K;6;CP$UIDd;3;109E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;110E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;63E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;52E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;69E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;57E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;71E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;64E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;64E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;57E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;57E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;67E;E;D;K;6;$classD;K;6;CP$UIDd;2;28E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;25E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;111E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;82E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;3;112E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;25E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;1;0E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;55E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;2;93E;K;10;_maskImageD;K;6;CP$UIDd;1;0E;K;13;_blendingModeD;K;6;CP$UIDd;2;86E;K;9;_materialD;K;6;CP$UIDd;2;52E;K;6;_stateD;K;6;CP$UIDd;2;64E;E;D;K;6;$classD;K;6;CP$UIDd;2;22E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;39E;K;18;CPResponderMenuKeyD;K;6;CP$UIDd;1;0E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;52E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;87E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;88E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;39E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;60E;K;19;CPViewThemeClassKeyD;K;6;CP$UIDd;2;61E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;62E;K;11;$aalignmentD;K;6;CP$UIDd;2;64E;K;17;$aline-break-modeD;K;6;CP$UIDd;2;64E;K;12;$atext-colorD;K;6;CP$UIDd;3;113E;K;6;$afontD;K;6;CP$UIDd;3;114E;K;14;CPViewScaleKeyD;K;6;CP$UIDd;2;56E;K;18;CPViewSizeScaleKeyD;K;6;CP$UIDd;2;56E;K;17;CPViewIsScaledKeyD;K;6;CP$UIDd;2;57E;K;19;CPViewAppearanceKeyD;K;6;CP$UIDd;1;0E;K;35;CPControlSendsActionOnEndEditingKeyD;K;6;CP$UIDd;2;67E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;115E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;2;63E;K;23;CPControlControlSizeKeyD;K;6;CP$UIDd;2;52E;K;33;CPControlBaseWrittingDirectionKeyD;K;6;CP$UIDd;2;69E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;2;57E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;2;57E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;2;71E;K;27;CPTextFieldLineBreakModeKeyD;K;6;CP$UIDd;2;64E;K;23;CPTextFieldAlignmentKeyD;K;6;CP$UIDd;2;64E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldUsesSingleLineModeD;K;6;CP$UIDd;2;57E;K;16;CPTextFieldWrapsD;K;6;CP$UIDd;2;57E;K;18;CPTextFieldScrollsD;K;6;CP$UIDd;2;67E;E;S;13;CPApplicationD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;19E;D;K;6;CP$UIDd;2;24E;E;E;S;8;delegateS;13;AppControllerS;32;{10000000000000, 10000000000000}S;8;CPWindowd;10;1618478080S;22;{{100, 88}, {181, 67}}S;21;{{0, 0}, {1440, 877}}d;2;15S;6;Windowd;1;0S;19;{{0, 0}, {181, 67}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;23E;E;E;S;6;normalS;6;{1, 1}F;S;21;{{20, 25}, {141, 17}}S;19;{{0, 0}, {141, 17}}d;2;36S;9;textfieldS;18;controlSizeRegulard;1;4d;1;2D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;116E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;69E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;57E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;57E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;67E;E;T;S;23;Click me to loose focusd;2;-1D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;70E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;117E;E;d;10;1886912512S;24;{{303, 166}, {834, 545}}d;1;7S;20;{{0, 0}, {834, 545}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;39E;E;E;d;2;18d;1;3D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;79E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;118E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;119E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;121E;E;S;22;{{87, 15}, {215, 254}}S;20;{{0, 0}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;30E;E;E;D;K;10;$classnameS;12;CPAppearanceK;8;$classesA;S;12;CPAppearanceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;84E;K;5;_nameD;K;6;CP$UIDd;3;122E;K;15;_allowsVibrancyD;K;6;CP$UIDd;2;67E;E;d;1;1S;22;{{20, 110}, {175, 34}}S;19;{{0, 0}, {175, 34}}D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;116E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;69E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;67E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;57E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;67E;E;S;32;Vibrant Light +Follows Key WindowS;23;{{87, 277}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;32E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;84E;K;5;_nameD;K;6;CP$UIDd;3;123E;K;15;_allowsVibrancyD;K;6;CP$UIDd;2;67E;E;D;K;10;$classnameS;17;_CPThemeAttributeK;8;$classesA;S;17;_CPThemeAttributeS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;4;nameD;K;6;CP$UIDd;3;124E;K;12;defaultValueD;K;6;CP$UIDd;3;125E;K;6;valuesD;K;6;CP$UIDd;3;126E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;116E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;69E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;67E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;57E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;67E;E;S;31;Vibrant Dark +Follows Key WindowS;23;{{310, 15}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;34E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;116E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;69E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;67E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;57E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;67E;E;S;20;Vibrant Light +ActiveS;24;{{310, 277}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;36E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;4;nameD;K;6;CP$UIDd;3;124E;K;12;defaultValueD;K;6;CP$UIDd;3;125E;K;6;valuesD;K;6;CP$UIDd;3;127E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;116E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;69E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;67E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;57E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;67E;E;S;19;Vibrant Dark +ActiveS;23;{{533, 15}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;38E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;116E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;69E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;67E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;57E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;67E;E;S;22;Vibrant Light +InactiveS;24;{{533, 277}, {215, 254}}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;94E;K;4;nameD;K;6;CP$UIDd;3;124E;K;12;defaultValueD;K;6;CP$UIDd;3;125E;K;6;valuesD;K;6;CP$UIDd;3;128E;E;D;K;6;$classD;K;6;CP$UIDd;2;65E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;116E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;2;69E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;2;67E;K;17;CPFontIsItalicKeyD;K;6;CP$UIDd;2;57E;K;17;CPFontIsSystemKeyD;K;6;CP$UIDd;2;67E;E;S;21;Vibrant Dark +InactiveS;28;_CPFontSystemFacePlaceholderD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;3;129E;D;K;6;CP$UIDd;2;86E;E;E;S;7;CPImageS;14;background.jpgD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;131E;K;16;bundleIdentifierD;K;6;CP$UIDd;3;132E;K;9;frameworkD;K;6;CP$UIDd;3;132E;E;E;S;28;CPAppearanceNameVibrantLightS;27;CPAppearanceNameVibrantDarkS;10;text-colorD;K;6;$classD;K;6;CP$UIDd;2;70E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;133E;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;125E;K;6;normalD;K;6;CP$UIDd;3;134E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;125E;K;6;normalD;K;6;CP$UIDd;3;135E;E;E;D;K;6;$classD;K;6;CP$UIDd;3;120E;K;10;CP.objectsD;K;11;placeholderD;K;6;CP$UIDd;3;125E;K;6;normalD;K;6;CP$UIDd;3;136E;E;E;f;18;0.6862745098039216D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;130E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;137E;E;S;0;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;86E;E;E;D;K;6;$classD;K;6;CP$UIDd;2;70E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;138E;E;D;K;6;$classD;K;6;CP$UIDd;2;70E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;139E;E;D;K;6;$classD;K;6;CP$UIDd;2;70E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;140E;E;S;28;{"width":614.4,"height":401}D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;141E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;141E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;2;86E;D;K;6;CP$UIDd;3;141E;E;E;f;4;0.85E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E; \ No newline at end of file diff --git a/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.xib b/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.xib new file mode 100644 index 000000000..b26f85dd1 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/Resources/MainMenu.xib @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vibrant Light +Follows Key Window + + + + + + + + + + + + + + + + + + Vibrant Dark +Follows Key Window + + + + + + + + + + + + + + + + + + Vibrant Light +Active + + + + + + + + + + + + + + + + + + Vibrant Dark +Active + + + + + + + + + + + + + + + + + + Vibrant Light +Inactive + + + + + + + + + + + + + + + + + + Vibrant Dark +Inactive + + + + + + + + + + + + + + + + + diff --git a/Tests/Manual/CPVisualEffectViewTest/Resources/background.jpg b/Tests/Manual/CPVisualEffectViewTest/Resources/background.jpg new file mode 100644 index 000000000..0fe64744a Binary files /dev/null and b/Tests/Manual/CPVisualEffectViewTest/Resources/background.jpg differ diff --git a/Tests/Manual/CPVisualEffectViewTest/index-debug.html b/Tests/Manual/CPVisualEffectViewTest/index-debug.html new file mode 100644 index 000000000..c4d1557d3 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/index-debug.html @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + CPVisualEffectViewTest + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPVisualEffectViewTest/index.html b/Tests/Manual/CPVisualEffectViewTest/index.html new file mode 100644 index 000000000..af62486e2 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/index.html @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + CPVisualEffectViewTest + + + + + + + + + + + + +
+
+
+ +
+
+ +
+ + diff --git a/Tests/Manual/CPVisualEffectViewTest/main.j b/Tests/Manual/CPVisualEffectViewTest/main.j new file mode 100644 index 000000000..03e6d6d85 --- /dev/null +++ b/Tests/Manual/CPVisualEffectViewTest/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * CPVisualEffectViewTest + * + * Created by You on August 13, 2015. + * Copyright 2015, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} diff --git a/Tools/nib2cib/NSAppKit.j b/Tools/nib2cib/NSAppKit.j index 691872013..a45eac2e5 100644 --- a/Tools/nib2cib/NSAppKit.j +++ b/Tools/nib2cib/NSAppKit.j @@ -89,6 +89,7 @@ @import "NSPopover.j" @import "NSProgressIndicator.j" @import "NSAppearance.j" +@import "NSVisualEffectView.j" function CP_NSMapClassName(aClassName) diff --git a/Tools/nib2cib/NSVisualEffectView.j b/Tools/nib2cib/NSVisualEffectView.j new file mode 100644 index 000000000..809f5def2 --- /dev/null +++ b/Tools/nib2cib/NSVisualEffectView.j @@ -0,0 +1,57 @@ +/* + * NSVisualEffectView.j + * nib2cib + * + * Created by Antoine Mercadal. + * Copyright 2015, Cappuccino Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +@import + + +@implementation CPVisualEffectView (NSCoding) + +- (id)NS_initWithCoder:(CPCoder)aCoder +{ + if (self = [super NS_initWithCoder:aCoder]) + { + _material = [aCoder decodeObjectForKey:@"NSVisualEffectViewMaterial"]; + _state = [aCoder decodeObjectForKey:@"NSVisualEffectViewState"]; + + // this is not supported + // _blendingMode = [aCoder decodeObjectForKey:@"NSVisualEffectViewBlendingMode"]; + _blendingMode = CPVisualEffectBlendingModeWithinWindow; + } + + return self; +} + +@end + +@implementation NSVisualEffectView : CPVisualEffectView + +- (id)initWithCoder:(CPCoder)aCoder +{ + return [self NS_initWithCoder:aCoder]; +} + +- (Class)classForKeyedArchiver +{ + return [CPVisualEffectView class]; +} + +@end diff --git a/Tools/objj2objcskeleton/objj2objcskeleton b/Tools/objj2objcskeleton/objj2objcskeleton index 7ddcfa419..83a8ffe75 100644 --- a/Tools/objj2objcskeleton/objj2objcskeleton +++ b/Tools/objj2objcskeleton/objj2objcskeleton @@ -605,5 +605,6 @@ var NSClasses = { "NSWindowController" : YES, "NSWorkspace" : YES, "NSPopover": YES, - "NSAppearance" : YES + "NSAppearance" : YES, + "NSVisualEffectView" : YES, };