diff --git a/404.html b/404.html index 929091091..c40b45ab0 100644 --- a/404.html +++ b/404.html @@ -16,13 +16,13 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/461edca2.cee36589.js b/assets/js/461edca2.cee36589.js new file mode 100644 index 000000000..21199fa44 --- /dev/null +++ b/assets/js/461edca2.cee36589.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkairsdk_dev=self.webpackChunkairsdk_dev||[]).push([[91997],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=a.createContext({}),r=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=r(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=r(n),u=i,h=c["".concat(p,".").concat(u)]||c[u]||m[u]||l;return n?a.createElement(h,o(o({ref:t},d),{},{components:n})):a.createElement(h,o({ref:t},d))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,o=new Array(l);o[0]=u;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:i,o[1]=s;for(var r=2;r{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>r});var a=n(87462),i=(n(67294),n(3905));const l={title:"application",sidebar_position:2},o=void 0,s={unversionedId:"building/application-descriptor-files/elements/application",id:"building/application-descriptor-files/elements/application",title:"application",description:"The application element is the top-level element within the Application Descriptor XML file. It can contain the following elements.",source:"@site/docs/building/application-descriptor-files/elements/application.md",sourceDirName:"building/application-descriptor-files/elements",slug:"/building/application-descriptor-files/elements/application",permalink:"/docs/building/application-descriptor-files/elements/application",draft:!1,editUrl:"https://github.com/airsdk/airsdk.dev/edit/main/docs/building/application-descriptor-files/elements/application.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"application",sidebar_position:2},sidebar:"mainSidebar",previous:{title:"Introduction to Application Descriptor Files",permalink:"/docs/building/application-descriptor-files/introduction"},next:{title:"initialWindow",permalink:"/docs/building/application-descriptor-files/elements/initialWindow"}},p={},r=[{value:"Elements",id:"elements",level:2},{value:"id",id:"id",level:3},{value:"Content",id:"content",level:4},{value:"Example",id:"example",level:4},{value:"versionNumber",id:"versionnumber",level:3},{value:"Examples",id:"examples",level:4},{value:"versionLabel",id:"versionlabel",level:3},{value:"Example",id:"example-1",level:4},{value:"publisherID",id:"publisherid",level:3},{value:"name",id:"name",level:3},{value:"Example",id:"example-2",level:4},{value:"filename",id:"filename",level:3},{value:"description",id:"description",level:3},{value:"Example",id:"example-3",level:4},{value:"copyright",id:"copyright",level:3},{value:"architecture",id:"architecture",level:3},{value:"Example",id:"example-4",level:4},{value:"gpuPreference",id:"gpupreference",level:3},{value:"Example",id:"example-5",level:4},{value:"icon",id:"icon",level:3},{value:"Content",id:"content-1",level:4},{value:"Example",id:"example-6",level:4},{value:"supportedProfiles",id:"supportedprofiles",level:3},{value:"supportedLanguages",id:"supportedlanguages",level:3},{value:"Example",id:"example-7",level:4},{value:"installFolder",id:"installfolder",level:3},{value:"Content",id:"content-2",level:4},{value:"Example",id:"example-8",level:4},{value:"programMenuFolder",id:"programmenufolder",level:3},{value:"Example",id:"example-9",level:4},{value:"customUpdateUI",id:"customupdateui",level:3},{value:"Example",id:"example-10",level:4},{value:"allowBrowserInvocation",id:"allowbrowserinvocation",level:3},{value:"embedFonts",id:"embedfonts",level:3},{value:"Example",id:"example-11",level:4},{value:"resdir",id:"resdir",level:3},{value:"Example",id:"example-12",level:4},{value:"fileTypes",id:"filetypes",level:3},{value:"Content",id:"content-3",level:4},{value:"Example",id:"example-13",level:4},{value:"extensions",id:"extensions",level:3},{value:"allowMultipleInstances",id:"allowmultipleinstances",level:3},{value:"stacktraces",id:"stacktraces",level:3},{value:"Other elements",id:"other-elements",level:2},{value:"Localisation",id:"localisation",level:2},{value:"Registering File Types",id:"registering-file-types",level:2}],d={toc:r},c="wrapper";function m(e){let{components:t,...n}=e;return(0,i.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"application")," element is the top-level element within the Application Descriptor XML file. It can contain the following elements."),(0,i.kt)("h2",{id:"elements"},"Elements"),(0,i.kt)("h3",{id:"id"},(0,i.kt)("inlineCode",{parentName:"h3"},"id")),(0,i.kt)("span",{class:"badge badge--info"},"required"),(0,i.kt)("p",null,"An identifier string for the application, known as the application ID. A reverse DNS-style identifier is often used, but this style is not required."),(0,i.kt)("h4",{id:"content"},"Content"),(0,i.kt)("p",null,"The ID value is restricted to the following characters:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"0\u20139")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"a\u2013z")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"A\u2013Z")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},".")," (dot)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-")," (hyphen)")),(0,i.kt)("p",null,"The value must contain 1 to 212 characters. This element is required."),(0,i.kt)("h4",{id:"example"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"org.example.application\n")),(0,i.kt)("h3",{id:"versionnumber"},(0,i.kt)("inlineCode",{parentName:"h3"},"versionNumber")),(0,i.kt)("span",{class:"badge badge--info"},"required"),(0,i.kt)("p",null,"The version number for the application. This can contain a sequence of up to three integers separated by periods. Each integer must be a number between 0 and 999 (inclusive)."),(0,i.kt)("h4",{id:"examples"},"Examples"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"1.0.657 \n \n10 \n \n0.01\n")),(0,i.kt)("h3",{id:"versionlabel"},(0,i.kt)("inlineCode",{parentName:"h3"},"versionLabel")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"A version string that will be displayed to the user in installation dialogs. If this value is not provided, the ",(0,i.kt)("inlineCode",{parentName:"p"},"versionNumber")," field will be used instead."),(0,i.kt)("h4",{id:"example-1"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"0.9 Beta\n")),(0,i.kt)("h3",{id:"publisherid"},(0,i.kt)("inlineCode",{parentName:"h3"},"publisherID")),(0,i.kt)("p",null,"(deprecated)"),(0,i.kt)("p",null,"This may only be specified when creating a package for updating an application originally created with AIR version 1.5.2 or earlier."),(0,i.kt)("h3",{id:"name"},(0,i.kt)("inlineCode",{parentName:"h3"},"name")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The name of the application, to display within the installation dialogs. If this value is not provided, the ",(0,i.kt)("inlineCode",{parentName:"p"},"filename")," field will be used instead."),(0,i.kt)("p",null,"Note that this element may either be a simple string, or may contain a set of ",(0,i.kt)("a",{parentName:"p",href:"#localisation"},"localised names"),"."),(0,i.kt)("h4",{id:"example-2"},"Example"),(0,i.kt)("p",null,"The following example defines a name with a simple text node:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"Test Application \n")),(0,i.kt)("p",null,"The following example, valid in AIR 1.1 and later, specifies the name in three languages (English, French, and Spanish) using ",(0,i.kt)("inlineCode",{parentName:"p"},"")," element nodes:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},' \n Hello AIR \n Bonjour AIR \n Hola AIR \n \n')),(0,i.kt)("h3",{id:"filename"},(0,i.kt)("inlineCode",{parentName:"h3"},"filename")),(0,i.kt)("span",{class:"badge badge--info"},"required"),(0,i.kt)("p",null,"The filename to use when installing the application. This can contain any UTF-8 character above 0x1F, other than one of: ",(0,i.kt)("inlineCode",{parentName:"p"},'*"/:<>?\\|'),", and must not start or end with a space or dot."),(0,i.kt)("p",null,"It is advised to keep the filename set to the ASCII range of characters, particularly when targeting an iPhone or iPad device, to avoid issues with the filesystems on these devices."),(0,i.kt)("h3",{id:"description"},(0,i.kt)("inlineCode",{parentName:"h3"},"description")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"A description to display within the installation dialogs. This element may either be a simple string, or may contain a set of ",(0,i.kt)("a",{parentName:"p",href:"#localisation"},"localised descriptions"),"."),(0,i.kt)("h4",{id:"example-3"},"Example"),(0,i.kt)("p",null,"Description with simple text node:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"This is a sample AIR application. \n")),(0,i.kt)("p",null,"Description with localized text elements for English, French, and Spanish (valid in AIR 1.1 and later):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},' \n This is an example. \n C\'est un exemple. \n Esto es un ejemplo. \n \n')),(0,i.kt)("h3",{id:"copyright"},(0,i.kt)("inlineCode",{parentName:"h3"},"copyright")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The copyright information for the AIR application. On Mac OS, the copyright text appears in the About dialog box for the installed application."),(0,i.kt)("p",null,"On Mac OS, the copyright information is also used in the NSHumanReadableCopyright field in the Info.plist file for the application."),(0,i.kt)("h3",{id:"architecture"},(0,i.kt)("inlineCode",{parentName:"h3"},"architecture")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"architecture"),' value determines the architecture of the Windows captive app, being either "32" or "64".'),(0,i.kt)("p",null,"Defaults to 32 if not supplied."),(0,i.kt)("h4",{id:"example-4"},"Example"),(0,i.kt)("p",null,"To create a 64bit windows captive application: "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"64\n")),(0,i.kt)("p",null,"To create a 32bit windows captive application:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"32\n")),(0,i.kt)("h3",{id:"gpupreference"},(0,i.kt)("inlineCode",{parentName:"h3"},"gpuPreference")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"gpuPreference")," value determines if the application will use the ",(0,i.kt)("inlineCode",{parentName:"p"},"integrated")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"dedicated"),"(",(0,i.kt)("inlineCode",{parentName:"p"},"discrete"),") GPU.\nThis feature is supported only on devices that are equipped with both an integrated GPU and a discrete GPU\nand with OS that support GPU switching functionality."),(0,i.kt)("h4",{id:"example-5"},"Example"),(0,i.kt)("p",null,"To specify preference to use dedicated GPU (High performance GPU): "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"discrete\n")),(0,i.kt)("p",null,"To specify preference to use integrated GPU:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"integrated\n")),(0,i.kt)("h3",{id:"icon"},(0,i.kt)("inlineCode",{parentName:"h3"},"icon")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"An element containing a set of icon files of varying sizes that are used to create the application icon."),(0,i.kt)("p",null,"The icon property specifies one or more icon files to be used for the application. Including an icon is optional. If you do not specify an icon property, the operating system displays a default icon."),(0,i.kt)("p",null,"The path specified is relative to the application root directory. Icon files must be in the PNG format. "),(0,i.kt)("p",null,"If an element for a given size is present, the image in the file must be exactly the size specified. If all sizes are not provided, the closest size is scaled to fit for a given use of the icon by the operating system."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The icons specified are not automatically added to the AIR package. The icon files must be included in their correct relative locations when the application is packaged.")),(0,i.kt)("p",null,"Child items for this element are ",(0,i.kt)("inlineCode",{parentName:"p"},"image16x16"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"image32x32"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"image128x128"),", etc: the images are handled differently for different operating systems which may have specific requirements on icon sizes."),(0,i.kt)("h4",{id:"content-1"},"Content"),(0,i.kt)("p",null,"An ",(0,i.kt)("inlineCode",{parentName:"p"},"imageNxN")," element for each desired icon size."),(0,i.kt)("h4",{id:"example-6"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"}," \n icons/smallIcon.png \n icons/mediumIcon.png \n icons/bigIcon.png \n icons/biggestIcon.png \n\n")),(0,i.kt)("h3",{id:"supportedprofiles"},(0,i.kt)("inlineCode",{parentName:"h3"},"supportedProfiles")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the profiles that are supported for the application. Any combination of the following profiles can be specified:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"desktop"),": The desktop profile is for AIR applications that are installed on a desktop computer using an AIR file. These applications do not have access to the NativeProcess class (which provides communication with native applications)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"extendedDesktop"),": The extended desktop profile is for AIR applications that are installed on a desktop computer using a native application installer. These applications have access to the NativeProcess class and can run AIR Native Extensions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"mobileDevice"),": The mobile device profile is for mobile applications."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"extendedMobileDevice"),": The extended mobile device profile is not currently in use.")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"supportedProfiles")," property is optional. When you do not include this element in the application descriptor file, the application can be compiled and deployed for any profile.\nTo specify multiple profiles, separate each with a space character. For example, the following setting specifies that the application is only available in the desktop and extended profiles:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"desktop extendedDesktop\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"When you run an application with ADL and do not specify a value for the ADL ",(0,i.kt)("inlineCode",{parentName:"p"},"-profile")," option, then the first profile in the application descriptor is used. (If no profiles are specified in the application descriptor either, then the desktop profile is used.)")),(0,i.kt)("h3",{id:"supportedlanguages"},(0,i.kt)("inlineCode",{parentName:"h3"},"supportedLanguages")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the languages supported by the application. This element is only used by iOS, Mac captive runtime, and Android applications. This element is ignored by all other application types."),(0,i.kt)("p",null,"If you do not specify this element, then by default the packager performs the following actions based on the application type:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"iOS \u2014 All languages supported by the AIR runtime are listed in the iOS app store as supported languages of the application."),(0,i.kt)("li",{parentName:"ul"},"Mac captive runtime \u2014 Application packaged with captive bundle has no localization information."),(0,i.kt)("li",{parentName:"ul"},"Android \u2014 Application bundle has resources for all languages supported by the AIR runtime.")),(0,i.kt)("p",null,"The element should contain a space-delimited list of supported languages. Valid language values are ISO 639-1 values for the languages supported by the AIR runtime: en, de, es, fr, it, ja, ko, pt, ru, cs, nl, pl, sv, tr, zh, da, nb, iw."),(0,i.kt)("p",null,"The packager generates an error for an empty value for the ",(0,i.kt)("inlineCode",{parentName:"p"},"supportedLanguages")," element."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Localized tags (such as the name tag) ignore the value of a language if you use the ",(0,i.kt)("inlineCode",{parentName:"p"},"supportedLanguages")," tag and it does not contain that language. If a native extension has resources for a language which is not specified by the ",(0,i.kt)("inlineCode",{parentName:"p"},"supportedLanguages")," tag, a warning is issued and the resources are ignored for that language.")),(0,i.kt)("h4",{id:"example-7"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"en ja fr es\n")),(0,i.kt)("h3",{id:"installfolder"},(0,i.kt)("inlineCode",{parentName:"h3"},"installFolder")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the subdirectory of the default installation directory."),(0,i.kt)("p",null,"On Windows, the default installation subdirectory is the Program Files directory. On Mac OS, it is the /Applications directory. On Linux, it is /opt/."),(0,i.kt)("p",null,'For example, if the installFolder property is set to "Acme" and an application is named "ExampleApp", then the application is installed in C:\\Program Files\\Acme\\ExampleApp on Windows, in /Applications/Acme/Example.app on MacOS, and /opt/Acme/ExampleApp on Linux.'),(0,i.kt)("p",null,"If you do not specify an installFolder property, the application is installed in a subdirectory of the default installation directory, based on the name property."),(0,i.kt)("h4",{id:"content-2"},"Content"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"installFolder")," property can contain any Unicode (UTF-8) character except those that are prohibited from use as folder names on various file systems (see the ",(0,i.kt)("inlineCode",{parentName:"p"},"filename")," property for the list of exceptions).\nUse the forward-slash (/) character as the directory separator character if you want to specify a nested subdirectory."),(0,i.kt)("h4",{id:"example-8"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"utilities/toolA\n")),(0,i.kt)("h3",{id:"programmenufolder"},(0,i.kt)("inlineCode",{parentName:"h3"},"programMenuFolder")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the location in which to place shortcuts to the application in the All Programs menu of the Windows operating system or in the Applications menu on Linux."),(0,i.kt)("p",null,"This setting is currently ignored on other operating systems."),(0,i.kt)("p",null,"The string used for the programMenuFolder value can contain any Unicode (UTF-8) character except those that are prohibited from use as folder names on various file systems (see the ",(0,i.kt)("inlineCode",{parentName:"p"},"filename")," element for the list of exceptions). Do not use a forward slash (/) character as the last character of this value."),(0,i.kt)("h4",{id:"example-9"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"Example Company/Sample Application\n")),(0,i.kt)("h3",{id:"customupdateui"},(0,i.kt)("inlineCode",{parentName:"h3"},"customUpdateUI")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Indicates whether an application will provide its own update dialogs."),(0,i.kt)("p",null,"If ",(0,i.kt)("inlineCode",{parentName:"p"},"false")," (or missing), AIR presents standard update dialogs to the user. Only desktop applications distributed as AIR files can use the built-in AIR update system."),(0,i.kt)("p",null,"When the installed version of your application has the customUpdateUI element set to true and the user then double-clicks the AIR file for a new version or installs an update of the application using the seamless install feature, the runtime opens the installed version of the application. The runtime does not open the default AIR application installer. Your application logic can then determine how to proceed with the update operation. (The application ID and publisher ID in the AIR file must match the values in the installed application for an upgrade to proceed.)"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The customUpdateUI mechanism only comes into play when the application is already installed and the user double-clicks the AIR installation file containing an update or installs an update of the application using the seamless install feature. You can download and start an update through your own application logic, displaying your custom UI as necessary, whether or not customUpdateUI is true.")),(0,i.kt)("h4",{id:"example-10"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"true\n")),(0,i.kt)("h3",{id:"allowbrowserinvocation"},(0,i.kt)("inlineCode",{parentName:"h3"},"allowBrowserInvocation")),(0,i.kt)("p",null,"(deprecated)"),(0,i.kt)("p",null,"This setting was used to trigger the launch of an AIR application from a browser - however this used a utility running within the Flash Player in the browser."),(0,i.kt)("p",null,"Following the removal of support for the Flash Player, this setting will be ignored."),(0,i.kt)("h3",{id:"embedfonts"},(0,i.kt)("inlineCode",{parentName:"h3"},"embedFonts")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Allows you to use custom fonts on StageText in the AIR application. The embedFonts element may contain any number of font elements."),(0,i.kt)("h4",{id:"example-11"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"\n \n ttf/space age.ttf\n space age\n \n \n ttf/xminus.ttf\n xminus\n \n\n")),(0,i.kt)("h3",{id:"resdir"},(0,i.kt)("inlineCode",{parentName:"h3"},"resdir")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"A folder that should be treated as containing Android resources files, to be merged in with the standard AIR application resources when building an APK or Android App Bundle file."),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/tutorials/platform/android/custom-resources"},"Custom Android Resources")," for more information on the usage of this value."),(0,i.kt)("h4",{id:"example-12"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"res\n")),(0,i.kt)("h3",{id:"filetypes"},(0,i.kt)("inlineCode",{parentName:"h3"},"fileTypes")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"fileTypes")," element allows you to declare the file types with which an AIR application can be associated on a desktop installation. "),(0,i.kt)("p",null,"When an AIR application is installed, any declared file type is registered with the operating system. If these file types are not already associated with another application, they are associated with the AIR application. To override an existing association between a file type and another application, use the NativeApplication.setAsDefaultApplication() method at run time (preferably with the user\u2019s permission)."),(0,i.kt)("p",null,"It contains an array of ",(0,i.kt)("inlineCode",{parentName:"p"},"fileType")," elements - see below."),(0,i.kt)("h4",{id:"content-3"},"Content"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"fileTypes")," element may contain any number of ",(0,i.kt)("inlineCode",{parentName:"p"},"fileType")," elements."),(0,i.kt)("h4",{id:"example-13"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"}," \n \n adobe.VideoFile \n avf \n Adobe Video File \n application/vnd.adobe.video-file \n \n icons/AIRApp_16.png \n icons/AIRApp_32.png \n icons/AIRApp_48.png \n icons/AIRApp_128.png \n \n \n\n")),(0,i.kt)("h3",{id:"extensions"},(0,i.kt)("inlineCode",{parentName:"h3"},"extensions")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the AIR Native Extensions used by an application. This element contains a list of ",(0,i.kt)("inlineCode",{parentName:"p"},"extensionID")," entries, each of which declares the identifier of an AIR Native Extension that will need to be loaded by the AIR runtime at application start-up."),(0,i.kt)("p",null,"For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"\n extension.first\n extension.next\n extension.last\n\n")),(0,i.kt)("h3",{id:"allowmultipleinstances"},(0,i.kt)("inlineCode",{parentName:"h3"},"allowMultipleInstances")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Available: 50.0.0.1"),(0,i.kt)("p",null,"This setting can be used to allow multiple instances of a desktop AIR application to be launched as separate processes, rather than the standard behaviour of new invocations just resulting in an ",(0,i.kt)("inlineCode",{parentName:"p"},"InvokeEvent")," being sent to a running instance of the application.\nNote that on macOS, opening a new instance of an application must be done via ",(0,i.kt)("inlineCode",{parentName:"p"},"open -n"),"."),(0,i.kt)("p",null,"Default value is ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,i.kt)("h3",{id:"stacktraces"},(0,i.kt)("inlineCode",{parentName:"h3"},"stacktraces")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Available: 50.1.1.1"),(0,i.kt)("p",null,"Controls the availability and verbosity of stack traces available to the application. The setting may be ",(0,i.kt)("inlineCode",{parentName:"p"},"none"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"standard")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"verbose"),".\nBefore this flag, the availability of stack traces depended on the SWF version number, and the verbosity on whether or not the SWF file included debug information (file name and line number details).\n",(0,i.kt)("inlineCode",{parentName:"p"},"none")," means that no stack traces are generated when an error is raised. ",(0,i.kt)("inlineCode",{parentName:"p"},"standard")," would cause a stack trace to be created but without file and line information.\n",(0,i.kt)("inlineCode",{parentName:"p"},"verbose")," would then include the file and line details, assuming these are available within the SWF file."),(0,i.kt)("h2",{id:"other-elements"},"Other elements"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"application")," element can also contain other elements that are described further in other sections:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/initialWindow"},(0,i.kt)("inlineCode",{parentName:"a"},"initialWindow"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/iPhone"},(0,i.kt)("inlineCode",{parentName:"a"},"iPhone"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/android"},(0,i.kt)("inlineCode",{parentName:"a"},"android"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/macOS"},(0,i.kt)("inlineCode",{parentName:"a"},"macOS"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/windows"},(0,i.kt)("inlineCode",{parentName:"a"},"windows")))),(0,i.kt)("h2",{id:"localisation"},"Localisation"),(0,i.kt)("p",null,"Some descriptor elements - ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"description")," - can be localised such that they will be displayed to the end user in the most appropriate entry matching the locale of the user's device.\nTo do this, provide a set of XML nodes with each language code that you want to support (see ",(0,i.kt)("a",{parentName:"p",href:"https://www.ietf.org/rfc/rfc4646.txt"},"RFC4646"),"), for example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},'\n Hello AIR\n Bonjour AIR\n Hola AIR\n \u3053\u3093\u306b\u3061\u306f AIR\n\n')),(0,i.kt)("h2",{id:"registering-file-types"},"Registering File Types"),(0,i.kt)("p",null,"An application descriptor file may provide a set of ",(0,i.kt)("inlineCode",{parentName:"p"},"fileType")," elements (within the ",(0,i.kt)("inlineCode",{parentName:"p"},"fileTypes")," element), in order to register these file types with the operating system when the AIR application is installed.\nThe registration is only possible (at install-time) if these file types are not already associated with another application: to override an existing association between a file type and another application,\nuse the ",(0,i.kt)("inlineCode",{parentName:"p"},"NativeApplication.setAsDefaultApplication()")," method at run time (preferably with the user\u2019s permission). Note that the runtime methods can only manage associations for the file types declared in the application descriptor."),(0,i.kt)("p",null,"A ",(0,i.kt)("inlineCode",{parentName:"p"},"fileType")," entry can have a number of number of optional child elements:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"name: Identifies the name of a file type. For example: ",(0,i.kt)("inlineCode",{parentName:"li"},"adobe.VideoFile")),(0,i.kt)("li",{parentName:"ul"},"extension: The extension string of a file type (without the dot). For example: ",(0,i.kt)("inlineCode",{parentName:"li"},"png")),(0,i.kt)("li",{parentName:"ul"},"description: The file type description is displayed to the user by the operating system (not localizable). For example: ",(0,i.kt)("inlineCode",{parentName:"li"},"PNG image")),(0,i.kt)("li",{parentName:"ul"},"contentType: The MIME type/subtype of the content to register. Note that the value is ignored on Linux if the file type is already registered and has an assigned MIME type. For example: ",(0,i.kt)("inlineCode",{parentName:"li"},"text/plain")),(0,i.kt)("li",{parentName:"ul"},"icon: An icon to associate with files that match the registered content type. This element contains a set of ",(0,i.kt)("inlineCode",{parentName:"li"},"imageNNxNN")," entries similar to the main AIR application icon.")),(0,i.kt)("p",null,"If the file type registration is successful, then the operating system will identify these files using the provided details and will open them using your AIR application.\nThe path of the selected file will be passed to the AIR application via the ",(0,i.kt)("inlineCode",{parentName:"p"},"InvokeEvent")," - adding an event listener for ",(0,i.kt)("inlineCode",{parentName:"p"},"InvokeEvent.INVOKE")," to the ",(0,i.kt)("inlineCode",{parentName:"p"},"NativeApplication.nativeApplication")," object\nwill trigger any invoke events to be passed to the listener function."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/461edca2.da22c26d.js b/assets/js/461edca2.da22c26d.js deleted file mode 100644 index 221135c54..000000000 --- a/assets/js/461edca2.da22c26d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkairsdk_dev=self.webpackChunkairsdk_dev||[]).push([[91997],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(67294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=a.createContext({}),r=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=r(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=r(n),u=i,h=c["".concat(p,".").concat(u)]||c[u]||m[u]||l;return n?a.createElement(h,o(o({ref:t},d),{},{components:n})):a.createElement(h,o({ref:t},d))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,o=new Array(l);o[0]=u;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:i,o[1]=s;for(var r=2;r{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>r});var a=n(87462),i=(n(67294),n(3905));const l={title:"application",sidebar_position:2},o=void 0,s={unversionedId:"building/application-descriptor-files/elements/application",id:"building/application-descriptor-files/elements/application",title:"application",description:"The application element is the top-level element within the Application Descriptor XML file. It can contain the following elements.",source:"@site/docs/building/application-descriptor-files/elements/application.md",sourceDirName:"building/application-descriptor-files/elements",slug:"/building/application-descriptor-files/elements/application",permalink:"/docs/building/application-descriptor-files/elements/application",draft:!1,editUrl:"https://github.com/airsdk/airsdk.dev/edit/main/docs/building/application-descriptor-files/elements/application.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"application",sidebar_position:2},sidebar:"mainSidebar",previous:{title:"Introduction to Application Descriptor Files",permalink:"/docs/building/application-descriptor-files/introduction"},next:{title:"initialWindow",permalink:"/docs/building/application-descriptor-files/elements/initialWindow"}},p={},r=[{value:"Elements",id:"elements",level:2},{value:"id",id:"id",level:3},{value:"Content",id:"content",level:4},{value:"Example",id:"example",level:4},{value:"versionNumber",id:"versionnumber",level:3},{value:"Examples",id:"examples",level:4},{value:"versionLabel",id:"versionlabel",level:3},{value:"Example",id:"example-1",level:4},{value:"publisherID",id:"publisherid",level:3},{value:"name",id:"name",level:3},{value:"Example",id:"example-2",level:4},{value:"filename",id:"filename",level:3},{value:"description",id:"description",level:3},{value:"Example",id:"example-3",level:4},{value:"copyright",id:"copyright",level:3},{value:"architecture",id:"architecture",level:3},{value:"Example",id:"example-4",level:4},{value:"icon",id:"icon",level:3},{value:"Content",id:"content-1",level:4},{value:"Example",id:"example-5",level:4},{value:"supportedProfiles",id:"supportedprofiles",level:3},{value:"supportedLanguages",id:"supportedlanguages",level:3},{value:"Example",id:"example-6",level:4},{value:"installFolder",id:"installfolder",level:3},{value:"Content",id:"content-2",level:4},{value:"Example",id:"example-7",level:4},{value:"programMenuFolder",id:"programmenufolder",level:3},{value:"Example",id:"example-8",level:4},{value:"customUpdateUI",id:"customupdateui",level:3},{value:"Example",id:"example-9",level:4},{value:"allowBrowserInvocation",id:"allowbrowserinvocation",level:3},{value:"embedFonts",id:"embedfonts",level:3},{value:"Example",id:"example-10",level:4},{value:"resdir",id:"resdir",level:3},{value:"Example",id:"example-11",level:4},{value:"fileTypes",id:"filetypes",level:3},{value:"Content",id:"content-3",level:4},{value:"Example",id:"example-12",level:4},{value:"extensions",id:"extensions",level:3},{value:"allowMultipleInstances",id:"allowmultipleinstances",level:3},{value:"stacktraces",id:"stacktraces",level:3},{value:"Other elements",id:"other-elements",level:2},{value:"Localisation",id:"localisation",level:2},{value:"Registering File Types",id:"registering-file-types",level:2}],d={toc:r},c="wrapper";function m(e){let{components:t,...n}=e;return(0,i.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"application")," element is the top-level element within the Application Descriptor XML file. It can contain the following elements."),(0,i.kt)("h2",{id:"elements"},"Elements"),(0,i.kt)("h3",{id:"id"},(0,i.kt)("inlineCode",{parentName:"h3"},"id")),(0,i.kt)("span",{class:"badge badge--info"},"required"),(0,i.kt)("p",null,"An identifier string for the application, known as the application ID. A reverse DNS-style identifier is often used, but this style is not required."),(0,i.kt)("h4",{id:"content"},"Content"),(0,i.kt)("p",null,"The ID value is restricted to the following characters:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"0\u20139")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"a\u2013z")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"A\u2013Z")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},".")," (dot)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-")," (hyphen)")),(0,i.kt)("p",null,"The value must contain 1 to 212 characters. This element is required."),(0,i.kt)("h4",{id:"example"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"org.example.application\n")),(0,i.kt)("h3",{id:"versionnumber"},(0,i.kt)("inlineCode",{parentName:"h3"},"versionNumber")),(0,i.kt)("span",{class:"badge badge--info"},"required"),(0,i.kt)("p",null,"The version number for the application. This can contain a sequence of up to three integers separated by periods. Each integer must be a number between 0 and 999 (inclusive)."),(0,i.kt)("h4",{id:"examples"},"Examples"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"1.0.657 \n \n10 \n \n0.01\n")),(0,i.kt)("h3",{id:"versionlabel"},(0,i.kt)("inlineCode",{parentName:"h3"},"versionLabel")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"A version string that will be displayed to the user in installation dialogs. If this value is not provided, the ",(0,i.kt)("inlineCode",{parentName:"p"},"versionNumber")," field will be used instead."),(0,i.kt)("h4",{id:"example-1"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"0.9 Beta\n")),(0,i.kt)("h3",{id:"publisherid"},(0,i.kt)("inlineCode",{parentName:"h3"},"publisherID")),(0,i.kt)("p",null,"(deprecated)"),(0,i.kt)("p",null,"This may only be specified when creating a package for updating an application originally created with AIR version 1.5.2 or earlier."),(0,i.kt)("h3",{id:"name"},(0,i.kt)("inlineCode",{parentName:"h3"},"name")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The name of the application, to display within the installation dialogs. If this value is not provided, the ",(0,i.kt)("inlineCode",{parentName:"p"},"filename")," field will be used instead."),(0,i.kt)("p",null,"Note that this element may either be a simple string, or may contain a set of ",(0,i.kt)("a",{parentName:"p",href:"#localisation"},"localised names"),"."),(0,i.kt)("h4",{id:"example-2"},"Example"),(0,i.kt)("p",null,"The following example defines a name with a simple text node:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"Test Application \n")),(0,i.kt)("p",null,"The following example, valid in AIR 1.1 and later, specifies the name in three languages (English, French, and Spanish) using ",(0,i.kt)("inlineCode",{parentName:"p"},"")," element nodes:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},' \n Hello AIR \n Bonjour AIR \n Hola AIR \n \n')),(0,i.kt)("h3",{id:"filename"},(0,i.kt)("inlineCode",{parentName:"h3"},"filename")),(0,i.kt)("span",{class:"badge badge--info"},"required"),(0,i.kt)("p",null,"The filename to use when installing the application. This can contain any UTF-8 character above 0x1F, other than one of: ",(0,i.kt)("inlineCode",{parentName:"p"},'*"/:<>?\\|'),", and must not start or end with a space or dot."),(0,i.kt)("p",null,"It is advised to keep the filename set to the ASCII range of characters, particularly when targeting an iPhone or iPad device, to avoid issues with the filesystems on these devices."),(0,i.kt)("h3",{id:"description"},(0,i.kt)("inlineCode",{parentName:"h3"},"description")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"A description to display within the installation dialogs. This element may either be a simple string, or may contain a set of ",(0,i.kt)("a",{parentName:"p",href:"#localisation"},"localised descriptions"),"."),(0,i.kt)("h4",{id:"example-3"},"Example"),(0,i.kt)("p",null,"Description with simple text node:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"This is a sample AIR application. \n")),(0,i.kt)("p",null,"Description with localized text elements for English, French, and Spanish (valid in AIR 1.1 and later):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},' \n This is an example. \n C\'est un exemple. \n Esto es un ejemplo. \n \n')),(0,i.kt)("h3",{id:"copyright"},(0,i.kt)("inlineCode",{parentName:"h3"},"copyright")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The copyright information for the AIR application. On Mac OS, the copyright text appears in the About dialog box for the installed application."),(0,i.kt)("p",null,"On Mac OS, the copyright information is also used in the NSHumanReadableCopyright field in the Info.plist file for the application."),(0,i.kt)("h3",{id:"architecture"},(0,i.kt)("inlineCode",{parentName:"h3"},"architecture")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"architecture"),' value determines the architecture of the Windows captive app, being either "32" or "64".'),(0,i.kt)("p",null,"Defaults to 32 if not supplied."),(0,i.kt)("h4",{id:"example-4"},"Example"),(0,i.kt)("p",null,"To create a 64bit windows captive application: "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"64\n")),(0,i.kt)("p",null,"To create a 32bit windows captive application:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"32\n")),(0,i.kt)("h3",{id:"icon"},(0,i.kt)("inlineCode",{parentName:"h3"},"icon")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"An element containing a set of icon files of varying sizes that are used to create the application icon."),(0,i.kt)("p",null,"The icon property specifies one or more icon files to be used for the application. Including an icon is optional. If you do not specify an icon property, the operating system displays a default icon."),(0,i.kt)("p",null,"The path specified is relative to the application root directory. Icon files must be in the PNG format. "),(0,i.kt)("p",null,"If an element for a given size is present, the image in the file must be exactly the size specified. If all sizes are not provided, the closest size is scaled to fit for a given use of the icon by the operating system."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The icons specified are not automatically added to the AIR package. The icon files must be included in their correct relative locations when the application is packaged.")),(0,i.kt)("p",null,"Child items for this element are ",(0,i.kt)("inlineCode",{parentName:"p"},"image16x16"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"image32x32"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"image128x128"),", etc: the images are handled differently for different operating systems which may have specific requirements on icon sizes."),(0,i.kt)("h4",{id:"content-1"},"Content"),(0,i.kt)("p",null,"An ",(0,i.kt)("inlineCode",{parentName:"p"},"imageNxN")," element for each desired icon size."),(0,i.kt)("h4",{id:"example-5"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"}," \n icons/smallIcon.png \n icons/mediumIcon.png \n icons/bigIcon.png \n icons/biggestIcon.png \n\n")),(0,i.kt)("h3",{id:"supportedprofiles"},(0,i.kt)("inlineCode",{parentName:"h3"},"supportedProfiles")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the profiles that are supported for the application. Any combination of the following profiles can be specified:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"desktop"),": The desktop profile is for AIR applications that are installed on a desktop computer using an AIR file. These applications do not have access to the NativeProcess class (which provides communication with native applications)."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"extendedDesktop"),": The extended desktop profile is for AIR applications that are installed on a desktop computer using a native application installer. These applications have access to the NativeProcess class and can run AIR Native Extensions."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"mobileDevice"),": The mobile device profile is for mobile applications."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"extendedMobileDevice"),": The extended mobile device profile is not currently in use.")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"supportedProfiles")," property is optional. When you do not include this element in the application descriptor file, the application can be compiled and deployed for any profile.\nTo specify multiple profiles, separate each with a space character. For example, the following setting specifies that the application is only available in the desktop and extended profiles:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"desktop extendedDesktop\n")),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"When you run an application with ADL and do not specify a value for the ADL ",(0,i.kt)("inlineCode",{parentName:"p"},"-profile")," option, then the first profile in the application descriptor is used. (If no profiles are specified in the application descriptor either, then the desktop profile is used.)")),(0,i.kt)("h3",{id:"supportedlanguages"},(0,i.kt)("inlineCode",{parentName:"h3"},"supportedLanguages")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the languages supported by the application. This element is only used by iOS, Mac captive runtime, and Android applications. This element is ignored by all other application types."),(0,i.kt)("p",null,"If you do not specify this element, then by default the packager performs the following actions based on the application type:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"iOS \u2014 All languages supported by the AIR runtime are listed in the iOS app store as supported languages of the application."),(0,i.kt)("li",{parentName:"ul"},"Mac captive runtime \u2014 Application packaged with captive bundle has no localization information."),(0,i.kt)("li",{parentName:"ul"},"Android \u2014 Application bundle has resources for all languages supported by the AIR runtime.")),(0,i.kt)("p",null,"The element should contain a space-delimited list of supported languages. Valid language values are ISO 639-1 values for the languages supported by the AIR runtime: en, de, es, fr, it, ja, ko, pt, ru, cs, nl, pl, sv, tr, zh, da, nb, iw."),(0,i.kt)("p",null,"The packager generates an error for an empty value for the ",(0,i.kt)("inlineCode",{parentName:"p"},"supportedLanguages")," element."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Localized tags (such as the name tag) ignore the value of a language if you use the ",(0,i.kt)("inlineCode",{parentName:"p"},"supportedLanguages")," tag and it does not contain that language. If a native extension has resources for a language which is not specified by the ",(0,i.kt)("inlineCode",{parentName:"p"},"supportedLanguages")," tag, a warning is issued and the resources are ignored for that language.")),(0,i.kt)("h4",{id:"example-6"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"en ja fr es\n")),(0,i.kt)("h3",{id:"installfolder"},(0,i.kt)("inlineCode",{parentName:"h3"},"installFolder")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the subdirectory of the default installation directory."),(0,i.kt)("p",null,"On Windows, the default installation subdirectory is the Program Files directory. On Mac OS, it is the /Applications directory. On Linux, it is /opt/."),(0,i.kt)("p",null,'For example, if the installFolder property is set to "Acme" and an application is named "ExampleApp", then the application is installed in C:\\Program Files\\Acme\\ExampleApp on Windows, in /Applications/Acme/Example.app on MacOS, and /opt/Acme/ExampleApp on Linux.'),(0,i.kt)("p",null,"If you do not specify an installFolder property, the application is installed in a subdirectory of the default installation directory, based on the name property."),(0,i.kt)("h4",{id:"content-2"},"Content"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"installFolder")," property can contain any Unicode (UTF-8) character except those that are prohibited from use as folder names on various file systems (see the ",(0,i.kt)("inlineCode",{parentName:"p"},"filename")," property for the list of exceptions).\nUse the forward-slash (/) character as the directory separator character if you want to specify a nested subdirectory."),(0,i.kt)("h4",{id:"example-7"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"utilities/toolA\n")),(0,i.kt)("h3",{id:"programmenufolder"},(0,i.kt)("inlineCode",{parentName:"h3"},"programMenuFolder")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the location in which to place shortcuts to the application in the All Programs menu of the Windows operating system or in the Applications menu on Linux."),(0,i.kt)("p",null,"This setting is currently ignored on other operating systems."),(0,i.kt)("p",null,"The string used for the programMenuFolder value can contain any Unicode (UTF-8) character except those that are prohibited from use as folder names on various file systems (see the ",(0,i.kt)("inlineCode",{parentName:"p"},"filename")," element for the list of exceptions). Do not use a forward slash (/) character as the last character of this value."),(0,i.kt)("h4",{id:"example-8"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"Example Company/Sample Application\n")),(0,i.kt)("h3",{id:"customupdateui"},(0,i.kt)("inlineCode",{parentName:"h3"},"customUpdateUI")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Indicates whether an application will provide its own update dialogs."),(0,i.kt)("p",null,"If ",(0,i.kt)("inlineCode",{parentName:"p"},"false")," (or missing), AIR presents standard update dialogs to the user. Only desktop applications distributed as AIR files can use the built-in AIR update system."),(0,i.kt)("p",null,"When the installed version of your application has the customUpdateUI element set to true and the user then double-clicks the AIR file for a new version or installs an update of the application using the seamless install feature, the runtime opens the installed version of the application. The runtime does not open the default AIR application installer. Your application logic can then determine how to proceed with the update operation. (The application ID and publisher ID in the AIR file must match the values in the installed application for an upgrade to proceed.)"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The customUpdateUI mechanism only comes into play when the application is already installed and the user double-clicks the AIR installation file containing an update or installs an update of the application using the seamless install feature. You can download and start an update through your own application logic, displaying your custom UI as necessary, whether or not customUpdateUI is true.")),(0,i.kt)("h4",{id:"example-9"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"true\n")),(0,i.kt)("h3",{id:"allowbrowserinvocation"},(0,i.kt)("inlineCode",{parentName:"h3"},"allowBrowserInvocation")),(0,i.kt)("p",null,"(deprecated)"),(0,i.kt)("p",null,"This setting was used to trigger the launch of an AIR application from a browser - however this used a utility running within the Flash Player in the browser."),(0,i.kt)("p",null,"Following the removal of support for the Flash Player, this setting will be ignored."),(0,i.kt)("h3",{id:"embedfonts"},(0,i.kt)("inlineCode",{parentName:"h3"},"embedFonts")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Allows you to use custom fonts on StageText in the AIR application. The embedFonts element may contain any number of font elements."),(0,i.kt)("h4",{id:"example-10"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"\n \n ttf/space age.ttf\n space age\n \n \n ttf/xminus.ttf\n xminus\n \n\n")),(0,i.kt)("h3",{id:"resdir"},(0,i.kt)("inlineCode",{parentName:"h3"},"resdir")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"A folder that should be treated as containing Android resources files, to be merged in with the standard AIR application resources when building an APK or Android App Bundle file."),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"/docs/tutorials/platform/android/custom-resources"},"Custom Android Resources")," for more information on the usage of this value."),(0,i.kt)("h4",{id:"example-11"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"res\n")),(0,i.kt)("h3",{id:"filetypes"},(0,i.kt)("inlineCode",{parentName:"h3"},"fileTypes")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"fileTypes")," element allows you to declare the file types with which an AIR application can be associated on a desktop installation. "),(0,i.kt)("p",null,"When an AIR application is installed, any declared file type is registered with the operating system. If these file types are not already associated with another application, they are associated with the AIR application. To override an existing association between a file type and another application, use the NativeApplication.setAsDefaultApplication() method at run time (preferably with the user\u2019s permission)."),(0,i.kt)("p",null,"It contains an array of ",(0,i.kt)("inlineCode",{parentName:"p"},"fileType")," elements - see below."),(0,i.kt)("h4",{id:"content-3"},"Content"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"fileTypes")," element may contain any number of ",(0,i.kt)("inlineCode",{parentName:"p"},"fileType")," elements."),(0,i.kt)("h4",{id:"example-12"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"}," \n \n adobe.VideoFile \n avf \n Adobe Video File \n application/vnd.adobe.video-file \n \n icons/AIRApp_16.png \n icons/AIRApp_32.png \n icons/AIRApp_48.png \n icons/AIRApp_128.png \n \n \n\n")),(0,i.kt)("h3",{id:"extensions"},(0,i.kt)("inlineCode",{parentName:"h3"},"extensions")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Identifies the AIR Native Extensions used by an application. This element contains a list of ",(0,i.kt)("inlineCode",{parentName:"p"},"extensionID")," entries, each of which declares the identifier of an AIR Native Extension that will need to be loaded by the AIR runtime at application start-up."),(0,i.kt)("p",null,"For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},"\n extension.first\n extension.next\n extension.last\n\n")),(0,i.kt)("h3",{id:"allowmultipleinstances"},(0,i.kt)("inlineCode",{parentName:"h3"},"allowMultipleInstances")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Available: 50.0.0.1"),(0,i.kt)("p",null,"This setting can be used to allow multiple instances of a desktop AIR application to be launched as separate processes, rather than the standard behaviour of new invocations just resulting in an ",(0,i.kt)("inlineCode",{parentName:"p"},"InvokeEvent")," being sent to a running instance of the application.\nNote that on macOS, opening a new instance of an application must be done via ",(0,i.kt)("inlineCode",{parentName:"p"},"open -n"),"."),(0,i.kt)("p",null,"Default value is ",(0,i.kt)("inlineCode",{parentName:"p"},"false"),"."),(0,i.kt)("h3",{id:"stacktraces"},(0,i.kt)("inlineCode",{parentName:"h3"},"stacktraces")),(0,i.kt)("span",{class:"badge badge--success"},"optional"),(0,i.kt)("p",null,"Available: 50.1.1.1"),(0,i.kt)("p",null,"Controls the availability and verbosity of stack traces available to the application. The setting may be ",(0,i.kt)("inlineCode",{parentName:"p"},"none"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"standard")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"verbose"),".\nBefore this flag, the availability of stack traces depended on the SWF version number, and the verbosity on whether or not the SWF file included debug information (file name and line number details).\n",(0,i.kt)("inlineCode",{parentName:"p"},"none")," means that no stack traces are generated when an error is raised. ",(0,i.kt)("inlineCode",{parentName:"p"},"standard")," would cause a stack trace to be created but without file and line information.\n",(0,i.kt)("inlineCode",{parentName:"p"},"verbose")," would then include the file and line details, assuming these are available within the SWF file."),(0,i.kt)("h2",{id:"other-elements"},"Other elements"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"application")," element can also contain other elements that are described further in other sections:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/initialWindow"},(0,i.kt)("inlineCode",{parentName:"a"},"initialWindow"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/iPhone"},(0,i.kt)("inlineCode",{parentName:"a"},"iPhone"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/android"},(0,i.kt)("inlineCode",{parentName:"a"},"android"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/macOS"},(0,i.kt)("inlineCode",{parentName:"a"},"macOS"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"/docs/building/application-descriptor-files/elements/windows"},(0,i.kt)("inlineCode",{parentName:"a"},"windows")))),(0,i.kt)("h2",{id:"localisation"},"Localisation"),(0,i.kt)("p",null,"Some descriptor elements - ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"description")," - can be localised such that they will be displayed to the end user in the most appropriate entry matching the locale of the user's device.\nTo do this, provide a set of XML nodes with each language code that you want to support (see ",(0,i.kt)("a",{parentName:"p",href:"https://www.ietf.org/rfc/rfc4646.txt"},"RFC4646"),"), for example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},'\n Hello AIR\n Bonjour AIR\n Hola AIR\n \u3053\u3093\u306b\u3061\u306f AIR\n\n')),(0,i.kt)("h2",{id:"registering-file-types"},"Registering File Types"),(0,i.kt)("p",null,"An application descriptor file may provide a set of ",(0,i.kt)("inlineCode",{parentName:"p"},"fileType")," elements (within the ",(0,i.kt)("inlineCode",{parentName:"p"},"fileTypes")," element), in order to register these file types with the operating system when the AIR application is installed.\nThe registration is only possible (at install-time) if these file types are not already associated with another application: to override an existing association between a file type and another application,\nuse the ",(0,i.kt)("inlineCode",{parentName:"p"},"NativeApplication.setAsDefaultApplication()")," method at run time (preferably with the user\u2019s permission). Note that the runtime methods can only manage associations for the file types declared in the application descriptor."),(0,i.kt)("p",null,"A ",(0,i.kt)("inlineCode",{parentName:"p"},"fileType")," entry can have a number of number of optional child elements:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"name: Identifies the name of a file type. For example: ",(0,i.kt)("inlineCode",{parentName:"li"},"adobe.VideoFile")),(0,i.kt)("li",{parentName:"ul"},"extension: The extension string of a file type (without the dot). For example: ",(0,i.kt)("inlineCode",{parentName:"li"},"png")),(0,i.kt)("li",{parentName:"ul"},"description: The file type description is displayed to the user by the operating system (not localizable). For example: ",(0,i.kt)("inlineCode",{parentName:"li"},"PNG image")),(0,i.kt)("li",{parentName:"ul"},"contentType: The MIME type/subtype of the content to register. Note that the value is ignored on Linux if the file type is already registered and has an assigned MIME type. For example: ",(0,i.kt)("inlineCode",{parentName:"li"},"text/plain")),(0,i.kt)("li",{parentName:"ul"},"icon: An icon to associate with files that match the registered content type. This element contains a set of ",(0,i.kt)("inlineCode",{parentName:"li"},"imageNNxNN")," entries similar to the main AIR application icon.")),(0,i.kt)("p",null,"If the file type registration is successful, then the operating system will identify these files using the provided details and will open them using your AIR application.\nThe path of the selected file will be passed to the AIR application via the ",(0,i.kt)("inlineCode",{parentName:"p"},"InvokeEvent")," - adding an event listener for ",(0,i.kt)("inlineCode",{parentName:"p"},"InvokeEvent.INVOKE")," to the ",(0,i.kt)("inlineCode",{parentName:"p"},"NativeApplication.nativeApplication")," object\nwill trigger any invoke events to be passed to the listener function."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.d3731d55.js b/assets/js/runtime~main.c0043b56.js similarity index 99% rename from assets/js/runtime~main.d3731d55.js rename to assets/js/runtime~main.c0043b56.js index ef4554307..5e8758d2a 100644 --- a/assets/js/runtime~main.d3731d55.js +++ b/assets/js/runtime~main.c0043b56.js @@ -1 +1 @@ -(()=>{"use strict";var e,c,b,a,f,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var b=t[e]={exports:{}};return d[e].call(b.exports,b,b.exports,r),b.exports}r.m=d,e=[],r.O=(c,b,a,f)=>{if(!b){var d=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](b[o])))?b.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[b,a,f]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var d={};c=c||[null,b({}),b([]),b(b)];for(var t=2&a&&e;"object"==typeof t&&!~c.indexOf(t);t=b(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(f,d),f},r.d=(e,c)=>{for(var b in c)r.o(c,b)&&!r.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:c[b]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,b)=>(r.f[b](e,c),c)),[])),r.u=e=>"assets/js/"+({70:"f5c6720d",632:"1e49c42a",921:"3b769878",972:"50e60f15",1230:"fb978ddc",1343:"260044ea",1454:"7a4404a6",1459:"3242f979",1531:"e9e61fab",1565:"0075227b",1634:"87ecd577",1828:"81a22bb5",2385:"642b4b25",2397:"444a3b91",2587:"758cc2dc",2705:"79ffe732",2745:"70aeb984",2946:"0bd7a506",3546:"b86bdfbc",3900:"31a3d4e0",4033:"b1f4c04b",4200:"4d96ce7d",4233:"39b4899a",4254:"70bc9384",4673:"3127ffaa",4767:"3f743be5",5252:"739c8ee7",5267:"430c599e",5488:"a624ad96",5598:"2400e466",5603:"670e7e2a",5908:"478b8538",6169:"bfe074af",6171:"55301091",6439:"00caee28",6451:"9e3b992d",6515:"5c485bc6",6639:"46f88f72",6666:"6352bfec",6738:"ee7e4563",6766:"96a40b22",6890:"d6cd9ecb",7087:"585209da",7240:"d2e95b16",7267:"a86c154c",7766:"a77dda4b",7785:"92654692",7878:"ca2485c5",8043:"aa51dbbc",8267:"5b874e69",8297:"4c4ac865",8439:"57ef7359",8498:"e68e950d",8608:"8968a4f0",8769:"92ca5279",9048:"2f1fdf37",9411:"4de25097",9478:"4f3622a6",9509:"69afe496",9636:"b5ee6632",9765:"815a64de",10107:"d54e9f25",10585:"20977c37",10666:"0ad57f48",10789:"f42377e5",10791:"827dc93f",10885:"a954bcd2",10982:"ec043cc8",11231:"7fcb90ed",11288:"3f389362",11383:"6df16157",11563:"31f61f5a",11709:"de35be62",11738:"27e000d4",11908:"e1d25074",12012:"d7379e4f",12077:"782f9d71",12248:"6439ebbf",12441:"ec1fdef5",12721:"f4f9477a",12890:"63f64bbe",13063:"50524b34",13092:"54ec1023",13336:"eae369e5",13497:"6dcd4132",13733:"2a6a5bcc",14050:"f2d0195f",14112:"c08108c3",14303:"94613aa3",14337:"55b0114e",15245:"da6a8412",15251:"c25d5254",15287:"bff7ce34",15339:"99e033fa",15413:"f37989ad",15659:"293f897f",15947:"47d07a19",16344:"e6a5c537",16345:"1ff061c1",16375:"347883ef",16400:"561b42d8",16530:"dbe14372",16607:"49b5abdd",16857:"d28302cc",16953:"c3809a91",16968:"d99372ed",16997:"02005777",17102:"b183602f",17292:"573b0166",17300:"b792272c",17524:"19dcee13",17558:"49df5b37",17786:"fe62cabc",18048:"fbb080a0",18560:"2c79a8c9",18684:"5f7f10b8",18938:"b4493634",19069:"823cdfda",19163:"ee99288c",19253:"fdb17026",19258:"ba850201",19397:"a0113ec6",19683:"3b0ca883",20247:"cfcfe112",20434:"efe8fe1e",20637:"02544eaa",20650:"b6dfb202",20966:"31ee3481",21298:"1bb79cbe",21419:"a08ca8ed",22173:"1bdf7ac1",22420:"1a738350",22472:"28bbf1f1",22727:"f49a123d",22788:"b1e84092",23039:"9156e10e",23391:"b1fcc839",23422:"4f806ca3",23489:"b7015fcc",23510:"8cac8f0e",23553:"af7915c5",23569:"0390f82d",23640:"077a2863",23900:"ed43fb2c",24249:"a9e3cc4b",24383:"5bb034dc",24419:"ff451466",24439:"93a80894",24591:"b88f6635",24624:"cff878d5",24643:"d459e399",24653:"cd98c5ca",24686:"60085312",24857:"7cc6ed3b",24882:"cb1fc59a",25581:"e4f8c6fa",25671:"c5a14eac",25722:"1556085f",25880:"a32a5ab1",26002:"d2262734",26042:"eb348cd1",26055:"2595b88d",26278:"a7f0f5d2",26346:"77cd8515",26398:"3e9cd8a5",26498:"ba7acbf8",26591:"ff614a82",26713:"43bf66a2",26765:"3cc0bfc6",26815:"9dfc1440",26889:"b604a546",26898:"73b9641c",26911:"61c40617",27535:"b90ff62f",27613:"e7c8f52e",27641:"a63e0ecf",27805:"581f3b7a",27812:"255b8b35",27843:"e817aff8",27918:"17896441",28005:"fb5a53da",28007:"1693d1f1",28502:"9855eb0c",28778:"f38d8a49",28808:"ee840913",28932:"41885e44",29039:"406c3fa1",29195:"9beb71a1",29309:"143e1dd2",29463:"4e67b8ee",29514:"1be78505",29789:"0de38b55",29831:"53b01eb2",29847:"b0549333",29993:"fdc677de",30017:"fc60e918",30020:"237078b2",30198:"d8e54e6a",30451:"622c9a5d",30535:"3e2198da",30543:"789b6f77",30847:"0a37d225",30851:"6bb38190",30878:"b3ab9d9c",30890:"ee22cdb2",31065:"8fe122c0",31729:"e6606e29",31950:"aae073ad",31957:"40f7706e",32019:"1a25ec0b",32416:"65bf6038",32429:"c784913d",32616:"6dcc551c",32717:"d3ea22bd",32748:"99a9b59c",33215:"1f4a7623",33862:"fad74e71",34026:"00113e80",34061:"e8962988",34107:"d8edb80d",34147:"f02fee28",34316:"9aa8167d",34332:"394e441c",34470:"421eedaa",34477:"bc4fe87d",34531:"f8c6616d",34649:"878b6742",34775:"0b9b364f",35125:"4628eeb9",35188:"80f9fba1",35305:"11e4adc0",35582:"d0789231",35838:"d2bc1988",36075:"57b35015",36339:"3af807b6",36368:"75744c8e",36528:"58aafacc",36753:"cb67bce6",36836:"fea1970e",36844:"fa50cb45",36944:"ba15278f",37255:"75fe74b6",37490:"13c1bed2",38024:"cd49a83e",38234:"edbb7582",38343:"6d359147",38407:"e89f9111",38720:"a58384b5",39002:"5e63338a",39053:"3ba1af7d",39111:"fbfa75c3",39300:"d6a0e212",39388:"3d789c34",39439:"265f8c6c",39482:"43d46dc1",39629:"05d764a6",39770:"560c2a3b",39816:"5db891ba",39948:"43f0994f",40007:"23627f1d",40687:"6b302e4a",40716:"360bf618",40728:"dab85daf",40748:"f3c7c2ce",41072:"d8718c7b",41369:"cada0bd3",41769:"9d0b759f",41784:"24584499",41844:"685cb7f0",41964:"4ea5b3d1",42070:"c4c95680",42910:"b49514cb",42997:"53c568c8",43002:"2d95ca96",43066:"f1110b76",43267:"92c5b64f",43388:"b6f6c2c7",43414:"96e7d4c6",43455:"292dc608",44244:"376c13bd",44329:"f7020e12",44342:"6c867595",44533:"03d4a8db",44553:"9d56aaf6",44908:"bb804ab2",44934:"1cffcd35",44950:"49d4d74f",45018:"6f7b796f",45042:"bac25891",45061:"e5e4f44c",45110:"6233a11e",45468:"60fc6d59",45757:"0ad0e98e",45950:"64ecf849",46010:"eb553df0",46103:"ccc49370",46301:"36da10dc",46321:"0ecefe82",46371:"03a5765b",46376:"1c30fc52",46401:"1c24533b",46487:"2c895924",46804:"63c00f6d",46971:"c377a04b",47015:"87f4c28e",47189:"6ecdefa2",47295:"c1249d67",47677:"f8d9d64e",47761:"1a5de944",47904:"bdb603ad",48135:"37b73dfd",48293:"e22c47fc",48552:"3d4c8043",48610:"6875c492",48622:"9567c3cb",49050:"5c934eae",49103:"9b6aeac6",49182:"f427c3c4",49193:"979d1f76",49194:"a2abced9",49870:"ed6defb5",49880:"3fead359",49886:"b145189b",50113:"02a5c91c",50340:"64184ccb",50377:"70ef0f2c",50538:"74dc008b",50597:"02954b99",50773:"1a7d6891",51393:"6bfd94c1",51416:"b82b906b",51555:"2396a593",51637:"a9f500bf",51656:"c7190bf1",51703:"9c466762",51910:"67bf76f9",52042:"6bc81080",52128:"50697f8c",52280:"a200008b",52338:"a49066bc",52468:"432161c9",52535:"814f3328",52550:"3f959f3e",52660:"c9789e3f",52933:"5f096846",52992:"dfed30d8",53001:"dbbbd197",53154:"b5d86c45",53156:"c684df92",53237:"1df93b7f",53442:"dcd7143b",53496:"b494cd49",53578:"42c3ef62",53608:"9e4087bc",53656:"44cb45c4",53820:"9c78dc98",53841:"5f81cf92",53858:"f1033915",53902:"68317916",54306:"ba9985f9",54431:"556b3791",54550:"bf5c6ec1",54864:"37186002",54869:"b8dc12d1",54951:"6a15417a",54976:"2231a488",55211:"1d20ceda",55442:"15229d27",55449:"4b92d0f7",55568:"76a57fce",55700:"776f5ca7",55745:"1a5def29",56064:"afd0837d",56420:"0d746925",56590:"b5f41b49",56821:"d19bbba7",56902:"db23a403",57013:"81b914bb",57069:"c2bbca24",57171:"ab287901",57457:"c355328a",57526:"404ee4b8",57540:"d60ca510",57916:"a8c3bf62",58547:"3262fdb6",58598:"213446b8",58639:"7fc00721",58731:"6cb29bfb",58739:"d9f6f020",58826:"31abdbdd",58901:"2b8da922",58932:"f30b03ca",59115:"8f8f2b51",59319:"57e3bc5c",59432:"e657c00b",59555:"562f6aa3",59606:"891e7036",59615:"54c8f791",60244:"d92463a7",60372:"8744988f",60705:"404c205f",60722:"557bf77b",60751:"4e444cb9",60888:"fc9df442",60937:"a6c3b5d0",61450:"17636076",61803:"10fe60bd",61893:"50bd9b19",61927:"6b25efb2",62541:"afa0d535",62560:"48983c45",62887:"ec78dc8a",62971:"f421f633",63056:"7f272789",63070:"e8ba05dc",63404:"505f2e73",64013:"01a85c17",64065:"dea3893f",64149:"523b9378",64255:"dac3e60c",64387:"109cfdab",64495:"1a7ee218",64614:"c534ebf6",64804:"877492c5",65233:"e0bbaf01",65381:"fff8bfb8",65562:"394a19c2",65827:"bcfb757a",66211:"08aa19df",66542:"1c6de981",66621:"7769a307",66753:"09220732",66883:"0e169594",67009:"244aab14",67276:"86ba8bc4",67774:"4d4db300",68191:"584f33f2",68227:"26826546",68383:"b931be22",68390:"8b99c130",68467:"0b387740",68494:"85008509",68686:"e9b6e2b9",68744:"b2fa5a44",68907:"4c0c3b33",69162:"6a831198",69370:"0efed4a8",69511:"a02e6e2b",69571:"4a9afb76",69855:"ce45335a",70177:"3e7dd7f3",70213:"071bbe49",70313:"457a5f4e",70399:"17952d23",70404:"dce2ca95",70421:"7a9dc61d",70599:"d7a8c6c3",70942:"50238564",71108:"f42afdee",71424:"8a40895d",71715:"a2dbe0ac",71894:"23146baa",72156:"531ea435",72239:"d469812d",72348:"85487be5",72393:"9ea39fdf",72428:"638a0fd1",72571:"6641046c",72594:"48df297d",72628:"8e4f7682",72793:"d4ffcdee",73111:"52e05d27",73171:"05e1073b",73366:"ff19e50d",73551:"8dbf76b2",73599:"4f04b67c",73862:"a784d869",73923:"fd42b8cd",74485:"0da360f2",74514:"c7fb6649",74592:"77fc6745",74730:"4f32b055",74803:"e3a32727",75065:"2262ce7c",75118:"c777396b",75254:"5a1617f4",75496:"43ab5c57",75599:"580380e0",75626:"7de7ec2e",75939:"1116edd8",76581:"b2a447c9",76696:"ce7343f9",76815:"f7c31e00",76836:"f1e9ba91",77005:"499b8489",77018:"75410d66",77253:"95281d3a",77273:"cf0fa099",77337:"65f26dbc",77339:"5b8a7a7e",77442:"5a9b0f2c",77529:"13d94f48",77577:"6dcaddc4",78102:"ed9580b5",78131:"6b2d5f2b",78313:"be11db40",78369:"92728614",78376:"37278329",78451:"74caf440",78562:"fe86874a",79695:"822a8da5",79946:"d2e4b60d",80053:"935f2afb",80202:"75957c6e",80399:"0c446527",80688:"505a7e84",81317:"bfa91014",81394:"f06a3584",81734:"d230730a",81767:"ff4b0e7e",81933:"f406fa07",82063:"30ff7850",82068:"6b1b17e3",82231:"1c056199",82433:"11f59681",82443:"0f7380fa",82692:"7978d17e",82719:"96eaee2e",82724:"ae372b87",82797:"6d897242",83054:"4a97e2ba",83310:"2adb5274",83519:"d0d32364",83542:"12c7542d",83646:"2c8adea4",83647:"71c1a9a2",83779:"5154a0c0",83814:"06da0517",83940:"d97726c4",84027:"2328795e",84109:"65cc375b",84209:"fd8b21b9",84361:"b2ddf146",84367:"d633ce0b",84373:"34c8741a",84462:"df507495",84681:"20125bf3",84688:"b035c451",84742:"db40a3d0",84960:"7cca3229",85142:"0bab6cfb",85154:"60d90122",85187:"37c49df1",85207:"e7d6ed4b",85234:"d4e870d0",85526:"53a76031",85750:"a48015fd",85926:"eac4cf92",86085:"88c4395d",86116:"adc7d4bb",86166:"15659320",86226:"987eac9e",86303:"7622e8c0",86438:"e22327ad",86587:"05d1f4e8",86914:"be362a92",87047:"e97ce8a2",87055:"2fd62ebd",87141:"63eda9ff",87374:"288139cb",87514:"5e967ed4",87598:"43e050e6",87944:"eff6a74c",88042:"a11ac63a",88069:"91dac72f",88276:"e2638161",88607:"08ea5a71",88813:"b63dfd52",88940:"3fc06181",89055:"5d44edd9",89165:"9e98e556",89527:"a83fca78",90043:"6ce2a349",90314:"786c90b7",90658:"18d4b376",90862:"ea8c328a",91405:"d521d200",91413:"3452ccb6",91497:"49ba5fe1",91544:"8d38a755",91608:"146fb227",91786:"40820b5a",91874:"7dfb83d7",91997:"461edca2",92204:"f2448633",92597:"5ba66649",92720:"658fd2ae",92802:"66acf69d",92885:"e143fda9",92989:"0de6b997",93089:"a6aa9e1f",93239:"2fd58bdb",93442:"730af974",93548:"51772be9",93590:"241a26cb",93627:"9c82c46c",94019:"15890802",94031:"0ddec893",94118:"cb950484",94367:"0b858d2f",94406:"452de1e2",94471:"0d040de0",94536:"62e5a085",94760:"5cba42da",94847:"1967d9b6",94991:"5ffbb054",95033:"4d2c8f2a",95255:"97dfa070",95273:"b46f3282",95481:"b571fd7a",95623:"270ab2a8",95690:"1916b8ce",95877:"7d7f0ccf",96088:"b67da459",96179:"72d89c46",96408:"638caea5",96420:"e2b03391",96467:"d935ad93",96621:"02e4c897",97001:"86aa610a",97223:"69aec5e5",97659:"09c00e8c",97797:"e6ea580b",97897:"6156ae12",97906:"ad16ea4d",97927:"1f5c10d1",97963:"c881e1b7",97985:"4cc8c5ab",98055:"4409662a",98103:"115175ad",98403:"435a4007",98404:"729e5a0c",98432:"e7481506",98440:"4b2f2c75",98921:"1eccaf7c",98943:"de2fef87",98948:"1c08fd51",99343:"568be63a",99454:"3a3c8582",99834:"35279f86"}[e]||e)+"."+{70:"f7065486",632:"597b3028",921:"3635c464",972:"bff2e511",1230:"58cea966",1343:"9feb5a67",1454:"ca66fab4",1459:"24b3a72c",1531:"32d0c81c",1565:"62ac7a2a",1634:"b03aea31",1828:"8aa8e310",2385:"d958ecfb",2397:"b8114d9a",2587:"16ce9fc9",2705:"aec9d0c6",2745:"5d6ddb7f",2946:"1e10e498",3546:"d235a11d",3900:"6cea05ab",4033:"949387d0",4200:"feda2f67",4233:"cf7bf3f2",4254:"c5ed1b58",4673:"cdb8b12f",4767:"ec4661b6",5252:"ba2eb608",5267:"42c83bdd",5488:"83b48c85",5598:"082c326a",5603:"99c5aabd",5908:"23137123",6169:"d17c3837",6171:"ca3cddaa",6439:"c6654429",6451:"a56ffe1b",6515:"a3b45cb1",6639:"97e32bf4",6666:"e54cec77",6738:"b525d195",6766:"67d79818",6890:"d4d01d01",7087:"22667e38",7240:"7dd5f13b",7267:"980df636",7766:"57a0b973",7785:"07013c4b",7878:"cf3bd363",8043:"0fe29e7b",8267:"5c1a8c66",8297:"3b1971b7",8439:"11201cfb",8498:"a314270a",8608:"7bb0c28e",8769:"37d03643",9048:"952919b9",9411:"62cca887",9478:"66e03ece",9509:"0197ca01",9636:"2e44022b",9765:"3a5baebf",10107:"8da2f00e",10585:"0dcfb19e",10666:"7882dc0e",10789:"3f7000f3",10791:"e31a3487",10885:"8d20f241",10982:"64e678dd",11231:"d1be9562",11288:"6ec93b63",11383:"6155999d",11563:"75c213a5",11709:"d4e6452f",11738:"2f59d114",11908:"2d57563b",12012:"e779e66f",12077:"30c4f6f5",12248:"c67d9171",12441:"040e1bc1",12721:"b422ba07",12890:"613f5a1e",13063:"39c03a4d",13092:"4c9623ba",13336:"406f6c70",13497:"5dbc452b",13733:"788c78ce",14050:"80f49a56",14112:"3024b336",14303:"6f2b65ae",14337:"da2fe9b7",15245:"04d139c7",15251:"ccd566d7",15287:"16bf9630",15339:"60b8b5d0",15413:"ff8ae7cd",15659:"f5f7f8d5",15944:"8d4dc994",15947:"b9cff23a",16344:"7c16db5c",16345:"051254d1",16375:"60192170",16400:"1aab4fb8",16530:"151b312e",16607:"059c41d6",16857:"634c2e2a",16953:"a9891378",16968:"7e497ea6",16997:"28da0b2d",17102:"f52947f8",17292:"84588220",17300:"5002c196",17524:"9bdc6c59",17558:"c5e0076b",17786:"5676a74b",18048:"b8a63b97",18560:"0454d90c",18684:"8798f89e",18938:"16741a07",19069:"878a516c",19163:"d2f13614",19253:"b4fd44a2",19258:"c1989b28",19397:"9cf1cfaa",19683:"53716c63",20247:"254dad6f",20434:"35fd0772",20637:"8059db8d",20650:"d6967d12",20966:"6a1f5f3c",21298:"d5bc952b",21419:"21deaf33",22173:"8ddab644",22420:"36c1839c",22472:"ba3f6c6b",22727:"60fc4300",22788:"096c6635",23039:"f781bbaa",23391:"2f0a86b6",23422:"13b6cdd4",23489:"256712d4",23510:"37ecdda1",23553:"2e18346c",23569:"18ced8ea",23640:"0c963240",23900:"7351da24",24249:"2a84a40b",24383:"c7069d17",24419:"253926f9",24439:"a89c1f87",24591:"3c7caae6",24624:"f15268a1",24643:"15091d96",24653:"df465b14",24686:"cef6f38b",24857:"4454c940",24882:"1e6ce46f",25581:"0f9572ab",25671:"2bb5d453",25722:"9fa213a6",25880:"b8e7eefa",26002:"70aa9fe8",26042:"8aa3917c",26055:"a9aa4f48",26207:"0e0c64af",26278:"f66d37e9",26346:"a9d811c5",26398:"c3baadbd",26498:"727edc39",26591:"27086a26",26713:"e044e399",26765:"58d463b9",26815:"5ac2386a",26889:"5564ecea",26898:"4d431af2",26911:"079978b3",27535:"55a549de",27613:"f38cd4d6",27641:"01803dba",27805:"66d2ddd0",27812:"52ae233a",27843:"8b76a6b8",27918:"25e54d72",28005:"da971268",28007:"143cb489",28502:"13239d3f",28778:"d769e721",28808:"f26e700c",28932:"38c26988",29039:"27ca4910",29195:"c5a6ad03",29309:"156aef72",29463:"572c8286",29514:"fe3e9b97",29789:"53dcd478",29831:"77733cef",29847:"6442185a",29993:"80e7cbfc",30017:"4402260f",30020:"beebf398",30198:"b13c9594",30451:"00fc4434",30535:"ab461b70",30543:"f0671a0f",30847:"e51e612f",30851:"579b1a3d",30878:"bf647aa0",30890:"ec98495c",31065:"4abf1668",31729:"908b803c",31950:"c24635b4",31957:"c3681332",32019:"f955d2a8",32416:"5b98f4d1",32429:"83e2d186",32616:"b8fdf8ff",32717:"2cdb87b2",32748:"893c82bd",33215:"fd1d7ef1",33862:"9dc8fbe0",34026:"70248aed",34061:"d154dda2",34107:"1a436641",34147:"5276ab13",34316:"b07258f1",34332:"930adbac",34470:"e352ebb2",34477:"165d0465",34531:"0e07ec08",34649:"eb27e366",34775:"71a14de3",35125:"78b1388b",35188:"b9d813b0",35305:"7d2529d4",35582:"6ae8a403",35838:"e2b07f94",36075:"a1de0304",36339:"c40cc016",36368:"8a1bd246",36528:"5afc8fab",36753:"6ade3a5f",36836:"49206c06",36844:"08591c1e",36944:"9fa8f939",37255:"993603f5",37490:"80fb5968",38024:"1d3e4a63",38234:"16619ac7",38343:"94d5e932",38407:"2dbc78e3",38720:"4ddd8efa",39002:"5850bdb3",39053:"7f895319",39111:"7abe1721",39300:"ef048acf",39388:"0a16b809",39439:"efd46e8c",39482:"22903849",39629:"b78ad0cb",39770:"6b1d9204",39816:"1e1db937",39948:"00513ba5",40007:"59c7e167",40687:"f1ed2b28",40716:"918df0bf",40728:"f91efea8",40748:"b91ff58d",41072:"066df380",41369:"22d9253f",41769:"b8f4cb1b",41784:"07969109",41844:"a7f4af11",41964:"74880a23",42070:"6b80d2d0",42910:"4658e2d0",42997:"411f2aad",43002:"c2d154a1",43066:"78f2bfa2",43267:"e1c06b01",43388:"e2c1c093",43414:"977b0240",43455:"03032869",44244:"719c4bc9",44329:"90179991",44342:"65310d67",44533:"a4401850",44553:"2448d50d",44908:"920002b3",44934:"a250a7e8",44950:"261d57e5",45018:"4f507f41",45042:"17ac01c6",45061:"f84a3237",45110:"246e94b4",45468:"c9d60dca",45757:"b4c86fbb",45950:"4b53ccc0",46010:"c53aa380",46103:"4bda63d7",46301:"7dc6f4ad",46321:"4c2c7cc8",46371:"220710b4",46376:"94bb9803",46401:"a4e54798",46487:"e1dbcdd1",46804:"f9ddd974",46971:"f33a9d06",47015:"f64a00a0",47189:"73cd3fca",47295:"4044ca0a",47677:"e40776eb",47761:"168752cf",47904:"66a176cb",48135:"1b6227f9",48293:"09611b80",48552:"3e9b31a2",48610:"1206c51d",48622:"52572d7f",49050:"276b930e",49103:"e8cf30bb",49182:"873a504e",49193:"fd03df6a",49194:"de6ab697",49870:"89a9d4ca",49880:"badaa50b",49886:"61eb5b71",50113:"08627b92",50340:"885dfb28",50377:"8f704468",50538:"054b014b",50597:"8de28d93",50773:"970ccfa9",51393:"d235e68b",51416:"2de76633",51555:"e524029d",51637:"9951b3a3",51656:"7218a9c4",51703:"3d96d84f",51910:"36146df8",52042:"58f33291",52128:"60b69a8d",52280:"c1438053",52338:"6a04ff68",52468:"55b47e8b",52535:"ef6c0395",52550:"61e90ed2",52660:"6cf159b1",52933:"651b5156",52992:"9884a1e8",53001:"b2566b51",53154:"7d10e486",53156:"4cd258f6",53237:"25bc5842",53442:"4c68d55e",53496:"4b1e09f2",53578:"d43d752f",53608:"879f9c78",53656:"cfd40a0d",53820:"02df77f6",53841:"a7febe12",53858:"89b8222c",53902:"4a99eab0",54306:"763f0889",54431:"01abde87",54550:"06d6087f",54864:"493cf21c",54869:"65021d2b",54951:"fb851401",54976:"6d386c95",55211:"15239882",55442:"9f3c6e2e",55449:"90199928",55568:"89dd9668",55700:"2f4c553b",55745:"cecd0442",56064:"6f4d2b8a",56420:"69d5c439",56590:"c985aa1c",56821:"b5d104ae",56902:"064dfa31",57013:"e70e9adc",57069:"c07f773d",57171:"90f580fe",57457:"7ef3539e",57526:"09065b79",57540:"1b013bba",57916:"52e70e7e",58547:"07174a10",58598:"be3291b8",58639:"65e8d8e4",58731:"83acbbe4",58739:"c833c452",58826:"12a43ed6",58901:"59f0008a",58932:"a9b0cd62",59115:"5109f306",59319:"346b752a",59432:"a998cf78",59555:"ca1135f4",59606:"c646230e",59615:"3286c977",60207:"9a4db7e5",60244:"a1630ccd",60372:"8f5468de",60705:"b3247da3",60722:"9ab1224f",60751:"4ea2c1c3",60888:"1334686a",60937:"3cd2a3c2",61450:"46de8ba2",61803:"e3949ac7",61893:"d646f531",61927:"2f28027b",62541:"9c3a6f2b",62560:"4190b3b5",62887:"d64e41f5",62971:"ba440ada",63056:"c6c8d5a9",63070:"9aac725d",63404:"c5f3721e",64013:"deb01743",64065:"e1a144b7",64149:"248c51a1",64255:"2118d3fd",64387:"4e7be428",64495:"f6ea6e9a",64614:"dfe90828",64804:"ebbf940a",65233:"8f96de23",65381:"8c7ceae9",65562:"7f4d19fd",65827:"0c6d03fd",66211:"157aae0b",66542:"ba0d1549",66621:"592c7d6d",66753:"38f8dd17",66883:"ff974606",67009:"1848a52a",67276:"67578fce",67774:"93ea275d",68191:"860f7101",68227:"18231fec",68383:"abf6faf2",68390:"ecd62120",68467:"8c5ece40",68494:"2944df58",68686:"287cc48e",68744:"1663d3a9",68907:"e6969de6",69162:"5a2eb442",69370:"806f9374",69496:"8c0fa895",69511:"14956d9a",69571:"b094c120",69855:"3e734c81",70177:"902fd50d",70213:"06512697",70313:"bebc686d",70399:"a12e3d72",70404:"ba2c9664",70421:"83ff546f",70599:"e8c4f793",70942:"faa03eed",71108:"576cc116",71424:"ebdfa4a0",71715:"c5747515",71894:"e8af2de5",72156:"08b581fc",72239:"48f99672",72348:"e0f8a3b5",72393:"437b3908",72428:"eaf96c91",72571:"b696174f",72594:"8452f901",72628:"c5a960df",72793:"b059c570",73111:"59300dfd",73171:"709d4514",73366:"ef5ae43c",73551:"5a78a94a",73599:"66f1f3a4",73862:"1f7ee8e5",73923:"18f1f532",74248:"c027ebff",74485:"97d2423a",74514:"604e80b9",74592:"f6dcd5e0",74730:"04252a06",74803:"387e6364",75065:"cd2ec28c",75118:"bbd75409",75254:"c5a880a5",75496:"718f9b0e",75599:"38688f24",75626:"e879d0bf",75939:"eb4fc7d8",76581:"941c10b6",76696:"648e985a",76815:"d4131906",76836:"69f7739b",77005:"4f87c606",77018:"fe42ef4a",77253:"e080ea71",77273:"906db6ec",77337:"26d680fa",77339:"5ab407a3",77442:"fcfbae1b",77529:"cb9c7cd0",77577:"1e698388",78102:"21de8ac0",78131:"3c90a722",78313:"d8c05d75",78369:"e37d1c93",78376:"634f4904",78451:"d68511ab",78562:"c0502cde",79695:"df1e4f50",79946:"74774a8a",80053:"15549adb",80202:"f44f2242",80399:"ee74d6b5",80688:"c352f4f2",81317:"12c2c832",81394:"f89c6b5f",81734:"d37a86dd",81767:"a7c1a8a7",81933:"393137cd",82063:"04ffdded",82068:"827b8ce9",82231:"19ff98d2",82433:"569fb339",82443:"a5aabf7c",82692:"85a318ef",82719:"11c89a9f",82724:"8b3bda14",82797:"9385ee95",83054:"44929424",83310:"8c353b98",83519:"a7bfafb5",83542:"7b01c809",83646:"9781bb0f",83647:"3344cab5",83779:"69553030",83814:"5fa27f98",83940:"528b5b4f",84027:"23772431",84109:"502ffd7e",84209:"5afa1630",84361:"b57a7668",84367:"dbe35d1f",84373:"bc2d53a5",84462:"ef85bca7",84681:"c9fad60c",84688:"9d2e38a9",84742:"f844fc1b",84960:"3df79785",85142:"9668dbda",85154:"965d1855",85187:"d9596f48",85207:"088d62e3",85234:"5faa2281",85526:"f7c3ebb8",85750:"f719b1f8",85926:"c29acda0",86085:"9dfe758b",86116:"017c8bbc",86166:"d345dabb",86226:"359405c4",86303:"07a71bae",86438:"68ffcfeb",86587:"964454b6",86914:"50347975",87047:"7686f0d6",87055:"549d73fd",87141:"4060d5a5",87374:"a00bdab1",87514:"d22f954a",87598:"8d34530d",87944:"7158f8d6",88042:"219d4a08",88069:"9fbe26b3",88276:"44e9bc0e",88607:"12252d10",88813:"b3186363",88940:"25fbf57a",89055:"0ee76c6f",89165:"f3539bea",89527:"001e7b0f",90043:"68603e22",90314:"a67dbd4a",90658:"2e6d43de",90862:"83003f98",91405:"f96120ed",91413:"7b72c893",91497:"bd1097e8",91544:"6eb679f8",91608:"48e48aa6",91786:"3b887f3b",91874:"0e617854",91997:"da22c26d",92204:"c0179694",92597:"c7cc7e9d",92720:"706b3927",92802:"a22e0844",92885:"38f09a22",92989:"8474736e",93089:"7f454a70",93239:"ec454c7e",93442:"76158291",93548:"461a9230",93590:"6a384561",93627:"cc030565",94019:"f075021d",94031:"674138b0",94118:"9fe0f656",94367:"c8a82ffe",94406:"9b22fafe",94471:"4bb3af84",94536:"8fad226f",94760:"dbbbf31a",94847:"6f426f02",94991:"250bb444",95033:"646e98de",95255:"992e4cc3",95273:"3e1d165f",95481:"0f1cf197",95623:"f327997a",95690:"5bb3e52b",95877:"44d4e763",96088:"a5428622",96179:"b37a4174",96408:"9e11d275",96420:"48775575",96467:"29136bce",96621:"c9340302",97001:"e7f8b75c",97223:"fe83654d",97659:"cde5f148",97797:"c78e38cb",97897:"a3acf2c7",97906:"571da3be",97927:"97bec960",97963:"c43ffbe0",97985:"ce60f458",98055:"f0552f88",98103:"4b0ac381",98403:"5b46b56b",98404:"dcf321f7",98432:"1486e0ac",98440:"9810ef06",98921:"9fda75ee",98943:"5001f1ac",98948:"9c59830a",99343:"0bf3adc2",99454:"0dadacde",99834:"11c9fdb8"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),a={},f="airsdk-dev:",r.l=(e,c,b,d)=>{if(a[e])a[e].push(c);else{var t,o;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=a[e];if(delete a[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(b))),c)return c(b)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={15659320:"86166",15890802:"94019",17636076:"61450",17896441:"27918",24584499:"41784",26826546:"68227",37186002:"54864",37278329:"78376",50238564:"70942",55301091:"6171",60085312:"24686",68317916:"53902",85008509:"68494",92654692:"7785",92728614:"78369",f5c6720d:"70","1e49c42a":"632","3b769878":"921","50e60f15":"972",fb978ddc:"1230","260044ea":"1343","7a4404a6":"1454","3242f979":"1459",e9e61fab:"1531","0075227b":"1565","87ecd577":"1634","81a22bb5":"1828","642b4b25":"2385","444a3b91":"2397","758cc2dc":"2587","79ffe732":"2705","70aeb984":"2745","0bd7a506":"2946",b86bdfbc:"3546","31a3d4e0":"3900",b1f4c04b:"4033","4d96ce7d":"4200","39b4899a":"4233","70bc9384":"4254","3127ffaa":"4673","3f743be5":"4767","739c8ee7":"5252","430c599e":"5267",a624ad96:"5488","2400e466":"5598","670e7e2a":"5603","478b8538":"5908",bfe074af:"6169","00caee28":"6439","9e3b992d":"6451","5c485bc6":"6515","46f88f72":"6639","6352bfec":"6666",ee7e4563:"6738","96a40b22":"6766",d6cd9ecb:"6890","585209da":"7087",d2e95b16:"7240",a86c154c:"7267",a77dda4b:"7766",ca2485c5:"7878",aa51dbbc:"8043","5b874e69":"8267","4c4ac865":"8297","57ef7359":"8439",e68e950d:"8498","8968a4f0":"8608","92ca5279":"8769","2f1fdf37":"9048","4de25097":"9411","4f3622a6":"9478","69afe496":"9509",b5ee6632:"9636","815a64de":"9765",d54e9f25:"10107","20977c37":"10585","0ad57f48":"10666",f42377e5:"10789","827dc93f":"10791",a954bcd2:"10885",ec043cc8:"10982","7fcb90ed":"11231","3f389362":"11288","6df16157":"11383","31f61f5a":"11563",de35be62:"11709","27e000d4":"11738",e1d25074:"11908",d7379e4f:"12012","782f9d71":"12077","6439ebbf":"12248",ec1fdef5:"12441",f4f9477a:"12721","63f64bbe":"12890","50524b34":"13063","54ec1023":"13092",eae369e5:"13336","6dcd4132":"13497","2a6a5bcc":"13733",f2d0195f:"14050",c08108c3:"14112","94613aa3":"14303","55b0114e":"14337",da6a8412:"15245",c25d5254:"15251",bff7ce34:"15287","99e033fa":"15339",f37989ad:"15413","293f897f":"15659","47d07a19":"15947",e6a5c537:"16344","1ff061c1":"16345","347883ef":"16375","561b42d8":"16400",dbe14372:"16530","49b5abdd":"16607",d28302cc:"16857",c3809a91:"16953",d99372ed:"16968","02005777":"16997",b183602f:"17102","573b0166":"17292",b792272c:"17300","19dcee13":"17524","49df5b37":"17558",fe62cabc:"17786",fbb080a0:"18048","2c79a8c9":"18560","5f7f10b8":"18684",b4493634:"18938","823cdfda":"19069",ee99288c:"19163",fdb17026:"19253",ba850201:"19258",a0113ec6:"19397","3b0ca883":"19683",cfcfe112:"20247",efe8fe1e:"20434","02544eaa":"20637",b6dfb202:"20650","31ee3481":"20966","1bb79cbe":"21298",a08ca8ed:"21419","1bdf7ac1":"22173","1a738350":"22420","28bbf1f1":"22472",f49a123d:"22727",b1e84092:"22788","9156e10e":"23039",b1fcc839:"23391","4f806ca3":"23422",b7015fcc:"23489","8cac8f0e":"23510",af7915c5:"23553","0390f82d":"23569","077a2863":"23640",ed43fb2c:"23900",a9e3cc4b:"24249","5bb034dc":"24383",ff451466:"24419","93a80894":"24439",b88f6635:"24591",cff878d5:"24624",d459e399:"24643",cd98c5ca:"24653","7cc6ed3b":"24857",cb1fc59a:"24882",e4f8c6fa:"25581",c5a14eac:"25671","1556085f":"25722",a32a5ab1:"25880",d2262734:"26002",eb348cd1:"26042","2595b88d":"26055",a7f0f5d2:"26278","77cd8515":"26346","3e9cd8a5":"26398",ba7acbf8:"26498",ff614a82:"26591","43bf66a2":"26713","3cc0bfc6":"26765","9dfc1440":"26815",b604a546:"26889","73b9641c":"26898","61c40617":"26911",b90ff62f:"27535",e7c8f52e:"27613",a63e0ecf:"27641","581f3b7a":"27805","255b8b35":"27812",e817aff8:"27843",fb5a53da:"28005","1693d1f1":"28007","9855eb0c":"28502",f38d8a49:"28778",ee840913:"28808","41885e44":"28932","406c3fa1":"29039","9beb71a1":"29195","143e1dd2":"29309","4e67b8ee":"29463","1be78505":"29514","0de38b55":"29789","53b01eb2":"29831",b0549333:"29847",fdc677de:"29993",fc60e918:"30017","237078b2":"30020",d8e54e6a:"30198","622c9a5d":"30451","3e2198da":"30535","789b6f77":"30543","0a37d225":"30847","6bb38190":"30851",b3ab9d9c:"30878",ee22cdb2:"30890","8fe122c0":"31065",e6606e29:"31729",aae073ad:"31950","40f7706e":"31957","1a25ec0b":"32019","65bf6038":"32416",c784913d:"32429","6dcc551c":"32616",d3ea22bd:"32717","99a9b59c":"32748","1f4a7623":"33215",fad74e71:"33862","00113e80":"34026",e8962988:"34061",d8edb80d:"34107",f02fee28:"34147","9aa8167d":"34316","394e441c":"34332","421eedaa":"34470",bc4fe87d:"34477",f8c6616d:"34531","878b6742":"34649","0b9b364f":"34775","4628eeb9":"35125","80f9fba1":"35188","11e4adc0":"35305",d0789231:"35582",d2bc1988:"35838","57b35015":"36075","3af807b6":"36339","75744c8e":"36368","58aafacc":"36528",cb67bce6:"36753",fea1970e:"36836",fa50cb45:"36844",ba15278f:"36944","75fe74b6":"37255","13c1bed2":"37490",cd49a83e:"38024",edbb7582:"38234","6d359147":"38343",e89f9111:"38407",a58384b5:"38720","5e63338a":"39002","3ba1af7d":"39053",fbfa75c3:"39111",d6a0e212:"39300","3d789c34":"39388","265f8c6c":"39439","43d46dc1":"39482","05d764a6":"39629","560c2a3b":"39770","5db891ba":"39816","43f0994f":"39948","23627f1d":"40007","6b302e4a":"40687","360bf618":"40716",dab85daf:"40728",f3c7c2ce:"40748",d8718c7b:"41072",cada0bd3:"41369","9d0b759f":"41769","685cb7f0":"41844","4ea5b3d1":"41964",c4c95680:"42070",b49514cb:"42910","53c568c8":"42997","2d95ca96":"43002",f1110b76:"43066","92c5b64f":"43267",b6f6c2c7:"43388","96e7d4c6":"43414","292dc608":"43455","376c13bd":"44244",f7020e12:"44329","6c867595":"44342","03d4a8db":"44533","9d56aaf6":"44553",bb804ab2:"44908","1cffcd35":"44934","49d4d74f":"44950","6f7b796f":"45018",bac25891:"45042",e5e4f44c:"45061","6233a11e":"45110","60fc6d59":"45468","0ad0e98e":"45757","64ecf849":"45950",eb553df0:"46010",ccc49370:"46103","36da10dc":"46301","0ecefe82":"46321","03a5765b":"46371","1c30fc52":"46376","1c24533b":"46401","2c895924":"46487","63c00f6d":"46804",c377a04b:"46971","87f4c28e":"47015","6ecdefa2":"47189",c1249d67:"47295",f8d9d64e:"47677","1a5de944":"47761",bdb603ad:"47904","37b73dfd":"48135",e22c47fc:"48293","3d4c8043":"48552","6875c492":"48610","9567c3cb":"48622","5c934eae":"49050","9b6aeac6":"49103",f427c3c4:"49182","979d1f76":"49193",a2abced9:"49194",ed6defb5:"49870","3fead359":"49880",b145189b:"49886","02a5c91c":"50113","64184ccb":"50340","70ef0f2c":"50377","74dc008b":"50538","02954b99":"50597","1a7d6891":"50773","6bfd94c1":"51393",b82b906b:"51416","2396a593":"51555",a9f500bf:"51637",c7190bf1:"51656","9c466762":"51703","67bf76f9":"51910","6bc81080":"52042","50697f8c":"52128",a200008b:"52280",a49066bc:"52338","432161c9":"52468","814f3328":"52535","3f959f3e":"52550",c9789e3f:"52660","5f096846":"52933",dfed30d8:"52992",dbbbd197:"53001",b5d86c45:"53154",c684df92:"53156","1df93b7f":"53237",dcd7143b:"53442",b494cd49:"53496","42c3ef62":"53578","9e4087bc":"53608","44cb45c4":"53656","9c78dc98":"53820","5f81cf92":"53841",f1033915:"53858",ba9985f9:"54306","556b3791":"54431",bf5c6ec1:"54550",b8dc12d1:"54869","6a15417a":"54951","2231a488":"54976","1d20ceda":"55211","15229d27":"55442","4b92d0f7":"55449","76a57fce":"55568","776f5ca7":"55700","1a5def29":"55745",afd0837d:"56064","0d746925":"56420",b5f41b49:"56590",d19bbba7:"56821",db23a403:"56902","81b914bb":"57013",c2bbca24:"57069",ab287901:"57171",c355328a:"57457","404ee4b8":"57526",d60ca510:"57540",a8c3bf62:"57916","3262fdb6":"58547","213446b8":"58598","7fc00721":"58639","6cb29bfb":"58731",d9f6f020:"58739","31abdbdd":"58826","2b8da922":"58901",f30b03ca:"58932","8f8f2b51":"59115","57e3bc5c":"59319",e657c00b:"59432","562f6aa3":"59555","891e7036":"59606","54c8f791":"59615",d92463a7:"60244","8744988f":"60372","404c205f":"60705","557bf77b":"60722","4e444cb9":"60751",fc9df442:"60888",a6c3b5d0:"60937","10fe60bd":"61803","50bd9b19":"61893","6b25efb2":"61927",afa0d535:"62541","48983c45":"62560",ec78dc8a:"62887",f421f633:"62971","7f272789":"63056",e8ba05dc:"63070","505f2e73":"63404","01a85c17":"64013",dea3893f:"64065","523b9378":"64149",dac3e60c:"64255","109cfdab":"64387","1a7ee218":"64495",c534ebf6:"64614","877492c5":"64804",e0bbaf01:"65233",fff8bfb8:"65381","394a19c2":"65562",bcfb757a:"65827","08aa19df":"66211","1c6de981":"66542","7769a307":"66621","09220732":"66753","0e169594":"66883","244aab14":"67009","86ba8bc4":"67276","4d4db300":"67774","584f33f2":"68191",b931be22:"68383","8b99c130":"68390","0b387740":"68467",e9b6e2b9:"68686",b2fa5a44:"68744","4c0c3b33":"68907","6a831198":"69162","0efed4a8":"69370",a02e6e2b:"69511","4a9afb76":"69571",ce45335a:"69855","3e7dd7f3":"70177","071bbe49":"70213","457a5f4e":"70313","17952d23":"70399",dce2ca95:"70404","7a9dc61d":"70421",d7a8c6c3:"70599",f42afdee:"71108","8a40895d":"71424",a2dbe0ac:"71715","23146baa":"71894","531ea435":"72156",d469812d:"72239","85487be5":"72348","9ea39fdf":"72393","638a0fd1":"72428","6641046c":"72571","48df297d":"72594","8e4f7682":"72628",d4ffcdee:"72793","52e05d27":"73111","05e1073b":"73171",ff19e50d:"73366","8dbf76b2":"73551","4f04b67c":"73599",a784d869:"73862",fd42b8cd:"73923","0da360f2":"74485",c7fb6649:"74514","77fc6745":"74592","4f32b055":"74730",e3a32727:"74803","2262ce7c":"75065",c777396b:"75118","5a1617f4":"75254","43ab5c57":"75496","580380e0":"75599","7de7ec2e":"75626","1116edd8":"75939",b2a447c9:"76581",ce7343f9:"76696",f7c31e00:"76815",f1e9ba91:"76836","499b8489":"77005","75410d66":"77018","95281d3a":"77253",cf0fa099:"77273","65f26dbc":"77337","5b8a7a7e":"77339","5a9b0f2c":"77442","13d94f48":"77529","6dcaddc4":"77577",ed9580b5:"78102","6b2d5f2b":"78131",be11db40:"78313","74caf440":"78451",fe86874a:"78562","822a8da5":"79695",d2e4b60d:"79946","935f2afb":"80053","75957c6e":"80202","0c446527":"80399","505a7e84":"80688",bfa91014:"81317",f06a3584:"81394",d230730a:"81734",ff4b0e7e:"81767",f406fa07:"81933","30ff7850":"82063","6b1b17e3":"82068","1c056199":"82231","11f59681":"82433","0f7380fa":"82443","7978d17e":"82692","96eaee2e":"82719",ae372b87:"82724","6d897242":"82797","4a97e2ba":"83054","2adb5274":"83310",d0d32364:"83519","12c7542d":"83542","2c8adea4":"83646","71c1a9a2":"83647","5154a0c0":"83779","06da0517":"83814",d97726c4:"83940","2328795e":"84027","65cc375b":"84109",fd8b21b9:"84209",b2ddf146:"84361",d633ce0b:"84367","34c8741a":"84373",df507495:"84462","20125bf3":"84681",b035c451:"84688",db40a3d0:"84742","7cca3229":"84960","0bab6cfb":"85142","60d90122":"85154","37c49df1":"85187",e7d6ed4b:"85207",d4e870d0:"85234","53a76031":"85526",a48015fd:"85750",eac4cf92:"85926","88c4395d":"86085",adc7d4bb:"86116","987eac9e":"86226","7622e8c0":"86303",e22327ad:"86438","05d1f4e8":"86587",be362a92:"86914",e97ce8a2:"87047","2fd62ebd":"87055","63eda9ff":"87141","288139cb":"87374","5e967ed4":"87514","43e050e6":"87598",eff6a74c:"87944",a11ac63a:"88042","91dac72f":"88069",e2638161:"88276","08ea5a71":"88607",b63dfd52:"88813","3fc06181":"88940","5d44edd9":"89055","9e98e556":"89165",a83fca78:"89527","6ce2a349":"90043","786c90b7":"90314","18d4b376":"90658",ea8c328a:"90862",d521d200:"91405","3452ccb6":"91413","49ba5fe1":"91497","8d38a755":"91544","146fb227":"91608","40820b5a":"91786","7dfb83d7":"91874","461edca2":"91997",f2448633:"92204","5ba66649":"92597","658fd2ae":"92720","66acf69d":"92802",e143fda9:"92885","0de6b997":"92989",a6aa9e1f:"93089","2fd58bdb":"93239","730af974":"93442","51772be9":"93548","241a26cb":"93590","9c82c46c":"93627","0ddec893":"94031",cb950484:"94118","0b858d2f":"94367","452de1e2":"94406","0d040de0":"94471","62e5a085":"94536","5cba42da":"94760","1967d9b6":"94847","5ffbb054":"94991","4d2c8f2a":"95033","97dfa070":"95255",b46f3282:"95273",b571fd7a:"95481","270ab2a8":"95623","1916b8ce":"95690","7d7f0ccf":"95877",b67da459:"96088","72d89c46":"96179","638caea5":"96408",e2b03391:"96420",d935ad93:"96467","02e4c897":"96621","86aa610a":"97001","69aec5e5":"97223","09c00e8c":"97659",e6ea580b:"97797","6156ae12":"97897",ad16ea4d:"97906","1f5c10d1":"97927",c881e1b7:"97963","4cc8c5ab":"97985","4409662a":"98055","115175ad":"98103","435a4007":"98403","729e5a0c":"98404",e7481506:"98432","4b2f2c75":"98440","1eccaf7c":"98921",de2fef87:"98943","1c08fd51":"98948","568be63a":"99343","3a3c8582":"99454","35279f86":"99834"}[e]||e,r.p+r.u(e)},(()=>{var e={51303:0,40532:0};r.f.j=(c,b)=>{var a=r.o(e,c)?e[c]:void 0;if(0!==a)if(a)b.push(a[2]);else if(/^(40532|51303)$/.test(c))e[c]=0;else{var f=new Promise(((b,f)=>a=e[c]=[b,f]));b.push(a[2]=f);var d=r.p+r.u(c),t=new Error;r.l(d,(b=>{if(r.o(e,c)&&(0!==(a=e[c])&&(e[c]=void 0),a)){var f=b&&("load"===b.type?"missing":b.type),d=b&&b.target&&b.target.src;t.message="Loading chunk "+c+" failed.\n("+f+": "+d+")",t.name="ChunkLoadError",t.type=f,t.request=d,a[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,b)=>{var a,f,d=b[0],t=b[1],o=b[2],n=0;if(d.some((c=>0!==e[c]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(c&&c(b);n{"use strict";var e,c,b,a,f,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var b=t[e]={exports:{}};return d[e].call(b.exports,b,b.exports,r),b.exports}r.m=d,e=[],r.O=(c,b,a,f)=>{if(!b){var d=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](b[o])))?b.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[b,a,f]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var d={};c=c||[null,b({}),b([]),b(b)];for(var t=2&a&&e;"object"==typeof t&&!~c.indexOf(t);t=b(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(f,d),f},r.d=(e,c)=>{for(var b in c)r.o(c,b)&&!r.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:c[b]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,b)=>(r.f[b](e,c),c)),[])),r.u=e=>"assets/js/"+({70:"f5c6720d",632:"1e49c42a",921:"3b769878",972:"50e60f15",1230:"fb978ddc",1343:"260044ea",1454:"7a4404a6",1459:"3242f979",1531:"e9e61fab",1565:"0075227b",1634:"87ecd577",1828:"81a22bb5",2385:"642b4b25",2397:"444a3b91",2587:"758cc2dc",2705:"79ffe732",2745:"70aeb984",2946:"0bd7a506",3546:"b86bdfbc",3900:"31a3d4e0",4033:"b1f4c04b",4200:"4d96ce7d",4233:"39b4899a",4254:"70bc9384",4673:"3127ffaa",4767:"3f743be5",5252:"739c8ee7",5267:"430c599e",5488:"a624ad96",5598:"2400e466",5603:"670e7e2a",5908:"478b8538",6169:"bfe074af",6171:"55301091",6439:"00caee28",6451:"9e3b992d",6515:"5c485bc6",6639:"46f88f72",6666:"6352bfec",6738:"ee7e4563",6766:"96a40b22",6890:"d6cd9ecb",7087:"585209da",7240:"d2e95b16",7267:"a86c154c",7766:"a77dda4b",7785:"92654692",7878:"ca2485c5",8043:"aa51dbbc",8267:"5b874e69",8297:"4c4ac865",8439:"57ef7359",8498:"e68e950d",8608:"8968a4f0",8769:"92ca5279",9048:"2f1fdf37",9411:"4de25097",9478:"4f3622a6",9509:"69afe496",9636:"b5ee6632",9765:"815a64de",10107:"d54e9f25",10585:"20977c37",10666:"0ad57f48",10789:"f42377e5",10791:"827dc93f",10885:"a954bcd2",10982:"ec043cc8",11231:"7fcb90ed",11288:"3f389362",11383:"6df16157",11563:"31f61f5a",11709:"de35be62",11738:"27e000d4",11908:"e1d25074",12012:"d7379e4f",12077:"782f9d71",12248:"6439ebbf",12441:"ec1fdef5",12721:"f4f9477a",12890:"63f64bbe",13063:"50524b34",13092:"54ec1023",13336:"eae369e5",13497:"6dcd4132",13733:"2a6a5bcc",14050:"f2d0195f",14112:"c08108c3",14303:"94613aa3",14337:"55b0114e",15245:"da6a8412",15251:"c25d5254",15287:"bff7ce34",15339:"99e033fa",15413:"f37989ad",15659:"293f897f",15947:"47d07a19",16344:"e6a5c537",16345:"1ff061c1",16375:"347883ef",16400:"561b42d8",16530:"dbe14372",16607:"49b5abdd",16857:"d28302cc",16953:"c3809a91",16968:"d99372ed",16997:"02005777",17102:"b183602f",17292:"573b0166",17300:"b792272c",17524:"19dcee13",17558:"49df5b37",17786:"fe62cabc",18048:"fbb080a0",18560:"2c79a8c9",18684:"5f7f10b8",18938:"b4493634",19069:"823cdfda",19163:"ee99288c",19253:"fdb17026",19258:"ba850201",19397:"a0113ec6",19683:"3b0ca883",20247:"cfcfe112",20434:"efe8fe1e",20637:"02544eaa",20650:"b6dfb202",20966:"31ee3481",21298:"1bb79cbe",21419:"a08ca8ed",22173:"1bdf7ac1",22420:"1a738350",22472:"28bbf1f1",22727:"f49a123d",22788:"b1e84092",23039:"9156e10e",23391:"b1fcc839",23422:"4f806ca3",23489:"b7015fcc",23510:"8cac8f0e",23553:"af7915c5",23569:"0390f82d",23640:"077a2863",23900:"ed43fb2c",24249:"a9e3cc4b",24383:"5bb034dc",24419:"ff451466",24439:"93a80894",24591:"b88f6635",24624:"cff878d5",24643:"d459e399",24653:"cd98c5ca",24686:"60085312",24857:"7cc6ed3b",24882:"cb1fc59a",25581:"e4f8c6fa",25671:"c5a14eac",25722:"1556085f",25880:"a32a5ab1",26002:"d2262734",26042:"eb348cd1",26055:"2595b88d",26278:"a7f0f5d2",26346:"77cd8515",26398:"3e9cd8a5",26498:"ba7acbf8",26591:"ff614a82",26713:"43bf66a2",26765:"3cc0bfc6",26815:"9dfc1440",26889:"b604a546",26898:"73b9641c",26911:"61c40617",27535:"b90ff62f",27613:"e7c8f52e",27641:"a63e0ecf",27805:"581f3b7a",27812:"255b8b35",27843:"e817aff8",27918:"17896441",28005:"fb5a53da",28007:"1693d1f1",28502:"9855eb0c",28778:"f38d8a49",28808:"ee840913",28932:"41885e44",29039:"406c3fa1",29195:"9beb71a1",29309:"143e1dd2",29463:"4e67b8ee",29514:"1be78505",29789:"0de38b55",29831:"53b01eb2",29847:"b0549333",29993:"fdc677de",30017:"fc60e918",30020:"237078b2",30198:"d8e54e6a",30451:"622c9a5d",30535:"3e2198da",30543:"789b6f77",30847:"0a37d225",30851:"6bb38190",30878:"b3ab9d9c",30890:"ee22cdb2",31065:"8fe122c0",31729:"e6606e29",31950:"aae073ad",31957:"40f7706e",32019:"1a25ec0b",32416:"65bf6038",32429:"c784913d",32616:"6dcc551c",32717:"d3ea22bd",32748:"99a9b59c",33215:"1f4a7623",33862:"fad74e71",34026:"00113e80",34061:"e8962988",34107:"d8edb80d",34147:"f02fee28",34316:"9aa8167d",34332:"394e441c",34470:"421eedaa",34477:"bc4fe87d",34531:"f8c6616d",34649:"878b6742",34775:"0b9b364f",35125:"4628eeb9",35188:"80f9fba1",35305:"11e4adc0",35582:"d0789231",35838:"d2bc1988",36075:"57b35015",36339:"3af807b6",36368:"75744c8e",36528:"58aafacc",36753:"cb67bce6",36836:"fea1970e",36844:"fa50cb45",36944:"ba15278f",37255:"75fe74b6",37490:"13c1bed2",38024:"cd49a83e",38234:"edbb7582",38343:"6d359147",38407:"e89f9111",38720:"a58384b5",39002:"5e63338a",39053:"3ba1af7d",39111:"fbfa75c3",39300:"d6a0e212",39388:"3d789c34",39439:"265f8c6c",39482:"43d46dc1",39629:"05d764a6",39770:"560c2a3b",39816:"5db891ba",39948:"43f0994f",40007:"23627f1d",40687:"6b302e4a",40716:"360bf618",40728:"dab85daf",40748:"f3c7c2ce",41072:"d8718c7b",41369:"cada0bd3",41769:"9d0b759f",41784:"24584499",41844:"685cb7f0",41964:"4ea5b3d1",42070:"c4c95680",42910:"b49514cb",42997:"53c568c8",43002:"2d95ca96",43066:"f1110b76",43267:"92c5b64f",43388:"b6f6c2c7",43414:"96e7d4c6",43455:"292dc608",44244:"376c13bd",44329:"f7020e12",44342:"6c867595",44533:"03d4a8db",44553:"9d56aaf6",44908:"bb804ab2",44934:"1cffcd35",44950:"49d4d74f",45018:"6f7b796f",45042:"bac25891",45061:"e5e4f44c",45110:"6233a11e",45468:"60fc6d59",45757:"0ad0e98e",45950:"64ecf849",46010:"eb553df0",46103:"ccc49370",46301:"36da10dc",46321:"0ecefe82",46371:"03a5765b",46376:"1c30fc52",46401:"1c24533b",46487:"2c895924",46804:"63c00f6d",46971:"c377a04b",47015:"87f4c28e",47189:"6ecdefa2",47295:"c1249d67",47677:"f8d9d64e",47761:"1a5de944",47904:"bdb603ad",48135:"37b73dfd",48293:"e22c47fc",48552:"3d4c8043",48610:"6875c492",48622:"9567c3cb",49050:"5c934eae",49103:"9b6aeac6",49182:"f427c3c4",49193:"979d1f76",49194:"a2abced9",49870:"ed6defb5",49880:"3fead359",49886:"b145189b",50113:"02a5c91c",50340:"64184ccb",50377:"70ef0f2c",50538:"74dc008b",50597:"02954b99",50773:"1a7d6891",51393:"6bfd94c1",51416:"b82b906b",51555:"2396a593",51637:"a9f500bf",51656:"c7190bf1",51703:"9c466762",51910:"67bf76f9",52042:"6bc81080",52128:"50697f8c",52280:"a200008b",52338:"a49066bc",52468:"432161c9",52535:"814f3328",52550:"3f959f3e",52660:"c9789e3f",52933:"5f096846",52992:"dfed30d8",53001:"dbbbd197",53154:"b5d86c45",53156:"c684df92",53237:"1df93b7f",53442:"dcd7143b",53496:"b494cd49",53578:"42c3ef62",53608:"9e4087bc",53656:"44cb45c4",53820:"9c78dc98",53841:"5f81cf92",53858:"f1033915",53902:"68317916",54306:"ba9985f9",54431:"556b3791",54550:"bf5c6ec1",54864:"37186002",54869:"b8dc12d1",54951:"6a15417a",54976:"2231a488",55211:"1d20ceda",55442:"15229d27",55449:"4b92d0f7",55568:"76a57fce",55700:"776f5ca7",55745:"1a5def29",56064:"afd0837d",56420:"0d746925",56590:"b5f41b49",56821:"d19bbba7",56902:"db23a403",57013:"81b914bb",57069:"c2bbca24",57171:"ab287901",57457:"c355328a",57526:"404ee4b8",57540:"d60ca510",57916:"a8c3bf62",58547:"3262fdb6",58598:"213446b8",58639:"7fc00721",58731:"6cb29bfb",58739:"d9f6f020",58826:"31abdbdd",58901:"2b8da922",58932:"f30b03ca",59115:"8f8f2b51",59319:"57e3bc5c",59432:"e657c00b",59555:"562f6aa3",59606:"891e7036",59615:"54c8f791",60244:"d92463a7",60372:"8744988f",60705:"404c205f",60722:"557bf77b",60751:"4e444cb9",60888:"fc9df442",60937:"a6c3b5d0",61450:"17636076",61803:"10fe60bd",61893:"50bd9b19",61927:"6b25efb2",62541:"afa0d535",62560:"48983c45",62887:"ec78dc8a",62971:"f421f633",63056:"7f272789",63070:"e8ba05dc",63404:"505f2e73",64013:"01a85c17",64065:"dea3893f",64149:"523b9378",64255:"dac3e60c",64387:"109cfdab",64495:"1a7ee218",64614:"c534ebf6",64804:"877492c5",65233:"e0bbaf01",65381:"fff8bfb8",65562:"394a19c2",65827:"bcfb757a",66211:"08aa19df",66542:"1c6de981",66621:"7769a307",66753:"09220732",66883:"0e169594",67009:"244aab14",67276:"86ba8bc4",67774:"4d4db300",68191:"584f33f2",68227:"26826546",68383:"b931be22",68390:"8b99c130",68467:"0b387740",68494:"85008509",68686:"e9b6e2b9",68744:"b2fa5a44",68907:"4c0c3b33",69162:"6a831198",69370:"0efed4a8",69511:"a02e6e2b",69571:"4a9afb76",69855:"ce45335a",70177:"3e7dd7f3",70213:"071bbe49",70313:"457a5f4e",70399:"17952d23",70404:"dce2ca95",70421:"7a9dc61d",70599:"d7a8c6c3",70942:"50238564",71108:"f42afdee",71424:"8a40895d",71715:"a2dbe0ac",71894:"23146baa",72156:"531ea435",72239:"d469812d",72348:"85487be5",72393:"9ea39fdf",72428:"638a0fd1",72571:"6641046c",72594:"48df297d",72628:"8e4f7682",72793:"d4ffcdee",73111:"52e05d27",73171:"05e1073b",73366:"ff19e50d",73551:"8dbf76b2",73599:"4f04b67c",73862:"a784d869",73923:"fd42b8cd",74485:"0da360f2",74514:"c7fb6649",74592:"77fc6745",74730:"4f32b055",74803:"e3a32727",75065:"2262ce7c",75118:"c777396b",75254:"5a1617f4",75496:"43ab5c57",75599:"580380e0",75626:"7de7ec2e",75939:"1116edd8",76581:"b2a447c9",76696:"ce7343f9",76815:"f7c31e00",76836:"f1e9ba91",77005:"499b8489",77018:"75410d66",77253:"95281d3a",77273:"cf0fa099",77337:"65f26dbc",77339:"5b8a7a7e",77442:"5a9b0f2c",77529:"13d94f48",77577:"6dcaddc4",78102:"ed9580b5",78131:"6b2d5f2b",78313:"be11db40",78369:"92728614",78376:"37278329",78451:"74caf440",78562:"fe86874a",79695:"822a8da5",79946:"d2e4b60d",80053:"935f2afb",80202:"75957c6e",80399:"0c446527",80688:"505a7e84",81317:"bfa91014",81394:"f06a3584",81734:"d230730a",81767:"ff4b0e7e",81933:"f406fa07",82063:"30ff7850",82068:"6b1b17e3",82231:"1c056199",82433:"11f59681",82443:"0f7380fa",82692:"7978d17e",82719:"96eaee2e",82724:"ae372b87",82797:"6d897242",83054:"4a97e2ba",83310:"2adb5274",83519:"d0d32364",83542:"12c7542d",83646:"2c8adea4",83647:"71c1a9a2",83779:"5154a0c0",83814:"06da0517",83940:"d97726c4",84027:"2328795e",84109:"65cc375b",84209:"fd8b21b9",84361:"b2ddf146",84367:"d633ce0b",84373:"34c8741a",84462:"df507495",84681:"20125bf3",84688:"b035c451",84742:"db40a3d0",84960:"7cca3229",85142:"0bab6cfb",85154:"60d90122",85187:"37c49df1",85207:"e7d6ed4b",85234:"d4e870d0",85526:"53a76031",85750:"a48015fd",85926:"eac4cf92",86085:"88c4395d",86116:"adc7d4bb",86166:"15659320",86226:"987eac9e",86303:"7622e8c0",86438:"e22327ad",86587:"05d1f4e8",86914:"be362a92",87047:"e97ce8a2",87055:"2fd62ebd",87141:"63eda9ff",87374:"288139cb",87514:"5e967ed4",87598:"43e050e6",87944:"eff6a74c",88042:"a11ac63a",88069:"91dac72f",88276:"e2638161",88607:"08ea5a71",88813:"b63dfd52",88940:"3fc06181",89055:"5d44edd9",89165:"9e98e556",89527:"a83fca78",90043:"6ce2a349",90314:"786c90b7",90658:"18d4b376",90862:"ea8c328a",91405:"d521d200",91413:"3452ccb6",91497:"49ba5fe1",91544:"8d38a755",91608:"146fb227",91786:"40820b5a",91874:"7dfb83d7",91997:"461edca2",92204:"f2448633",92597:"5ba66649",92720:"658fd2ae",92802:"66acf69d",92885:"e143fda9",92989:"0de6b997",93089:"a6aa9e1f",93239:"2fd58bdb",93442:"730af974",93548:"51772be9",93590:"241a26cb",93627:"9c82c46c",94019:"15890802",94031:"0ddec893",94118:"cb950484",94367:"0b858d2f",94406:"452de1e2",94471:"0d040de0",94536:"62e5a085",94760:"5cba42da",94847:"1967d9b6",94991:"5ffbb054",95033:"4d2c8f2a",95255:"97dfa070",95273:"b46f3282",95481:"b571fd7a",95623:"270ab2a8",95690:"1916b8ce",95877:"7d7f0ccf",96088:"b67da459",96179:"72d89c46",96408:"638caea5",96420:"e2b03391",96467:"d935ad93",96621:"02e4c897",97001:"86aa610a",97223:"69aec5e5",97659:"09c00e8c",97797:"e6ea580b",97897:"6156ae12",97906:"ad16ea4d",97927:"1f5c10d1",97963:"c881e1b7",97985:"4cc8c5ab",98055:"4409662a",98103:"115175ad",98403:"435a4007",98404:"729e5a0c",98432:"e7481506",98440:"4b2f2c75",98921:"1eccaf7c",98943:"de2fef87",98948:"1c08fd51",99343:"568be63a",99454:"3a3c8582",99834:"35279f86"}[e]||e)+"."+{70:"f7065486",632:"597b3028",921:"3635c464",972:"bff2e511",1230:"58cea966",1343:"9feb5a67",1454:"ca66fab4",1459:"24b3a72c",1531:"32d0c81c",1565:"62ac7a2a",1634:"b03aea31",1828:"8aa8e310",2385:"d958ecfb",2397:"b8114d9a",2587:"16ce9fc9",2705:"aec9d0c6",2745:"5d6ddb7f",2946:"1e10e498",3546:"d235a11d",3900:"6cea05ab",4033:"949387d0",4200:"feda2f67",4233:"cf7bf3f2",4254:"c5ed1b58",4673:"cdb8b12f",4767:"ec4661b6",5252:"ba2eb608",5267:"42c83bdd",5488:"83b48c85",5598:"082c326a",5603:"99c5aabd",5908:"23137123",6169:"d17c3837",6171:"ca3cddaa",6439:"c6654429",6451:"a56ffe1b",6515:"a3b45cb1",6639:"97e32bf4",6666:"e54cec77",6738:"b525d195",6766:"67d79818",6890:"d4d01d01",7087:"22667e38",7240:"7dd5f13b",7267:"980df636",7766:"57a0b973",7785:"07013c4b",7878:"cf3bd363",8043:"0fe29e7b",8267:"5c1a8c66",8297:"3b1971b7",8439:"11201cfb",8498:"a314270a",8608:"7bb0c28e",8769:"37d03643",9048:"952919b9",9411:"62cca887",9478:"66e03ece",9509:"0197ca01",9636:"2e44022b",9765:"3a5baebf",10107:"8da2f00e",10585:"0dcfb19e",10666:"7882dc0e",10789:"3f7000f3",10791:"e31a3487",10885:"8d20f241",10982:"64e678dd",11231:"d1be9562",11288:"6ec93b63",11383:"6155999d",11563:"75c213a5",11709:"d4e6452f",11738:"2f59d114",11908:"2d57563b",12012:"e779e66f",12077:"30c4f6f5",12248:"c67d9171",12441:"040e1bc1",12721:"b422ba07",12890:"613f5a1e",13063:"39c03a4d",13092:"4c9623ba",13336:"406f6c70",13497:"5dbc452b",13733:"788c78ce",14050:"80f49a56",14112:"3024b336",14303:"6f2b65ae",14337:"da2fe9b7",15245:"04d139c7",15251:"ccd566d7",15287:"16bf9630",15339:"60b8b5d0",15413:"ff8ae7cd",15659:"f5f7f8d5",15944:"8d4dc994",15947:"b9cff23a",16344:"7c16db5c",16345:"051254d1",16375:"60192170",16400:"1aab4fb8",16530:"151b312e",16607:"059c41d6",16857:"634c2e2a",16953:"a9891378",16968:"7e497ea6",16997:"28da0b2d",17102:"f52947f8",17292:"84588220",17300:"5002c196",17524:"9bdc6c59",17558:"c5e0076b",17786:"5676a74b",18048:"b8a63b97",18560:"0454d90c",18684:"8798f89e",18938:"16741a07",19069:"878a516c",19163:"d2f13614",19253:"b4fd44a2",19258:"c1989b28",19397:"9cf1cfaa",19683:"53716c63",20247:"254dad6f",20434:"35fd0772",20637:"8059db8d",20650:"d6967d12",20966:"6a1f5f3c",21298:"d5bc952b",21419:"21deaf33",22173:"8ddab644",22420:"36c1839c",22472:"ba3f6c6b",22727:"60fc4300",22788:"096c6635",23039:"f781bbaa",23391:"2f0a86b6",23422:"13b6cdd4",23489:"256712d4",23510:"37ecdda1",23553:"2e18346c",23569:"18ced8ea",23640:"0c963240",23900:"7351da24",24249:"2a84a40b",24383:"c7069d17",24419:"253926f9",24439:"a89c1f87",24591:"3c7caae6",24624:"f15268a1",24643:"15091d96",24653:"df465b14",24686:"cef6f38b",24857:"4454c940",24882:"1e6ce46f",25581:"0f9572ab",25671:"2bb5d453",25722:"9fa213a6",25880:"b8e7eefa",26002:"70aa9fe8",26042:"8aa3917c",26055:"a9aa4f48",26207:"0e0c64af",26278:"f66d37e9",26346:"a9d811c5",26398:"c3baadbd",26498:"727edc39",26591:"27086a26",26713:"e044e399",26765:"58d463b9",26815:"5ac2386a",26889:"5564ecea",26898:"4d431af2",26911:"079978b3",27535:"55a549de",27613:"f38cd4d6",27641:"01803dba",27805:"66d2ddd0",27812:"52ae233a",27843:"8b76a6b8",27918:"25e54d72",28005:"da971268",28007:"143cb489",28502:"13239d3f",28778:"d769e721",28808:"f26e700c",28932:"38c26988",29039:"27ca4910",29195:"c5a6ad03",29309:"156aef72",29463:"572c8286",29514:"fe3e9b97",29789:"53dcd478",29831:"77733cef",29847:"6442185a",29993:"80e7cbfc",30017:"4402260f",30020:"beebf398",30198:"b13c9594",30451:"00fc4434",30535:"ab461b70",30543:"f0671a0f",30847:"e51e612f",30851:"579b1a3d",30878:"bf647aa0",30890:"ec98495c",31065:"4abf1668",31729:"908b803c",31950:"c24635b4",31957:"c3681332",32019:"f955d2a8",32416:"5b98f4d1",32429:"83e2d186",32616:"b8fdf8ff",32717:"2cdb87b2",32748:"893c82bd",33215:"fd1d7ef1",33862:"9dc8fbe0",34026:"70248aed",34061:"d154dda2",34107:"1a436641",34147:"5276ab13",34316:"b07258f1",34332:"930adbac",34470:"e352ebb2",34477:"165d0465",34531:"0e07ec08",34649:"eb27e366",34775:"71a14de3",35125:"78b1388b",35188:"b9d813b0",35305:"7d2529d4",35582:"6ae8a403",35838:"e2b07f94",36075:"a1de0304",36339:"c40cc016",36368:"8a1bd246",36528:"5afc8fab",36753:"6ade3a5f",36836:"49206c06",36844:"08591c1e",36944:"9fa8f939",37255:"993603f5",37490:"80fb5968",38024:"1d3e4a63",38234:"16619ac7",38343:"94d5e932",38407:"2dbc78e3",38720:"4ddd8efa",39002:"5850bdb3",39053:"7f895319",39111:"7abe1721",39300:"ef048acf",39388:"0a16b809",39439:"efd46e8c",39482:"22903849",39629:"b78ad0cb",39770:"6b1d9204",39816:"1e1db937",39948:"00513ba5",40007:"59c7e167",40687:"f1ed2b28",40716:"918df0bf",40728:"f91efea8",40748:"b91ff58d",41072:"066df380",41369:"22d9253f",41769:"b8f4cb1b",41784:"07969109",41844:"a7f4af11",41964:"74880a23",42070:"6b80d2d0",42910:"4658e2d0",42997:"411f2aad",43002:"c2d154a1",43066:"78f2bfa2",43267:"e1c06b01",43388:"e2c1c093",43414:"977b0240",43455:"03032869",44244:"719c4bc9",44329:"90179991",44342:"65310d67",44533:"a4401850",44553:"2448d50d",44908:"920002b3",44934:"a250a7e8",44950:"261d57e5",45018:"4f507f41",45042:"17ac01c6",45061:"f84a3237",45110:"246e94b4",45468:"c9d60dca",45757:"b4c86fbb",45950:"4b53ccc0",46010:"c53aa380",46103:"4bda63d7",46301:"7dc6f4ad",46321:"4c2c7cc8",46371:"220710b4",46376:"94bb9803",46401:"a4e54798",46487:"e1dbcdd1",46804:"f9ddd974",46971:"f33a9d06",47015:"f64a00a0",47189:"73cd3fca",47295:"4044ca0a",47677:"e40776eb",47761:"168752cf",47904:"66a176cb",48135:"1b6227f9",48293:"09611b80",48552:"3e9b31a2",48610:"1206c51d",48622:"52572d7f",49050:"276b930e",49103:"e8cf30bb",49182:"873a504e",49193:"fd03df6a",49194:"de6ab697",49870:"89a9d4ca",49880:"badaa50b",49886:"61eb5b71",50113:"08627b92",50340:"885dfb28",50377:"8f704468",50538:"054b014b",50597:"8de28d93",50773:"970ccfa9",51393:"d235e68b",51416:"2de76633",51555:"e524029d",51637:"9951b3a3",51656:"7218a9c4",51703:"3d96d84f",51910:"36146df8",52042:"58f33291",52128:"60b69a8d",52280:"c1438053",52338:"6a04ff68",52468:"55b47e8b",52535:"ef6c0395",52550:"61e90ed2",52660:"6cf159b1",52933:"651b5156",52992:"9884a1e8",53001:"b2566b51",53154:"7d10e486",53156:"4cd258f6",53237:"25bc5842",53442:"4c68d55e",53496:"4b1e09f2",53578:"d43d752f",53608:"879f9c78",53656:"cfd40a0d",53820:"02df77f6",53841:"a7febe12",53858:"89b8222c",53902:"4a99eab0",54306:"763f0889",54431:"01abde87",54550:"06d6087f",54864:"493cf21c",54869:"65021d2b",54951:"fb851401",54976:"6d386c95",55211:"15239882",55442:"9f3c6e2e",55449:"90199928",55568:"89dd9668",55700:"2f4c553b",55745:"cecd0442",56064:"6f4d2b8a",56420:"69d5c439",56590:"c985aa1c",56821:"b5d104ae",56902:"064dfa31",57013:"e70e9adc",57069:"c07f773d",57171:"90f580fe",57457:"7ef3539e",57526:"09065b79",57540:"1b013bba",57916:"52e70e7e",58547:"07174a10",58598:"be3291b8",58639:"65e8d8e4",58731:"83acbbe4",58739:"c833c452",58826:"12a43ed6",58901:"59f0008a",58932:"a9b0cd62",59115:"5109f306",59319:"346b752a",59432:"a998cf78",59555:"ca1135f4",59606:"c646230e",59615:"3286c977",60207:"9a4db7e5",60244:"a1630ccd",60372:"8f5468de",60705:"b3247da3",60722:"9ab1224f",60751:"4ea2c1c3",60888:"1334686a",60937:"3cd2a3c2",61450:"46de8ba2",61803:"e3949ac7",61893:"d646f531",61927:"2f28027b",62541:"9c3a6f2b",62560:"4190b3b5",62887:"d64e41f5",62971:"ba440ada",63056:"c6c8d5a9",63070:"9aac725d",63404:"c5f3721e",64013:"deb01743",64065:"e1a144b7",64149:"248c51a1",64255:"2118d3fd",64387:"4e7be428",64495:"f6ea6e9a",64614:"dfe90828",64804:"ebbf940a",65233:"8f96de23",65381:"8c7ceae9",65562:"7f4d19fd",65827:"0c6d03fd",66211:"157aae0b",66542:"ba0d1549",66621:"592c7d6d",66753:"38f8dd17",66883:"ff974606",67009:"1848a52a",67276:"67578fce",67774:"93ea275d",68191:"860f7101",68227:"18231fec",68383:"abf6faf2",68390:"ecd62120",68467:"8c5ece40",68494:"2944df58",68686:"287cc48e",68744:"1663d3a9",68907:"e6969de6",69162:"5a2eb442",69370:"806f9374",69496:"8c0fa895",69511:"14956d9a",69571:"b094c120",69855:"3e734c81",70177:"902fd50d",70213:"06512697",70313:"bebc686d",70399:"a12e3d72",70404:"ba2c9664",70421:"83ff546f",70599:"e8c4f793",70942:"faa03eed",71108:"576cc116",71424:"ebdfa4a0",71715:"c5747515",71894:"e8af2de5",72156:"08b581fc",72239:"48f99672",72348:"e0f8a3b5",72393:"437b3908",72428:"eaf96c91",72571:"b696174f",72594:"8452f901",72628:"c5a960df",72793:"b059c570",73111:"59300dfd",73171:"709d4514",73366:"ef5ae43c",73551:"5a78a94a",73599:"66f1f3a4",73862:"1f7ee8e5",73923:"18f1f532",74248:"c027ebff",74485:"97d2423a",74514:"604e80b9",74592:"f6dcd5e0",74730:"04252a06",74803:"387e6364",75065:"cd2ec28c",75118:"bbd75409",75254:"c5a880a5",75496:"718f9b0e",75599:"38688f24",75626:"e879d0bf",75939:"eb4fc7d8",76581:"941c10b6",76696:"648e985a",76815:"d4131906",76836:"69f7739b",77005:"4f87c606",77018:"fe42ef4a",77253:"e080ea71",77273:"906db6ec",77337:"26d680fa",77339:"5ab407a3",77442:"fcfbae1b",77529:"cb9c7cd0",77577:"1e698388",78102:"21de8ac0",78131:"3c90a722",78313:"d8c05d75",78369:"e37d1c93",78376:"634f4904",78451:"d68511ab",78562:"c0502cde",79695:"df1e4f50",79946:"74774a8a",80053:"15549adb",80202:"f44f2242",80399:"ee74d6b5",80688:"c352f4f2",81317:"12c2c832",81394:"f89c6b5f",81734:"d37a86dd",81767:"a7c1a8a7",81933:"393137cd",82063:"04ffdded",82068:"827b8ce9",82231:"19ff98d2",82433:"569fb339",82443:"a5aabf7c",82692:"85a318ef",82719:"11c89a9f",82724:"8b3bda14",82797:"9385ee95",83054:"44929424",83310:"8c353b98",83519:"a7bfafb5",83542:"7b01c809",83646:"9781bb0f",83647:"3344cab5",83779:"69553030",83814:"5fa27f98",83940:"528b5b4f",84027:"23772431",84109:"502ffd7e",84209:"5afa1630",84361:"b57a7668",84367:"dbe35d1f",84373:"bc2d53a5",84462:"ef85bca7",84681:"c9fad60c",84688:"9d2e38a9",84742:"f844fc1b",84960:"3df79785",85142:"9668dbda",85154:"965d1855",85187:"d9596f48",85207:"088d62e3",85234:"5faa2281",85526:"f7c3ebb8",85750:"f719b1f8",85926:"c29acda0",86085:"9dfe758b",86116:"017c8bbc",86166:"d345dabb",86226:"359405c4",86303:"07a71bae",86438:"68ffcfeb",86587:"964454b6",86914:"50347975",87047:"7686f0d6",87055:"549d73fd",87141:"4060d5a5",87374:"a00bdab1",87514:"d22f954a",87598:"8d34530d",87944:"7158f8d6",88042:"219d4a08",88069:"9fbe26b3",88276:"44e9bc0e",88607:"12252d10",88813:"b3186363",88940:"25fbf57a",89055:"0ee76c6f",89165:"f3539bea",89527:"001e7b0f",90043:"68603e22",90314:"a67dbd4a",90658:"2e6d43de",90862:"83003f98",91405:"f96120ed",91413:"7b72c893",91497:"bd1097e8",91544:"6eb679f8",91608:"48e48aa6",91786:"3b887f3b",91874:"0e617854",91997:"cee36589",92204:"c0179694",92597:"c7cc7e9d",92720:"706b3927",92802:"a22e0844",92885:"38f09a22",92989:"8474736e",93089:"7f454a70",93239:"ec454c7e",93442:"76158291",93548:"461a9230",93590:"6a384561",93627:"cc030565",94019:"f075021d",94031:"674138b0",94118:"9fe0f656",94367:"c8a82ffe",94406:"9b22fafe",94471:"4bb3af84",94536:"8fad226f",94760:"dbbbf31a",94847:"6f426f02",94991:"250bb444",95033:"646e98de",95255:"992e4cc3",95273:"3e1d165f",95481:"0f1cf197",95623:"f327997a",95690:"5bb3e52b",95877:"44d4e763",96088:"a5428622",96179:"b37a4174",96408:"9e11d275",96420:"48775575",96467:"29136bce",96621:"c9340302",97001:"e7f8b75c",97223:"fe83654d",97659:"cde5f148",97797:"c78e38cb",97897:"a3acf2c7",97906:"571da3be",97927:"97bec960",97963:"c43ffbe0",97985:"ce60f458",98055:"f0552f88",98103:"4b0ac381",98403:"5b46b56b",98404:"dcf321f7",98432:"1486e0ac",98440:"9810ef06",98921:"9fda75ee",98943:"5001f1ac",98948:"9c59830a",99343:"0bf3adc2",99454:"0dadacde",99834:"11c9fdb8"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),a={},f="airsdk-dev:",r.l=(e,c,b,d)=>{if(a[e])a[e].push(c);else{var t,o;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=a[e];if(delete a[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(b))),c)return c(b)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={15659320:"86166",15890802:"94019",17636076:"61450",17896441:"27918",24584499:"41784",26826546:"68227",37186002:"54864",37278329:"78376",50238564:"70942",55301091:"6171",60085312:"24686",68317916:"53902",85008509:"68494",92654692:"7785",92728614:"78369",f5c6720d:"70","1e49c42a":"632","3b769878":"921","50e60f15":"972",fb978ddc:"1230","260044ea":"1343","7a4404a6":"1454","3242f979":"1459",e9e61fab:"1531","0075227b":"1565","87ecd577":"1634","81a22bb5":"1828","642b4b25":"2385","444a3b91":"2397","758cc2dc":"2587","79ffe732":"2705","70aeb984":"2745","0bd7a506":"2946",b86bdfbc:"3546","31a3d4e0":"3900",b1f4c04b:"4033","4d96ce7d":"4200","39b4899a":"4233","70bc9384":"4254","3127ffaa":"4673","3f743be5":"4767","739c8ee7":"5252","430c599e":"5267",a624ad96:"5488","2400e466":"5598","670e7e2a":"5603","478b8538":"5908",bfe074af:"6169","00caee28":"6439","9e3b992d":"6451","5c485bc6":"6515","46f88f72":"6639","6352bfec":"6666",ee7e4563:"6738","96a40b22":"6766",d6cd9ecb:"6890","585209da":"7087",d2e95b16:"7240",a86c154c:"7267",a77dda4b:"7766",ca2485c5:"7878",aa51dbbc:"8043","5b874e69":"8267","4c4ac865":"8297","57ef7359":"8439",e68e950d:"8498","8968a4f0":"8608","92ca5279":"8769","2f1fdf37":"9048","4de25097":"9411","4f3622a6":"9478","69afe496":"9509",b5ee6632:"9636","815a64de":"9765",d54e9f25:"10107","20977c37":"10585","0ad57f48":"10666",f42377e5:"10789","827dc93f":"10791",a954bcd2:"10885",ec043cc8:"10982","7fcb90ed":"11231","3f389362":"11288","6df16157":"11383","31f61f5a":"11563",de35be62:"11709","27e000d4":"11738",e1d25074:"11908",d7379e4f:"12012","782f9d71":"12077","6439ebbf":"12248",ec1fdef5:"12441",f4f9477a:"12721","63f64bbe":"12890","50524b34":"13063","54ec1023":"13092",eae369e5:"13336","6dcd4132":"13497","2a6a5bcc":"13733",f2d0195f:"14050",c08108c3:"14112","94613aa3":"14303","55b0114e":"14337",da6a8412:"15245",c25d5254:"15251",bff7ce34:"15287","99e033fa":"15339",f37989ad:"15413","293f897f":"15659","47d07a19":"15947",e6a5c537:"16344","1ff061c1":"16345","347883ef":"16375","561b42d8":"16400",dbe14372:"16530","49b5abdd":"16607",d28302cc:"16857",c3809a91:"16953",d99372ed:"16968","02005777":"16997",b183602f:"17102","573b0166":"17292",b792272c:"17300","19dcee13":"17524","49df5b37":"17558",fe62cabc:"17786",fbb080a0:"18048","2c79a8c9":"18560","5f7f10b8":"18684",b4493634:"18938","823cdfda":"19069",ee99288c:"19163",fdb17026:"19253",ba850201:"19258",a0113ec6:"19397","3b0ca883":"19683",cfcfe112:"20247",efe8fe1e:"20434","02544eaa":"20637",b6dfb202:"20650","31ee3481":"20966","1bb79cbe":"21298",a08ca8ed:"21419","1bdf7ac1":"22173","1a738350":"22420","28bbf1f1":"22472",f49a123d:"22727",b1e84092:"22788","9156e10e":"23039",b1fcc839:"23391","4f806ca3":"23422",b7015fcc:"23489","8cac8f0e":"23510",af7915c5:"23553","0390f82d":"23569","077a2863":"23640",ed43fb2c:"23900",a9e3cc4b:"24249","5bb034dc":"24383",ff451466:"24419","93a80894":"24439",b88f6635:"24591",cff878d5:"24624",d459e399:"24643",cd98c5ca:"24653","7cc6ed3b":"24857",cb1fc59a:"24882",e4f8c6fa:"25581",c5a14eac:"25671","1556085f":"25722",a32a5ab1:"25880",d2262734:"26002",eb348cd1:"26042","2595b88d":"26055",a7f0f5d2:"26278","77cd8515":"26346","3e9cd8a5":"26398",ba7acbf8:"26498",ff614a82:"26591","43bf66a2":"26713","3cc0bfc6":"26765","9dfc1440":"26815",b604a546:"26889","73b9641c":"26898","61c40617":"26911",b90ff62f:"27535",e7c8f52e:"27613",a63e0ecf:"27641","581f3b7a":"27805","255b8b35":"27812",e817aff8:"27843",fb5a53da:"28005","1693d1f1":"28007","9855eb0c":"28502",f38d8a49:"28778",ee840913:"28808","41885e44":"28932","406c3fa1":"29039","9beb71a1":"29195","143e1dd2":"29309","4e67b8ee":"29463","1be78505":"29514","0de38b55":"29789","53b01eb2":"29831",b0549333:"29847",fdc677de:"29993",fc60e918:"30017","237078b2":"30020",d8e54e6a:"30198","622c9a5d":"30451","3e2198da":"30535","789b6f77":"30543","0a37d225":"30847","6bb38190":"30851",b3ab9d9c:"30878",ee22cdb2:"30890","8fe122c0":"31065",e6606e29:"31729",aae073ad:"31950","40f7706e":"31957","1a25ec0b":"32019","65bf6038":"32416",c784913d:"32429","6dcc551c":"32616",d3ea22bd:"32717","99a9b59c":"32748","1f4a7623":"33215",fad74e71:"33862","00113e80":"34026",e8962988:"34061",d8edb80d:"34107",f02fee28:"34147","9aa8167d":"34316","394e441c":"34332","421eedaa":"34470",bc4fe87d:"34477",f8c6616d:"34531","878b6742":"34649","0b9b364f":"34775","4628eeb9":"35125","80f9fba1":"35188","11e4adc0":"35305",d0789231:"35582",d2bc1988:"35838","57b35015":"36075","3af807b6":"36339","75744c8e":"36368","58aafacc":"36528",cb67bce6:"36753",fea1970e:"36836",fa50cb45:"36844",ba15278f:"36944","75fe74b6":"37255","13c1bed2":"37490",cd49a83e:"38024",edbb7582:"38234","6d359147":"38343",e89f9111:"38407",a58384b5:"38720","5e63338a":"39002","3ba1af7d":"39053",fbfa75c3:"39111",d6a0e212:"39300","3d789c34":"39388","265f8c6c":"39439","43d46dc1":"39482","05d764a6":"39629","560c2a3b":"39770","5db891ba":"39816","43f0994f":"39948","23627f1d":"40007","6b302e4a":"40687","360bf618":"40716",dab85daf:"40728",f3c7c2ce:"40748",d8718c7b:"41072",cada0bd3:"41369","9d0b759f":"41769","685cb7f0":"41844","4ea5b3d1":"41964",c4c95680:"42070",b49514cb:"42910","53c568c8":"42997","2d95ca96":"43002",f1110b76:"43066","92c5b64f":"43267",b6f6c2c7:"43388","96e7d4c6":"43414","292dc608":"43455","376c13bd":"44244",f7020e12:"44329","6c867595":"44342","03d4a8db":"44533","9d56aaf6":"44553",bb804ab2:"44908","1cffcd35":"44934","49d4d74f":"44950","6f7b796f":"45018",bac25891:"45042",e5e4f44c:"45061","6233a11e":"45110","60fc6d59":"45468","0ad0e98e":"45757","64ecf849":"45950",eb553df0:"46010",ccc49370:"46103","36da10dc":"46301","0ecefe82":"46321","03a5765b":"46371","1c30fc52":"46376","1c24533b":"46401","2c895924":"46487","63c00f6d":"46804",c377a04b:"46971","87f4c28e":"47015","6ecdefa2":"47189",c1249d67:"47295",f8d9d64e:"47677","1a5de944":"47761",bdb603ad:"47904","37b73dfd":"48135",e22c47fc:"48293","3d4c8043":"48552","6875c492":"48610","9567c3cb":"48622","5c934eae":"49050","9b6aeac6":"49103",f427c3c4:"49182","979d1f76":"49193",a2abced9:"49194",ed6defb5:"49870","3fead359":"49880",b145189b:"49886","02a5c91c":"50113","64184ccb":"50340","70ef0f2c":"50377","74dc008b":"50538","02954b99":"50597","1a7d6891":"50773","6bfd94c1":"51393",b82b906b:"51416","2396a593":"51555",a9f500bf:"51637",c7190bf1:"51656","9c466762":"51703","67bf76f9":"51910","6bc81080":"52042","50697f8c":"52128",a200008b:"52280",a49066bc:"52338","432161c9":"52468","814f3328":"52535","3f959f3e":"52550",c9789e3f:"52660","5f096846":"52933",dfed30d8:"52992",dbbbd197:"53001",b5d86c45:"53154",c684df92:"53156","1df93b7f":"53237",dcd7143b:"53442",b494cd49:"53496","42c3ef62":"53578","9e4087bc":"53608","44cb45c4":"53656","9c78dc98":"53820","5f81cf92":"53841",f1033915:"53858",ba9985f9:"54306","556b3791":"54431",bf5c6ec1:"54550",b8dc12d1:"54869","6a15417a":"54951","2231a488":"54976","1d20ceda":"55211","15229d27":"55442","4b92d0f7":"55449","76a57fce":"55568","776f5ca7":"55700","1a5def29":"55745",afd0837d:"56064","0d746925":"56420",b5f41b49:"56590",d19bbba7:"56821",db23a403:"56902","81b914bb":"57013",c2bbca24:"57069",ab287901:"57171",c355328a:"57457","404ee4b8":"57526",d60ca510:"57540",a8c3bf62:"57916","3262fdb6":"58547","213446b8":"58598","7fc00721":"58639","6cb29bfb":"58731",d9f6f020:"58739","31abdbdd":"58826","2b8da922":"58901",f30b03ca:"58932","8f8f2b51":"59115","57e3bc5c":"59319",e657c00b:"59432","562f6aa3":"59555","891e7036":"59606","54c8f791":"59615",d92463a7:"60244","8744988f":"60372","404c205f":"60705","557bf77b":"60722","4e444cb9":"60751",fc9df442:"60888",a6c3b5d0:"60937","10fe60bd":"61803","50bd9b19":"61893","6b25efb2":"61927",afa0d535:"62541","48983c45":"62560",ec78dc8a:"62887",f421f633:"62971","7f272789":"63056",e8ba05dc:"63070","505f2e73":"63404","01a85c17":"64013",dea3893f:"64065","523b9378":"64149",dac3e60c:"64255","109cfdab":"64387","1a7ee218":"64495",c534ebf6:"64614","877492c5":"64804",e0bbaf01:"65233",fff8bfb8:"65381","394a19c2":"65562",bcfb757a:"65827","08aa19df":"66211","1c6de981":"66542","7769a307":"66621","09220732":"66753","0e169594":"66883","244aab14":"67009","86ba8bc4":"67276","4d4db300":"67774","584f33f2":"68191",b931be22:"68383","8b99c130":"68390","0b387740":"68467",e9b6e2b9:"68686",b2fa5a44:"68744","4c0c3b33":"68907","6a831198":"69162","0efed4a8":"69370",a02e6e2b:"69511","4a9afb76":"69571",ce45335a:"69855","3e7dd7f3":"70177","071bbe49":"70213","457a5f4e":"70313","17952d23":"70399",dce2ca95:"70404","7a9dc61d":"70421",d7a8c6c3:"70599",f42afdee:"71108","8a40895d":"71424",a2dbe0ac:"71715","23146baa":"71894","531ea435":"72156",d469812d:"72239","85487be5":"72348","9ea39fdf":"72393","638a0fd1":"72428","6641046c":"72571","48df297d":"72594","8e4f7682":"72628",d4ffcdee:"72793","52e05d27":"73111","05e1073b":"73171",ff19e50d:"73366","8dbf76b2":"73551","4f04b67c":"73599",a784d869:"73862",fd42b8cd:"73923","0da360f2":"74485",c7fb6649:"74514","77fc6745":"74592","4f32b055":"74730",e3a32727:"74803","2262ce7c":"75065",c777396b:"75118","5a1617f4":"75254","43ab5c57":"75496","580380e0":"75599","7de7ec2e":"75626","1116edd8":"75939",b2a447c9:"76581",ce7343f9:"76696",f7c31e00:"76815",f1e9ba91:"76836","499b8489":"77005","75410d66":"77018","95281d3a":"77253",cf0fa099:"77273","65f26dbc":"77337","5b8a7a7e":"77339","5a9b0f2c":"77442","13d94f48":"77529","6dcaddc4":"77577",ed9580b5:"78102","6b2d5f2b":"78131",be11db40:"78313","74caf440":"78451",fe86874a:"78562","822a8da5":"79695",d2e4b60d:"79946","935f2afb":"80053","75957c6e":"80202","0c446527":"80399","505a7e84":"80688",bfa91014:"81317",f06a3584:"81394",d230730a:"81734",ff4b0e7e:"81767",f406fa07:"81933","30ff7850":"82063","6b1b17e3":"82068","1c056199":"82231","11f59681":"82433","0f7380fa":"82443","7978d17e":"82692","96eaee2e":"82719",ae372b87:"82724","6d897242":"82797","4a97e2ba":"83054","2adb5274":"83310",d0d32364:"83519","12c7542d":"83542","2c8adea4":"83646","71c1a9a2":"83647","5154a0c0":"83779","06da0517":"83814",d97726c4:"83940","2328795e":"84027","65cc375b":"84109",fd8b21b9:"84209",b2ddf146:"84361",d633ce0b:"84367","34c8741a":"84373",df507495:"84462","20125bf3":"84681",b035c451:"84688",db40a3d0:"84742","7cca3229":"84960","0bab6cfb":"85142","60d90122":"85154","37c49df1":"85187",e7d6ed4b:"85207",d4e870d0:"85234","53a76031":"85526",a48015fd:"85750",eac4cf92:"85926","88c4395d":"86085",adc7d4bb:"86116","987eac9e":"86226","7622e8c0":"86303",e22327ad:"86438","05d1f4e8":"86587",be362a92:"86914",e97ce8a2:"87047","2fd62ebd":"87055","63eda9ff":"87141","288139cb":"87374","5e967ed4":"87514","43e050e6":"87598",eff6a74c:"87944",a11ac63a:"88042","91dac72f":"88069",e2638161:"88276","08ea5a71":"88607",b63dfd52:"88813","3fc06181":"88940","5d44edd9":"89055","9e98e556":"89165",a83fca78:"89527","6ce2a349":"90043","786c90b7":"90314","18d4b376":"90658",ea8c328a:"90862",d521d200:"91405","3452ccb6":"91413","49ba5fe1":"91497","8d38a755":"91544","146fb227":"91608","40820b5a":"91786","7dfb83d7":"91874","461edca2":"91997",f2448633:"92204","5ba66649":"92597","658fd2ae":"92720","66acf69d":"92802",e143fda9:"92885","0de6b997":"92989",a6aa9e1f:"93089","2fd58bdb":"93239","730af974":"93442","51772be9":"93548","241a26cb":"93590","9c82c46c":"93627","0ddec893":"94031",cb950484:"94118","0b858d2f":"94367","452de1e2":"94406","0d040de0":"94471","62e5a085":"94536","5cba42da":"94760","1967d9b6":"94847","5ffbb054":"94991","4d2c8f2a":"95033","97dfa070":"95255",b46f3282:"95273",b571fd7a:"95481","270ab2a8":"95623","1916b8ce":"95690","7d7f0ccf":"95877",b67da459:"96088","72d89c46":"96179","638caea5":"96408",e2b03391:"96420",d935ad93:"96467","02e4c897":"96621","86aa610a":"97001","69aec5e5":"97223","09c00e8c":"97659",e6ea580b:"97797","6156ae12":"97897",ad16ea4d:"97906","1f5c10d1":"97927",c881e1b7:"97963","4cc8c5ab":"97985","4409662a":"98055","115175ad":"98103","435a4007":"98403","729e5a0c":"98404",e7481506:"98432","4b2f2c75":"98440","1eccaf7c":"98921",de2fef87:"98943","1c08fd51":"98948","568be63a":"99343","3a3c8582":"99454","35279f86":"99834"}[e]||e,r.p+r.u(e)},(()=>{var e={51303:0,40532:0};r.f.j=(c,b)=>{var a=r.o(e,c)?e[c]:void 0;if(0!==a)if(a)b.push(a[2]);else if(/^(40532|51303)$/.test(c))e[c]=0;else{var f=new Promise(((b,f)=>a=e[c]=[b,f]));b.push(a[2]=f);var d=r.p+r.u(c),t=new Error;r.l(d,(b=>{if(r.o(e,c)&&(0!==(a=e[c])&&(e[c]=void 0),a)){var f=b&&("load"===b.type?"missing":b.type),d=b&&b.target&&b.target.src;t.message="Loading chunk "+c+" failed.\n("+f+": "+d+")",t.name="ChunkLoadError",t.type=f,t.request=d,a[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,b)=>{var a,f,d=b[0],t=b[1],o=b[2],n=0;if(d.some((c=>0!==e[c]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(c&&c(b);n - +

AIR Community

AIR has been around for many years so you will find content in many places. Here we have listed the best ways to get involved in the AIR community as well as resources to answer your questions.

Discussions

Get involved with the AIR community in the discussion forum on GitHub. This space is used by AIR developers to ask questions about development with AIR.

Issue Tracker

Run into an issue or have a feature you would like to get added to AIR, head to the GitHub issue tracker.

Starling Forum

Starling is one of the widest used libraries for AIR and the forum is very active not only for support on Starling but anything related to AIR development.

Discord

Join the fellow AIR developers on the AIRSDK discord server and discuss AIR development in real time.

- + \ No newline at end of file diff --git a/docs.html b/docs.html index 1eb50eb51..b4405619f 100644 --- a/docs.html +++ b/docs.html @@ -16,13 +16,13 @@ - +

About AIR

Adobe® AIR® is a multi-operating system, multi-screen runtime that allows you to leverage your web development skills to build and deploy rich Internet applications (RIAs) to the desktop and mobile devices. Desktop, television, and mobile AIR applications can be built with ActionScript 3.0 using Adobe® Flex and Adobe® Flash® (SWF based). Desktop AIR applications can also be built with HTML, JavaScript®, and Ajax (HTML based).

This site is the main portal for getting started with and using Adobe AIR.

AIR enables you to work in familiar environments, to leverage the tools and approaches you find most comfortable. By supporting Actionscript, Flex, HTML, and JavaScript, you can build the best possible experience that meets your needs.

When developing applications for AIR, you can leverage a rich set of frameworks and APIs:

  • APIs specific to AIR provided by the runtime and the AIR framework;
  • ActionScript APIs used in SWF files and Flex framework (as well as other ActionScript based libraries and frameworks);
  • HTML, CSS, and JavaScript;
  • Native extensions (ANEs), which provide ActionScript APIs that provide you access to platform-specific functionality programmed in native code. Native extensions can also provide access to legacy native code, and native code that provides higher performance.

AIR dramatically changes how applications can be created, deployed, and experienced. You gain more creative control and can extend your Actionscript, Flex, HTML, and Ajax-based applications to the desktop, mobile devices, and televisions.

- + \ No newline at end of file diff --git a/docs/basics/create-an-app.html b/docs/basics/create-an-app.html index be426a37c..3c81358f3 100644 --- a/docs/basics/create-an-app.html +++ b/docs/basics/create-an-app.html @@ -16,13 +16,13 @@ - +
- + \ No newline at end of file diff --git a/docs/basics/getting-started.html b/docs/basics/getting-started.html index 8359547f3..5e821064a 100644 --- a/docs/basics/getting-started.html +++ b/docs/basics/getting-started.html @@ -16,13 +16,13 @@ - +

Getting Started

The AIR SDK is an application development framework. You will mainly use actionscript to develop applications that are packaged for the various supported platforms.

To get started you will need to download and install the SDK.

If you already have the SDK installed you can skip to installing apm or setting up your editor.

- + \ No newline at end of file diff --git a/docs/basics/install-apm.html b/docs/basics/install-apm.html index f9743b5f0..702af6adc 100644 --- a/docs/basics/install-apm.html +++ b/docs/basics/install-apm.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ You likely added the path to your AIR SDK (AIR_HOME) previously so we suggest adding this just after that information:

export AIR_HOME=/path/to/your/air/sdk
export AIR_TOOLS=/path/to/apmfolder

export PATH="${PATH}":"${AIR_HOME}/bin":"${AIR_TOOLS}"

Verify Installation

Confirm you can use the apm client by opening up a terminal and running apm -version. You should see the version of apm output to the terminal, for example:

$ apm -version
1.0.0
- + \ No newline at end of file diff --git a/docs/basics/install/linux.html b/docs/basics/install/linux.html index 262c65485..9c5adde10 100644 --- a/docs/basics/install/linux.html +++ b/docs/basics/install/linux.html @@ -16,13 +16,13 @@ - +

Linux install

System Requirements

To install and run AIR your development environment must meet these minimum requirements:

  • Linux
  • 1.3GB free disk space (for the AIR SDK and does not include other tools)
  • A version of Java 11 JDK

Download the SDK

  1. Download the latest release bundle of the AIR SDK:
Loading ...

For older versions see the SDK releases page.

  1. Extract the bundle in the desired location, for example:
cd ~/sdks/air
unzip ~/Downloads/AIRSDK_Linux.zip

Set your Environment

Next you will want to add the AIR SDK tools to your path so you can execute the build commands.

  1. Permanently adding the path will depend on the shell you are using on your machine. Typing echo $SHELL in your Terminal will generally tell you which sheel you are using and then you can edit the rc file for that shell type, the most common types are:
  • /bin/bash: Edit the .bash_profile or .bashrc file
  • /bin/zsh: Edit the .zshrc file
  1. Once you have determined the shell type add the following changing the [AIR_SDK_PATH] to be the path you extracted the AIR SDK to above:
export AIR_HOME=[AIR_SDK_PATH]
export PATH="${PATH}":"${AIR_HOME}/bin"
  1. Run source ~/.<rc file> or start a new Terminal window to refresh the environment.

  2. Verify the AIR SDK bin directory is in your path by running:

echo $PATH

Verify you can access the AIR SDK commands by running:

which adt adl
note

You can check the version of the AIR SDK by running

adt -version

Java

You must make sure you have version of Java 11 installed and that your JAVA_HOME environment variable is set to the JDK’s folder.

- + \ No newline at end of file diff --git a/docs/basics/install/macos.html b/docs/basics/install/macos.html index 224311ecc..17536ec7b 100644 --- a/docs/basics/install/macos.html +++ b/docs/basics/install/macos.html @@ -16,13 +16,13 @@ - +

macOS install

System Requirements

To install and run AIR your development environment must meet these minimum requirements:

  • macOS
  • 1.3GB free disk space (for the AIR SDK and does not include other tools)
  • A version of Java 11 JDK

Install the SDK

You have two options to install the AIR SDK. The recommended method is to use the AIR SDK Manager. The manager will inform you of available updates and minimise the download required for each update.

Alternatively you can manually download the AIR SDK.

  1. Download the latest release bundle of the AIR SDK Manager:
Loading ...
  1. Start the installer and follow the prompts to install the application.

  2. Once installed, set the AIR SDKs Location on your machine.

AIR SDK Location

This location will be where the AIR SDK Manager installs versions of the AIR SDK. This can be an existing directory of AIR SDKs however it is recommended to select a new location, eg /Users/<your-user-name>/sdks/air

The manager will construct a directory for each major version of the AIR SDK (eg AIRSDK_50.2.1), with point releases just be considered as updates.

  1. Select one of the available SDK versions and click the gear icon to Install the SDK. Once installed you can click Locate to locate the installation.

Set your Environment

Next you will want to add the AIR SDK tools to your path so you can execute the build commands.

  1. Permanently adding the path will depend on the shell you are using on your machine. Typing echo $SHELL in your Terminal will generally tell you which sheel you are using and then you can edit the rc file for that shell type, the most common types are:
  • /bin/bash: Edit the .bash_profile or .bashrc file
  • /bin/zsh: Edit the .zshrc file
  1. Once you have determined the shell type add the following changing the [AIR_SDK_PATH] to be the path you installed the AIR SDK to above:
export AIR_HOME=[AIR_SDK_PATH]
export PATH="${PATH}":"${AIR_HOME}/bin"
  1. Run source ~/.<rc file> or start a new Terminal window to refresh the environment.

  2. Verify the AIR SDK bin directory is in your path by running:

echo $PATH

Verify you can access the AIR SDK commands by running:

which adt adl
note

You can check the version of the AIR SDK by running

adt -version

iOS setup

Install Xcode

While not entirely necessary, downloading Xcode will give you access to the latest developer tools and is highly recommended. This will also give you access to the iOS simulator so you can run your iOS applications in the iOS simulator on your development machine.

  1. Install the latest version of Xcode (using the download or via the Mac App Store).

  2. Ensure you have selected the latest version for the command line tools using:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
  1. Make sure you have accepted the license agreement by opening Xcode once and confirming (or running sudo xcodebuild -license from a Terminal).

Setup the iOS Simulator

Make sure you can launch the iOS simulator by running the following in a Terminal:

open -a Simulator

Android setup

note

AIR relies on the Android SDK and build tools in order to produce AAB builds and support the latest Android functionality.

You can either install the Android SDK directly or we suggest you install Android Studio (which includes the SDK) as this makes the installation process easier and provides additional debugging tools.

Install Android Studio

  1. Download Android Studio
  2. Start Android studio and run through the setup wizard which will install the latest Android SDK, command line tools and build tools.

Set up your Android device

If you have an Android device you intend on debugging with you must make sure you have set up the device for debugging.

  1. In order to debug an application on an Android device you need to enable "Developer Mode" and then enable USB debugging. Detailed process is described in the Android documentation.
  2. Plug your device into your machine using a cable, and you should receive a prompt on the device to authorise access via the computer;
  3. Run the following command and you should see a device listed:
adt -devices -platform android

Java

You must make sure you have version 11 of the Java Development Kit installed and that your JAVA_HOME environment variable is set to the JDKs folder.

- + \ No newline at end of file diff --git a/docs/basics/install/windows.html b/docs/basics/install/windows.html index ca301abac..ee278f7e9 100644 --- a/docs/basics/install/windows.html +++ b/docs/basics/install/windows.html @@ -16,13 +16,13 @@ - +

Windows install

System Requirements

To install and run AIR your development environment must meet these minimum requirements:

  • Windows 7 or later
  • 1.3GB free disk space (for the AIR SDK and does not include other tools)
  • A version of Java 11 JDK

Install the SDK

You have two options to install the AIR SDK. The recommended method is to use the AIR SDK Manager. The manager will inform you of available updates and minimise the download required for each update.

Alternatively you can manually download the AIR SDK.

  1. Download the latest release bundle of the AIR SDK Manager:
Loading ...
  1. Start the installer and follow the prompts to install the application.

  2. Once installed, set the AIR SDKs Location on your machine.

AIR SDK Location

This location will be where the AIR SDK Manager installs versions of the AIR SDK. This can be an existing directory of AIR SDKs however it is recommended to select a new location, eg C:\Users\<your-user-name>\sdks\air

The manager will construct a directory for each major version of the AIR SDK (eg AIRSDK_50.2.1), with point releases just be considered as updates.

  1. Select one of the available SDK versions and click the gear icon to Install the SDK. Once installed you can click Locate to locate the installation.

Set your Environment

Next you will want to add the AIR SDK tools to your path so you can execute the build commands from any console.

  1. Open the Environment Variables window by searching for "Edit environment variables" in the search bar:

  1. Add a variable called AIR_HOME and set it to the location where you extracted the AIR SDK (eg C:\Users\<your-user-name>\sdks\air\AIRSDK_50.2.1)

  2. Locate the Path Variable:

  • If it exists, append %AIR_HOME%\bin using ; as a separator (or select edit and add a New entry);
  • If it doesn't exist, create a new variable with the name Path and value %AIR_HOME%\bin
  1. Close and reopen any active console windows

  2. Verify the AIR SDK bin directory is in your path by running:

echo %Path%

or if you are using Powershell:

$Env:Path

Verify you can access the AIR SDK commands by running:

where.exe adt
note

You can check the version of the AIR SDK by running

adt -version

Android setup

note

AIR relies on the Android SDK and build tools in order to produce AAB builds and support the latest Android functionality.

You can either install the Android SDK directly or we suggest you install Android Studio (which includes the SDK) as this makes the installation process easier and provides additional debugging tools.

Install Android Studio

  1. Download Android Studio
  2. Start Android studio and run through the setup wizard which will install the latest Android SDK, command line tools and build tools.

Set up your Android device

If you have an Android device you intend on debugging with you must make sure you have set up the device for debugging.

  1. In order to debug an application on an Android device you need to enable "Developer Mode" and then enable USB debugging. Detailed process is described in the Android documentation.
  2. Plug your device into your machine using a cable, and you should receive a prompt on the device to authorise access via the computer;
  3. Run the following command and you should see a device listed:
adt -devices -platform android

Java

You must make sure you have version 11 of the Java Development Kit installed and that your JAVA_HOME environment variable is set to the JDKs folder.

- + \ No newline at end of file diff --git a/docs/basics/next-steps.html b/docs/basics/next-steps.html index f48bb9699..12449318d 100644 --- a/docs/basics/next-steps.html +++ b/docs/basics/next-steps.html @@ -16,13 +16,13 @@ - +

Next Steps

Learn more about programming with Actionscript and the AIR SDK from the following.

Tutorials

There are a range of tutorials available in the tutorials section. These tutorials cover some of the core concepts when developing applications with the AIR SDK and are a great place for a new or experienced developer to learn new skills.

Actionscript Development Guides

The Actionscript development guides on this site contain a wealth of information about using Actionscript to create visual experiences and applications.

Some of the important concepts are:

Other resources

Make sure you get involved in the AIR community, we would love to hear from you!

- + \ No newline at end of file diff --git a/docs/basics/setup-an-editor.html b/docs/basics/setup-an-editor.html index 214d8acd9..33d106e91 100644 --- a/docs/basics/setup-an-editor.html +++ b/docs/basics/setup-an-editor.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ The above editors are much more fully featured and will make development easier.

Animate however is a very useful tool to have access to, particular for creating visual assets and animations for your AIR applications. Assets exported from Animate can be imported and used very easily in an AIR application.

Adobe Animate is available from Adobe as part of the Creative Cloud.

Other Editors

Deprecated

There are many other IDEs that you may come across. So we are including this section to inform you of some of the IDEs that we recommend avoiding.

These may be no longer maintained or incompatible with the latest AIR SDK's and we advise against using them:

- + \ No newline at end of file diff --git a/docs/building/actionscript-compilers.html b/docs/building/actionscript-compilers.html index b827da9d4..47e8580de 100644 --- a/docs/building/actionscript-compilers.html +++ b/docs/building/actionscript-compilers.html @@ -16,14 +16,14 @@ - +

About the compilers

Before ActionScript and MXML code can be included in an AIR application, it must be compiled.

The compilers create SWF files that are run in an in an Adobe AIR™ application (or Adobe™ Flash® Player clients).

If you use an Integrated Development Environment (IDE), the IDE handles compilation behind the scenes and you probably will never need to use the compilers directly. However, you can also invoke the ActionScript compilers from the command line to create your SWF files when not using an IDE or when using a build script.

The command-line compilers

You use the mxmlc and compc command-line compilers to compile your MXML and AS files into SWF and SWC files.

To use the command-line compilers, you must have a Java run-time environment in your system path.

The command-line compilers are located in the [AIRSDK]/bin directory.

When using mxmlc and compc on the command line, you can also use a configuration file to store your options rather than list them on the command line. You can store command-line options as XML blocks in a configuration file.

Command-line syntax

The mxmlc and compc compilers take many options. The options are listed in the help which you can view with the help option, as the following example shows:

mxmlc -help

This displays a menu of choices for getting help. The most common choice is to list the basic configuration options:

mxmlc -help list

To see advanced options, use the list advanced option, as the following example shows:

mxmlc -help list advanced

To see a list of entries whose names or descriptions include a particular String, use the following syntax:

mxmlc -help pattern

The following example returns descriptions for the external-library-path, library-path, and runtimeshared-libraries options:

mxmlc -help list library

For a complete description of mxmlc options, see Application compiler options. For a complete description of compc options, see Component compiler options.

Many command-line options, such as show-actionscript-warnings and accessible, have true and false values. You specify these values by using the following syntax:

mxmlc -accessible=true -show-actionscript-warnings=true

Some options, such as source-path, take a list of one or more options. You can see which options take a list by examining the help output. Square brackets ([ ]) that surround options indicate that the option can take a list of one or more parameters.

You can separate each entry in a list with a space or a comma. The syntax is as follows:

-var val1 val2

or

-var=val1, val2

If you do not use commas to separate entries, you terminate a list by using a double hyphen, as the following example shows:

-var val1 val2 -- -next_option

If you use commas to separate entries, you terminate a list by not using a comma after the last entry, as the following example shows:

-var=val1, val2 -next_option

You can append values to an option using the += operator. This adds the new entry to the end of the list of existing entries rather than replacing the existing entries. The following example adds the c:/myfiles directory to the library-path option:

mxmlc -library-path+=c:/myfiles

Using abbreviated option names

In some cases, the command-line help shows an option with dot-notation syntax; for example, source-path is shown as compiler.source-path. This notation indicates how you would set this option in a configuration file. On the command line, you can specify the option with only the final node, source-path, as long as that node is unique, as the following example shows:

mxmlc -source-path . c:/myclasses/ -- foo.mxml

For more information about using configuration files to store command-line options, see Configuration files.

Some compiler options have aliases. Aliases provide shortened variations of the option name to make command lines more readable and less verbose. For example, the alias for the output option is o. You can view a list of options by their aliases by using the following command:

mxmlc -help list aliases

or

mxmlc -help list advanced aliases

You can also see the aliases in the verbose help output by using the following command:

mxmlc -help list details

Invoking the command-line compilers with Java

AIR provides a simple interface to the command-line compilers. For UNIX users, there is a shell script. For Windows users, there is an executable file. These files are located in the bin directory. You can also invoke the compilers using Java. This lets you integrate the compilers into Java-based projects (such as Ant) or other utilities.

The shell scripts and executable files for the command-line compilers wrap calls to the mxmlc.jar and compc.jar JAR files. To invoke the compilers from Java, you call the JAR files directly. The JAR files are located in the AIRSDK/lib directory.

To invoke a command in a JAR file, use the java command from the command line and specify the JAR file you want to execute with the jar option. You must also specify the value of the +flexlib option. This advanced option lets you set the root directory that is used by the compiler to locate the flex-config.xml file, among other files. You typically point it to your frameworks directory. From there, the compiler can detect the location of other configuration files.

The following example compiles MyApp.mxml into a SWF file using the JAR file to invoke the mxmlc compiler:

java -jar ../lib/mxmlc.jar +flexlib c:/flex_4_sdk/frameworks c:/flex/MyApp.mxml

You pass all other options as you would when you open the command-line compilers. The following example sets the locale and source path when compiling MyApp:

java -jar ../lib/mxmlc.jar +flexlib c:/flex_4_sdk/frameworks -locale en_US -source-path locale/{locale} c:/flex/MyApp.mxml
- + \ No newline at end of file diff --git a/docs/building/actionscript-compilers/application-compiler.html b/docs/building/actionscript-compilers/application-compiler.html index 5cae4ae1f..637743de4 100644 --- a/docs/building/actionscript-compilers/application-compiler.html +++ b/docs/building/actionscript-compilers/application-compiler.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ As part of the incremental compilation process, the compiler generates a cache file that lists the compilation units of your application and information on your application’s structure. This file is located in the same directory as the file that you are compiling. For example, if my application is called MyApp.mxml, the cache file is called MyApp.mxml.cache. This file helps the compiler determine which parts of your application must be recompiled. One way to force a complete recompile is to delete the cache file from the directory.

Incremental compilation can help reduce compile time on small applications, but you achieve the biggest gains on larger applications.

For the mxmlc command-line compiler, the default is false.

Using conditional compilation

To include or exclude blocks of code for certain builds, you can use conditional compilation. The mxmlc compiler lets you pass the values of constants to the application at compile time. Commonly, you pass a Boolean that is used to include or exclude a block of code such as debugging or instrumentation code. The following example conditionalizes a block of code by using an inline constant Boolean:

CONFIG::debugging {
// Execute debugging code here.
}

To pass constants, you use the compiler.define compiler option. The constant can be a Boolean, String, or Number, or an expression that can be evaluated in ActionScript at compile time. This constant is then accessible within the application source code as a global constant.

To use the define option, you define a configuration namespace for the constant, a variable name, and a value using the following syntax:

-define=namespace::variable_name,value

The configuration namespace can be anything you want. The following example defines the constant debugging with a value of true in the CONFIG namespace:

-define=CONFIG::debugging,true

You use the += operator rather than the = operator to append definitions on the command line to the definitions set in the configuration file. Use the = operator to replace the definitions in the configuration file with the definitions on the command line.

To set the values of multiple constants on the command-line, use the define option more than once; for example:

mxmlc -define+=CONFIG::debugging,true -define+=CONFIG::release,false MyApp.mxml

To set the value of these constants in the flex-config.xml file, rather than on the command line, you write this as the following example shows:

<compiler>
<define append="true">
<name>CONFIG::debugging</name>
<value>true</value>
</define>
<define append="true">
<name>CONFIG::release</name>
<value>false</value>
</define>
</compiler>

If you set the same definition in a configuration file and on the command line, the value on the command line takes precedence. In a Flex Ant task, you can set constants with a define element, as the following example shows:

<mxmlc ... >
<define name="CONFIG::debugging" value="true"/>
<define name="CONFIG::release" value="false"/>
</mxmlc>

Using inline constants

You can use inline constants in ActionScript. Boolean values can be used to conditionalize top-level definitions of functions, classes, and variables, in much the same way you would use an #IFDEF preprocessor command in C or C++. You cannot use constant Boolean values to conditionalize metadata or import statements.

The following example conditionalizes which class definition the compiler uses when compiling the application:

// compilers/MyButton.as
package {
import mx.controls.Button;
CONFIG::debugging
public class MyButton extends Button {
public function MyButton() {
super();
// Set the label text to blue.
setStyle("color", 0x0000FF);
}
}
CONFIG::release
public class MyButton extends Button {
public function MyButton() {
super();
// Set the label text to red.
setStyle("color", 0xFF0000);
}
}
}

You can also pass Strings and Numbers to the application and use them as inline constants, in the same way you might use a #define directive in C or C++. For example, if you pass a value named NAMES::Company, you replace it with a constant in your application by using an ActionScript statement like the following example shows:

private static const companyName:String = NAMES::Company;

Passing expressions

You can pass expressions that can be evaluated at compile time as the value of the constant. The following example evaluates to false:

-define+=CONFIG::myConst,"1 > 2"

The following example evaluates to 3:

-define+=CONFIG::myConst,"4 - 1"

Expressions can contain constants and other configuration values; for example:

-define+=CONFIG::bool2,false -define+=CONFIG::and1,"CONFIG::bool2 && false"

In general, you should wrap all constants with double quotes, so that the mxmlc compiler correctly parses them as a single argument.

Passing Strings

When passing Strings, you must add extra quotes to ensure that the compiler parses them correctly. To define Strings on the command-line, you must surround them with double-quotes, and either escape-quote them ("\"Adobe Systems\"" or "\\x\\x) or single-quote them ("'Adobe Systems'").

The following example shows both methods of including Strings on the command line:

-define+=NAMES::Company,"'Adobe Systems'" -define+=NAMES::Ticker,"\"ADBE\""

To define Strings in configuration files, you must surround them with single or double quotes; for example:

<define>
<name>NAMES::Company</name>
<value>'Adobe Systems'</value>
</define>
<define>
<name>NAMES::Ticker</name>
<value>"ADBE"</value>
</define>

To pass empty Strings on the command line, use single quotes surrounded by double quotes, as the following example shows:

-define+=CONFIG::debugging,"''"

To pass empty Strings in configuration files, use double quotes ("") or single quotes (' ').

Editing application settings

The mxmlc compiler includes options to set the application’s frame rate, size, and script limits.

The following command-line example sets default application properties:

mxmlc -default-size 240 240 \
-default-frame-rate=24 \
-default-script-limits 5000 10 -- \
c:/myfiles/flex/misc/MainApp.mxml

mxmlc examples

The following examples demonstrate use of the amxmlc compiler. (Only the ActionScript and MXML assets of your application must be compiled.)

Compile an AIR MXML file:

amxmlc myApp.mxml

Compile and set the output name:

amxmlc –output anApp.swf -- myApp.mxml

Compile an AIR ActionScript file:

amxmlc myApp.as

Specify a compiler configuration file:

amxmlc –load-config config.xml -- myApp.mxml

Add additional options from another configuration file:

amxmlc –load-config+=moreConfig.xml -- myApp.mxml

Add libraries on the command line (in addition to the libraries already in the configuration file):

amxmlc –library-path+=/libs/libOne.swc,/libs/libTwo.swc  -- myApp.mxml

Compile an AIR MXML file without using a configuration file (Win):

mxmlc -library-path [AIR SDK]/frameworks/libs/air/airframework.swc, ^
[AIR SDK]/frameworks/libs/air/airframework.swc, ^
-library-path [Flex SDK]/frameworks/libs/framework.swc ^
-- myApp.mxml

Compile an AIR MXML file without using a configuration file (Mac OS X or Linux):

mxmlc -library-path [AIR SDK]/frameworks/libs/air/airframework.swc, \
[AIR SDK]/frameworks/libs/air/airframework.swc, \
-library-path [Flex 3 SDK]/frameworks/libs/framework.swc \
-- myApp.mxml

Compile an AIR MXML file to use a runtime-shared library:

amxmlc -external-library-path+=../lib/myLib.swc -runtime-shared-libraries=myrsl.swf -- myApp.mxml

Compile an AIR MXML file to use an ANE (be sure to use ‑external‑library‑path for the ANE):

amxmlc -external-library-path+=../lib/myANE.ane -output=myAneApp.swf -- myAneApp.mxml

Compiling from Java (with the class path set to include mxmlc.jar):

java flex2.tools.Compiler +flexlib [Flex SDK 3]/frameworks +configname=air [additional compiler options] -- myApp.mxml

The flexlib option identifies the location of your Flex SDK frameworks directory, enabling the compiler to locate the flex_config.xml file.

Compiling from Java (without the class path set):

java -jar [Flex SDK 2]/lib/mxmlc.jar +flexlib [Flex SDK 3]/frameworks +configname=air [additional compiler options] -- myApp.mxml

To invoke the compiler using Apache Ant (the example uses a Java task to run mxmlc.jar):

<property name="SDK_HOME" value="C:/Flex46SDK"/>
<property name="MAIN_SOURCE_FILE" value="src/myApp.mxml"/>
<property name="DEBUG" value="true"/>
<target name="compile">
<java jar="${MXMLC.JAR}" fork="true" failonerror="true">
<arg value="-debug=${DEBUG}"/>
<arg value="+flexlib=${SDK_HOME}/frameworks"/>
<arg value="+configname=air"/>
<arg value="-file-specs=${MAIN_SOURCE_FILE}"/>
</java>
</target>

For more on using ant see the Apache Ant documentation

- + \ No newline at end of file diff --git a/docs/building/actionscript-compilers/component-compiler.html b/docs/building/actionscript-compilers/component-compiler.html index d393bd5b9..facb2eb1a 100644 --- a/docs/building/actionscript-compilers/component-compiler.html +++ b/docs/building/actionscript-compilers/component-compiler.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ The component compiler can take most of the application compiler options, and the options described in this section.

For a description of the application compiler options, see Application compiler options.

Application compiler options that do not apply to the component compiler include the metadata options (such as contributor, title, and date), default application options (such as default-frame-rate), locale, debug-password, and theme.

The component compiler has compiler options that the application compilers do not have. The following table describes the component compiler options that are not used by the application compilers:

TODO

Compiling stand-alone components and classes

In many cases, you have one or more components that you use in your applications, but you do not have them in a package structure. You want to be able to use them in the generic namespace (“*”) inside your applications. In these cases, you use the include-classes option to add the components to your SWC file.

The following command-line example compiles two components, Rotation.as and RotationInstance.as, into a single SWC file:

compc -source-path .
-output c:/jrun4/servers/flex/WEB-INF/flex/user_classes/RotationClasses.swc
-include-classes rotationClasses.Rotation rotationClasses.RotationInstance

The rotationClasses directory is a subdirectory of the current directory, which is in the source path. The SWC file is output to the user_classes directory, so the new components require no additional configuration to be used in a server environment.

You use the include-classes option to add components to the SWC file. You use just the class name of the component and not the full filename (for example, MyComponent rather than MyComponent.as). Use dot-notation to specify the location of the component in the package structure.

You also set the source-path to the current directory or a directory from which the component directory can be determined.

You can also add the framework.swc and framework_rb.swc files to the library-path option. This addition is not always required if the compiler can determine the location of these SWC files on its own. However, if you move the compiler utility out of the default location relative to the frameworks files, you must add it to the library path.

The previous command-line example appears in a configuration file as follows:

<compiler>
<source-path>
<path-element>.</path-element>
</source-path>
<output>
c:/jrun4/servers/flex/WEB-INF/flex/user_classes/RotationClasses.swc
</output>
</compiler>
<include-classes>
<class>rotationClasses.Rotation</class>
<class>rotationClasses.RotationInstance</class>
</include-classes>

To use components that are not in a package in an application, you must declare a namespace that includes the directory structure of the components. The following example declares a namespace for the components compiled in the previous example:

<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:local="rotationclasses.*">
...
<local:Rotation id="Rotate75" angleFrom="0" angleTo="75" duration="100"/>
...
</s:Application>

To use the generic namespace of "*" rather than a namespace that includes a component’s directory structure, you can include the directory in the source-path as the following command-line example shows:

compc -source-path . c:/flexdeploy/comps/rotationClasses
-output c:/jrun4/servers/flex/WEB-INF/flex/user_classes/RotationComps.swc
-include-classes Rotation RotationInstance

Then, you can specify the namespace in your application as:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:local="*">

You are not required to use the directory name in the include-classes option if you add the directory to the source path.

These options appear in a configuration file, as the following example shows:

<compiler>
<source-path>
<path-element>.</path-element>
<path-element>c:/flexdeploy/comps/rotationClasses</path-element>
</source-path>
<output>c:/jrun4/servers/flex/WEB-INF/flex/user_classes/RotationComps.swc</output>
</compiler>
<include-classes>
<class>Rotation</class>
<class>RotationInstance</class>
<include-classes>

This example assumes that the components are not in a named package

Compiling components in packages

Some components are created inside packages or directory structures so that they can be logically grouped and separated from application code. As a result, packaged components can have a namespace declaration that includes the package name or a unique namespace identifier that references their location within a package.

You compile packaged components similarly to how you compile components that are not in packages. The only difference is that you must use the package name in the namespace declaration, regardless of how you compiled the SWC file, and that package name uses dot-notation instead of slashes. You must be sure to specify the location of the classes in the source-path.

In the following command-line example, the MyButton component is in the mypackage package:

compc -source-path . c:/flexdeploy/comps/mypackage/
-output c:/jrun4/servers/flex/WEB-INF/flex/user_classes/MyButtonComp.swc
-include-classes mypackage.MyButton

These options appear in a configuration file, as the following example shows:

<compiler>
<source-path>
<path-element>.</path-element>
<path-element>c:/flexdeploy/comps/mypackage/</path-element>
</source-path>
<output>
c:/jrun4/servers/flex/WEB-INF/flex/user_classes/MyButtonComp.swc
</output>
</compiler>
<include-classes>
<class>mypackage.MyButton</class>
<include-classes>

To access the MyButton class in your application, you must declare a namespace that includes its package; for example:

import mypackage.*;

or

<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:mine="mypackage.*">

You can use the compc compiler to compile components from multiple packages into a single SWC file. In the following command-line example, the MyButton control is in the mypackage package, and the CustomComboBox control is in the acme package:

compc -source-path .
-output c:/jrun4/servers/flex/WEB-INF/flex/user_classes/CustomComps.swc
-include-classes mypackage.MyButton
acme.CustomComboBox

You then define each package as a separate namespace in your MXML application:

<?xml version="1.0"?>
<s:Application <s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:mine="mypackage.*"
xmlns:acme="acme.*">
<mine:MyButton/>
<acme:CustomComboBox/>
</s:Application>

or

import mypackage.*;
import acme.*;

var button:MyButton;
var box:CustomComboBox;

Compiling components using namespaces

When you have many components in one or more packages that you want to add to a SWC file and want to reference from an MXML file through a custom namespace, you can list them in a manifest file, then reference that manifest file on the command line. Also, you can specify a namespace for that component or define multiple manifest files and, therefore, specify multiple namespaces to compile into a single SWC file.

When you use manifest files to define the components in your SWC file, you specify the namespace that the components use in your applications. You can compile all the components from one or more packages into a single SWC file. If you have more than one package, you can set it up so that all packages use a single namespace or so that each package has an individual namespace.

Components in a single namespace

In the manifest file, you define which components are in a namespace. The following sample manifest file defines two components to be included in the namespace:

<?xml version="1.0"?>
<!-- SimpleManifest.xml -->
<componentPackage>
<component id="MyButton" class="MyButton"/>
<component id="MyOtherButton" class="MyOtherButton"/>
</componentPackage>

The manifest file can contain references to any number of components in a namespace. The class option is the full class name (including package) of the class. The id property is optional, but you can use it to define the MXML tag interface that you use in your applications. If the compiler cannot find one or more files listed in the manifest, it throws an error.

On the command line, you define the namespace with the namespace option; for example:

-namespace http://mynamespace SimpleManifest.xml

Next, you target the defined namespace for inclusion in the SWC file with the include-namespaces option; for example:

-include-namespaces http://mynamespace

The namespace option matches a namespace (such as "http://ns.adobe.com/mxml/2009") with a manifest file. The include-namespaces option instructs compc to include all the components listed in that namespace’s manifest file in the SWC file.

After you define the manifest file, you can compile the SWC file. The following command-line example compiles the components into the "http://mynamespace" namespace:

compc -source-path .
-output c:/jrun4/servers/flex/WEB-INF/flex/user_classes/MyButtons.swc
-namespace http://mynamespace SimpleManifest.xml
-include-namespaces http://mynamespace

In a configuration file, these options appear as the following example shows:

<compiler>
<source-path>
<path-element>.</path-element>
</source-path>
<output>c:/jrun4/servers/flex/WEB-INF/flex/user_classes/MyButtons.swc</output>
<namespaces>
<namespace>
<uri>http://mynamespace</uri>
<manifest>SimpleManifest.xml</manifest>
</namespace>
</namespaces>
</compiler>
<include-namespaces>
<uri>http://mynamespace</uri>
<include-namespaces>

In your application, you can access the components by defining the new namespace in the <s:Application> tag, as the following example shows:

<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:a="http://mynamespace">
<a:MyButton/>
<a:MyOtherButton/>
</s:Application>

Components in multiple namespaces

You can use the compc compiler to compile components that use multiple namespaces into a SWC file. Each namespace must have its own manifest file.

The following command-line example compiles components defined in the AcmeManifest.xml and SimpleManifest.xml manifest files:

compc -source-path .
-output c:/jrun4/servers/flex/WEB-INF/flex/user_classes/MyButtons.swc
-namespace http://acme2009 AcmeManifest.xml
-namespace http://mynamespace SimpleManifest.xml
-include-namespaces http://acme2009 http://mynamespace

In this case, all components in both the "http://mynamespace" and "http://acme2009" namespaces are targeted and included in the output SWC file.

In a configuration file, these options appear as the following example shows:

<compiler>
<source-path>
<path-element>.</path-element>
</source-path>
<output>c:/jrun4/servers/flex/flex/WEB-INF/flex/user_classes/MyButtons.swc</output>
<namespaces>
<namespace>
<uri>http://acme2009</uri>
<manifest>AcmeManifest.xml</manifest>
</namespace>
<namespace>
<uri>http://mynamespace</uri>
<manifest>SimpleManifest.xml</manifest>
</namespace>
</namespaces>
</compiler>
<include-namespaces>
<uri>http://acme2009</uri>
<uri>http://mynamespace</uri>
<include-namespaces>

In your MXML application, you define both namespaces separately:

<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:simple="http://mynamespace"
xmlns:acme="http://acme2009">
<simple:SimpleComponent/>
<acme:AcmeComponent/>
</s:Application>

You are not required to include all namespaces that you define as target namespaces. You can define multiple namespaces, but use only one target namespace. You might do this if some components use other components that are not directly exposed as MXML tags. You cannot then directly access the components in the unused namespace, however.

The following command line example defines two namespaces, "http://acme2009" and "http://mynamespace", but only includes one as a namespace target:

compc -source-path .
-output c:/jrun4/servers/flex/flex/WEB-INF/flex/user_classes/MyButtons.swc
-namespace http://acme2009 AcmeManifest.xml
-namespace http://mynamespace SimpleManifest.xml
-include-namespaces http://mynamespace

Adding utility classes

You can add any classes that you want to use in your applications to a SWC file. These classes do not have to be components, but are often files that components use. They are classes that might be used at run time and, therefore, are not checked by the compiler. For example, your components might use a library of classes that perform mathematical functions, or use a custom logging utility. This documentation refers to these classes as utility classes. Utility classes are not exposed as MXML tags.

To add utility classes to a SWC file, you use the include-sources option. This option lets you specify a path to a class file rather than the class name, or specify an entire directory of classes.

The following command-line example adds the FV_calc.as and FV_format.as utility classes to the SWC file:

compc -source-path .
-output c:/jrun4/servers/flex/WEB-INF/flex/user_classes/MySwc.swc
-include-sources FV_classes/FV_format.as FV_classes/FV_calc.as
-include-classes asbutton.MyButton

In a configuration file, these options appear as the following example shows:

<compiler>
<source-path>
<path-element>.</path-element>
</source-path>
<output>c:/jrun4/servers/flex/flex/WEB-INF/flex/user_classes/MySwc.swc</output>
</compiler>
<include-classes>
<class>asbutton.MyButton</class>
</include-classes>
<include-sources>
<path-element>FV_classes/FV_format.as</path-element>
<path-element>FV_classes/FV_calc.as</path-element>
<include-sources>

When specifying files with the include-sources option, you must give the full filename (for example, FV_calc.as instead of FV_calc) because the file is not a component. If you use this option to include MXML components that are in a non-default package, you must include the source folder in the source path. You can also provide a directory name to the include-sources option. In this case, the compiler includes all files with an MXML or AS extension, and ignores all other files.

Classes that you add with the include-sources option can be accessed from the generic namespace in your applications. To use them, you need to add the following code in your application tag:

xmlns:local="*"

You can then use them as tags; for example:

<local:FV_calc id="calc" rate=".0125" nper="12" pmt="100" pv="0" type="1"/>

Adding nonsource classes

You often include noncompiled (or nonsource) files with your applications. A nonsource file is a class or resource (such as a style sheet or graphic) that is not compiled but is included in the SWC file for other classes to use. For example, a font file that you embed or a set of images that you use as graphical skins in a component’s style sheet should not be compiled but should be included in the SWC file. These are classes that you typically do not use the [Embed] syntax to link in to your application.

Use the include-file option to define nonsource files in a SWC file.

The syntax for the include-file option is as follows:

-include-file name path

The name argument is the name used to reference the embedded file in your applications. The path argument is the current path to the file in the file system.

When you use the include-file option, you specify both a name and a filepath, as the following example shows:

compc -include-file logo.gif c:/images/logo/logo1.gif ...

In a configuration file, these options appear as the following example shows:

<compiler>
<output>c:/jrun4/servers/flex/flex/WEB-INF/flex/user_classes/Combo.swc</output>
</compiler>
<include-file>
<name>logo.gif</name>
<path>c:/images/logo/logo1.gif</path>
</include-file>
<include-classes>
<class>asbutton.MyButton</class>
<include-classes>

Each name that you assign to a resource must be unique because the name becomes a global variable. You cannot specify a list of files with the include-file option. So, you must add a separate include-file option for each file that you include, as the following command-line example shows:

compc -include-file file1.jpg ../images/file1.jpg -include-file file2.jpg ../images/file2.jpg
-- -output MyFile.swc

If you want to add many resources to the SWC file, consider using a configuration file rather than listing all the resources on the command line.

In general, specify a file extension for files that you include with the include-file option. In some cases, omitting the file extension can lead to a loss of functionality. For example, if you include a CSS file in a theme SWC file, you must set the name to be *.css. When AIR examines the SWC file, it applies all CSS files in that SWC file to the application. CSS files without the CSS extension are ignored.

Component compiler configuration file

Use a local configuration file to avoid typing (and perhaps incorrectly typing) the source path and class names on the command line. Add the -load-config option to the acompc command line to load the local configuration file.

The following example illustrates a configuration for building a library with two classes, ParticleManager and Particle, both in the package: com.adobe.samples.particles. The class files are located in the source/com/adobe/samples/particles folder.

<flex-config> 
<compiler>
<source-path>
<path-element>source</path-element>
</source-path>
</compiler>
<include-classes>
<class>com.adobe.samples.particles.ParticleManager</class>
<class>com.adobe.samples.particles.Particle</class>
</include-classes>
</flex-config>

To compile the library using the configuration file, named ParticleLib-config.xml, type:

acompc -load-config ParticleLib-config.xml -output ParticleLib.swc

To run the same command entirely on the command line, type:

acompc -source-path source -include-classes com.adobe.samples.particles.Particle  
com.adobe.samples.particles.ParticleManager -output ParticleLib.swc

(Type the entire command on one line, or use the line continuation character for your command shell.)

compc examples

These examples assume that you are using a configuration file named myLib-config.xml.

Compile an AIR component or library:

acompc -load-config myLib-config.xml -output lib/myLib.swc

Compile a runtime-shared library:

acompc -load-config myLib-config.xml -directory -output lib

(Note, the folder lib must exist and be empty before running the command.)

- + \ No newline at end of file diff --git a/docs/building/actionscript-compilers/configuration-files.html b/docs/building/actionscript-compilers/configuration-files.html index fb20674f4..4a2fcb7a0 100644 --- a/docs/building/actionscript-compilers/configuration-files.html +++ b/docs/building/actionscript-compilers/configuration-files.html @@ -16,14 +16,14 @@ - +

Configuration files

You typically specify compilation options both on the command line and with one or more configuration files. The global SDK configuration file contains default values that are used whenever the compilers are run. You can edit this file to suit your own development environment. There are two global configuration files located in the frameworks directory of your SDK installation. The air-config.xml file is used when you run the amxmlc compiler. This file configures the compiler for AIR by including the AIR libraries. The flex-config.xml file is used when you run mxmlc.

The default configuration values are suitable for discovering how Flex and AIR work, but when you embark on a full-scale project examine the available options more closely. You can supply project-specific values for the compiler options in a local configuration file that takes precedence over the global values for a given project.

note

No compilation options are used specifically for AIR applications, but you must reference the AIR libraries when compiling an AIR application. Typically, these libraries are referenced in a project-level configuration file, in a file for a build tool such as Ant, or directly on the command line.

You can generate a configuration file with the current settings by using the dump-config option, as the following example shows:

mxmlc -dump-config myapp-config.xml

Locating configuration files

You can specify the location of a configuration file by using the load-config option. The target configuration file can be the default flex-config.xml/air-config.xml file, or it can be a custom configuration file. The following example loads a custom configuration file:

compc -load-config=myconfig.xml

If you specify the filename with the += operator, your loaded configuration file is used in addition to and not instead of the flex-config.xml/air-config.xml file:

compc -load-config+=myconfig.xml

With the mxmlc compiler, you can also use a local configuration file. A local configuration file does not require you to point to it on the command line. Rather, AIR examines the same directory as the target file for a configuration file with the same name (one that matches the filename-config.xml filename). If it finds a file, it uses it in conjunction with the flex-config.xml/air-config.xml file. You can also specify a configuration file by using the load-config option with the += operator.

For example, if your application’s top-level file is called MyApp.mxml, the compiler first checks for a MyApp-config.xml file for configuration settings. With this feature, you can easily compile multiple applications using different configuration options without changing your command-line options or your flex-config.xml/air-config.xml file.

Options in the local configuration file take precedence over options set in the flex-config.xml/air-config.xml file. Options set in a configuration file that the load-config option specify take precedence over the local configuration file. Commandline settings take precedence over all configuration file settings.

Configuration file syntax

You store values in a configuration file in XML blocks, which follow a specific syntax. In general, the tags you use match the command-line options.

About the root tag

The root tag of the default configuration file is <flex-config>. If you write a custom configuration file, it must also have this root tag. Compiler configuration files must also have an XML declaration tag, as the following example shows:

<?xml version="1.0"?>
<flex-config>

You must close the <flex-config> tag as you would any other XML tag. All compiler configuration files must be closed with the following tag:

</flex-config>

In general, the second tag in a configuration file is the <compiler> tag. This tag wraps most compiler options. However, not all compiler options are set in the <compiler> block of the configuration file. Tags that you must wrap in the compiler block are prefixed by compiler in the help output (for example, compiler.services). If the option uses no dot-notation in the help output (for example, include-file), it is a tag at the root level of the configuration file, and the entry appears as follows:

<compiler>
...
</compiler>
<include-file>
<name>logo.gif</name>
<path>c:/images/logo/logo1.gif</path>
</include-file>

In some cases, options have multiple parent tags, as with the fonts options, such as compiler.fonts.managers and compiler.fonts.languages.language. Other options that require parent tags when added to a configuration file include the frames.frame option and the metadata options. The following sections describe methods for determining the syntax.

Getting the configuration file tags

Use the help list option of the command-line compilers to get the configuration file syntax of the compiler options; for example:

mxmlc -help list advanced

The following is the entry for the source-path option:

-compiler.source-path [path-element][...]

This indicates that in the configuration file, you can have one or more <path-element> child tags of the <sourcepath> tag, and that <source-path> is a child of the <compiler> tag. The following example shows how this should appear in the configuration file:

<compiler>
<source-path>
<path-element>.</path-element>
<path-element>c:/myclasses/</path-element>
</source-path>
</compiler>

Understanding leaf nodes

The help output uses dot-notation to separate child tags from parent tags, with the right-most entry being known as the leaf node. For example, -tag1.tag2 indicates that <tag2> should be a child tag of <tag1>.

Angle brackets (< >) or square brackets ([ ]) that surround an option indicate that the option is a leaf node.

Square brackets indicate that there can be a list of one or more parameters for that option.

If the leaf node of a tag in the angle bracket is unique, you do not have to specify the parent tags in the configuration file. For example, the help usage shows the following:

compiler.fonts.managers [manager-class][...]

You can specify the value of this option in the configuration file, as the following example shows:

<compiler>
<fonts>
<managers>
<manager-class>flash.fonts.JREFontManager</manager-class>
</managers>
</fonts>
</compiler>

However, the <manager-class> leaf node is unique, so you can set the value without specifying the <fonts> and <managers> parent tags, as the following example shows:

<compiler>
<manager-class>flash.fonts.JREFontManager</manager-class>
</compiler>

If the help output shows multiple options listed in angle brackets, you set the values of these options at the same level inside the configuration file and do not make them child tags of each other. For example, the usage for default-size (default-size <width> <height>) indicates that the default size of the application is set in a configuration file, as the following example shows:

<default-size>
<height>height_value</height>
<width>width_value</width>
</default-size>

Using tokens

You can pass custom token values to the compiler using the following syntax:

+token_name=value

In the configuration file, you reference that value using the following syntax:

${token_name}

You can use the @Context token in your configuration files to represent the context root of the application. You can also use the ${flexlib} token to represent the frameworks directory. This is useful if you set up your own configuration and are not using the default library-path settings.

The default value of the ${flexlib} token is application_home\frameworks.

Appending values

In a configuration file, you can specify the append attribute of any tag that takes a list of arguments. Set this attribute to true to indicate that the values should be appended to the option rather than replace it. The default value is false.

Setting the append attribute to true lets you compound the values of options with multiple configuration files. The following example appends two entries to the library-path option:

<library-path append="true">
<path-element>/mylibs</path-element>
<path-element>/myotherlibs</path-element>
</library-path>
- + \ No newline at end of file diff --git a/docs/building/air-debug-launcher.html b/docs/building/air-debug-launcher.html index bcf84418c..bfce3700f 100644 --- a/docs/building/air-debug-launcher.html +++ b/docs/building/air-debug-launcher.html @@ -16,13 +16,13 @@ - +

AIR Debug Launcher (adl)

Use the AIR Debug Launcher (ADL) to run both SWF-based and HTML-based applications during development. Using ADL, you can run an application without first packaging and installing it. By default, ADL uses a runtime included with the SDK, which means you do not have to install the runtime separately to use ADL.

ADL prints trace statements and run-time errors to the standard output, but does not support breakpoints or other debugging features. You can use the Flash Debugger (or an integrated development environment such as Flash Builder) for complex debugging issues.

note

If your trace() statements do not display on the console, ensure that you have not specified ErrorReportingEnable or TraceOutputFileEnable in the mm.cfg file.

AIR supports debugging directly, so you do not need a debug version of the runtime. To conduct command-line debugging, you use the Flash Debugger and the AIR Debug Launcher (ADL).

The Flash Debugger is distributed in the AIR SDK directory. The native versions, such as fdb.exe on Windows, are in the bin subdirectory. The Java version is in the lib subdirectory. The AIR Debug Launcher, adl.exe, is in the bin directory of your AIR SDK installation. (There is no separate Java version).

note

You cannot start an AIR application directly with fdb, because fdb attempts to launch it with Flash Player. Instead, let the AIR application connect to a running fdb session.

ADL usage

To run an application with ADL, use the following pattern:

adl application.xml

Where application.xml is the application descriptor file for the application.

The full syntax for the ADL is:

adl     [-runtime runtime-directory]
[-pubid publisher-id]
[-nodebug]
[-atlogin]
[-profile profileName]
[-screensize value]
[-extdir extension-directory]
application.xml
[root-directory]
[-- arguments]

(Items in brackets, [], are optional.)

-runtime runtime-directory

Specifies the directory containing the runtime to use. If not specified, the runtime directory in the same SDK as the ADL program is used. If you move ADL out of its SDK folder, specify the runtime directory. On Windows and Linux, specify the directory containing the Adobe AIR directory. On Mac OS X, specify the directory containing Adobe AIR.framework.

-pubid publisher-id

Assigns the specified value as the publisher ID of the AIR application for this run. Specifying a temporary publisher ID allows you to test features of an AIR application, such as communicating over a local connection, that use the publisher ID to help uniquely identify an application. As of AIR 1.5.3, you can also specify the publisher ID in the application descriptor file (and should not use this parameter).

note

As of AIR 1.5.3, a Publisher ID is no longer automatically computed and assigned to an AIR application. You can specify a publisher ID when creating an update to an existing AIR application, but new applications do not need and should not specify a publisher ID.

-nodebug

Turns off debugging support. If used, the application process cannot connect to the Flash debugger and dialogs for unhandled exceptions are suppressed. (However, trace statements still print to the console window.) Turning off debugging allows your application to run a little faster and also emulates the execution mode of an installed application more closely.

-atlogin

Simulates launching the application at login. This flag allows you to test application logic that executes only when an application is set to launch when the user logs in. When -atlogin is used, the reason property of the InvokeEvent object dispatched to the application will be login instead of standard (unless the application is already running).

-profile profileName

ADL debugs the application using the specified profile. The profileName can be one of the following values:

  • desktop
  • extendedDesktop
  • mobileDevice

If the application descriptor includes a supportedProfiles element, then the profile you specify with -profile must be a member of the supported list. If the -profile flag is not used, the first profile in the application descriptor is used as the active profile. If the application descriptor does not include the supportedProfiles element and you do not use the -profile flag, then the desktop profile is used.

For more information, see supportedProfiles and Device profiles.

-screensize value

The simulated screen size to use when running apps in the mobileDevice profile on the desktop. Specify the screen size as a predefined screen type, or as the pixel dimensions of the normal width and height for portrait layout, plus the fullscreen width and height. To specify the value by type, use one of the following predefined screen types:

TODO: Need to confirm the following values are complete!

Screen typeNormal width x heightFullscreen width x height
480720 x 480720 x 480
7201280 x 7201280 x 720
10801920 x 10801920 x 1080
Droid480 x 816480 x 854
FWQVGA240 x 432240 x 432
FWVGA480 x 854480 x 854
HVGA320 x 480320 x 480
iPad768 x 1004768 x 1024
iPadRetina1536 x 20081536 x 2048
iPhone320 x 460320 x 480
iPhoneRetina640 x 920640 x 960
iPhone5Retina640 x 1096640 x 1136
iPhone6750 x 1294750 x 1334
iPhone6Plus1242 x 21481242 x 2208
iPod320 x 460320 x 480
iPodRetina640 x 920640 x 960
iPod5Retina640 x 1096640 x 1136
NexusOne480 x 762480 x 800
QVGA240 x 320240 x 320
SamsungGalaxyS480 x 762480 x 800
SamsungGalaxyTab600 x 986600 x 1024
WQVGA240 x 400240 x 400
WVGA480 x 800480 x 800

To specify the screen pixel dimensions directly, use the following format:

widthXheight:fullscreenWidthXfullscreenHeight

Always specify the pixel dimensions for portrait layout, meaning specify the width as a value smaller than the value for height. For example, the NexusOne screen can be specified with:

-screensize 480x762:480x800

-extdir extension-directory

The directory in which the runtime should search for native extensions. The directory contains a subdirectory for each native extension that the application uses. Each of these subdirectories contain the unpackaged ANE file of an extension. For example:

C:\extensionDirs\
extension1.ane\
META-INF\
ANE\
Android-ARM\
library.swf
extension1.jar
extension.xml
signatures.xml
catalog.xml
library.swf
mimetype
extension2.ane\
META-INF\
ANE\
Android-ARM\
library.swf
extension2.jar
extension.xml
signatures.xml
catalog.xml
library.swf
mimetype
info

When using the -extdir parameter, consider the following:

  • The ADL command requires that each of the specified directories have the .ane filename extension. However, the part of the filename before the .ane suffix can be any valid filename. It does not have to match the value of the extensionID element of the application descriptor file.
  • You can specify the -extdir parameter more than once.
  • The use of the -extdir parameter is different for the ADT tool and the ADL tool. In ADT, the parameter specifies a directory that contains ANE files.
  • You can also use the environment variable AIR_EXTENSION_PATH to specify the extension directories. See ADT environment variables.

application.xml

The application descriptor file. See AIR application descriptor files. The application descriptor is the only parameter required by ADL and, in most cases, the only parameter needed.

root-directory

Specifies the root directory of the application to run. If not specified, the directory containing the application descriptor file is used.

-- arguments

Any character strings appearing after "--" are passed to the application as command line arguments.

note

When you launch an AIR application that is already running, a new instance of that application is not started. Instead, an invoke event is dispatched to the running instance.

ADL Examples

Run an application in the current directory:

adl myApp-app.xml

Run an application in a subdirectory of the current directory:

adl source/myApp-app.xml release

Run an application and pass in two command-line arguments, "tick" and "tock":

adl myApp-app.xml -- tick tock

Run an application using a specific runtime:

adl -runtime /AIRSDK/runtime myApp-app.xml

Run an application without debugging support:

adl -nodebug myApp-app.xml

Run an application in the mobile device profile and simulate the Nexus One screen size:

adl -profile mobileDevice -screensize NexusOne myMobileApp-app.xml

Run an application using Apache Ant to run the application (the paths shown in the example are for Windows):

<property name="SDK_HOME" value="C:/AIRSDK"/>
<property name="ADL" value="${SDK_HOME}/bin/adl.exe"/>
<property name="APP_ROOT" value="c:/dev/MyApp/bin-debug"/>
<property name="APP_DESCRIPTOR" value="${APP_ROOT}/myApp-app.xml"/>

<target name="test">
<exec executable="${ADL}">
<arg value="${APP_DESCRIPTOR}"/>
<arg value="${APP_ROOT}"/>
</exec>
</target>

ADL exit and error codes

The following table describes the exit codes printed by ADL:

Exit codeDescription
0Successful launch. ADL exits after the AIR application exits.
1Successful invocation of an already running AIR application. ADL exits immediately.
2Usage error. The arguments supplied to ADL are incorrect.
3The runtime cannot be found.
4The runtime cannot be started. Often, this occurs because the version specified in the application does not match the version of the runtime.
5An error of unknown cause occurred.
6The application descriptor file cannot be found.
7The contents of the application descriptor are not valid. This error usually indicates that the XML is not well formed.
8The main application content file (specified in the <content> element of the application descriptor file) cannot be found.
9The main application content file is not a valid SWF or HTML file.
10The application doesn’t support the profile specified with the -profile option.
11The -screensize argument is not supported in the current profile.
- + \ No newline at end of file diff --git a/docs/building/air-developer-tool.html b/docs/building/air-developer-tool.html index bfc6197ad..8b206b62f 100644 --- a/docs/building/air-developer-tool.html +++ b/docs/building/air-developer-tool.html @@ -16,13 +16,13 @@ - +

AIR Developer Tool (adt)

The AIR Developer Tool (ADT) is a multi-purpose, command-line tool for developing AIR applications. You can use ADT to perform the following tasks:

  • Package an AIR application as an .air installation file
  • Package an AIR application as a native installer—for example, as a .exe installer file on Windows, .ipa on iOS, or .apk on Android
  • Package a native extension as an AIR Native Extension (ANE) file
  • Sign an AIR application with a digital certificate
  • Change (migrate) the digital signature used for application updates
  • Determine the devices connected to a computer
  • Create a self-signed digital code signing certificate
  • Remotely install, launch, and uninstall an application on a mobile device
  • Remotely install and uninstall the AIR runtime on a mobile device

ADT is a Java program included in the AIR SDK. You must have Java 1.5 or higher to use it (requirements may be higher for particular functionality, eg Android requires Java 11 as at January 2022). The SDK includes a script file for invoking ADT. To use this script, the location of the Java program must be included in the path environment variable. If the AIR SDK bin directory is also listed in your path environment variable, you can type adt on the command line, with the appropriate arguments, to invoke ADT. (Please see the get started guide for more on setting up your environment.)

At least 2GB of computer memory is required to use ADT. If you have less memory than this, ADT can run out of memory, especially when packaging applications for iOS.

Assuming both Java and the AIR SDK bin directory are both included in the path variable, you can run ADT using the following basic syntax:

adt -command options 
note

Most integrated development environments can package and sign AIR applications for you. You typically do not need to use ADT for these common tasks when you already use such a development environment. However, you might still need to use ADT as a command-line tool for functions that are not supported by your integrated development environment. In addition, you can use ADT as a command-line tool as part of an automated build process.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands.html b/docs/building/air-developer-tool/commands.html index 74f334dd3..bf0044d62 100644 --- a/docs/building/air-developer-tool/commands.html +++ b/docs/building/air-developer-tool/commands.html @@ -16,13 +16,13 @@ - +

ADT commands

The first argument passed to ADT specifies one of the following commands.

  • -package — packages an AIR application or AIR Native Extension (ANE).

  • -prepare — packages an AIR application as an intermediate file (AIRI), but does not sign it. AIRI files cannot be installed.

  • -sign — signs an AIRI package produced with the -prepare command. The -prepare and -sign commands allow packaging and signing to be performed at different times. You can also use the -sign command to sign or resign an ANE package.

  • -migrate — applies a migration signature to a signed AIR package, which allows you to use a new or renewed code signing certificate.

  • -certificate — creates a self-signed digital code signing certificate.

  • -checkstore — verifies that a digital certificate in a keystore can be accessed.

  • -installApp — installs an AIR application on a device or device emulator.

  • -launchApp — launches an AIR application on a device or device emulator.

  • -appVersion — reports the version of an AIR application currently installed on a device or device emulator.

  • -uninstallApp — uninstalls an AIR application from a device or device emulator.

  • -installRuntime — installs the AIR runtime on a device or device emulator.

  • -runtimeVersion — reports the version of the AIR runtime currently installed on a device or device emulator.

  • -uninstallRuntime — uninstalls the AIR runtime currently installed from a device or device emulator.

  • -version — reports the ADT version number.

  • -devices — reports device information for connected mobile devices or emulators.

  • -help — displays the list of commands and options.

Many ADT commands share related sets of option flags and parameters. These sets of option are described in detail separately:

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/appVersion.html b/docs/building/air-developer-tool/commands/appVersion.html index f42e1e125..2862ccb60 100644 --- a/docs/building/air-developer-tool/commands/appVersion.html +++ b/docs/building/air-developer-tool/commands/appVersion.html @@ -16,13 +16,13 @@ - +

ADT -appVersion

The -appVersion command reports the installed version of an app on a device or emulator. The command uses the following syntax:

adt -appVersion 
-platform platformName
-platformsdk path_to_sdk
-device deviceID
-appid applicationID

-platform

The name of the platform of the device. Specify ios or android.

-platformsdk

The path to the platform SDK for the target device:

  • Android - The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. Also, the platform SDK path does not need to be supplied on the command line if the AIR_ANDROID_SDK_HOME environment variable is already set. (If both are set, then the path provided on the command line is used.)

  • iOS - The AIR SDK ships with a captive iOS SDK. The -platformsdk option lets you package applications with an external SDK so that you are not restricted to using the captive iOS SDK. For example, if you have built an extension with the latest iOS SDK, you can specify that SDK when packaging your application. Additionally, when using ADT with the iOS Simulator, you must always include the -platformsdk option, specifying the path to the iOS Simulator SDK.

-device

Specify ios_simulator or the serial number of the device. The device only needs to be specified when more than one Android device or emulator is attached to your computer and running. If the specified device is not connected, ADT returns exit code 14: Device error. If more than one device or emulator is connected and a device is not specified, ADT returns exit code 2: Usage error.

On Android, use the Android ADB tool to list the serial numbers of attached devices and running emulators:

adb devices

-appid

The AIR application ID of the installed application. If no application with the specified ID is installed on the device, then ADT returns exit code 14: Device error.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/certificate.html b/docs/building/air-developer-tool/commands/certificate.html index c8f119482..347db88a4 100644 --- a/docs/building/air-developer-tool/commands/certificate.html +++ b/docs/building/air-developer-tool/commands/certificate.html @@ -16,13 +16,13 @@ - +

ADT -certificate

The -certificate command lets you create a self-signed digital code signing certificate. The command uses the following syntax:

adt -certificate 
-cn name
-ou orgUnit
-o orgName
-c country
-validityPeriod years
key-type
output
password

-cn

The string assigned as the common name of the new certificate.

-ou

A string assigned as the organizational unit issuing the certificate. (Optional.)

-o

A string assigned as the organization issuing the certificate. (Optional.)

-c

A two-letter ISO-3166 country code. A certificate is not generated if an invalid code is supplied. (Optional.)

-validityPeriod

The number of years that the certificate will be valid. If not specified a validity of five years is assigned. (Optional.)

key_type

The type of key to use for the certificate is 2048-RSA.

output

The path and file name for the certificate file to be generated.

password

The password for accessing the new certificate. The password is required when signing AIR files with this certificate.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/checkstore.html b/docs/building/air-developer-tool/commands/checkstore.html index e0c771df0..c6daf614c 100644 --- a/docs/building/air-developer-tool/commands/checkstore.html +++ b/docs/building/air-developer-tool/commands/checkstore.html @@ -16,13 +16,13 @@ - +
- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/devices.html b/docs/building/air-developer-tool/commands/devices.html index 006cfda0a..efb553bf2 100644 --- a/docs/building/air-developer-tool/commands/devices.html +++ b/docs/building/air-developer-tool/commands/devices.html @@ -16,13 +16,13 @@ - +
- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/help.html b/docs/building/air-developer-tool/commands/help.html index 1531f76a9..d78a7aaa9 100644 --- a/docs/building/air-developer-tool/commands/help.html +++ b/docs/building/air-developer-tool/commands/help.html @@ -16,13 +16,13 @@ - +

ADT -help

The ADT -help command displays a terse reminder of the command-line options:

adt -help

The help output uses the following symbolic conventions:

  • <> — items between angle brackets indicate information that you must provide.

  • () — items within parentheses indicate options that are treated as a group in the help command output.

  • ALL_CAPS — items spelled out in capital letters indicate a set of options that is described separately.

  • |OR. For example, ( A | B ), means item A or item B.

  • ? — 0 or 1. A question mark following an item indicates that an item is optional and that only one instance can occur, if used.

  • * — 0 or more. An asterisk following an item indicates that an item is optional and that any number of instances can occur.

  • + — 1 or more. A plus sign following an item indicates that an item is required and that multiple instances can occur.

  • no symbol — If an item has no suffix symbol, then that item is required and only one instance can occur.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/installApp.html b/docs/building/air-developer-tool/commands/installApp.html index c744ffbbb..9b14f6e99 100644 --- a/docs/building/air-developer-tool/commands/installApp.html +++ b/docs/building/air-developer-tool/commands/installApp.html @@ -16,13 +16,13 @@ - +

ADT -installApp

The -installApp command installs an app on a device or emulator.

You must uninstall an existing app before reinstalling with this command.

The command uses the following syntax:

adt -installApp 
-platform platformName
-platformsdk path-to-sdk
-device deviceID
‑package fileName

-platform

The name of the platform of the device. Specify ios or android.

-platformsdk

The path to the platform SDK for the target device (optional):

  • Android - The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. Also, the platform SDK path does not need to be supplied on the command line if the AIR_ANDROID_SDK_HOME environment variable is already set. (If both are set, then the path provided on the command line is used.)

  • iOS - The AIR SDK ships with a captive iOS SDK. The -platformsdk option lets you package applications with an external SDK so that you are not restricted to using the captive iOS SDK. For example, if you have built an extension with the latest iOS SDK, you can specify that SDK when packaging your application. Additionally, when using ADT with the iOS Simulator, you must always include the -platformsdk option, specifying the path to the iOS Simulator SDK.

-device

Specify ios_simulator, the serial number (Android), or handle (iOS) of the connected device. On iOS, this parameter is required; on Android, this parameter only needs to be specified when more than one Android device or emulator is attached to your computer and running. If the specified device is not connected, ADT returns exit code 14: Device error (Android) or Invalid device specified (iOS). If more than one device or emulator is connected and a device is not specified, ADT returns exit code 2: Usage error.

note

Installing an IPA file directly to an iOS device is available in AIR 3.4 and higher and requires iTunes 10.5.0 or higher.

Use the adt ‑devices command (available in AIR 3.4 and higher) to determine the handle or serial number of connected devices. Note that on iOS, you use the handle, not the Device UUID. For more information, see ADT devices command.

Additionally, on Android, use the Android ADB tool to list the serial numbers of attached devices and running emulators:

adb devices

-package

The file name of the package to install. On iOS, this must be an IPA file. On Android, this must be an APK package. If the specified package is already installed, ADT returns error code 14:Device error.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/installRuntime.html b/docs/building/air-developer-tool/commands/installRuntime.html index 14ea8db84..48d850e93 100644 --- a/docs/building/air-developer-tool/commands/installRuntime.html +++ b/docs/building/air-developer-tool/commands/installRuntime.html @@ -16,13 +16,13 @@ - +

ADT -installRuntime

Deprecated

The shared runtime on Android has been removed so this command has no real usage now

The -installRuntime command installs the AIR runtime on a device.

You must uninstall an existing version of the AIR runtime before reinstalling with this command.

The command uses the following syntax:

adt -installRuntime -platform platformName -platformsdk path_to_sdk -device deviceID -package fileName

-platform

The name of the platform of the device. Currently this command is only supported on the Android platform. Use the name, android.

-platformsdk

The path to the platform SDK for the target device. Currently, the only supported platform SDK is Android. The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. Also, the platform SDK path does not need to be supplied on the command line if the AIR_ANDROID_SDK_HOME environment variable is already set. (If both are set, then the path provided on the command line is used.)

-device

The serial number of the device. The device only needs to be specified when more than one device or emulator is attached to your computer and running. If the specified device is not connected, ADT returns exit code 14: Device error. If more than one device or emulator is connected and a device is not specified, ADT returns exit code 2: Usage error.

On Android, use the Android ADB tool to list the serial numbers of attached devices and running emulators:

adb devices

-package

The file name of the runtime to install. On Android, this must be an APK package. If no package is specified, the appropriate runtime for the device or emulator is chosen from those available in the AIR SDK. If the runtime is already installed, ADT returns error code 14:Device error.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/launchApp.html b/docs/building/air-developer-tool/commands/launchApp.html index f38e6244c..48d37cc05 100644 --- a/docs/building/air-developer-tool/commands/launchApp.html +++ b/docs/building/air-developer-tool/commands/launchApp.html @@ -16,13 +16,13 @@ - +

ADT -launchApp

The -launchApp command runs an installed app on a device or emulator. The command uses the following syntax:

adt -launchApp -platform platformName -platformsdk path_to_sdk -device deviceID -appid applicationID
-platform The name of the platform of the device. Specify ios or android.

-platformsdk

The path to the platform SDK for the target device:

  • Android - The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. Also, the platform SDK path does not need to be supplied on the command line if the AIR_ANDROID_SDK_HOME environment variable is already set. (If both are set, then the path provided on the command line is used.)

  • iOS - The AIR SDK ships with a captive iOS SDK. The -platformsdk option lets you package applications with an external SDK so that you are not restricted to using the captive iOS SDK. For example, if you have built an extension with the latest iOS SDK, you can specify that SDK when packaging your application. Additionally, when using ADT with the iOS Simulator, you must always include the -platformsdk option, specifying the path to the iOS Simulator SDK.

-device

Specify ios_simulator or the serial number of the device. The device only needs to be specified when more than one Android device or emulator is attached to your computer and running. If the specified device is not connected, ADT returns exit code 14: Device error. If more than one device or emulator is connected and a device is not specified, ADT returns exit code 2: Usage error.

On Android, use the Android ADB tool to list the serial numbers of attached devices and running emulators:

adb devices

-appid

The AIR application ID of the installed application. If no application with the specified ID is installed on the device, then ADT returns exit code 14: Device error.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/migrate.html b/docs/building/air-developer-tool/commands/migrate.html index e0b060e44..50b139d54 100644 --- a/docs/building/air-developer-tool/commands/migrate.html +++ b/docs/building/air-developer-tool/commands/migrate.html @@ -16,13 +16,13 @@ - +

ADT -migrate

The -migrate command applies a migration signature to an AIR file. A migration signature must be used when you renew or change your digital certificate and need to update applications signed with the old certificate.

For more information about packaging AIR applications with a migration signature, see Signing an updated version of an AIR application.

note

The migration certificate must be applied within 365 days from the expiration of the certificate. Once this grace period has elapsed, your application updates can no longer be signed with a migration signature. Users can first update to a version of your application that was signed with a migration signature and then install the latest update, or they can uninstall the original application and install the new AIR package.

To use a migration signature, first sign your AIR application using the new or renewed certificate (using the -package or -sign commands), and then apply the migration signature using the old certificate and the -migrate command.

The -migrate command uses the following syntax:

adt -migrate AIR_SIGNING_OPTIONS input output

AIR_SIGNING_OPTIONS

The AIR signing options identifying the original certificate that was used to sign existing versions of the AIR application. The signing options are fully described in ADT code signing options.

input

The AIR file already signed with the NEW application certificate.

output

The name of the final package bearing signatures from both the new and the old certificates.

The file names used for the input and output AIR files must be different.

note

The ADT migrate command cannot be used with AIR desktop applications that include native extensions, because those applications are packaged as native installers, not as .air files. To change certificates for an AIR desktop application that includes a native extension, package the application using the ADT package command with the -migrate flag.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/package.html b/docs/building/air-developer-tool/commands/package.html index ae6a95429..245ecdff1 100644 --- a/docs/building/air-developer-tool/commands/package.html +++ b/docs/building/air-developer-tool/commands/package.html @@ -16,13 +16,13 @@ - +

ADT -package

The -package command should be run from the main application directory. The command uses the following syntaxes:

Create an AIR package from the component application files:

adt -package
AIR_SIGNING_OPTIONS
-target packageType
-sampler
‑hideAneLibSymbols
NATIVE_SIGNING_OPTIONS
output
app_descriptor
FILE_OPTIONS

Create a native package from the component application files:

adt -package
AIR_SIGNING_OPTIONS
-target packageType
DEBUGGER_CONNECTION_OPTIONS
-airDownloadURL URL
NATIVE_SIGNING_OPTIONS
output
app_descriptor
-platformsdk path
FILE_OPTIONS

Create a native package that includes a native extension from the component application files:

adt -package
AIR_SIGNING_OPTIONS
-migrate MIGRATION_SIGNING_OPTIONS
-target packageType
DEBUGGER_CONNECTION_OPTIONS
-airDownloadURL URL
NATIVE_SIGNING_OPTIONS
output
app_descriptor
-platformsdk path
FILE_OPTIONS

Create a native package from an AIR or AIRI file:

adt -package
-target packageType
NATIVE_SIGNING_OPTIONS
output
input_package

Create a native extension package from the component native extension files:

adt -package
AIR_SIGNING_OPTIONS
-target ane
output
ANE_OPTIONS

Note: You do not have to sign an ANE file, so the AIR_SIGNING_OPTIONS parameters are optional in this example.

AIR_SIGNING_OPTIONS

The AIR signing options identify the certificate used to sign an AIR installation file. The signing options are fully described in ADT code signing options.

-migrate

This flag specifies that the application is signed with a migration certificate in addition to the certificate specified in the AIR_SIGNING_OPTIONS parameters. This flag is only valid if you are packaging a desktop application as a native installer and the application uses a native extension. In other cases an error occurs. The signing options for the migration certificate are specified as the MIGRATION_SIGNING_OPTIONS parameters. Those signing options are fully described in ADT code signing options. Using the -migrate flag allows you to create an update for a desktop native installer application that uses a native extension and change the code signing certificate for the application, such as when the original certificate expires. For more information, see Signing an updated version of an AIR application.

The -migrate flag of the -package command is available in AIR 3.6 and later.

-target

The type of package to create. The supported package types are:

- `air` — an AIR package. “air” is the default value and the `-target` flag does not need to be specified when creating AIR or AIRI files.
- `airn` — a native application package for devices in the extended television profile.
- `ane` —an AIR native extension package
  • Android package targets:

    • apk — an Android package. A package produced with this target can only be installed on an Android device, not an emulator.
    • apk‑captive‑runtime — an Android package that includes both the application and a captive version of the AIR runtime. A package produced with this target can only be installed on an Android device, not an emulator.
    • apk-debug — an Android package with extra debugging information. (The SWF files in the application must also be compiled with debugging support.)
    • apk-emulator — an Android package for use on an emulator without debugging support. (Use the apk-debug target to permit debugging on both emulators and devices.)
    • apk-profile — an Android package that supports application performance and memory profiling.
  • iOS package targets:

    • ipa-ad-hoc — an iOS package for ad hoc distribution.
    • ipa-app-store — an iOS package for Apple App store distribution.
    • ipa-debug — an iOS package with extra debugging information. (The SWF files in the application must also be compiled with debugging support.)
    • ipa-test — an iOS package compiled without optimization or debugging information.
    • ipa-debug-interpreter — functionally equivalent to a debug package, but compiles more quickly. However, the ActionScript bytecode is interpreted and not translated to machine code. As a result, code execution is slower in an interpreter package.
    • ipa-debug-interpreter-simulator — functionally equivalent to ipa-debug-interpreter, but packaged for the iOS simulator. Macintosh-only. If you use this option, you must also include the -platformsdk option, specifying the path to the iOS Simulator SDK.
    • ipa-test-interpreter — functionally equivalent to a test package, but compiles more quickly. However, the ActionScript bytecode is interpreted and not translated to machine code. As a result, code execution is slower in an interpreter package.
    • ipa-test-interpreter-simulator — functionally equivalent to ipa-test-interpreter, but packaged for the iOS simulator. Macintosh-only. If you use this option, you must also include the -platformsdk option, specifying the path to the iOS Simulator SDK.
  • native — a native desktop installer. The type of file produced is the native installation format of the operating system on which the command is run:

    • EXE — Windows
    • DMG — Mac
    • DEB — Ubuntu Linux (AIR 2.6 or earlier)
    • RPM — Fedora or OpenSuse Linux (AIR 2.6 or earlier)

For more information see Packaging a desktop native installer.

-sampler

(iOS only, AIR 3.4 and higher)

Enables the telemetry-based ActionScript sampler in iOS applications. Using this flag lets you profile the application with Adobe Scout. Although Scout can profile any Flash platform content, enabling detailed telemetry gives you deep insight into ActionScript function timing, DisplayList, Stage3D rendering and more. Note that using this flag will have a slight performance impact, so do not use it for production applications.

-hideAneLibSymbols

(iOS only, AIR 3.4 and higher)

Application developers can use multiple native extensions from multiple sources and if the ANEs share a common symbol name, ADT generates a "duplicate symbol in object file" error. In some cases, this error can even manifest itself as a crash at runtime. You can use the hideAneLibSymbols option to specify whether or not to make the ANE library’s symbols visible only to that library’s sources (yes) or visible globally (no):

  • yes — Hides ANE symbols, which resolves any unintended symbol conflict issues.
  • no — (Default) Does not hide ANE symbols. This is the pre-AIR 3.4 behavior.
danger

We do not suggest usage of the hideAneLibSymbols under any circumstances. It makes usage of shared libraries across extensions impossible. Most modern native extensions that rely on shared libraries will fail if this is enabled.

-embedBitcode

(iOS/tvOS only, AIR 25 and higher)

Application developers can use the embedBitcode option to specify whether or not to embed bitcode in their iOS/tvOS application by specifying yes or no. The default value of this switch if not specified is no. For tvOS default value is yes in ipa-app-store target.

DEBUGGER_CONNECTION_OPTIONS

The debugger connection options specify whether a debug package should attempt to connect to a remote debugger running on another computer or listen for a connection from a remote debugger. This set of options is only supported for mobile debug packages (targets apk-debug and ipa-debug). These options are described in Debugger connection options.

-airDownloadURL

Specifies an alternate URL for downloading and installing the AIR runtime on Android devices. If not specified, an AIR application will redirect the user to the AIR runtime on the Android Market if the runtime is not already installed.

If your application is distributed through an alternate marketplace (other than the Android Market administered by Google), then you might need to specify the URL for downloading the AIR runtime from that market. Some alternate markets do not allow applications to require a download from outside the market. This option is only supported for Android packages.

Deprecated

The shared runtime is no longer supported on Android.

NATIVE_SIGNING_OPTIONS

The native signing options identify the certificate used to sign a native package file. These signing options are used to apply a signature used by the native operating system, not the AIR runtime. The options are otherwise identical to the AIR_SIGNING_OPTIONS and are fully described in ADT code signing options.

Native signatures are supported on Windows and Android. On Windows, both an AIR signing options and the native signing options should be specified. On Android, only the native signing options can be specified.

In many cases, you can use the same code signing certificate to apply both an AIR and a native signature. However, this is not true in all cases. For example, Google’s policy for apps submitted to the Android Market dictates that all apps must be signed with a certificate valid until at least the year 2033. This means that a certificate issued by a well known certificate authority, which are recommended when applying an AIR signature, should not be used to sign an Android app. (No certificate authorities issue a code signing certificate with that long a validity period.)

output

The name of the package file to create. Specifying the file extension is optional. If not specified, an extension appropriate to the -target value and current operating system is added.

app_descriptor

The path to the application descriptor file. The path can be specified relative to the current directory or as an absolute path. (The application descriptor file is renamed as application.xml in the AIR file.)

-platformsdk

The path to the platform SDK for the target device:

  • Android - The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. Also, the platform SDK path does not need to be supplied on the command line if the AIR_ANDROID_SDK_HOME environment variable is already set. (If both are set, then the path provided on the command line is used.) TODO:: Add adt.cfg details

  • iOS - The AIR SDK ships with a captive iOS SDK. The -platformsdk option lets you package applications with an external SDK so that you are not restricted to using the captive iOS SDK. For example, if you have built an extension with the latest iOS SDK, you can specify that SDK when packaging your application. Additionally, when using ADT with the iOS Simulator, you must always include the -platformsdk option, specifying the path to the iOS Simulator SDK.

-arch

Application developers can use this argument to create an APK for a specific platform architecture, it takes following values:

  • armv7 - ADT packages an APK for the Android armv7 platform.
  • armv8 - ADT packages an APK for the Android armv8 platform.
  • x86 - ADT packages an APK for the Android Intel x86 platform.
  • x64 - ADT packages an APK for the Android Intel x64 platform.
  • all - ADT packages a "universal APK" containing all architectures.

armv7 is the default value when no value is specified

FILE_OPTIONS

Identifies the application files to include in the package. The file options are fully described in File and path options. Do not specify file options when creating a native package from an AIR or AIRI file.

input_airi

Specify when creating a native package from an AIRI file. The AIR_SIGNING_OPTIONS are required if the target is air (or no target is specified).

input_air

Specify when creating a native package from an AIR file. Do not specify AIR_SIGNING_OPTIONS.

ANE_OPTIONS

Identifies the options and files for creating a native extension package. The extension package options are fully described in Native extension options.

ADT -package command examples

Package specific application files in the current directory for a SWF-based AIR application:

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf components.swc

Package specific application files in the current directory for an HTML-based AIR application:

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.html AIRAliases.js image.gif

Package all files and subdirectories in the current working directory:

adt –package -storetype pkcs12 -keystore ../cert.p12 myApp.air myApp.xml .
note

The keystore file contains the private key used to sign your application. Never include the signing certificate inside the AIR package! If you use wildcards in the ADT command, place the keystore file in a different location so that it is not included in the package. In this example the keystore file, cert.p12, resides in the parent directory.

Package only the main files and an images subdirectory:

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf images

Package an HTML-based application and all files in the HTML, scripts, and images subdirectories:

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml index.html AIRALiases.js html scripts images

Package the application.xml file and main SWF located in a working directory (release/bin):

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air release/bin/myApp.xml –C release/bin myApp.swf

Package assets from more than one place in your build file system. In this example, the application assets are located in the following folders before packaging:

/devRoot
/myApp
/release
/bin
myApp-app.xml
myApp.swf or myApp.html
/artwork
/myApp
/images
image-1.png
...
image-n.png
/libraries
/release
/libs
lib-1.swf
lib-2.swf
lib-a.js
AIRAliases.js

Running the following ADT command from the /devRoot/myApp directory:

adt –package -storetype pkcs12 -keystore cert.p12 myApp.air release/bin/myApp-app.xml
–C release/bin myApp.swf (or myApp.html)
–C ../artwork/myApp images
–C ../libraries/release libs

Results in the following package structure:

/myAppRoot
/META-INF
/AIR
application.xml
hash
myApp.swf or myApp.html
mimetype
/images
image-1.png
...
image-n.png
/libs
lib-1.swf
lib-2.swf
lib-a.js
AIRAliases.js

Run ADT as a Java program for a simple SWF-based application (without setting the classpath):

java –jar {AIRSDK}/lib/ADT.jar –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf

Run ADT as a Java program for a simple HTML-based application (without setting the classpath):

java –jar {AIRSDK}/lib/ADT.jar –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.html AIRAliases.js

Run ADT as a Java program (with the Java classpath set to include the ADT.jar package):

java -com.adobe.air.ADT –package -storetype pkcs12 -keystore cert.p12 myApp.air myApp.xml myApp.swf

Run ADT as a Java task in Apache Ant (although it’s usually best to use the ADT command directly in Ant scripts). The paths shown in the example are for Windows:

<property name="SDK_HOME" value="C:/AIRSDK"/>
<property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/>

target name="package">
<java jar="${ADT.JAR}" fork="true" failonerror="true">
<arg value="-package"/>
<arg value="-storetype"/>
<arg value="pkcs12"/>
<arg value="-keystore"/>
<arg value="../../ExampleCert.p12"/>
<arg value="myApp.air"/>
<arg value="myApp-app.xml"/>
<arg value="myApp.swf"/>
<arg value="icons/*.png"/>
</java>
</target>

For more on using ant see the Apache Ant documentation

note

On some computer systems, double-byte characters in the file system paths can be misinterpreted. If this occurs, try setting the JRE used to run ADT to use the UTF-8 character set. This is done by default in the script used to launch ADT on Mac and Linux. In the Windows adt.bat file, or when you run ADT directly from Java, specify the ‑Dfile.encoding=UTF-8 option on the Java command line.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/prepare.html b/docs/building/air-developer-tool/commands/prepare.html index 41dc88b8c..3caa4720a 100644 --- a/docs/building/air-developer-tool/commands/prepare.html +++ b/docs/building/air-developer-tool/commands/prepare.html @@ -16,13 +16,13 @@ - +

ADT -prepare

The -prepare command creates an unsigned AIRI package. An AIRI package cannot be used on its own. Use the -sign command to convert an AIRI file to a signed AIR package, or the package command to convert the AIRI file to a native package.

The -prepare command uses the following syntax:

adt -prepare output app_descriptor FILE_OPTIONS 

output

The name of the AIRI file that is created.

app_descriptor

The path to the application descriptor file. The path can be specified relative to the current directory or as an absolute path. (The application descriptor file is renamed as application.xml in the AIR file.)

FILE_OPTIONS

Identifies the application files to include in the package. The file options are fully described in File and path options.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/runtimeVersion.html b/docs/building/air-developer-tool/commands/runtimeVersion.html index 422d20b9a..de492c62a 100644 --- a/docs/building/air-developer-tool/commands/runtimeVersion.html +++ b/docs/building/air-developer-tool/commands/runtimeVersion.html @@ -16,13 +16,13 @@ - +

ADT -runtimeVersion

Deprecated

The shared runtime on Android has been removed so this command has no real usage now

The -runtimeVersion command reports the installed version of the AIR runtime on a device or emulator. The command uses the following syntax:

adt -runtimeVersion -platform platformName -platformsdk path_to_sdk -device deviceID

-platform

The name of the platform of the device. Currently this command is only supported on the Android platform. Use the name, android.

-platformsdk

The path to the platform SDK for the target device. Currently, the only supported platform SDK is Android. The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. Also, the platform SDK path does not need to be supplied on the command line if the AIR_ANDROID_SDK_HOME environment variable is already set. (If both are set, then the path provided on the command line is used.)

-device

The serial number of the device. The device only needs to be specified when more than one device or emulator is attached to your computer and running. If the runtime is not installed or the specified device is not connected, ADT returns exit code 14: Device error. If more than one device or emulator is connected and a device is not specified, ADT returns exit code 2: Usage error.

On Android, use the Android ADB tool to list the serial numbers of attached devices and running emulators:

adb devices
- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/sign.html b/docs/building/air-developer-tool/commands/sign.html index c7ceb62f3..4e901fcd1 100644 --- a/docs/building/air-developer-tool/commands/sign.html +++ b/docs/building/air-developer-tool/commands/sign.html @@ -16,13 +16,13 @@ - +

ADT -sign

The -sign command signs AIRI and ANE files.

The -sign command uses the following syntax:

adt -sign AIR_SIGNING_OPTIONS input output

AIR_SIGNING_OPTIONS

The AIR signing options identify the certificate used to sign a package file. The signing options are fully described in ADT code signing options.

input

The name of the AIRI or ANE file to sign.

output

The name of the signed package to create.

If an ANE file is already signed, the old signature is discarded. (AIR files cannot be resigned — to use a new signature for an application update, use the -migrate command.)

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/uninstallApp.html b/docs/building/air-developer-tool/commands/uninstallApp.html index 54314b788..66efeef43 100644 --- a/docs/building/air-developer-tool/commands/uninstallApp.html +++ b/docs/building/air-developer-tool/commands/uninstallApp.html @@ -16,13 +16,13 @@ - +

ADT -uninstallApp

The -uninstallApp command completely removes an installed app on a remote device or emulator. The command uses the following syntax:

adt -uninstallApp 
-platform platformName
-platformsdk path_to_sdk
-device deviceID
-appid applicationID

-platform

The name of the platform of the device. Specify ios or android.

-platformsdk

The path to the platform SDK for the target device:

  • Android - The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. Also, the platform SDK path does not need to be supplied on the command line if the AIR_ANDROID_SDK_HOME environment variable is already set. (If both are set, then the path provided on the command line is used.)

  • iOS - The AIR SDK ships with a captive iOS SDK. The -platformsdk option lets you package applications with an external SDK so that you are not restricted to using the captive iOS SDK. For example, if you have built an extension with the latest iOS SDK, you can specify that SDK when packaging your application. Additionally, when using ADT with the iOS Simulator, you must always include the -platformsdk option, specifying the path to the iOS Simulator SDK.

-device

Specify ios_simulator or the serial number of the device. The device only needs to be specified when more than one Android device or emulator is attached to your computer and running. If the specified device is not connected, ADT returns exit code 14: Device error. If more than one device or emulator is connected and a device is not specified, ADT returns exit code 2: Usage error.

On Android, use the Android ADB tool to list the serial numbers of attached devices and running emulators:

adb devices

-appid

The AIR application ID of the installed application. If no application with the specified ID is installed on the device, then ADT returns exit code 14: Device error.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/uninstallRuntime.html b/docs/building/air-developer-tool/commands/uninstallRuntime.html index d19305925..4ff45932d 100644 --- a/docs/building/air-developer-tool/commands/uninstallRuntime.html +++ b/docs/building/air-developer-tool/commands/uninstallRuntime.html @@ -16,13 +16,13 @@ - +

ADT -uninstallRuntime

Deprecated

The shared runtime on Android has been removed so this command has no real usage now

The -uninstallRuntime command completely removes the AIR runtime from a device or emulator. The command uses the following syntax:

adt -uninstallRuntime -platform platformName -platformsdk path_to_sdk -device deviceID

-platform

The name of the platform of the device. Currently this command is only supported on the Android platform. Use the name, android.

-platformsdk

The path to the platform SDK for the target device. Currently, the only supported platform SDK is Android. The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. Also, the platform SDK path does not need to be supplied on the command line if the AIR_ANDROID_SDK_HOME environment variable is already set. (If both are set, then the path provided on the command line is used.)

-device

The serial number of the device. The device only needs to be specified when more than one device or emulator is attached to your computer and running. If the specified device is not connected, ADT returns exit code 14: Device error. If more than one device or emulator is connected and a device is not specified, ADT returns exit code 2: Usage error.

On Android, use the Android ADB tool to list the serial numbers of attached devices and running emulators:

adb devices
- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/commands/version.html b/docs/building/air-developer-tool/commands/version.html index b690d6cc4..5461cb4e1 100644 --- a/docs/building/air-developer-tool/commands/version.html +++ b/docs/building/air-developer-tool/commands/version.html @@ -16,13 +16,13 @@ - +
- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/environment-variables.html b/docs/building/air-developer-tool/environment-variables.html index 7b5799d30..08473c2d1 100644 --- a/docs/building/air-developer-tool/environment-variables.html +++ b/docs/building/air-developer-tool/environment-variables.html @@ -16,13 +16,13 @@ - +

ADT Environment Variables

ADT reads the values of the following environment variables (if they are set):

AIR_ANDROID_SDK_HOME

AIR_ANDROID_SDK_HOME specifies the path to the root directory of the Android SDK (the directory containing the tools folder). The AIR 2.6+ SDK includes the tools from the Android SDK needed to implement the relevant ADT commands. Only set this value to use a different version of the Android SDK. If this variable is set, then the -platformsdk option does not need to be specified when running the ADT commands which require it. If both this variable and the command-line option are set, the path specified on the command line is used.

AIR_EXTENSION_PATH

AIR_EXTENSION_PATH specifies a list of directories to search for native extensions required by an application. This list of directories is searched in order after any native extension directories specified on the ADT command line. The ADL command also uses this environment variable.

TODO:: Add in current additional environment variables

note

On some computer systems, double-byte characters in the file system paths stored in these environment variables can be misinterpreted. If this occurs, try setting the JRE used to run ADT to use the UTF-8 character set. This is done by default in the script used to launch ADT on Mac and Linux. In the Windows adt.bat file, or when you run ADT directly from Java, specify the -Dfile.encoding=UTF-8 option on the Java command line.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/error-messages.html b/docs/building/air-developer-tool/error-messages.html index 80e173a24..ff6513121 100644 --- a/docs/building/air-developer-tool/error-messages.html +++ b/docs/building/air-developer-tool/error-messages.html @@ -16,13 +16,13 @@ - +

ADT Error Messages

The following tables list the possible errors that can be reported by the ADT program and the probable causes:

Application descriptor validation errors

Error codeDescriptionNotes
100Application descriptor cannot be parsedCheck the application descriptor file for XML syntax errors such as unclosed tags.
101Namespace is missingAdd the missing namespace.
102Invalid namespaceCheck the namespace spelling.
103Unexpected element or attributeRemove offending elements and attributes. Custom values are not allowed in the descriptor file.
Check the spelling of element and attribute names.
Make sure that elements are placed within the correct parent element and that attributes are used with the correct elements.
104Missing element or attributeAdd the required element or attribute.
105Element or attribute contains an invalid valueCorrect the offending value.
106Illegal window attribute combinationSome window settings, such as transparency = true and systemChrome = standard cannot be used together. Change one of the incompatible settings.
107Window minimum size is larger than the window maximum sizeChange either the minimum or the maximum size setting.
108Attribute already used in prior element
109Duplicate element.Remove the duplicate element.
110At least one element of the specified type is required.Add the missing element.
111None of the profiles listed in the application descriptor support native extensions.Add a profile to the supportedProfies list that supports native extensions.
112The AIR target doesn't support native extensions.Choose a target that supports native extensions.
113<nativeLibrary> and <initializer> must be provided together.An initializer function must be specified for every native library in the native extension.
114Found <finalizer> without <nativeLibrary>.Do not specify a finalizer unless the platform uses a native library.
115The default platform must not contain a native implementation.Do not specify a native library in the default platform element.
116Browser invocation is not supported for this target.The <allowBrowserInvocation> element cannot be true for the specified packaging target.
117This target requires at least namespace n to package native extensions.Change the AIR namespace in the application descriptor to a supported value.

See AIR application descriptor files for information about the namespaces, elements, attributes, and their valid values.

Application icon errors

Error codeDescriptionNotes
200Icon file cannot be openedCheck that the file exists at the specified path.Use another application to ensure that the file can be opened.
201Icon is the wrong sizeIcon size (in pixels) must match the XML tag.
For example, given the application descriptor element: <image32x32>icon.png</image32x32> The image in icon.png must be exactly 32x32 pixels.
202Icon file contains an unsupported image formatOnly the PNG format is supported. Convert images in other formats before packaging your application.

Application file errors

Error codeDescriptionNotes
300Missing file, or file cannot be openedA file specified on the command line cannot be found, or cannot be opened.
301Application descriptor file missing or cannot be openedThe application descriptor file cannot be found at the specified path or cannot be opened.
302Root content file missing from packageThe SWF or HTML file referenced in the <content> element of the application descriptor must be added to the package by including it in the files listed on the ADT command line.
303Icon file missing from packageThe icon files specified in the application descriptor must be added to the package by including them among the files listed on the ADT command line. Icon files are not added automatically.
304Initial window content is invalidThe file referenced in the <content> element of the application descriptor is not recognized as a valid HTML or SWF file.
305Initial window content SWF version exceeds namespace versionThe SWF version of the file referenced in the <content> element of the application descriptor is not supported by the version of AIR specified in the descriptor namespace. For example, attempting to package a SWF10 (Flash Player 10) file as the initial content of an AIR 1.1 application will generate this error.
306Profile not supported.The profile you are specifying in the application descriptor file is not supported. See supportedProfiles.
307Namespace must be at least nnn.Use the appropriate namespace for the features used in the application (such as the 2.0 namespace).

Exit codes for other errors

Exit codeDescriptionNotes
2Usage errorCheck the command-line arguments for errors
5Unknown errorThis error indicates a situation that cannot be explained by common error conditions. Possible root causes include incompatibility between ADT and the Java Runtime Environment, corrupt ADT or JRE installations, and programming errors within ADT.
6Could not write to output directoryMake sure that the specified (or implied) output directory is accessible and that the containing drive is has sufficient disk space.
7Could not access certificateMake sure that the path to the keystore is specified correctly.
Check that the certificate within the keystore can be accessed. The Java 1.6 Keytool utility can be used to help troubleshoot certificate access issues.
8Invalid certificateThe certificate file is malformed, modified, expired, or revoked.
9Could not sign AIR fileVerify the signing options passed to ADT.
10Could not create time stampADT could not establish a connection to the timestamp server. If you connect to the internet through a proxy server, you may need to configure the JRE proxy settings.
11Certificate creation errorVerify the command-line arguments used for creating signatures.
12Invalid inputVerify file paths and other arguments passed to ADT on the command line.
13Missing device SDKVerify the device SDK configuration. ADT cannot locate the device SDK required to execute the specified command.
14Device errorADT cannot execute the command because of a device restriction or problem. For example, this exit code is emitted when attempting to uninstall an app that is not actually installed.
15No devicesVerify that a device is attached and turned on or that an emulator is running.
16Missing GPL componentsThe current AIR SDK does not include all the components required to perform the request operation.
17Device packaging tool failed.The package could not be created because expected operating system components are missing.

Android errors

Exit codeDescriptionNotes
400Current Android sdk version doesn't support attribute.Check that the attribute name is spelled correctly and is a valid attribute for the element in which it appears. You may need to set the -platformsdk flag in the ADT command if the attribute was introduced after Android 2.2.
401Current Android sdk version doesn't support attribute valueCheck that the attribute value is spelled correctly and is a valid value for the attribute. You may need to set the -platformsdk flag in the ADT command if the attribute value was introduced after Android 2.2.
402Current Android sdk version doesn't support XML tagCheck that the XML tag name is spelled correctly and is a valid Android manifest document element. You may need to set the -platformsdk flag in the ADT command if the element was introduced after Android 2.2.
403Android tag is not allowed to be overriddenThe application is attempting to override an Android manifest element that is reserved for use by AIR. See Android settings.
404Android attribute is not allowed to be overriddenThe application is attempting to override an Android manifest attribute that is reserved for use by AIR. See Android settings.
405Android tag %1 must be the first element in manifestAdditions tagMove the specified tag to the required location.
406The attribute %1 of the android tag %2 has invalid value %3.Supply a valid value for the attribute.
- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/option-sets/android-application-profiling-options.html b/docs/building/air-developer-tool/option-sets/android-application-profiling-options.html index 33b5bbdeb..ffdf29be9 100644 --- a/docs/building/air-developer-tool/option-sets/android-application-profiling-options.html +++ b/docs/building/air-developer-tool/option-sets/android-application-profiling-options.html @@ -16,13 +16,13 @@ - +

ADT Android application profiling options

When the target of the package is apk-profile, the profiler options can be used to specify which preloaded SWF file to use for performance and memory profiling. The profiler options use the following syntax:

-preloadSWFPath directory

-preloadSWFPath

If present, the app will attempt to find the preload SWF at the specified directory. If not specified, ADT includes the preload SWF file from the AIR SDK.

directory

The directory containing the profiler preload SWF file.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/option-sets/code-signing-options.html b/docs/building/air-developer-tool/option-sets/code-signing-options.html index 8abb2350e..b1329a613 100644 --- a/docs/building/air-developer-tool/option-sets/code-signing-options.html +++ b/docs/building/air-developer-tool/option-sets/code-signing-options.html @@ -16,13 +16,13 @@ - +

ADT code signing options

ADT uses the Java Cryptography Architecture (JCA) to access private keys and certificates for signing AIR applications. The signing options identify the keystore and the private key and certificate within that keystore.

The keystore must include both the private key and the associated certificate chain. If the signing certificate chains to a trusted certificate on a computer, then the contents of the common name field of the certificate is displayed as the publisher name on the AIR installation dialog.

ADT requires that the certificate conform to the x509v3 standard (RFC3280) and include the Extended Key Usage extension with the proper values for code signing. Constraints defined within the certificate are respected and could preclude the use of some certificates for signing AIR applications.

note

ADT uses the Java runtime environment proxy settings, when appropriate, for connecting to Internet resources for checking certificate revocation lists and obtaining time-stamps. If you encounter problems connecting to these Internet resources when using ADT and your network requires specific proxy settings, you may need to configure the JRE proxy settings.

AIR signing options syntax

The signing options use the following syntax (on a single command line):

-alias aliasName
-storetype type
-keystore path
-storepass password1
-keypass password2
-providerName className
-tsa url

-alias

The alias of a key in the keystore. Specifying an alias is not necessary when a keystore only contains a single certificate. If no alias is specified, ADT uses the first key in the keystore.

Not all keystore management applications allow an alias to be assigned to certificates. When using the Windows system keystore, for example, use the distinguished name of the certificate as the alias. You can use the Java Keytool utility to list the available certificates so that you can determine the alias. For example, running the command:

keytool -list -storetype Windows-MY

produces output like the following for a certificate:

CN=TestingCert,OU=QE,O=Adobe,C=US, PrivateKeyEntry,
Certificate fingerprint (MD5): 73:D5:21:E9:8A:28:0A:AB:FD:1D:11:EA:BB:A7:55:88

To reference this certificate on the ADT command line, set the alias to:

CN=TestingCert,OU=QE,O=Adobe,C=US

On Mac OS X, the alias of a certificate in the Keychain is the name displayed in the Keychain Access application.

-storetype

The type of keystore, determined by the keystore implementation. The default keystore implementation included with most installations of Java supports the JKS and PKCS12 types. Java 5.0 includes support for the PKCS11 type, for accessing keystores on hardware tokens, and Keychain type, for accessing the Mac OS X keychain. Java 6.0 includes support for the MSCAPI type (on Windows). If other JCA providers have been installed and configured, additional keystore types might be available. If no keystore type is specified, the default type for the default JCA provider is used.

Store typeKeystore formatMinimum Java version
JKSJava keystore file (.keystore)1.2
PKCS12PKCS12 file (.p12 or .pfx)1.4
PKCS11Hardware token1.5
KeychainStoreMac OS X Keychain1.5
Windows-MY or Windows-ROOTMSCAPI1.6

-keystore

The path to the keystore file for file-based store types.

-storepass

The password required to access the keystore. If not specified, ADT prompts for the password.

-keypass

The password required to access the private key that is used to sign the AIR application. If not specified, ADT prompts for the password.

note

If you enter a password as part of the ADT command, the password characters are saved in the command-line history. Therefore, using the -keypass or -storepass options is not recommended when the security of the certificate is important. Also note that when you omit the password options, the characters you type at the password prompts are not displayed (for the same security reasons). Simply type the password and press the Enter key.

-providerName

The JCA provider for the specified keystore type. If not specified, then ADT uses the default provider for that type of keystore.

-tsa

Specifies the URL of an RFC3161-compliant timestamp server to time-stamp the digital signature. If no URL is specified, a default time-stamp server provided by Geotrust is used. When the signature of an AIR application is time-stamped, the application can still be installed after the signing certificate expires, because the timestamp verifies that the certificate was valid at the time of signing.

If ADT cannot connect to the time-stamp server, then signing is canceled and no package is produced. Specify -tsa none to disable time-stamping. However, an AIR application packaged without a timestamp ceases to be installable after the signing certificate expires.

note

Many of the signing options are equivalent to the same option of the Java Keytool utility. You can use the Keytool utility to examine and manage keystores on Windows. The Apple® security utility can also be used for this purpose on Mac OS X.

-provisioning-profile

The Apple iOS provisioning file. (Required for packaging iOS applications, only.)

Signing option examples

Signing with a .p12 file:

-storetype pkcs12 -keystore cert.p12

Signing with the default Java keystore:

-alias AIRcert -storetype jks

Signing with a specific Java keystore:

-alias AIRcert -storetype jks -keystore certStore.keystore

Signing with the Mac OS X keychain:

-alias AIRcert -storetype KeychainStore -providerName Apple

Signing with the Windows system keystore:

-alias cn=AIRCert -storeype Windows-MY

Signing with a hardware token (refer to the token manufacturer’s instructions on configuring Java to use the token and for the correct providerName value):

-alias AIRCert -storetype pkcs11 -providerName tokenProviderName

Signing without embedding a timestamp:

-storetype pkcs12 -keystore cert.p12 -tsa none
- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/option-sets/debugger-connection-options.html b/docs/building/air-developer-tool/option-sets/debugger-connection-options.html index 285ab0042..25d10bd7f 100644 --- a/docs/building/air-developer-tool/option-sets/debugger-connection-options.html +++ b/docs/building/air-developer-tool/option-sets/debugger-connection-options.html @@ -16,13 +16,13 @@ - +

ADT Debugger connection options

When the target of the package is apk-debug, ipa-debug, or ipa-debug-interpreter, the connection options can be used to specify whether the app will attempt to connect to a remote debugger (typically used for wifi debugging) or listen for an incoming connection from a remote debugger (typically used for USB debugging). Use the -connect option to connect to a debugger; use the -listen option to accept a connection from a debugger over a USB connection. These options are mutually exclusive; that is, you cannot use them together.

Connect

The -connect option uses the following syntax:

-connect hostString

-connect

If present, the app will attempt to connect to a remote debugger.

hostString

A string identifying the computer running the Flash debugging tool FDB. If not specified, the app will attempt to connect to a debugger running on the computer on which the package is created. The host string can be a fully qualified computer domain name: machinename.subgroup.example.com, or an IP address: 192.168.4.122. If the specified (or default) machine cannot be found, then the runtime will display a dialog requesting a valid host name.

Listen

The -listen option uses the following syntax:

-listen port

-listen

If present, the runtime waits for a connection from a remote debugger.

port

(Optional)

The port to listen on. By default, the runtime listens on port 7936. For more information on using the -listen option, see Remote debugging with FDB over USB.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/option-sets/file-and-path-options.html b/docs/building/air-developer-tool/option-sets/file-and-path-options.html index 0b8069ca0..a44bf23ff 100644 --- a/docs/building/air-developer-tool/option-sets/file-and-path-options.html +++ b/docs/building/air-developer-tool/option-sets/file-and-path-options.html @@ -16,13 +16,13 @@ - +

ADT File and Path options

The file and path options specify all the files that are included in the package. The file and path options use the following syntax:

files_and_dirs -C dir files_and_dirs -e file_or_dir dir -extdir dir

files_and_dirs

The files and directories to package in the AIR file. Any number of files and directories can be specified, delimited by whitespace. If you list a directory, all files and subdirectories within, except hidden files, are added to the package. (In addition, if the application descriptor file is specified, either directly, or through wildcard or directory expansion, it is ignored and not added to the package a second time.) Files and directories specified must be in the current directory or one of its subdirectories. Use the -C option to change the current directory.

Important

Wild cards cannot be used in the file_or_dir arguments following the –C option. (Command shells expand the wildcards before passing the arguments to ADT, which causes ADT to look for files in the wrong location.) You can, however, still use the dot character, ".", to stand for the current directory. For example: -C assets . copies everything in the assets directory, including any subdirectories, to the root level of the application package.

-C dir files_and_dirs

Changes the working directory to the value of dir before processing subsequent files and directories added to the application package (specified in files_and_dirs). The files or directories are added to the root of the application package. The –C option can be used any number of times to include files from multiple points in the file system. If a relative path is specified for dir, the path is always resolved from the original working directory.

As ADT processes the files and directories included in the package, the relative paths between the current directory and the target files are stored. These paths are expanded into the application directory structure when the package is installed. Therefore, specifying -C release/bin lib/feature.swf places the file release/bin/lib/feature.swf in the lib subdirectory of the root application folder.

-e file_or_dir dir

Places the file or directory into the specified package directory. This option cannot be used when packaging an ANE file.

note

The <content> element of the application descriptor file must specify the final location of the main application file within the application package directory tree.

-extdir dir

The value of dir is the name of a directory to search for native extensions (ANE files). Specify either an absolute path, or a path relative to the current directory. You can specify the -extdir option multiple times.

The specified directory contains ANE files for native extensions that the application uses. Each ANE file in this directory has the .ane filename extension. However, the filename before the .ane filename extension does not have to match the value of the extensionID element of the application descriptor file.

For example, if you use -extdir ./extensions, the directory extensions can look like the following:

extensions/
extension1.ane
extension2.ane
note

The use of the -extdir option is different for the ADT tool and the ADL tool. In ADL, the option specifies a directory that contains subdirectories, each containing an unpackaged ANE file. In ADT, the options specifies a directory that contains ANE files.

- + \ No newline at end of file diff --git a/docs/building/air-developer-tool/option-sets/native-extension-options.html b/docs/building/air-developer-tool/option-sets/native-extension-options.html index d730998c5..be2760679 100644 --- a/docs/building/air-developer-tool/option-sets/native-extension-options.html +++ b/docs/building/air-developer-tool/option-sets/native-extension-options.html @@ -16,13 +16,13 @@ - +

ADT Native extension options

The native extension options specify the options and files for packaging an ANE file for a native extension. Use these options with an ADT package command in which the -target option is ane.

extension-descriptor -swc swcPath 
-platform platformName
-platformoptions path/platform.xml
FILE_OPTIONS

extension-descriptor

The descriptor file for the native extension.

-swc

The SWC file containing the ActionScript code and resources for the native extension.

-platform

The name of the platform that this ANE file supports. You can include multiple -platform options, each with its own FILE_OPTIONS.

-platformoptions

The path to a platform options (platform.xml) file. Use this file to specify non-default linker options, shared libraries, and third-party static libraries used by the extension. For more information and examples, see iOS native libraries.

FILE_OPTIONS

Identifies the native platform files to include in the package, such as static libraries to include in the native extension package. The file options are fully described in File and path options. (Note that the -e option cannot be used when packaging an ANE file.)

- + \ No newline at end of file diff --git a/docs/building/application-descriptor-files/elements/android.html b/docs/building/application-descriptor-files/elements/android.html index 2954832db..9d6bef64b 100644 --- a/docs/building/application-descriptor-files/elements/android.html +++ b/docs/building/application-descriptor-files/elements/android.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ but may require some updates in other Android Java code (i.e. from AIR Native Extensions that may need some of their code to run on the UI thread). Default is false.

storageAccessFrameworkFromAPI

(optional)

Available: 50.2.1.1

This changes how the ActionScript File.browse... methods work, and the file-based permission handling, due to changes in the Android file system security. The default value here is 30 which equates to Android R (11.0). From this version and beyond, the File browse methods will use the Storage Access Framework and launch the standard system intents to browse for opening and saving files or to select a folder. Permissions are then automatically granted and persisted for the selected files/folder.

To switch to this mechanism from earlier versions of Android, the value can be changed to the appropriate API level, or to ensure this doesn't change behaviour yet, the value can be set much higher.

- + \ No newline at end of file diff --git a/docs/building/application-descriptor-files/elements/application.html b/docs/building/application-descriptor-files/elements/application.html index 7aacbb069..9d81f37c0 100644 --- a/docs/building/application-descriptor-files/elements/application.html +++ b/docs/building/application-descriptor-files/elements/application.html @@ -16,14 +16,16 @@ - +
-

application

The application element is the top-level element within the Application Descriptor XML file. It can contain the following elements.

Elements

id

required

An identifier string for the application, known as the application ID. A reverse DNS-style identifier is often used, but this style is not required.

Content

The ID value is restricted to the following characters:

  • 0–9
  • a–z
  • A–Z
  • . (dot)
  • - (hyphen)

The value must contain 1 to 212 characters. This element is required.

Example

<id>org.example.application</id>

versionNumber

required

The version number for the application. This can contain a sequence of up to three integers separated by periods. Each integer must be a number between 0 and 999 (inclusive).

Examples

<versionNumber>1.0.657</versionNumber> 

<versionNumber>10</versionNumber>

<versionNumber>0.01</versionNumber>

versionLabel

optional

A version string that will be displayed to the user in installation dialogs. If this value is not provided, the versionNumber field will be used instead.

Example

<versionLabel>0.9 Beta</versionlabel>

publisherID

(deprecated)

This may only be specified when creating a package for updating an application originally created with AIR version 1.5.2 or earlier.

name

optional

The name of the application, to display within the installation dialogs. If this value is not provided, the filename field will be used instead.

Note that this element may either be a simple string, or may contain a set of localised names.

Example

The following example defines a name with a simple text node:

<name>Test Application</name> 

The following example, valid in AIR 1.1 and later, specifies the name in three languages (English, French, and Spanish) using <text> element nodes:

<name> 
<text xml:lang="en">Hello AIR</text>
<text xml:lang="fr">Bonjour AIR</text>
<text xml:lang="es">Hola AIR</text>
</name>

filename

required

The filename to use when installing the application. This can contain any UTF-8 character above 0x1F, other than one of: *"/:<>?\|, and must not start or end with a space or dot.

It is advised to keep the filename set to the ASCII range of characters, particularly when targeting an iPhone or iPad device, to avoid issues with the filesystems on these devices.

description

optional

A description to display within the installation dialogs. This element may either be a simple string, or may contain a set of localised descriptions.

Example

Description with simple text node:

<description>This is a sample AIR application.</description> 

Description with localized text elements for English, French, and Spanish (valid in AIR 1.1 and later):

<description> 
<text xml:lang="en">This is an example.</text>
<text xml:lang="fr">C'est un exemple.</text>
<text xml:lang="es">Esto es un ejemplo.</text>
</description>
optional

The copyright information for the AIR application. On Mac OS, the copyright text appears in the About dialog box for the installed application.

On Mac OS, the copyright information is also used in the NSHumanReadableCopyright field in the Info.plist file for the application.

architecture

optional

The architecture value determines the architecture of the Windows captive app, being either "32" or "64".

Defaults to 32 if not supplied.

Example

To create a 64bit windows captive application:

<architecture>64</architecture>

To create a 32bit windows captive application:

<architecture>32</architecture>

icon

optional

An element containing a set of icon files of varying sizes that are used to create the application icon.

The icon property specifies one or more icon files to be used for the application. Including an icon is optional. If you do not specify an icon property, the operating system displays a default icon.

The path specified is relative to the application root directory. Icon files must be in the PNG format.

If an element for a given size is present, the image in the file must be exactly the size specified. If all sizes are not provided, the closest size is scaled to fit for a given use of the icon by the operating system.

note

The icons specified are not automatically added to the AIR package. The icon files must be included in their correct relative locations when the application is packaged.

Child items for this element are image16x16, image32x32, image128x128, etc: the images are handled differently for different operating systems which may have specific requirements on icon sizes.

Content

An imageNxN element for each desired icon size.

Example

<icon> 
<image16x16>icons/smallIcon.png</image16x16>
<image32x32>icons/mediumIcon.png</image32x32>
<image48x48>icons/bigIcon.png</image48x48>
<image128x128>icons/biggestIcon.png</image128x128>
</icon>

supportedProfiles

optional

Identifies the profiles that are supported for the application. Any combination of the following profiles can be specified:

  • desktop: The desktop profile is for AIR applications that are installed on a desktop computer using an AIR file. These applications do not have access to the NativeProcess class (which provides communication with native applications).
  • extendedDesktop: The extended desktop profile is for AIR applications that are installed on a desktop computer using a native application installer. These applications have access to the NativeProcess class and can run AIR Native Extensions.
  • mobileDevice: The mobile device profile is for mobile applications.
  • extendedMobileDevice: The extended mobile device profile is not currently in use.

The supportedProfiles property is optional. When you do not include this element in the application descriptor file, the application can be compiled and deployed for any profile. -To specify multiple profiles, separate each with a space character. For example, the following setting specifies that the application is only available in the desktop and extended profiles:

<supportedProfiles>desktop extendedDesktop</supportedProfiles>
note

When you run an application with ADL and do not specify a value for the ADL -profile option, then the first profile in the application descriptor is used. (If no profiles are specified in the application descriptor either, then the desktop profile is used.)

supportedLanguages

optional

Identifies the languages supported by the application. This element is only used by iOS, Mac captive runtime, and Android applications. This element is ignored by all other application types.

If you do not specify this element, then by default the packager performs the following actions based on the application type:

  • iOS — All languages supported by the AIR runtime are listed in the iOS app store as supported languages of the application.
  • Mac captive runtime — Application packaged with captive bundle has no localization information.
  • Android — Application bundle has resources for all languages supported by the AIR runtime.

The element should contain a space-delimited list of supported languages. Valid language values are ISO 639-1 values for the languages supported by the AIR runtime: en, de, es, fr, it, ja, ko, pt, ru, cs, nl, pl, sv, tr, zh, da, nb, iw.

The packager generates an error for an empty value for the supportedLanguages element.

note

Localized tags (such as the name tag) ignore the value of a language if you use the supportedLanguages tag and it does not contain that language. If a native extension has resources for a language which is not specified by the supportedLanguages tag, a warning is issued and the resources are ignored for that language.

Example

<supportedLanguages>en ja fr es</supportedLanguages>

installFolder

optional

Identifies the subdirectory of the default installation directory.

On Windows, the default installation subdirectory is the Program Files directory. On Mac OS, it is the /Applications directory. On Linux, it is /opt/.

For example, if the installFolder property is set to "Acme" and an application is named "ExampleApp", then the application is installed in C:\Program Files\Acme\ExampleApp on Windows, in /Applications/Acme/Example.app on MacOS, and /opt/Acme/ExampleApp on Linux.

If you do not specify an installFolder property, the application is installed in a subdirectory of the default installation directory, based on the name property.

Content

The installFolder property can contain any Unicode (UTF-8) character except those that are prohibited from use as folder names on various file systems (see the filename property for the list of exceptions). -Use the forward-slash (/) character as the directory separator character if you want to specify a nested subdirectory.

Example

<installFolder>utilities/toolA</installFolder>

programMenuFolder

optional

Identifies the location in which to place shortcuts to the application in the All Programs menu of the Windows operating system or in the Applications menu on Linux.

This setting is currently ignored on other operating systems.

The string used for the programMenuFolder value can contain any Unicode (UTF-8) character except those that are prohibited from use as folder names on various file systems (see the filename element for the list of exceptions). Do not use a forward slash (/) character as the last character of this value.

Example

<programMenuFolder>Example Company/Sample Application</programMenuFolder>

customUpdateUI

optional

Indicates whether an application will provide its own update dialogs.

If false (or missing), AIR presents standard update dialogs to the user. Only desktop applications distributed as AIR files can use the built-in AIR update system.

When the installed version of your application has the customUpdateUI element set to true and the user then double-clicks the AIR file for a new version or installs an update of the application using the seamless install feature, the runtime opens the installed version of the application. The runtime does not open the default AIR application installer. Your application logic can then determine how to proceed with the update operation. (The application ID and publisher ID in the AIR file must match the values in the installed application for an upgrade to proceed.)

note

The customUpdateUI mechanism only comes into play when the application is already installed and the user double-clicks the AIR installation file containing an update or installs an update of the application using the seamless install feature. You can download and start an update through your own application logic, displaying your custom UI as necessary, whether or not customUpdateUI is true.

Example

<customUpdateUI>true</customUpdateUI>

allowBrowserInvocation

(deprecated)

This setting was used to trigger the launch of an AIR application from a browser - however this used a utility running within the Flash Player in the browser.

Following the removal of support for the Flash Player, this setting will be ignored.

embedFonts

optional

Allows you to use custom fonts on StageText in the AIR application. The embedFonts element may contain any number of font elements.

Example

<embedFonts>
<font>
<fontPath>ttf/space age.ttf</fontPath>
<fontName>space age</fontName>
</font>
<font>
<fontPath>ttf/xminus.ttf</fontPath>
<fontName>xminus</fontName>
</font>
</embedFonts>

resdir

optional

A folder that should be treated as containing Android resources files, to be merged in with the standard AIR application resources when building an APK or Android App Bundle file.

See Custom Android Resources for more information on the usage of this value.

Example

<resdir>res</resdir>

fileTypes

optional

The fileTypes element allows you to declare the file types with which an AIR application can be associated on a desktop installation.

When an AIR application is installed, any declared file type is registered with the operating system. If these file types are not already associated with another application, they are associated with the AIR application. To override an existing association between a file type and another application, use the NativeApplication.setAsDefaultApplication() method at run time (preferably with the user’s permission).

It contains an array of fileType elements - see below.

Content

The fileTypes element may contain any number of fileType elements.

Example

<fileTypes> 
<fileType>
<name>adobe.VideoFile</name>
<extension>avf</extension>
<description>Adobe Video File</description>
<contentType>application/vnd.adobe.video-file</contentType>
<icon>
<image16x16>icons/AIRApp_16.png</image16x16>
<image32x32>icons/AIRApp_32.png</image32x32>
<image48x48>icons/AIRApp_48.png</image48x48>
<image128x128>icons/AIRApp_128.png</image128x128>
</icon>
</fileType>
</fileTypes>

extensions

optional

Identifies the AIR Native Extensions used by an application. This element contains a list of extensionID entries, each of which declares the identifier of an AIR Native Extension that will need to be loaded by the AIR runtime at application start-up.

For example:

<extensions>
<extensionID>extension.first</extensionID>
<extensionID>extension.next</extensionID>
<extensionID>extension.last</extensionID>
</extensions>

allowMultipleInstances

optional

Available: 50.0.0.1

This setting can be used to allow multiple instances of a desktop AIR application to be launched as separate processes, rather than the standard behaviour of new invocations just resulting in an InvokeEvent being sent to a running instance of the application. +

application

The application element is the top-level element within the Application Descriptor XML file. It can contain the following elements.

Elements

id

required

An identifier string for the application, known as the application ID. A reverse DNS-style identifier is often used, but this style is not required.

Content

The ID value is restricted to the following characters:

  • 0–9
  • a–z
  • A–Z
  • . (dot)
  • - (hyphen)

The value must contain 1 to 212 characters. This element is required.

Example

<id>org.example.application</id>

versionNumber

required

The version number for the application. This can contain a sequence of up to three integers separated by periods. Each integer must be a number between 0 and 999 (inclusive).

Examples

<versionNumber>1.0.657</versionNumber> 

<versionNumber>10</versionNumber>

<versionNumber>0.01</versionNumber>

versionLabel

optional

A version string that will be displayed to the user in installation dialogs. If this value is not provided, the versionNumber field will be used instead.

Example

<versionLabel>0.9 Beta</versionlabel>

publisherID

(deprecated)

This may only be specified when creating a package for updating an application originally created with AIR version 1.5.2 or earlier.

name

optional

The name of the application, to display within the installation dialogs. If this value is not provided, the filename field will be used instead.

Note that this element may either be a simple string, or may contain a set of localised names.

Example

The following example defines a name with a simple text node:

<name>Test Application</name> 

The following example, valid in AIR 1.1 and later, specifies the name in three languages (English, French, and Spanish) using <text> element nodes:

<name> 
<text xml:lang="en">Hello AIR</text>
<text xml:lang="fr">Bonjour AIR</text>
<text xml:lang="es">Hola AIR</text>
</name>

filename

required

The filename to use when installing the application. This can contain any UTF-8 character above 0x1F, other than one of: *"/:<>?\|, and must not start or end with a space or dot.

It is advised to keep the filename set to the ASCII range of characters, particularly when targeting an iPhone or iPad device, to avoid issues with the filesystems on these devices.

description

optional

A description to display within the installation dialogs. This element may either be a simple string, or may contain a set of localised descriptions.

Example

Description with simple text node:

<description>This is a sample AIR application.</description> 

Description with localized text elements for English, French, and Spanish (valid in AIR 1.1 and later):

<description> 
<text xml:lang="en">This is an example.</text>
<text xml:lang="fr">C'est un exemple.</text>
<text xml:lang="es">Esto es un ejemplo.</text>
</description>
optional

The copyright information for the AIR application. On Mac OS, the copyright text appears in the About dialog box for the installed application.

On Mac OS, the copyright information is also used in the NSHumanReadableCopyright field in the Info.plist file for the application.

architecture

optional

The architecture value determines the architecture of the Windows captive app, being either "32" or "64".

Defaults to 32 if not supplied.

Example

To create a 64bit windows captive application:

<architecture>64</architecture>

To create a 32bit windows captive application:

<architecture>32</architecture>

gpuPreference

optional

The gpuPreference value determines if the application will use the integrated or dedicated(discrete) GPU. +This feature is supported only on devices that are equipped with both an integrated GPU and a discrete GPU +and with OS that support GPU switching functionality.

Example

To specify preference to use dedicated GPU (High performance GPU):

<gpuPreference>discrete</gpuPreference>

To specify preference to use integrated GPU:

<gpuPreference>integrated</gpuPreference>

icon

optional

An element containing a set of icon files of varying sizes that are used to create the application icon.

The icon property specifies one or more icon files to be used for the application. Including an icon is optional. If you do not specify an icon property, the operating system displays a default icon.

The path specified is relative to the application root directory. Icon files must be in the PNG format.

If an element for a given size is present, the image in the file must be exactly the size specified. If all sizes are not provided, the closest size is scaled to fit for a given use of the icon by the operating system.

note

The icons specified are not automatically added to the AIR package. The icon files must be included in their correct relative locations when the application is packaged.

Child items for this element are image16x16, image32x32, image128x128, etc: the images are handled differently for different operating systems which may have specific requirements on icon sizes.

Content

An imageNxN element for each desired icon size.

Example

<icon> 
<image16x16>icons/smallIcon.png</image16x16>
<image32x32>icons/mediumIcon.png</image32x32>
<image48x48>icons/bigIcon.png</image48x48>
<image128x128>icons/biggestIcon.png</image128x128>
</icon>

supportedProfiles

optional

Identifies the profiles that are supported for the application. Any combination of the following profiles can be specified:

  • desktop: The desktop profile is for AIR applications that are installed on a desktop computer using an AIR file. These applications do not have access to the NativeProcess class (which provides communication with native applications).
  • extendedDesktop: The extended desktop profile is for AIR applications that are installed on a desktop computer using a native application installer. These applications have access to the NativeProcess class and can run AIR Native Extensions.
  • mobileDevice: The mobile device profile is for mobile applications.
  • extendedMobileDevice: The extended mobile device profile is not currently in use.

The supportedProfiles property is optional. When you do not include this element in the application descriptor file, the application can be compiled and deployed for any profile. +To specify multiple profiles, separate each with a space character. For example, the following setting specifies that the application is only available in the desktop and extended profiles:

<supportedProfiles>desktop extendedDesktop</supportedProfiles>
note

When you run an application with ADL and do not specify a value for the ADL -profile option, then the first profile in the application descriptor is used. (If no profiles are specified in the application descriptor either, then the desktop profile is used.)

supportedLanguages

optional

Identifies the languages supported by the application. This element is only used by iOS, Mac captive runtime, and Android applications. This element is ignored by all other application types.

If you do not specify this element, then by default the packager performs the following actions based on the application type:

  • iOS — All languages supported by the AIR runtime are listed in the iOS app store as supported languages of the application.
  • Mac captive runtime — Application packaged with captive bundle has no localization information.
  • Android — Application bundle has resources for all languages supported by the AIR runtime.

The element should contain a space-delimited list of supported languages. Valid language values are ISO 639-1 values for the languages supported by the AIR runtime: en, de, es, fr, it, ja, ko, pt, ru, cs, nl, pl, sv, tr, zh, da, nb, iw.

The packager generates an error for an empty value for the supportedLanguages element.

note

Localized tags (such as the name tag) ignore the value of a language if you use the supportedLanguages tag and it does not contain that language. If a native extension has resources for a language which is not specified by the supportedLanguages tag, a warning is issued and the resources are ignored for that language.

Example

<supportedLanguages>en ja fr es</supportedLanguages>

installFolder

optional

Identifies the subdirectory of the default installation directory.

On Windows, the default installation subdirectory is the Program Files directory. On Mac OS, it is the /Applications directory. On Linux, it is /opt/.

For example, if the installFolder property is set to "Acme" and an application is named "ExampleApp", then the application is installed in C:\Program Files\Acme\ExampleApp on Windows, in /Applications/Acme/Example.app on MacOS, and /opt/Acme/ExampleApp on Linux.

If you do not specify an installFolder property, the application is installed in a subdirectory of the default installation directory, based on the name property.

Content

The installFolder property can contain any Unicode (UTF-8) character except those that are prohibited from use as folder names on various file systems (see the filename property for the list of exceptions). +Use the forward-slash (/) character as the directory separator character if you want to specify a nested subdirectory.

Example

<installFolder>utilities/toolA</installFolder>

programMenuFolder

optional

Identifies the location in which to place shortcuts to the application in the All Programs menu of the Windows operating system or in the Applications menu on Linux.

This setting is currently ignored on other operating systems.

The string used for the programMenuFolder value can contain any Unicode (UTF-8) character except those that are prohibited from use as folder names on various file systems (see the filename element for the list of exceptions). Do not use a forward slash (/) character as the last character of this value.

Example

<programMenuFolder>Example Company/Sample Application</programMenuFolder>

customUpdateUI

optional

Indicates whether an application will provide its own update dialogs.

If false (or missing), AIR presents standard update dialogs to the user. Only desktop applications distributed as AIR files can use the built-in AIR update system.

When the installed version of your application has the customUpdateUI element set to true and the user then double-clicks the AIR file for a new version or installs an update of the application using the seamless install feature, the runtime opens the installed version of the application. The runtime does not open the default AIR application installer. Your application logic can then determine how to proceed with the update operation. (The application ID and publisher ID in the AIR file must match the values in the installed application for an upgrade to proceed.)

note

The customUpdateUI mechanism only comes into play when the application is already installed and the user double-clicks the AIR installation file containing an update or installs an update of the application using the seamless install feature. You can download and start an update through your own application logic, displaying your custom UI as necessary, whether or not customUpdateUI is true.

Example

<customUpdateUI>true</customUpdateUI>

allowBrowserInvocation

(deprecated)

This setting was used to trigger the launch of an AIR application from a browser - however this used a utility running within the Flash Player in the browser.

Following the removal of support for the Flash Player, this setting will be ignored.

embedFonts

optional

Allows you to use custom fonts on StageText in the AIR application. The embedFonts element may contain any number of font elements.

Example

<embedFonts>
<font>
<fontPath>ttf/space age.ttf</fontPath>
<fontName>space age</fontName>
</font>
<font>
<fontPath>ttf/xminus.ttf</fontPath>
<fontName>xminus</fontName>
</font>
</embedFonts>

resdir

optional

A folder that should be treated as containing Android resources files, to be merged in with the standard AIR application resources when building an APK or Android App Bundle file.

See Custom Android Resources for more information on the usage of this value.

Example

<resdir>res</resdir>

fileTypes

optional

The fileTypes element allows you to declare the file types with which an AIR application can be associated on a desktop installation.

When an AIR application is installed, any declared file type is registered with the operating system. If these file types are not already associated with another application, they are associated with the AIR application. To override an existing association between a file type and another application, use the NativeApplication.setAsDefaultApplication() method at run time (preferably with the user’s permission).

It contains an array of fileType elements - see below.

Content

The fileTypes element may contain any number of fileType elements.

Example

<fileTypes> 
<fileType>
<name>adobe.VideoFile</name>
<extension>avf</extension>
<description>Adobe Video File</description>
<contentType>application/vnd.adobe.video-file</contentType>
<icon>
<image16x16>icons/AIRApp_16.png</image16x16>
<image32x32>icons/AIRApp_32.png</image32x32>
<image48x48>icons/AIRApp_48.png</image48x48>
<image128x128>icons/AIRApp_128.png</image128x128>
</icon>
</fileType>
</fileTypes>

extensions

optional

Identifies the AIR Native Extensions used by an application. This element contains a list of extensionID entries, each of which declares the identifier of an AIR Native Extension that will need to be loaded by the AIR runtime at application start-up.

For example:

<extensions>
<extensionID>extension.first</extensionID>
<extensionID>extension.next</extensionID>
<extensionID>extension.last</extensionID>
</extensions>

allowMultipleInstances

optional

Available: 50.0.0.1

This setting can be used to allow multiple instances of a desktop AIR application to be launched as separate processes, rather than the standard behaviour of new invocations just resulting in an InvokeEvent being sent to a running instance of the application. Note that on macOS, opening a new instance of an application must be done via open -n.

Default value is false.

stacktraces

optional

Available: 50.1.1.1

Controls the availability and verbosity of stack traces available to the application. The setting may be none, standard or verbose. Before this flag, the availability of stack traces depended on the SWF version number, and the verbosity on whether or not the SWF file included debug information (file name and line number details). none means that no stack traces are generated when an error is raised. standard would cause a stack trace to be created but without file and line information. @@ -32,8 +34,8 @@ The registration is only possible (at install-time) if these file types are not already associated with another application: to override an existing association between a file type and another application, use the NativeApplication.setAsDefaultApplication() method at run time (preferably with the user’s permission). Note that the runtime methods can only manage associations for the file types declared in the application descriptor.

A fileType entry can have a number of number of optional child elements:

  • name: Identifies the name of a file type. For example: <name>adobe.VideoFile</name>
  • extension: The extension string of a file type (without the dot). For example: <extension>png</extension>
  • description: The file type description is displayed to the user by the operating system (not localizable). For example: <description>PNG image</description>
  • contentType: The MIME type/subtype of the content to register. Note that the value is ignored on Linux if the file type is already registered and has an assigned MIME type. For example: <contentType>text/plain</contentType>
  • icon: An icon to associate with files that match the registered content type. This element contains a set of imageNNxNN entries similar to the main AIR application icon.

If the file type registration is successful, then the operating system will identify these files using the provided details and will open them using your AIR application. The path of the selected file will be passed to the AIR application via the InvokeEvent - adding an event listener for InvokeEvent.INVOKE to the NativeApplication.nativeApplication object -will trigger any invoke events to be passed to the listener function.

- +will trigger any invoke events to be passed to the listener function.

+ \ No newline at end of file diff --git a/docs/building/application-descriptor-files/elements/iPhone.html b/docs/building/application-descriptor-files/elements/iPhone.html index bf19613f7..85fb4b405 100644 --- a/docs/building/application-descriptor-files/elements/iPhone.html +++ b/docs/building/application-descriptor-files/elements/iPhone.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ If this is set to true then the developer should add their own values into the InfoAdditions section of the app descriptor file.

Device names

The names used in excludeDevices and forceCPURenderModeForDevices are iOS device model names or model name prefixes. For example, the value iPad3,1 refers specifically to a Wi-Fi 3rd-generation iPad (but not GSM or CDMA 3rd-generation iPads). Alternatively, the value iPad3 refers to any 3rd-generation iPad.

An unofficial list of iOS model names is available as the 'Identifier' column at the iPhone wiki Models page.

- + \ No newline at end of file diff --git a/docs/building/application-descriptor-files/elements/initialWindow.html b/docs/building/application-descriptor-files/elements/initialWindow.html index 022b52108..ae3168c19 100644 --- a/docs/building/application-descriptor-files/elements/initialWindow.html +++ b/docs/building/application-descriptor-files/elements/initialWindow.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

initialWindow

The initialWindow element provides information about the first window that will be created for an application by the AIR runtime. It can contain the following elements, several of which are only applicable to desktop applications or to mobile applications.

Example

<initialWindow> 
<title>Hello World</title>
<content>HelloWorld.swf</content>
<depthAndStencil>true</depthAndStencil>
<systemChrome>none</systemChrome>
<transparent>true</transparent>
<visible>true</visible>
<maxSize>1024 800</maxSize>
<minSize>320 240</minSize>
<maximizable>false</maximizable>
<minimizable>false</minimizable>
<resizable>true</resizable>
<x>20</x>
<y>20</y>
<height>600</height>
<width>800</width>
<aspectRatio>landscape</aspectRatio>
<autoOrients>true</autoOrients>
<fullScreen>false</fullScreen>
<renderMode>direct</renderMode>
<requestedDisplayResolution>standard</requestedDisplayResolution>
<allowLowQuality>false</allowLowQuality>
</initialWindow>

Elements used on all platforms:

content

required

The value specified for the content element is the URL for the main content file of the application. This may be either a SWF file or an HTML file.

The URL is specified relative to the root of the application installation folder. (When running an AIR application with ADL, the URL is relative to the folder containing the application descriptor file. You can use the root-dir parameter of ADL to specify a different root directory.)

Because the value of the content element is treated as a URL, characters in the name of the content file must be URL encoded according to the rules defined in RFC 1738. Space characters, for example, must be encoded as %20.

Example

<content>TravelPlanner.swf</content>

renderMode

optional

Specifies whether to use graphics processing unit (GPU) acceleration, if supported on the current device. This can be set to one of the following values:

  • auto (default) — currently falls back to CPU mode.
  • cpu — hardware acceleration is not used.
  • direct — rendering composition occurs in the CPU; blitting uses the GPU.
  • gpu — hardware rendering acceleration is used, if available.

Note that direct mode is required in order to use Stage3D APIs and frameworks such as Starling.

Example

<renderMode>direct</renderMode>

depthAndStencil

optional

Indicates that the application requires the use of the depth or stencil buffer. You typically use these buffers when working with 3D content.

By default, the value of this element is false to disable the depth and stencil buffers. This element is necessary because the buffers must be allocated on application startup, before any content loads.

The setting of this element must match the value passed for the enableDepthAndStencil argument to the Context3D.configureBackBuffer() method. If the values do not match, AIR issues an error.

This element is only available when renderMode is set to direct.

Example

<depthAndStencil>true</depthAndStencil>

Elements used on desktop platforms:

title

optional

Specifies the title displayed in the title bar of the initial application window. A title is only displayed if the systemChrome element is set to standard.

Content

A string containing the window title.

Example

<title>Example Window Title</title>

systemChrome

optional

Specifies whether the initial application window is created with the standard title bar, borders, and controls provided by the operating system. The system chrome setting of the window cannot be changed at run time. This can be set to one of the following values:

  • none — No system chrome is provided. The application (or an application framework such as Flex) is responsible for displaying window chrome.
  • standard (default) — System chrome is provided by the operating system.

Example

<systemChrome>standard</systemChrome>

transparent

optional

Specifies whether the initial application window is alpha-blended with the desktop. A window with transparency enabled may draw more slowly and require more memory. The transparent setting cannot be changed at run time.

Important

You can only set transparent to true when systemChrome is none.

Example

<transparent>true</transparent>

visible

optional

Specifies whether the initial application window is visible as soon as it is created.

AIR windows, including the initial window, are created in an invisible state by default. You can display a window by calling the activate() method of the NativeWindow object or by setting the visible property to true. You may want to leave the main window hidden initially, so that changes to the window’s position, the window’s size, and the layout of its contents are not shown.

Example

<visible>true</visible>

minimizable

optional

Specifies whether the window can be minimized.

maximizable

optional

Specifies whether the window can be maximized.

resizable

optional

Specifies whether the window can be resized.

note

On operating systems, such as Mac OS X, for which maximizing windows is a resizing operation, both maximizable and resizable must be set to false to prevent the window from being zoomed or resized.

Example

<resizable>false</resizable>

x

optional

The horizontal position of the initial application window.

In most cases, it is better to let the operating system determine the initial position of the window rather than assigning a fixed value.

The origin of the screen coordinate system (0,0) is the top, left-hand corner of the main desktop screen (as determined by the operating system).

Content

An integer value.

Example

<x>120</x>

x

optional

The vertical position of the initial application window.

In most cases, it is better to let the operating system determine the initial position of the window rather than assigning a fixed value.

The origin of the screen coordinate system (0,0) is the top, left-hand corner of the main desktop screen (as determined by the operating system).

Content

An integer value.

Example

<y>250</y>

width

optional

The initial width of the main window of the application.

If you do not set this value, it is determined by the settings in the root SWF file or, in the case of an HTML-based AIR application, by the operating system.

The maximum dimension of a window is 4096 pixels.

Content

A positive integer with a maximum value of 4095.

Example

<width>1024</width>

height

optional

The initial height of the main window of the application.

If you do not set this value, it is determined by the settings in the root SWF file or, in the case of an HTML-based AIR application, by the operating system.

The maximum dimension of a window is 4096 pixels.

Content

A positive integer with a maximum value of 4095.

Example

<height>1024</height>

minSize

optional

Specifies the minimum size allowed for the window.

Content

Two integers representing the minimum width and height, separated by whites pace. Note that the minimum size imposed by the operating system takes precedence over the value set in the application descriptor.

Example

<minSize>120 60</minSize>

maxSize

optional

Specifies the maximum size allowed for the window.

If you do not set a maximum size, it is determined by the operating system.

Content

Two integers representing the maximum width and height, separated by whites pace.

note

The maximum window size supported by AIR increased from 2048x2048 pixels to 4096x4096 pixels in AIR 2. (Because the screen coordinates are zero-based, the maximum value you can use for width or height is 4095.)

Example

<maxSize>1024 360</maxSize>

requestedDisplayResolution

optional

Specifies whether the application desires to use the standard or high resolution on a computer monitor with a high-resolution screen.

When set to standard (the default), the screen will appear to the application as a standard-resolution screen. When set to high, the application can address each high-resolution pixel.

For example, on a 4K/UHD monitor, if the setting is standard then the full-screen stage dimensions would be 1920x1080, and each application pixel is rendered using four screen pixels.

If the setting is high, the full-screen stage dimensions match the monitor at 3840x2160.

On devices with standard-resolution screens, the stage dimensions match the screen dimensions no matter which setting is used.

Example

<initialWindow> 
<requestedDisplayResolution>high</requestedDisplayResolution>
</initialWindow>

allowLowQuality

optional

Available: 33.1.1.795

Specifies whether the application can be set into the "low" or "medium" values for the Stage quality.

On desktop/multi-window versions of AIR, the Stage.quality value is normally pegged to high or best; without this value being set to true, the runtime will ignore requests to reduce the quality to medium or low.

Elements used on mobile platforms:

aspectRatio

optional

Specifies the aspect ratio of the application. Options are any, portrait or landscape.

If not specified, the application opens in the "natural" aspect ratio and orientation of the device. The natural orientation varies from device to device. Typically, it is the portrait aspect ratio on small-screen devices such as phones. On some devices, such as the iPad tablet, the application opens in the current orientation.

Example

<aspectRatio>landscape</aspectRatio>

autoOrients

optional

Specifies whether the orientation of content in the application automatically reorients as the device itself changes physical orientation. For more information, see Stage orientation.

When using auto-orientation, consider setting the align and scaleMode properties of the Stage to the following:

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

These settings allow the application to rotate around the top, left corner and prevents your application content from being automatically scaled. While the other scale modes do adjust your content to fit the rotated stage dimensions, they also clip, distort, or excessively shrink that content. Better results can almost always be achieved by redrawing or relaying out the content yourself.

Example

<autoOrients>true</autoOrients>

softKeyboardBehavior

optional

Specifies the default behavior of the application when a virtual keyboard is displayed. The default behavior is to pan the application upward.

The runtime keeps the focused text field or interactive object on the screen. Use the pan option if your application does not provide its own keyboard handling logic.

You can also turn off the automatic behavior by setting the softKeyboardBehavior element to none.

In this case, text fields and interactive objects dispatch a SoftKeyboardEvent when the soft keyboard is raised, but the runtime does not pan or resize the application.

It is your application’s responsibility to keep the text entry area in view.

Example

<softKeyboardBehavior>none</softKeyboardBehavior>

fullscreen

optional

TODO:: the Adobe documentation does not match the observed behaviour.

Example

<fullscreen>true</fullscreen>
- + \ No newline at end of file diff --git a/docs/building/application-descriptor-files/elements/macOS.html b/docs/building/application-descriptor-files/elements/macOS.html index 22278c90c..64c525194 100644 --- a/docs/building/application-descriptor-files/elements/macOS.html +++ b/docs/building/application-descriptor-files/elements/macOS.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

macOS

The macOS element provides platform-specific settings for applications running on the macOS operating systems. It can contain the following elements.

Elements

Entitlements

Developers may need to specify particular strings for their application entitlements, to ensure an appropriate message is shown when requesting access to system resources such as webcams. Use the Entitlements element to specify this information as key-value pairs enclosed in a CDATA block. For more information, see the Entitlements documentation in the Apple Developer website.

Example

<macOS>
<Entitlements>
<![CDATA[
<key>com.apple.security.device.camera</key>
<true/>
]]>
</Entitlements>
</macOS>

InfoAdditions

Allows you to specify additional properties of a macOS application. Properties are provided as key-value pairs enclosed in a CDATA block and are injected into the application's Info.plist file. For more information, see the Information Property List documentation in the Apple Developer website.

Example

<macOS>
<InfoAdditions>
<![CDATA[
<key>NSCameraUsageDescription</key>
<string>Our application needs to use your camera for some purpose</string>
]]>
</InfoAdditions>
</macOS>
- + \ No newline at end of file diff --git a/docs/building/application-descriptor-files/elements/windows.html b/docs/building/application-descriptor-files/elements/windows.html index 19aa2997a..8c183c858 100644 --- a/docs/building/application-descriptor-files/elements/windows.html +++ b/docs/building/application-descriptor-files/elements/windows.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

windows

The windows element provides platform-specific settings for applications running on the Windows operating systems. It can contain the following optional elements.

Elements

UseWebView2

(optional)

Available: 33.1.1.620

Requests the runtime to try creating a Microsoft Edge "WebView2" component, rather than the IE-based "WebBrowser" control, when a native StageWebView element is created.

This component will need to be present on an end user's computer before this works: please see Microsoft's information on downloading the WebView2 runtime

maxD3D

(optional)

Available: 33.1.1.929

Sets a limit on the Direct3D APIs used by the AIR runtime on Windows. If this value is set, it should be an integer value and AIR will not use a Direct3D version higher than this value. Currently this means that to force the runtime to use Direct3D 9, it can be set to 9, and to prevent the runtime from using Direct3D, it can be set to 0. The default for new SWFs is Direct3D 11.

clipboardFullHTML

(optional)

Available: 50.0.0.1

This setting can be used to retrieve the full Windows clipboard entry for HTML strings. Default behaviour is false which will only provide the body text of the HTML contents. To ensure the full clipboard contents are retrieved for HTML strings, set the value to true.

- + \ No newline at end of file diff --git a/docs/building/application-descriptor-files/file-structure.html b/docs/building/application-descriptor-files/file-structure.html index f59724e8b..07442b54a 100644 --- a/docs/building/application-descriptor-files/file-structure.html +++ b/docs/building/application-descriptor-files/file-structure.html @@ -16,13 +16,13 @@ - +

Application Descriptor File Structure

The application descriptor file is an XML document with the following structure:

<application xmlns="http://ns.adobe.com/air/application/33.1"> 
<allowBrowserInvocation>...<allowBrowserInvocation>
<android>
<colorDepth>...</colorDepth>
<manifestAdditions
<manifest>...</manifest>
]]>
</manifestAdditions
</android>
<copyright>...</copyright>
<customUpdateUI>...</customUpdateUI>
<description>
<text xml:lang="...">...</text>
</description>
<extensions>
<extensionID>...</extensionID>
</extensions>
<filename>...</filename>
<fileTypes>
<fileType>
<contentType>...</contentType>
<description>...</description>
<extension>...</extension>
<icon>
<imageNxN>...</imageNxN>
</icon>
<name>...</name>
</fileType>
</fileTypes>
<icon>
<imageNxN>...</imageNxN>
</icon>
<id>...</id>
<initialWindow>
<aspectRatio>...</aspectRatio>
<autoOrients>...</autoOrients>
<content>...</content>
<depthAndStencil>...</depthAndStencil>
<fullScreen>...</fullScreen>
<height>...</height>
<maximizable>...</maximizable>
<maxSize>...</maxSize>
<minimizable>...</minimizable>
<minSize>...</minSize>
<renderMode>...</renderMode>
<requestedDisplayResolution>...</requestedDisplayResolution>
<resizable>...</resizable>
<softKeyboardBehavior>...</softKeyboardBehavior>
<systemChrome>...</systemChrome>
<title>...</title>
<transparent>...</transparent>
<visible>...</visible>
<width>...</width>
<x>...</x>
<y>...</y>
</initialWindow>
<installFolder>...</installFolder>
<iPhone>
<Entitlements>...</Entitlements>
<InfoAdditions>...</InfoAdditions>
<requestedDisplayResolution>...</requestedDisplayResolution>
<forceCPURenderModeForDevices>...</forceCPURenderModeForDevices>
<externalSwfs>...</externalSwfs>
</iPhone>
<name>
<text xml:lang="...">...</text>
</name>
<programMenuFolder>...</programMenuFolder>
<publisherID>...</publisherID>
<supportedLanguages>...</supportedLanguages>
<supportedProfiles>...</supportedProfiles>
<versionNumber>...</versionNumber>
<versionLabel>...</versionLabel>
</application>
- + \ No newline at end of file diff --git a/docs/building/application-descriptor-files/introduction.html b/docs/building/application-descriptor-files/introduction.html index 190ead310..dbac35d59 100644 --- a/docs/building/application-descriptor-files/introduction.html +++ b/docs/building/application-descriptor-files/introduction.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ There is a suitable template provided within the AIR SDK (see templates/air/descriptor-template.xml). The application descriptor file can have any filename but is typically either called application.xml or named after the application/project name with -app.xml appended, for example MyProject-app.xml.

For more advanced generation and manipulation of the application descriptor file, including to add dependencies (third party libraries or AIR Native Extensions) into a project, the AIR Package Manager (apm) can be used. For more details please see the apm wiki.

Example application descriptor

The following application descriptor document sets the basic properties used by most AIR applications:

<?xml version="1.0" encoding="utf-8" ?> 
<application xmlns="http://ns.adobe.com/air/application/3.0">
<id>example.HelloWorld</id>
<versionNumber>1.0.1</versionNumber>
<filename>Hello World</filename>
<name>Example Co. AIR Hello World</name>
<description>
<text xml:lang="en">This is an example.</text>
<text xml:lang="fr">C'est un exemple.</text>
<text xml:lang="es">Esto es un ejemplo.</text>
</description>
<copyright>Copyright (c) 2010 Example Co.</copyright>
<initialWindow>
<title>Hello World</title>
<content>
HelloWorld.swf
</content>
</initialWindow>
<icon>
<image16x16>icons/smallIcon.png</image16x16>
<image32x32>icons/mediumIcon.png</image32x32>
<image48x48>icons/bigIcon.png</image48x48>
<image128x128>icons/biggerIcon.png</image128x128>
</icon>
</application>
- + \ No newline at end of file diff --git a/docs/building/device-profiles.html b/docs/building/device-profiles.html index 46ac902ea..7ec86a8e9 100644 --- a/docs/building/device-profiles.html +++ b/docs/building/device-profiles.html @@ -16,13 +16,13 @@ - +

Device Profiles

Profiles are a mechanism for defining the classes of computing devices on which your application works. A profile defines a set of APIs and capabilities typically supported on a particular class of device. The available profiles include:

  • desktop
  • extendedDesktop
  • mobileDevice
  • extendedMobileDevice

You can define the profiles for your application in the application descriptor. Users of computers and devices in the included profiles can install your application, users of other computers and devices cannot. For example, if you include only the desktop profile in your application descriptor, users can install and run your application only on desktop computers.

If you include a profile that your application does not truly support, the user experience in such environments may be poor. If you do not specify any profiles in the application descriptor, then AIR does not limit your application. You can package the application in any of the supported formats, and users with devices from any profile can install it — however, it may fail to work properly at runtime.

Where possible, profile restrictions are enforced when you package your application. For example, if you include only the extendedDesktop profile, then you cannot package your application as an AIR file — only as a native installer. Likewise, if you do not include the mobileDevice profile, you cannot package your application as an Android APK.

A single computing device can support more than one profile. For example, AIR on desktop computers support applications from both the desktop and the extendedDesktop profiles. However, an extended desktop profile application can communicate with native processes and MUST be packaged as a native installer (exe, dmg, deb, or rpm). A desktop profile application, on the other hand, cannot communicate with a native process. A desktop profile application can be packaged as either an AIR file or a native installer.

The inclusion of a feature in a profile indicates that support for that feature is common in the class of devices for which that profile is defined. However, it does not mean that every device in a profile supports every feature. For example, most, but not all, mobile phones contain an accelerometer. Classes and features that do not have universal support usually have a boolean property that you can check before using the feature. In the accelerometer case, for instance, you can test the static property Accelerometer.isSupported to determine whether the current device has a supported accelerometer.

There are following profiles can be assigned to your AIR application using the supportedProfiles element in the application descriptor:

  • Desktop: The desktop profile defines a set of capabilities for AIR applications that are installed as AIR files on a desktop computer. These applications install and run on supported desktop platforms (Mac OS, Windows, and Linux). AIR applications developed in versions of AIR before AIR 2 can be considered to be in the desktop profile. Some APIs are non-functioning in this profile. For example, desktop applications cannot communicate with native processes.

  • Extended desktop: The extended desktop profile defines a set of capabilities for AIR applications that are packaged into and installed with a native installer. These native installers are EXE files on Windows, DMG files on Mac OS, and BIN, DEB, or RPM files on Linux. Extended desktop applications have additional capabilities that are not available in desktop profile applications. For more information, see Packaging a desktop native installer.

  • Mobile device: The mobile device profile defines a set of capabilities for applications that are installed on mobile devices such as cell phones and tablets. These applications install and run on supported mobile platforms, including Android, Blackberry Tablet OS, and iOS.

  • Extended mobile device: The extended mobile device profile defines an extended set of capabilities for applications that are installed on mobile devices. Currently, there are no devices that support this profile.

Restricting target profiles in the application descriptor file

As of AIR 2, the application descriptor file includes a supportedProfiles element, which lets you restrict target profiles. For example, the following setting specifies that the application is only available in the desktop profile:

<supportedProfiles>desktop</supportedProfiles>

When this element is set, the application can only be packaged in the profiles you list. Use the following values:

  • desktop — The desktop profile
  • extendedDesktop — The extended desktop profile
  • mobileDevice — The mobile device profile

The supportedProfiles element is optional. When you do not include this element in the application descriptor file, the application can be packaged and deployed for any profile.

To specify multiple profiles in the supportedProfiles element, separate each with a space character, as in the following:

<supportedProfiles>desktop extendedDesktop</supportedProfiles>

Capabilities of different profiles

The following table lists the classes and features that are not supported in all profiles.

Class or FeaturedesktopextendedDesktopmobileDevice
Accelerometer (Accelerometer.isSupported)NoNoCheck
Accessibility (Capabilities.hasAccessibility)YesYesNo
Acoustic echo cancellation (Microphone.getEnhancedMicrophone())YesYesNo
ActionScript 2YesYesNo
CacheAsBitmap matrixNoNoYes
Camera (Camera.isSupported)YesYesYes
CameraRollNoNoYes
CameraUI (CameraUI.isSupported)NoNoYes
Captive runtime bundlesYesYesYes
ContextMenu (ContextMenu.isSupported)YesYesNo
DatagramSocket (DatagramSocket.isSupported)YesYesYes
DockIcon (NativeApplication.supportsDockIcon)CheckCheckNo
Drag-and-drop (NativeDragManager.isSupported)YesYesCheck
EncryptedLocalStore (EncryptedLocalStore.isSupported)YesYesYes
Flash Access (DRMManager.isSupported)YesYesNo
GameInput (GameInput.isSupported)NoNoNo
Geolocation (Geolocation.isSupported)NoNoCheck
HTMLLoader (HTMLLoader.isSupported)YesYesNo
IME (IME.isSupported)YesYesCheck
LocalConnection (LocalConnection.isSupported)YesYesNo
Microphone (Microphone.isSupported)YesYesCheck
Multichannel audio (Capabilities.hasMultiChannelAudio())NoNoNo
Native ExtensionsNoYesYes
NativeMenu (NativeMenu.isSupported)YesYesNo
NativeProcess (NativeProcess.isSupported)NoYesNo
NativeWindow (NativeWindow.isSupported)YesYesNo
NetworkInfo (NetworkInfo.isSupported)YesYesCheck
Open files with default applicationLimitedYesNo
PrintJob (PrintJob.isSupportedYesYesNo
SecureSocket (SecureSocket.isSupported)YesYesCheck
ServerSocket (ServerSocket.isSupported)YesYesYes
ShaderYesYesLimited
Stage3D (Stage.stage3Ds.length)YesYesYes
Stage orientation (Stage.supportsOrientationChange)NoNoYes
StageVideoNoNoCheck
StageWebView (StageWebView.isSupported)YesYesYes
Start application at login (NativeApplication.supportsStartAtLogin)YesYesNo
StorageVolumeInfo (StorageVolumeInfo.isSupported)YesYesNo
System idle modeNoNoYes
SystemTrayIcon (NativeApplication.supportsSystemTrayIcon)CheckCheckNo
Text Layout Framework inputYesYesNo
Updater (Updater.isSupported)YesNoNo
XMLSignatureValidator (XMLSignatureValidator.isSupported)YesYesNo

The entries in the table have the following meanings:

  • Check — The feature is supported on some, but not all devices in the profile. You should check at runtime whether the feature is supported before using it.
  • Limited — The feature is supported, but has significant limitations. See the relevant documentation for more information.
  • No — The feature is not supported in the profile.
  • Yes — The feature is supported in the profile. Note that individual computing devices make lack the hardware necessary for a feature. For example, not all phones have cameras.

Specifying profiles when debugging with ADL

ADL checks if you specify supported profiles in the supportedProfiles element of the application descriptor file. If you do, by default ADL uses the first supported profile listed as the profile when debugging.

You can specify a profile for the ADL debug session by using the -profile command-line argument. (See AIR Debug Launcher (ADL).) You can use this argument regardless of whether you specify a profile in the supportedProfiles element in the application descriptor file. However, if you do specify a supportedProfiles element, it must include the profile you specify in the command line. Otherwise, ADL generates an error.

- + \ No newline at end of file diff --git a/docs/building/using-native-extensions.html b/docs/building/using-native-extensions.html index 3035ab3ef..5a3be6e28 100644 --- a/docs/building/using-native-extensions.html +++ b/docs/building/using-native-extensions.html @@ -16,13 +16,13 @@ - +

Using native extensions

Native extensions for Adobe AIR provide ActionScript APIs that provide you access to device-specific functionality programmed in native code. Native extension developers sometimes work with device manufacturers, and sometimes are third-party developers.

A native extension is a combination of:

  • ActionScript classes
  • Native code

However, as an AIR application developer using a native extension, you work with only the ActionScript classes.

Native extensions are useful in the following situations:

  • The native code implementation provides access to platform-specific features. These platform-specific features are not available in the built-in ActionScript classes, and are not possible to implement in application-specific ActionScript classes. The native code implementation can provide such functionality because it has access to device-specific hardware and software.

  • A native code implementation can sometimes be faster than an implementation that uses only ActionScript.

  • The native code implementation can provide ActionScript access to legacy native code.

AIR Native Extension (ANE) files

Native extension developers package a native extension into an ANE file. An ANE file is an archive file that contains the necessary libraries and resources for the native extension.

Note for some devices, the ANE file contains the native code library that the native extension uses. But for other devices, the native code library is installed on the device. In some cases, the native extension has no native code at all for a particular device; it is implemented with ActionScript only.

As an AIR application developer, you use the ANE file as follows:

  • Include the ANE file in the application’s library path in the same way you include a SWC file in the library path. This action allows the application to reference the extension’s ActionScript classes.

    note

    When compiling your application, be sure to use dynamic linking for the ANE. If you use Flash Builder, specify External on the ActionScript Builder Path Properties panel; if you use the command line, specify -external-library-path.

  • Package the ANE file with the AIR application.

Native extensions versus the NativeProcess ActionScript class

ActionScript 3.0 provides a NativeProcess class. This class lets an AIR application execute native processes on the host operating system. This capability is similar to native extensions, which provide access to platform-specific features and libraries. When deciding on using the NativeProcess class versus using a native extension, consider the following:

  • Only the extendedDesktop AIR profile supports the NativeProcess class. Therefore, for applications with the AIR profiles mobileDevice and extendedMobileDevice, native extensions are the only choice.

  • Native extension developers often provide native implementations for various platforms, but the ActionScript API they provide is typically the same across platforms. When using the NativeProcess class, ActionScript code to start the native process can vary among the different platforms.

  • The NativeProcess class starts a separate process, whereas a native extension runs in the same process as the AIR application. Therefore, if you are concerned about code crashing, using the NativeProcess class is safer. However, the separate process means that you possibly have interprocess communication handling to implement.

Native extensions versus ActionScript class libraries (SWC files)

A SWC file is an ActionScript class library in an archive format. The SWC file contains a SWF file and other resource files. The SWC file is a convenient way to share ActionScript classes instead of sharing individual ActionScript code and resource files.

A native extension package is an ANE file. Like a SWC file, an ANE file is also an ActionScript class library, containing a SWF file and other resource files in an archive format. However, the most important difference between an ANE file and a SWC file is that only an ANE file can contain a native code library.

note

When compiling your application, be sure to use dynamic linking for the ANE file. If you use Flash Builder, specify External on the ActionScript Builder Path Properties panel; if you use the command line, specify -external-library-path.

Supported devices

Starting in AIR 3, you can use native extensions in applications for the following devices:

  • Android devices, starting with Android 2.2
  • iOS devices, starting with iOS 4.0
  • iOS Simulator, starting with AIR 3.3
  • Blackberry PlayBook
  • Windows desktop devices that support AIR 3.0
  • Mac OS X desktop devices that support AIR 3.0

Often, the same native extension targets multiple platforms. The extension’s ANE file contains ActionScript and native libraries for each supported platform. Usually, the ActionScript libraries have the same public interfaces for all the platforms. The native libraries are necessarily different.

Sometimes a native extension supports a default platform. The default platform’s implementation has only ActionScript code, but no native code. If you package an application for a platform that the extension does not specifically support, the application uses the default implementation when it executes. For example, consider an extension that provides a feature that applies only to mobile devices. The extension can also provide a default implementation that a desktop application can use to simulate the feature.

Supported device profiles

The following AIR profiles support native extensions:

  • extendedDesktop, starting in AIR 3.0
  • mobileDevice, starting in AIR 3.0
  • extendedMobileDevice, starting in AIR 3.0

Task list for using a native extension

To use a native extension in your application, do the following tasks:

  1. Declare the extension in your application descriptor file.
  2. Include the ANE file in your application’s library path.
  3. Package the application.

Declaring the extension in your application descriptor

All AIR applications have an application descriptor file. When an application uses a native extension, the application descriptor file includes an <extensions> element. For example:

<extensions>
<extensionID>com.example.Extension1</extensionID>
<extensionID>com.example.Extension2</extensionID>
</extensions>

The extensionID element has the same value as the id element in the extension descriptor file. The extension descriptor file is an XML file called extension.xml. It is packaged in the ANE file. You can use an archive extractor tool to look at the extension.xml file.

note

If you use the AIR Package Manager (apm) to manage your extensions then it should manage the <extensions> element in your application descriptor as part of the application descriptor generation process. See Install APM to get started using apm.

Including the ANE file in your application’s library path

To compile an application that uses a native extension, include the ANE file in your library path.

There are a range of tutorials for adding an extension to your IDE on the airnativeextensions documentation site.

Packaging an application that uses native extensions

Most IDEs will package the extensions for you automatically once you have correctly added the extension identifier to your application descriptor and added the extension to the library path.

You can also use ADT directly to package an application that uses native extensions. You can find details about using ADT are at AIR Developer Tool (ADT).

For example, the following ADT command creates a DMG file (a native installer file for Mac OS X) for an application that uses native extensions:

adt -package
-storetype pkcs12
-keystore myCert.pfx
-target native
myApp.dmg
application.xml
index.html resources
-extdir extensionsDir

The following command creates an APK package for an Android device:

adt -package
-target apk
-storetype pkcs12 -keystore ../codesign.p12
myApp.apk
myApp-app.xml
myApp.swf icons
-extdir extensionsDir

The following command creates an iOS package for an iPhone application:

adt -package
-target ipa-ad-hoc
-storetype pkcs12 -keystore ../AppleDistribution.p12
-provisioning-profile AppleDistribution.mobileprofile
myApp.ipa
myApp-app.xml
myApp.swf icons Default.png
-extdir extensionsDir

Note the following:

  • Use a native installer package type
  • Specify the extension directory
  • Make sure that the ANE file supports the application’s target device (or contains a default implementation)

Use a native installer package type

The application package must be a native installer. You cannot create a cross-platform AIR package (a .air package) for an application that uses a native extension, because native extensions usually contain native code. However, typically a native extension supports multiple native platforms with the same ActionScript APIs. In these cases, you can use the same ANE file in different native installer packages.

The following table summarizes the value to use for the -target option of the ADT command:

Application’s target platform-target
Mac OS X or Windows desktop devices-target native
-target bundle
Android-target apk
or other Android package targets
iOS-target ipa-ad-hoc
or other iOS package targets
iOS Simulator-target ipa-test-interpreter-simulator
-target ipa-debug-interpreter-simulator

Specify the extension directory

Use the ADT option -extdir to tell ADT the directory that contains the native extensions (ANE files).

For details about this option, see File and path options.

Make sure that the ANE file supports the application’s target device

When providing an ANE file, the native extension developer informs you which platforms the extension supports. You can also use an archive extractor tool to look at the contents of the ANE file. The extracted files include a directory for each supported platform.

info

A good ANE developer should include a "default" implementation in an extension. This implementation will be used when there is no specific native implementation for the current platform.

However there are extensions that don't contain this "default" implementation. In this case your code will fail to run if you attempt to access the functionality of the extension.

Knowing which platforms the extension supports is important when packaging the application that uses the ANE file. Consider the following rules:

  • To create an Android application package, the ANE file must include the Android-ARM platform. Alternatively, the ANE file must include the default platform and at least one other platform.

  • To create an iOS application package, the ANE file must include the iPhone-ARM platform. Alternatively, the ANE file must include the default platform and at least one other platform.

  • To create an iOS Simulator application package, the ANE file must include the iPhone-x86 platform.

  • To create a Mac OS X application package, the ANE file must include the MacOS-x86 platform. Alternatively, the ANE file must include the default platform and at least one other platform.

  • To create a Windows application package, the ANE file must include the Windows-x86 platform. Alternatively, the ANE file must include the default platform and at least one other platform.

More Help topics

- + \ No newline at end of file diff --git a/docs/development.html b/docs/development.html index ebe352364..370072c55 100644 --- a/docs/development.html +++ b/docs/development.html @@ -16,13 +16,13 @@ - +
- + \ No newline at end of file diff --git a/docs/development/appendixes.html b/docs/development/appendixes.html index 1640fec0d..5765335b2 100644 --- a/docs/development/appendixes.html +++ b/docs/development/appendixes.html @@ -16,13 +16,13 @@ - + - + \ No newline at end of file diff --git a/docs/development/appendixes/adobe-graphics-assembly-language-agal.html b/docs/development/appendixes/adobe-graphics-assembly-language-agal.html index 5ebf376ac..ee2864f15 100644 --- a/docs/development/appendixes/adobe-graphics-assembly-language-agal.html +++ b/docs/development/appendixes/adobe-graphics-assembly-language-agal.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/development/appendixes/adobe-graphics-assembly-language-agal/agal-bytecode-format.html b/docs/development/appendixes/adobe-graphics-assembly-language-agal/agal-bytecode-format.html index 6bbe45d8f..fd994dbbb 100644 --- a/docs/development/appendixes/adobe-graphics-assembly-language-agal/agal-bytecode-format.html +++ b/docs/development/appendixes/adobe-graphics-assembly-language-agal/agal-bytecode-format.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ point value used is b/8.0 (8 bits)

T = Register type, must be 5, Sampler (4 bits)

F = Filter (0=nearest,1=linear) (4 bits)

M = Mipmap (0=disable,1=nearest, 2=linear)

W = Wrapping (0=clamp,1=repeat)

S = Special flag bits (must be 0)

D = Dimension (0=2D, 1=Cube)

Program Registers

The number of registers used depend upon the Context3D profile used. The number of registers along with their usage are defined in the following table:

NameValueAGALAGAL2AGAL3Usage
Number per fragment programNumber per vertex programNumber per fragment programNumber per vertex programNumber per fragment programNumber per vertex program
Context 3D Profiles SupportBelow StandardStandardStandard Extended
SWF versionBelow 252528 and above
Attribute0NA8NA8NA16Vertex shader input; read from a vertex buffer specified using Context3D.setVertexBufferAt().
Constant12812864250200250Shader input; set using the Context3D.setProgramConstants() family of functions.
Temporary28826262626Temporary register for computation; not accessible outside program.
Output3111111Shader output: in a vertex program, the output is the clip space position; in a fragment program, the output is a color.
Varying48810101010Transfer interpolated data between vertex and fragment shaders. The varying registers from the vertex program are applied as input to the fragment program. Values are interpolated according to the distance from the triangle vertices.
Sampler58NA16NA16NAFragment shader input; read from a texture specified using Context3D.setTextureAt().
Fragment register6NANA1NA1NAIt is write-only and used to re-write z-value (or depth value) written in vertex shader.
Tokens20010242048

The latest AGAL Mini Assembler can be found here.

- + \ No newline at end of file diff --git a/docs/development/appendixes/how-to-use-actionscript-examples.html b/docs/development/appendixes/how-to-use-actionscript-examples.html index bd03b03e6..22742c501 100644 --- a/docs/development/appendixes/how-to-use-actionscript-examples.html +++ b/docs/development/appendixes/how-to-use-actionscript-examples.html @@ -16,7 +16,7 @@ - + @@ -209,7 +209,7 @@ screen has different needs than a desktop display. For more information about developing applications for mobile devices, see Optimizing Performance for the Flash Platform.

- + \ No newline at end of file diff --git a/docs/development/appendixes/sql-support-in-local-databases.html b/docs/development/appendixes/sql-support-in-local-databases.html index eaabc728d..1f6c99caf 100644 --- a/docs/development/appendixes/sql-support-in-local-databases.html +++ b/docs/development/appendixes/sql-support-in-local-databases.html @@ -16,7 +16,7 @@ - + @@ -49,7 +49,7 @@ the "0 or more" quantifier.

  • . A period character represents a literal period.

  • , A comma character represents a literal comma.

  • () A pair of parentheses surrounding a single clause or item indicates that the parentheses are required, literal parentheses characters.

  • Other characters, unless otherwise indicated, represent those literal characters.

  • Supported SQL syntax

  • Data type support

  • SQL error detail messages, ids, and arguments

  • - + \ No newline at end of file diff --git a/docs/development/appendixes/sql-support-in-local-databases/data-type-support.html b/docs/development/appendixes/sql-support-in-local-databases/data-type-support.html index 170e72abe..cea250752 100644 --- a/docs/development/appendixes/sql-support-in-local-databases/data-type-support.html +++ b/docs/development/appendixes/sql-support-in-local-databases/data-type-support.html @@ -16,7 +16,7 @@ - + @@ -176,7 +176,7 @@ kind of expression) in that position. If for a given compound SELECT column none of the component SELECT statements return a column value, no affinity is applied to the values from that column before they are compared.

    - + \ No newline at end of file diff --git a/docs/development/appendixes/sql-support-in-local-databases/sql-error-detail-messages-ids-and-arguments.html b/docs/development/appendixes/sql-support-in-local-databases/sql-error-detail-messages-ids-and-arguments.html index 9f8e93fcd..24230c70a 100644 --- a/docs/development/appendixes/sql-support-in-local-databases/sql-error-detail-messages-ids-and-arguments.html +++ b/docs/development/appendixes/sql-support-in-local-databases/sql-error-detail-messages-ids-and-arguments.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ detailArguments values are substituted in by the runtime. This list can be used as a source for localizing the error messages that can occur in SQL database operations.

    SQLError detailIDEnglish error detail message and parameters
    1001Connection closed.
    1102Database must be open to perform this operation.
    1003%s [,|and %s] parameter name(s) found in parameters property but not in the SQL specified.
    1004Mismatch in parameter count. Found %d in SQL specified and %d value(s) set in parameters property. Expecting values for %s [,|and %s].
    1005Auto compact could not be turned on.
    1006The pageSize value could not be set.
    1007The schema object with name '%s' of type '%s' in database '%s' was not found.
    1008The schema object with name '%s' in database '%s' was not found.
    1009No schema objects with type '%s' in database '%s' were found.
    1010No schema objects in database '%s' were found.
    2001Parser stack overflow.
    2002Too many arguments on function '%s'
    2003near '%s': syntax error
    2004there is already another table or index with this name: '%s'
    2005PRAGMA is not allowed in SQL.
    2006Not a writable directory.
    2007Unknown or unsupported join type: '%s %s %s'
    2008RIGHT and FULL OUTER JOINs are not currently supported.
    2009A NATURAL join may not have an ON or USING clause.
    2010Cannot have both ON and USING clauses in the same join.
    2011Cannot join using column '%s' - column not present in both tables.
    2012Only a single result allowed for a SELECT that is part of an expression.
    2013No such table: '[%s.]%s'
    2014No tables specified.
    2015Too many columns in result set|too many columns on '%s'.
    2016%s ORDER|GROUP BY term out of range - should be between 1 and %d
    2017Too many terms in ORDER BY clause.
    2018%s ORDER BY term out of range - should be between 1 and %d.
    2019%r ORDER BY term does not match any column in the result set.
    2020ORDER BY clause should come after '%s' not before.
    2021LIMIT clause should come after '%s' not before.
    2022SELECTs to the left and right of '%s' do not have the same number of result columns.
    2023A GROUP BY clause is required before HAVING.
    2024Aggregate functions are not allowed in the GROUP BY clause.
    2025DISTINCT in aggregate must be followed by an expression.
    2026Too many terms in compound SELECT.
    2027Too many terms in ORDER|GROUP BY clause
    2028Temporary trigger may not have qualified name
    2030Trigger '%s' already exists
    2032Cannot create BEFORE|AFTER trigger on view: '%s'.
    2033Cannot create INSTEAD OF trigger on table: '%s'.
    2034No such trigger: '%s'
    2035Recursive triggers not supported ('%s').
    2036No such column: %s[.%s[.%s]]
    2037VACUUM is not allowed from SQL.
    2043Table '%s': indexing function returned an invalid plan.
    2044At most %d tables in a join.
    2046Cannot add a PRIMARY KEY column.
    2047Cannot add a UNIQUE column.
    2048Cannot add a NOT NULL column with default value NULL.
    2049Cannot add a column with non-constant default.
    2050Cannot add a column to a view.
    2051ANALYZE is not allowed in SQL.
    2052Invalid name: '%s'
    2053ATTACH is not allowed from SQL.
    2054%s '%s' cannot reference objects in database '%s'
    2055Access to '[%s.]%s.%s' is prohibited.
    2056Not authorized.
    2058No such view: '[%s.]%s'
    2060Temporary table name must be unqualified.
    2061Table '%s' already exists.
    2062There is already an index named: '%s'
    2064Duplicate column name: '%s'
    2065Table '%s' has more than one primary key.
    2066AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
    2067No such collation sequence: '%s'
    2068Parameters are not allowed in views.
    2069View '%s' is circularly defined.
    2070Table '%s' may not be dropped.
    2071Use DROP VIEW to delete view '%s'
    2072Use DROP TABLE to delete table '%s'
    2073Foreign key on '%s' should reference only one column of table '%s'
    2074Number of columns in foreign key does not match the number of columns in the referenced table.
    2075Unknown column '%s' in foreign key definition.
    2076Table '%s' may not be indexed.
    2077Views may not be indexed.
    2080Conflicting ON CONFLICT clauses specified.
    2081No such index: '%s'
    2082Index associated with UNIQUE or PRIMARY KEY constraint cannot be dropped.
    2083BEGIN is not allowed in SQL.
    2084COMMIT is not allowed in SQL.
    2085ROLLBACK is not allowed in SQL.
    2086Unable to open a temporary database file for storing temporary tables.
    2087Unable to identify the object to be reindexed.
    2088Table '%s' may not be modified.
    2089Cannot modify '%s' because it is a view.
    2090Variable number must be between ?0 and ?%d\<
    2092Misuse of aliased aggregate '%s'
    2093Ambiguous column name: '[%s.[%s.]]%s'
    2094No such function: '%s'
    2095Wrong number of arguments to function '%s'
    2096Subqueries prohibited in CHECK constraints.
    2097Parameters prohibited in CHECK constraints.
    2098Expression tree is too large (maximum depth %d)
    2099RAISE() may only be used within a trigger-program
    2100Table '%s' has %d columns but %d values were supplied
    2101Database schema is locked: '%s'
    2102Statement too long.
    2103Unable to delete/modify collation sequence due to active statements
    2104Too many attached databases - max %d
    2105Cannot ATTACH database within transaction.
    2106Database '%s' is already in use.
    2108Attached databases must use the same text encoding as main database.
    2200Out of memory.
    2201Unable to open database.
    2202Cannot DETACH database within transaction.
    2203Cannot detach database: '%s'
    2204Database '%s' is locked.
    2205Unable to acquire a read lock on the database.
    2206[column|columns] '%s'[,'%s'] are not [unique|is] not unique.
    2207Malformed database schema.
    2208Unsupported file format.
    2209Unrecognized token: '%s'
    2300Could not convert text value to numeric value.
    2301Could not convert string value to date.
    2302Could not convert floating point value to integer without loss of data.
    2303Cannot rollback transaction - SQL statements in progress.
    2304Cannot commit transaction - SQL statements in progress.
    2305Database table is locked: '%s'
    2306Read-only table.
    2307String or blob too big.
    2309Cannot open indexed column for writing.
    2400Cannot open value of type %s.
    2401No such rowid: %s\<
    2402Object name reserved for internal use: '%s'
    2403View '%s' may not be altered.
    2404Default value of column '%s' is not constant.
    2405Not authorized to use function '%s'
    2406Misuse of aggregate function '%s'
    2407Misuse of aggregate: '%s'
    2408No such database: '%s'
    2409Table '%s' has no column named '%s'
    2501No such module: '%s'
    2508No such savepoint: '%s'
    2510Cannot rollback - no transaction is active.
    2511Cannot commit - no transaction is active.
    - + \ No newline at end of file diff --git a/docs/development/appendixes/sql-support-in-local-databases/supported-sql-syntax.html b/docs/development/appendixes/sql-support-in-local-databases/supported-sql-syntax.html index 2acbe00b0..c1c1635c9 100644 --- a/docs/development/appendixes/sql-support-in-local-databases/supported-sql-syntax.html +++ b/docs/development/appendixes/sql-support-in-local-databases/supported-sql-syntax.html @@ -16,7 +16,7 @@ - + @@ -560,7 +560,7 @@ columns.

    false
    used to represent the literal boolean value false, for working with BOOLEAN columns.

    - + \ No newline at end of file diff --git a/docs/development/asdoc-comments.html b/docs/development/asdoc-comments.html index b44453780..37697a4b2 100644 --- a/docs/development/asdoc-comments.html +++ b/docs/development/asdoc-comments.html @@ -16,7 +16,7 @@ - + @@ -52,7 +52,7 @@ Hidden text does not appear in the ASDoc HTML output, but does appear in the generated HTML file so you should not use it for confidential information. The following example uses the hide class:

    /**
    * Dispatched when the user presses the Button control.
    * If the `autoRepeat` property is `true`,
    * this event is dispatched repeatedly as long as the button stays down.
    *
    * <span class="hide">This text is hidden.</span>
    * @eventType mx.events.FlexEvent.BUTTON_DOWN
    */

    Rules for parsing ASDoc comments

    The following rules summarize how ASDoc processes an ActionScript file:

    • If an ASDoc comment precedes an ActionScript element, ASDoc copies the comment and code element to the output file.
    • If an ActionScript element is not preceded by an ASDoc comment, ASDoc copies the code element to the output file with an empty description.
    • If an ASDoc comment contains the @private ASDoc tag, the associated ActionScript element and the ASDoc comment are ignored.
    • The comment text should always precede any @ tags, otherwise the comment text is interpreted as an argument to an @ tag. The only exception is the @private tag, which can appear anywhere in an ASDoc comment.
    • HTML tags, such as <p></p>, and <ul></ul>, in ASDoc comments are passed through to the output.
    • HTML tags must use XML style conventions, which means there must be a beginning and ending tag. For example, an <li> tag must always be closed by a </li> tag.
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction.html b/docs/development/client-system-interaction.html index 0c1d5040a..f2b8c7f2a 100644 --- a/docs/development/client-system-interaction.html +++ b/docs/development/client-system-interaction.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/air-application-invokation-and-termination.html b/docs/development/client-system-interaction/air-application-invokation-and-termination.html index 014cb4a91..b037fb942 100644 --- a/docs/development/client-system-interaction/air-application-invokation-and-termination.html +++ b/docs/development/client-system-interaction/air-application-invokation-and-termination.html @@ -16,7 +16,7 @@ - + @@ -183,7 +183,7 @@ Launching an installed AIR application from the browser

    Setting AIR application properties

    Presenting a custom application update user interface

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/client-system-environment.html b/docs/development/client-system-interaction/client-system-environment.html index e176c5d0f..0b7ba91e4 100644 --- a/docs/development/client-system-interaction/client-system-environment.html +++ b/docs/development/client-system-interaction/client-system-environment.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ It also shows typical uses for application domains.

    More Help topics

    flash.system.System

    flash.system.Capabilities

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/client-system-environment/basics-of-the-client-system-environment.html b/docs/development/client-system-interaction/client-system-environment/basics-of-the-client-system-environment.html index 1934d90d9..4e7fa71ca 100644 --- a/docs/development/client-system-interaction/client-system-environment/basics-of-the-client-system-environment.html +++ b/docs/development/client-system-interaction/client-system-environment/basics-of-the-client-system-environment.html @@ -16,7 +16,7 @@ - + @@ -42,7 +42,7 @@ In programming terms, a client is the part of an application (or whole application) that runs on an individual's computer and is used by a single user. The client system is the underlying operating system on the user's computer.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/client-system-environment/capabilities-example-detecting-system-capabilities.html b/docs/development/client-system-interaction/client-system-environment/capabilities-example-detecting-system-capabilities.html index 00c1077b9..94a900bd8 100644 --- a/docs/development/client-system-interaction/client-system-environment/capabilities-example-detecting-system-capabilities.html +++ b/docs/development/client-system-interaction/client-system-environment/capabilities-example-detecting-system-capabilities.html @@ -16,7 +16,7 @@ - + @@ -71,7 +71,7 @@ the temporary array is converted into a string using the Array.join() method. The array uses an ampersand (&) as a delimiter, which allows ActionScript to easily parse the data using the URLVariables class.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/client-system-environment/using-the-capabilities-class.html b/docs/development/client-system-interaction/client-system-environment/using-the-capabilities-class.html index 91cd17320..6a983dec6 100644 --- a/docs/development/client-system-interaction/client-system-environment/using-the-capabilities-class.html +++ b/docs/development/client-system-interaction/client-system-environment/using-the-capabilities-class.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ that the client is using:

    var versionString:String = Capabilities.version;
    var pattern:RegExp = /^(\w*) (\d*),(\d*),(\d*),(\d*)$/;
    var result:Object = pattern.exec(versionString);
    if (result != null)
    {
    trace("input: " + result.input);
    trace("platform: " + result[1]);
    trace("majorVersion: " + result[2]);
    trace("minorVersion: " + result[3]);
    trace("buildNumber: " + result[4]);
    trace("internalBuildNumber: " + result[5]);
    }
    else
    {
    trace("Unable to match RegExp.");
    }

    If you want to send the user's system capabilities to a server-side script so that the information can be stored in a database, you can use the following ActionScript code:

    var url:String = "log_visitor.cfm";
    var request:URLRequest = new URLRequest(url);
    request.method = URLRequestMethod.POST;
    request.data = new URLVariables(Capabilities.serverString);
    var loader:URLLoader = new URLLoader(request);
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/client-system-environment/using-the-system-class.html b/docs/development/client-system-interaction/client-system-environment/using-the-system-class.html index 1229e1694..11cd2d922 100644 --- a/docs/development/client-system-interaction/client-system-environment/using-the-system-class.html +++ b/docs/development/client-system-interaction/client-system-environment/using-the-system-class.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ user wants to report a potential bug with an application.

    private function securityErrorHandler(event:SecurityErrorEvent):void
    {
    var errorString:String = "[" + event.type + "] " + event.text;
    trace(errorString);
    System.setClipboard(errorString);
    }

    Flash Player 10 and AIR 1.0

    You can use the Clipboard class to read and write clipboard data in response to a user event. In AIR, a user event is not required for code running in the application sandbox to access the clipboard.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/display-screens-in-air.html b/docs/development/client-system-interaction/display-screens-in-air.html index 21d70d81d..737dd6347 100644 --- a/docs/development/client-system-interaction/display-screens-in-air.html +++ b/docs/development/client-system-interaction/display-screens-in-air.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ screen. To identify the current screen of the window, the example calls Screen.getScreensForRectangle(), passing in the window bounds.

    package
    {
    import flash.display.Sprite;
    import flash.display.Screen;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;

    public class ScreenExample extends Sprite
    {
    public function ScreenExample()
    {
    stage.align = StageAlign.TOP_LEFT;
    stage.scaleMode = StageScaleMode.NO_SCALE;

    stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey);
    }

    private function onKey(event:KeyboardEvent):void{
    if(Screen.screens.length > 1){
    switch(event.keyCode){
    case Keyboard.LEFT :
    moveLeft();
    break;
    case Keyboard.RIGHT :
    moveRight();
    break;
    case Keyboard.UP :
    moveUp();
    break;
    case Keyboard.DOWN :
    moveDown();
    break;
    }
    }
    }

    private function moveLeft():void{
    var currentScreen = getCurrentScreen();
    var left:Array = Screen.screens;
    left.sort(sortHorizontal);
    for(var i:int = 0; i < left.length - 1; i++){
    if(left[i].bounds.left < stage.nativeWindow.bounds.left){
    stage.nativeWindow.x +=
    left[i].bounds.left - currentScreen.bounds.left;
    stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top;
    }
    }
    }

    private function moveRight():void{
    var currentScreen:Screen = getCurrentScreen();
    var left:Array = Screen.screens;
    left.sort(sortHorizontal);
    for(var i:int = left.length - 1; i > 0; i--){
    if(left[i].bounds.left > stage.nativeWindow.bounds.left){
    stage.nativeWindow.x +=
    left[i].bounds.left - currentScreen.bounds.left;
    stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top;
    }
    }
    }

    private function moveUp():void{
    var currentScreen:Screen = getCurrentScreen();
    var top:Array = Screen.screens;
    top.sort(sortVertical);
    for(var i:int = 0; i < top.length - 1; i++){
    if(top[i].bounds.top < stage.nativeWindow.bounds.top){
    stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left;
    stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top;
    break;
    }
    }
    }

    private function moveDown():void{
    var currentScreen:Screen = getCurrentScreen();

    var top:Array = Screen.screens;
    top.sort(sortVertical);
    for(var i:int = top.length - 1; i > 0; i--){
    if(top[i].bounds.top > stage.nativeWindow.bounds.top){
    stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left;
    stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top;
    break;
    }
    }
    }

    private function sortHorizontal(a:Screen,b:Screen):int{
    if (a.bounds.left > b.bounds.left){
    return 1;
    } else if (a.bounds.left < b.bounds.left){
    return -1;
    } else {return 0;}
    }

    private function sortVertical(a:Screen,b:Screen):int{
    if (a.bounds.top > b.bounds.top){
    return 1;
    } else if (a.bounds.top < b.bounds.top){
    return -1;
    } else {return 0;}
    }

    private function getCurrentScreen():Screen{
    var current:Screen;
    var screens:Array = Screen.getScreensForRectangle(stage.nativeWindow.bounds);
    (screens.length > 0) ? current = screens[0] : current = Screen.mainScreen;
    return current;
    }
    }
    }

    More Help topics

    flash.display.Screen

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/geolocation.html b/docs/development/client-system-interaction/geolocation.html index 2f94a37c6..63c75e061 100644 --- a/docs/development/client-system-interaction/geolocation.html +++ b/docs/development/client-system-interaction/geolocation.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ location sensor. The update event is a GeolocationEvent object.

    More Help topics

    flash.sensors.Geolocation

    flash.events.GeolocationEvent

    Adobe recommends

    Flex 4.5: Using Geolocation(GPS) on a mobile device

    Brian Telintelo: Flex Pasta

    Geolocation tips and quirks

    Greg Wilson

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/geolocation/detecting-geolocation-changes.html b/docs/development/client-system-interaction/geolocation/detecting-geolocation-changes.html index 1e294321d..39493cce8 100644 --- a/docs/development/client-system-interaction/geolocation/detecting-geolocation-changes.html +++ b/docs/development/client-system-interaction/geolocation/detecting-geolocation-changes.html @@ -16,7 +16,7 @@ - + @@ -49,7 +49,7 @@ mobile phone triangulation) to obtain geolocation data. For these models, or on any iPhone that has the GPS disabled, a Geolocation object may only dispatch one or two initial update events.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing.html b/docs/development/client-system-interaction/printing.html index 5d5ef136f..0cbf91468 100644 --- a/docs/development/client-system-interaction/printing.html +++ b/docs/development/client-system-interaction/printing.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ class methods and properties to create a print job, read a user's print settings, and adjust a print job based on feedback from a Flash runtime and the user's operating system.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing/advanced-printing-techniques.html b/docs/development/client-system-interaction/printing/advanced-printing-techniques.html index 636256c40..8ddc23693 100644 --- a/docs/development/client-system-interaction/printing/advanced-printing-techniques.html +++ b/docs/development/client-system-interaction/printing/advanced-printing-techniques.html @@ -16,7 +16,7 @@ - + @@ -77,7 +77,7 @@ per inch.

  • isColor: The ability of the current printer to print color (returns true if the current printer can print color).

  • See Printing example: Page setup and print options.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing/basics-of-printing.html b/docs/development/client-system-interaction/printing/basics-of-printing.html index 516e1d95b..7ee78c3be 100644 --- a/docs/development/client-system-interaction/printing/basics-of-printing.html +++ b/docs/development/client-system-interaction/printing/basics-of-printing.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ The rotation of the printed content in relation to the paper—either horizontal (landscape) or vertical (portrait).

    Print job
    The page or set of pages that make up a single printout.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing/flash-runtime-tasks-and-system-printing.html b/docs/development/client-system-interaction/printing/flash-runtime-tasks-and-system-printing.html index ae03830a9..1032fccc6 100644 --- a/docs/development/client-system-interaction/printing/flash-runtime-tasks-and-system-printing.html +++ b/docs/development/client-system-interaction/printing/flash-runtime-tasks-and-system-printing.html @@ -16,7 +16,7 @@ - + @@ -85,7 +85,7 @@ PrintJob.start() on the PrintJob instance returns false, and the next PrintJob.addPage() on the PrintJob instance causes Flash Player or AIR to throw a run-time exception.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing/printing-a-page.html b/docs/development/client-system-interaction/printing/printing-a-page.html index 516ac9965..f12884d82 100644 --- a/docs/development/client-system-interaction/printing/printing-a-page.html +++ b/docs/development/client-system-interaction/printing/printing-a-page.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ properly to a user canceling a print job, see Working with exceptions and returns.

    To clear a PrintJob object's properties for any reason, set the PrintJob variable to null (as in myPrintJob = null).

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing/printing-example-multiple-page-printing.html b/docs/development/client-system-interaction/printing/printing-example-multiple-page-printing.html index 32b870297..c2292b16e 100644 --- a/docs/development/client-system-interaction/printing/printing-example-multiple-page-printing.html +++ b/docs/development/client-system-interaction/printing/printing-example-multiple-page-printing.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ content with a different sprite (in this case, sheet1 and sheet2), and then use PrintJob.addPage() for each sprite. The following code illustrates this technique:

    package
    {
    import flash.display.MovieClip;
    import flash.printing.PrintJob;
    import flash.printing.PrintJobOrientation;
    import flash.display.Stage;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.geom.Rectangle;

    public class PrintMultiplePages extends MovieClip
    {
    private var sheet1:Sprite;
    private var sheet2:Sprite;

    public function PrintMultiplePages():void
    {
    init();
    printPages();
    }

    private function init():void
    {
    sheet1 = new Sprite();
    createSheet(sheet1, "Once upon a time...", {x:10, y:50, width:80, height:130});
    sheet2 = new Sprite();
    createSheet(sheet2, "There was a great story to tell, and it ended quickly.\n\nThe end.", null);
    }

    private function createSheet(sheet:Sprite, str:String, imgValue:Object):void
    {
    sheet.graphics.beginFill(0xEEEEEE);
    sheet.graphics.lineStyle(1, 0x000000);
    sheet.graphics.drawRect(0, 0, 100, 200);
    sheet.graphics.endFill();

    var txt:TextField = new TextField();
    txt.height = 200;
    txt.width = 100;
    txt.wordWrap = true;
    txt.text = str;

    if (imgValue != null)
    {
    var img:Sprite = new Sprite();
    img.graphics.beginFill(0xFFFFFF);
    img.graphics.drawRect(imgValue.x, imgValue.y, imgValue.width, imgValue.height);
    img.graphics.endFill();
    sheet.addChild(img);
    }
    sheet.addChild(txt);
    }

    private function printPages():void
    {
    var pj:PrintJob = new PrintJob();
    var pagesToPrint:uint = 0;
    if (pj.start())
    {
    if (pj.orientation == PrintJobOrientation.LANDSCAPE)
    {
    throw new Error("Page is not set to an orientation of portrait.");
    }

    sheet1.height = pj.pageHeight;
    sheet1.width = pj.pageWidth;
    sheet2.height = pj.pageHeight;
    sheet2.width = pj.pageWidth;

    try
    {
    pj.addPage(sheet1);
    pagesToPrint++;
    }
    catch (error:Error)
    {
    // Respond to error.
    }

    try
    {
    pj.addPage(sheet2);
    pagesToPrint++;
    }
    catch (error:Error)
    {
    // Respond to error.
    }

    if (pagesToPrint > 0)
    {
    pj.send();
    }
    }
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing/printing-example-page-setup-and-print-options.html b/docs/development/client-system-interaction/printing/printing-example-page-setup-and-print-options.html index badc8cbfc..c1da54e34 100644 --- a/docs/development/client-system-interaction/printing/printing-example-page-setup-and-print-options.html +++ b/docs/development/client-system-interaction/printing/printing-example-page-setup-and-print-options.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ paper size (legal), and page orientation (landscape). It forces the Page Setup dialog to be displayed first, then starts the print job by displaying the Print dialog.

    package
    {
    import flash.printing.PrintJob;
    import flash.printing.PrintJobOrientation;
    import flash.printing.PaperSize;
    import flash.printing.PrintUIOptions;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.display.Stage;
    import flash.geom.Rectangle;

    public class PrintAdvancedExample extends Sprite
    {
    private var bg:Sprite = new Sprite();
    private var txt:TextField = new TextField();
    private var pj:PrintJob = new PrintJob();
    private var uiOpt:PrintUIOptions = new PrintUIOptions();

    public function PrintAdvancedExample():void
    {
    initPrintJob();
    initContent();
    draw();
    printPage();
    }

    private function printPage():void
    {
    //test for dialog support as a static property of PrintJob class
    if (PrintJob.supportsPageSetupDialog)
    {
    pj.showPageSetupDialog();
    }
    if (pj.start2(uiOpt, true))
    {
    try
    {
    pj.addPage(this, new Rectangle(0, 0, 100, 100));
    }
    catch (error:Error)
    {
    // Do nothing.
    }
    pj.send();
    }
    else
    {
    txt.text = "Print job terminated";
    pj.terminate();
    }
    }

    private function initContent():void
    {
    bg.graphics.beginFill(0x00FF00);
    bg.graphics.drawRect(0, 0, 100, 200);
    bg.graphics.endFill();

    txt.border = true;
    txt.text = "Hello World";
    }

    private function initPrintJob():void
    {
    pj.selectPaperSize(PaperSize.LEGAL);
    pj.orientation = PrintJobOrientation.LANDSCAPE;
    pj.copies = 2;
    pj.jobName = "Flash test print";
    }

    private function draw():void
    {
    addChild(bg);
    addChild(txt);
    txt.x = 50;
    txt.y = 50;
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing/printing-example-scaling-cropping-and-responding.html b/docs/development/client-system-interaction/printing/printing-example-scaling-cropping-and-responding.html index 32fa3101c..7111c126d 100644 --- a/docs/development/client-system-interaction/printing/printing-example-scaling-cropping-and-responding.html +++ b/docs/development/client-system-interaction/printing/printing-example-scaling-cropping-and-responding.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ original size for display on screen. If the user cancels the print job from the operating system's Print dialog box, the content in the Flash runtime changes to alert the user that the job has been canceled.

    package
    {
    import flash.printing.PrintJob;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.display.Stage;
    import flash.geom.Rectangle;

    public class PrintScaleExample extends Sprite
    {
    private var bg:Sprite;
    private var txt:TextField;

    public function PrintScaleExample():void
    {
    init();
    draw();
    printPage();
    }

    private function printPage():void
    {
    var pj:PrintJob = new PrintJob();
    txt.scaleX = 3;
    txt.scaleY = 2;
    if (pj.start())
    {
    trace(">> pj.orientation: " + pj.orientation);
    trace(">> pj.pageWidth: " + pj.pageWidth);
    trace(">> pj.pageHeight: " + pj.pageHeight);
    trace(">> pj.paperWidth: " + pj.paperWidth);
    trace(">> pj.paperHeight: " + pj.paperHeight);

    try
    {
    pj.addPage(this, new Rectangle(0, 0, 100, 100));
    }
    catch (error:Error)
    {
    // Do nothing.
    }
    pj.send();
    }
    else
    {
    txt.text = "Print job canceled";
    }
    // Reset the txt scale properties.
    txt.scaleX = 1;
    txt.scaleY = 1;
    }

    private function init():void
    {
    bg = new Sprite();
    bg.graphics.beginFill(0x00FF00);
    bg.graphics.drawRect(0, 0, 100, 200);
    bg.graphics.endFill();

    txt = new TextField();
    txt.border = true;
    txt.text = "Hello World";
    }

    private function draw():void
    {
    addChild(bg);
    addChild(txt);
    txt.x = 50;
    txt.y = 50;
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/printing/setting-size-scale-and-orientation.html b/docs/development/client-system-interaction/printing/setting-size-scale-and-orientation.html index 44e4766e6..8a77172b9 100644 --- a/docs/development/client-system-interaction/printing/setting-size-scale-and-orientation.html +++ b/docs/development/client-system-interaction/printing/setting-size-scale-and-orientation.html @@ -16,7 +16,7 @@ - + @@ -66,7 +66,7 @@ can read the page height and width settings and respond to them by embedding some logic into an if statement. The following code shows an example:

    if (mySprite.height > myPrintJob.pageHeight)
    {
    mySprite.scaleY = .75;
    }

    In addition, a page's margin settings can be determined by comparing the page and paper dimensions, as the following example illustrates:

    margin_height = (myPrintJob.paperHeight - myPrintJob.pageHeight) / 2;
    margin_width = (myPrintJob.paperWidth - myPrintJob.pageWidth) / 2;
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/using-workers-for-concurrency.html b/docs/development/client-system-interaction/using-workers-for-concurrency.html index 15dee0c98..2b7cf3042 100644 --- a/docs/development/client-system-interaction/using-workers-for-concurrency.html +++ b/docs/development/client-system-interaction/using-workers-for-concurrency.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ execution.

    The ActionScript concurrency apis are available on desktop platforms only in Flash Player 11.4 and later, and AIR 3.4 and later. Concurrency is not supported in AIR for mobile platforms.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/using-workers-for-concurrency/communicating-between-workers.html b/docs/development/client-system-interaction/using-workers-for-concurrency/communicating-between-workers.html index a039e97e0..ece8fc71b 100644 --- a/docs/development/client-system-interaction/using-workers-for-concurrency/communicating-between-workers.html +++ b/docs/development/client-system-interaction/using-workers-for-concurrency/communicating-between-workers.html @@ -16,7 +16,7 @@ - + @@ -124,7 +124,7 @@ workers use different SQLConnection instances, each worker accesses the database in a separate transaction. Simultaneous data manipulation operations do not affect the integrity of the data.

    See also

    Working with local SQL databases in AIR

    flash.concurrent package

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/using-workers-for-concurrency/creating-and-managing-workers.html b/docs/development/client-system-interaction/using-workers-for-concurrency/creating-and-managing-workers.html index 3f0cccd9a..c9acc15f6 100644 --- a/docs/development/client-system-interaction/using-workers-for-concurrency/creating-and-managing-workers.html +++ b/docs/development/client-system-interaction/using-workers-for-concurrency/creating-and-managing-workers.html @@ -16,7 +16,7 @@ - + @@ -59,7 +59,7 @@ already been stopped, it is not included.

    If you no longer need a worker, you can call the Worker object's terminate() method to shut down the worker and release its memory and other system resources.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/using-workers-for-concurrency/understanding-workers-and-concurrency.html b/docs/development/client-system-interaction/using-workers-for-concurrency/understanding-workers-and-concurrency.html index 1db37a305..8bb3929c5 100644 --- a/docs/development/client-system-interaction/using-workers-for-concurrency/understanding-workers-and-concurrency.html +++ b/docs/development/client-system-interaction/using-workers-for-concurrency/understanding-workers-and-concurrency.html @@ -16,7 +16,7 @@ - + @@ -66,7 +66,7 @@ When using workers, test your code across all your target platforms to ensure that the demands on the system are not too large. Adobe recommends that you do not use more than one or two background workers in a typical scenario.

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/working-with-air-native-windows.html b/docs/development/client-system-interaction/working-with-air-native-windows.html index bea2b8904..abb9fdeb6 100644 --- a/docs/development/client-system-interaction/working-with-air-native-windows.html +++ b/docs/development/client-system-interaction/working-with-air-native-windows.html @@ -16,14 +16,14 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/working-with-air-native-windows/basics-of-native-windows-in-air.html b/docs/development/client-system-interaction/working-with-air-native-windows/basics-of-native-windows-in-air.html index ab3330116..d323ff39c 100644 --- a/docs/development/client-system-interaction/working-with-air-native-windows/basics-of-native-windows-in-air.html +++ b/docs/development/client-system-interaction/working-with-air-native-windows/basics-of-native-windows-in-air.html @@ -16,7 +16,7 @@ - + @@ -176,7 +176,7 @@ system chrome.

    More Help topics

    Using the Flex AIR components

    Setting AIR application properties

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/working-with-air-native-windows/creating-windows.html b/docs/development/client-system-interaction/working-with-air-native-windows/creating-windows.html index b9efadd1c..b547b4194 100644 --- a/docs/development/client-system-interaction/working-with-air-native-windows/creating-windows.html +++ b/docs/development/client-system-interaction/working-with-air-native-windows/creating-windows.html @@ -16,7 +16,7 @@ - + @@ -175,7 +175,7 @@ your are unfamiliar with using ActionScript display objects, refer to Display programming.

    Example: Creating a native window

    The following example illustrates how to create a native window:

    public function createNativeWindow():void {
    //create the init options
    var options:NativeWindowInitOptions = new NativeWindowInitOptions();
    options.transparent = false;
    options.systemChrome = NativeWindowSystemChrome.STANDARD;
    options.type = NativeWindowType.NORMAL;

    //create the window
    var newWindow:NativeWindow = new NativeWindow(options);
    newWindow.title = "A title";
    newWindow.width = 600;
    newWindow.height = 400;

    newWindow.stage.align = StageAlign.TOP_LEFT;
    newWindow.stage.scaleMode = StageScaleMode.NO_SCALE;

    //activate and show the new window
    newWindow.activate();
    }

    More Help topics

    Using the Flex AIR components

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/working-with-air-native-windows/displaying-full-screen-windows.html b/docs/development/client-system-interaction/working-with-air-native-windows/displaying-full-screen-windows.html index 272556d92..2e7815a47 100644 --- a/docs/development/client-system-interaction/working-with-air-native-windows/displaying-full-screen-windows.html +++ b/docs/development/client-system-interaction/working-with-air-native-windows/displaying-full-screen-windows.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ system chrome).

    For example, the following Flex code defines a simple AIR application that sets up a simple full-screen terminal:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:WindowedApplication xmlns:mx="https://www.adobe.com/2006/mxml"
    layout="vertical"
    applicationComplete="init()" backgroundColor="0x003030" focusRect="false">
    <mx:Script>
    <![CDATA[
    private function init():void
    {
    stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
    focusManager.setFocus(terminal);
    terminal.text = "Welcome to the dumb terminal app. Press the ESC key to exit..\n";
    terminal.selectionBeginIndex = terminal.text.length;
    terminal.selectionEndIndex = terminal.text.length;
    }
    ]]>
    </mx:Script>
    <mx:TextArea
    id="terminal"
    height="100%" width="100%"
    scroll="false"
    backgroundColor="0x003030"
    color="0xCCFF00"
    fontFamily="Lucida Console"
    fontSize="44"/>
    </mx:WindowedApplication>

    The following ActionScript example for Flash simulates a simple full-screen text terminal:

    import flash.display.Sprite;
    import flash.display.StageDisplayState;
    import flash.text.TextField;
    import flash.text.TextFormat;

    public class FullScreenTerminalExample extends Sprite
    {
    public function FullScreenTerminalExample():void
    {
    var terminal:TextField = new TextField();
    terminal.multiline = true;
    terminal.wordWrap = true;
    terminal.selectable = true;
    terminal.background = true;
    terminal.backgroundColor = 0x00333333;

    this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;

    addChild(terminal);
    terminal.width = 550;
    terminal.height = 400;

    terminal.text = "Welcome to the dumb terminal application. Press the ESC key to exit.\n_";

    var tf:TextFormat = new TextFormat();
    tf.font = "Courier New";
    tf.color = 0x00CCFF00;
    tf.size = 12;
    terminal.setTextFormat(tf);

    terminal.setSelection(terminal.text.length - 1, terminal.text.length);
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/working-with-air-native-windows/listening-for-window-events.html b/docs/development/client-system-interaction/working-with-air-native-windows/listening-for-window-events.html index 87aec178a..441efb981 100644 --- a/docs/development/client-system-interaction/working-with-air-native-windows/listening-for-window-events.html +++ b/docs/development/client-system-interaction/working-with-air-native-windows/listening-for-window-events.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ and after the impending or completed change.

    On some Linux window managers, a display state change event is not dispatched when a window with a maximum size setting is maximized. (The window is set to the maximized display state, but is not resized.)

    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/working-with-air-native-windows/managing-windows.html b/docs/development/client-system-interaction/working-with-air-native-windows/managing-windows.html index e92d04c88..7c1276fd6 100644 --- a/docs/development/client-system-interaction/working-with-air-native-windows/managing-windows.html +++ b/docs/development/client-system-interaction/working-with-air-native-windows/managing-windows.html @@ -16,7 +16,7 @@ - + @@ -183,7 +183,7 @@ move event handler. See Listening for window events.

    Example: Resizing and moving windows

    The following example shows how to initiate resizing and moving operations on a window:

    package
    {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.display.NativeWindowResize;

    public class NativeWindowResizeExample extends Sprite
    {
    public function NativeWindowResizeExample():void
    {
    // Fills a background area.
    this.graphics.beginFill(0xFFFFFF);
    this.graphics.drawRect(0, 0, 400, 300);
    this.graphics.endFill();

    // Creates a square area where a mouse down will start the resize.
    var resizeHandle:Sprite =
    createSprite(0xCCCCCC, 20, this.width - 20, this.height - 20);
    resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize);

    // Creates a square area where a mouse down will start the move.
    var moveHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, 0);
    moveHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartMove);
    }

    public function createSprite(color:int, size:int, x:int, y:int):Sprite
    {
    var s:Sprite = new Sprite();
    s.graphics.beginFill(color);
    s.graphics.drawRect(0, 0, size, size);
    s.graphics.endFill();
    s.x = x;
    s.y = y;
    this.addChild(s);
    return s;
    }

    public function onStartResize(event:MouseEvent):void
    {
    this.stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT);
    }

    public function onStartMove(event:MouseEvent):void
    {
    this.stage.nativeWindow.startMove();
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/client-system-interaction/working-with-air-runtime-and-operating-system-information.html b/docs/development/client-system-interaction/working-with-air-runtime-and-operating-system-information.html index 9f25c5657..fc8f5d939 100644 --- a/docs/development/client-system-interaction/working-with-air-runtime-and-operating-system-information.html +++ b/docs/development/client-system-interaction/working-with-air-runtime-and-operating-system-information.html @@ -16,7 +16,7 @@ - + @@ -68,7 +68,7 @@ events.

    More Help topics

    flash.desktop.NativeApplication

    Declaring file type associations

    - + \ No newline at end of file diff --git a/docs/development/coding-conventions.html b/docs/development/coding-conventions.html index 96c5338bc..71377d380 100644 --- a/docs/development/coding-conventions.html +++ b/docs/development/coding-conventions.html @@ -16,13 +16,13 @@ - +

    Coding Conventions

    Introduction

    This document lays out the coding standards for writing open-source ActionScript 3 using the AIR SDK. Adhering to these standards makes the source code look consistent, well-organized, and professional.

    Some of these standards are completely arbitrary, since there is not always a "best way" to code.

    Code conventions are important. Code reviewers should point out when code doesn't follow the conventions. If there are disagreements, they can be discussed and the conventions adjusted but following the conventions is not optional.

    Naming

    Choosing good names is critical to creating code that is easy to use and easy to understand. You should always take the time to think about whether you have chosen the right name for something, especially if it is part of the public API.

    Our naming standards are mostly consistent with those of ECMAScript and Flash Player 9.

    Abbreviations

    Avoid them as a general rule. For example, calculateOptimalValue() is a better method name than calcOptVal().

    Being clear is more important than minimizing keystrokes. And if you don't abbreviate, developers won't have to remember whether you shortened a word like "qualified" to "qual" or "qlfd".

    However, we have standardized on a few abbreviations:

    • acc for accessibility, as in ButtonAccImpl
    • auto for automatic, as in autoLayout
    • eval for evaluate, as in EvalBindingResponder
    • impl for implementation, as in ButtonAccImpl
    • info for information, as in GridRowInfo
    • num for number of, as in numChildren
    • min for minimum, as in minWidth
    • max for maximum, as in maxHeight
    • nav for navigation, as in NavBar
    • regexp for regular expression, as in RegExpValidator
    • util for utility, as in StringUtil

    This list probably does not include all abbreviations that are currently in use. If you're considering using an abbreviation that isn't listed here, please search the source code to determine whether it is already in use. If you don't find it, think twice about whether abbreviating is really appropriate.

    Occasionally we are (deliberately) inconsistent about abbreviations. For example, we spell out "horizontal" and "vertical" in most places, such as horizontalScrollPolicy and verticalScrollPolicy but we abbreviate them to H and V in the very-commonly-used container names HBox and VBox.

    Acronyms

    Various acronyms are common in Flex and AIR, such as AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, and XML.

    An acronym is always all-uppercase or all-lowercase (e.g., SWF or swf, but never Swf). The only time that all-lowercase is used is when the acronym is used by itself as an identifier, or at the beginning of an identifier, and the identifier should start with a lowercase letter. See the rules below for which identifiers should start with which case.

    Examples of identifiers with acronyms are CSSStyleDeclaration, IUID, uid, IIME, and imeMode.

    Word boundaries

    When an identifier contains multiple words, we use two ways of indicating word boundaries: intercaps (as in LayoutManager or measuredWidth) and underscores (as in object_proxy). See the rules below for which method to use.

    Sometimes it isn't clear whether a word combination has become its own single word, and we are unforunately inconsistent about this in some places: dropdown, popUp, pulldown.

    Follow the acronym-casing rules even in the rare case that two acronyms must be adjacent. An example (which isn't actually in use) would be something like loadCSSURL(). But try to avoid such names.

    Type-specifying names

    If you want to incorporate the type into the name, make it the last "word". Don't use the old ActionScript 1 convention of concatenating abbreviated type suffixes such as _mc to indicate type. For example, name a border Shape border, borderSkin, or borderShape, but not border_mc.

    Often, the best name for an object is simply the same as its type, with different casing:

    var button:Button = new Button();

    Package names

    Start them with a lowercase letter and use intercaps for subsequent words: controls, listClasses.

    Package names should always be nouns or gerunds (the -ing noun form of a verb), not verbs, adjectives, or adverbs.

    A package implementing lots of similar things should have a name which is the plural form of the thing: charts, collections, containers, controls, effects, events, formatters, managers, preloaders, resources, skins, states, styles, utils, validators.

    It is common to use a gerund for the name of a package which implements a concept: binding, logging, messaging, printing. Otherwise, they are generally "concept nouns": accessibility, core, graphics, rpc.

    A package containing classes that support component FooBar should be called fooBarClasses.

    File names

    For importable APIs, the file name must be the same as the public API inside. But include files don't have to follow this rule.

    Start the names of include files for [Style(...)] metadata with an uppercase letter, use intercaps for subsequent words, and make the last word "Styles": BorderStyles.as, ModalTransparencyStyles.as.

    Start the names of individual asset files with a lowercase letter and use underscores between words: icon_align_left.png.

    Namespace names

    Start them with a lowercase letter and use underscores between words: mx_internal, object_proxy.

    Interface names

    If the interface is something you expect developers to implement then start them with I and use intercaps for subsequent words: IList, IFocusManager, IUID.

    If you are abstracting a type for example in an API where the type may change at runtime, it often makes sense to omit the I to make the API more readable and appear as a Class.

    Class names

    Start them with an uppercase letter and use intercaps for subsequent words: Button, FocusManager, UIComponent.

    Name Event subclasses FooBarEvent.

    Name Error subclasses FooBarError.

    Name the EffectInstance subclass associated with effect FooBar FooBarInstance.

    Name Formatter subclasses FooBarFormatter.

    Name Validator subclasses FooBarValidator.

    Name skinning classes FooBarBackground, FooBarBorder, FooBarSkin, FooBarIcon, FooBarIndicator, FooBarSeparator, FooBarCursor, etc.

    Name utility classes FooBarUtil (not FooBarUtils; the package is plural but the class is singular).

    It is common to name a base class FooBarBase: ComboBase, DateBase, DataGridBase, ListBase.

    Event names

    Start them with a lowercase letter and use intercaps for subsequent words: "move", "creationComplete".

    Style names

    Start them with a lowercase letter and use intercaps for subsequent words: color, fontSize.

    Enumerated values for String properties

    Start them with a lowercase letter and use intercaps for subsequent words: "auto", "filesOnly",

    Constant names

    Use all uppercase letters with underscores between words: OFF, DEFAULT_WIDTH.

    The words in the identifier must match the words in the constant value if it is a String:

    public static const FOO_BAR:String = "fooBar";

    Property (variable and getter/setter) names

    Start them with a lowercase letter and use intercaps for subsequent words: i, width, numChildren.

    Use i for a loop index and n for its upper limit. Use j for an inner loop index and m for its upper limit.

    for (var i:int = 0; i < n; i++)
    {
    for (var j:int = 0; j < m; j++)
    {
    ...
    }
    }

    Use p (for "property") for a for-in loop variable:

    for (var p:String in o)
    {
    ...
    }

    If a class overrides a getter/setter and wants to continue to expose the base getter/setter, it should do so by implementing a property whose name is the base name with a $ prepended. This getter/setter should be marked final and should do nothing more than call the supergetter/setter.

    mx_internal final function get $numChildren():int
    {
    return super.numChildren;
    }

    Storage variable names

    Give the storage variable for the getter/setter foo the name _foo.

    Method names

    Start them with a lowercase letter and use intercaps for subsequent words: measure(), updateDisplayList().

    Method names should always be verbs.

    Parameterless methods should generally not be named getFooBar() or setFooBar(); these should be implemented as getter/setters instead. However, if getFooBar() is a slow method requiring a large amount of computation, it should be named findFooBar(), calculateFooBar(), determineFooBar(), etc. to suggest this, rather than being a getter.

    If a class overrides a method and wants to continue to expose the base method, it should do so by implementing a method whose name is the base name with a $ prepended. This method should be marked final and should do nothing more than call the supermethod.

    mx_internal final function $addChild(child:DisplayObject):DisplayObject
    {
    return super.addChild(child);
    }

    Event handler names

    Event handlers should be named by concatenating "Handler" to the type of the event: mouseDownHandler().

    If the handler is for events dispatched by a subcomponent (i.e., not this), prefix the handler name with the subcomponent name and an underscore: textInput_focusInHandler().

    Argument names

    Use value for the argument of every setter:

    Do this:

    public function set label(value:String):void

    Not this:

    public function set label(lab:String):void

    Or this:

    public function set label(labelValue:String):void

    Or this:

    public function set label(val:String):void

    Use event (not e, evt, or eventObj) for the argument of every event handler:

    protected function mouseDownHandler(event:Event):void

    Resource bundle names

    If a resource bundle contains resources for a particular package, name the bundle the same as the package: controls, formatters, validators.

    Resource key names

    Start them with a lowercase letter and use intercaps for subsequent words: pm, dayNamesShort.

    Miscellaneous nomenclature

    Avoid "object" because it is vague.

    An "item" is a data item, not a DisplayObject.

    A "renderer" is a DisplayObject that displays a data item.

    A "type" is an AS3 type; use "kind" otherwise.

    Language Usage

    This section discusses how we use the language constructs of ActionScript 3, especially when there are multiple ways to express the same thing.

    Compilation options

    Compile with the options -strict and -show-actionscript-warnings. (These are the defaults in the flex-config.xml file.)

    Property-based APIs

    Favor property-based APIs rather than method-based APIs, because these are more suitable for declarative-style MXML programming.

    Type declarations

    Write a type annotation for every constant, variable, function argument, and function return value, even if the annotation is simply :* to indicate "no type".

    Do this:

    var value:*;

    Not this:

    var value;

    Use the narrowest type that is appropriate. For example, a loop index should be a int, not a Number, and certainly not an Object or *. As another example, a mouseDownHandler should declare its argument as event:MouseEvent, not event:Event.

    Use int for integers, even if they can't be negative. Use uint only for RGB colors, bit masks, and other non-numeric values.

    Use * only if the value can be undefined. You should generally use Object rather than *, with null being the "object doesn't exist" value.

    If you declare something to be of type Array, add a comment of the form /* of ElementType */ immediately after Array indicate the type of the array elements. A future version of the language is likely to have typed arrays.

    Do this:

    var a:Array /* of String */ = [];

    Not this:

    var a:Array = [];

    And this:

    function f(a:Array /* of Number */):Array /* of Object */
    {
    ...
    }

    Not this:

    function f(a:Array):Array

    Literals

    undefined

    Avoid using this when possible. It is only necessary when dealing with values whose compile-time is type is *, and you should be using * sparingly as well.

    int and uint literals

    Do not use a decimal point in a integer.

    Do this:

    2

    Not this:

    2.

    Use a lowercase x and uppercase A-Z in hexadecimal numbers.

    Do this:

    0xFEDCBA

    Not this:

    0Xfedcba

    Always write an RGB color as a six-digit hexadecimal number.

    Do this:

    private const BLACK:uint = 0x000000;

    Not this:

    private const BLACK:uint = 0;

    When dealing with indices, use the value -1 to mean "no index".

    Number literals

    If a Number value typically can be fractional, indicate this by using a decimal point, and follow the decimal point by a single trailing zero.

    Do this:

    alphaFrom = 0.0;
    alphaTo = 1.0;

    Not this:

    alphaFrom = 0;
    alphaTo = 1;

    However, don't do this for pixel coordinates, which are by convention integral even though they can in principle be fractional.

    Do this:

    var xOffset:Number = 3;

    Not this:

    var xOffset:Number = 3.0;

    Use e, not E, when using exponential notation.

    Do this:

    1.0e12

    Not this:

    1.0E12

    Use the default value NaN as the "not set" value for a Number.

    String literals

    Use quotation marks (double quotes), not apostrophes (single quotes), to delimit strings, even if that string contains a quotation mark as a character.

    Do this:

    "What's up, \"Big Boy\"?"

    Not this:

    'What\'s up, "Big Boy"?'

    Use \u, not \U, for unicode escape sequences.

    Array literals

    Use Array literals rather than new Array().

    Do this:

    []

    Not this:

    new Array()

    And this:

    [ 1, 2, 3 ]

    Not this:

    new Array(1, 2, 3)

    Use the Array constructor only to allocate an array of a prespecified size, as in new Array(3), which means [ undefined, undefined, undefined ], not [ 3 ].

    Object literals

    Use Object literals rather than new Object().

    Do this:

    {}

    Not this:

    new Object()

    And this:

    o = { a: 1, b: 2, c: 3 };

    Not this:

    o = new Object();
    o.a = 1;
    o.b = 2;
    o.c = 3;

    Or this:

    o = {};
    o.a = 1;
    o.b = 2;
    o.c = 3;

    Function literals

    Avoid using function literals to define anonymous functions; use a class method or package function instead.

    If you must use a function literal, declare a return type, and terminate the last statement inside the function block with a semicolon.

    Do this:

    function(i:int):void { doIt(i - 1); doIt(i + 1); }

    Not this:

    function(i:int) { doIt(i - 1); doIt(i + 1) }

    RegExp literals

    Use the literal notation rather than constructing a RegExp instance from a String.

    Do this:

    var pattern:RegExp = /\d+/g;

    Not this:

    var pattern:RegExp = new RegExp("\\d+", "g");

    XML and XMLList literals

    Use the literal notation rather than constructing an XML instance from a String.

    Do this:

    var node:XML = <name first="Jane" last="Doe"/>;

    Not this:

    var node:XML = new XML("<name first=\"Jane\" last=\"Doe\"/>");

    Use double-quotes rather than single-quotes around XML attribute values:

    Do this:

    var node:XML = <name first="Jane" last="Doe"/>;

    Not this:

    var node:XML = <name first='Jane' last='Doe'/>;

    Class literals

    Use a fully-qualified class literal only if necessary to disambiguate between two imported classes with the same unqualified name.

    Do this:

    import mx.controls.Button;
    ...
    var b:Button = new Button();

    Not this:

    import mx.controls.Button;
    ...
    var b:Button = new mx.controls.Button();

    But here a fully-qualified name is required and therefore qppropriate:

    import mx.controls.Button;
    import my.controls.Button;
    ...
    var b:Button = new mx.controls.Button();

    Expressions

    Parentheses

    Don't use unnecessary parentheses with common operators such as +, -, *, /, &&, ||, <, <=, >, >=, ==, and !=.

    Do this:

    var e:Number = a * b / (c + d);

    Not this:

    var e:Number = (a * b) / (c + d);

    And this:

    var e:Boolean = a && b || c == d;

    Not this:

    var e:Boolean = ((a && b) || (c == d));

    The precedence rules for other operators are harder to remember, so parentheses can be helpful with them.

    Coercion

    Don't compare a Boolean value to true or false; it already is one or the other.

    Do this:

    if (flag)

    Not this:

    if (flag == true)

    Do this:

    var flag:Boolean = a && b;

    Not this:

    var flag:Boolean = (a && b) != false;

    Explicitly coerce a Number, String, XML, XMLList, Array, Object, or * to a Boolean, because these types have multiple values which might reasonably be thought to coerce to false and it is difficult to remember which ones actually do coerce to false in AS3.

    TypeCan you remember which of these values coerce to false?
    Number0, NaN
    Stringnull, ""
    XML / XMLListnull, </>
    Arraynull, []
    Objectnull, </>
    *undefined, null, {}, 0, NaN, false, </>

    Do this:

    if (s != null && s != "")

    Not this:

    if (s)

    Subclasses of Object (e.g., UIComponent) can coerce implicitly to Boolean, because it is obvious that only the null value coerces to false and all others coerce to true. It's OK to explicitly compare the object to null as required in Java. (Note: Object and its subclasses cannot store the value undefined.)

    Do this:

    if (child)

    Or this:

    if (child == null)

    And this:

    if (!child)

    Or this:

    if (child != null)

    For int and uint, it is obvious that only the 0 value coerces to false and all others coerce to true. So if you want to use implicit coercion, it's OK but a comparison against 0 reads more nicely.

    Do this:

    if (num != 0)

    Or this:

    if (num)

    And this:

    if (num == 0)

    Or this:

    if (!num)

    Prefer the use of a cast to the use of the as operator. Use the as operator only if the coercion might fail and you want the expression to evaluate to null instead of throwing an exception.

    Do this:

    IUIComponent(child).document

    Not this:

    (child as IUIComponent).document

    Comparison

    Write comparisons in the order that they read most naturally:

    Do this:

    if (n == 3) // "if n is 3"

    Not this:

    if (3 == n) // "if 3 is n"

    ++ and -- operators

    In cases where the postfix and prefix forms are equivalent, use the postfix form. Use the prefix form only when you need to use the value before it is incremented.

    Do this:

    for (var i:int = 0; i < n; i++)

    Not this:

    for (var i:int = 0; i < n; ++i)

    Ternary operator

    Use a ternary operator in place of a simple if/else statement, especially for null checks:

    Do this:

    return item ? item.label : null;

    Not this:

    if (!item)
    return null;
    return item.label;

    But don't use nested ternary operators in place of complex if/else logic.

    Do this:

    if (a < b)
    return -1;
    else if (a > b)
    return 1;
    return 0;

    Not this:

    return a < b ? -1 : (a > b ? 1 : 0);

    new operator

    Use parentheses after the class reference, even if the constructor takes no arguments.

    Do this:

    var b:Button = new Button();

    Not this:

    var b:Button = new Button;

    Statements

    Terminate each statement with a semicolon. Do not use the optional-semicolon feature of ActionScript 3.

    Do this:

    a = 1;
    b = 2;
    c = 3;

    Not this:

    a = 1
    b = 2
    c = 3

    include statements

    Use include, not the deprecated #include. Terminate the include statement with a semicolon, like any other statement.

    Do this:

    include "../core/ComponentVersion.as";

    Not this:

    #include "../core/ComponentVersion.as"

    Use relative, not absolute, paths.

    import statements

    Import specific classes, interfaces, and package-level functions rather than using the * wildcard.

    Do this:

    import mx.controls.Button;
    import flash.utils.getTimer;

    Not this:

    import mx.core.*;

    use namespace statements

    Use them. Do not use :: syntax on each reference to something in a non-open namespace.

    Do this:

    import mx.core.mx_internal;
    use namespace mx_internal;

    // Later, in some method...
    doSomething();

    Not this:

    import mx.core.mx_internal;

    // Later, in some method...
    mx_internal::doSomething();

    if statements

    If the various branches of an if/else statement involve single statements, don't make them into blocks.

    Do this:

    if (flag)
    doThing1();

    Not this:

    if (flag)
    {
    doThing1();
    }

    And this:

    if (flag)
    doThing1();
    else
    doThing2():

    Not this:

    if (flag)
    {
    doThing1();
    }
    else
    {
    doThing2();
    }

    But if any branch has multiple statements, make all of them into blocks.

    Do this:

    if (flag)
    {
    doThing1();
    }
    else
    {
    doThing2();
    doThing3();
    }

    Not this:

    if (flag)
    doThing1();
    else
    {
    doThing2();
    doThing3();
    }

    When doing multiple error checks, use sequential if statements that test for failure and return early. The successful execution flow is then down the page, with the succesful return at the end of the method. Do not use nested tests for success, which make the execution flow drift across the page.

    Do this:

    if (!condition1)
    return false;
    ...
    if (!condition2)
    return false;
    ...
    if (!condition2)
    return false;
    ...
    return true;

    Not this:

    if (condition1)
    {
    ...
    if (condition2)
    {
    ...
    if (condition3)
    {
    ...
    return true;
    }
    }
    }
    return false;

    for statements

    Make the body of a for loop be a block, even if it consists of only one statement.

    Do this:

    for (var i:int = 0; i < 3; i++)
    {
    doSomething(i);
    }

    Not this:

    for (var i:int = 0; i < 3; i++)
    doSomething(i);

    Store the upper limit for a for-loop variable in a local variable so that it isn't re-evaluated every time through the loop (unless, of course, it needs to be re-evaluated on each interation).

    Do this:

    var n:int = a.length;
    for (var i:int = 0; i < n; i++)
    {
    ...
    }

    Not this:

    for (var i:int = 0; i < a.length; i++)
    {
    ...
    }

    Declare the loop var inside the parentheses of the for statement, unless it is reused elsewhere.

    Do this:

    for (var i:int = 0; i < 3; i++)

    Not this:

    var i:int;
    for (i = 0; i < 3; i++)
    {
    ...
    }

    while statements

    Make the body of a while loop be a block, even if it consists of only one statement.

    Do this:

    while (i < n)
    {
    doSomething(i);
    }

    Not this:

    while (i < n)
    doSomething(i);

    do statements

    Make the body of a do loop be a block, even if it consists of only one statement.

    Do this:

    do
    {
    doSomething(i);
    }
    while (i < n);

    Not this:

    do
    doSomething(i);
    while (i < n);

    switch statements

    Make the body of each case clause, and of the default clause, be a block. Put the break or return statement within the block, not after it. If you are returning, don't put a break after the return. Treat the default clause similarly to the case clauses; break or return from it rather than falling through the bottom of the switch.

    Do this:

    switch (n)
    {
    case 0:
    {
    foo();
    break;
    }

    case 1:
    {
    bar();
    return;
    }

    case 2:
    {
    baz();
    return;
    }

    default:
    {
    blech();
    break;
    }
    }

    Not this:

    switch (n)
    {
    case 0:
    foo();
    break;

    case 1:
    {
    bar();
    }
    break;

    case 2:
    baz();
    return;
    break;

    default:
    blech();
    }

    return statements

    Do not enclose a return value in unnecessary parentheses.

    Do this:

    return n + 1;

    Not this:

    return (n + 1);

    Returning from the middle of a method is OK.

    Declarations

    Don't declare multiple constants or variables in a single declaration.

    Do this:

    var a:int = 1;
    var b:int = 2;

    Not this:

    var a:int = 1, b:int = 2;

    The override keyword

    If present, put this first, before the access specifier.

    Do this:

    override protected method measure():void

    Not this:

    protected override method measure():void

    Access specifiers

    Put an explicit access specifier everywhere that one is allowed. Do not use the fact that internal is the implicit access specifier if none is written.

    Before making an API public or protected, think hard about whether it is really needs to be. Public and protected APIs must be documented. They must also be supported for several releases before being formally deprecated.

    The static keyword

    If present, put this after the access specifier.

    Do this:

    public static const MOVE:String = &quot;move&quot;

    Not this:

    static public const MOVE:String = &quot;move&quot;;

    The final keyword

    If present, put this after the access specifier.

    Do this:

    public final class BoxDirection

    Not this:

    final public class BoxDirection

    Declare all "enum classes" to be final.

    Also declare "base" properties and methods (those starting with $) to be final.

    Constants

    All constants should be static. There is no reason to use an instance constant, since all instances would store the same value.

    Do this:

    public static const ALL:String = "all";

    Not this:

    public const ALL:String = "all";

    Variables

    If a variable needs to be initialized to a non-default value, do this in the declaration, not in the constructor.

    Do this:

    private var counter:int = 1;

    Not this:

    private var counter:int;
    ...
    public function MyClass()
    {
    super();
    ...
    counter = 1;
    }

    Local variables

    Declare local variables at or just before the point of first use. Don't declare them all at the top of the function.

    Do this:

    private function f(i:int, j:int):int
    {
    var a:int = g(i - 1) + g(i + 1);
    var b:int = g(a - 1) + g(a + 1);
    var c:int = g(b - 1) + g(b + 1);

    return (a * b * c) / (a + b + c);
    }

    Not this:

    private function f(i:int, j:int):int
    {
    var a:int;
    var b:int;
    var c:int;

    a = g(i - 1) + g(i + 1);
    b = g(a - 1) + g(a + 1);
    c = g(b - 1) + g(b + 1);

    return (a * b * c) / (a + b + c);
    }

    Declare local variables only one per function. ActionScript 3 doesn't have block-scoped locals.

    Do this:

    var a:int;
    if (flag)
    {
    a = 1;
    ...
    }
    else
    {
    a = 2;
    ...
    }

    Not this:

    if (flag)
    {
    var a:int = 1;
    ...
    }
    else
    {
    var a:int = 2;
    ...
    }

    And this:

    var i:int;
    for (i = 0; i &lt; n; i++)
    {
    ...
    }

    for (i = 0; i &lt; n; i++)
    {
    ...
    }

    Not this:

    for (var i:int = 0; i &lt; n; i++)
    {
    ...
    }

    for (var i:int = 0; i &lt; n; i++)
    {
    ...
    }

    Classes

    If a class simply extends Object, omit the extends Object clause.

    The only "bare statements" in a class should be calls to static class initialization methods, such as loadResources().

    Constructors

    If a classes has instance members, write a constructor, and make it explicitly call super(), even if it does nothing else.

    If the constructor takes arguments that set instance vars, give the the same names as the instance vars.

    Do this:

    public function MyClass(foo:int, bar:int)
    {
    super();
    this.foo = foo;
    this.bar = bar;
    }

    Not this:

    public function MyClass(fooVal:int, barVal:int)
    {
    super();
    foo = fooVal;
    bar = barVal;
    }

    Don't set the classes' instance vars in the constructor; do this in the declarations of the instance vars. However, if you need to reset the values of inherited instance vars, do this in the consturctor.

    Interfaces

    TBD

    Namespaces

    TBD

    Implementing properties

    TBD

    Metadata

    TBD

    Packages

    One public API (usually a class, sometimes a namespace or function) inside the package statement.

    Helper classes

    bare statements

    ASDoc

    Property comments

    Only document the first function of a get/set function pair for a property. The idiom for defining and documenting a property is:

    /**
    * @private
    * The backing variable for the property.
    */
    private var _someProp:Foo;

    /**
    * Place all comments for the property with the getter which is defined first.
    * Comments should cover both get and set behavior as appropriate.
    */
    public function get someProp():Foo
    {
    ...
    }

    /**
    * @private
    */
    public function set someProp(value:Foo):void
    {
    ...
    }

    Also, ASDoc comments are applied to metadata tags as well as other constructs within a class so take care that your comments apply to the proper target. If you tag a property as Bindable, your property comment must precede the get function, not the Bindable metadata tag.

    Do this:

    [Bindable("somePropChanged")]

    /**
    * Comments for someProp
    */
    public function get someProp():Foo

    Not this:

    /**
    * Comments for someProp
    */
    [Bindable("somePropChanged")]

    public function get someProp():Foo

    Using the private tag

    Do not use the @private tag in ASDoc comments before private variables and private methods. They are not needed and they take up space.

    General Guidelines

    • Start each sentence in an ASDoc comment on a new line. It is easier to edit the ASDoc.
    • Always close HTML tags in comments, including <p></p> and <code></code> tags.
    • Do not use @return in a setter/getter. It is ignored.
    • Do not use <code> tags around a class name.

    Flex SDK

    These sections are specific to contributions to the Flex SDK project, and, in the interest of consistency, all commits to the Flex SDK project will be expected to follow these conventions.

    They can act as a guide for anyone writing AS3 code and libraries.

    File Organization

    This section presents the order in which a Flex framework file should be organized.

    File template

    When creating a new Flex component the flex template below should be used so that the class is organized in the correct order. Unused sections can be deleted.

    File Template for Flex Components

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //
    // ADOBE SYSTEMS INCORPORATED
    // Copyright 2011 Adobe Systems Incorporated
    // All Rights Reserved.
    //
    // NOTICE: Adobe permits you to use, modify, and distribute this file
    // in accordance with the terms of the license agreement accompanying it.
    //
    ////////////////////////////////////////////////////////////////////////////////////////////////////

    package ${package_name}
    {

    import packageName;

    use namespace ns1;

    //--------------------------------------
    // Events
    //--------------------------------------

    /**
    * ASDoc comment.
    */
    [Event]

    //--------------------------------------
    // Styles
    //--------------------------------------

    /**
    * ASDoc comment.
    */
    [Style]

    //--------------------------------------
    // Effects
    //--------------------------------------

    /**
    * ASDoc comment.
    */
    [Effect]

    //--------------------------------------
    // Excluded APIs
    //--------------------------------------

    [Exclude(name="styleName", kind="style")]

    //--------------------------------------
    // Other metadata
    //--------------------------------------

    //[AccessibilityClass(implementation="spark.accessibility.RichEditableTextAccImpl")]
    //[DefaultProperty("content")]
    //[IconFile("RichEditableText.png")]
    //[DefaultTriggerEvent("change")]
    //[DiscouragedForProfile("mobileDevice")]

    /**
    * Primary ASdoc for the class.
    *
    * @includeExample example.mxml
    *
    * @langversion 3.0
    * @playerversion Flash 10
    * @playerversion AIR 2.5
    * @productversion Flex 4.5
    *
    * @see
    */
    public class ${class_name}
    {

    include "../core/Version.as";

    //----------------------------------------------------------------------------------------------
    //
    // Class initialization
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Class constants
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Class mixins
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Class resources
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Class variables
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Class properties
    //
    //----------------------------------------------------------------------------------------------

    // Declare static getters and setters here. Order them alphabetically by property name. Use a minor
    // separator with the property name for each one. Put the getter before the setter.

    //----------------------------------------------------------------------------------------------
    //
    // Class methods
    //
    //----------------------------------------------------------------------------------------------

    // Put static function declarations here.

    //----------------------------------------------------------------------------------------------
    //
    // Constructor
    //
    //----------------------------------------------------------------------------------------------

    /**
    * Constructor.
    *
    * @langversion 3.0
    * @playerversion Flash 10
    * @playerversion AIR 2.5
    * @productversion Flex 4
    */
    public function ${class_name}()
    {
    super();
    }

    //----------------------------------------------------------------------------------------------
    //
    // Constants
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Variables
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Skin parts
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Overridden properties
    //
    //----------------------------------------------------------------------------------------------

    // Put overrides of non-static getters and setters here. Order them alphabetically by property name.
    // Use a minor separator with the property name for each one. Put the getter before the setter.

    //----------------------------------
    // propertyName
    //----------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Properties
    //
    //----------------------------------------------------------------------------------------------

    // Put new non-static getters and setters here. Order them alphabetically by property name.
    // Use a minor separator with the property name for each one. Put the getter before the setter.
    // Before the getter, put a single comment which documents both the getter and the setter.

    //----------------------------------------------------------------------------------------------
    //
    // Overridden Methods
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Methods
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Overridden Event handlers
    //
    //----------------------------------------------------------------------------------------------

    //----------------------------------------------------------------------------------------------
    //
    // Event handlers
    //
    //----------------------------------------------------------------------------------------------

    }

    }

    //----------------------------------------------------------------------------------------------
    //
    // Out-of-package Helper Classes
    //
    //----------------------------------------------------------------------------------------------

    Include a copyright notice at the top of every .as file in the framework. The format for the 2008 open-source copyright is given below.

    ////////////////////////////////////////////////////////////////////////////////
    //
    // ADOBE SYSTEMS INCORPORATED
    // Copyright 2008 Adobe Systems Incorporated
    // All Rights Reserved.
    //
    // NOTICE: Adobe permits you to use, modify, and distribute this file
    // in accordance with the terms of the license agreement accompanying it.
    //
    ////////////////////////////////////////////////////////////////////////////////

    Note that it is 80 characters wide.

    package statement

    TBD

    import statements

    TBD

    use namespace statement

    TBD

    Class metadata

    Organize the class metadata into sections, in the order Events, Styles, Effects, Excluded APIs, and Other Metadata.

    Put a minor section header before each section. Note that the minor section headers are 40 characters wide and that there are two spaces between the // and the section name.

    Alphabetize the metadata by name="..." within each section. In the Other Metadata section, alphabetize them by metadata tag name.

    //--------------------------------------
    // Events
    //--------------------------------------
    /**
    * ASDoc comment.
    */
    [Event]

    /**
    * ASDoc comment.
    */
    [Event]

    //--------------------------------------
    // Styles
    //--------------------------------------

    /**
    * ASDoc comment.
    */
    [Style]

    /**
    * ASDoc comment.
    */
    [Style]

    //--------------------------------------
    // Effects
    //--------------------------------------

    /**
    * ASDoc comment.
    */
    [Effect]

    /**
    * ASDoc comment.
    */
    [Effect]

    //--------------------------------------
    // Excluded APIs
    //--------------------------------------

    [Exclude(name=&quot;horizontalAlign&quot;, kind=&quot;style&quot;)]
    [Exclude(name=&quot;verticalAlign&quot;, kind=&quot;style&quot;)]

    //--------------------------------------
    // Other metadata
    //--------------------------------------

    [DefaultBindingProperty(source=&quot;text&quot;, destination=&quot;text&quot;)]
    [IconFile(&quot;Text.png&quot;)]

    Class declaration

    TBD

    include statement for Version.as

    Every class should include core/Version.as using a relative path. This file contains the declaration for static const VERSION:String.

    include "../core/Version.as";

    Class constants

    Put static const declarations here.

    ActionScript 3 does not allow a constant to have type Array or Object. Declare such constants using static var rather than static const, but put them in this section because they are conceptually constants.

    Class mix-ins

    Declare any static variables of type Function that get mixed in rather than being declared as methods.

    Class properties

    Declare static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.

    Class methods

    Put static function declarations here.

    Constructor

    TBD

    Variables

    TBD

    Overridden properties

    Put overrides of non-static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.

    Properties

    Put new non-static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.

    Overridden methods

    Put overrides of non-static functions here.

    Methods

    Put new non-static functions here.

    Overridden event handlers

    Put overrides of event handlers here.

    Event handlers

    Put new event handlers here.

    Out-of-package helper classes

    TBD

    Formatting

    This section covers how a Flex framework class should be formatted.

    Line width

    The target line length is 80-characters per line although up to 100-characters per line is permissible.

    The most important factor to consider is readability.

    Indentation

    Use 4-space indentation. Configure your text editor to insert spaces rather than tabs. This allows another program that uses a different indentation setting, such as Notepad with its 8-character indents, to display the code without disfiguring it.

    Section separators

    The major section separators inside a class look like this:

        //--------------------------------------------------------------------------
    //
    // Overridden methods
    //
    //--------------------------------------------------------------------------

    They extend from column 4 through column 80. The text is indented to column 8.

    The minor section separators inside a class, such as between properties, look like this:

        //----------------------------------
    // visible
    //----------------------------------

    They extend from column 4 through column 40. The text is indented to column 8.

    Put a single blank line above and below the separators.

    Separation of declarations

    Use a single blank line as a vertical separator between constant, variable, or function declarations.

    /**
    * @private
    * Holds something.
    */
    var a:Number;

    /**
    * @private
    */
    var b:Number

    Metadata

    Do this:

    Inspectable[a="1", b="2"]

    Not this:

    Inspectable[a=1 b=2]

    Array indexing

    Don't put any spaces before or after the left bracket or before the right bracket.

    Do this:

    a[0]

    Not this:

    a[ 0 ]

    Commas

    Follow a comma with a single space. This applies to argument lists, array literals, and object literals.

    Array literals

    Put a single space after the left bracket and a single space before the right bracket, and put a single space after (but none before) each comma.

    Do this:

    [ 1, 2, 3 ]

    Not these:

    [1, 2, 3]

    [1,2,3]

    An empty array is a special case.

    Do this:

    []

    Not this:

    [ ]

    Format lengthy array initializers requiring multiple lines with aligned brackets:

    static var numberNames:Array /* of String */ =
    [
    "zero",
    "one",
    "two",
    "three",
    "four",
    "five",
    "six",
    "seven",
    "eight",
    "nine"
    ];

    Object literals

    Put a single space after the left brace and a single space before the right brace, and put a single space after the colon separating the property name and value.

    Do this:

    { a: 1, b: 2, c: 3 }

    Not these:

    {a: 1, b: 2, c: 3}

    {a:1, b:2, c:3}

    {a:1,b:2,c:3}

    An empty Object is a special case.

    Do this:

    {}

    Not this:

    { }

    Format lengthy object initializers requiring multiple lines with aligned braces:

    private static var TextStyleMap:Object =
    {
    color: true,
    fontFamily: true,
    fontSize: true,
    fontStyle: true,
    fontWeight: true,
    leading: true,
    marginLeft: true,
    marginRight: true,
    textAlign: true,
    textDecoration: true,
    textIndent: true
    };

    Function literals

    TBD

    var f:Function;

    f = function():void
    {
    doSomething();
    };

    Type declarations

    Don't put any spaces before or after the colon that separates a variable, parameter, or function from its type.

    Do this:

    var n:Number;

    Not these:

    var n : Number;

    var n: Number;

    And this:

    function f(n:Number):void

    Not these:

    function f(n : Number) : void

    function f(n: Number): void

    Operators and assignments

    Put a single space around the assignment operator.

    Do this:

    a = 1;

    Not this:

    a=1;

    Put a single space around infix operators.

    Do this:

    a + b \* c

    Not this:

    a+b\*c

    Put a single space around comparison operators.

    Do this:

    a == b

    Not this:

    a==b

    Don't put any spaces between a prefix operator and its operand.

    Do this:

    !o

    Not this:

    ! o

    Don't put any spaces between a postfix operator and its operand.

    Do this:

    i++

    Not this:

    i ++

    Statements

    Start each statement on a new line, so that you can set a breakpoint on any statement.

    Do this:

    a = 1;
    b = 2;
    c = 3;

    Not this:

    a = 1; b = 2; c = 3;

    Align the braces of statement blocks.

    Do this:

    function f():void
    {
    var n:int = numChildren;
    for (var i:int = 0; i < n; i++)
    {
    if ()
    {
    x = horizontalGap * i;
    y = verticalGap * i;
    }
    }
    }

    Not this:

    function f():void {
    var n:int = numChildren;
    for (var i:int = 0; i < n; i++) {
    if () {
    x = horizontalGap * i;
    y = verticalGap * i;
    }
    }
    }

    Variable declarations

    TBD

    Constant declarations

    Use the const keyword for values that are unmodifiable.

    Do this:

    const vsp:String = getStyle("verticalScrollPolicy");

    Or this:

    const dataProvider:ICollectionView = this.dataProvider as ICollectionView;

    Avoid calculations and method calls in loops.

    Do this:

    const myArrayLength:int = myArray.length;
    for (var i=0; i < myArrayLength; i++)
    {
    }

    Not this:

    for (var i=0; i < myArray.length; i++)
    {
    }

    Function declarations

    TBD

    Do this:

    f(a, b)

    Not these:

    f(a,b)

    f( a, b )

    If the parameters have to wrap, indent the subsequent lines after the left parenthesis. Put multiple parameters per line if they fit. Otherwise, put one per line. If even one won't fit, put the first one on the second line, indented past the beginning of the function name.

    public function foo(parameter1:Number, parameter2:String,
    parameter3:Boolean):void

    public function foo(parameter1:Number,
    parameter2:String,
    parameter3:Boolean):void

    public function aVeryLongFunctionName(
    parameter1:Number, parameter2:String,
    parameter3:Boolean):void

    Function calls

    TBD

    Do this:

    f(a, b)

    Not these:

    f(a,b)

    f( a, b )

    if statements

    Follow the if keywords with a single space before the left parenthesis. Don't put any spaces after the left parenthesis or before the right parenthesis.

    Do this:

    if (a < b)

    Not these:

    if(a < b)

    if( a < b )

    if ( a < b )

    else if ?

    multiline ?

    for statements

    Follow the for keyword with a single space before the left parenthesis. Don't put any spaces after the left parenthesis or before the right parenthesis.

    Do this:

    for (var i:int = 0; i < n; i++)

    Not these:

    for(var i:int = 0; i < n; i++)

    for( var i:int = 0; i < n; i++ )

    for ( var i:int = 0; i < n; i++ )

    If the for clause needs to wrap, indent the subsequent lines after the left parenthesis.

    for (var aLongLoopVariableName:int = aLongInitialExpression;
    aLongLoopVariableName < aLongUpperLimit;
    aLongLoopVariableName++)

    switch statements

    Follow the switch keyword with a single space before the left parenthesis. Don't put any spaces after the left parenthesis or before the right parenthesis.

    Do this:

    switch (n)

    Not these:

    switch(n)

    switch( n )

    switch ( n )

    Follow the switch keyword with a single space before the left parenthesis. Don't put any spaces after the left parenthesis or before the right parenthesis.

    Do this:

    switch (n)
    {
    case 1:
    {
    a = foo();
    break;
    }

    case 2:
    {
    a = bar();
    break;
    }

    default:
    {
    a = blech();
    break;
    }
    }

    Not these:

    switch(n)

    switch( n )

    switch ( n )

    class and interface declarations

    braces are always balanced

    no braces around single lines

    single statement per line

    Exceptions to formatting rules

    It is permissible to deviate from the standard when modifying code that is not conformant to the standard. It is more important to be consistent with the style of the surrounding code.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes.html b/docs/development/core-actionscript-classes.html index 2b804228c..55aa458a8 100644 --- a/docs/development/core-actionscript-classes.html +++ b/docs/development/core-actionscript-classes.html @@ -16,14 +16,14 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors.html b/docs/development/core-actionscript-classes/handling-errors.html index 5a03a4518..eade897f9 100644 --- a/docs/development/core-actionscript-classes/handling-errors.html +++ b/docs/development/core-actionscript-classes/handling-errors.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ and the advantages of the error-handling system in ActionScript 3.0.

    More Help topics

    ActionScript language and syntax

    Object-oriented programming in ActionScript

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/basics-of-error-handling.html b/docs/development/core-actionscript-classes/handling-errors/basics-of-error-handling.html index 6cb220ade..6497f0b88 100644 --- a/docs/development/core-actionscript-classes/handling-errors/basics-of-error-handling.html +++ b/docs/development/core-actionscript-classes/handling-errors/basics-of-error-handling.html @@ -16,7 +16,7 @@ - + @@ -82,7 +82,7 @@ The act of notifying a Flash runtime (and consequently, notifying other objects and ActionScript code) that an error has occurred is known as throwing an error.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/comparing-the-error-classes.html b/docs/development/core-actionscript-classes/handling-errors/comparing-the-error-classes.html index 40cd58d4a..4f352e638 100644 --- a/docs/development/core-actionscript-classes/handling-errors/comparing-the-error-classes.html +++ b/docs/development/core-actionscript-classes/handling-errors/comparing-the-error-classes.html @@ -16,7 +16,7 @@ - + @@ -31,7 +31,7 @@ Flash runtime API. In contrast to the Error classes described, the flash.error package communicates errors events that are specific to Flash runtimes (such as Flash Player and Adobe AIR).

    Class name

    Description

    Notes

    EOFError

    An EOFError exception is thrown when you attempt to read past the end of the available data.

    For example, an EOFError is thrown when one of the read methods in the IDataInput interface is called and there is insufficient data to satisfy the read request.

    IllegalOperationError

    An IllegalOperationError exception is thrown when a method is not implemented or the implementation doesn't cover the current usage.

    Examples of illegal operation error exceptions include the following:

    • A base class, such as DisplayObjectContainer, provides more functionality than the Stage can support. For example, if you attempt to get or set a mask on the Stage (usingstage.mask), the Flash runtime throws an IllegalOperationError with the message "The Stage class does not implement this property or method."

    • A subclass inherits a method it does not require and does not want to support.

    • Certain accessibility methods are called when Flash Player is compiled without accessibility support.

    • Authoring-only features are called from a run-time version of Flash Player.

    • You attempt to set the name of an object placed on the timeline.

    IOError

    An IOError exception is thrown when some type of I/O exception occurs.

    You get this error, for example, when a read-write operation is attempted on a socket that is not connected or that has become disconnected.

    MemoryError

    A MemoryError exception is thrown when a memory allocation request fails.

    By default, ActionScript Virtual Machine 2 does not impose a limit on how much memory an ActionScript program allocates. On a desktop system, memory allocation failures are infrequent. You see an error thrown when the system is unable to allocate the memory required for an operation. So, on a desktop system, this exception is rare unless an allocation request is extremely large; for example, a request for 3 billion bytes is impossible because a 32-bit Microsoft® Windows® program can access only 2 GB of address space.

    ScriptTimeoutError

    A ScriptTimeoutError exception is thrown when a script timeout interval of 15 seconds is reached. By catching a ScriptTimeoutError exception, you can handle the script timeout more gracefully. If there is no exception handler, the uncaught exception handler displays a dialog box with an error message.

    To prevent a malicious developer from catching the exception and staying in an infinite loop, only the first ScriptTimeoutError exception thrown in the course of a particular script can be caught. A subsequent ScriptTimeoutError exception cannot be caught by your code and immediately goes to the uncaught exception handler.

    StackOverflowError

    The StackOverflowError exception is thrown when the stack available to the script has been exhausted.

    A StackOverflowError exception might indicate that infinite recursion has occurred.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/creating-custom-error-classes.html b/docs/development/core-actionscript-classes/handling-errors/creating-custom-error-classes.html index 1ea5a099f..75b6aafce 100644 --- a/docs/development/core-actionscript-classes/handling-errors/creating-custom-error-classes.html +++ b/docs/development/core-actionscript-classes/handling-errors/creating-custom-error-classes.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ Therefore, when you override the Error.toString() method, match the parameters exactly. You do not want to pass any parameters to your toString() method at runtime, because those parameters are ignored.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/error-handling-in-actionscript-3.0.html b/docs/development/core-actionscript-classes/handling-errors/error-handling-in-actionscript-3.0.html index 9c277bf55..0873f524e 100644 --- a/docs/development/core-actionscript-classes/handling-errors/error-handling-in-actionscript-3.0.html +++ b/docs/development/core-actionscript-classes/handling-errors/error-handling-in-actionscript-3.0.html @@ -16,7 +16,7 @@ - + @@ -86,7 +86,7 @@ also more likely to catch asynchronous errors using this approach. For more information, see Responding to error events and status.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/handling-errors-example-custom-errors-application.html b/docs/development/core-actionscript-classes/handling-errors/handling-errors-example-custom-errors-application.html index 9214dc825..2f89e9ad5 100644 --- a/docs/development/core-actionscript-classes/handling-errors/handling-errors-example-custom-errors-application.html +++ b/docs/development/core-actionscript-classes/handling-errors/handling-errors-example-custom-errors-application.html @@ -16,7 +16,7 @@ - + @@ -100,7 +100,7 @@ identical to the FatalError class, except for a couple minor string changes and sets the error severity to ApplicationError.WARNING instead of ApplicationError.FATAL, as seen in the following code:

    public function WarningError(errorID:int)
    {
    id = errorID;
    severity = ApplicationError.WARNING;
    message = super.getMessageText(errorID);
    }
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/handling-synchronous-errors-in-an-application.html b/docs/development/core-actionscript-classes/handling-errors/handling-synchronous-errors-in-an-application.html index 93d6cf8d1..1a0bd2766 100644 --- a/docs/development/core-actionscript-classes/handling-errors/handling-synchronous-errors-in-an-application.html +++ b/docs/development/core-actionscript-classes/handling-errors/handling-synchronous-errors-in-an-application.html @@ -16,7 +16,7 @@ - + @@ -78,7 +78,7 @@ the subsequent catch block. This nested catch block can try to handle the error, and if unsuccessful, throw the ApplicationError object to the enclosing try..catch block.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/responding-to-error-events-and-status.html b/docs/development/core-actionscript-classes/handling-errors/responding-to-error-events-and-status.html index 3ebd12132..48479d3d6 100644 --- a/docs/development/core-actionscript-classes/handling-errors/responding-to-error-events-and-status.html +++ b/docs/development/core-actionscript-classes/handling-errors/responding-to-error-events-and-status.html @@ -16,7 +16,7 @@ - + @@ -56,7 +56,7 @@ the change in level value and track communication errors.

    The following example uses a netStatusHandler() function to test the value of the level property. If the level property indicates that an error has been encountered, the code traces the message "Video stream failed".

    package
    {
    import flash.display.Sprite;
    import flash.events.NetStatusEvent;
    import flash.events.SecurityErrorEvent;
    import flash.media.Video;
    import flash.net.NetConnection;
    import flash.net.NetStream;

    public class VideoExample extends Sprite
    {
    private var videoUrl:String = "Video.flv";
    private var connection:NetConnection;
    private var stream:NetStream;

    public function VideoExample()
    {
    connection = new NetConnection();
    connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
    connection.connect(null);
    }

    private function netStatusHandler(event:NetStatusEvent):void
    {
    if (event.info.level == "error")
    {
    trace("Video stream failed")
    }
    else
    {
    connectStream();
    }
    }

    private function securityErrorHandler(event:SecurityErrorEvent):void
    {
    trace("securityErrorHandler: " + event);
    }

    private function connectStream():void
    {
    var stream:NetStream = new NetStream(connection);
    var video:Video = new Video();
    video.attachNetStream(stream);
    stream.play(videoUrl);
    addChild(video);
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/types-of-errors.html b/docs/development/core-actionscript-classes/handling-errors/types-of-errors.html index 581f1383e..7077cf14a 100644 --- a/docs/development/core-actionscript-classes/handling-errors/types-of-errors.html +++ b/docs/development/core-actionscript-classes/handling-errors/types-of-errors.html @@ -16,7 +16,7 @@ - + @@ -75,7 +75,7 @@ from an uncaughtError handler, the event handler is called multiple times. This results in an infinite loop of exceptions. It is recommended that you avoid such a scenario.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-errors/working-with-the-debugger-versions-of-flash-runtimes.html b/docs/development/core-actionscript-classes/handling-errors/working-with-the-debugger-versions-of-flash-runtimes.html index 595917e6f..68ef5c747 100644 --- a/docs/development/core-actionscript-classes/handling-errors/working-with-the-debugger-versions-of-flash-runtimes.html +++ b/docs/development/core-actionscript-classes/handling-errors/working-with-the-debugger-versions-of-flash-runtimes.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ ActionScript 3.0 Reference for the Adobe Flash Platform) to correlate to an error message. Alternatively, you can reproduce the error using the debugger versions of Flash Player and AIR to see the full message.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-events.html b/docs/development/core-actionscript-classes/handling-events.html index 398a9388c..5f2269abd 100644 --- a/docs/development/core-actionscript-classes/handling-events.html +++ b/docs/development/core-actionscript-classes/handling-events.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ powerful yet intuitive event-handling tool for ActionScript programmers.

    The ActionScript 3.0 event-handling system interacts closely with the display list. To gain a basic understanding of the display list, read Display programming.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-events/basics-of-handling-events.html b/docs/development/core-actionscript-classes/handling-events/basics-of-handling-events.html index 659a55703..a0363cfbb 100644 --- a/docs/development/core-actionscript-classes/handling-events/basics-of-handling-events.html +++ b/docs/development/core-actionscript-classes/handling-events/basics-of-handling-events.html @@ -16,7 +16,7 @@ - + @@ -87,7 +87,7 @@ that it should be notified when a specific event takes place.

    Target phase

    The point of the event flow at which an event has reached the most specific possible target. The target phase occurs between the capture and the bubbling phases.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-events/event-handling-example-alarm-clock.html b/docs/development/core-actionscript-classes/handling-events/event-handling-example-alarm-clock.html index d52e3514b..84dbb1ed2 100644 --- a/docs/development/core-actionscript-classes/handling-events/event-handling-example-alarm-clock.html +++ b/docs/development/core-actionscript-classes/handling-events/event-handling-example-alarm-clock.html @@ -16,7 +16,7 @@ - + @@ -123,7 +123,7 @@ instance. In the overridden toString() method, the utility method formatToString() (inherited from Event) is used to provide a string with the name of the custom type, as well as the names and values of all its properties.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-events/event-listeners.html b/docs/development/core-actionscript-classes/handling-events/event-listeners.html index 1d7f25458..4375bd11d 100644 --- a/docs/development/core-actionscript-classes/handling-events/event-listeners.html +++ b/docs/development/core-actionscript-classes/handling-events/event-listeners.html @@ -16,7 +16,7 @@ - + @@ -152,7 +152,7 @@ players, as a message in the output panel in the authoring player, and as an entry in the log file for Adobe Flash Builder. It will not manifest at all in the release versions of Flash Player or AIR.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-events/event-objects.html b/docs/development/core-actionscript-classes/handling-events/event-objects.html index 0dc49e298..d9e0f46a1 100644 --- a/docs/development/core-actionscript-classes/handling-events/event-objects.html +++ b/docs/development/core-actionscript-classes/handling-events/event-objects.html @@ -16,7 +16,7 @@ - + @@ -134,7 +134,7 @@ Event objects, when creating an Event subclass you must override the clone() and toString() methods to provide functionality specific to the subclass.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-events/how-actionscript-3.0-event-handling-differs-from-earlier-versions.html b/docs/development/core-actionscript-classes/handling-events/how-actionscript-3.0-event-handling-differs-from-earlier-versions.html index 6b449926a..5f815970c 100644 --- a/docs/development/core-actionscript-classes/handling-events/how-actionscript-3.0-event-handling-differs-from-earlier-versions.html +++ b/docs/development/core-actionscript-classes/handling-events/how-actionscript-3.0-event-handling-differs-from-earlier-versions.html @@ -16,7 +16,7 @@ - + @@ -100,7 +100,7 @@ called on any object that is part of the event flow.

  • In ActionScript 2.0, event listeners can be either functions, methods, or objects, whereas in ActionScript 3.0, only functions or methods can be event listeners.

  • - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/handling-events/the-event-flow.html b/docs/development/core-actionscript-classes/handling-events/the-event-flow.html index fad887f92..cfaf529c7 100644 --- a/docs/development/core-actionscript-classes/handling-events/the-event-flow.html +++ b/docs/development/core-actionscript-classes/handling-events/the-event-flow.html @@ -16,7 +16,7 @@ - + @@ -74,7 +74,7 @@ participating in the capture and bubbling phases.

    To find out how a particular event type behaves, you can either check the API documentation or examine the event object's properties. Examining the event object's properties is described in the following section.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-native-json-functionality.html b/docs/development/core-actionscript-classes/using-native-json-functionality.html index 9a909ebcf..2fb65a92c 100644 --- a/docs/development/core-actionscript-classes/using-native-json-functionality.html +++ b/docs/development/core-actionscript-classes/using-native-json-functionality.html @@ -16,7 +16,7 @@ - + @@ -144,7 +144,7 @@ JSONGenericDictExample.revive() function uses this ID to retrieve and return the stored JSONDictionaryExtnExample object from a private static array.

    import flash.display.MovieClip;
    import flash.text.TextField;

    var a_bob1:JSONGenericDictExample = new JSONGenericDictExample("Bob", new Date(Date.parse("01/02/1934")));
    var a_bob2:JSONGenericDictExample = new JSONGenericDictExample("Bob", new Date(Date.parse("05/06/1978")));
    var a_jen:JSONGenericDictExample = new JSONGenericDictExample("Jen", new Date(Date.parse("09/09/1999")));

    var e = new JSONDictionaryExtnExample();
    e[a_bob1] = {earnings: 40, violations: 2};
    e[a_bob2] = {earnings: 10, violations: 1};
    e[a_jen] = {earnings: 25, violations: 3};

    trace("JSON.stringify(e): " + JSON.stringify(e)); // {"class JSONDictionaryExtnExample":
    //{"id_class_JSONGenericDictExample_10001":
    //{"earnings":10,"violations":1},
    //"id_class_JSONGenericDictExample_10002":
    //{"earnings":25,"violations":3},
    //"id_class_JSONGenericDictExample_10000":
    // {"earnings":40,"violations":2}}}

    var e_result = JSON.stringify(e);

    var e1 = new JSONDictionaryExtnExample();
    var e2 = new JSONDictionaryExtnExample();

    // It's somewhat easy to convert the string from JSON.stringify(e) back
    // into a dictionary (turn it into an object via JSON.parse, then loop
    // over that object's properties to construct a fresh dictionary).
    //
    // The harder exercise is to handle situations where the dictionaries
    // themselves are nested in the object passed to JSON.stringify and
    // thus does not occur at the topmost level of the resulting string.
    //
    // (For example: consider roundtripping something like
    // var tricky_array = [e1, [[4, e2, 6]], {table:e3}]
    // where e1, e2, e3 are all dictionaries. Furthermore, consider
    // dictionaries that contain references to dictionaries.)
    //
    // This parsing (or at least some instances of it) can be done via
    // JSON.parse, but it's not necessarily trivial. Careful consideration
    // of how toJSON, replacer, and reviver can work together is
    // necessary.

    var e_roundtrip =
    JSON.parse(e_result,
    // This is a reviver that is focused on rebuilding JSONDictionaryExtnExample objects.
    function (k, v) {
    if ("class JSONDictionaryExtnExample" in v) { // special marker tag;
    //see JSONDictionaryExtnExample.toJSON().
    var e = new JSONDictionaryExtnExample();
    var contents = v["class JSONDictionaryExtnExample"];
    for (var i in contents) {
    // Reviving JSONGenericDictExample objects from string
    // identifiers is also special;
    // see JSONGenericDictExample constructor and
    // JSONGenericDictExample's revive() method.
    e[JSONGenericDictExample.revive(i)] = contents[i];
    }
    return e;
    } else {
    return v;
    }
    });

    trace("// == Here is an extended Dictionary that has been round-tripped ==");
    trace("// == Note that we have revived Jen/Jan during the roundtrip. ==");
    trace("e: " + e); //[JSONDictionaryExtnExample <Bob=[e=40,v=2], Bob=[e=10,v=1],
    //Jen=[e=25,v=3]>]
    trace("e_roundtrip: " + e_roundtrip); //[JSONDictionaryExtnExample <Bob=[e=40,v=2],
    //Bob=[e=10,v=1], Jen=[e=25,v=3]>]
    trace("Is e_roundtrip a JSONDictionaryExtnExample? " + (e_roundtrip is JSONDictionaryExtnExample)); //true
    trace("Name change: Jen is now Jan");
    a_jen.dname = "Jan"

    trace("e: " + e); //[JSONDictionaryExtnExample <Bob=[e=40,v=2], Bob=[e=10,v=1],
    //Jan=[e=25,v=3]>]
    trace("e_roundtrip: " + e_roundtrip); //[JSONDictionaryExtnExample <Bob=[e=40,v=2],
    //Bob=[e=10,v=1], Jan=[e=25,v=3]>]

    More Help topics

    JSON class

    The prototype object

    ECMA-262 specification

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions.html b/docs/development/core-actionscript-classes/using-regular-expressions.html index 9bbab400b..9aee58df8 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ expressions as defined in the ECMAScript edition 3 language specification (ECMA-262).

    More Help topics

    RegExp class

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/basics-of-regular-expressions.html b/docs/development/core-actionscript-classes/using-regular-expressions/basics-of-regular-expressions.html index af054a682..115a0b16c 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/basics-of-regular-expressions.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/basics-of-regular-expressions.html @@ -16,7 +16,7 @@ - + @@ -55,7 +55,7 @@ a United States postal code should contain five or nine numbers.

    Regular expression
    A program statement defining a pattern of characters that can be used to confirm whether other strings match that pattern or to replace portions of a string.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/methods-for-using-regular-expressions-with-strings.html b/docs/development/core-actionscript-classes/using-regular-expressions/methods-for-using-regular-expressions-with-strings.html index 977028bcb..e07e4cd8a 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/methods-for-using-regular-expressions-with-strings.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/methods-for-using-regular-expressions-with-strings.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ parameters: match(), replace(), search(), and split(). For more information on these methods, see Finding patterns in strings and replacing substrings.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax.html index 5df2b28f7..494104fb6 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax.html @@ -16,7 +16,7 @@ - + @@ -44,7 +44,7 @@ match(), replace(), and search(). For more information on these methods, see Finding patterns in strings and replacing substrings.

    More Help topics

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/alternation.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/alternation.html index a464e9f5c..8a0520da1 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/alternation.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/alternation.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ alternator. The following regular expression matches cat followed by nap or nip:

    var pattern:RegExp = /cat(nap|nip)/;

    For more information, see Groups.

    The following two regular expressions, one using the | alternator, the other using a character class (defined with [ and ]), are equivalent:

    /1|3|5|7|9/
    /[13579]/

    For more information, see Character classes.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/character-classes.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/character-classes.html index 8cd3303e2..f79df21f7 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/character-classes.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/character-classes.html @@ -16,7 +16,7 @@ - + @@ -48,7 +48,7 @@ to indicate negation. Otherwise, you are simply adding the caret character to the characters in the character class. For example, the following character class matches any one of a number of symbol characters, including the caret:

    /[!.,#+*%$&^]/
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/characters-metacharacters-and-metasequences.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/characters-metacharacters-and-metasequences.html index 31aacae7d..b770bf6d8 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/characters-metacharacters-and-metasequences.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/characters-metacharacters-and-metasequences.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ sections provide details on using metacharacters and metasequences.

    About metacharacters

    The following table summarizes the metacharacters that you can use in regular expressions:

    Metacharacter

    Description

    ^(caret)

    Matches at the start of the string. With them (multiline ) flag set, the caret matches the start of a line as well (see Flags and properties ). Note that when used at the start of a character class, the caret indicates negation, not the start of a string. For more information, see Character classes.

    $(dollar sign)

    Matches at the end of the string. With them (multiline ) flag set, $ matches the position before a newline (\n ) character as well. For more information, see Flags and properties.

    \(backslash)

    Escapes the special metacharacter meaning of special characters.

    Also, use the backslash character if you want to use a forward slash character in a regular expression literal, as in/1\/2/ (to match the character 1, followed by the forward slash character, followed by the character 2).

    .(dot)

    Matches any single character.

    A dot matches a newline character (\n ) only if thes (dotall ) flag is set. For more information, see Flags and properties.

    *(star)

    Matches the previous item repeated zero or more times.

    For more information, see Quantifiers.

    +(plus)

    Matches the previous item repeated one or more times.

    For more information, see Quantifiers.

    ?(question mark)

    Matches the previous item repeated zero times or one time.

    For more information, see Quantifiers.

    (and )

    Defines groups within the regular expression. Use groups for the following:

    • To confine the scope of the | alternator:/(a|b|c)d/

    • To define the scope of a quantifier:/(walla.)2/

    • In backreferences. For example, the\1 in the following regular expression matches whatever matched the first parenthetical group of the pattern:

    • /(\w*) is repeated: \1/

    For more information, see Groups.

    [and ]

    Defines a character class, which defines possible matches for a single character:

    /[aeiou]/ matches any one of the specified characters.

    Within character classes, use the hyphen (-) to designate a range of characters:

    /[A-Z0-9]/matches uppercase A through Z or 0 through 9.

    Within character classes, insert a backslash to escape the ] and

    - characters:

    /[+\-]\d+/matches either + or- before one or more digits.

    Within character classes, other characters, which are normally metacharacters, are treated as normal characters (not metacharacters), without the need for a backslash:

    /[$]/ £ matches either $or £.

    For more information, see Character classes.

    |(pipe)

    Used for alternation, to match either the part on the left side or the part on the right side:

    /abc|xyz/ matches either abc orxyz .

    About metasequences

    Metasequences are sequences of characters that have special meaning in a regular expression pattern. The following table describes these metasequences:

    MetasequenceDescription


    {n}
    {n,}
    {n, n}


    Specifies a numeric quantifier or quantifier range for the previous item:

    /A{27}/ matches the character A repeated 27 times.
    /A{3,}/ matches the character A repeated 3 or more times.
    /A{3,5}/ matches the character A repeated 3 to 5 times.

    For more information, see Quantifiers.
    \bMatches at the position between a word character and a nonword character. If the first or last character in the string is a word character, also matches the start or end of the string.

    Metasequence

    Description

    {n}

    {n,}

    and

    {n,n}

    Specifies a numeric quantifier or quantifier range for the previous item:

    /A27/ matches the character Arepeated 27times.

    /A{3,}/ matches the character Arepeated 3 or more times.

    /A{3,5}/ matches the character Arepeated 3 to5 times.

    For more information, see [Quantifiers](/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/quantifiers) .

    \b

    Matches at the position between a word character and a nonword character. If the first or last character in the string is a word character, also matches the start or end of the string.

    \B

    Matches at the position between two word characters. Also matches the position between two nonword characters.

    \d

    Matches a decimal digit.

    \D

    Matches any character other than a digit.

    \f

    Matches a form feed character.

    \n

    Matches the newline character.

    \r

    Matches the return character.

    \s

    Matches any white-space character (a space, tab, newline, or return character).

    \S

    Matches any character other than a white-space character.

    \t

    Matches the tab character.

    \unnnn

    Matches the Unicode character with the character code specified by the hexadecimal number nnnn. For example,\u263a is the smiley character.

    \v

    Matches a vertical feed character.

    \w

    Matches a word character ( AZ –,az –,0-9 , or_ ). Note that\w does not match non-English characters, such asé,ñ, orç.

    \W

    Matches any character other than a word character.

    \\xnn

    Matches the character with the specified ASCII value, as defined by the hexadecimal number nn.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/creating-an-instance-of-a-regular-expression.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/creating-an-instance-of-a-regular-expression.html index 656e4a24e..095f0d5fa 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/creating-an-instance-of-a-regular-expression.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/creating-an-instance-of-a-regular-expression.html @@ -16,7 +16,7 @@ - + @@ -49,7 +49,7 @@ single backslash character.

    The sections that follow describe syntax for defining regular expression patterns.

    For more information on flags, see Flags and properties.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/flags-and-properties.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/flags-and-properties.html index 248621ddc..25a7420bb 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/flags-and-properties.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/flags-and-properties.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@ (However, the match() method does set lastIndex to 0.)

    You can set the lastIndex property to adjust the starting position in the string for regular expression matching.

    The source property

    The source property specifies the string that defines the pattern portion of a regular expression. For example:

    var pattern:RegExp = /foo/gi;
    trace(pattern.source); // foo
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/groups.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/groups.html index 17b6d9ab9..b5a4e837e 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/groups.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/groups.html @@ -16,7 +16,7 @@ - + @@ -57,7 +57,7 @@ of the result array:

    var myPattern:RegExp = /([a-z]+)(?P<digits>\d+)[a-z]+/;
    var str:String = "a123bcd";
    var result:Array = myPattern.exec(str);
    trace(result.digits); // 123

    Here is another example, which uses two named groups, with the identifiers name and dom:

    var emailPattern:RegExp =
    /(?P<name>(\w|[_.\-])+)@(?P<dom>((\w|-)+))+\.\w{2,4}+/;
    var address:String = "bob@example.com";
    var result:Array = emailPattern.exec(address);
    trace(result.name); // bob
    trace(result.dom); // example

    Note: Named groups are not part of the ECMAScript language specification. They are an added feature in ActionScript 3.0.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/quantifiers.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/quantifiers.html index f292164ac..daa932e6d 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/quantifiers.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expression-syntax/quantifiers.html @@ -16,7 +16,7 @@ - + @@ -37,7 +37,7 @@ the lazy *? quantifier, matches <p> followed by the minimum number of characters possible (lazy), followed by </p>:

    /<p>.*?<\/p>/

    Keep in mind the following points about quantifiers:

    • The quantifiers {0} and {0,0} do not exclude an item from a match.

    • Do not combine multiple quantifiers, as in /abc+*/.

    • The dot (.) does not span lines unless the s (dotall) flag is set, even if it is followed by a * quantifier. For example, consider the following code:

      var str:String = "<p>Test\n";
      str += "Multiline</p>";
      var re:RegExp = /<p>.*<\/p>/;
      trace(str.match(re)); // null;

      re = /<p>.*<\/p>/s;
      trace(str.match(re));
      // output: <p>Test
      // Multiline</p>

    For more information, see Flags and properties.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expressions-example-a-wiki-parser.html b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expressions-example-a-wiki-parser.html index 88acc67c2..f51522542 100644 --- a/docs/development/core-actionscript-classes/using-regular-expressions/regular-expressions-example-a-wiki-parser.html +++ b/docs/development/core-actionscript-classes/using-regular-expressions/regular-expressions-example-a-wiki-parser.html @@ -16,7 +16,7 @@ - + @@ -109,7 +109,7 @@ string: that is, the dollar amount without the $ sign. The method applies an exchange rate conversion and returns the resulting string (with a trailing € symbol instead of a leading $ symbol).

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-application-domains.html b/docs/development/core-actionscript-classes/working-with-application-domains.html index 7a6bee5a3..87d66b812 100644 --- a/docs/development/core-actionscript-classes/working-with-application-domains.html +++ b/docs/development/core-actionscript-classes/working-with-application-domains.html @@ -16,7 +16,7 @@ - + @@ -82,7 +82,7 @@ references to the child SWF.

    This technique lets loaded modules share the loader's singleton objects and static class members.

    The following code creates a new child domain of the current domain, and starts loading a SWF using that application domain:

    var appDomainC:ApplicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);

    var contextC:LoaderContext = new LoaderContext(false, appDomainC);
    var loaderC:Loader = new Loader();
    loaderC.load(new URLRequest("module3.swf"), contextC);
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-arrays.html b/docs/development/core-actionscript-classes/working-with-arrays.html index bd30a4beb..98eee369e 100644 --- a/docs/development/core-actionscript-classes/working-with-arrays.html +++ b/docs/development/core-actionscript-classes/working-with-arrays.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ the same data type.

    More Help topics

    Array class

    Vector class

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-arrays/arrays-example-playlist.html b/docs/development/core-actionscript-classes/working-with-arrays/arrays-example-playlist.html index d139a8e7b..a8f9484f1 100644 --- a/docs/development/core-actionscript-classes/working-with-arrays/arrays-example-playlist.html +++ b/docs/development/core-actionscript-classes/working-with-arrays/arrays-example-playlist.html @@ -16,7 +16,7 @@ - + @@ -94,7 +94,7 @@ the _genres variable's split() method is called, splitting the String into an array of values using the specified delimiter (the literal string value ";" as before).

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-arrays/associative-arrays.html b/docs/development/core-actionscript-classes/working-with-arrays/associative-arrays.html index 559ad92c7..9aa4aa06a 100644 --- a/docs/development/core-actionscript-classes/working-with-arrays/associative-arrays.html +++ b/docs/development/core-actionscript-classes/working-with-arrays/associative-arrays.html @@ -16,7 +16,7 @@ - + @@ -93,7 +93,7 @@ only weak references is eligible for garbage collection. For example, in the following code, you do not need to delete the myObject key from myMap in order to make the object eligible for garbage collection:

    import flash.utils.Dictionary;

    var myObject:Object = new Object();
    var myMap:Dictionary = new Dictionary(true);
    myMap[myObject] = "foo";
    myObject = null; // Make object eligible for garbage collection.
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-arrays/basics-of-arrays.html b/docs/development/core-actionscript-classes/working-with-arrays/basics-of-arrays.html index 677592273..acdd77f25 100644 --- a/docs/development/core-actionscript-classes/working-with-arrays/basics-of-arrays.html +++ b/docs/development/core-actionscript-classes/working-with-arrays/basics-of-arrays.html @@ -16,7 +16,7 @@ - + @@ -84,7 +84,7 @@ together, it looks like this: Vector.<T>. In this documentation, the class specified in the type parameter is represented generically as T.

    Vector
    A type of array whose elements are all instances of the same data type.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-arrays/cloning-arrays.html b/docs/development/core-actionscript-classes/working-with-arrays/cloning-arrays.html index 04aab0c4c..5cbdf17e1 100644 --- a/docs/development/core-actionscript-classes/working-with-arrays/cloning-arrays.html +++ b/docs/development/core-actionscript-classes/working-with-arrays/cloning-arrays.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ class, and then reading the array back into a new array. This function accepts an object so that it can be used with both indexed arrays and associative arrays, as shown in the following code:

    import flash.utils.ByteArray;

    function clone(source:Object):*
    {
    var myBA:ByteArray = new ByteArray();
    myBA.writeObject(source);
    myBA.position = 0;
    return(myBA.readObject());
    }
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-arrays/extending-the-array-class.html b/docs/development/core-actionscript-classes/working-with-arrays/extending-the-array-class.html index 6d0078d57..45ef85e18 100644 --- a/docs/development/core-actionscript-classes/working-with-arrays/extending-the-array-class.html +++ b/docs/development/core-actionscript-classes/working-with-arrays/extending-the-array-class.html @@ -16,7 +16,7 @@ - + @@ -98,7 +98,7 @@ accepts an arbitrary list of arguments. The overridden unshift() method uses an algorithm very similar to that used by the push() method, as shown in the following example code:

        AS3 override function unshift(...args):uint
    {
    for (var i:* in args)
    {
    if (!(args[i] is dataType))
    {
    args.splice(i,1);
    }
    }
    return (super.unshift.apply(this, args));
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-arrays/indexed-arrays.html b/docs/development/core-actionscript-classes/working-with-arrays/indexed-arrays.html index 472d07c90..9fafae312 100644 --- a/docs/development/core-actionscript-classes/working-with-arrays/indexed-arrays.html +++ b/docs/development/core-actionscript-classes/working-with-arrays/indexed-arrays.html @@ -16,7 +16,7 @@ - + @@ -299,7 +299,7 @@ Vector instances are always returned with comma-separated values, no matter what separator you specify for the main array elements, as the following example shows:

    var nested:Array = ["b","c","d"];
    var letters:Array = ["a",nested,"e"];
    var joined:String = letters.join("+");
    trace(joined); // output: a+b,c,d+e
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-arrays/multidimensional-arrays.html b/docs/development/core-actionscript-classes/working-with-arrays/multidimensional-arrays.html index a494ca1f9..24ef9c5af 100644 --- a/docs/development/core-actionscript-classes/working-with-arrays/multidimensional-arrays.html +++ b/docs/development/core-actionscript-classes/working-with-arrays/multidimensional-arrays.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ associated with each key. Because masterTaskList is an associative array, the elements are not necessarily retrieved in the order that you may expect, as the following example shows:

    for (var day:String in masterTaskList)
    {
    trace(day + ": " + masterTaskList[day])
    }
    /* output:
    Sunday: mow lawn,fix chair
    Wednesday: wash dishes,dentist,wash dog
    Friday: wash dishes,clean house
    Thursday: wash dishes
    Monday: wash dishes,take out trash
    Saturday: wash dishes,wash car,pay rent
    Tuesday: wash dishes,pay bills
    */
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-dates-and-times.html b/docs/development/core-actionscript-classes/working-with-dates-and-times.html index 8c0f1c4cb..82496f606 100644 --- a/docs/development/core-actionscript-classes/working-with-dates-and-times.html +++ b/docs/development/core-actionscript-classes/working-with-dates-and-times.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ perform actions after a certain delay or at repeated intervals.

    More Help topics

    Date class

    flash.utils.Timer class

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-dates-and-times/controlling-time-intervals.html b/docs/development/core-actionscript-classes/working-with-dates-and-times/controlling-time-intervals.html index fcab9ae60..a6a423077 100644 --- a/docs/development/core-actionscript-classes/working-with-dates-and-times/controlling-time-intervals.html +++ b/docs/development/core-actionscript-classes/working-with-dates-and-times/controlling-time-intervals.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ does not recommend that you use them in new ActionScript 3.0 applications. In general, it is easier and more efficient to use the Timer class in your applications.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-dates-and-times/date-and-time-example-simple-analog-clock.html b/docs/development/core-actionscript-classes/working-with-dates-and-times/date-and-time-example-simple-analog-clock.html index e61ac2e5f..bb3762b0e 100644 --- a/docs/development/core-actionscript-classes/working-with-dates-and-times/date-and-time-example-simple-analog-clock.html +++ b/docs/development/core-actionscript-classes/working-with-dates-and-times/date-and-time-example-simple-analog-clock.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ minute.

    The hour hand updates every minute, too, so it can show some progress as the minutes tick by. It rotates 30 degrees each hour (360/12), but it also rotates half a degree each minute (30 degrees divided by 60 minutes).

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-dates-and-times/managing-calendar-dates-and-times.html b/docs/development/core-actionscript-classes/working-with-dates-and-times/managing-calendar-dates-and-times.html index a7a0afb6f..02ca951db 100644 --- a/docs/development/core-actionscript-classes/working-with-dates-and-times/managing-calendar-dates-and-times.html +++ b/docs/development/core-actionscript-classes/working-with-dates-and-times/managing-calendar-dates-and-times.html @@ -16,7 +16,7 @@ - + @@ -82,7 +82,7 @@ increments—some have half-hour offsets from neighboring zones.

    The following example uses the time zone offset to convert a date from local time to UTC. It does the conversion by first calculating the time zone value in milliseconds and then adjusting the Date value by that amount:

    // creates a Date in local time 
    var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");

    // converts the Date to UTC by adding or subtracting the time zone offset
    var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000;
    nextDay.setTime(nextDay.getTime() + offsetMilliseconds);

    Adobe recommends

    2 - 1 = 2 in math operations with dates in ActionScript

    JabbyPanda

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings.html b/docs/development/core-actionscript-classes/working-with-strings.html index cbd9ccaba..8a1828c29 100644 --- a/docs/development/core-actionscript-classes/working-with-strings.html +++ b/docs/development/core-actionscript-classes/working-with-strings.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ RegExp class

    parseFloat() function

    parseInt() function

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/basics-of-strings.html b/docs/development/core-actionscript-classes/working-with-strings/basics-of-strings.html index 3df9c5e43..98b4f882c 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/basics-of-strings.html +++ b/docs/development/core-actionscript-classes/working-with-strings/basics-of-strings.html @@ -16,7 +16,7 @@ - + @@ -49,7 +49,7 @@ A standard system for representing text characters and symbols in computer programs. The Unicode system allows for the use of any character in any writing system.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/comparing-strings.html b/docs/development/core-actionscript-classes/working-with-strings/comparing-strings.html index aa8703ae3..95cec8aae 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/comparing-strings.html +++ b/docs/development/core-actionscript-classes/working-with-strings/comparing-strings.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ code value of each character in the string, comparing characters from left to right, as in the following:

    trace("A" < "B"); // true
    trace("A" < "a"); // true
    trace("Ab" < "az"); // true
    trace("abc" < "abza"); // true

    Use the == and != operators to compare strings with each other and to compare strings with other types of objects, as the following example shows:

    var str1:String = "1";
    var str1b:String = "1";
    var str2:String = "2";
    trace(str1 == str1b); // true
    trace(str1 == str2); // false
    var total:uint = 1;
    trace(str1 == total); // true
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/concatenating-strings.html b/docs/development/core-actionscript-classes/working-with-strings/concatenating-strings.html index 64d642c1b..1d339cd02 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/concatenating-strings.html +++ b/docs/development/core-actionscript-classes/working-with-strings/concatenating-strings.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ object to a String object in order to evaluate the expression, as shown in this example:

    var str:String = "Area = ";
    var area:Number = Math.PI * Math.pow(3, 2);
    str = str + area; // str == "Area = 28.274333882308138"

    However, you can use parentheses for grouping to provide context for the + operator, as the following example shows:

    trace("Total: $" + 4.55 + 1.45); // output: Total: $4.551.45
    trace("Total: $" + (4.55 + 1.45)); // output: Total: $6
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/converting-strings-between-uppercase-and-lowercase.html b/docs/development/core-actionscript-classes/working-with-strings/converting-strings-between-uppercase-and-lowercase.html index fc7c10b2f..ca2be821d 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/converting-strings-between-uppercase-and-lowercase.html +++ b/docs/development/core-actionscript-classes/working-with-strings/converting-strings-between-uppercase-and-lowercase.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ toUpperCase() method convert alphabetical characters in the string to lowercase and uppercase, respectively:

    var str:String = "Dr. Bob Roberts, #9."
    trace(str.toLowerCase()); // dr. bob roberts, #9.
    trace(str.toUpperCase()); // DR. BOB ROBERTS, #9.

    After these methods are executed, the source string remains unchanged. To transform the source string, use the following code:

    str = str.toUpperCase();

    These methods work with extended characters, not simply a–z and A–Z:

    var str:String = "José Barça";
    trace(str.toUpperCase(), str.toLowerCase()); // JOSÉ BARÇA josé barça
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/creating-strings.html b/docs/development/core-actionscript-classes/working-with-strings/creating-strings.html index 3ae1966de..96ce4dcfe 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/creating-strings.html +++ b/docs/development/core-actionscript-classes/working-with-strings/creating-strings.html @@ -16,7 +16,7 @@ - + @@ -37,7 +37,7 @@ string literals. When pasting text from another source into ActionScript, be sure to use the correct characters.

    As the following table shows, you can use the backslash escape character (\) to define other characters in string literals:

    Escape sequenceCharacter
    \bBackspace
    \fForm feed
    \nNewline
    \rCarriage return
    \tTab
    \u nnnnThe Unicode character with the character code specified by the hexadecimal number nnnn ; for example, \u263a is the smiley character.
    \\x nnThe ASCII character with the character code specified by the hexadecimal number nn
    \'Single quotation mark
    \"Double quotation mark
    \\Single backslash character
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/finding-substrings-and-patterns-in-strings.html b/docs/development/core-actionscript-classes/working-with-strings/finding-substrings-and-patterns-in-strings.html index 550b5e3ae..0c89af333 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/finding-substrings-and-patterns-in-strings.html +++ b/docs/development/core-actionscript-classes/working-with-strings/finding-substrings-and-patterns-in-strings.html @@ -16,7 +16,7 @@ - + @@ -81,7 +81,7 @@ way will vary depending on the number of parenthetical matches. You can determine the number of parenthetical matches by checking arguments.length - 3 within the function code.

  • The index position in the string where the match begins.

  • The complete string.

  • Adobe recommends

    Trim Leading and Trailing 00s From a String

    Doug Reynolds

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/obtaining-string-representations-of-other-objects.html b/docs/development/core-actionscript-classes/working-with-strings/obtaining-string-representations-of-other-objects.html index f4776f62e..d5cf0b5fe 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/obtaining-string-representations-of-other-objects.html +++ b/docs/development/core-actionscript-classes/working-with-strings/obtaining-string-representations-of-other-objects.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ and objects that are not strings, you do not need to use the toString() method. For details on concatenation, see the next section.

    The String() global function returns the same value for a given object as the value returned by the object calling the toString() method.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/strings-example-ascii-art.html b/docs/development/core-actionscript-classes/working-with-strings/strings-example-ascii-art.html index d1b6e57ba..92f6f5a29 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/strings-example-ascii-art.html +++ b/docs/development/core-actionscript-classes/working-with-strings/strings-example-ascii-art.html @@ -16,7 +16,7 @@ - + @@ -99,7 +99,7 @@ operator ( += ). In addition, at the end of each row of pixels, a newline character is concatenated to the end of the result String, forcing the line to wrap to create a new row of character "pixels."

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/the-length-property.html b/docs/development/core-actionscript-classes/working-with-strings/the-length-property.html index febdc4e0d..fd6f097c4 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/the-length-property.html +++ b/docs/development/core-actionscript-classes/working-with-strings/the-length-property.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-strings/working-with-characters-in-strings.html b/docs/development/core-actionscript-classes/working-with-strings/working-with-characters-in-strings.html index e86adfe09..33f48baf0 100644 --- a/docs/development/core-actionscript-classes/working-with-strings/working-with-characters-in-strings.html +++ b/docs/development/core-actionscript-classes/working-with-strings/working-with-characters-in-strings.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ 5:

    "yellow"

    You can examine individual characters in various positions in a string using the charAt() method and the charCodeAt() method, as in this example:

    var str:String = "hello world!";
    for (var i:int = 0; i < str.length; i++)
    {
    trace(str.charAt(i), "-", str.charCodeAt(i));
    }

    When you run this code, the following output is produced:

    h - 104
    e - 101
    l - 108
    l - 108
    o - 111
    - 32
    w - 119
    o - 111
    r - 114
    l - 108
    d - 100
    ! - 33

    You can also use character codes to define a string using the fromCharCode() method, as the following example shows:

    var myStr:String = String.fromCharCode(104,101,108,108,111,32,119,111,114,108,100,33);
    // Sets myStr to "hello world!"
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml.html b/docs/development/core-actionscript-classes/working-with-xml.html index b8b22fb71..8998f68e0 100644 --- a/docs/development/core-actionscript-classes/working-with-xml.html +++ b/docs/development/core-actionscript-classes/working-with-xml.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/assembling-and-transforming-xml-objects.html b/docs/development/core-actionscript-classes/working-with-xml/assembling-and-transforming-xml-objects.html index b66a13e0b..dec8ac2f5 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/assembling-and-transforming-xml-objects.html +++ b/docs/development/core-actionscript-classes/working-with-xml/assembling-and-transforming-xml-objects.html @@ -16,13 +16,13 @@ - +

    Assembling and transforming XML objects

    Use the prependChild() method or the appendChild() method to add a property to the beginning or end of an XML object’s list of properties, as the following example shows:

    var x1:XML = <p>Line 1</p>
    var x2:XML = <p>Line 2</p>
    var x:XML = <body></body>
    x = x.appendChild(x1);
    x = x.appendChild(x2);
    x = x.prependChild(<p>Line 0</p>);
    // x == <body><p>Line 0</p><p>Line 1</p><p>Line 2</p></body>

    Use the insertChildBefore() method or the insertChildAfter() method to add a property before or after a specified property, as follows:

    var x:XML =
    <body>
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>
    </body>
    var newNode:XML = <p>Paragraph 1.5</p>
    x = x.insertChildAfter(x.p[0], newNode)
    x = x.insertChildBefore(x.p[2], <p>Paragraph 1.75</p>)

    As the following example shows, you can also use curly brace operators ( { and } ) to pass data by reference (from other variables) when constructing XML objects:

    var ids:Array = [121, 122, 123];
    var names:Array = [["Murphy","Pat"], ["Thibaut","Jean"], ["Smith","Vijay"]]
    var x:XML = new XML("<employeeList></employeeList>");

    for (var i:int = 0; i < 3; i++)
    {
    var newnode:XML = new XML();
    newnode =
    <employee id={ids[i]}>
    <last>{names[i][0]}</last>
    <first>{names[i][1]}</first>
    </employee>;

    x = x.appendChild(newnode)
    }

    You can assign properties and attributes to an XML object by using the = operator, as in the following:

    var x:XML =
    <employee>
    <lastname>Smith</lastname>
    </employee>
    x.firstname = "Jean";
    x.@id = "239";

    This sets the XML object x to the following:

    <employee id="239">
    <lastname>Smith</lastname>
    <firstname>Jean</firstname>
    </employee>

    You can use the + and += operators to concatenate XMLList objects:

    var x1:XML = <a>test1</a>
    var x2:XML = <b>test2</b>
    var xList:XMLList = x1 + x2;
    xList += <c>test3</c>

    This sets the XMLList object xList to the following:

    <a>test1</a>
    <b>test2</b>
    <c>test3</c>
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/basics-of-xml.html b/docs/development/core-actionscript-classes/working-with-xml/basics-of-xml.html index 5b251fac7..e5ce8af1a 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/basics-of-xml.html +++ b/docs/development/core-actionscript-classes/working-with-xml/basics-of-xml.html @@ -16,13 +16,13 @@ - +

    Basics of XML

    XML is a standard way of representing structured information so that it is easy for computers to work with and reasonably easy for people to write and understand. XML is an abbreviation for eXtensible Markup Language. The XML standard is available at https://www.w3.org/XML/ .

    XML offers a standard and convenient way to categorize data, to make it easier to read, access, and manipulate. XML uses a tree structure and tag structure that is similar to HTML. Here is a simple example of XML data:

    <song>
    <title>What you know?</title>
    <artist>Steve and the flubberblubs</artist>
    <year>1989</year>
    <lastplayed>2006-10-17-08:31</lastplayed>
    </song>

    XML data can also be more complex, with tags nested in other tags as well as attributes and other structural components. Here is a more complex example of XML data:

    <album>
    <title>Questions, unanswered</title>
    <artist>Steve and the flubberblubs</artist>
    <year>1989</year>
    <tracks>
    <song tracknumber="1" length="4:05">
    <title>What do you know?</title>
    <artist>Steve and the flubberblubs</artist>
    <lastplayed>2006-10-17-08:31</lastplayed>
    </song>
    <song tracknumber="2" length="3:45">
    <title>Who do you know?</title>
    <artist>Steve and the flubberblubs</artist>
    <lastplayed>2006-10-17-08:35</lastplayed>
    </song>
    <song tracknumber="3" length="5:14">
    <title>When do you know?</title>
    <artist>Steve and the flubberblubs</artist>
    <lastplayed>2006-10-17-08:39</lastplayed>
    </song>
    <song tracknumber="4" length="4:19">
    <title>Do you know?</title>
    <artist>Steve and the flubberblubs</artist>
    <lastplayed>2006-10-17-08:44</lastplayed>
    </song>
    </tracks>
    </album>

    Notice that this XML document contains other complete XML structures within it (such as the song tags with their children). It also demonstrates other XML structures such as attributes ( tracknumber and length in the song tags), and tags that contain other tags rather than containing data (such as the tracks tag).

    Getting started with XML

    If you have little or no experience with XML, here is a brief description of the most common aspects of XML data. XML data is written in plain-text form, with a specific syntax for organizing the information into a structured format. Generally, a single set of XML data is known as an XML document . In XML format, data is organized into elements (which can be single data items or containers for other elements) using a hierarchical structure. Every XML document has a single element as the top level or main item; inside this root element there may be a single piece of information, although there are more likely to be other elements, which in turn contain other elements, and so forth. For example, this XML document contains the information about a music album:

    <song tracknumber="1" length="4:05">
    <title>What do you know?</title>
    <artist>Steve and the flubberblubs</artist>
    <mood>Happy</mood>
    <lastplayed>2006-10-17-08:31</lastplayed>
    </song>

    Each element is distinguished by a set of tags —the element’s name wrapped in angle brackets (less-than and greater-than signs). The opening tag, indicating the start of the element, has the element name:

    <title>

    The closing tag, which marks the end of the element, has a forward slash before the element’s name:

    </title>

    If an element contains no content, it can be written as an empty element (sometimes called a self-closing element). In XML, this element:

    <lastplayed/>

    is identical to this element:

    <lastplayed></lastplayed>

    In addition to the element’s content contained between the opening and closing tags, an element can also include other values, known as attributes , defined in the element’s opening tag. For example, this XML element defines a single attribute named length , with the value "4:19" :

    <song length="4:19"></song>

    Each XML element has content, which is either a single value, one or more XML elements, or nothing (for an empty element).

    Learning more about XML

    To learn more about working with XML, there are a number of additional books and resources for learning more about XML, including these web sites:

    ActionScript classes for working with XML

    ActionScript 3.0 includes several classes that are used for working with XML-structured information. The two main classes are as follows:

    • XML: Represents a single XML element, which can be an XML document with multiple children or a single-value element within a document.
    • XMLList: Represents a set of XML elements. An XMLList object is used when there are multiple XML elements that are “siblings” (at the same level, and contained by the same parent, in the XML document’s hierarchy). For instance, an XMLList instance would be the easiest way to work with this set of XML elements (presumably contained in an XML document):
    <artist type="composer">Fred Wilson</artist>
    <artist type="conductor">James Schmidt</artist>
    <artist type="soloist">Susan Harriet Thurndon</artist>

    For more advanced uses involving XML namespaces, ActionScript also includes the Namespace and QName classes. For more information, see Using XML namespaces.

    In addition to the built-in classes for working with XML, ActionScript 3.0 also includes several operators that provide specific functionality for accessing and manipulating XML data. This approach to working with XML using these classes and operators is known as ECMAScript for XML (E4X), as defined by the ECMA-357 edition 2 specification.

    Important concepts and terms

    The following reference list contains important terms you will encounter when programming XML handling routines:

    • Element A single item in an XML document, identified as the content contained between a starting tag and an ending tag (including the tags). XML elements can contain text data or other elements, or can be empty.
    • Empty element An XML element that contains no child elements. Empty elements are often written as self-closing tags (such as <element/>).
    • Document A single XML structure. An XML document can contain any number of elements (or can consist only of a single empty element); however, an XML document must have a single top-level element that contains all the other elements in the document.
    • Node Another name for an XML element.
    • Attribute A named value associated with an element that is written into the opening tag of the element in attributename="value" format, rather than being written as a separate child element nested inside the element.
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/e4x-approach-to-xml-processing.html b/docs/development/core-actionscript-classes/working-with-xml/e4x-approach-to-xml-processing.html index e97a3b238..9723e548c 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/e4x-approach-to-xml-processing.html +++ b/docs/development/core-actionscript-classes/working-with-xml/e4x-approach-to-xml-processing.html @@ -16,13 +16,13 @@ - +

    The E4X approach to XML processing

    The ECMAScript for XML specification defines a set of classes and functionality for working with XML data. These classes and functionality are known collectively as E4X. ActionScript 3.0 includes the following E4X classes: XML, XMLList, QName, and Namespace.

    The methods, properties, and operators of the E4X classes are designed with the following goals:

    • Simplicity - Where possible, E4X makes it easier to write and understand code for working with XML data.
    • Consistency - The methods and reasoning behind E4X are internally consistent and consistent with other parts of ActionScript.
    • Familiarity - You manipulate XML data with well-known operators, such as the dot ( . ) operator.
    note

    There is a different XML class in ActionScript 2.0. In ActionScript 3.0 that class has been renamed as XMLDocument, so that the name does not conflict with the ActionScript 3.0 XML class that is part of E4X. In ActionScript 3.0, the legacy classes—XMLDocument, XMLNode, XMLParser, and XMLTag—are included in the flash.xml package primarily for legacy support. The new E4X classes are core classes; you need not import a package to use them. For details on the legacy ActionScript 2.0 XML classes, see the flash.xml package in the ActionScript 3.0 Reference for the Adobe Flash Platform .

    Here is an example of manipulating data with E4X:

    var myXML:XML =
    <order>
    <item id='1'>
    <menuName>burger</menuName>
    <price>3.95</price>
    </item>
    <item id='2'>
    <menuName>fries</menuName>
    <price>1.45</price>
    </item>
    </order>

    Often, your application will load XML data from an external source, such as a web service or a RSS feed. However, for clarity, the code examples provided here assign XML data as literals.

    As the following code shows, E4X includes some intuitive operators, such as the dot ( . ) and attribute identifier ( @ ) operators, for accessing properties and attributes in the XML:

    trace(myXML.item[0].menuName); // Output: burger
    trace(myXML.item.(@id==2).menuName); // Output: fries
    trace(myXML.item.(menuName=="burger").price); // Output: 3.95

    Use the appendChild() method to assign a new child node to the XML, as the following snippet shows:

    var newItem:XML =
    <item id="3">
    <menuName>medium cola</menuName>
    <price>1.25</price>
    </item>

    myXML.appendChild(newItem);

    Use the @ and . operators not only to read data, but also to assign data, as in the following:

    myXML.item[0].menuName="regular burger";
    myXML.item[1].menuName="small fries";
    myXML.item[2].menuName="medium cola";

    myXML.item.(menuName=="regular burger").@quantity = "2";
    myXML.item.(menuName=="small fries").@quantity = "2";
    myXML.item.(menuName=="medium cola").@quantity = "2";

    Use a for loop to iterate through nodes of the XML, as follows:

    var total:Number = 0;
    for each (var property:XML in myXML.item)
    {
    var q:int = Number(property.@quantity);
    var p:Number = Number(property.price);
    var itemTotal:Number = q \* p;
    total += itemTotal;
    trace(q + " " + property.menuName + " $" + itemTotal.toFixed(2))
    }
    trace("Total: $", total.toFixed(2));
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/initialising-xml-variables.html b/docs/development/core-actionscript-classes/working-with-xml/initialising-xml-variables.html index f67003b45..ae2f02f79 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/initialising-xml-variables.html +++ b/docs/development/core-actionscript-classes/working-with-xml/initialising-xml-variables.html @@ -16,13 +16,13 @@ - +

    Initializing XML variables

    You can assign an XML literal to an XML object, as follows:

    var myXML:XML =
    <order>
    <item id='1'>
    <menuName>burger</menuName>
    <price>3.95</price>
    </item>
    <item id='2'>
    <menuName>fries</menuName>
    <price>1.45</price>
    </item>
    </order>

    As the following snippet shows, you can also use the new constructor to create an instance of an XML object from a string that contains XML data:

    var str:String = "<order><item id='1'><menuName>burger</menuName>" + "<price>3.95</price></item></order>";
    var myXML:XML = new XML(str);

    If the XML data in the string is not well formed (for example, if a closing tag is missing), you will see a run-time error.

    You can also pass data by reference (from other variables) into an XML object, as the following example shows:

    var tagname:String = "item";
    var attributename:String = "id";
    var attributevalue:String = "5";
    var content:String = "Chicken";
    var x:XML = <{tagname} {attributename}={attributevalue}>{content}</{tagname}>;
    trace(x.toXMLString())
    // Output: <item id="5">Chicken</item>

    To load XML data from a URL, use the URLLoader class, as the following example shows:

    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    var externalXML:XML;
    var loader:URLLoader = new URLLoader();
    var request:URLRequest = new URLRequest("xmlFile.xml");
    loader.load(request);
    loader.addEventListener(Event.COMPLETE, onComplete);

    function onComplete(event:Event):void
    {
    var loader:URLLoader = event.target as URLLoader;
    if (loader != null)
    {
    externalXML = new XML(loader.data);
    trace(externalXML.toXMLString());
    }
    else
    {
    trace("loader is not a URLLoader!");
    }
    }

    To read XML data from a socket connection, use the XMLSocket class. For more information, see the XMLSocket class in the ActionScript 3.0 Reference for the Adobe Flash Platform.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/reading-external-xml-documents.html b/docs/development/core-actionscript-classes/working-with-xml/reading-external-xml-documents.html index fb5736949..d134a80f5 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/reading-external-xml-documents.html +++ b/docs/development/core-actionscript-classes/working-with-xml/reading-external-xml-documents.html @@ -16,13 +16,13 @@ - +

    Reading external XML documents

    You can use the URLLoader class to load XML data from a URL. To use the following code in your applications, replace the XML_URL value in the example with a valid URL:

    import flash.events.Event;
    import flash.net.URLLoader;

    var myXML:XML = new XML();
    var XML_URL:String = "http://www.example.com/Sample3.xml";
    var myXMLURL:URLRequest = new URLRequest(XML_URL);
    var myLoader:URLLoader = new URLLoader(myXMLURL);
    myLoader.addEventListener(Event.COMPLETE, xmlLoaded);

    function xmlLoaded(event:Event):void
    {
    myXML = XML(myLoader.data);
    trace("Data loaded.");
    }

    You can also use the XMLSocket class to set up an asynchronous XML socket connection with a server. For more information, see the ActionScript 3.0 Reference for the Adobe Flash Platform .

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/traversing-xml-structures.html b/docs/development/core-actionscript-classes/working-with-xml/traversing-xml-structures.html index 515a4c47c..ebcc74a2c 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/traversing-xml-structures.html +++ b/docs/development/core-actionscript-classes/working-with-xml/traversing-xml-structures.html @@ -16,13 +16,13 @@ - +

    Traversing XML structures

    One of the powerful features of XML is its ability to provide complex, nested data via a linear string of text characters. When you load data into an XML object, ActionScript parses the data and loads its hierarchical structure into memory (or it sends a run-time error if the XML data is not well formed).

    The operators and methods of the XML and XMLList objects make it easy to traverse the structure of XML data.

    Use the dot (.) operator and the descendent accessor (..) operator to access child properties of an XML object. Consider the following XML object:

    var myXML:XML =
    <order>
    <book ISBN="0942407296">
    <title>Baking Extravagant Pastries with Kumquats</title>
    <author>
    <lastName>Contino</lastName>
    <firstName>Chuck</firstName>
    </author>
    <pageCount>238</pageCount>
    </book>
    <book ISBN="0865436401">
    <title>Emu Care and Breeding</title>
    <editor>
    <lastName>Case</lastName>
    <firstName>Justin</firstName>
    </editor>
    <pageCount>115</pageCount>
    </book>
    </order>

    The object myXML.book is an XMLList object containing child properties of the myXML object that have the name book . These are two XML objects, matching the two book properties of the myXML object.

    The object myXML..lastName is an XMLList object containing any descendent properties with the name lastName . These are two XML objects, matching the two lastName of the myXML object.

    The object myXML.book.editor.lastName is an XMLList object containing any children with the name lastName of children with the name editor of children with the name book of the myXML object: in this case, an XMLList object containing only one XML object (the lastName property with the value " Case ").

    Accessing parent and child nodes

    The parent() method returns the parent of an XML object.

    You can use the ordinal index values of a child list to access specific child objects. For example, consider an XML object myXML that has two child properties named book . Each child property named book has an index number associated with it:

    myXML.book[0]
    myXML.book[1]

    To access a specific grandchild, you can specify index numbers for both the child and grandchild names:

    myXML.book[0].title[0]

    However, if there is only one child of x.book[0] that has the name title , you can omit the index reference, as follows:

    myXML.book[0].title

    Similarly, if there is only one book child of the object x , and if that child object has only one title object, you can omit both index references, like this:

    myXML.book.title

    You can use the child() method to navigate to children with names based on a variable or expression, as the following example shows:

    var myXML:XML =
    <order>
    <book>
    <title>Dictionary</title>
    </book>
    </order>;

    var childName:String = "book";

    trace(myXML.child(childName).title) // output: Dictionary

    Accessing attributes

    Use the @ symbol (the attribute identifier operator) to access attributes in an XML or XMLList object, as shown in the following code:

    var employee:XML =
    <employee id="6401" code="233">
    <lastName>Wu</lastName>
    <firstName>Erin</firstName>
    </employee>;
    trace(employee.@id); // 6401

    You can use the * wildcard symbol with the @ symbol to access all attributes of an XML or XMLList object, as in the following code:

    var employee:XML =
    <employee id="6401" code="233">
    <lastName>Wu</lastName>
    <firstName>Erin</firstName>
    </employee>;
    trace(employee.@*.toXMLString());
    // 6401
    // 233

    You can use the attribute() or attributes() method to access a specific attribute or all attributes of an XML or XMLList object, as in the following code:

    var employee:XML =
    <employee id="6401" code="233">
    <lastName>Wu</lastName>
    <firstName>Erin</firstName>
    </employee>;
    trace(employee.attribute("id")); // 6401
    trace(employee.attribute("*").toXMLString());
    // 6401
    // 233
    trace(employee.attributes().toXMLString());
    // 6401
    // 233

    Note that you can also use the following syntax to access attributes, as the following example shows:

    employee.attribute("id")
    employee["@id"]
    employee.@["id"]

    These are each equivalent to employee.@id . However, the syntax employee.@id is the preferred approach.

    Filtering by attribute or element value

    You can use the parentheses operators — ( and ) — to filter elements with a specific element name or attribute value. Consider the following XML object:

    var x:XML =
    <employeeList>
    <employee id="347">
    <lastName>Zmed</lastName>
    <firstName>Sue</firstName>
    <position>Data analyst</position>
    </employee>
    <employee id="348">
    <lastName>McGee</lastName>
    <firstName>Chuck</firstName>
    <position>Jr. data analyst</position>
    </employee>
    </employeeList>

    The following expressions are all valid:

    • x.employee.(lastName == "McGee") — This is the second employee node.
    • x.employee.(lastName == "McGee").firstName — This is the firstName property of the second employee node.
    • x.employee.(lastName == "McGee").@id — This is the value of the id attribute of the second employee node.
    • x.employee.(@id == 347) — The first employee node.
    • x.employee.(@id == 347).lastName — This is the lastName property of the first employee node.
    • x.employee.(@id > 300) — This is an XMLList with both employee properties.
    • x.employee.(position.toString().search("analyst") > -1) — This is an XMLList with both position properties.

    If you try to filter on attributes or elements that do not exist, an exception is thrown. For example, the final line of the following code generates an error, because there is no id attribute in the second p element:

    var doc:XML =
    <body>
    <p id='123'>Hello, <b>Bob</b>.</p>
    <p>Hello.</p>
    </body>;
    trace(doc.p.(@id == '123'));

    Similarly, the final line of following code generates an error because there is no b property of the second p element:

    var doc:XML =
    <body>
    <p id='123'>Hello, <b>Bob</b>.</p>
    <p>Hello.</p>
    </body>;
    trace(doc.p.(b == 'Bob'));

    To avoid these errors, you can identify the properties that have the matching attributes or elements by using the attribute() and elements() methods, as in the following code:

    var doc:XML =
    <body>
    <p id='123'>Hello, <b>Bob</b>.</p>
    <p>Hello.</p>
    </body>;
    trace(doc.p.(attribute('id') == '123'));
    trace(doc.p.(elements('b') == 'Bob'));

    You can also use the hasOwnProperty() method, as in the following code:

    var doc:XML =
    <body>
    <p id='123'>Hello, <b>Bob</b>.</p>
    <p>Hello.</p>
    </body>;
    trace(doc.p.(hasOwnProperty('@id') && @id == '123'));
    trace(doc.p.(hasOwnProperty('b') && b == 'Bob'));

    Using the for..in and the for each..in statements

    ActionScript 3.0 includes the for..in statement and the for each..in statement for iterating through XMLList objects. For example, consider the following XML object, myXML , and the XMLList object, myXML.item . The XMLList object, myXML.item, consists of the two item nodes of the XML object.

    var myXML:XML =
    <order>
    <item id='1' quantity='2'>
    <menuName>burger</menuName>
    <price>3.95</price>
    </item>
    <item id='2' quantity='2'>
    <menuName>fries</menuName>
    <price>1.45</price>
    </item>
    </order>;

    The for..in statement lets you iterate over a set of property names in an XMLList:

    var total:Number = 0;
    for (var pname:String in myXML.item)
    {
    total += myXML.item.@quantity[pname] * myXML.item.price[pname];
    }

    The for each..in statement lets you iterate through the properties in the XMLList:

    var total2:Number = 0;
    for each (var prop:XML in myXML.item)
    {
    total2 += prop.@quantity * prop.price;
    }
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/using-xml-namespaces.html b/docs/development/core-actionscript-classes/working-with-xml/using-xml-namespaces.html index fd3cf29ab..1edd02e31 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/using-xml-namespaces.html +++ b/docs/development/core-actionscript-classes/working-with-xml/using-xml-namespaces.html @@ -16,13 +16,13 @@ - +

    Using XML namespaces

    Namespaces in an XML object (or document) identify the type of data that the object contains. For example, in sending and delivering XML data to a web service that uses the SOAP messaging protocol, you declare the namespace in the opening tag of the XML:

    var message:XML =
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <soap:Body xmlns:w="http://www.test.com/weather/">
    <w:getWeatherResponse>
    <w:tempurature >78</w:tempurature>
    </w:getWeatherResponse>
    </soap:Body>
    </soap:Envelope>;

    The namespace has a prefix, soap , and a URI that defines the namespace, http://schemas.xmlsoap.org/soap/envelope/ .

    ActionScript 3.0 includes the Namespace class for working with XML namespaces. For the XML object in the previous example, you can use the Namespace class as follows:

    var soapNS:Namespace = message.namespace("soap");
    trace(soapNS); // Output: http://schemas.xmlsoap.org/soap/envelope/

    var wNS:Namespace = new Namespace("w", "http://www.test.com/weather/");
    message.addNamespace(wNS);
    var encodingStyle:XMLList = message.@soapNS::encodingStyle;
    var body:XMLList = message.soapNS::Body;

    message.soapNS::Body.wNS::GetWeatherResponse.wNS::tempurature = "78";

    The XML class includes the following methods for working with namespaces: addNamespace() , inScopeNamespaces() , localName() , name() , namespace() , namespaceDeclarations() , removeNamespace() , setLocalName() , setName() , and setNamespace() .

    The default xml namespace directive lets you assign a default namespace for XML objects. For example, in the following, both x1 and x2 have the same default namespace:

    var ns1:Namespace = new Namespace("http://www.example.com/namespaces/");
    default xml namespace = ns1;
    var x1:XML = <test1 />;
    var x2:XML = <test2 />;
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/xml-in-actionscript-example.html b/docs/development/core-actionscript-classes/working-with-xml/xml-in-actionscript-example.html index e79d1ac88..7ba686416 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/xml-in-actionscript-example.html +++ b/docs/development/core-actionscript-classes/working-with-xml/xml-in-actionscript-example.html @@ -16,13 +16,13 @@ - +

    XML in ActionScript example - Loading RSS data from the Internet

    TODO Needs the code reference updated

    The RSSViewer sample application shows a number of features of working with XML in ActionScript, including the following:

    • Using XML methods to traverse XML data in the form of an RSS feed.
    • Using XML methods to assemble XML data in the form of HTML to use in a text field.

    The RSS format is widely used to syndicate news via XML. A simple RSS data file may look like the following:

    <?xml version="1.0" encoding="UTF-8" ?>
    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
    <title>Alaska - Weather</title>
    <link>http://www.nws.noaa.gov/alerts/ak.html</link>
    <description>Alaska - Watches, Warnings and Advisories</description>

    <item>
    <title>
    Short Term Forecast - Taiya Inlet, Klondike Highway (Alaska)
    </title>
    <link>
    http://www.nws.noaa.gov/alerts/ak.html#A18.AJKNK.1900
    </link>
    <description>
    Short Term Forecast Issued At: 2005-04-11T19:00:00
    Expired At: 2005-04-12T01:00:00 Issuing Weather Forecast Office
    Homepage: http://pajk.arh.noaa.gov
    </description>
    </item>
    <item>
    <title>
    Short Term Forecast - Haines Borough (Alaska)
    </title>
    <link>
    http://www.nws.noaa.gov/alerts/ak.html#AKZ019.AJKNOWAJK.190000
    </link>
    <description>
    Short Term Forecast Issued At: 2005-04-11T19:00:00
    Expired At: 2005-04-12T01:00:00 Issuing Weather Forecast Office
    Homepage: http://pajk.arh.noaa.gov
    </description>
    </item>
    </channel>
    </rss>

    The SimpleRSS application reads RSS data from the Internet, parses the data for headlines (titles), links, and descriptions, and returns that data. The SimpleRSSUI class provides the UI and calls the SimpleRSS class, which does all of the XML processing.

    To get the application files for this sample, see www.adobe.com/go/learn_programmingAS3samples_flash . The RSSViewer application files can be found in the folder Samples/RSSViewer. The application consists of the following files:

    FileDescription
    RSSViewer.mxml or RSSViewer.flaThe main application file in Flash (FLA) or Flex (MXML).
    com/example/programmingas3/rssViewer/RSSParser.asA class that contains methods that use E4X to traverse RSS (XML) data and generate a corresponding HTML representation.
    RSSData/ak.rssA sample RSS file. The application is set up to read RSS data from the web, at a Flex RSS feed hosted by Adobe. However, you can easily change the application to read RSS data from this document, which uses a slightly different schema than that of the Flex RSS feed.

    Reading and parsing XML data

    The RSSParser class includes an xmlLoaded() method that converts the input RSS data, stored in the rssXML variable, into an string containing HTML-formatted output, rssOutput .

    Near the beginning of the method, code sets the default XML namespace if the source RSS data includes a default namespace:

    if (rssXML.namespace("") != undefined)
    {
    default xml namespace = rssXML.namespace("");
    }

    The next lines then loop through the contents of the source XML data, examining each descendant property named item :

    for each (var item:XML in rssXML..item)
    {
    var itemTitle:String = item.title.toString();
    var itemDescription:String = item.description.toString();
    var itemLink:String = item.link.toString();
    outXML += buildItemHTML(itemTitle,
    itemDescription,
    itemLink);
    }

    The first three lines simply set string variables to represent the title, description and link properties of the item property of the XML data. The next line then calls the buildItemHTML() method to get HTML data in the form of an XMLList object, using the three new string variables as parameters.

    Assembling XMLList data

    The HTML data (an XMLList object) is of the following form:

    <b>itemTitle</b>
    <p>
    itemDescription
    <br />
    <a href="link">
    <font color="#008000">More...</font>
    </a>
    </p>

    The first lines of the method clear the default xml namespace:

    default xml namespace = new Namespace();

    The default xml namespace directive has function block-level scope. This means that the scope of this declaration is the buildItemHTML() method.

    The lines that follow assemble the XMLList, based on the string arguments passed to the function:

    var body:XMLList = new XMLList();
    body += new XML("<b>" + itemTitle + "</b>");
    var p:XML = new XML("<p>" + itemDescription + "</p>");

    var link:XML = <a></a>;
    link.@href = itemLink; // <link href="itemLinkString"></link>
    link.font.@color = "#008000";
    // <font color="#008000"></font></a>
    // 0x008000 = green
    link.font = "More...";

    p.appendChild(<br/>);
    p.appendChild(link);
    body += p;

    This XMLList object represents string data suitable for an ActionScript HTML text field.

    The xmlLoaded() method uses the return value of the buildItemHTML() method and converts it to a string:

    XML.prettyPrinting = false;
    rssOutput = outXML.toXMLString();

    Extracting the title of the RSS feed and sending a custom event

    The xmlLoaded() method sets a rssTitle string variable, based on information in the source RSS XML data:

    rssTitle = rssXML.channel.title.toString();

    Finally, the xmlLoaded() method generates an event, which notifies the application that the data is parsed and available:

    dataWritten = new Event("dataWritten", true);
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/xml-objects.html b/docs/development/core-actionscript-classes/working-with-xml/xml-objects.html index 40ec1f268..0b9331935 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/xml-objects.html +++ b/docs/development/core-actionscript-classes/working-with-xml/xml-objects.html @@ -16,13 +16,13 @@ - +

    XML objects

    An XML object may represent an XML element, attribute, comment, processing instruction, or text element.

    An XML object is classified as having either simple content or complex content . An XML object that has child nodes is classified as having complex content. An XML object is said to have simple content if it is any one of the following: an attribute, a comment, a processing instruction, or a text node.

    For example, the following XML object contains complex content, including a comment and a processing instruction:

    XML.ignoreComments = false;
    XML.ignoreProcessingInstructions = false;
    var x1:XML =
    <order>
    <!--This is a comment. -->
    <?PROC_INSTR sample ?>
    <item id='1'>
    <menuName>burger</menuName>
    <price>3.95</price>
    </item>
    <item id='2'>
    <menuName>fries</menuName>
    <price>1.45</price>
    </item>
    </order>

    As the following example shows, you can now use the comments() and processingInstructions() methods to create new XML objects, a comment and a processing instruction:

    var x2:XML = x1.comments()[0];
    var x3:XML = x1.processingInstructions()[0];

    XML properties

    The XML class has five static properties:

    • The ignoreComments and ignoreProcessingInstructions properties determine whether comments or processing instructions are ignored when the XML object is parsed.
    • The ignoreWhitespace property determines whether white space characters are ignored in element tags and embedded expressions that are separated only by white space characters.
    • The prettyIndent a nd prettyPrinting properties are used to format the text that is returned by the toString() and toXMLString() methods of the XML class.

    For details on these properties, see the ActionScript 3.0 Reference for the Adobe Flash Platform.

    XML methods

    The following methods allow you to work with the hierarchical structure of XML objects:

    • appendChild()
    • child()
    • childIndex()
    • children()
    • descendants()
    • elements()
    • insertChildAfter()
    • insertChildBefore()
    • parent()
    • prependChild()

    The following methods allow you to work with XML object attributes:

    • attribute()
    • attributes()

    The following methods allow you to you work with XML object properties:

    • hasOwnProperty()
    • propertyIsEnumerable()
    • replace()
    • setChildren()

    The following methods are for working with qualified names and namespaces:

    • addNamespace()
    • inScopeNamespaces()
    • localName()
    • name()
    • namespace()
    • namespaceDeclarations()
    • removeNamespace()
    • setLocalName()
    • setName()
    • setNamespace()

    The following methods are for working with and determining certain types of XML content:

    • comments()
    • hasComplexContent()
    • hasSimpleContent()
    • nodeKind()
    • processingInstructions()
    • text()

    The following methods are for conversion to strings and for formatting XML objects:

    • defaultSettings()
    • setSettings()
    • settings()
    • normalize()
    • toString()
    • toXMLString()

    There are a few additional methods:

    • contains()
    • copy()
    • valueOf()
    • length()

    For details on these methods, see the ActionScript 3.0 Reference for the Adobe Flash Platform.

    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/xml-type-conversion.html b/docs/development/core-actionscript-classes/working-with-xml/xml-type-conversion.html index 5fe883589..18f234482 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/xml-type-conversion.html +++ b/docs/development/core-actionscript-classes/working-with-xml/xml-type-conversion.html @@ -16,13 +16,13 @@ - +

    XML type conversion

    You can convert XML objects and XMLList objects to String values. Similarly, you can convert strings to XML objects and XMLList objects. Also, keep in mind that all XML attribute values, names, and text values are strings. The following sections discuss all these forms of XML type conversion.

    Converting XML and XMLList objects to strings

    The XML and XMLList classes include a toString() method and a toXMLString() method. The toXMLString() method returns a string that includes all tags, attributes, namespace declarations, and content of the XML object. For XML objects with complex content (child elements), the toString() method does exactly the same as the toXMLString() method. For XML objects with simple content (those that contain only one text element), the toString() method returns only the text content of the element, as the following example shows:

    var myXML:XML =
    <order>
    <item id='1' quantity='2'>
    <menuName>burger</menuName>
    <price>3.95</price>
    </item>
    <order>;

    trace(myXML.item[0].menuName.toXMLString());
    // <menuName>burger</menuName>
    trace(myXML.item[0].menuName.toString());
    // burger

    If you use the trace() method without specifying toString() or toXMLString() , the data is converted using the toString() method by default, as this code shows:

    var myXML:XML =
    <order>
    <item id='1' quantity='2'>
    <menuName>burger</menuName>
    <price>3.95</price>
    </item>
    <order>;

    trace(myXML.item[0].menuName);
    // burger

    When using the trace() method to debug code, you will often want to use the toXMLString() method so that the trace() method outputs more complete data.

    Converting strings to XML objects

    You can use the new XML() constructor to create an XML object from a string, as follows:

    var x:XML = new XML("<a>test</a>");

    If you attempt to convert a string to XML from a string that represents invalid XML or XML that is not well formed, a run-time error is thrown, as follows:

    var x:XML = new XML("<a>test"); // throws an error

    Converting attribute values, names, and text values from strings

    All XML attribute values, names, and text values are String data types, and you may need to convert these to other data types. For example, the following code uses the Number() function to convert text values to numbers:

    var myXML:XML =
    <order>
    <item>
    <price>3.95</price>
    </item>
    <item>
    <price>1.00</price>
    </item>
    </order>;

    var total:XML = <total>0</total>;
    myXML.appendChild(total);

    for each (var item:XML in myXML.item)
    {
    myXML.total.children()[0] = Number(myXML.total.children()[0])
    + Number(item.price.children()[0]);
    }
    trace(myXML.total); // 4.95;

    If this code did not use the Number() function, the code would interpret the + operator as the string concatenation operator, and the trace() method in the last line would output the following:

    01.003.95
    - + \ No newline at end of file diff --git a/docs/development/core-actionscript-classes/working-with-xml/xmllist-objects.html b/docs/development/core-actionscript-classes/working-with-xml/xmllist-objects.html index e455e4b9c..99eb85bf3 100644 --- a/docs/development/core-actionscript-classes/working-with-xml/xmllist-objects.html +++ b/docs/development/core-actionscript-classes/working-with-xml/xmllist-objects.html @@ -16,13 +16,13 @@ - +

    XMLList objects

    An XMLList instance represents an arbitrary collection of XML objects. It can contain full XML documents, XML fragments, or the results of an XML query.

    The following methods allow you to work with the hierarchical structure of XMLList objects:

    • child()
    • children()
    • descendants()
    • elements()
    • parent()

    The following methods allow you to work with XMLList object attributes:

    • attribute()
    • attributes()

    The following methods allow you to you work with XMLList properties:

    • hasOwnProperty()
    • propertyIsEnumerable()

    The following methods are for working with and determining certain types of XML content:

    • comments()
    • hasComplexContent()
    • hasSimpleContent()
    • processingInstructions()
    • text()

    The following are for conversion to strings and for formatting the XMLList object:

    • normalize()
    • toString()
    • toXMLString()

    There are a few additional methods:

    • contains()
    • copy()
    • length()
    • valueOf()

    For details on these methods, see the ActionScript 3.0 Reference for the Adobe Flash Platform.

    For an XMLList object that contains exactly one XML element, you can use all properties and methods of the XML class, because an XMLList with one XML element is treated the same as an XML object. For example, in the following code, because doc.div is an XMLList object containing one element, you can use the appendChild() method from the XML class:

    var doc:XML =
    <body>
    <div>
    <p>Hello</p>
    </div>
    </body>;
    doc.div.appendChild(<p>World</p>);

    For a list of XML properties and methods, see XML objects .

    - + \ No newline at end of file diff --git a/docs/development/display.html b/docs/development/display.html index 90fb85e29..a50e0dde8 100644 --- a/docs/development/display.html +++ b/docs/development/display.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming.html b/docs/development/display/display-programming.html index 007c2deea..21c07f0c8 100644 --- a/docs/development/display/display-programming.html +++ b/docs/development/display/display-programming.html @@ -16,13 +16,13 @@ - +

    Overview

    Visual elements are programmed in Adobe® ActionScript® 3.0 by working with display objects on the display stage. For example, you can add, move, remove, and order display objects, apply filters and masks, draw vector and bitmap graphics, and perform three-dimensional transformations using the ActionScript display programming API. The primary classes used for display programming are part of the flash.display package .

    flash.display package.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/advantages-of-the-display-list-approach.html b/docs/development/display/display-programming/advantages-of-the-display-list-approach.html index c38ae6549..64ebaff23 100644 --- a/docs/development/display/display-programming/advantages-of-the-display-list-approach.html +++ b/docs/development/display/display-programming/advantages-of-the-display-list-approach.html @@ -16,13 +16,13 @@ - +

    Advantages of the display list approach

    In ActionScript 3.0, there are separate classes for different types of display objects. In ActionScript 1.0 and 2.0, many of the same types of objects are all included in one class: the MovieClip class.

    This individualization of classes and the hierarchical structure of display lists have the following benefits:

    • More efficient rendering and reduced memory usage
    • Improved depth management
    • Full traversal of the display list
    • Off-list display objects
    • Easier subclassing of display objects

    More efficient rendering and smaller file sizes

    In ActionScript 1.0 and 2.0, you could draw shapes only in a MovieClip object. In ActionScript 3.0, there are simpler display object classes in which you can draw shapes. Because these ActionScript 3.0 display object classes do not include the full set of methods and properties that a MovieClip object includes, they are less taxing on memory and processor resources.

    For example, each MovieClip object includes properties for the timeline of the movie clip, whereas a Shape object does not. The properties for managing the timeline can use a lot of memory and processor resources. In ActionScript 3.0, using the Shape object results in better performance. The Shape object has less overhead than the more complex MovieClip object. Flash Player and AIR do not need to manage unused MovieClip properties, which improves speed and reduces the memory footprint the object uses.

    Improved depth management

    In ActionScript 1.0 and 2.0, depth was managed through a linear depth management scheme and methods such as getNextHighestDepth() .

    ActionScript 3.0 includes the DisplayObjectContainer class, which has more convenient methods and properties for managing the depth of display objects.

    In ActionScript 3.0, when you move a display object to a new position in the child list of a DisplayObjectContainer instance, the other children in the display object container are repositioned automatically and assigned appropriate child index positions in the display object container.

    Also, in ActionScript 3.0 it is always possible to discover all of the child objects of any display object container. Every DisplayObjectContainer instance has a numChildren property, which lists the number of children in the display object container. And since the child list of a display object container is always an indexed list, you can examine every object in the list from index position 0 through the last index position ( numChildren - 1 ). This was not possible with the methods and properties of a MovieClip object in ActionScript 1.0 and 2.0.

    In ActionScript 3.0, you can easily traverse the display list sequentially; there are no gaps in the index numbers of a child list of a display object container. Traversing the display list and managing the depth of objects is much easier than was possible in ActionScript 1.0 and 2.0. In ActionScript 1.0 and 2.0, a movie clip could contain objects with intermittent gaps in the depth order, which could make it difficult to traverse the list of object. In ActionScript 3.0, each child list of a display object container is cached internally as an array, resulting in very fast lookups (by index). Looping through all children of a display object container is also very fast.

    In ActionScript 3.0, you can also access children in a display object container by using the getChildByName() method of the DisplayObjectContainer class.

    Full traversal of the display list

    In ActionScript 1.0 and 2.0, you could not access some objects, such as vector shapes, that were drawn in the Flash authoring tool. In ActionScript 3.0, you can access all objects on the display list—both those created using ActionScript and all display objects created in the Flash authoring tool. For details, see Traversing the display list .

    Off-list display objects

    In ActionScript 3.0, you can create display objects that are not on the visible display list. These are known as off-list display objects. A display object is added to the visible display list only when you call the addChild() or addChildAt() method of a DisplayObjectContainer instance that has already been added to the display list.

    You can use off-list display objects to assemble complex display objects, such as those that have multiple display object containers containing multiple display objects. By keeping display objects off-list, you can assemble complicated objects without using the processing time to render these display objects. You can then add an off-list display object to the display list when it is needed. Also, you can move a child of a display object container on and off the display list and to any desired position in the display list at will.

    Easier subclassing of display objects

    In ActionScript 1.0 and 2.0, you would often have to add new MovieClip objects to a SWF file to create basic shapes or to display bitmaps. In ActionScript 3.0, the DisplayObject class includes many built-in subclasses, including Shape and Bitmap. Because the classes in ActionScript 3.0 are more specialized for specific types of objects, it is easier to create basic subclasses of the built-in classes.

    For example, in order to draw a circle in ActionScript 2.0, you could create a CustomCircle class that extends the MovieClip class when an object of the custom class is instantiated. However, that class would also include a number of properties and methods from the MovieClip class (such as totalFrames ) that do not apply to the class. In ActionScript 3.0, however, you can create a CustomCircle class that extends the Shape object, and as such does not include the unrelated properties and methods that are contained in the MovieClip class. The following code shows an example of a CustomCircle class:

    import flash.display.*;

    public class CustomCircle extends Shape
    {
    var xPos:Number;
    var yPos:Number;
    var radius:Number;
    var color:uint;

    public function CustomCircle(
    xInput:Number,
    yInput:Number,
    rInput:Number,
    colorInput:uint)
    {
    xPos = xInput;
    yPos = yInput;
    radius = rInput;
    color = colorInput;
    this.graphics.beginFill(color);
    this.graphics.drawCircle(xPos, yPos, radius);
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/animating-objects.html b/docs/development/display/display-programming/animating-objects.html index 867d4ed80..5e0154663 100644 --- a/docs/development/display/display-programming/animating-objects.html +++ b/docs/development/display/display-programming/animating-objects.html @@ -16,13 +16,13 @@ - +

    Animating objects

    Animation is the process of making something move, or alternatively, of making something change over time. Scripted animation is a fundamental part of video games, and is often used to add polish and useful interaction clues to other applications.

    The fundamental idea behind scripted animation is that a change needs to take place, and that change needs to be divided into increments over time. It’s easy to make something repeat in ActionScript, using a common looping statement. However, a loop will run through all its iterations before updating the display. To create scripted animation, you need to write ActionScript that performs some action repeatedly over time and also updates the screen each time it runs.

    For example, imagine you want to create a simple animation, such as making a ball travel across the screen. ActionScript includes a simple mechanism that allows you to track the passage of time and update the screen accordingly—meaning you could write code that moves the ball a small amount each time, until it reaches its destination. After each move the screen would update, making the cross-Stage motion visible to the viewer.

    From a practical standpoint, it makes sense to synchronize scripted animation with the SWF file’s frame rate (in other words, make one animation change each time a new frame displays or would display), since that defines how frequently Flash Player or AIR updates the screen. Each display object has an enterFrame event that is dispatched according to the frame rate of the SWF file—one event per frame. Most developers who create scripted animation use the enterFrame event as a way to create actions that repeat over time. You could write code that listens to the enterFrame event, moving the animated ball a certain amount each frame, and as the screen is updated (each frame), the ball would be redrawn in its new location, creating motion.

    note

    Another way to perform an action repeatedly over time is to use the Timer class. A Timer instance triggers an event notification each time a specified amount of time has past. You could write code that performs animation by handling the Timer class’s timer event, setting the time interval to a small one (some fraction of a second). For more information about using the Timer class, see Controlling time intervals .

    In the following example, a circle Sprite instance, named circle , is created on the Stage. When the user clicks the circle, a scripted animation sequence begins, causing circle to fade (its alpha property is decreased) until it is completely transparent:

    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;

    // draw a circle and add it to the display list
    var circle:Sprite = new Sprite();
    circle.graphics.beginFill(0x990000);
    circle.graphics.drawCircle(50, 50, 50);
    circle.graphics.endFill();
    addChild(circle);

    // When this animation starts, this function is called every frame.
    // The change made by this function (updated to the screen every
    // frame) is what causes the animation to occur.
    function fadeCircle(event:Event):void
    {
    circle.alpha -= .05;

    if (circle.alpha <= 0)
    {
    circle.removeEventListener(Event.ENTER_FRAME, fadeCircle);
    }

    }

    function startAnimation(event:MouseEvent):void
    {
    circle.addEventListener(Event.ENTER_FRAME, fadeCircle);
    }

    circle.addEventListener(MouseEvent.CLICK, startAnimation);

    When the user clicks the circle, the function fadeCircle() is subscribed as a listener of the enterFrame event, meaning it begins to be called once per frame. That function fades circle by changing its alpha property, so once per frame the circle’s alpha decreases by .05 (5 percent) and the screen is updated. Eventually, when the alpha value is 0 ( circle is completely transparent), the fadeCircle() function is removed as an event listener, ending the animation.

    The same code could be used, for example, to create animated motion instead of fading. By substituting a different property for alpha in the function that is an enterFrame event listener, that property will be animated instead. For example, changing this line

        circle.alpha -= .05;

    to this code

        circle.x += 5;

    will animate the x property, causing the circle to move to the right across the Stage. The condition that ends the animation could be changed to end the animation (that is, unsubscribe the enterFrame listener) when the desired x coordinate is reached.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/basics-of-display-programming.html b/docs/development/display/display-programming/basics-of-display-programming.html index 09124b275..fc3749a50 100644 --- a/docs/development/display/display-programming/basics-of-display-programming.html +++ b/docs/development/display/display-programming/basics-of-display-programming.html @@ -16,13 +16,13 @@ - +

    Basics of display programming

    Each application built with ActionScript 3.0 has a hierarchy of displayed objects known as the display list , illustrated below. The display list contains all the visible elements in the application.

    As the illustration shows, display elements fall into one or more of the following groups:

    The Stage

    The Stage is the base container of display objects. Each application has one Stage object, which contains all on-screen display objects. The Stage is the top-level container and is at the top of the display list hierarchy:

    Each SWF file has an associated ActionScript class, known as the main class of the SWF file . When a SWF file opens in Flash Player or Adobe AIR, Flash Player or AIR calls the constructor function for that class and the instance that is created (which is always a type of display object) is added as a child of the Stage object. The main class of a SWF file always extends the Sprite class (for more information, see Advantages of the display list approach ).

    You can access the Stage through the stage property of any DisplayObject instance. For more information, see Setting Stage properties .

    Display objects

    In ActionScript 3.0, all elements that appear on screen in an application are types of display objects . The flash.display package includes a DisplayObject class, which is a base class extended by a number of other classes. These different classes represent different types of display objects, such as vector shapes, movie clips, and text fields, to name a few. For an overview of these classes, see Advantages of the display list approach .

    Display object containers

    Display object containers are special types of display objects that, in addition to having their own visual representation, can also contain child objects that are also display objects.

    The DisplayObjectContainer class is a subclass of the DisplayObject class. A DisplayObjectContainer object can contain multiple display objects in its child list . For example, the following illustration shows a type of DisplayObjectContainer object known as a Sprite that contains various display objects:

    A. A SimpleButton object. This type of display object has different “up,” “down,” and “over” states. B. A Bitmap object. In this case, the Bitmap object was loaded from an external JPEG through a Loader object. C. A Shape object. The “picture frame” contains a rounded rectangle that is drawn in ActionScript. This Shape object has a Drop Shadow filter applied to it. D. A TextField object.

    In the context of discussing display objects, DisplayObjectContainer objects are also known as display object containers or simply containers . As noted earlier, the Stage is a display object container.

    Although all visible display objects inherit from the DisplayObject class, the type of each is of a specific subclass of DisplayObject class. For example, there is a constructor function for the Shape class or the Video class, but there is no constructor function for the DisplayObject class.

    Important concepts and terms

    The following reference list contains important terms that you will encounter when programming ActionScript graphics:

    • Alpha The color value representing the amount of transparency (or more correctly, the amount of opacity) in a color. For example, a color with an alpha channel value of 60% only shows 60% of its full strength, and is 40% transparent.
    • Bitmap graphic A graphic that is defined in the computer as a grid (rows and columns) of colored pixels. Commonly bitmap graphics include digital photos and similar images.
    • Blending mode A specification of how the contents of two overlapping images should interact. Commonly an opaque image on top of another image simply blocks the image underneath so that it isn’t visible at all; however, different blending modes cause the colors of the images to blend together in different ways so the resulting content is some combination of the two images.
    • Display list The hierarchy of display objects that will be rendered as visible screen content by Flash Player and AIR. The Stage is the root of the display list, and all the display objects that are attached to the Stage or one of its children form the display list (even if the object isn’t actually rendered, for example if it’s outside the boundaries of the Stage).
    • Display object An object which represents some type of visual content in Flash Player or AIR. Only display objects can be included in the display list, and all display object classes are subclasses of the DisplayObject class.
    • Display object container A special type of display object which can contain child display objects in addition to (generally) having its own visual representation.
    • Main class of the SWF file The class that defines the behavior for the outermost display object in a SWF file, which conceptually is the class for the SWF file itself. For instance, in a SWF created in Flash authoring, the main class is the document class. It has a “main timeline” which contains all other timelines; the main class of the SWF file is the class of which the main timeline is an instance.
    • Masking A technique of hiding from view certain parts of an image (or conversely, only allowing certain parts of an image to display). The portions of the mask image become transparent, so content underneath shows through. The term is related to painter’s masking tape that is used to prevent paint from being applied to certain areas.
    • Stage The visual container that is the base or background of all visual content in a SWF.
    • Transformation An adjustment to a visual characteristic of a graphic, such as rotating the object, altering its scale, skewing or distorting its shape, or altering its color.
    • Vector graphic A graphic that is defined in the computer as lines and shapes drawn with particular characteristics (such as thickness, length, size, angle, and position).
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/core-display-classes.html b/docs/development/display/display-programming/core-display-classes.html index 930bc0e3c..bc1c62fef 100644 --- a/docs/development/display/display-programming/core-display-classes.html +++ b/docs/development/display/display-programming/core-display-classes.html @@ -16,13 +16,13 @@ - +

    Core display classes

    The ActionScript 3.0 flash.display package includes classes for visual objects that can appear in Flash Player or AIR. The following illustration shows the subclass relationships of these core display object classes.

    The illustration shows the class inheritance of display object classes. Note that some of these classes, specifically StaticText, TextField, and Video, are not in the flash.display package, but they still inherit from the DisplayObject class.

    All classes that extend the DisplayObject class inherit its methods and properties. For more information, see Properties and methods of the DisplayObject class .

    You can instantiate objects of the following classes contained in the flash.display package:

    • Bitmap - You use the Bitmap class to define bitmap objects, either loaded from external files or rendered through ActionScript. You can load bitmaps from external files through the Loader class. You can load GIF, JPG, or PNG files. You can also create a BitmapData object with custom data and then create a Bitmap object that uses that data. You can use the methods of the BitmapData class to alter bitmaps, whether they are loaded or created in ActionScript. For more information, see Loading display objects and Working with bitmaps .

    • Loader — You use the Loader class to load external assets (either SWF files or graphics). For more information, see Loading display content dynamically .

    • Shape — You use the Shape class to create vector graphics, such as rectangles, lines, circles, and so on. For more information, see Using the drawing API .

    • SimpleButton — A SimpleButton object is the ActionScript representation of a button symbol created in the Flash authoring tool. A SimpleButton instance has four button states: up, down, over, and hit test (the area that responds to mouse and keyboard events).

    • Sprite — A Sprite object can contain graphics of its own, and it can contain child display objects. (The Sprite class extends the DisplayObjectContainer class). For more information, see Working with display object containers and Using the drawing API .

    • MovieClip — A MovieClip object is the ActionScript form of a movie clip symbol created in the Flash authoring tool. In practice, a MovieClip is similar to a Sprite object, except that it also has a timeline. For more information, see Working with movie clips .

    The following classes, which are not in the flash.display package, are subclasses of the DisplayObject class:

    • The TextField class, included in the flash.text package, is a display object for text display and input. For more information, see Basics of Working with text .

    • The TextLine class, included in the flash.text.engine package, is the display object used to display lines of text composed by the Flash Text Engine and the Text Layout Framework. For more information, see Using the Flash Text Engine and Using the Text Layout Framework .

    • The Video class, included in the flash.media package, is the display object used for displaying video files. For more information, see Working with video .

    The following classes in the flash.display package extend the DisplayObject class, but you cannot create instances of them. Instead, they serve as parent classes for other display objects, combining common functionality into a single class.

    • AVM1Movie - The AVM1Movie class is used to represent loaded SWF files that are authored in ActionScript 1.0 and 2.0.

    • DisplayObjectContainer — The Loader, Stage, Sprite, and MovieClip classes each extend the DisplayObjectContainer class. For more information, see Working with display object containers .

    • InteractiveObjectInteractiveObject is the base class for all objects used to interact with the mouse and keyboard. SimpleButton, TextField, Loader, Sprite, Stage, and MovieClip objects are all subclasses of the InteractiveObject class. For more information on creating mouse and keyboard interaction, see Basics of user interaction .

    • MorphShape — These objects are created when you create a shape tween in the Flash authoring tool. You cannot instantiate them using ActionScript, but they can be accessed from the display list.

    • Stage — The Stage class extends the DisplayObjectContainer class. There is one Stage instance for an application, and it is at the top of the display list hierarchy. To access the Stage, use the stage property of any DisplayObject instance. For more information, see Setting Stage properties .

    Also, the StaticText class, in the flash.text package, extends the DisplayObject class, but you cannot create an instance of it in code. Static text fields are created only in Flash.

    The following classes are not display objects or display object containers, and do not appear in the display list, but do display graphics on the stage. These classes draw into a rectangle, called a viewport, positioned relative to the stage.

    The following fl.display classes provide functionality that parallels the flash.display.Loader and LoaderInfo classes. Use these classes instead of their flash.display counterparts if you are developing in the Flash Professional environment (CS5.5 or later). In that environment, these classes help solve issues involving TLF with RSL preloading. For more information, see Using the ProLoader and ProLoaderInfo classes .

    • fl.display.ProLoader — Analogous to flash.display.Loader
    • fl.display.ProLoaderInfo — Analogous to flash.display.LoaderInfo
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/display-object-example-sprite-arranger.html b/docs/development/display/display-programming/display-object-example-sprite-arranger.html index db7bda5fc..9c501ca42 100644 --- a/docs/development/display/display-programming/display-object-example-sprite-arranger.html +++ b/docs/development/display/display-programming/display-object-example-sprite-arranger.html @@ -16,7 +16,7 @@ - + @@ -114,7 +114,7 @@ position of the display object by 1 in the child list of the DrawingCanvas instance:

    public function moveDown(shape:GeometricSprite):void
    {
    var index:int = this.getChildIndex(shape);
    if (index > 0)
    {
    this.setChildIndex(shape, index - 1);
    }
    }

    The moveUp() and moveToFront() methods work similarly to the moveToBack() and moveDown() methods.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/loading-display-content-dynamically.html b/docs/development/display/display-programming/loading-display-content-dynamically.html index 4eacd7793..2b6bd9e29 100644 --- a/docs/development/display/display-programming/loading-display-content-dynamically.html +++ b/docs/development/display/display-programming/loading-display-content-dynamically.html @@ -16,13 +16,13 @@ - +

    Loading display content dynamically

    You can load any of the following external display assets into an ActionScript 3.0 application:

    • A SWF file authored in ActionScript 3.0 — This file can be a Sprite, MovieClip, or any class that extends Sprite. In AIR applications on iOS, only SWF files that do not contain ActionScript bytecode can be loaded. This means that SWF files containing embedded data, such as images and sound can be loaded, but not SWF files containing executable code.
    • An image file — This includes JPG, PNG, and GIF files.
    • An AVM1 SWF file — This is a SWF file written in ActionScript 1.0 or 2.0. (not supported in mobile AIR applications)

    You load these assets by using the Loader class.

    Loading display objects

    Loader objects are used to load SWF files and graphics files into an application. The Loader class is a subclass of the DisplayObjectContainer class. A Loader object can contain only one child display object in its display list—the display object representing the SWF or graphic file that it loads. When you add a Loader object to the display list, as in the following code, you also add the loaded child display object to the display list once it loads:

    var pictLdr:Loader = new Loader();
    var pictURL:String = "banana.jpg"
    var pictURLReq:URLRequest = new URLRequest(pictURL);
    pictLdr.load(pictURLReq);
    this.addChild(pictLdr);

    Once the SWF file or image is loaded, you can move the loaded display object to another display object container, such as the container DisplayObjectContainer object in this example:

    import flash.display.\*;
    import flash.net.URLRequest;
    import flash.events.Event;
    var container:Sprite = new Sprite();
    addChild(container);
    var pictLdr:Loader = new Loader();
    var pictURL:String = "banana.jpg"
    var pictURLReq:URLRequest = new URLRequest(pictURL);
    pictLdr.load(pictURLReq);
    pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);

    function imgLoaded(event:Event):void
    {
    container.addChild(pictLdr.content);
    }

    Monitoring loading progress

    Once the file has started loading, a LoaderInfo object is created. A LoaderInfo object provides information such as load progress, the URLs of the loader and loadee, the number of bytes total for the media, and the nominal height and width of the media. A LoaderInfo object also dispatches events for monitoring the progress of the load.

    The following diagram shows the different uses of the LoaderInfo object—for the instance of the main class of the SWF file, for a Loader object, and for an object loaded by the Loader object:

    The LoaderInfo object can be accessed as a property of both the Loader object and the loaded display object. As soon as loading begins, the LoaderInfo object can be accessed through the contentLoaderInfo property of the Loader object. Once the display object has finished loading, the LoaderInfo object can also be accessed as a property of the loaded display object through the display object's loaderInfo property. The loaderInfo property of the loaded display object refers to the same LoaderInfo object as the contentLoaderInfo property of the Loader object. In other words, a LoaderInfo object is shared between a loaded object and the Loader object that loaded it (between loader and loadee).

    In order to access properties of loaded content, you will want to add an event listener to the LoaderInfo object, as in the following code:

    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;

    var ldr:Loader = new Loader();
    var urlReq:URLRequest = new URLRequest("Circle.swf");
    ldr.load(urlReq);
    ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
    addChild(ldr);

    function loaded(event:Event):void
    {
    var content:Sprite = event.target.content;
    content.scaleX = 2;
    }

    For more information, see Handling events.

    Specifying loading context

    When you load an external file into Flash Player or AIR through the load() or loadBytes() method of the Loader class, you can optionally specify a context parameter. This parameter is a LoaderContext object.

    The LoaderContext class includes three properties that let you define the context of how the loaded content can be used:

    • checkPolicyFile : Use this property only when loading an image file (not a SWF file). If you set this property to true , the Loader checks the origin server for a policy file (see Website controls (policy files) ). This is necessary only for content originating from domains other than that of the SWF file containing the Loader object. If the server grants permission to the Loader domain, ActionScript from SWF files in the Loader domain can access data in the loaded image; in other words, you can use the BitmapData.draw() command to access data in the loaded image.
    note

    Note that a SWF file from other domains than that of the Loader object can call Security.allowDomain() to permit a specific domain.

    • securityDomain : Use this property only when loading a SWF file (not an image). Specify this for a SWF file from a domain other than that of the file containing the Loader object. When you specify this option, Flash Player checks for the existence of a policy file, and if one exists, SWF files from the domains permitted in the cross-policy file can cross-script the loaded SWF content. You can specify flash.system.SecurityDomain.currentDomain as this parameter.

    • applicationDomain : Use this property only when loading a SWF file written in ActionScript 3.0 (not an image or a SWF file written in ActionScript 1.0 or 2.0). When loading the file, you can specify that the file be included in the same application domain as that of the Loader object, by setting the applicationDomain parameter to flash.system.ApplicationDomain.currentDomain . By putting the loaded SWF file in the same application domain, you can access its classes directly. This can be useful if you are loading a SWF file that contains embedded media, which you can access via their associated class names. For more information, see Working with application domains .

    Here's an example of checking for a policy file when loading a bitmap from another domain:

    var context:LoaderContext = new LoaderContext();
    context.checkPolicyFile = true;
    var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg");
    var ldr:Loader = new Loader();
    ldr.load(urlReq, context);

    Here's an example of checking for a policy file when loading a SWF from another domain, in order to place the file in the same security sandbox as the Loader object. Additionally, the code adds the classes in the loaded SWF file to the same application domain as that of the Loader object:

    var context:LoaderContext = new LoaderContext();
    context.securityDomain = SecurityDomain.currentDomain;
    context.applicationDomain = ApplicationDomain.currentDomain;
    var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf");
    var ldr:Loader = new Loader();
    ldr.load(urlReq, context);

    For more information, see the LoaderContext class in the ActionScript 3.0 Reference for the Adobe Flash Platform .

    Loading SWF files in AIR for iOS

    On iOS devices, there are restrictions on loading and compiling code at runtime. Because of these restrictions, there are some necessary differences in the task of loading external SWF files into your application:

    • All SWF files that contain ActionScript code must be included in the application package. No SWF containing code can be loaded from an external source such as over a network. As part of packaging the application, all ActionScript code in all SWF files in the application package is compiled to native code for iOS devices.
    • You can't load, unload, and then re-load a SWF file. If you attempt to do this, an error occurs.
    • The behavior of loading into memory and then unloading it is the same as with desktop platforms. If you load a SWF file then unload it, all visual assets contained in the SWF are unloaded from memory. However, any class references to an ActionScript class in the loaded SWF remain in memory and can be accessed in ActionScript code.
    • All loaded SWF files must be loaded in the same application domain as the main SWF file. This is not the default behavior, so for each SWF you load you must create a LoaderContext object specifying the main application domain, and pass that LoaderContext object to the Loader.load() method call. If you attempt to load a SWF in an application domain other than the main SWF application domain, an error occurs. This is true even if the loaded SWF only contains visual assets and no ActionScript code.

    The following example shows the code to use to load a SWF from the application package into the main SWF's application domain:

    var loader:Loader = new Loader();
    var url:URLRequest = new URLRequest("swfs/SecondarySwf.swf");
    var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
    loader.load(url, loaderContext);

    A SWF file containing only assets and no code can be loaded from the application package or over a network. In either case, the SWF file must still be loaded into the main application domain.

    For AIR versions prior to AIR 3.6, all code is stripped from SWFs other than the main application SWF during the compilation process. SWF files containing only visual assets can be included in the application package and loaded at runtime, but no code. If you attempt to load a SWF that contains ActionScript code, an error occurs. The error causes an “Uncompiled ActionScript” error dialog to appear in the application.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects.html b/docs/development/display/display-programming/manipulating-display-objects.html index 91d011e4e..913ae5442 100644 --- a/docs/development/display/display-programming/manipulating-display-objects.html +++ b/docs/development/display/display-programming/manipulating-display-objects.html @@ -16,13 +16,13 @@ - +

    Manipulating display objects

    Regardless of which display object you choose to use, there are a number of manipulations that all display objects have in common as elements that are displayed on the screen. For example, they can all be positioned on the screen, moved forward or backward in the stacking order of display objects, scaled, rotated, and so forth. Because all display objects inherit this functionality from their common base class (DisplayObject), this functionality behaves the same whether you’re manipulating a TextField instance, a Video instance, a Shape instance, or any other display object. The following sections detail several of these common display object manipulations.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/adjusting-displayobject-colors.html b/docs/development/display/display-programming/manipulating-display-objects/adjusting-displayobject-colors.html index 8bae81f81..a814ede24 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/adjusting-displayobject-colors.html +++ b/docs/development/display/display-programming/manipulating-display-objects/adjusting-displayobject-colors.html @@ -16,13 +16,13 @@ - +

    Adjusting DisplayObject colors

    You can use the methods of the ColorTransform class (flash.geom.ColorTransform) to adjust the color of a display object. Each display object has a transform property, which is an instance of the Transform class, and contains information about various transformations that are applied to the display object (such as rotation, changes in scale or position, and so forth). In addition to its information about geometric transformations, the Transform class also includes a colorTransform property, which is an instance of the ColorTransform class, and provides access to make color adjustments to the display object. To access the color transformation information of a display object, you can use code such as this:

    var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;

    Once you’ve created a ColorTransform instance, you can read its property values to find out what color transformations have already been applied, or you can set those values to make color changes to the display object. To update the display object after any changes, you must reassign the ColorTransform instance back to the transform.colorTransform property.

    var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;

    // Make some color transformations here.

    // Commit the change.
    myDisplayObject.transform.colorTransform = colorInfo;

    Setting color values with code

    The color property of the ColorTransform class can be used to assign a specific red, green, blue (RGB) color value to the display object. The following example uses the color property to change the color of the display object named square to blue, when the user clicks a button named blueBtn :

    // square is a display object on the Stage.
    // blueBtn, redBtn, greenBtn, and blackBtn are buttons on the Stage.

    import flash.events.MouseEvent;
    import flash.geom.ColorTransform;

    // Get access to the ColorTransform instance associated with square.
    var colorInfo:ColorTransform = square.transform.colorTransform;

    // This function is called when blueBtn is clicked.
    function makeBlue(event:MouseEvent):void
    {
    // Set the color of the ColorTransform object.
    colorInfo.color = 0x003399;
    // apply the change to the display object
    square.transform.colorTransform = colorInfo;
    }

    blueBtn.addEventListener(MouseEvent.CLICK, makeBlue);

    Note that when you change a display object’s color using the color property, it completely changes the color of the entire object, regardless of whether the object previously had multiple colors. For example, if there is a display object containing a green circle with black text on top, setting the color property of that object’s associated ColorTransform instance to a shade of red will make the entire object, circle and text, turn red (so the text will no longer be distinguishable from the rest of the object).

    Altering color and brightness effects with code

    Suppose you have a display object with multiple colors (for example, a digital photo) and you don’t want to completely recolor the object; you just want to adjust the color of a display object based on the existing colors. In this scenario, the ColorTransform class includes a series of multiplier and offset properties that you can use to make this type of adjustment. The multiplier properties, named redMultiplier , greenMultiplier , blueMultiplier , and alphaMultiplier , work like colored photographic filters (or colored sunglasses), amplifying or diminishing certain colors in the display object. The offset properties ( redOffset , greenOffset , blueOffset , and alphaOffset ) can be used to add extra amounts of a certain color to the object, or to specify the minimum value that a particular color can have.

    These multiplier and offset properties are identical to the advanced color settings that are available for movie clip symbols in the Flash authoring tool when you choose Advanced from the Color pop-up menu on the Property inspector.

    The following code loads a JPEG image and applies a color transformation to it, which adjusts the red and green channels as the mouse pointer moves along the x axis and y axis. In this case, because no offset values are specified, the color value of each color channel displayed on screen will be a percentage of the original color value in the image—meaning that the most red or green displayed in any given pixel will be the original amount of red or green in that pixel.

    import flash.display.Loader;
    import flash.events.MouseEvent;
    import flash.geom.Transform;
    import flash.geom.ColorTransform;
    import flash.net.URLRequest;

    // Load an image onto the Stage.
    var loader:Loader = new Loader();
    var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg");
    loader.load(url);
    this.addChild(loader);

    // This function is called when the mouse moves over the loaded image.
    function adjustColor(event:MouseEvent):void
    {
    // Access the ColorTransform object for the Loader (containing the image)
    var colorTransformer:ColorTransform = loader.transform.colorTransform;

    // Set the red and green multipliers according to the mouse position.
    // The red value ranges from 0% (no red) when the cursor is at the left
    // to 100% red (normal image appearance) when the cursor is at the right.
    // The same applies to the green channel, except it's controlled by the
    // position of the mouse in the y axis.
    colorTransformer.redMultiplier = (loader.mouseX / loader.width) * 1;
    colorTransformer.greenMultiplier = (loader.mouseY / loader.height) * 1;

    // Apply the changes to the display object.
    loader.transform.colorTransform = colorTransformer;

    }

    loader.addEventListener(MouseEvent.MOUSE_MOVE, adjustColor);
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/applying-blending-modes.html b/docs/development/display/display-programming/manipulating-display-objects/applying-blending-modes.html index 3ec29dd03..a6174fab1 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/applying-blending-modes.html +++ b/docs/development/display/display-programming/manipulating-display-objects/applying-blending-modes.html @@ -16,13 +16,13 @@ - +

    Applying blending modes

    Blending modes involve combining the colors of one image (the base image) with the colors of another image (the blend image) to produce a third image—the resulting image is the one that is actually displayed on the screen. Each pixel value in an image is processed with the corresponding pixel value of the other image to produce a pixel value for that same position in the result.

    Every display object has a blendMode property that can be set to one of the following blending modes. These are constants defined in the BlendMode class. Alternatively, you can use the String values (in parentheses) that are the actual values of the constants.

    • BlendMode.ADD ( "add" ): Commonly used to create an animated lightening dissolve effect between two images.
    • BlendMode.ALPHA ( "alpha" ): Commonly used to apply the transparency of the foreground on the background. (Not supported under GPU rendering.)
    • BlendMode.DARKEN ( "darken" ): Commonly used to superimpose type. (Not supported under GPU rendering.)
    • BlendMode.DIFFERENCE ( "difference" ): Commonly used to create more vibrant colors.
    • BlendMode.ERASE ( "erase" ): Commonly used to cut out (erase) part of the background using the foreground alpha. (Not supported under GPU rendering.)
    • BlendMode.HARDLIGHT ( "hardlight" ): Commonly used to create shading effects. (Not supported under GPU rendering.)
    • BlendMode.INVERT ( "invert" ): Used to invert the background.
    • BlendMode.LAYER ( "layer" ): Used to force the creation of a temporary buffer for precomposition for a particular display object. (Not supported under GPU rendering.)
    • BlendMode.LIGHTEN ( "lighten" ): Commonly used to superimpose type. (Not supported under GPU rendering.)
    • BlendMode.MULTIPLY ( "multiply" ): Commonly used to create shadows and depth effects.
    • BlendMode.NORMAL ( "normal" ): Used to specify that the pixel values of the blend image override those of the base image.
    • BlendMode.OVERLAY ( "overlay" ): Commonly used to create shading effects. (Not supported under GPU rendering.)
    • BlendMode.SCREEN ( "screen" ): Commonly used to create highlights and lens flares.
    • BlendMode.SHADER ( "shader" ): Used to specify that a Pixel Bender shader is used to create a custom blending effect. For more information about using shaders, see Working with Pixel Bender shaders . (Not supported under GPU rendering.)
    • BlendMode.SUBTRACT ( "subtract" ): Commonly used to create an animated darkening dissolve effect between two images.
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/caching-display-objects.html b/docs/development/display/display-programming/manipulating-display-objects/caching-display-objects.html index 58e08b543..143b66c63 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/caching-display-objects.html +++ b/docs/development/display/display-programming/manipulating-display-objects/caching-display-objects.html @@ -16,13 +16,13 @@ - +

    Caching display objects

    As your designs in Flash grow in size, whether you are creating an application or complex scripted animations, you need to consider performance and optimization. When you have content that remains static (such as a rectangle Shape instance), Flash Player and AIR do not optimize the content. Therefore, when you change the position of the rectangle, Flash Player or AIR redraws the entire Shape instance.

    You can cache specified display objects to improve the performance of your SWF file. The display object is a surface , essentially a bitmap version of the instance's vector data, which is data that you do not intend to change much over the course of your SWF file. Therefore, instances with caching turned on are not continually redrawn as the SWF file plays, letting the SWF file render quickly.

    note

    You can update the vector data, at which time the surface is recreated. Therefore, the vector data cached in the surface does not need to remain the same for the entire SWF file.

    Setting a display object's cacheAsBitmap property to true makes the display object cache a bitmap representation of itself. Flash Player or AIR creates a surface object for the instance, which is a cached bitmap instead of vector data. If you change the bounds of the display object, the surface is recreated instead of resized. Surfaces can nest within other surfaces. The child surface copies its bitmap onto its parent surface. For more information, see Enabling bitmap caching .

    The DisplayObject class's opaqueBackground property and scrollRect property are related to bitmap caching using the cacheAsBitmap property. Although these three properties are independent of each other, the opaqueBackground and scrollRect properties work best when an object is cached as a bitmap—you see performance benefits for the opaqueBackground and scrollRect properties only when you set cacheAsBitmap to true . For more information about scrolling display object content, see Panning and scrolling display objects . For more information about setting an opaque background, see Setting an opaque background color .

    For information on alpha channel masking, which requires you to set the cacheAsBitmap property to true , see Masking display objects .

    When to enable caching

    Enabling caching for a display object creates a surface, which has several advantages, such as helping complex vector animations to render fast. There are several scenarios in which you will want to enable caching. It might seem as though you would always want to enable caching to improve the performance of your SWF files; however, there are situations in which enabling caching does not improve performance, or can even decrease it. This section describes scenarios in which caching should be used, and when to use regular display objects.

    Overall performance of cached data depends on how complex the vector data of your instances are, how much of the data you change, and whether or not you set the opaqueBackground property. If you are changing small regions, the difference between using a surface and using vector data could be negligible. You might want to test both scenarios with your work before you deploy the application.

    When to use bitmap caching

    The following are typical scenarios in which you might see significant benefits when you enable bitmap caching.

    • Complex background image: An application that contains a detailed and complex background image of vector data (perhaps an image where you applied the trace bitmap command, or artwork that you created in Adobe Illustrator®). You might animate characters over the background, which slows the animation because the background needs to continuously regenerate the vector data. To improve performance, you can set the opaqueBackground property of the background display object to true . The background is rendered as a bitmap and can be redrawn quickly, so that your animation plays much faster.
    • Scrolling text field: An application that displays a large amount of text in a scrolling text field. You can place the text field in a display object that you set as scrollable with scrolling bounds (the scrollRect property). This enables fast pixel scrolling for the specified instance. When a user scrolls the display object instance, Flash Player or AIR shifts the scrolled pixels up and generates the newly exposed region instead of regenerating the entire text field.
    • Windowing system: An application with a complex system of overlapping windows. Each window can be open or closed (for example, web browser windows). If you mark each window as a surface (by setting the cacheAsBitmap property to true ), each window is isolated and cached. Users can drag the windows so that they overlap each other, and each window doesn't need to regenerate the vector content.
    • Alpha channel masking: When you are using alpha channel masking, you must set the cacheAsBitmap property to true . For more information, see Masking display objects .

    Enabling bitmap caching in all of these scenarios improves the responsiveness and interactivity of the application by optimizing the vector graphics.

    In addition, whenever you apply a filter to a display object, cacheAsBitmap is automatically set to true , even if you explicitly set it to false . If you clear all the filters from the display object, the cacheAsBitmap property returns to the value it was last set to.

    When to avoid using bitmap caching

    Using this feature in the wrong circumstances can negatively affect the performance of your SWF file. When you use bitmap caching, remember the following guidelines:

    • Do not overuse surfaces (display objects with caching enabled). Each surface uses more memory than a regular display object, which means that you should only enable surfaces when you need to improve rendering performance.
    • A cached bitmap can use significantly more memory than a regular display object. For example, if a Sprite instance on the Stage is 250 pixels by 250 pixels in size, when cached it might use 250 KB instead of 1 KB when it's a regular (un-cached) Sprite instance.
    • Avoid zooming into cached surfaces. If you overuse bitmap caching, a large amount of memory is consumed (see previous bullet), especially if you zoom in on the content.
    • Use surfaces for display object instances that are largely static (non-animating). You can drag or move the instance, but the contents of the instance should not animate or change a lot. (Animation or changing content are more likely with a MovieClip instance containing animation or a Video instance.) For example, if you rotate or transform an instance, the instance changes between the surface and vector data, which is difficult to process and negatively affects your SWF file.
    • If you mix surfaces with vector data, it increases the amount of processing that Flash Player and AIR (and sometimes the computer) need to do. Group surfaces together as much as possible—for example, when you create windowing applications.
    • Do not cache objects whose graphics change frequently. Every time you scale, skew, rotate the display object, change the alpha or color transform, move child display objects, or draw using the graphics property, the bitmap cache is redrawn. If this happens every frame, the runtime must draw the object into a bitmap and then copy that bitmap onto the stage—which results in extra work compared to just drawing the uncached object to the stage. The performance tradeoff of caching versus update frequency depends on the complexity and size of the display object and can only be determined by testing the specific content.

    Enabling bitmap caching

    To enable bitmap caching for a display object, you set its cacheAsBitmap property to true :

    mySprite.cacheAsBitmap = true;

    After you set the cacheAsBitmap property to true , you might notice that the display object automatically pixel-snaps to whole coordinates. When you test the SWF file, you should notice that any animation performed on a complex vector image renders much faster.

    A surface (cached bitmap) is not created, even if cacheAsBitmap is set to true , if one or more of the following occurs:

    • The bitmap is greater than 2880 pixels in height or width.
    • The bitmap fails to allocate (because of an out-of-memory error).

    Cached bitmap transform matrices

    In AIR applications for mobile devices, you should set the cacheAsBitmapMatrix property whenever you set the cacheAsBitmap property. Setting this property allows you to apply a wider range of transformations to the display object without triggering rerendering.

    mySprite.cacheAsBitmap = true;
    mySprite.cacheAsBitmapMatrix = new Matrix();

    When you set this matrix property, you can apply the following additional transformation to the display object without recaching the object:

    • Move or translate without pixel-snapping
    • Rotate
    • Scale
    • Skew
    • Change alpha (between 0 and 100% transparency)

    These transformations are applied directly to the cached bitmap.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/changing-position.html b/docs/development/display/display-programming/manipulating-display-objects/changing-position.html index fbf8ac3d4..d614f57ae 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/changing-position.html +++ b/docs/development/display/display-programming/manipulating-display-objects/changing-position.html @@ -16,13 +16,13 @@ - +

    Changing position

    The most basic manipulation to any display object is positioning it on the screen. To set a display object’s position, change the object’s x and y properties.

    myShape.x = 17;
    myShape.y = 212;

    The display object positioning system treats the Stage as a Cartesian coordinate system (the common grid system with a horizontal x axis and vertical y axis). The origin of the coordinate system (the 0,0 coordinate where the x and y axes meet) is at the top-left corner of the Stage. From there, x values are positive going right and negative going left, while (in contrast to typical graphing systems) y values are positive going down and negative going up. For example, the previous lines of code move the object myShape to the x coordinate 17 (17 pixels to the right of the origin) and y coordinate 212 (212 pixels below the origin).

    By default, when a display object is created using ActionScript, the x and y properties are both set to 0, placing the object at the top-left corner of its parent content.

    Changing position relative to the Stage

    It's important to remember that the x and y properties always refer to the position of the display object relative to the 0,0 coordinate of its parent display object’s axes. So for a Shape instance (such as a circle) contained inside a Sprite instance, setting the Shape object’s x and y properties to 0 will place the circle at the top-left corner of the Sprite, which is not necessarily the top-left corner of the Stage. To position an object relative to the global Stage coordinates, you can use the globalToLocal() method of any display object to convert coordinates from global (Stage) coordinates to local (display object container) coordinates, like this:

    // Position the shape at the top-left corner of the Stage,
    // regardless of where its parent is located.

    // Create a Sprite, positioned at x:200 and y:200.
    var mySprite:Sprite = new Sprite();
    mySprite.x = 200;
    mySprite.y = 200;
    this.addChild(mySprite);

    // Draw a dot at the Sprite's 0,0 coordinate, for reference.
    mySprite.graphics.lineStyle(1, 0x000000);
    mySprite.graphics.beginFill(0x000000);
    mySprite.graphics.moveTo(0, 0);
    mySprite.graphics.lineTo(1, 0);
    mySprite.graphics.lineTo(1, 1);
    mySprite.graphics.lineTo(0, 1);
    mySprite.graphics.endFill();

    // Create the circle Shape instance.
    var circle:Shape = new Shape();
    mySprite.addChild(circle);

    // Draw a circle with radius 50 and center point at x:50, y:50 in the Shape.
    circle.graphics.lineStyle(1, 0x000000);
    circle.graphics.beginFill(0xff0000);
    circle.graphics.drawCircle(50, 50, 50);
    circle.graphics.endFill();

    // Move the Shape so its top-left corner is at the Stage's 0, 0 coordinate.
    var stagePoint:Point = new Point(0, 0);
    var targetPoint:Point = mySprite.globalToLocal(stagePoint);
    circle.x = targetPoint.x;
    circle.y = targetPoint.y;

    You can likewise use the DisplayObject class’s localToGlobal() method to convert local coordinates to Stage coordinates.

    Moving display objects with the mouse

    You can let a user move display objects with mouse using two different techniques in ActionScript. In both cases, two mouse events are used: when the mouse button is pressed down, the object is told to follow the mouse cursor, and when it’s released, the object is told to stop following the mouse cursor.

    note

    Flash Player 11.3 and higher, AIR 3.3 and higher: You can also use the MouseEvent.RELEASE_OUTSIDE event to cover the case of a user releasing the mouse button outside the bounds of the containing Sprite.

    The first technique, using the startDrag() method, is simpler, but more limited. When the mouse button is pressed, the startDrag() method of the display object to be dragged is called. When the mouse button is released, the stopDrag() method is called. The Sprite class defines these two functions, so the object moved must be a Sprite or one of its subclasses.

    // This code creates a mouse drag interaction using the startDrag()
    // technique.
    // square is a MovieClip or Sprite instance).

    import flash.events.MouseEvent;

    // This function is called when the mouse button is pressed.
    function startDragging(event:MouseEvent):void
    {
    square.startDrag();
    }

    // This function is called when the mouse button is released.
    function stopDragging(event:MouseEvent):void
    {
    square.stopDrag();
    }

    square.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
    square.addEventListener(MouseEvent.MOUSE_UP, stopDragging);

    This technique suffers from one fairly significant limitation: only one item at a time can be dragged using startDrag() . If one display object is being dragged and the startDrag() method is called on another display object, the first display object stops following the mouse immediately. For example, if the startDragging() function is changed as shown here, only the circle object will be dragged, in spite of the square.startDrag() method call:

    function startDragging(event:MouseEvent):void
    {
    square.startDrag();
    circle.startDrag();
    }

    As a consequence of the fact that only one object can be dragged at a time using startDrag() , the stopDrag() method can be called on any display object and it stops whatever object is currently being dragged.

    If you need to drag more than one display object, or to avoid the possibility of conflicts where more than one object might potentially use startDrag() , it’s best to use the mouse-following technique to create the dragging effect. With this technique, when the mouse button is pressed, a function is subscribed as a listener to the mouseMove event of the Stage. This function, which is then called every time the mouse moves, causes the dragged object to jump to the x, y coordinate of the mouse. Once the mouse button is released, the function is unsubscribed as a listener, meaning it is no longer called when the mouse moves and the object stops following the mouse cursor. Here is some code that demonstrates this technique:

    // This code moves display objects using the mouse-following
    // technique.
    // circle is a DisplayObject (e.g. a MovieClip or Sprite instance).

    import flash.events.MouseEvent;

    var offsetX:Number;
    var offsetY:Number;

    // This function is called when the mouse button is pressed.
    function startDragging(event:MouseEvent):void
    {
    // Record the difference (offset) between where
    // the cursor was when the mouse button was pressed and the x, y
    // coordinate of the circle when the mouse button was pressed.
    offsetX = event.stageX - circle.x;
    offsetY = event.stageY - circle.y;

    // tell Flash Player to start listening for the mouseMove event
    stage.addEventListener(MouseEvent.MOUSE_MOVE, dragCircle);
    }

    // This function is called when the mouse button is released.
    function stopDragging(event:MouseEvent):void
    {
    // Tell Flash Player to stop listening for the mouseMove event.
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragCircle);
    }

    // This function is called every time the mouse moves,
    // as long as the mouse button is pressed down.
    function dragCircle(event:MouseEvent):void
    {
    // Move the circle to the location of the cursor, maintaining
    // the offset between the cursor's location and the
    // location of the dragged object.
    circle.x = event.stageX - offsetX;
    circle.y = event.stageY - offsetY;

    // Instruct Flash Player to refresh the screen after this event.
    event.updateAfterEvent();
    }

    circle.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
    circle.addEventListener(MouseEvent.MOUSE_UP, stopDragging);

    In addition to making a display object follow the mouse cursor, it is often desirable to move the dragged object to the front of the display, so that it appears to be floating above all the other objects. For example, suppose you have two objects, a circle and a square, that can both be moved with the mouse. If the circle happens to be below the square on the display list, and you click and drag the circle so that the cursor is over the square, the circle will appear to slide behind the square, which breaks the drag-and-drop illusion. Instead, you can make it so that when the circle is clicked, it moves to the top of the display list, and thus always appears on top of any other content.

    The following code (adapted from the previous example) allows two display objects, a circle and a square, to be moved with the mouse. Whenever the mouse button is pressed over either one, that item is moved to the top of the Stage’s display list, so that the dragged item always appears on top. (Code that is new or changed from the previous listing appears in boldface.)

    // This code creates a drag-and-drop interaction using the mouse-following
    // technique.
    // circle and square are DisplayObjects (e.g. MovieClip or Sprite
    // instances).

    import flash.display.DisplayObject;
    import flash.events.MouseEvent;

    var offsetX:Number;
    var offsetY:Number;
    var draggedObject:DisplayObject;

    // This function is called when the mouse button is pressed.
    function startDragging(event:MouseEvent):void
    {
    // remember which object is being dragged
    draggedObject = DisplayObject(event.target);

    // Record the difference (offset) between where the cursor was when
    // the mouse button was pressed and the x, y coordinate of the
    // dragged object when the mouse button was pressed.
    offsetX = event.stageX - draggedObject.x;
    offsetY = event.stageY - draggedObject.y;

    // move the selected object to the top of the display list
    stage.addChild(draggedObject);

    // Tell Flash Player to start listening for the mouseMove event.
    stage.addEventListener(MouseEvent.MOUSE_MOVE, dragObject);
    }

    // This function is called when the mouse button is released.
    function stopDragging(event:MouseEvent):void
    {
    // Tell Flash Player to stop listening for the mouseMove event.
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragObject);
    }

    // This function is called every time the mouse moves,
    // as long as the mouse button is pressed down.
    function dragObject(event:MouseEvent):void
    {
    // Move the dragged object to the location of the cursor, maintaining
    // the offset between the cursor's location and the location
    // of the dragged object.
    draggedObject.x = event.stageX - offsetX;
    draggedObject.y = event.stageY - offsetY;

    // Instruct Flash Player to refresh the screen after this event.
    event.updateAfterEvent();
    }

    circle.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
    circle.addEventListener(MouseEvent.MOUSE_UP, stopDragging);

    square.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
    square.addEventListener(MouseEvent.MOUSE_UP, stopDragging);

    To extend this effect further, such as for a game where tokens or cards are moved among piles, you could add the dragged object to the Stage’s display list when it’s "picked up," and then add it to another display list—such as the "pile" where it is dropped—when the mouse button is released.

    Finally, to enhance the effect, you could apply a drop shadow filter to the display object when it is clicked (when you start dragging it) and remove the drop shadow when the object is released. For details on using the drop shadow filter and other display object filters in ActionScript, see Filtering display objects .

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/controlling-distortion-when-scaling.html b/docs/development/display/display-programming/manipulating-display-objects/controlling-distortion-when-scaling.html index 2394310a9..75bfd78b7 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/controlling-distortion-when-scaling.html +++ b/docs/development/display/display-programming/manipulating-display-objects/controlling-distortion-when-scaling.html @@ -16,14 +16,14 @@ - +

    Controlling distortion when scaling

    Normally when a display object is scaled (for example, stretched horizontally), the resulting distortion is spread equally across the object, so that each part is stretched the same amount. For graphics and design elements, this is probably what you want. However, sometimes it's preferable to have control over which portions of the display object stretch and which portions remain unchanged. One common example of this is a button that's a rectangle with rounded corners. With normal scaling, the corners of the button will stretch, making the corner radius change as the button resizes.

    Scaling distortion on a button with rounded corners However, in this case it would be preferable to have control over the scaling—to be able to designate certain areas which should scale (the straight sides and middle) and areas which shouldn't (the corners)—so that scaling happens without visible distortion.

    Button scaled without distortion

    You can use 9-slice scaling (Scale-9) to create display objects where you have control over how the objects scale. With 9-slice scaling, the display object is divided into nine separate rectangles (a 3 by 3 grid, like the grid of a tic-tac-toe board). The rectangles aren't necessarily the same size—you designate where the grid lines are placed. Any content that lies in the four corner rectangles (such as the rounded corners of a button) will not be stretched or compressed when the display object scales. The top-center and bottom-center rectangles will scale horizontally but not vertically, while the left-middle and right-middle rectangles will scale vertically but not horizontally. The center rectangle will scale both horizontally and vertically.

    9-slice scaling grid

    Keeping this in mind, if you're creating a display object and you want certain content to never scale, you just have to make sure that the dividing lines of the 9-slice scaling grid are placed so that the content ends up in one of the corner rectangles.

    In ActionScript, setting a value for the scale9Grid property of a display object turns on 9-slice scaling for the object and defines the size of the rectangles in the object's Scale-9 grid. You use an instance of the Rectangle class as the value for the scale9Grid property, as follows:

    myButton.scale9Grid = new Rectangle(32, 27, 71, 64);

    The four parameters of the Rectangle constructor are the x coordinate, y coordinate, width, and height. In this example, the rectangle's top-left corner is placed at the point x: 32, y: 27 on the display object named myButton . The rectangle is 71 pixels wide and 64 pixels tall (so its right edge is at the x coordinate 103 on the display object and its bottom edge is at the y coordinate 92 on the display object).

    Core rectangle of the Scale-9 grid

    The actual area contained in the region defined by the Rectangle instance represents the center rectangle of the Scale-9 grid. The other rectangles are calculated by Flash Player and AIR by extending the sides of the Rectangle instance, as shown here:

    Complete Scale-9 grid derived from core rectangle

    In this case, as the button scales up or down, the rounded corners will not stretch or compress, but the other areas will adjust to accommodate the scaling.

    Effects of 9-slice scaling as button scales in both directions

    • A. myButton.width = 131; myButton.height = 106;
    • B. myButton.width = 73; myButton.height = 69;
    • C. myButton.width = 54; myButton.height = 141;
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/fading-objects.html b/docs/development/display/display-programming/manipulating-display-objects/fading-objects.html index 119e8f750..4b47a8d15 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/fading-objects.html +++ b/docs/development/display/display-programming/manipulating-display-objects/fading-objects.html @@ -16,13 +16,13 @@ - +

    Fading objects

    You can control the transparency of a display object to make it partially (or completely transparent), or change the transparency to make the object appear to fade in or out. The DisplayObject class’s alpha property defines the transparency (or more accurately, the opacity) of a display object. The alpha property can be set to any value between 0 and 1, where 0 is completely transparent, and 1 is completely opaque. For example, these lines of code make the object named myBall partially (50 percent) transparent when it is clicked with the mouse:

    function fadeBall(event:MouseEvent):void
    {
    myBall.alpha = .5;
    }
    myBall.addEventListener(MouseEvent.CLICK, fadeBall);

    You can also alter the transparency of a display object using the color adjustments available through the ColorTransform class. For more information, see Adjusting DisplayObject colors .

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/manipulating-size-and-scaling-objects.html b/docs/development/display/display-programming/manipulating-display-objects/manipulating-size-and-scaling-objects.html index e086cd4a3..477e96756 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/manipulating-size-and-scaling-objects.html +++ b/docs/development/display/display-programming/manipulating-display-objects/manipulating-size-and-scaling-objects.html @@ -16,13 +16,13 @@ - +

    Manipulating size and scaling objects

    You can measure and manipulate the size of a display object in two ways, using either the dimension properties ( width and height ) or the scale properties ( scaleX and scaleY ).

    Every display object has a width property and a height property, which are initially set to the size of the object in pixels. You can read the values of those properties to measure the size of the display object. You can also specify new values to change the size of the object, as follows:

    // Resize a display object.
    square.width = 420;
    square.height = 420;

    // Determine the radius of a circle display object.
    var radius:Number = circle.width / 2;

    Changing the height or width of a display object causes the object to scale, meaning its contents stretch or squeeze to fit in the new area. If the display object contains only vector shapes, those shapes will be redrawn at the new scale, with no loss in quality. Any bitmap graphic elements in the display object will be scaled rather than redrawn. So, for example, a digital photo whose width and height are increased beyond the actual dimensions of the pixel information in the image will be pixelated, making it look jagged.

    When you change the width or height properties of a display object, Flash Player and AIR update the scaleX and scaleY properties of the object as well.

    note

    TextField objects are an exception to this scaling behavior. Text fields need to resize themselves to accommodate text wrapping and font sizes, so they reset their scaleX or scaleY values to 1 after resizing. However, if you adjust the scaleX or scaleY values of a TextField object, the width and height values change to accommodate the scaling values you provide.

    These properties represent the relative size of the display object compared to its original size. The scaleX and scaleY properties use fraction (decimal) values to represent percentage. For example, if a display object’s width has been changed so that it’s half as wide as its original size, the object’s scaleX property will have the value .5 , meaning 50 percent. If its height has been doubled, its scaleY property will have the value 2 , meaning 200 percent.

    // circle is a display object whose width and height are 150 pixels.
    // At original size, scaleX and scaleY are 1 (100%).
    trace(circle.scaleX); // output: 1
    trace(circle.scaleY); // output: 1

    // When you change the width and height properties,
    // Flash Player changes the scaleX and scaleY properties accordingly.
    circle.width = 100;
    circle.height = 75;
    trace(circle.scaleX); // output: 0.6622516556291391
    trace(circle.scaleY); // output: 0.4966887417218543

    Size changes are not proportional. In other words, if you change the height of a square but not its width , its proportions will no longer be the same, and it will be a rectangle instead of a square. If you want to make relative changes to the size of a display object, you can set the values of the scaleX and scaleY properties to resize the object, as an alternative to setting the width or height properties. For example, this code changes the width of the display object named square , and then alters the vertical scale ( scaleY ) to match the horizontal scale, so that the size of the square stays proportional.

    // Change the width directly.
    square.width = 150;

    // Change the vertical scale to match the horizontal scale,
    // to keep the size proportional.
    square.scaleY = square.scaleX;
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/masking-display-objects.html b/docs/development/display/display-programming/manipulating-display-objects/masking-display-objects.html index 1c3082ff3..ec16b70f0 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/masking-display-objects.html +++ b/docs/development/display/display-programming/manipulating-display-objects/masking-display-objects.html @@ -16,13 +16,13 @@ - +

    Masking display objects

    You can use a display object as a mask to create a hole through which the contents of another display object are visible.

    Defining a mask

    To indicate that a display object will be the mask for another display object, set the mask object as the mask property of the display object to be masked:

    // Make the object maskSprite be a mask for the object mySprite.
    mySprite.mask = maskSprite;

    The masked display object is revealed under all opaque (nontransparent) areas of the display object acting as the mask. For instance, the following code creates a Shape instance containing a red 100 by 100 pixel square and a Sprite instance containing a blue circle with a radius of 25 pixels. When the circle is clicked, it is set as the mask for the square, so that the only part of the square that shows is the part that is covered by the solid part of the circle. In other words, only a red circle will be visible.

    // This code assumes it's being run within a display object container
    // such as a MovieClip or Sprite instance.

    import flash.display.Shape;

    // Draw a square and add it to the display list.
    var square:Shape = new Shape();
    square.graphics.lineStyle(1, 0x000000);
    square.graphics.beginFill(0xff0000);
    square.graphics.drawRect(0, 0, 100, 100);
    square.graphics.endFill();
    this.addChild(square);

    // Draw a circle and add it to the display list.
    var circle:Sprite = new Sprite();
    circle.graphics.lineStyle(1, 0x000000);
    circle.graphics.beginFill(0x0000ff);
    circle.graphics.drawCircle(25, 25, 25);
    circle.graphics.endFill();
    this.addChild(circle);

    function maskSquare(event:MouseEvent):void
    {
    square.mask = circle;
    circle.removeEventListener(MouseEvent.CLICK, maskSquare);
    }

    circle.addEventListener(MouseEvent.CLICK, maskSquare);

    The display object that is acting as a mask can be draggable, animated, resized dynamically, and can use separate shapes within a single mask. The mask display object doesn’t necessarily need to be added to the display list. However, if you want the mask object to scale when the Stage is scaled or if you want to enable user interaction with the mask (such as user-controlled dragging and resizing), the mask object must be added to the display list. The actual z-index (front-to-back order) of the display objects doesn’t matter, as long as the mask object is added to the display list. (The mask object will not appear on the screen except as a mask.) If the mask object is a MovieClip instance with multiple frames, it plays all the frames in its timeline, the same as it would if it were not serving as a mask. You can remove a mask by setting the mask property to null :

    // remove the mask from mySprite
    mySprite.mask = null;

    You cannot use a mask to mask another mask. You cannot set the alpha property of a mask display object. Only fills are used in a display object that is used as a mask; strokes are ignored.

    AIR 2

    If a masked display object is cached by setting the cacheAsBitmap and cacheAsBitmapMatrix properties, the mask must be a child of the masked display object. Similarly, if the masked display object is a descendent of a display object container that is cached, both the mask and the display object must be descendents of that container. If the masked object is a descendent of more than one cached display object container, the mask must be a descendent of the cached container closest to the masked object in the display list.

    About masking device fonts

    You can use a display object to mask text that is set in a device font. When you use a display object to mask text set in a device font, the rectangular bounding box of the mask is used as the masking shape. That is, if you create a non-rectangular display object mask for device font text, the mask that appears in the SWF file is the shape of the rectangular bounding box of the mask, not the shape of the mask itself.

    Alpha channel masking

    Alpha channel masking is supported if both the mask and the masked display objects use bitmap caching, as shown here:

    // maskShape is a Shape instance which includes a gradient fill.
    mySprite.cacheAsBitmap = true;
    maskShape.cacheAsBitmap = true;
    mySprite.mask = maskShape;

    For instance, one application of alpha channel masking is to use a filter on the mask object independently of a filter that is applied to the masked display object.

    In the following example, an external image file is loaded onto the Stage. That image (or more accurately, the Loader instance it is loaded into) will be the display object that is masked. A gradient oval (solid black center fading to transparent at the edges) is drawn over the image; this will be the alpha mask. Both display objects have bitmap caching turned on. The oval is set as a mask for the image, and it is then made draggable.

    // This code assumes it's being run within a display object container
    // such as a MovieClip or Sprite instance.

    import flash.display.GradientType;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.geom.Matrix;
    import flash.net.URLRequest;

    // Load an image and add it to the display list.
    var loader:Loader = new Loader();
    var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg");
    loader.load(url);
    this.addChild(loader);

    // Create a Sprite.
    var oval:Sprite = new Sprite();
    // Draw a gradient oval.
    var colors:Array = [0x000000, 0x000000];
    var alphas:Array = [1, 0];
    var ratios:Array = [0, 255];
    var matrix:Matrix = new Matrix();
    matrix.createGradientBox(200, 100, 0, -100, -50);
    oval.graphics.beginGradientFill(
    GradientType.RADIAL,
    colors,
    alphas,
    ratios,
    matrix );
    oval.graphics.drawEllipse(-100, -50, 200, 100);
    oval.graphics.endFill();
    // add the Sprite to the display list
    this.addChild(oval);

    // Set cacheAsBitmap = true for both display objects.
    loader.cacheAsBitmap = true;
    oval.cacheAsBitmap = true;
    // Set the oval as the mask for the loader (and its child, the loaded image)
    loader.mask = oval;

    // Make the oval draggable.
    oval.startDrag(true);
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/panning-and-scrolling-display-objects.html b/docs/development/display/display-programming/manipulating-display-objects/panning-and-scrolling-display-objects.html index 427bc59ee..e959e5f9b 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/panning-and-scrolling-display-objects.html +++ b/docs/development/display/display-programming/manipulating-display-objects/panning-and-scrolling-display-objects.html @@ -16,13 +16,13 @@ - +

    Panning and scrolling display objects

    If you have a display object that is too large for the area in which you want it to display it, you can use the scrollRect property to define the viewable area of the display object. In addition, by changing the scrollRect property in response to user input, you can cause the content to pan left and right or scroll up and down.

    The scrollRect property is an instance of the Rectangle class, which is a class that combines the values needed to define a rectangular area as a single object. To initially define the viewable area of the display object, create a new Rectangle instance and assign it to the display object’s scrollRect property. Later, to scroll or pan, you read the scrollRect property into a separate Rectangle variable, and change the desired property (for instance, change the Rectangle instance’s x property to pan or y property to scroll). Then you reassign that Rectangle instance to the scrollRect property to notify the display object of the changed value.

    For example, the following code defines the viewable area for a TextField object named bigText that is too tall to fit in the SWF file’s boundaries. When the two buttons named up and down are clicked, they call functions that cause the contents of the TextField object to scroll up or down by modifying the y property of the scrollRect Rectangle instance.

    import flash.events.MouseEvent;
    import flash.geom.Rectangle;

    // Define the initial viewable area of the TextField instance:
    // left: 0, top: 0, width: TextField's width, height: 350 pixels.
    bigText.scrollRect = new Rectangle(0, 0, bigText.width, 350);

    // Cache the TextField as a bitmap to improve performance.
    bigText.cacheAsBitmap = true;

    // called when the "up" button is clicked
    function scrollUp(event:MouseEvent):void
    {
    // Get access to the current scroll rectangle.
    var rect:Rectangle = bigText.scrollRect;
    // Decrease the y value of the rectangle by 20, effectively
    // shifting the rectangle down by 20 pixels.
    rect.y -= 20;
    // Reassign the rectangle to the TextField to "apply" the change.
    bigText.scrollRect = rect;
    }

    // called when the "down" button is clicked
    function scrollDown(event:MouseEvent):void
    {
    // Get access to the current scroll rectangle.
    var rect:Rectangle = bigText.scrollRect;
    // Increase the y value of the rectangle by 20, effectively
    // shifting the rectangle up by 20 pixels.
    rect.y += 20;
    // Reassign the rectangle to the TextField to "apply" the change.
    bigText.scrollRect = rect;
    }

    up.addEventListener(MouseEvent.CLICK, scrollUp);
    down.addEventListener(MouseEvent.CLICK, scrollDown);

    As this example illustrates, when you work with the scrollRect property of a display object, it’s best to specify that Flash Player or AIR should cache the display object’s content as a bitmap, using the cacheAsBitmap property. When you do so, Flash Player and AIR don’t have to re-draw the entire contents of the display object each time it is scrolled, and can instead use the cached bitmap to render the necessary portion directly to the screen. For details, see Caching display objects .

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/rotating-objects.html b/docs/development/display/display-programming/manipulating-display-objects/rotating-objects.html index 04c16c21a..4223ceded 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/rotating-objects.html +++ b/docs/development/display/display-programming/manipulating-display-objects/rotating-objects.html @@ -16,13 +16,13 @@ - +

    Rotating objects

    Display objects can be rotated using the rotation property. You can read this value to find out whether an object has been rotated, or to rotate the object you can set this property to a number (in degrees) representing the amount of rotation to be applied to the object. For instance, this line of code rotates the object named square 45 degrees (one eighth of one complete revolution):

    square.rotation = 45;

    Alternatively, you can rotate a display object using a transformation matrix, described in Working with geometry .

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/manipulating-display-objects/setting-an-opaque-background-color.html b/docs/development/display/display-programming/manipulating-display-objects/setting-an-opaque-background-color.html index 2c57b2454..28e74db7c 100644 --- a/docs/development/display/display-programming/manipulating-display-objects/setting-an-opaque-background-color.html +++ b/docs/development/display/display-programming/manipulating-display-objects/setting-an-opaque-background-color.html @@ -16,13 +16,13 @@ - +

    Setting an opaque background color

    You can set an opaque background for a display object. For example, when your SWF has a background that contains complex vector art, you can set the opaqueBackground property to a specified color (typically the same color as the Stage). The color is specified as a number (commonly a hexadecimal color value). The background is then treated as a bitmap, which helps optimize performance.

    When you set cacheAsBitmap to true , and also set the opaqueBackground property to a specified color, the opaqueBackground property allows the internal bitmap to be opaque and rendered faster. If you do not set cacheAsBitmap to true , the opaqueBackground property adds an opaque vector-square shape to the background of the display object. It does not create a bitmap automatically.

    The following example shows how to set the background of a display object to optimize performance:

    myShape.cacheAsBitmap = true;
    myShape.opaqueBackground = 0xFF0000;

    In this case, the background color of the Shape named myShape is set to red ( 0xFF0000 ). Assuming the Shape instance contains a drawing of a green triangle, on a Stage with a white background, this would show up as a green triangle with red in the empty space in the Shape instance's bounding box (the rectangle that completely encloses the Shape).

    Effect of setting opaqueBackground color

    Of course, this code would make more sense if it were used with a Stage with a solid red background. On another colored background, that color would be specified instead. For example, in a SWF with a white background, the opaqueBackground property would most likely be set to 0xFFFFFF , or pure white.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/stage-orientation.html b/docs/development/display/display-programming/stage-orientation.html index 7d5163c2e..1fec0aa06 100644 --- a/docs/development/display/display-programming/stage-orientation.html +++ b/docs/development/display/display-programming/stage-orientation.html @@ -16,13 +16,13 @@ - +

    Stage orientation

    Mobile devices typically re-orient the user interface to keep the display upright when the user rotates the device. If you enable auto-orientation in your application, the device keeps the display properly oriented, but it is up to you to make sure that your content looks okay when the aspect ratio of the stage changes. If you disable auto-orientation, then the device display remains fixed unless you change the orientation manually.

    AIR applications run on a number of different mobile devices and operating systems. The underlying orientation behavior can vary across operating systems, and even across different devices on the same operating system. A simple design strategy, that works well across all devices and operating systems, is to enable auto-orientation and to listen for Stage resize events to determine when you need to refresh the application layout.

    Alternately, if your application only supports the portrait aspect ratio or only supports the landscape aspect ratio, you can turn off auto-orientation and set the supported aspect ratio in the AIR application descriptor. This design strategy provides consistent behavior and selects the “best” orientation for the selected aspect ratio. For example, if you specify the landscape aspect ratio, the orientation chosen is appropriate for devices with landscape-mode, slide-out keyboards.

    Getting the current Stage orientation and aspect ratio

    Orientation is reported relative to the normal position of the device. On most devices there is a clear, upright position. This position is considered the default orientation. The other three possible orientations are then: rotated left , rotated right , and upside down . The StageOrientation class defines string constants to use when setting or comparing orientation values.

    The Stage class defines two properties that report orientation:

    • Stage.deviceOrientation — Reports the physical orientation of the device relative to the default position.
    note

    The deviceOrientation is not always available when your application first starts up or when the device is lying flat. In these cases, the device orientation is reported as unknown .

    • Stage.orientation — Reports the orientation of the Stage relative to the default position. When auto-orientation is enabled, the stage rotates in the opposite direction as the device to remain upright. Thus, the right and left positions reported by the orientation property are the opposite of those reported by the deviceOrientation property. For example, when deviceRotation reports rotated right , orientation reports rotated left .

    The aspect ratio of the stage can be derived by simply comparing the current width and height of the stage:

    var aspect:String = this.stage.stageWidth >= this.stage.stageHeight ? StageAspectRatio.LANDSCAPE : StageAspectRatio.PORTRAIT;

    Automatic orientation

    When auto-orientation is on and a user rotates their device, the operating system re-orients the entire user interface, including the system taskbar and your application. As a result, the aspect ratio of the stage changes from portrait to landscape or landscape to portrait. When the aspect ratio changes, the stage dimensions also change.

    Enable or disable auto-orientation at runtime, by setting the Stage autoOrients property to true or false . You can set the initial value of this property in the AIR application descriptor with the <autoOrients> element. (Note that prior to AIR 2.6, autoOrients is a read-only property and can only be set in the application descriptor.)

    If you specify an aspect ratio of landscape or portrait and also enable auto-orientation, AIR constrains auto-orientation to the specified aspect ratio.

    Stage dimension changes

    When the stage dimensions change, the stage contents are scaled and repositioned as specified by the scaleMode and align properties of the Stage object. In most cases, relying on the automatic behavior provided by the Stage scaleMode settings does not produce good results. Instead you must re-layout or redraw your graphics and components to support more than one aspect ratio. (Providing flexible layout logic also means that your application will work better across devices with different screen sizes and aspect ratios.)

    The following illustration demonstrates the effects of the different scaleMode settings when rotating a typical mobile device:

    Rotation from landscape to portrait aspect ratio

    The illustration demonstrates the scaling behavior that occurs when rotating from a landscape aspect ratio to a portrait aspect ratio with different scale modes. Rotating from portrait to landscape causes a similar set of effects.

    Orientation change events

    The Stage object dispatches two types of events that you can use to detect and react to orientation changes. Both stage resize and orientationChange events are dispatched when auto-orientation is enabled.

    The resize event is the best event to use when you are relying on auto-orientation to keep the display upright. When the stage dispatches a resize event, relayout or redraw your content, as needed. The resize event is only dispatched when the stage scale mode is set to noScale .

    The orientationChange event can also be used to detect orientation changes. The orientationChange event is only dispatched when auto-orientation is enabled.

    note

    On some mobile platforms, the stage dispatches a cancelable orientationChanging event before dispatching the resize or orientationChange events. Since the event is not supported on all platforms, avoid relying on it.

    Manual orientation

    You can control the stage orientation using the Stage setOrientation() or setAspectRatio() methods.

    Setting the stage orientation

    You can set the stage orientation at runtime using the setOrientation() method of the Stage object. Use the string constants defined by the StageOrientation class to specify the desired orientation:

    this.stage.setOrientation( StageOrientation.ROTATED_RIGHT );

    Not every device and operating system supports every possible orientation. For example, Android 2.2 does not support programmatically choosing the rotated-left orientation on portrait-standard devices and does not support the upside-down orientation at all. The supportedOrientations property of the stage provides a list of the orientations that can be passed to the setOrientation() method:

    var orientations:Vector.<String> = this.stage.supportedOrientations;
    for each( var orientation:String in orientations )
    {
    trace( orientation );
    }

    Setting the stage aspect ratio

    If you are primarily concerned about the aspect ratio of the stage, you can set the aspect ratio to portrait or landscape. You can set the aspect ratio in either the AIR application descriptor or, at run time, using the Stage setAspectRatio() method:

    this.stage.setAspectRatio( StageAspectRatio.LANDSCAPE );

    The runtime chooses one of the two possible orientations for the specified aspect ratio. This may not match the current device orientation. For example, the default orientation is chosen in preference to the upside-down orientation (AIR 3.2 and earlier) and the orientation appropriate for the slide-out keyboard is chosen in preference to the opposite orientation.

    (AIR 3.3 and higher) Starting with AIR 3.3 (SWF version 16), you can also use the StageAspectRatio.ANY constant. If Stage.autoOrients is set to true and you call setAspectRatio(StageAspectRatio.ANY), your application has the capability to re-orient to all orientations (landscape-left, landscape-right, portait, and portrait-upside-down). Also new in AIR 3.3, the aspect ratio is persistent, and further rotation of the device is constrained to the specified orientation.

    Example: Setting the stage orientation to match the device orientation

    The following example illustrates a function that updates the stage orientation to match the current device orientation. The stage deviceOrientation property indicates the physical orientation of the device, even when auto-orientation is turned off.

    function refreshOrientation( theStage:Stage ):void
    {
    switch ( theStage.deviceOrientation )
    {
    case StageOrientation.DEFAULT:
    theStage.setOrientation( StageOrientation.DEFAULT );
    break;
    case StageOrientation.ROTATED_RIGHT:
    theStage.setOrientation( StageOrientation.ROTATED_LEFT );
    break;
    case StageOrientation.ROTATED_LEFT:
    theStage.setOrientation( StageOrientation.ROTATED_RIGHT );
    break;
    case StageOrientation.UPSIDE_DOWN:
    theStage.setOrientation( StageOrientation.UPSIDE_DOWN );
    break;
    default:
    //No change
    }
    }

    The orientation change is asynchronous. You can listen for the orientationChange event dispatched by the stage to detect the completion of the change. If an orientation is not supported on a device, the setOrientation() call fails without throwing an error.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/working-with-display-objects.html b/docs/development/display/display-programming/working-with-display-objects.html index 861ee221d..1f5e005e6 100644 --- a/docs/development/display/display-programming/working-with-display-objects.html +++ b/docs/development/display/display-programming/working-with-display-objects.html @@ -16,13 +16,13 @@ - +

    Working with display objects

    Now that you understand the basic concepts of the Stage, display objects, display object containers, and the display list, this section provides you with some more specific information about working with display objects in ActionScript 3.0.

    More Help topics

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/working-with-display-objects/adding-display-objects-to-the-display-list.html b/docs/development/display/display-programming/working-with-display-objects/adding-display-objects-to-the-display-list.html index 3f48f12a6..fba2d41df 100644 --- a/docs/development/display/display-programming/working-with-display-objects/adding-display-objects-to-the-display-list.html +++ b/docs/development/display/display-programming/working-with-display-objects/adding-display-objects-to-the-display-list.html @@ -16,13 +16,13 @@ - +

    Adding display objects to the display list

    When you instantiate a display object, it will not appear on-screen (on the Stage) until you add the display object instance to a display object container that is on the display list. For example, in the following code, the myText TextField object would not be visible if you omitted the last line of code. In the last line of code, the this keyword must refer to a display object container that is already added to the display list.

    import flash.display.*;
    import flash.text.TextField;
    var myText:TextField = new TextField();
    myText.text = "Buenos dias.";
    this.addChild(myText);

    When you add any visual element to the Stage, that element becomes a child of the Stage object. The first SWF file loaded in an application (for example, the one that you embed in an HTML page) is automatically added as a child of the Stage. It can be an object of any type that extends the Sprite class.

    Any display objects that you create without using ActionScript—for example, by adding an MXML tag in a Flex MXML file or by placing an item on the Stage in Flash Professional—are added to the display list. Although you do not add these display objects through ActionScript, you can access them through ActionScript. For example, the following code adjusts the width of an object named button1 that was added in the authoring tool (not through ActionScript):

    button1.width = 200;
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/working-with-display-objects/choosing-a-displayobject-subclass.html b/docs/development/display/display-programming/working-with-display-objects/choosing-a-displayobject-subclass.html index f3d784e2d..d12281099 100644 --- a/docs/development/display/display-programming/working-with-display-objects/choosing-a-displayobject-subclass.html +++ b/docs/development/display/display-programming/working-with-display-objects/choosing-a-displayobject-subclass.html @@ -16,13 +16,13 @@ - +

    Choosing a DisplayObject subclass

    With several options to choose from, one of the important decisions you’ll make when you’re working with display objects is which display object to use for what purpose. Here are some guidelines to help you decide. These same suggestions apply whether you need an instance of a class or you’re choosing a base class for a class you’re creating:

    • If you don’t need an object that can be a container for other display objects (that is, you just need one that serves as a stand-alone screen element), choose one of these DisplayObject or InteractiveObject subclasses, depending on what it will be used for:

      • Bitmap for displaying a bitmap image.

      • TextField for adding text.

      • Video for displaying video.

      • Shape for a “canvas” for drawing content on-screen. In particular, if you want to create an instance for drawing shapes on the screen, and it won’t be a container for other display objects, you’ll gain significant performance benefits using Shape instead of Sprite or MovieClip.

      • MorphShape, StaticText, or SimpleButton for items created by the Flash authoring tool. (You can’t create instances of these classes programmatically, but you can create variables with these data types to refer to items created using the Flash authoring tool.)

    • If you need a variable to refer to the main Stage, use the Stage class as its data type.

    • If you need a container for loading an external SWF file or image file, use a Loader instance. The loaded content will be added to the display list as a child of the Loader instance. Its data type will depend on the nature of the loaded content, as follows:

      • A loaded image will be a Bitmap instance.
      • A loaded SWF file written in ActionScript 3.0 will be a Sprite or MovieClip instance (or an instance of a subclass of those classes, as specified by the content creator).
      • A loaded SWF file written in ActionScript 1.0 or ActionScript 2.0 will be an AVM1Movie instance.
    • If you need an object to serve as a container for other display objects (whether or not you’ll also be drawing onto the display object using ActionScript), choose one of the DisplayObjectContainer subclasses:

      • Sprite if the object will be created using only ActionScript, or as the base class for a custom display object that will be created and manipulated solely with ActionScript.
      • MovieClip if you’re creating a variable to refer to a movie clip symbol created in the Flash authoring tool.
    • If you are creating a class that will be associated with a movie clip symbol in the Flash library, choose one of these DisplayObjectContainer subclasses as your class’s base class:

      • MovieClip if the associated movie clip symbol has content on more than one frame
      • Sprite if the associated movie clip symbol has content only on the first frame
    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/working-with-display-objects/handling-events-for-display-objects.html b/docs/development/display/display-programming/working-with-display-objects/handling-events-for-display-objects.html index 4759317f8..57ddd0d14 100644 --- a/docs/development/display/display-programming/working-with-display-objects/handling-events-for-display-objects.html +++ b/docs/development/display/display-programming/working-with-display-objects/handling-events-for-display-objects.html @@ -16,13 +16,13 @@ - +

    Handling events for display objects

    The DisplayObject class inherits from the EventDispatcher class. This means that every display object can participate fully in the event model (described in Handling events ). Every display object can use its addEventListener() method—inherited from the EventDispatcher class—to listen for a particular event, but only if the listening object is part of the event flow for that event.

    When Flash Player or AIR dispatches an event object, that event object makes a round-trip journey from the Stage to the display object where the event occurred. For example, if a user clicks on a display object named child1 , Flash Player dispatches an event object from the Stage through the display list hierarchy down to the child1 display object.

    The event flow is conceptually divided into three phases, as illustrated in this diagram:

    For more information, see Handling events .

    One important issue to keep in mind when working with display object events is the effect that event listeners can have on whether display objects are automatically removed from memory (garbage collected) when they’re removed from the display list. If a display object has objects subscribed as listeners to its events, that display object will not be removed from memory even when it’s removed from the display list, because it will still have references to those listener objects. For more information, see Managing event listeners .

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/working-with-display-objects/properties-and-methods-of-the-displayobject-class.html b/docs/development/display/display-programming/working-with-display-objects/properties-and-methods-of-the-displayobject-class.html index c340467a1..4c8745903 100644 --- a/docs/development/display/display-programming/working-with-display-objects/properties-and-methods-of-the-displayobject-class.html +++ b/docs/development/display/display-programming/working-with-display-objects/properties-and-methods-of-the-displayobject-class.html @@ -16,13 +16,13 @@ - +

    Properties and methods of the DisplayObject class

    All display objects are subclasses of the DisplayObject class, and as such they inherit the properties and methods of the DisplayObject class. The properties inherited are basic properties that apply to all display objects. For example, each display object has an x property and a y property that specifies the object’s position in its display object container.

    You cannot create a DisplayObject instance using the DisplayObject class constructor. You must create another type of object (an object that is a subclass of the DisplayObject class), such as a Sprite, to instantiate an object with the new operator. Also, if you want to create a custom display object class, you must create a subclass of one of the display object subclasses that has a usable constructor function (such as the Shape class or the Sprite class). For more information, see the DisplayObject class description in the ActionScript 3.0 Reference for the Adobe Flash Platform .

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/working-with-display-objects/setting-stage-properties.html b/docs/development/display/display-programming/working-with-display-objects/setting-stage-properties.html index 210cd28e5..846140dd9 100644 --- a/docs/development/display/display-programming/working-with-display-objects/setting-stage-properties.html +++ b/docs/development/display/display-programming/working-with-display-objects/setting-stage-properties.html @@ -16,13 +16,13 @@ - +

    Setting Stage properties

    The Stage class overrides most properties and methods of the DisplayObject class. If you call one of these overridden properties or methods, Flash Player and AIR throw an exception. For example, the Stage object does not have x or y properties, since its position is fixed as the main container for the application. The x and y properties refer to the position of a display object relative to its container, and since the Stage is not contained in another display object container, these properties do not apply.

    note

    Some properties and methods of the Stage class are only available to display objects that are in the same security sandbox as the first SWF file loaded. For details, see Stage security .

    Controlling the playback frame rate

    The frameRate property of the Stage class is used to set the frame rate for all SWF files loaded into the application. For more information, see the ActionScript 3.0 Reference for the Adobe Flash Platform .

    Controlling Stage scaling

    When the portion of the screen representing Flash Player or AIR is resized, the runtime automatically adjusts the Stage contents to compensate. The Stage class’s scaleMode property determines how the Stage contents are adjusted. This property can be set to four different values, defined as constants in the flash.display.StageScaleMode class:

    • StageScaleMode.EXACT_FIT scales the SWF to fill the new stage dimensions without regard for the original content aspect ratio. The scale factors might not be the same for width and height, so the content can appear squeezed or stretched if the aspect ratio of the stage is changed.
    • StageScaleMode.SHOW_ALL scales the SWF to fit entirely within the new stage dimensions without changing the content aspect ratio. This scale mode displays all of the content, but can result in “letterbox” borders, like the black bars that appear when viewing a wide-screen movie on a standard television.
    • StageScaleMode.NO_BORDER scales the SWF to entirely fill the new stage dimensions without changing the aspect ratio of the content. This scale mode makes full use of the stage display area, but can result in cropping.
    • StageScaleMode.NO_SCALE — does not scale the SWF. If the new stage dimensions are smaller, the content is cropped; if larger, the added space is blank.

    In the StageScaleMode.NO_SCALE scale mode only, the stageWidth and stageHeight properties of the Stage class can be used to determine the actual pixel dimensions of the resized stage. (In the other scale modes, the stageWidth and stageHeight properties always reflect the original width and height of the SWF.) In addition, when scaleMode is set to StageScaleMode.NO_SCALE and the SWF file is resized, the Stage class’s resize event is dispatched, allowing you to make adjustments accordingly.

    Consequently, having scaleMode set to StageScaleMode.NO_SCALE allows you to have greater control over how the screen contents adjust to the window resizing if you desire. For example, in a SWF containing a video and a control bar, you might want to make the control bar stay the same size when the Stage is resized, and only change the size of the video window to accommodate the Stage size change. This is demonstrated in the following example:

    // mainContent is a display object containing the main content;
    // it is positioned at the top-left corner of the Stage, and
    // it should resize when the SWF resizes.

    // controlBar is a display object (e.g. a Sprite) containing several
    // buttons; it should stay positioned at the bottom-left corner of the
    // Stage (below mainContent) and it should not resize when the SWF
    // resizes.

    import flash.display.Stage;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;

    var swfStage:Stage = mainContent.stage;
    swfStage.scaleMode = StageScaleMode.NO_SCALE;
    swfStage.align = StageAlign.TOP_LEFT;
    swfStage.addEventListener(Event.RESIZE, resizeDisplay);

    function resizeDisplay(event:Event):void
    {
    var swfWidth:int = swfStage.stageWidth;
    var swfHeight:int = swfStage.stageHeight;

    // Resize the main content area
    var newContentHeight:Number = swfHeight - controlBar.height;
    mainContent.height = newContentHeight;
    mainContent.scaleX = mainContent.scaleY;

    // Reposition the control bar.
    controlBar.y = newContentHeight;

    }

    Setting the stage scale mode for AIR windows

    The stage scaleMode property determines how the stage scales and clips child display objects when a window is resized. Only the noScale mode should be used in AIR. In this mode, the stage is not scaled. Instead, the size of the stage changes directly with the bounds of the window. Objects may be clipped if the window is resized smaller.

    The stage scale modes are designed for use in a environments such as a web browser where you don't always have control over the size or aspect ratio of the stage. The modes let you choose the least bad compromise when the stage does not match the ideal size or aspect ratio of your application. In AIR, you always have control of the stage, so in most cases re-laying out your content or adjusting the dimensions of your window will give you better results than enabling stage scaling.

    In the browser and for the initial AIR window, the relationship between the window size and the initial scale factor is read from the loaded SWF file. However, when you create a NativeWindow object, AIR chooses an arbitrary relationship between the window size and the scale factor of 72:1. Thus, if your window is 72x72 pixels, a 10x10 rectangle added to the window is drawn the correct size of 10x10 pixels. However, if the window is 144x144 pixels, then a 10x10 pixel rectangle is scaled to 20x20 pixels. If you insist on using a scaleMode other than noScale for a window stage, you can compensate by setting the scale factor of any display objects in the window to the ratio of 72 pixels to the current width and height of the stage. For example, the following code calculates the required scale factor for a display object named client :

    if(newWindow.stage.scaleMode != StageScaleMode.NO_SCALE){
    client.scaleX = 72/newWindow.stage.stageWidth;
    client.scaleY = 72/newWindow.stage.stageHeight;
    }
    note

    Flex and HTML windows automatically set the stage scaleMode to noScale . Changing the scaleMode disturbs the automatic layout mechanisms used in these types of windows.

    Working with full-screen mode

    Full-screen mode allows you to set a movie’s stage to fill a viewer’s entire monitor without any container borders or menus. The Stage class’s displayState property is used to toggle full-screen mode on and off for a SWF. The displayState property can be set to one of the values defined by the constants in the flash.display.StageDisplayState class. To turn on full-screen mode, set the displayState property to StageDisplayState.FULL_SCREEN :

    stage.displayState = StageDisplayState.FULL_SCREEN;

    To turn on full-screen interactive mode (new in Flash Player 11.3), set the displayState property to StageDisplayState.FULL_SCREEN_INTERACTIVE :

    stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;

    In Flash Player, full-screen mode can only be initiated through ActionScript in response to a mouse click (including right-click) or keypress. AIR content running in the application security sandbox does not require that full-screen mode be entered in response to a user gesture.

    To exit full-screen mode, set the displayState property to StageDisplayState.NORMAL .

    stage.displayState = StageDisplayState.NORMAL;

    In addition, a user can choose to leave full-screen mode by switching focus to a different window or by using one of several key combinations: the Esc key (all platforms), Control-W (Windows), Command-W (Mac), or Alt-F4 (Windows).

    Enabling full-screen mode in Flash Player

    To enable full-screen mode for a SWF file embedded in an HTML page, the HTML code to embed Flash Player must include a param tag and embed attribute with the name allowFullScreen and value true , like this:

    <object>
    ...
    <param name="allowFullScreen" value="true" />
    <embed ... allowFullScreen="true" />
    </object>

    In the Flash authoring tool, select File -> Publish Settings and in the Publish Settings dialog box, on the HTML tab, select the Flash Only - Allow Full Screen template.

    In Flex, ensure that the HTML template includes <object> and <embed> tags that support full screen.

    If you are using JavaScript in a web page to generate the SWF-embedding tags, you must alter the JavaScript to add the allowFullScreen param tag and attribute. For example, if your HTML page uses the AC_FL_RunContent() function (which is used in HTML pages generated by Flash Professional and Flash Builder), you should add the allowFullScreen parameter to that function call as follows:

    AC_FL_RunContent(
    ...
    'allowFullScreen','true',
    ...
    ); //end AC code

    This does not apply to SWF files running in the stand-alone Flash Player.

    note

    If you set the Window Mode (wmode in the HTML) to Opaque Windowless (opaque) or Transparent Windowless (transparent), the full-screen window is always opaque

    There are also security-related restrictions for using full-screen mode with Flash Player in a browser. These restrictions are described in Security .

    Enabling full-screen interactive mode in Flash Player 11.3 and higher

    Flash Player 11.3 and higher support full-screen interactive mode, which enables full support for all keyboard keys (except for Esc , which exits full-screen interactive mode). Full-screen interactive mode is useful for gaming (for example, to enable chat in a multi-player game or WASD keyboard controls in a first-person shooter game.)

    To enable full-screen interactive mode for a SWF file embedded in an HTML page, the HTML code to embed Flash Player must include a param tag and embed attribute with the name allowFullScreenInteractive and value true , like this:

    <object>
    ...
    <param name="allowFullScreenInteractive" value="true" />
    <embed ... allowFullScreenInteractive="true" />
    </object>

    In the Flash authoring tool, select File -> Publish Settings and in the Publish Settings dialog box, on the HTML tab, select the Flash Only - Allow Full Screen Interactive template.

    In Flash Builder and Flex, ensure that the HTML templates include <object> and <embed> tags that support full screen interactive mode.

    If you are using JavaScript in a web page to generate the SWF-embedding tags, you must alter the JavaScript to add the allowFullScreenInteractive param tag and attribute. For example, if your HTML page uses the AC_FL_RunContent() function (which is used in HTML pages generated by Flash Professional and Flash Builder), you should add the allowFullScreenInteractive parameter to that function call as follows:

    AC_FL_RunContent(
    ...
    'allowFullScreenInteractive','true',
    ...
    ); //end AC code

    This does not apply to SWF files running in the stand-alone Flash Player.

    Full screen stage size and scaling

    The Stage.fullScreenHeight and Stage.fullScreenWidth properties return the height and the width of the monitor that’s used when going to full-screen size, if that state is entered immediately. These values can be incorrect if the user has the opportunity to move the browser from one monitor to another after you retrieve these values but before entering full-screen mode. If you retrieve these values in the same event handler where you set the Stage.displayState property to StageDisplayState.FULL_SCREEN , the values are correct.For users with multiple monitors, the SWF content expands to fill only one monitor. Flash Player and AIR use a metric to determine which monitor contains the greatest portion of the SWF, and uses that monitor for full-screen mode. The fullScreenHeight and fullScreenWidth properties only reflect the size of the monitor that is used for full-screen mode. For more information, see Stage.fullScreenHeight and Stage.fullScreenWidth in the ActionScript 3.0 Reference for the Adobe Flash Platform .

    Stage scaling behavior for full-screen mode is the same as under normal mode; the scaling is controlled by the Stage class’s scaleMode property. If the scaleMode property is set to StageScaleMode.NO_SCALE , the Stage’s stageWidth and stageHeight properties change to reflect the size of the screen area occupied by the SWF (the entire screen, in this case); if viewed in the browser the HTML parameter for this controls the setting.

    You can use the Stage class’s fullScreen event to detect and respond when full-screen mode is turned on or off. For example, you might want to reposition, add, or remove items from the screen when entering or leaving full-screen mode, as in this example:

    import flash.events.FullScreenEvent;

    function fullScreenRedraw(event:FullScreenEvent):void
    {
    if (event.fullScreen)
    {
    // Remove input text fields.
    // Add a button that closes full-screen mode.
    }
    else
    {
    // Re-add input text fields.
    // Remove the button that closes full-screen mode.
    }
    }

    mySprite.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenRedraw);

    As this code shows, the event object for the fullScreen event is an instance of the flash.events.FullScreenEvent class, which includes a fullScreen property indicating whether full-screen mode is enabled ( true ) or not ( false ).

    Keyboard support in full-screen mode

    When Flash Player runs in a browser, all keyboard-related ActionScript, such as keyboard events and text entry in TextField instances, is disabled in full-screen mode. The exceptions (the keys that are enabled) are:

    • Selected non-printing keys, specifically the arrow keys, space bar, and tab key
    • Keyboard shortcuts that terminate full-screen mode: Esc (Windows and Mac), Control-W (Windows), Command-W (Mac), and Alt-F4

    These restrictions are not present for SWF content running in the stand-alone Flash Player or in AIR. AIR supports an interactive full-screen mode that allows keyboard input.

    Mouse support in full-screen mode

    By default, mouse events in full-screen mode work the same way as when not in full-screen mode. However, in full-screen mode, you can optionally set the Stage.mouseLock property to enable mouse locking. Mouse locking disables the cursor and enables unbounded mouse movement.

    note

    You can only enable mouse locking in full-screen mode for desktop applications. Setting it on applications not in full-screen mode, or for applications on mobile devices, throws an exception.

    Mouse locking is disabled automatically and the mouse cursor is made visible again when:

    • The user exits full-screen mode by using the Escape key (all platforms), Control-W (Windows), Command-W (Mac), or Alt-F4 (Windows).
    • The application window loses focus.
    • Any settings UI is visible, including all privacy dialog boxes.
    • A native dialog box is shown, such as a file upload dialog box.

    Events associated with mouse movement, such as the mouseMove event, use the MouseEvent class to represent the event object. When mouse locking is disabled, use the MouseEvent.localX and MouseEvent.localY properties to determine the location of the mouse.When mouse locking is enabled, use the MouseEvent.movementX and MouseEvent.movementY properties to determine the location of the mouse. The movementX and movementY properties contain changes in the position of the mouse since the last event, instead of absolute coordinates of the mouse location.

    Hardware scaling in full-screen mode

    You can use the Stage class’s fullScreenSourceRect property to set Flash Player or AIR to scale a specific region of the stage to full-screen mode. Flash Player and AIR scale in hardware, if available, using the graphics and video card on a user's computer, and generally display content more quickly than software scaling.

    To take advantage of hardware scaling, you set the whole stage or part of the stage to full-screen mode. The following ActionScript 3.0 code sets the whole stage to full-screen mode:

    import flash.geom.*;
    {
    stage.fullScreenSourceRect = new Rectangle(0,0,320,240);
    stage.displayState = StageDisplayState.FULL_SCREEN;
    }

    When this property is set to a valid rectangle and the displayState property is set to full-screen mode, Flash Player and AIR scale the specified area. The actual Stage size in pixels within ActionScript does not change. Flash Player and AIR enforce a minimum limit for the size of the rectangle to accommodate the standard “Press Esc to exit full-screen mode” message. This limit is usually around 260 by 30 pixels but can vary depending on platform and Flash Player version.

    info

    The fullScreenSourceRect property can only be set when Flash Player or AIR is not in full-screen mode. To use this property correctly, set this property first, then set the displayState property to full-screen mode.

    To enable scaling, set the fullScreenSourceRect property to a rectangle object.

    stage.fullScreenSourceRect = new Rectangle(0,0,320,240);

    To disable scaling, set the fullScreenSourceRect property to null .

    stage.fullScreenSourceRect = null;

    To take advantage of all hardware acceleration features with Flash Player, enable it through the Flash Player Settings dialog box. To load the dialog box, right-click (Windows) or Control-click (Mac) inside Flash Player content in your browser. Select the Display tab, which is the first tab, and click the checkbox: Enable hardware acceleration.

    Direct and GPU-compositing window modes

    Flash Player 10 introduces two window modes, direct and GPU compositing, which you can enable through the publish settings in the Flash authoring tool. These modes are not supported in AIR. To take advantage of these modes, you must enable hardware acceleration for Flash Player.

    Direct mode uses the fastest, most direct path to push graphics to the screen, which is advantageous for video playback.

    GPU Compositing uses the graphics processing unit on the video card to accelerate compositing. Video compositing is the process of layering multiple images to create a single video image. When compositing is accelerated with the GPU it can improve the performance of YUV conversion, color correction, rotation or scaling, and blending. YUV conversion refers to the color conversion of composite analog signals, which are used for transmission, to the RGB (red, green, blue) color model that video cameras and displays use. Using the GPU to accelerate compositing reduces the memory and computational demands that are otherwise placed on the CPU. It also results in smoother playback for standard-definition video.

    Be cautious in implementing these window modes. Using GPU compositing can be expensive for memory and CPU resources. If some operations (such as blend modes, filtering, clipping or masking) cannot be carried out in the GPU, they are done by the software. Adobe recommends limiting yourself to one SWF file per HTML page when using these modes and you should not enable these modes for banners. The Flash Test Movie facility does not use hardware acceleration but you can use it through the Publish Preview option.

    Setting a frame rate in your SWF file that is higher than 60, the maximum screen refresh rate, is useless. Setting the frame rate from 50 through 55 allows for dropped frames, which can occur for various reasons from time to time.

    Using direct mode requires Microsoft DirectX 9 with VRAM 128 MB on Windows and OpenGL for Apple Macintosh, Mac OS X v10.2 or higher. GPU compositing requires Microsoft DirectX 9 and Pixel Shader 2.0 support on Windows with 128 MB of VRAM. On Mac OS X and Linux, GPU compositing requires OpenGL 1.5 and several OpenGL extensions (framebuffer object, multitexture, shader objects, shading language, fragment shader).

    You can activate direct and gpu acceleration modes on a per-SWF basis through the Flash Publish Settings dialog box, using the Hardware Acceleration menu on the Flash tab. If you choose None, the window mode reverts to default , transparent , or opaque , as specified by the Window Mode setting on the HTML tab.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/working-with-display-objects/traversing-the-display-list.html b/docs/development/display/display-programming/working-with-display-objects/traversing-the-display-list.html index 6226ad823..9f653f2bb 100644 --- a/docs/development/display/display-programming/working-with-display-objects/traversing-the-display-list.html +++ b/docs/development/display/display-programming/working-with-display-objects/traversing-the-display-list.html @@ -16,13 +16,13 @@ - +

    Traversing the display list

    As you've seen, the display list is a tree structure. At the top of the tree is the Stage, which can contain multiple display objects. Those display objects that are themselves display object containers can contain other display objects, or display object containers.

    The DisplayObjectContainer class includes properties and methods for traversing the display list, by means of the child lists of display object containers. For example, consider the following code, which adds two display objects, title and pict , to the container object (which is a Sprite, and the Sprite class extends the DisplayObjectContainer class):

    var container:Sprite = new Sprite();
    var title:TextField = new TextField();
    title.text = "Hello";
    var pict:Loader = new Loader();
    var url:URLRequest = new URLRequest("banana.jpg");
    pict.load(url);
    pict.name = "banana loader";
    container.addChild(title);
    container.addChild(pict);

    The getChildAt() method returns the child of the display list at a specific index position:

    trace(container.getChildAt(0) is TextField); // true

    You can also access child objects by name. Each display object has a name property, and if you don’t assign it, Flash Player or AIR assigns a default value, such as "instance1" . For example, the following code shows how to use the getChildByName() method to access a child display object with the name "banana loader" :

    trace(container.getChildByName("banana loader") is Loader); // true

    Using the getChildByName() method can result in slower performance than using the getChildAt() method.

    Since a display object container can contain other display object containers as child objects in its display list, you can traverse the full display list of the application as a tree. For example, in the code excerpt shown earlier, once the load operation for the pict Loader object is complete, the pict object will have one child display object, which is the bitmap, loaded. To access this bitmap display object, you can write pict.getChildAt(0) . You can also write container.getChildAt(0).getChildAt(0) (since container.getChildAt(0) == pict ).

    The following function provides an indented trace() output of the display list from a display object container:

    function traceDisplayList(container:DisplayObjectContainer, indentString:String = ""):void
    {
    var child:DisplayObject;
    for (var i:uint=0; i < container.numChildren; i++)
    {
    child = container.getChildAt(i);
    trace(indentString, child, child.name);
    if (container.getChildAt(i) is DisplayObjectContainer)
    {
    traceDisplayList(DisplayObjectContainer(child), indentString + " ")
    }
    }
    }

    Adobe Flex

    If you use Flex, you should know that Flex defines many component display object classes, and these classes override the display list access methods of the DisplayObjectContainer class. For example, the Container class of the mx.core package overrides the addChild() method and other methods of the DisplayObjectContainer class (which the Container class extends). In the case of the addChild() method, the class overrides the method in such a way that you cannot add all types of display objects to a Container instance in Flex. The overridden method, in this case, requires that the child object that you are adding be a type of mx.core.UIComponent object.

    - + \ No newline at end of file diff --git a/docs/development/display/display-programming/working-with-display-objects/working-with-display-object-containers.html b/docs/development/display/display-programming/working-with-display-objects/working-with-display-object-containers.html index 208a6e90b..ad8b316bf 100644 --- a/docs/development/display/display-programming/working-with-display-objects/working-with-display-object-containers.html +++ b/docs/development/display/display-programming/working-with-display-objects/working-with-display-object-containers.html @@ -16,13 +16,13 @@ - +

    Working with display object containers

    If a DisplayObjectContainer object is deleted from the display list, or if it is moved or transformed in some other way, each display object in the DisplayObjectContainer is also deleted, moved, or transformed.

    A display object container is itself a type of display object—it can be added to another display object container. For example, the following image shows a display object container, pictureScreen , that contains one outline shape and four other display object containers (of type PictureFrame):

    A. A shape defining the border of the pictureScreen display object container B. Four display object containers that are children of the pictureScreen object

    In order to have a display object appear in the display list, you must add it to a display object container that is on the display list. You do this by using the addChild() method or the addChildAt() method of the container object. For example, without the final line of the following code, the myTextField object would not be displayed:

    var myTextField:TextField = new TextField();
    myTextField.text = "hello";
    this.root.addChild(myTextField);

    In this code sample, this.root points to the MovieClip display object container that contains the code. In your actual code, you may specify a different container.

    Use the addChildAt() method to add the child to a specific position in the child list of the display object container. These zero-based index positions in the child list relate to the layering (the front-to-back order) of the display objects. For example, consider the following three display objects. Each object was created from a custom class called Ball.

    The layering of these display objects in their container can be adjusted using the addChildAt() method. For example, consider the following code:

    ball_A = new Ball(0xFFCC00, "a");
    ball_A.name = "ball_A";
    ball_A.x = 20;
    ball_A.y = 20;
    container.addChild(ball_A);

    ball_B = new Ball(0xFFCC00, "b");
    ball_B.name = "ball_B";
    ball_B.x = 70;
    ball_B.y = 20;
    container.addChild(ball_B);

    ball_C = new Ball(0xFFCC00, "c");
    ball_C.name = "ball_C";
    ball_C.x = 40;
    ball_C.y = 60;
    container.addChildAt(ball_C, 1);

    After executing this code, the display objects are positioned as follows in the container DisplayObjectContainer object. Notice the layering of the objects.

    To reposition an object to the top of the display list, simply re-add it to the list. For example, after the previous code, to move ball_A to the top of the stack, use this line of code:

    container.addChild(ball_A);

    This code effectively removes ball_A from its location in container's display list, and re-adds it to the top of the list—which has the end result of moving it to the top of the stack.

    You can use the getChildAt() method to verify the layer order of the display objects. The getChildAt() method returns child objects of a container based on the index number you pass it. For example, the following code reveals names of display objects at different positions in the child list of the container DisplayObjectContainer object:

    trace(container.getChildAt(0).name); // ball_A
    trace(container.getChildAt(1).name); // ball_C
    trace(container.getChildAt(2).name); // ball_B

    If you remove a display object from the parent container’s child list, the higher elements on the list each move down a position in the child index. For example, continuing with the previous code, the following code shows how the display object that was at position 2 in the container DisplayObjectContainer moves to position 1 if a display object that is lower in the child list is removed:

    container.removeChild(ball_C);
    trace(container.getChildAt(0).name); // ball_A
    trace(container.getChildAt(1).name); // ball_B

    The removeChild() and removeChildAt() methods do not delete a display object instance entirely. They simply remove it from the child list of the container. The instance can still be referenced by another variable. (Use the delete operator to completely remove an object.)

    Because a display object has only one parent container, you can add an instance of a display object to only one display object container. For example, the following code shows that the display object tf1 can exist in only one container (in this case, a Sprite, which extends the DisplayObjectContainer class):

    tf1:TextField = new TextField();
    tf2:TextField = new TextField();
    tf1.name = "text 1";
    tf2.name = "text 2";

    container1:Sprite = new Sprite();
    container2:Sprite = new Sprite();

    container1.addChild(tf1);
    container1.addChild(tf2);
    container2.addChild(tf1);

    trace(container1.numChildren); // 1
    trace(container1.getChildAt(0).name); // text 2
    trace(container2.numChildren); // 1
    trace(container2.getChildAt(0).name); // text 1

    If you add a display object that is contained in one display object container to another display object container, it is removed from the first display object container’s child list.

    In addition to the methods described above, the DisplayObjectContainer class defines several methods for working with child display objects, including the following:

    • contains() : Determines whether a display object is a child of a DisplayObjectContainer.
    • getChildByName() : Retrieves a display object by name.
    • getChildIndex() : Returns the index position of a display object.
    • setChildIndex() : Changes the position of a child display object.
    • removeChildren() : Removes multiple child display objects.
    • swapChildren() : Swaps the front-to-back order of two display objects.
    • swapChildrenAt() : Swaps the front-to-back order of two display objects, specified by their index values.

    For more information, see the relevant entries in the ActionScript 3.0 Reference for the Adobe Flash Platform .

    Recall that a display object that is off the display list—one that is not included in a display object container that is a child of the Stage—is known as an off-list display object.

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects.html b/docs/development/display/filtering-display-objects.html index 03c897c3a..e5073667b 100644 --- a/docs/development/display/filtering-display-objects.html +++ b/docs/development/display/filtering-display-objects.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ programmatically apply filters to bitmaps and display objects and achieve many of the same effects that are available in graphics manipulation applications.

    More Help Topics

    flash.filters package

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/available-display-filters.html b/docs/development/display/filtering-display-objects/available-display-filters.html index 5da34b6e4..cb92fb558 100644 --- a/docs/development/display/filtering-display-objects/available-display-filters.html +++ b/docs/development/display/filtering-display-objects/available-display-filters.html @@ -16,7 +16,7 @@ - + @@ -48,7 +48,7 @@ flash.filters package in the ActionScript 3.0 Reference for the Adobe Flash Platform.

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/basics-of-filtering-display-objects.html b/docs/development/display/filtering-display-objects/basics-of-filtering-display-objects.html index 8534d82c1..ed9a23d81 100644 --- a/docs/development/display/filtering-display-objects/basics-of-filtering-display-objects.html +++ b/docs/development/display/filtering-display-objects/basics-of-filtering-display-objects.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ Shifting or moving pixels in an image to a new position.

    Matrix
    A grid of numbers used to perform certain mathematical calculations by applying the numbers in the grid to various values, then combining the results.

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/bevel-filter.html b/docs/development/display/filtering-display-objects/bevel-filter.html index 3cf7eb4b1..5e6c8a5af 100644 --- a/docs/development/display/filtering-display-objects/bevel-filter.html +++ b/docs/development/display/filtering-display-objects/bevel-filter.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ they have been chiseled, or beveled, away.

    The BevelFilter class properties allow you to customize the appearance of the bevel. You can set highlight and shadow colors, bevel edge blurs, bevel angles, and bevel edge placement; you can even create a knockout effect.

    The following example loads an external image and applies a bevel filter to it.

    import flash.display.*;
    import flash.filters.BevelFilter;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.BitmapFilterType;
    import flash.net.URLRequest;

    // Load an image onto the Stage.
    var imageLoader:Loader = new Loader();
    var url:String = "http://www.helpexamples.com/flash/images/image3.jpg";
    var urlReq:URLRequest = new URLRequest(url);
    imageLoader.load(urlReq);
    addChild(imageLoader);

    // Create the bevel filter and set filter properties.
    var bevel:BevelFilter = new BevelFilter();

    bevel.distance = 5;
    bevel.angle = 45;
    bevel.highlightColor = 0xFFFF00;
    bevel.highlightAlpha = 0.8;
    bevel.shadowColor = 0x666666;
    bevel.shadowAlpha = 0.8;
    bevel.blurX = 5;
    bevel.blurY = 5;
    bevel.strength = 5;
    bevel.quality = BitmapFilterQuality.HIGH;
    bevel.type = BitmapFilterType.INNER;
    bevel.knockout = false;

    // Apply filter to the image.
    imageLoader.filters = [bevel];
    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/blur-filter.html b/docs/development/display/filtering-display-objects/blur-filter.html index f916195e5..0ab09da40 100644 --- a/docs/development/display/filtering-display-objects/blur-filter.html +++ b/docs/development/display/filtering-display-objects/blur-filter.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ effect. Setting the quality property to high results in a smooth blur effect similar to a Gaussian blur.

    The following example creates a circle object using the drawCircle() method of the Graphics class and applies a blur filter to it:

    import flash.display.Sprite;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.BlurFilter;

    // Draw a circle.
    var redDotCutout:Sprite = new Sprite();
    redDotCutout.graphics.lineStyle();
    redDotCutout.graphics.beginFill(0xFF0000);
    redDotCutout.graphics.drawCircle(145, 90, 25);
    redDotCutout.graphics.endFill();

    // Add the circle to the display list.
    addChild(redDotCutout);

    // Apply the blur filter to the rectangle.
    var blur:BlurFilter = new BlurFilter();
    blur.blurX = 10;
    blur.blurY = 10;
    blur.quality = BitmapFilterQuality.MEDIUM;
    redDotCutout.filters = [blur];
    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/color-matrix-filter.html b/docs/development/display/filtering-display-objects/color-matrix-filter.html index aca6b853e..99f0c8d8f 100644 --- a/docs/development/display/filtering-display-objects/color-matrix-filter.html +++ b/docs/development/display/filtering-display-objects/color-matrix-filter.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ ColorMatrixFilter.matrix property in the ActionScript 3.0 Reference for the Adobe Flash Platform.

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/convolution-filter.html b/docs/development/display/filtering-display-objects/convolution-filter.html index 6560c09a4..50b5f51b5 100644 --- a/docs/development/display/filtering-display-objects/convolution-filter.html +++ b/docs/development/display/filtering-display-objects/convolution-filter.html @@ -16,7 +16,7 @@ - + @@ -61,7 +61,7 @@ negative matrix values added to the positive matrix values result in 1 (or 0 in the case of edge detection, but the divisor property's value cannot be 0).

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/creating-and-applying-filters.html b/docs/development/display/filtering-display-objects/creating-and-applying-filters.html index 88f8041bd..f34f3ad8e 100644 --- a/docs/development/display/filtering-display-objects/creating-and-applying-filters.html +++ b/docs/development/display/filtering-display-objects/creating-and-applying-filters.html @@ -16,7 +16,7 @@ - + @@ -159,7 +159,7 @@ the filtered copy bitmap is recreated from the original, rather than being stretched or distorted.

    If you clear all filters for a display object, the cacheAsBitmap property is reset to what it was before the filter was applied.

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/displacement-map-filter.html b/docs/development/display/filtering-display-objects/displacement-map-filter.html index c4a5f0409..7a82d07cb 100644 --- a/docs/development/display/filtering-display-objects/displacement-map-filter.html +++ b/docs/development/display/filtering-display-objects/displacement-map-filter.html @@ -16,7 +16,7 @@ - + @@ -107,7 +107,7 @@ isn't gray, that color's blue channel and red channel are identical to the blue channel and red channel of medium gray, and since blue and red are the colors that cause displacement, no displacement happens there.

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/drop-shadow-filter.html b/docs/development/display/filtering-display-objects/drop-shadow-filter.html index 8a2b18b11..019b2c379 100644 --- a/docs/development/display/filtering-display-objects/drop-shadow-filter.html +++ b/docs/development/display/filtering-display-objects/drop-shadow-filter.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ the style of the drop shadow, including inner or outer shadow and knockout (also known as cutout) mode.

    The following code creates a square box sprite and applies a drop shadow filter to it:

    import flash.display.Sprite;
    import flash.filters.DropShadowFilter;

    // Draw a box.
    var boxShadow:Sprite = new Sprite();
    boxShadow.graphics.lineStyle(1);
    boxShadow.graphics.beginFill(0xFF3300);
    boxShadow.graphics.drawRect(0, 0, 100, 100);
    boxShadow.graphics.endFill();
    addChild(boxShadow);

    // Apply the drop shadow filter to the box.
    var shadow:DropShadowFilter = new DropShadowFilter();
    shadow.distance = 10;
    shadow.angle = 25;

    // You can also set other properties, such as the shadow color,
    // alpha, amount of blur, strength, quality, and options for
    // inner shadows and knockout effects.

    boxShadow.filters = [shadow];
    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/example-combining-basic-filters.html b/docs/development/display/filtering-display-objects/example-combining-basic-filters.html index 2f451bc8f..eea7b65c0 100644 --- a/docs/development/display/filtering-display-objects/example-combining-basic-filters.html +++ b/docs/development/display/filtering-display-objects/example-combining-basic-filters.html @@ -16,14 +16,14 @@ - +

    Example: Combining basic filters

    The following code example uses several basic filters, combined with a Timer for creating repeating actions, to create an animated traffic light simulation.

    import flash.display.Shape;
    import flash.events.TimerEvent;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.BitmapFilterType;
    import flash.filters.DropShadowFilter;
    import flash.filters.GlowFilter;
    import flash.filters.GradientBevelFilter;
    import flash.utils.Timer;

    var count:Number = 1;
    var distance:Number = 8;
    var angleInDegrees:Number = 225; // opposite of 45 degrees
    var colors:Array = [0xFFFFCC, 0xFEFE78, 0x8F8E01];
    var alphas:Array = [1, 0, 1];
    var ratios:Array = [0, 128, 255];
    var blurX:Number = 8;
    var blurY:Number = 8;
    var strength:Number = 1;
    var quality:Number = BitmapFilterQuality.HIGH;
    var type:String = BitmapFilterType.INNER;
    var knockout:Boolean = false;

    // Draw the rectangle background for the traffic light.
    var box:Shape = new Shape();
    box.graphics.lineStyle();
    box.graphics.beginFill(0xFEFE78);
    box.graphics.drawRect(100, 50, 90, 200);
    box.graphics.endFill();

    // Draw the 3 circles for the three lights.
    var stopLight:Shape = new Shape();
    stopLight.graphics.lineStyle();
    stopLight.graphics.beginFill(0xFF0000);
    stopLight.graphics.drawCircle(145,90,25);
    stopLight.graphics.endFill();

    var cautionLight:Shape = new Shape();
    cautionLight.graphics.lineStyle();
    cautionLight.graphics.beginFill(0xFF9900);
    cautionLight.graphics.drawCircle(145,150,25);
    cautionLight.graphics.endFill();

    var goLight:Shape = new Shape();
    goLight.graphics.lineStyle();
    goLight.graphics.beginFill(0x00CC00);
    goLight.graphics.drawCircle(145,210,25);
    goLight.graphics.endFill();

    // Add the graphics to the display list.
    addChild(box);
    addChild(stopLight);
    addChild(cautionLight);
    addChild(goLight);

    // Apply a gradient bevel to the traffic light rectangle.
    var gradientBevel:GradientBevelFilter = new GradientBevelFilter(distance, angleInDegrees, colors, alphas, ratios, blurX, blurY, strength, quality, type, knockout);
    box.filters = [gradientBevel];

    // Create the inner shadow (for lights when off) and glow
    // (for lights when on).
    var innerShadow:DropShadowFilter = new DropShadowFilter(5, 45, 0, 0.5, 3, 3, 1, 1, true, false);
    var redGlow:GlowFilter = new GlowFilter(0xFF0000, 1, 30, 30, 1, 1, false, false);
    var yellowGlow:GlowFilter = new GlowFilter(0xFF9900, 1, 30, 30, 1, 1, false, false);
    var greenGlow:GlowFilter = new GlowFilter(0x00CC00, 1, 30, 30, 1, 1, false, false);

    // Set the starting state of the lights (green on, red/yellow off).
    stopLight.filters = [innerShadow];
    cautionLight.filters = [innerShadow];
    goLight.filters = [greenGlow];

    // Swap the filters based on the count value.
    function trafficControl(event:TimerEvent):void
    {
    if (count == 4)
    {
    count = 1;
    }

    switch (count)
    {
    case 1:
    stopLight.filters = [innerShadow];
    cautionLight.filters = [yellowGlow];
    goLight.filters = [innerShadow];
    break;
    case 2:
    stopLight.filters = [redGlow];
    cautionLight.filters = [innerShadow];
    goLight.filters = [innerShadow];
    break;
    case 3:
    stopLight.filters = [innerShadow];
    cautionLight.filters = [innerShadow];
    goLight.filters = [greenGlow];
    break;
    }

    count++;
    }

    // Create a timer to swap the filters at a 3 second interval.
    var timer:Timer = new Timer(3000, 9);
    timer.addEventListener(TimerEvent.TIMER, trafficControl);
    timer.start();
    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/filtering-display-objects-example-filter-workbench.html b/docs/development/display/filtering-display-objects/filtering-display-objects-example-filter-workbench.html index 85eacb20e..ca75e10b2 100644 --- a/docs/development/display/filtering-display-objects/filtering-display-objects-example-filter-workbench.html +++ b/docs/development/display/filtering-display-objects/filtering-display-objects-example-filter-workbench.html @@ -16,7 +16,7 @@ - + @@ -115,7 +115,7 @@ original one. For this reason, any changes that are made to the array of filters don't affect the display object until the array is assigned to the display object's filters property again.

    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/glow-filter.html b/docs/development/display/filtering-display-objects/glow-filter.html index c1487c19e..f87ca1706 100644 --- a/docs/development/display/filtering-display-objects/glow-filter.html +++ b/docs/development/display/filtering-display-objects/glow-filter.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ The GlowFilter also has several options for modifying the style of the glow, including inner or outer glow and knockout mode.

    The following code creates a cross using the Sprite class and applies a glow filter to it:

    import flash.display.Sprite;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.GlowFilter;

    // Create a cross graphic.
    var crossGraphic:Sprite = new Sprite();
    crossGraphic.graphics.lineStyle();
    crossGraphic.graphics.beginFill(0xCCCC00);
    crossGraphic.graphics.drawRect(60, 90, 100, 20);
    crossGraphic.graphics.drawRect(100, 50, 20, 100);
    crossGraphic.graphics.endFill();
    addChild(crossGraphic);

    // Apply the glow filter to the cross shape.
    var glow:GlowFilter = new GlowFilter();
    glow.color = 0x009922;
    glow.alpha = 1;
    glow.blurX = 25;
    glow.blurY = 25;
    glow.quality = BitmapFilterQuality.MEDIUM;

    crossGraphic.filters = [glow];
    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/gradient-bevel-filter.html b/docs/development/display/filtering-display-objects/gradient-bevel-filter.html index cdc7baed0..217a90e98 100644 --- a/docs/development/display/filtering-display-objects/gradient-bevel-filter.html +++ b/docs/development/display/filtering-display-objects/gradient-bevel-filter.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ improves the spatial depth of the bevel, giving edges a more realistic, 3D appearance.

    The following code creates a rectangle object using the drawRect() method of the Shape class and applies a gradient bevel filter to it.

    import flash.display.Shape;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.GradientBevelFilter;

    // Draw a rectangle.
    var box:Shape = new Shape();
    box.graphics.lineStyle();
    box.graphics.beginFill(0xFEFE78);
    box.graphics.drawRect(100, 50, 90, 200);
    box.graphics.endFill();

    // Apply a gradient bevel to the rectangle.
    var gradientBevel:GradientBevelFilter = new GradientBevelFilter();

    gradientBevel.distance = 8;
    gradientBevel.angle = 225; // opposite of 45 degrees
    gradientBevel.colors = [0xFFFFCC, 0xFEFE78, 0x8F8E01];
    gradientBevel.alphas = [1, 0, 1];
    gradientBevel.ratios = [0, 128, 255];
    gradientBevel.blurX = 8;
    gradientBevel.blurY = 8;
    gradientBevel.quality = BitmapFilterQuality.HIGH;

    // Other properties let you set the filter strength and set options
    // for inner bevel and knockout effects.

    box.filters = [gradientBevel];

    // Add the graphic to the display list.
    addChild(box);
    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/gradient-glow-filter.html b/docs/development/display/filtering-display-objects/gradient-glow-filter.html index 547cbd8e9..b8c284005 100644 --- a/docs/development/display/filtering-display-objects/gradient-glow-filter.html +++ b/docs/development/display/filtering-display-objects/gradient-glow-filter.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ filter to it. As you move the mouse further to the right and down, the amount of blur increases in the horizontal and vertical directions respectively. In addition, any time you click on the Stage, the strength of the blur increases.

    import flash.events.MouseEvent;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.BitmapFilterType;
    import flash.filters.GradientGlowFilter;

    // Create a new Shape instance.
    var shape:Shape = new Shape();

    // Draw the shape.
    shape.graphics.beginFill(0xFF0000, 100);
    shape.graphics.moveTo(0, 0);
    shape.graphics.lineTo(100, 0);
    shape.graphics.lineTo(100, 100);
    shape.graphics.lineTo(0, 100);
    shape.graphics.lineTo(0, 0);
    shape.graphics.endFill();

    // Position the shape on the Stage.
    addChild(shape);
    shape.x = 100;
    shape.y = 100;

    // Define a gradient glow.
    var gradientGlow:GradientGlowFilter = new GradientGlowFilter();
    gradientGlow.distance = 0;
    gradientGlow.angle = 45;
    gradientGlow.colors = [0x000000, 0xFF0000];
    gradientGlow.alphas = [0, 1];
    gradientGlow.ratios = [0, 255];
    gradientGlow.blurX = 10;
    gradientGlow.blurY = 10;
    gradientGlow.strength = 2;
    gradientGlow.quality = BitmapFilterQuality.HIGH;
    gradientGlow.type = BitmapFilterType.OUTER;

    // Define functions to listen for two events.
    function onClick(event:MouseEvent):void
    {
    gradientGlow.strength++;
    shape.filters = [gradientGlow];
    }

    function onMouseMove(event:MouseEvent):void
    {
    gradientGlow.blurX = (stage.mouseX / stage.stageWidth) * 255;
    gradientGlow.blurY = (stage.mouseY / stage.stageHeight) * 255;
    shape.filters = [gradientGlow];
    }
    stage.addEventListener(MouseEvent.CLICK, onClick);
    stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    - + \ No newline at end of file diff --git a/docs/development/display/filtering-display-objects/shader-filter.html b/docs/development/display/filtering-display-objects/shader-filter.html index ceea2d45f..f43183332 100644 --- a/docs/development/display/filtering-display-objects/shader-filter.html +++ b/docs/development/display/filtering-display-objects/shader-filter.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ To create a ShaderFilter that uses a Shader object, call the ShaderFilter() constructor and pass the Shader object as an argument, as shown in this listing:

    var myFilter:ShaderFilter = new ShaderFilter(myShader);

    For a complete example of using a shader filter, see Using a shader as a filter.

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api.html b/docs/development/display/using-the-drawing-api.html index 8c9db6b22..d4a50dc9e 100644 --- a/docs/development/display/using-the-drawing-api.html +++ b/docs/development/display/using-the-drawing-api.html @@ -16,13 +16,13 @@ - +

    Overview

    Although imported images and artwork are important, the functionality known as the drawing API, which allows you to draw lines and shapes in ActionScript, gives you the freedom to start an application with the computer equivalent of a blank canvas, on which you can create whatever images you wish. The ability to create your own graphics opens up broad possibilities for your applications. With the techniques covered here you can create a drawing program, make animated, interactive art, or programmatically create your own user interface elements, among many possibilities.

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/about-using-drawtriangles.html b/docs/development/display/using-the-drawing-api/about-using-drawtriangles.html index 484cba2a0..621f2c5d2 100644 --- a/docs/development/display/using-the-drawing-api/about-using-drawtriangles.html +++ b/docs/development/display/using-the-drawing-api/about-using-drawtriangles.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ facilitate three-dimensional effects through ActionScript. For information about using Graphics.drawTriangles() to produce three-dimensional effects, see Using triangles for 3D effects.

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/advanced-use-of-the-drawing-api.html b/docs/development/display/using-the-drawing-api/advanced-use-of-the-drawing-api.html index fd4d8ed69..0830aec43 100644 --- a/docs/development/display/using-the-drawing-api/advanced-use-of-the-drawing-api.html +++ b/docs/development/display/using-the-drawing-api/advanced-use-of-the-drawing-api.html @@ -16,13 +16,13 @@ - +

    Advanced use of the drawing API

    Flash Player 10, Adobe AIR 1.5, and later Flash runtimes, support an advanced set of drawing features. The drawing API enhancements for these runtimes expand upon the drawing methods from previous releases so you can establish data sets to generate shapes, alter shapes at runtime, and create three-dimensional effects. The drawing API enhancements consolidate existing methods into alternative commands. These commands leverage vector arrays and enumeration classes to provide data sets for drawing methods. Using vector arrays allows for more complex shapes to render quickly and for developers to change the array values programmatically for dynamic shape rendering at runtime.

    The drawing features introduced in Flash Player 10 are described in the following sections: Drawing Paths , Defining winding rules , Using graphics data classes , and About using drawTriangles() .

    The following tasks are things you’ll likely want to accomplish using the advanced drawing API in ActionScript:

    • Using Vector objects to store data for drawing methods
    • Defining paths for drawing shapes programmatically in a single operation
    • Defining winding rules to determine how overlapping shapes are filled
    • Reading the vector graphics content of a display object, such as to serialize and save the graphics data, to generate a spritesheet at runtime, or to draw a copy of the vector graphics content
    • Using triangles and drawing methods for three-dimensional effects

    Important concepts and terms

    The following reference list contains important terms that you will encounter in this section:

    • Vector: An array of values all of the same data type. A Vector object can store an array of values that drawing methods use to construct lines and shapes with a single command. For more information on Vector objects, see Indexed arrays .
    • Path: A path is made up of one or more straight or curved segments. The beginning and end of each segment are marked by coordinates, which work like pins holding a wire in place. A path can be closed (for example, a circle), or open, with distinct endpoints (for example, a wavy line).
    • Winding: The direction of a path as interpreted by the renderer; either positive (clockwise) or negative (counter-clockwise).
    • GraphicsStroke: A class for setting the line style. While the term “stroke” isn’t part of the drawing API enhancements, the use of a class to designate a line style with its own fill property is part of the new drawing API. You can dynamically adjust a line’s style using the GraphicsStroke class.
    • Fill object: Objects created using display classes like flash.display.GraphicsBitmapFill and flash.display.GraphicsGradientFill that are passed to the drawing command Graphics.drawGraphicsData() . Fill objects and the enhanced drawing commands introduce a more object-oriented programming approach to replicating Graphics.beginBitmapFill() and Graphics.beginGradientFill() .
    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/animating-with-the-drawing-api.html b/docs/development/display/using-the-drawing-api/animating-with-the-drawing-api.html index 17316f4eb..b8cc99e31 100644 --- a/docs/development/display/using-the-drawing-api/animating-with-the-drawing-api.html +++ b/docs/development/display/using-the-drawing-api/animating-with-the-drawing-api.html @@ -16,13 +16,13 @@ - +

    Animating with the drawing API

    One advantage of creating content with the drawing API is that you are not limited to positioning your content once. What you draw can be modified by maintaining and modifying the variables you use to draw. You can convey animation by changing variables and redrawing, either over a period of frames or with a timer.

    For example, the following code changes the display with each passing frame (by listening to the Event.ENTER_FRAME event), incrementing the current degree count, and directs the graphics object to clear and redraw with the updated position.

    stage.frameRate = 31;

    var currentDegrees:Number = 0;
    var radius:Number = 40;
    var satelliteRadius:Number = 6;

    var container:Sprite = new Sprite();
    container.x = stage.stageWidth / 2;
    container.y = stage.stageHeight / 2;
    addChild(container);
    var satellite:Shape = new Shape();
    container.addChild(satellite);

    addEventListener(Event.ENTER_FRAME, doEveryFrame);

    function doEveryFrame(event:Event):void
    {
    currentDegrees += 4;
    var radians:Number = getRadians(currentDegrees);
    var posX:Number = Math.sin(radians) * radius;
    var posY:Number = Math.cos(radians) * radius;
    satellite.graphics.clear();
    satellite.graphics.beginFill(0);
    satellite.graphics.drawCircle(posX, posY, satelliteRadius);
    }

    function getRadians(degrees:Number):Number
    {
    return degrees * Math.PI / 180;
    }

    To produce a significantly different result, you can experiment by modifying the initial seed variables at the beginning of the code, currentDegrees , radius , and satelliteRadius . For example, try shrinking the radius variable and/or increasing the totalSatellites variable. This is only one example of how the drawing API can create a visual display whose complexity conceals the simplicity of its creation.

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/basics-of-the-drawing-api.html b/docs/development/display/using-the-drawing-api/basics-of-the-drawing-api.html index 44800c25d..56e1d2105 100644 --- a/docs/development/display/using-the-drawing-api/basics-of-the-drawing-api.html +++ b/docs/development/display/using-the-drawing-api/basics-of-the-drawing-api.html @@ -16,13 +16,13 @@ - +

    Basics of the drawing API

    The drawing API is the name for the functionality built into ActionScript that allows you to create vector graphics—lines, curves, shapes, fills, and gradients—and display them on the screen using ActionScript. The flash.display.Graphics class provides this functionality. You can draw with ActionScript on any Shape, Sprite, or MovieClip instance, using the graphics property defined in each of those classes. (Each of those classes’ graphics property is in fact an instance of the Graphics class.)

    If you’re just getting started with drawing with code, the Graphics class includes several methods that make it easy to draw common shapes like circles, ellipses, rectangles, and rectangles with rounded corners. You can draw them as empty lines or filled shapes. When you need more advanced functionality, the Graphics class also includes methods for drawing lines and quadratic Bézier curves, which you can use in conjunction with the trigonometry functions in the Math class to create any shape you need.

    Flash runtimes (such as Flash Player 10 and Adobe AIR 1.5 and later versions) add an additional API for drawing, which allow you to programmatically draw entire shapes with a single command. Once you’re familiar with the Graphics class and tasks covered in "Basics of using the drawing API", continue to Advanced use of the drawing API to learn more about these drawing API features.

    Important concepts and terms

    The following reference list contains important terms that you will encounter while using the drawing API:

    • Anchor point One of the two end points of a quadratic Bézier curve.
    • Control point The point that defines the direction and amount of curve of a quadratic Bézier curve. The curved line never reaches the control point; however, the line curves as though being drawn toward the control point.
    • Coordinate space The graph of coordinates contained in a display object, on which its child elements are positioned.
    • Fill The solid inner portion of a shape that has a line filled in with color, or all of a shape that has no outline.
    • Gradient A color that consists of a gradual transition from one color to one or more other colors (as opposed to a solid color).
    • Point A single location in a coordinate space. In the 2-d coordinate system used in ActionScript, a point is defined by its location along the x axis and the y axis (the point’s coordinates).
    • Quadratic Bézier curve A type of curve defined by a particular mathematical formula. In this type of curve, the shape of the curve is calculated based on the positions of the anchor points (the end points of the curve) and a control point that defines the amount and direction of the curve.
    • Scale The size of an object relative to its original size. When used as a verb, to scale an object means to change its size by stretching or shrinking the object.
    • Stroke The outline portion of a shape that has a line filled in with color, or the lines of an un-filled shape.
    • Translate To change a point’s coordinates from one coordinate space to another.
    • X axis The horizontal axis in the 2-d coordinate system used in ActionScript.
    • Y axis The vertical axis in the 2-d coordinate system used in ActionScript.
    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/creating-gradient-lines-and-fills.html b/docs/development/display/using-the-drawing-api/creating-gradient-lines-and-fills.html index 682e03343..32994ac3d 100644 --- a/docs/development/display/using-the-drawing-api/creating-gradient-lines-and-fills.html +++ b/docs/development/display/using-the-drawing-api/creating-gradient-lines-and-fills.html @@ -16,13 +16,13 @@ - +

    Creating gradient lines and fills

    The graphics object can also draw strokes and fills with gradients rather than solid colors. A gradient stroke is created with the lineGradientStyle() method and a gradient fill is created with the beginGradientFill() method.

    Both methods accept the same parameters. The first four are required: type, colors, alphas, and ratios. The remaining four are optional but are useful for advanced customizing.

    • The first parameter specifies the type of gradient you are creating. Acceptable values are GradientType.LINEAR or GradientType.RADIAL .
    • The second parameter specifies the array of the color values to use. In a linear gradient, the colors will be arranged from left to right. In a radial gradient, they will be arranged from inside to outside. The order of the colors of the array represents the order that the colors will be drawn in the gradient.
    • The third parameter specifies the alpha transparency values of the corresponding colors in the previous parameter.
    • The fourth parameter specifies ratios, or the emphasis each color has within the gradient. Acceptable values range from 0-255. These values do not represent any width or height, but rather the position within the gradient; 0 represents the beginning of the gradient, 255 represents the end of the gradient. The array of ratios must increase sequentially and have the same number of entries as both the color and alpha arrays specified in the second and third parameters.

    Although the fifth parameter, the transformation matrix, is optional, it is commonly used because it provides an easy and powerful way to control the gradient’s appearance. This parameter accepts a Matrix instance. The easiest way to create a Matrix object for a gradient is to use the Matrix class’s createGradientBox() method.

    Defining a Matrix object for use with a gradient

    You use the beginGradientFill() and lineGradientStyle() methods of the flash.display.Graphics class to define gradients for use in shapes. When you define a gradient, you supply a matrix as one of the parameters of these methods.

    The easiest way to define the matrix is by using the Matrix class’s createGradientBox() method, which creates a matrix that is used to define the gradient. You define the scale, rotation, and position of the gradient using the parameters passed to the createGradientBox() method. The createGradientBox() method accepts the following parameters:

    • Gradient box width: the width (in pixels) to which the gradient will spread
    • Gradient box height: the height (in pixels) to which the gradient will spread
    • Gradient box rotation: the rotation (in radians) that will be applied to the gradient
    • Horizontal translation: how far (in pixels) the gradient is shifted horizontally
    • Vertical translation: how far (in pixels) the gradient is shifted vertically

    For example, consider a gradient with the following characteristics:

    • GradientType.LINEAR
    • Two colors, green and blue, with the ratios array set to [0, 255]
    • SpreadMethod.PAD
    • InterpolationMethod.LINEAR_RGB

    The following examples show gradients in which the rotation parameter of the createGradientBox() method differs as indicated, but all other settings stay the same:

    width = 100; height = 100; rotation = 0; tx = 0; ty = 0;
    width = 100; height = 100; rotation = Math.PI/4; tx = 0; ty = 0;
    width = 100; height = 100; rotation = Math.PI/2; tx = 0; ty = 0;

    The following examples show the effects on a green-to-blue linear gradient in which the rotation , tx , and ty parameters of the createGradientBox() method differ as indicated, but all other settings stay the same:

    width = 50; height = 100; rotation = 0; tx = 0; ty = 0;
    width = 50; height = 100; rotation = 0 tx = 50; ty = 0;
    width = 100; height = 50; rotation = Math.PI/2; tx = 0; ty = 0;
    width = 100; height = 50; rotation = Math.PI/2; tx = 0; ty = 50;

    The width , height , tx , and ty parameters of the createGradientBox() method affect the size and position of a radial gradient fill as well, as the following example shows:

    width = 50; height = 100; rotation = 0; tx = 25; ty = 0;

    The following code produces the last radial gradient illustrated:

    import flash.display.Shape;
    import flash.display.GradientType;
    import flash.geom.Matrix;

    var type:String = GradientType.RADIAL;
    var colors:Array = [0x00FF00, 0x000088];
    var alphas:Array = [1, 1];
    var ratios:Array = [0, 255];
    var spreadMethod:String = SpreadMethod.PAD;
    var interp:String = InterpolationMethod.LINEAR_RGB;
    var focalPtRatio:Number = 0;

    var matrix:Matrix = new Matrix();
    var boxWidth:Number = 50;
    var boxHeight:Number = 100;
    var boxRotation:Number = Math.PI/2; // 90°
    var tx:Number = 25;
    var ty:Number = 0;
    matrix.createGradientBox(boxWidth, boxHeight, boxRotation, tx, ty);

    var square:Shape = new Shape;
    square.graphics.beginGradientFill(type,
    colors,
    alphas,
    ratios,
    matrix,
    spreadMethod,
    interp,
    focalPtRatio);
    square.graphics.drawRect(0, 0, 100, 100);
    addChild(square);
    note

    Note that the width and height of the gradient fill is determined by the width and height of the gradient matrix rather than the width or height that is drawn using the Graphics object. When drawing with the Graphics object, you draw what exists at those coordinates in the gradient matrix. Even if you use one of the shape methods of a Graphics object such as drawRect() , the gradient does not stretch itself to the size of the shape that is drawn—the gradient’s size must be specified in the gradient matrix itself.

    The following illustrates the visual difference between the dimensions of the gradient matrix and the dimensions of the draw itself:

    var myShape:Shape = new Shape();
    var gradientBoxMatrix:Matrix = new Matrix();
    gradientBoxMatrix.createGradientBox(100, 40, 0, 0, 0);
    myShape.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x00FF00, 0x0000FF], [1, 1, 1], [0, 128, 255], gradientBoxMatrix);
    myShape.graphics.drawRect(0, 0, 50, 40);
    myShape.graphics.drawRect(0, 50, 100, 40);
    myShape.graphics.drawRect(0, 100, 150, 40);
    myShape.graphics.endFill();
    this.addChild(myShape);

    This code draws three gradients with the same fill style, specified with an equal distribution of red, green, and blue. The gradients are drawn using the drawRect() method with pixel widths of 50, 100, and 150 respectively. The gradient matrix which is specified in the beginGradientFill() method is created with a width of 100 pixels. This means that the first gradient will encompass only half of the gradient spectrum, the second will encompass all of it, and the third will encompass all of it and have an additional 50 pixels of blue extending to the right.

    The lineGradientStyle() method works similarly to beginGradientFill() except that in addition to defining the gradient, you must specify the thickness of the stroke using the lineStyle() method before drawing. The following code draws a box with a red, green, and blue gradient stroke:

    var myShape:Shape = new Shape();
    var gradientBoxMatrix:Matrix = new Matrix();
    gradientBoxMatrix.createGradientBox(200, 40, 0, 0, 0);
    myShape.graphics.lineStyle(5, 0);
    myShape.graphics.lineGradientStyle(GradientType.LINEAR, [0xFF0000, 0x00FF00, 0x0000FF], [1, 1, 1], [0, 128, 255], gradientBoxMatrix);
    myShape.graphics.drawRect(0, 0, 200, 40);
    this.addChild(myShape);

    For more information on the Matrix class, see Using Matrix objects .

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/defining-winding-rules.html b/docs/development/display/using-the-drawing-api/defining-winding-rules.html index 9e3b0dcf4..01c294f81 100644 --- a/docs/development/display/using-the-drawing-api/defining-winding-rules.html +++ b/docs/development/display/using-the-drawing-api/defining-winding-rules.html @@ -16,7 +16,7 @@ - + @@ -61,7 +61,7 @@ Even-odd 5 lines

    C.
    Non-zero 5 lines

    And, as images are animated or used as textures on three-dimensional objects and overlap, the winding rules become more important.

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/drawing-api-example-algorithmic-visual-generator.html b/docs/development/display/using-the-drawing-api/drawing-api-example-algorithmic-visual-generator.html index 0f992286c..9f1b786d1 100644 --- a/docs/development/display/using-the-drawing-api/drawing-api-example-algorithmic-visual-generator.html +++ b/docs/development/display/using-the-drawing-api/drawing-api-example-algorithmic-visual-generator.html @@ -16,7 +16,7 @@ - + @@ -76,7 +76,7 @@ be used to create visual effects of a variety and scope that are not possible to create by hand. Using the drawing API and a bit of mathematics, the ActionScript author can give life to many unexpected creations.

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/drawing-lines-and-curves.html b/docs/development/display/using-the-drawing-api/drawing-lines-and-curves.html index c0fa8c65e..976b0206c 100644 --- a/docs/development/display/using-the-drawing-api/drawing-lines-and-curves.html +++ b/docs/development/display/using-the-drawing-api/drawing-lines-and-curves.html @@ -16,13 +16,13 @@ - +

    Drawing lines and curves

    All drawing that you do with a Graphics instance is based on basic drawing with lines and curves. Consequently, all ActionScript drawing must be performed using the same series of steps:

    • Define line and fill styles
    • Set the initial drawing position
    • Draw lines, curves, and shapes (optionally moving the drawing point)
    • If necessary, finish creating a fill

    Defining line and fill styles

    To draw with the graphics property of a Shape, Sprite, or MovieClip instance, you must first define the style (line size and color, fill color) to use when drawing. Just like when you use the drawing tools in Adobe® Flash® Professional or another drawing application, when you’re using ActionScript to draw you can draw with or without a stroke, and with or without a fill color. You specify the appearance of the stroke using the lineStyle() or lineGradientStyle() method. To create a solid line, use the lineStyle() method. When calling this method, the most common values you’ll specify are the first three parameters: line thickness, color, and alpha. For example, this line of code tells the Shape named myShape to draw lines that are 2 pixels thick, red (0x990000), and 75% opaque:

    myShape.graphics.lineStyle( 2, 0x990000, .75 );

    The default value for the alpha parameter is 1.0 (100%), so you can leave that parameter off if you want a completely opaque line. The lineStyle() method also accepts two additional parameters for pixel hinting and scale mode; for more information about using those parameters see the description of the Graphics.lineStyle() method in the ActionScript 3.0 Reference for the Adobe Flash Platform .

    To create a gradient line, use the lineGradientStyle() method. This method is described in Creating gradient lines and fills.

    If you want to create a filled shape, you call the beginFill() , beginGradientFill() , beginBitmapFill() , or beginShaderFill() methods before starting the drawing. The most basic of these, the beginFill() method, accepts two parameters: the fill color, and (optionally) an alpha value for the fill color. For example, if you want to draw a shape with a solid green fill, you would use the following code (assuming you’re drawing on an object named myShape ):

    myShape.graphics.beginFill(0x00FF00);

    Calling any fill method implicitly ends any previous fill before starting a new one. Calling any method that specifies a stroke style replaces the previous stroke, but does not alter a previously specified fill, and vice versa.

    Once you have specified the line style and fill properties, the next step is to indicate the starting point for your drawing. The Graphics instance has a drawing point, like the tip of a pen on a piece of paper. Wherever the drawing point is located, that is where the next drawing action will begin. Initially a Graphics object begins with its drawing point at the point 0, 0 in the coordinate space of the object on which it’s drawing. To start the drawing at a different point, you can first call the moveTo() method before calling one of the drawing methods. This is analogous to lifting the pen tip off of the paper and moving it to a new position.

    With the drawing point in place you draw using a series of calls to the drawing methods lineTo() (for drawing straight lines) and curveTo() (for drawing curved lines).

    note

    While you are drawing, you can call the moveTo() method at any time to move the drawing point to a new position without drawing.

    While drawing, if you have specified a fill color, you can close off the fill by calling the endFill() method. If you have not drawn a closed shape (in other words, if at the time you call endFill() the drawing point is not at the starting point of the shape), when you call the endFill() method the Flash runtime automatically closes the shape by drawing a straight line from the current drawing point to the location specified in the most recent moveTo() call. If you have started a fill and not called endFill() , calling beginFill() (or one of the other fill methods) closes the current fill and starts the new one.

    Drawing straight lines

    When you call the lineTo() method, the Graphics object draws a straight line from the current drawing point to the coordinates you specify as the two parameters in the method call, drawing with the line style you have specified. For example, this line of code puts the drawing point at the point 100, 100 then draws a line to the point 200, 200:

    myShape.graphics.moveTo(100, 100);
    myShape.graphics.lineTo(200, 200);

    The following example draws red and green triangles with a height of 100 pixels:

    var triangleHeight:uint = 100;
    var triangle:Shape = new Shape();

    // red triangle, starting at point 0, 0
    triangle.graphics.beginFill(0xFF0000);
    triangle.graphics.moveTo(triangleHeight / 2, 0);
    triangle.graphics.lineTo(triangleHeight, triangleHeight);
    triangle.graphics.lineTo(0, triangleHeight);
    triangle.graphics.lineTo(triangleHeight / 2, 0);

    // green triangle, starting at point 200, 0
    triangle.graphics.beginFill(0x00FF00);
    triangle.graphics.moveTo(200 + triangleHeight / 2, 0);
    triangle.graphics.lineTo(200 + triangleHeight, triangleHeight);
    triangle.graphics.lineTo(200, triangleHeight);
    triangle.graphics.lineTo(200 + triangleHeight / 2, 0);

    this.addChild(triangle);

    Drawing curves

    The curveTo() method draws a quadratic Bézier curve. This draws an arc that connects two points (called anchor points) while bending toward a third point (called the control point). The Graphics object uses the current drawing position as the first anchor point. When you call the curveTo() method, you pass four parameters: the x and y coordinates of the control point, followed by the x and y coordinates of the second anchor point. For example, the following code draws a curve starting at point 100, 100 and ending at point 200, 200. Because the control point is at point 175, 125, this creates a curve that moves to the right and then downward:

    myShape.graphics.moveTo(100, 100);
    myShape.graphics.curveTo(175, 125, 200, 200);

    The following example draws red and green circular objects with a width and height of 100 pixels. Note that due to the nature of the quadratic Bézier equation, these are not perfect circles:

    var size:uint = 100;
    var roundObject:Shape = new Shape();

    // red circular shape
    roundObject.graphics.beginFill(0xFF0000);
    roundObject.graphics.moveTo(size / 2, 0);
    roundObject.graphics.curveTo(size, 0, size, size / 2);
    roundObject.graphics.curveTo(size, size, size / 2, size);
    roundObject.graphics.curveTo(0, size, 0, size / 2);
    roundObject.graphics.curveTo(0, 0, size / 2, 0);

    // green circular shape
    roundObject.graphics.beginFill(0x00FF00);
    roundObject.graphics.moveTo(200 + size / 2, 0);
    roundObject.graphics.curveTo(200 + size, 0, 200 + size, size / 2);
    roundObject.graphics.curveTo(200 + size, size, 200 + size / 2, size);
    roundObject.graphics.curveTo(200, size, 200, size / 2);
    roundObject.graphics.curveTo(200, 0, 200 + size / 2, 0);

    this.addChild(roundObject);
    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/drawing-paths.html b/docs/development/display/using-the-drawing-api/drawing-paths.html index e3fac713d..e96ddb10d 100644 --- a/docs/development/display/using-the-drawing-api/drawing-paths.html +++ b/docs/development/display/using-the-drawing-api/drawing-paths.html @@ -16,7 +16,7 @@ - + @@ -42,7 +42,7 @@ numbers where each group of two numbers represents an x/y coordinate pair.

    The Graphics.drawPath() method matches each command with its respective point values (a collection of two or four numbers) to generate a path in the Graphics object:

    package
    {
    import flash.display.*;

    public class DrawPathExample extends Sprite
    {
    public function DrawPathExample(){

    var squareCommands:Vector.<int> = new Vector.<int>(5, true);
    squareCommands[0] = GraphicsPathCommand.MOVE_TO;
    squareCommands[1] = GraphicsPathCommand.LINE_TO;
    squareCommands[2] = GraphicsPathCommand.LINE_TO;
    squareCommands[3] = GraphicsPathCommand.LINE_TO;
    squareCommands[4] = GraphicsPathCommand.LINE_TO;

    var squareCoord:Vector.<Number> = new Vector.<Number>(10, true);
    squareCoord[0] = 20; //x
    squareCoord[1] = 10; //y
    squareCoord[2] = 50;
    squareCoord[3] = 10;
    squareCoord[4] = 50;
    squareCoord[5] = 40;
    squareCoord[6] = 20;
    squareCoord[7] = 40;
    squareCoord[8] = 20;
    squareCoord[9] = 10;

    graphics.beginFill(0x442266);//set the color
    graphics.drawPath(squareCommands, squareCoord);
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/drawing-shapes-using-built-in-methods.html b/docs/development/display/using-the-drawing-api/drawing-shapes-using-built-in-methods.html index 11d6269b5..ae71fcc94 100644 --- a/docs/development/display/using-the-drawing-api/drawing-shapes-using-built-in-methods.html +++ b/docs/development/display/using-the-drawing-api/drawing-shapes-using-built-in-methods.html @@ -16,13 +16,13 @@ - +

    Drawing shapes using built-in methods

    For convenience when drawing common shapes such as circles, ellipses, rectangles, and rectangles with rounded corners, ActionScript 3.0 has methods that draw these common shapes for you. These are the drawCircle() , drawEllipse() , drawRect() , and drawRoundRect() methods of the Graphics class. These methods may be used in place of the lineTo() and curveTo() methods. Note, however, that you must still specify line and fill styles before calling these methods.

    The following example recreates the example of drawing red, green, and blue squares with width and height of 100 pixels. This code uses the drawRect() method, and additionally specifies that the fill color has an alpha of 50% (0.5):

    var squareSize:uint = 100;
    var square:Shape = new Shape();
    square.graphics.beginFill(0xFF0000, 0.5);
    square.graphics.drawRect(0, 0, squareSize, squareSize);
    square.graphics.beginFill(0x00FF00, 0.5);
    square.graphics.drawRect(200, 0, squareSize, squareSize);
    square.graphics.beginFill(0x0000FF, 0.5);
    square.graphics.drawRect(400, 0, squareSize, squareSize);
    square.graphics.endFill();
    this.addChild(square);

    In a Sprite or MovieClip object, the drawing content created with the graphics property always appears behind all child display objects that are contained by the object. Also, the graphics property content is not a separate display object so it does not appear in the list of a Sprite or MovieClip object’s children. For example, the following Sprite object has a circle drawn with its graphics property, and it has a TextField object in its list of child display objects:

    var mySprite:Sprite = new Sprite();
    mySprite.graphics.beginFill(0xFFCC00);
    mySprite.graphics.drawCircle(30, 30, 30);
    var label:TextField = new TextField();
    label.width = 200;
    label.text = "They call me mellow yellow...";
    label.x = 20;
    label.y = 20;
    mySprite.addChild(label);
    this.addChild(mySprite);

    Note that the TextField appears on top of the circle drawn with the graphics object.

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/the-graphics-class.html b/docs/development/display/using-the-drawing-api/the-graphics-class.html index 776529775..b542c14be 100644 --- a/docs/development/display/using-the-drawing-api/the-graphics-class.html +++ b/docs/development/display/using-the-drawing-api/the-graphics-class.html @@ -16,13 +16,13 @@ - +

    The Graphics class

    Each Shape, Sprite, and MovieClip object has a graphics property, which is an instance of the Graphics class. The Graphics class includes properties and methods for drawing lines, fills, and shapes. If you want a display object to use solely as a canvas for drawing content, you can use a Shape instance. A Shape instance will perform better than other display objects for drawing, because it doesn’t have the overhead of the additional functionality in the Sprite and MovieClip classes. If you want a display object on which you can draw graphical content and also want that object to contain other display objects, you can use a Sprite instance. For more information on determining which display object to use for various tasks, see Choosing a DisplayObject subclass .

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/using-graphics-data-classes.html b/docs/development/display/using-the-drawing-api/using-graphics-data-classes.html index c66d7580b..c3796fc26 100644 --- a/docs/development/display/using-the-drawing-api/using-graphics-data-classes.html +++ b/docs/development/display/using-the-drawing-api/using-graphics-data-classes.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@ readGraphicsData() entry in the ActionScript 3.0 Language Reference.

    - + \ No newline at end of file diff --git a/docs/development/display/using-the-drawing-api/using-the-math-class-with-drawing-methods.html b/docs/development/display/using-the-drawing-api/using-the-math-class-with-drawing-methods.html index 670d75b93..b67b74d4f 100644 --- a/docs/development/display/using-the-drawing-api/using-the-math-class-with-drawing-methods.html +++ b/docs/development/display/using-the-drawing-api/using-the-math-class-with-drawing-methods.html @@ -16,13 +16,13 @@ - +

    Using the Math class with drawing methods

    A Graphics object draws circles and squares, but can also draw more complex forms, particularly when the drawing methods are used in combination with the properties and methods of the Math class. The Math class contains constants of common mathematical interest, such as Math.PI (approximately 3.14159265...), a constant for the ratio of the circumference of a circle to its diameter. It also contains methods for trigonometry functions, including Math.sin() , Math.cos() , and Math.tan() among others. Drawing shapes using these methods and constants create more dynamic visual effects, particularly when used with repetition or recursion.

    Many methods of the Math class expect circular measurements in units of radians rather than degrees. Converting between these two types of units is a common use of the Math class:

    var degrees = 121;
    var radians = degrees * Math.PI / 180;
    trace(radians) // 2.111848394913139

    The following example creates a sine wave and a cosine wave, to highlight the difference between the Math.sin() and Math.cos() methods for a given value.

    var sinWavePosition = 100;
    var cosWavePosition = 200;
    var sinWaveColor:uint = 0xFF0000;
    var cosWaveColor:uint = 0x00FF00;
    var waveMultiplier:Number = 10;
    var waveStretcher:Number = 5;

    var i:uint;
    for(i = 1; i < stage.stageWidth; i++)
    {
    var sinPosY:Number = Math.sin(i / waveStretcher) * waveMultiplier;
    var cosPosY:Number = Math.cos(i / waveStretcher) * waveMultiplier;

    graphics.beginFill(sinWaveColor);
    graphics.drawRect(i, sinWavePosition + sinPosY, 2, 2);
    graphics.beginFill(cosWaveColor);
    graphics.drawRect(i, cosWavePosition + cosPosY, 2, 2);
    }
    - + \ No newline at end of file diff --git a/docs/development/display/working-in-three-dimensions.html b/docs/development/display/working-in-three-dimensions.html index 8728ab091..296333616 100644 --- a/docs/development/display/working-in-three-dimensions.html +++ b/docs/development/display/working-in-three-dimensions.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ several commercial and open source frameworks already available.

    For more information about developing 3D applications using Stage3D and about available 3D frameworks, visit the Flash Player Developer Center: Stage 3D.

    Adobe recommends

    How Stage3D works

    Marco Scabia: iFlash3D.com

    What is AGAL

    Marco Scabia: iFlash3D.com

    Vertex and fragment shaders

    Marco Scabia: iFlash3D.com

    Handling scenarios with Stage3D

    Thibault Imbert

    Working with the Proscenium framework

    Adobe

    - + \ No newline at end of file diff --git a/docs/development/display/working-in-three-dimensions/basics-of-3d-objects.html b/docs/development/display/working-in-three-dimensions/basics-of-3d-objects.html index 3dc8b5b80..897f1decc 100644 --- a/docs/development/display/working-in-three-dimensions/basics-of-3d-objects.html +++ b/docs/development/display/working-in-three-dimensions/basics-of-3d-objects.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ toward, or away from, the current point of view.

    Culling
    Rendering, or not, surfaces with specific winding. Using culling you can hide surfaces that are not visible to the current point of view.

    - + \ No newline at end of file diff --git a/docs/development/display/working-in-three-dimensions/creating-and-moving-3d-display-objects.html b/docs/development/display/working-in-three-dimensions/creating-and-moving-3d-display-objects.html index f95fe1840..76d5a9d9b 100644 --- a/docs/development/display/working-in-three-dimensions/creating-and-moving-3d-display-objects.html +++ b/docs/development/display/working-in-three-dimensions/creating-and-moving-3d-display-objects.html @@ -16,7 +16,7 @@ - + @@ -44,7 +44,7 @@ squares:

    container.rotationY += 10;

    The next figure shows what happens when you set the rotationX property of the container for the squares. This rotates the squares on the x- axis.

    The next figure shows what happens when you increment the rotationZ property of the container of the squares.This rotates the squares on the z-axis.

    A display object can simultaneously move and rotate in 3D space.

    - + \ No newline at end of file diff --git a/docs/development/display/working-in-three-dimensions/example-perspective-projection.html b/docs/development/display/working-in-three-dimensions/example-perspective-projection.html index d89ac1a7b..2475038b9 100644 --- a/docs/development/display/working-in-three-dimensions/example-perspective-projection.html +++ b/docs/development/display/working-in-three-dimensions/example-perspective-projection.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ FlashPlatformAS3DevGuideExamples.zip. The ProjectionDragger application files are in the Samples/ProjectionDragger folder.

    package
    {
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.geom.Point;
    import flash.events.*;
    public class ProjectionDragger extends Sprite
    {
    private var center : Sprite;
    private var boxPanel:Shape;
    private var inDrag:Boolean = false;

    public function ProjectionDragger():void
    {
    createBoxes();
    createCenter();
    }
    public function createCenter():void
    {
    var centerRadius:int = 20;

    center = new Sprite();

    // circle
    center.graphics.lineStyle(1, 0x000099);
    center.graphics.beginFill(0xCCCCCC, 0.5);
    center.graphics.drawCircle(0, 0, centerRadius);
    center.graphics.endFill();
    // cross hairs
    center.graphics.moveTo(0, centerRadius);
    center.graphics.lineTo(0, -centerRadius);
    center.graphics.moveTo(centerRadius, 0);
    center.graphics.lineTo(-centerRadius, 0);
    center.x = 175;
    center.y = 175;
    center.z = 0;
    this.addChild(center);

    center.addEventListener(MouseEvent.MOUSE_DOWN, startDragProjectionCenter);
    center.addEventListener(MouseEvent.MOUSE_UP, stopDragProjectionCenter);
    center.addEventListener( MouseEvent.MOUSE_MOVE, doDragProjectionCenter);
    root.transform.perspectiveProjection.projectionCenter = new Point(center.x, center.y);
    }
    public function createBoxes():void
    {
    // createBoxPanel();
    var boxWidth:int = 50;
    var boxHeight:int = 50;
    var numLayers:int = 12;
    var depthPerLayer:int = 50;

    // var boxVec:Vector.<Shape> = new Vector.<Shape>(numLayers);
    for (var i:int = 0; i < numLayers; i++)
    {
    this.addChild(createBox(150, 50, (numLayers - i) * depthPerLayer, boxWidth, boxHeight, 0xCCCCFF));
    this.addChild(createBox(50, 150, (numLayers - i) * depthPerLayer, boxWidth, boxHeight, 0xFFCCCC));
    this.addChild(createBox(250, 150, (numLayers - i) * depthPerLayer, boxWidth, boxHeight, 0xCCFFCC));
    this.addChild(createBox(150, 250, (numLayers - i) * depthPerLayer, boxWidth, boxHeight, 0xDDDDDD));
    }
    }

    public function createBox(xPos:int = 0, yPos:int = 0, zPos:int = 100, w:int = 50, h:int = 50, color:int = 0xDDDDDD):Shape
    {
    var box:Shape = new Shape();
    box.graphics.lineStyle(2, 0x666666);
    box.graphics.beginFill(color, 1.0);
    box.graphics.drawRect(0, 0, w, h);
    box.graphics.endFill();
    box.x = xPos;
    box.y = yPos;
    box.z = zPos;
    return box;
    }
    public function startDragProjectionCenter(e:Event)
    {
    center.startDrag();
    inDrag = true;
    }

    public function doDragProjectionCenter(e:Event)
    {
    if (inDrag)
    {
    root.transform.perspectiveProjection.projectionCenter = new Point(center.x, center.y);
    }
    }

    public function stopDragProjectionCenter(e:Event)
    {
    center.stopDrag();
    root.transform.perspectiveProjection.projectionCenter = new Point(center.x, center.y);
    inDrag = false;
    }
    }
    }

    For more complex perspective projection, use the Matrix3D class.

    - + \ No newline at end of file diff --git a/docs/development/display/working-in-three-dimensions/performing-complex-3d-transformations.html b/docs/development/display/working-in-three-dimensions/performing-complex-3d-transformations.html index b57b8cf1c..8945a1c3c 100644 --- a/docs/development/display/working-in-three-dimensions/performing-complex-3d-transformations.html +++ b/docs/development/display/working-in-three-dimensions/performing-complex-3d-transformations.html @@ -16,7 +16,7 @@ - + @@ -70,7 +70,7 @@ reorders the faces of the box after rotations have been applied to the it:

    public var faces:Array; . . .

    public function ReorderChildren()
    {
    for(var ind:uint = 0; ind < 6; ind++)
    {
    faces[ind].z = faces[ind].child.transform.getRelativeMatrix3D(root).position.z;
    this.removeChild(faces[ind].child);
    }
    faces.sortOn("z", Array.NUMERIC | Array.DESCENDING);
    for (ind = 0; ind < 6; ind++)
    {
    this.addChild(faces[ind].child);
    }
    }

    To get the application files for this sample, see FlashPlatformAS3DevGuideExamples.zip. The application files are in the Samples/ReorderByZ folder.

    - + \ No newline at end of file diff --git a/docs/development/display/working-in-three-dimensions/projecting-3d-objects-onto-a-2d-view.html b/docs/development/display/working-in-three-dimensions/projecting-3d-objects-onto-a-2d-view.html index cd6bef3e0..e92ced4c1 100644 --- a/docs/development/display/working-in-three-dimensions/projecting-3d-objects-onto-a-2d-view.html +++ b/docs/development/display/working-in-three-dimensions/projecting-3d-objects-onto-a-2d-view.html @@ -16,7 +16,7 @@ - + @@ -60,7 +60,7 @@ modifying the projectionCenter and fieldOfView yourself. In this case, the default values of the newly created object are the following, based on a default stage size of 500 by 500:

    • fieldOfView: 55

    • perspectiveCenter: 250,250

    • focalLength: 480.24554443359375

    - + \ No newline at end of file diff --git a/docs/development/display/working-in-three-dimensions/understanding-3d-display-objects-in-flash-player-and-the-air-runtime.html b/docs/development/display/working-in-three-dimensions/understanding-3d-display-objects-in-flash-player-and-the-air-runtime.html index 0ec475b1a..662f44e1a 100644 --- a/docs/development/display/working-in-three-dimensions/understanding-3d-display-objects-in-flash-player-and-the-air-runtime.html +++ b/docs/development/display/working-in-three-dimensions/understanding-3d-display-objects-in-flash-player-and-the-air-runtime.html @@ -16,7 +16,7 @@ - + @@ -66,7 +66,7 @@ Examples of this approach include loading 3D model data from a file and rendering the model on the screen, or generating and drawing 3D terrain as triangle meshes.

    - + \ No newline at end of file diff --git a/docs/development/display/working-in-three-dimensions/using-triangles-for-3d-effects.html b/docs/development/display/working-in-three-dimensions/using-triangles-for-3d-effects.html index aeffaa029..6afef4e0f 100644 --- a/docs/development/display/working-in-three-dimensions/using-triangles-for-3d-effects.html +++ b/docs/development/display/working-in-three-dimensions/using-triangles-for-3d-effects.html @@ -16,7 +16,7 @@ - + @@ -114,7 +114,7 @@ path direction is reversed.

    To see how culling works, start with the earlier example from UV mapping, set the culling parameter of the drawTriangles() method to TriangleCulling.NEGATIVE:

    container.graphics.drawTriangles(vertices, indices, uvtData, TriangleCulling.NEGATIVE);

    Notice the "back" side of the image is not rendered as the object rotates.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps.html b/docs/development/display/working-with-bitmaps.html index 5e0196882..be03cf315 100644 --- a/docs/development/display/working-with-bitmaps.html +++ b/docs/development/display/working-with-bitmaps.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ flash.display.BitmapData class

    Adobe Recommends

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/asynchronous-decoding-of-bitmap-images.html b/docs/development/display/working-with-bitmaps/asynchronous-decoding-of-bitmap-images.html index f63a14654..62780ab39 100644 --- a/docs/development/display/working-with-bitmaps/asynchronous-decoding-of-bitmap-images.html +++ b/docs/development/display/working-with-bitmaps/asynchronous-decoding-of-bitmap-images.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ passed.

    The following example shows the difference in decoding a bitmap image synchronously and asynchronously:

    package
    {
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.system.ImageDecodingPolicy;
    import flash.system.LoaderContext;

    public class AsyncTest extends Sprite
    {
    private var loaderContext:LoaderContext;
    private var loader:Loader;
    private var urlRequest:URLRequest;
    public function AsyncTest()
    {
    //Load the image synchronously
    loaderContext = new LoaderContext();
    //Default behavior.
    loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_DEMAND;
    loader = new Loader();
    loadImageSync();

    //Load the image asynchronously
    loaderContext = new LoaderContext();
    loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD;
    loader = new Loader();
    loadImageASync();
    }

    private function loadImageASync():void{
    trace("Loading image asynchronously...");
    urlRequest = new URLRequest("https://www.adobe.com/myimage.png");
    urlRequest.useCache = false;
    loader.load(urlRequest, loaderContext);
    loader.contentLoaderInfo.addEventListener
    (Event.COMPLETE, onAsyncLoadComplete);
    }

    private function onAsyncLoadComplete(event:Event):void{
    trace("Async. Image Load Complete");
    }

    private function loadImageSync():void{
    trace("Loading image synchronously...");
    urlRequest = new URLRequest("https://www.adobe.com/myimage.png");
    urlRequest.useCache = false;
    loader.load(urlRequest, loaderContext);
    loader.contentLoaderInfo.addEventListener
    (Event.COMPLETE, onSyncLoadComplete);
    }

    private function onSyncLoadComplete(event:Event):void{
    trace("Sync. Image Load Complete");
    }
    }
    }

    For a demonstration of the effect of the different decoding policies, see Thibault Imbert: Asynchronous bitmap decoding in the Adobe Flash runtimes

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/basics-of-working-with-bitmaps.html b/docs/development/display/working-with-bitmaps/basics-of-working-with-bitmaps.html index 574e10459..147385440 100644 --- a/docs/development/display/working-with-bitmaps/basics-of-working-with-bitmaps.html +++ b/docs/development/display/working-with-bitmaps/basics-of-working-with-bitmaps.html @@ -16,7 +16,7 @@ - + @@ -97,7 +97,7 @@ and height in number of pixels.

    RGB color
    A color scheme where each pixel's color is represented as a mixture of red, green, and blue color values.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/bitmap-example-animated-spinning-moon.html b/docs/development/display/working-with-bitmaps/bitmap-example-animated-spinning-moon.html index 417b9a702..afe3b3a43 100644 --- a/docs/development/display/working-with-bitmaps/bitmap-example-animated-spinning-moon.html +++ b/docs/development/display/working-with-bitmaps/bitmap-example-animated-spinning-moon.html @@ -16,7 +16,7 @@ - + @@ -255,7 +255,7 @@ shown in this code:

    rgb = (red << 16 | green << 8 | blue);

    Finally, with the color value calculated, that value is actually assigned to the current pixel using the setPixel() method of the result BitmapData object, shown here:

    result.setPixel(i, j, rgb);
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/compressing-bitmap-data.html b/docs/development/display/working-with-bitmaps/compressing-bitmap-data.html index f200e52ec..d41a86377 100644 --- a/docs/development/display/working-with-bitmaps/compressing-bitmap-data.html +++ b/docs/development/display/working-with-bitmaps/compressing-bitmap-data.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ BitmapData.encode() method.

    You can use this feature for image processing as part of a server upload or download workflow.

    The following example snippet compresses a BitmapData object using JPEGEncoderOptions:

    // Compress a BitmapData object as a JPEG file.
    var bitmapData:BitmapData = new BitmapData(640,480,false,0x00FF00);
    var byteArray:ByteArray = new ByteArray();
    bitmapData.encode(new Rectangle(0,0,640,480), new flash.display.JPEGEncoderOptions(), byteArray);
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/copying-bitmap-data.html b/docs/development/display/working-with-bitmaps/copying-bitmap-data.html index 7cfb32396..6411fa7c1 100644 --- a/docs/development/display/working-with-bitmaps/copying-bitmap-data.html +++ b/docs/development/display/working-with-bitmaps/copying-bitmap-data.html @@ -16,7 +16,7 @@ - + @@ -48,7 +48,7 @@ new bitmap, then you need to copy the value of the transform property from the original object to the transform property of the Bitmap object that uses the new BitmapData object.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/making-textures-with-noise-functions.html b/docs/development/display/working-with-bitmaps/making-textures-with-noise-functions.html index 1ebdb7a64..a4b1ee3ee 100644 --- a/docs/development/display/working-with-bitmaps/making-textures-with-noise-functions.html +++ b/docs/development/display/working-with-bitmaps/making-textures-with-noise-functions.html @@ -16,7 +16,7 @@ - + @@ -70,7 +70,7 @@ layers of the image. Each point in the offset array affects a specific octave noise function. The default value is null.

    The following example creates a 150 x 150 pixel BitmapData object that calls the perlinNoise() method to generate a green and blue cloud effect:

    package
    {
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BitmapDataChannel;

    public class BitmapNoise2 extends Sprite
    {
    public function BitmapNoise2()
    {
    var myBitmapDataObject:BitmapData =
    new BitmapData(150, 150, false, 0x00FF0000);

    var seed:Number = Math.floor(Math.random() * 100);
    var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE
    myBitmapDataObject.perlinNoise(100, 80, 6, seed, false, true, channels, false, null);

    var myBitmap:Bitmap = new Bitmap(myBitmapDataObject);
    addChild(myBitmap);
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/manipulating-pixels.html b/docs/development/display/working-with-bitmaps/manipulating-pixels.html index 4c283f2e7..7ab8a6772 100644 --- a/docs/development/display/working-with-bitmaps/manipulating-pixels.html +++ b/docs/development/display/working-with-bitmaps/manipulating-pixels.html @@ -16,7 +16,7 @@ - + @@ -68,7 +68,7 @@ addition to this, ActionScript uses the alpha threshold parameters to determine at what point the pixels change from being transparent to opaque.

    The following example creates three bitmap images and checks for pixel collision using two different collision points (one returns false, the other true):

    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.geom.Point;

    var bmd1:BitmapData = new BitmapData(100, 100, false, 0x000000FF);
    var bmd2:BitmapData = new BitmapData(20, 20, false, 0x00FF3300);

    var bm1:Bitmap = new Bitmap(bmd1);
    this.addChild(bm1);

    // Create a red square.
    var redSquare1:Bitmap = new Bitmap(bmd2);
    this.addChild(redSquare1);
    redSquare1.x = 0;

    // Create a second red square.
    var redSquare2:Bitmap = new Bitmap(bmd2);
    this.addChild(redSquare2);
    redSquare2.x = 150;
    redSquare2.y = 150;

    // Define the point at the top-left corner of the bitmap.
    var pt1:Point = new Point(0, 0);
    // Define the point at the center of redSquare1.
    var pt2:Point = new Point(20, 20);
    // Define the point at the center of redSquare2.
    var pt3:Point = new Point(160, 160);

    trace(bmd1.hitTest(pt1, 0xFF, pt2)); // true
    trace(bmd1.hitTest(pt1, 0xFF, pt3)); // false
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/scrolling-bitmaps.html b/docs/development/display/working-with-bitmaps/scrolling-bitmaps.html index 8006c3b89..494063a1d 100644 --- a/docs/development/display/working-with-bitmaps/scrolling-bitmaps.html +++ b/docs/development/display/working-with-bitmaps/scrolling-bitmaps.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ that offsets the image by one pixel in a diagonally downward direction. This method is called each time the frame is entered and as a result, the off screen portions of the image are rendered to the Stage as the image scrolls down.

    import flash.display.Bitmap;
    import flash.display.BitmapData;

    var myBitmapDataObject:BitmapData = new BitmapData(1000, 1000, false, 0x00FF0000);
    var seed:Number = Math.floor(Math.random() * 100);
    var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE;
    myBitmapDataObject.perlinNoise(100, 80, 6, seed, false, true, channels, false, null);

    var myBitmap:Bitmap = new Bitmap(myBitmapDataObject);
    myBitmap.x = -750;
    myBitmap.y = -750;
    addChild(myBitmap);

    addEventListener(Event.ENTER_FRAME, scrollBitmap);

    function scrollBitmap(event:Event):void
    {
    myBitmapDataObject.scroll(1, 1);
    }
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/taking-advantage-of-mipmapping.html b/docs/development/display/working-with-bitmaps/taking-advantage-of-mipmapping.html index 5ee4470cd..ceaf68f6b 100644 --- a/docs/development/display/working-with-bitmaps/taking-advantage-of-mipmapping.html +++ b/docs/development/display/working-with-bitmaps/taking-advantage-of-mipmapping.html @@ -16,7 +16,7 @@ - + @@ -61,7 +61,7 @@ would then be at 512 x 512, 256 x 256, 128 x 128 down to 1 x 1 pixels for a total of 11 images in the MIP map.

    Note that mipmapping does not occur for bitmap content with an odd width or height.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-bitmaps/the-bitmap-and-bitmap-data-classes.html b/docs/development/display/working-with-bitmaps/the-bitmap-and-bitmap-data-classes.html index ccac05f37..6ccc3ebff 100644 --- a/docs/development/display/working-with-bitmaps/the-bitmap-and-bitmap-data-classes.html +++ b/docs/development/display/working-with-bitmaps/the-bitmap-and-bitmap-data-classes.html @@ -16,7 +16,7 @@ - + @@ -62,7 +62,7 @@ Bitmap instance. For more information on working with the display list, see Adding display objects to the display list.

    The following example creates a BitmapData object with a red fill, and displays it in a Bitmap instance:

    var myBitmapDataObject:BitmapData = new BitmapData(150, 150, false, 0xFF0000);
    var myImage:Bitmap = new Bitmap(myBitmapDataObject);
    addChild(myImage);
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-geometry.html b/docs/development/display/working-with-geometry.html index 357f8ab7e..1be3d8ced 100644 --- a/docs/development/display/working-with-geometry.html +++ b/docs/development/display/working-with-geometry.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-geometry/basics-of-geometry.html b/docs/development/display/working-with-geometry/basics-of-geometry.html index 5398e2101..a758eeb8c 100644 --- a/docs/development/display/working-with-geometry/basics-of-geometry.html +++ b/docs/development/display/working-with-geometry/basics-of-geometry.html @@ -16,13 +16,13 @@ - +

    Basics of geometry

    The flash.geom package contains classes that define geometric objects such as points, rectangles, and transformation matrixes. These classes don’t necessarily provide functionality by themselves; however, they are used to define the properties of objects that are used in other classes.

    All the geometry classes are based around the notion that locations on the screen are represented as a two-dimensional plane. The screen is treated like a flat graph with a horizontal (x) axis and a vertical (y) axis. Any location (or point ) on the screen can be represented as a pair of x and y values—the coordinates of that location.

    Every display object, including the Stage, has its own coordinate space . The coordinate space is an object’s own graph for plotting the locations of child display objects, drawings, and so on. The origin is at coordinate location 0, 0 (where the x and y-axes meet), and is placed at the upper-left corner of the display object. While this origin location is always true for the Stage, it is not necessarily true for other display objects. Values on the x-axis get bigger going toward the right, and smaller going toward the left. For locations to the left of the origin, the x coordinate is negative. However, contrary to traditional coordinate systems, Flash runtime coordinate values on the y-axis get bigger going down the screen and smaller going up the screen. Values above the origin have a negative y coordinate value). Since the upper-left corner of the Stage is the origin of its coordinate space, most objects on the Stage have an x coordinate greater than 0 and smaller than the Stage width. And the same object has a y coordinate larger than 0 and smaller than the Stage height.

    You can use Point class instances to represent individual points in a coordinate space. You can create a Rectangle instance to represent a rectangular region in a coordinate space. For advanced users, you can use a Matrix instance to apply multiple or complex transformations to a display object. Many simple transformations, such as rotation, position, and scale changes, can be applied directly to a display object using that object’s properties. For more information on applying transformations using display object properties, see Manipulating display objects .

    Important concepts and terms

    The following reference list contains important geometry terms:

    • Cartesian coordinates Coordinates are commonly written as a pair of number (like 5, 12 or 17, -23). The two numbers are the x coordinate and the y coordinate, respectively.
    • Coordinate space The graph of coordinates contained in a display object, on which its child elements are positioned.
    • Origin The point in a coordinate space where the x-axis meets the y-axis. This point has the coordinate 0, 0.
    • Point A single location in a coordinate space. In the 2-d coordinate system used in ActionScript, the location along the x-axis and the y-axis (the point’s coordinates) define the point.
    • Registration point In a display object, the origin (0, 0 coordinate) of its coordinate space.
    • Scale The size of an object relative to its original size. When used as a verb, to scale an object means to change its size by stretching or shrinking the object.
    • Translate To change a point’s coordinates from one coordinate space to another.
    • Transformation An adjustment to a visual characteristic of a graphic, such as rotating the object, altering its scale, skewing or distorting its shape, or altering its color.
    • X-axis The horizontal axis in the 2-d coordinate system used in ActionScript.
    • Y-axis The vertical axis in the 2-d coordinate system used in ActionScript.
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-geometry/geometry-example-applying-a-matrix-transformation-to-a-display-object.html b/docs/development/display/working-with-geometry/geometry-example-applying-a-matrix-transformation-to-a-display-object.html index 5509ad546..04f44e7e9 100644 --- a/docs/development/display/working-with-geometry/geometry-example-applying-a-matrix-transformation-to-a-display-object.html +++ b/docs/development/display/working-with-geometry/geometry-example-applying-a-matrix-transformation-to-a-display-object.html @@ -16,7 +16,7 @@ - + @@ -47,7 +47,7 @@ property of the transform property of the display object, to the Matrix.transform() method, as follows:

    tempMatrix = MatrixTransformer.transform(tempMatrix,
    xScaleSlider.value,
    yScaleSlider.value,
    dxSlider.value,
    dySlider.value,
    rotationSlider.value,
    skewSlider.value,
    skewSide);

    The application then applies the return value to the matrix property of the transform property of the display object, triggering the transformation:

    img.content.transform.matrix = tempMatrix;
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-geometry/using-matrix-objects.html b/docs/development/display/working-with-geometry/using-matrix-objects.html index 11cc23e4e..200af316f 100644 --- a/docs/development/display/working-with-geometry/using-matrix-objects.html +++ b/docs/development/display/working-with-geometry/using-matrix-objects.html @@ -16,13 +16,13 @@ - +

    Using Matrix objects

    The Matrix class represents a transformation matrix that determines how to map points from one coordinate space to another. You can perform various graphical transformations on a display object by setting the properties of a Matrix object, applying that Matrix object to the matrix property of a Transform object, and then applying that Transform object as the transform property of the display object. These transformation functions include translation ( x and y repositioning), rotation, scaling, and skewing.

    Although you could define a matrix by directly adjusting the properties ( a , b , c , d , tx , ty ) of a Matrix object, it is easier to use the createBox() method. This method includes parameters that let you directly define the scaling, rotation, and translation effects of the resulting matrix. For example, the following code creates a Matrix object that scales an object horizontally by 2.0, scales it vertically by 3.0, rotates it by 45°, moving (translating) it 10 pixels to the right, and moving it 20 pixels down:

    var matrix:Matrix = new Matrix();
    var scaleX:Number = 2.0;
    var scaleY:Number = 3.0;
    var rotation:Number = 2 _ Math.PI _ (45 / 360);
    var tx:Number = 10;
    var ty:Number = 20;
    matrix.createBox(scaleX, scaleY, rotation, tx, ty);

    You can also adjust the scaling, rotation, and translation effects of a Matrix object by using the scale() , rotate() , and translate() methods. Note that these methods combine with the values of the existing Matrix object. For example, the following code sets a Matrix object that scales an object by a factor of 4 and rotates it 60°, since the scale() and rotate() methods are called twice:

    var matrix:Matrix = new Matrix();
    var rotation:Number = 2 _ Math.PI _ (30 / 360); // 30°
    var scaleFactor:Number = 2;
    matrix.scale(scaleFactor, scaleFactor);
    matrix.rotate(rotation);
    matrix.scale(scaleX, scaleY);
    matrix.rotate(rotation);

    myDisplayObject.transform.matrix = matrix;

    To apply a skew transformation to a Matrix object, adjust its b or c property. Adjusting the b property skews the matrix vertically, and adjusting the c property skews the matrix horizontally. The following code skews the myMatrix Matrix object vertically by a factor of 2:

    var skewMatrix:Matrix = new Matrix();
    skewMatrix.b = Math.tan(2);
    myMatrix.concat(skewMatrix);

    You can apply a Matrix transformation to the transform property of a display object. For example, the following code applies a matrix transformation to a display object named myDisplayObject :

    var matrix:Matrix = myDisplayObject.transform.matrix;
    var scaleFactor:Number = 2;
    var rotation:Number = 2 _ Math.PI _ (60 / 360); // 60°
    matrix.scale(scaleFactor, scaleFactor);
    matrix.rotate(rotation);

    myDisplayObject.transform.matrix = matrix;

    The first line sets a Matrix object to the existing transformation matrix used by the myDisplayObject display object (the matrix property of the transformation property of the myDisplayObject display object). This way, the Matrix class methods that you call have a cumulative effect on the display object’s existing position, scale, and rotation.

    Note: The ColorTransform class is also included in the flash.geometry package. This class is used to set the colorTransform property of a Transform object. Since it does not apply any geometrical transformation, it is not discussed, in detail, here.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-geometry/using-point-objects.html b/docs/development/display/working-with-geometry/using-point-objects.html index a6bd1c671..a165f9a4f 100644 --- a/docs/development/display/working-with-geometry/using-point-objects.html +++ b/docs/development/display/working-with-geometry/using-point-objects.html @@ -16,13 +16,13 @@ - +

    Using Point objects

    A Point object defines a Cartesian pair of coordinates. It represents location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis.

    To define a Point object, you set its x and y properties, as follows:

    import flash.geom.*;
    var pt1:Point = new Point(10, 20); // x == 10; y == 20
    var pt2:Point = new Point();
    pt2.x = 10;
    pt2.y = 20;

    Finding the distance between two points

    You can use the distance() method of the Point class to find the distance between two points in a coordinate space. For example, the following code finds the distance between the registration points of two display objects, circle1 and circle2 , in the same display object container:

    import flash.geom.*;
    var pt1:Point = new Point(circle1.x, circle1.y);
    var pt2:Point = new Point(circle2.x, circle2.y);
    var distance:Number = Point.distance(pt1, pt2);

    Translating coordinate spaces

    If two display objects are in different display object containers, they can be in different coordinate spaces. You can use the localToGlobal() method of the DisplayObject class to translate the coordinates to the same (global) coordinate space, that of the Stage. For example, the following code finds the distance between the registration points of two display objects, circle1 and circle2 , in the different display object containers:

    import flash.geom.*;
    var pt1:Point = new Point(circle1.x, circle1.y);
    pt1 = circle1.localToGlobal(pt1);
    var pt2:Point = new Point(circle2.x, circle2.y);
    pt2 = circle2.localToGlobal(pt2);
    var distance:Number = Point.distance(pt1, pt2);

    Similarly, to find the distance of the registration point of a display object named target from a specific point on the Stage, use the localToGlobal() method of the DisplayObject class:

    import flash.geom.*;
    var stageCenter:Point = new Point();
    stageCenter.x = this.stage.stageWidth / 2;
    stageCenter.y = this.stage.stageHeight / 2;
    var targetCenter:Point = new Point(target.x, target.y);
    targetCenter = target.localToGlobal(targetCenter);
    var distance:Number = Point.distance(stageCenter, targetCenter);

    Moving a display object by a specified angle and distance

    You can use the polar() method of the Point class to move a display object a specific distance by a specific angle. For example, the following code moves the myDisplayObject object 100 pixels by 60°:

    import flash.geom.*;
    var distance:Number = 100;
    var angle:Number = 2 _ Math.PI \* (90 / 360);
    var translatePoint:Point = Point.polar(distance, angle);
    myDisplayObject.x += translatePoint.x;
    myDisplayObject.y += translatePoint.y;

    Other uses of the Point class

    You can use Point objects with the following methods and properties:

    ClassMethods or propertiesDescription
    DisplayObjectContainerareInaccessibleObjectsUnderPoint() getObjectsUnderPoint()Used to return a list of objects under a point in a display object container.
    BitmapDatahitTest()Used to define the pixel in the BitmapData object as well as the point that you are checking for a hit.
    BitmapDataapplyFilter() copyChannel() merge() paletteMap() pixelDissolve() threshold()Used to define the positions of rectangles that define the operations.
    MatrixdeltaTransformPoint() transformPoint()Used to define points for which you want to apply a transformation.
    RectanglebottomRight size topLeftUsed to define these properties.
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-geometry/using-rectangle-objects.html b/docs/development/display/working-with-geometry/using-rectangle-objects.html index 4310b743f..fa81d4caf 100644 --- a/docs/development/display/working-with-geometry/using-rectangle-objects.html +++ b/docs/development/display/working-with-geometry/using-rectangle-objects.html @@ -16,13 +16,13 @@ - +

    Using Rectangle objects

    A Rectangle object defines a rectangular area. A Rectangle object has a position, defined by the x and y coordinates of its upper-left corner, a width property, and a height property. You can define these properties for a new Rectangle object by calling the Rectangle() constructor function, as follows:

    import flash.geom.Rectangle;
    var rx:Number = 0;
    var ry:Number = 0;
    var rwidth:Number = 100;
    var rheight:Number = 50;
    var rect1:Rectangle = new Rectangle(rx, ry, rwidth, rheight);

    Resizing and repositioning Rectangle objects

    There are a number of ways to resize and reposition Rectangle objects.

    You can directly reposition the Rectangle object by changing its x and y properties. This change has no effect on the width or height of the Rectangle object.

    import flash.geom.Rectangle;
    var x1:Number = 0;
    var y1:Number = 0;
    var width1:Number = 100;
    var height1:Number = 50;
    var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
    trace(rect1) // (x=0, y=0, w=100, h=50)
    rect1.x = 20;
    rect1.y = 30;
    trace(rect1); // (x=20, y=30, w=100, h=50)

    As the following code shows, when you change the left or top property of a Rectangle object, the rectangle is repositioned. The rectangle’s x and y properties match the left and top properties, respectively. However, the position of the lower-left corner of the Rectangle object does not change, so it is resized.

    import flash.geom.Rectangle;
    var x1:Number = 0;
    var y1:Number = 0;
    var width1:Number = 100;
    var height1:Number = 50;
    var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
    trace(rect1) // (x=0, y=0, w=100, h=50)
    rect1.left = 20;
    rect1.top = 30;
    trace(rect1); // (x=20, y=30, w=80, h=20)

    Similarly, as the following example shows, if you change the bottom or right property of a Rectangle object, the position of its upper-left corner does not change. The rectangle is resized accordingly:

    import flash.geom.Rectangle;
    var x1:Number = 0;
    var y1:Number = 0;
    var width1:Number = 100;
    var height1:Number = 50;
    var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
    trace(rect1) // (x=0, y=0, w=100, h=50)
    rect1.right = 60;
    trect1.bottom = 20;
    trace(rect1); // (x=0, y=0, w=60, h=20)

    You can also reposition a Rectangle object by using the offset() method, as follows:

    import flash.geom.Rectangle;
    var x1:Number = 0;
    var y1:Number = 0;
    var width1:Number = 100;
    var height1:Number = 50;
    var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
    trace(rect1) // (x=0, y=0, w=100, h=50)
    rect1.offset(20, 30);
    trace(rect1); // (x=20, y=30, w=100, h=50)

    The offsetPt() method works similarly, except that it takes a Point object as its parameter, rather than x and y offset values.

    You can also resize a Rectangle object by using the inflate() method, which includes two parameters, dx and dy . The dx parameter represents the number of pixels that the left and right sides of the rectangle moves from the center. The dy parameter represents the number of pixels that the top and bottom of the rectangle moves from the center:

    import flash.geom.Rectangle;
    var x1:Number = 0;
    var y1:Number = 0;
    var width1:Number = 100;
    var height1:Number = 50;
    var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
    trace(rect1) // (x=0, y=0, w=100, h=50)
    rect1.inflate(6,4);
    trace(rect1); // (x=-6, y=-4, w=112, h=58)

    The inflatePt() method works similarly, except that it takes a Point object as its parameter, rather than dx and dy values.

    Finding unions and intersections of Rectangle objects

    You use the union() method to find the rectangular region formed by the boundaries of two rectangles:

    import flash.display.*;
    import flash.geom.Rectangle;
    var rect1:Rectangle = new Rectangle(0, 0, 100, 100);
    trace(rect1); // (x=0, y=0, w=100, h=100)
    var rect2:Rectangle = new Rectangle(120, 60, 100, 100);
    trace(rect2); // (x=120, y=60, w=100, h=100)
    trace(rect1.union(rect2)); // (x=0, y=0, w=220, h=160)

    You use the intersection() method to find the rectangular region formed by the overlapping region of two rectangles:

    import flash.display.*;
    import flash.geom.Rectangle;
    var rect1:Rectangle = new Rectangle(0, 0, 100, 100);
    trace(rect1); // (x=0, y=0, w=100, h=100)
    var rect2:Rectangle = new Rectangle(80, 60, 100, 100);
    trace(rect2); // (x=120, y=60, w=100, h=100)
    trace(rect1.intersection(rect2)); // (x=80, y=60, w=20, h=40)

    You use the intersects() method to find out whether two rectangles intersect. You can also use the intersects() method to find out whether a display object is in a certain region of the Stage. For the following code example, assume the coordinate space of the display object container that contains the circle object is the same as that of the Stage. The example shows how to use the intersects() method to determine if a display object, circle , intersects specified regions of the Stage, defined by the target1 and target2 Rectangle objects:

    import flash.display.*;
    import flash.geom.Rectangle;
    var circle:Shape = new Shape();
    circle.graphics.lineStyle(2, 0xFF0000);
    circle.graphics.drawCircle(250, 250, 100);
    addChild(circle);
    var circleBounds:Rectangle = circle.getBounds(stage);
    var target1:Rectangle = new Rectangle(0, 0, 100, 100);
    trace(circleBounds.intersects(target1)); // false
    var target2:Rectangle = new Rectangle(0, 0, 300, 300);
    trace(circleBounds.intersects(target2)); // true

    Similarly, you can use the intersects() method to find out whether the bounding rectangles of two display objects overlap. Use the getRect() method of the DisplayObject class to include any additional space that the strokes of a display object add to a bounding region.

    Other uses of Rectangle objects

    Rectangle objects are used in the following methods and properties:

    ClassMethods or propertiesDescription
    BitmapDataapplyFilter(), colorTransform(), copyChannel(), copyPixels(), draw(), drawWithQuality(), encode(), fillRect(), generateFilterRect(), getColorBoundsRect(), getPixels(), merge(), paletteMap(), pixelDissolve(), setPixels(), and threshold()Used as the type for some parameters to define a region of the BitmapData object.
    DisplayObjectgetBounds(), getRect(), scrollRect, scale9GridUsed as the data type for the property or the data type returned.
    PrintJobaddPage()Used to define the printArea parameter.
    SpritestartDrag()Used to define the bounds parameter.
    TextFieldgetCharBoundaries()Used as the return value type.
    TransformpixelBoundsUsed as the data type.
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-inverse-kinematics.html b/docs/development/display/working-with-inverse-kinematics.html index 4b5bae7db..22754002d 100644 --- a/docs/development/display/working-with-inverse-kinematics.html +++ b/docs/development/display/working-with-inverse-kinematics.html @@ -16,7 +16,7 @@ - + @@ -125,7 +125,7 @@ exceeded.

    var ikmover:IKMover = new IKMover(endjoint, pos);
    ikMover.limitByTime = true;
    ikMover.timeLimit = 1000;

    ikmover.addEventListener(IKEvent.TIME_LIMIT, timeLimitFunction);

    function timeLimitFunction(evt:IKEvent):void
    {
    trace("timeLimit hit");
    trace("time is " + evt.time);
    trace("distance is " + evt.distance);
    trace("iterationCount is " + evt.iterationCount);
    trace("IKJoint is " + evt.joint.name);
    }

    More Help Topics

    fl.ik package

    Inverse kinematics

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-motion-tweens.html b/docs/development/display/working-with-motion-tweens.html index 2b3decd8c..08934a9be 100644 --- a/docs/development/display/working-with-motion-tweens.html +++ b/docs/development/display/working-with-motion-tweens.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ motion tween and makes it available for you to copy and reuse.

    To create motion tweens, you must have a license for Flash Professional.

    More Help topics

    Motion tween animation

    fl.motion package

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-motion-tweens/adding-filters.html b/docs/development/display/working-with-motion-tweens/adding-filters.html index 09794296a..d7eed6874 100644 --- a/docs/development/display/working-with-motion-tweens/adding-filters.html +++ b/docs/development/display/working-with-motion-tweens/adding-filters.html @@ -16,7 +16,7 @@ - + @@ -46,7 +46,7 @@ when the motion tween is created in Flash; you can fine-tune it in your copy of the ActionScript. The following example transforms the hue and saturation of the display object as it moves.

    __motion_Leaf_1.initFilters(["flash.filters.ColorMatrix"], [0], -1, -1);
    __motion_Leaf_1.addFilterPropertyArray(0, "adjustColorBrightness", [0], -1, -1);
    __motion_Leaf_1.addFilterPropertyArray(0, "adjustColorContrast", [0], -1, -1);
    __motion_Leaf_1.addFilterPropertyArray(0, "adjustColorSaturation",
    [
    0,-0.589039,1.17808,-1.76712,-2.35616,-2.9452,-3.53424,-4.12328,
    -4.71232,-5.30136,-5.89041, 6.47945,-7.06849,-7.65753,-8.24657,
    -8.83561,-9.42465,-10.0137,-10.6027,-11.1918,11.7808,-12.3699,
    -12.9589,-13.5479,-14.137,-14.726,-15.3151,-15.9041,-16.4931,
    17.0822,-17.6712,-18.2603,-18.8493,-19.4383,-20.0274,-20.6164,
    -21.2055,-21.7945,22.3836,-22.9726,-23.5616,-24.1507,-24.7397,
    -25.3288,-25.9178,-26.5068,-27.0959,27.6849,-28.274,-28.863,-29.452,
    -30.0411,-30.6301,-31.2192,-31.8082,-32.3973,32.9863,-33.5753,
    -34.1644,-34.7534,-35.3425,-35.9315,-36.5205,-37.1096,-37.6986,
    38.2877,-38.8767,-39.4657,-40.0548,-40.6438,-41.2329,-41.8219,
    -42.411,-43
    ],
    -1, -1);
    __motion_Leaf_1.addFilterPropertyArray(0, "adjustColorHue",
    [
    0,0.677418,1.35484,2.03226,2.70967,3.38709,4.06451,4.74193,5.41935,
    6.09677,6.77419,7.45161,8.12903,8.80645,9.48387,10.1613,10.8387,11.5161,
    12.1935,12.871,13.5484,14.2258,14.9032,15.5806,16.2581,16.9355,17.6129,
    18.2903,18.9677,19.6452,20.3226,21,22.4286,23.8571,25.2857,26.7143,28.1429,
    29.5714,31,32.4286,33.8571,35.2857,36.7143,38.1429,39.5714,41,42.4286,43.8571,
    45.2857,46.7143,48.1429,49.5714,51,54,57,60,63,66,69,72,75,78,81,84,87,
    90,93,96,99,102,105,108,111,114
    ],
    -1, -1);
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-motion-tweens/associating-a-motion-tween-with-its-display-objects.html b/docs/development/display/working-with-motion-tweens/associating-a-motion-tween-with-its-display-objects.html index 2bbbac651..d7c5ba20b 100644 --- a/docs/development/display/working-with-motion-tweens/associating-a-motion-tween-with-its-display-objects.html +++ b/docs/development/display/working-with-motion-tweens/associating-a-motion-tween-with-its-display-objects.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ comments out the addTarget() line and does not specify an instance name:

    // __animFactory_Wheel.addTarget(<instance name goes here>, 0);

    In your copy, specify the display object to associate with the motion tween. In the following example, the targets are specified as greenWheel and redWheel:

    __animFactory_Wheel.AnimatorFactory.addTarget(greenWheel, 0);
    __animFactory_Wheel.AnimationFactory.addTarget(redWheel, 0);

    You can associate multiple display objects with the same motion tween using multiple calls to addTarget().

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-motion-tweens/basics-of-motion-tweens.html b/docs/development/display/working-with-motion-tweens/basics-of-motion-tweens.html index 952ee367a..1a02abaa4 100644 --- a/docs/development/display/working-with-motion-tweens/basics-of-motion-tweens.html +++ b/docs/development/display/working-with-motion-tweens/basics-of-motion-tweens.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ states at different times; gives the appearance that the first state evolves smoothly into the second. Used to move a display object across the stage, as well as make it grow, shrink, rotate, fade, or change color over time.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-motion-tweens/copying-motion-tween-scripts-in-flash.html b/docs/development/display/working-with-motion-tweens/copying-motion-tween-scripts-in-flash.html index 71800358d..aae64b83f 100644 --- a/docs/development/display/working-with-motion-tweens/copying-motion-tween-scripts-in-flash.html +++ b/docs/development/display/working-with-motion-tweens/copying-motion-tween-scripts-in-flash.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ motion tween.

    You can access the Copy Motion as ActionScript 3.0 command in Flash two ways. The first way is from a tween context menu on the stage:

    1. Select the motion tween on the stage.

    2. Right-click (Windows) or Control‑click (Macintosh).

    3. Choose Copy Motion as ActionScript 3.0...

    The second way is to choose the command directly from the Flash Edit menu:

    1. Select the motion tween on the stage.

    2. Select Edit > Timeline > Copy Motion as ActionScript 3.0.

      Copy Motion from Timeline menu

    After copying the script, paste it into a file and save it.

    After creating a motion tween and copying and saving the script, you can reuse it as is or modify it in your own dynamic ActionScript-based animation.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-motion-tweens/describing-the-animation.html b/docs/development/display/working-with-motion-tweens/describing-the-animation.html index 7d704d472..a199856d5 100644 --- a/docs/development/display/working-with-motion-tweens/describing-the-animation.html +++ b/docs/development/display/working-with-motion-tweens/describing-the-animation.html @@ -16,7 +16,7 @@ - + @@ -47,7 +47,7 @@ frames of the animation. In addition, the object rotates on its z axis as it moves across the stage. The multiple items in the rotationZ property array determine the rotation.

    __motion_Leaf_1 = new MotionBase();
    __motion_Leaf_1.duration = 100;
    __motion_Symbol1_4.addPropertyArray("y",
    [
    0,5.91999,11.84,17.76,23.68,29.6,35.52,41.44,47.36,53.28,59.2,65.12,71.04,
    76.96,82.88,88.8,94.72,100.64,106.56,112.48,118.4,124.32,130.24,136.16,142.08,
    148,150.455,152.909,155.364,157.818,160.273,162.727,165.182,167.636,170.091,
    172.545,175,177.455,179.909,182.364,184.818,187.273,189.727,192.182,194.636,
    197.091,199.545,202,207.433,212.865,218.298,223.73,229.163,234.596,240.028,
    245.461,250.893,256.326,261.759,267.191,272.624,278.057,283.489,
    288.922,294.354,299.787,305.22,310.652,316.085,321.517,326.95,330.475,334,
    337.525,341.05,344.575,348.1,351.625,355.15,358.675,362.2,365.725,369.25,
    372.775,376.3,379.825,383.35,386.875,390.4,393.925,397.45,400.975,404.5,
    407.5,410.5,413.5,416.5,419.5,422.5,425.5
    ]
    );
    __motion_Symbol1_4.addPropertyArray("scaleX", [1.00]);
    __motion_Symbol1_4.addPropertyArray("scaleY", [1.00]);
    __motion_Symbol1_4.addPropertyArray("skewX", [0]);
    __motion_Symbol1_4.addPropertyArray("skewY", [0]);
    __motion_Symbol1_4.addPropertyArray("z",
    [
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    ]
    );
    __motion_Symbol1_4.addPropertyArray("rotationX", [64.0361]);
    __motion_Symbol1_4.addPropertyArray("rotationY", [41.9578]);
    __motion_Symbol1_4.addPropertyArray("rotationZ",
    [
    -18.0336,-17.5536,-17.0736,-16.5936,-16.1136,-15.6336,-15.1536,-14.6736,
    -14.1936,-13.7136,-13.2336,-12.7536,-12.2736,-11.7936,-11.3136,-10.8336,
    -10.3536,-9.8736,-9.3936,-8.9136,-8.4336,-7.9536,-7.4736,-6.9936,-6.5136,
    -6.0336,-7.21542,-8.39723,-9.57905,-10.7609,-11.9427,-13.1245,-14.3063,
    -15.4881,-16.67,-17.8518,-19.0336,-20.2154,-21.3972,-22.5791,-23.7609,
    -24.9427,-26.1245,-27.3063,-28.4881,-29.67,-30.8518,-32.0336,-31.0771,
    -30.1206,-29.164,-28.2075,-27.251,-26.2945,-25.338,-24.3814,-23.4249,
    -22.4684,-21.5119,-20.5553,-19.5988,-18.6423,-17.6858,-16.7293,-15.7727
    -14.8162,-13.8597,-12.9032,-11.9466,-10.9901,-10.0336,-10.9427,-11.8518,
    -12.7609,-13.67,-14.5791,-15.4881,-16.3972,-17.3063,-18.2154,-19.1245,
    -20.0336,-20.9427,-21.8518,-22.7609,-23.67,-24.5791,-25.4881,-26.3972,
    -27.3063,-28.2154,-29.1245,-30.0336,-28.3193,-26.605,-24.8907,-23.1765,
    -21.4622,-19.7479,-18.0336
    ]
    );
    __motion_Symbol1_4.addPropertyArray("blendMode", ["normal"]);
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-motion-tweens/incorporating-motion-tween-scripts.html b/docs/development/display/working-with-motion-tweens/incorporating-motion-tween-scripts.html index 7fe5f3c14..0b586b246 100644 --- a/docs/development/display/working-with-motion-tweens/incorporating-motion-tween-scripts.html +++ b/docs/development/display/working-with-motion-tweens/incorporating-motion-tween-scripts.html @@ -16,7 +16,7 @@ - + @@ -46,7 +46,7 @@ object of the motion tween. Then create the motion tween and copy the script. Whichever naming approach you use, make sure that each Motion object in your ActionScript code has a unique name.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-movie-clips.html b/docs/development/display/working-with-movie-clips.html index 2fe111a21..7e60486be 100644 --- a/docs/development/display/working-with-movie-clips.html +++ b/docs/development/display/working-with-movie-clips.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ behaviors and functionality of display objects, but with additional properties and methods for controlling its timeline.

    More Help Topics

    flash.display.MovieClip class

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-movie-clips/basics-of-movie-clips.html b/docs/development/display/working-with-movie-clips/basics-of-movie-clips.html index aff607f37..d1d2b6379 100644 --- a/docs/development/display/working-with-movie-clips/basics-of-movie-clips.html +++ b/docs/development/display/working-with-movie-clips/basics-of-movie-clips.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ the timeline in the Flash authoring tool.

    Playhead
    A marker identifying the location (frame) in the timeline that is being displayed at a given moment.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-movie-clips/controlling-movie-clip-playback.html b/docs/development/display/working-with-movie-clips/controlling-movie-clip-playback.html index 0f822da7b..cbe3b42b9 100644 --- a/docs/development/display/working-with-movie-clips/controlling-movie-clip-playback.html +++ b/docs/development/display/working-with-movie-clips/controlling-movie-clip-playback.html @@ -16,7 +16,7 @@ - + @@ -98,7 +98,7 @@ labels in that scene. The name property returns the scene's name as a string. The numFrames property returns an int representing the total number of frames in the scene.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-movie-clips/creating-movieclip-objects-with-actionscript.html b/docs/development/display/working-with-movie-clips/creating-movieclip-objects-with-actionscript.html index d070f47c5..83f842eb2 100644 --- a/docs/development/display/working-with-movie-clips/creating-movieclip-objects-with-actionscript.html +++ b/docs/development/display/working-with-movie-clips/creating-movieclip-objects-with-actionscript.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ properties, and even call methods before it is rendered to the screen. For more information on working with the display list, see Working with display object containers.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-movie-clips/loading-an-external-swf-file.html b/docs/development/display/working-with-movie-clips/loading-an-external-swf-file.html index 5c5b8ba2c..251053a13 100644 --- a/docs/development/display/working-with-movie-clips/loading-an-external-swf-file.html +++ b/docs/development/display/working-with-movie-clips/loading-an-external-swf-file.html @@ -16,7 +16,7 @@ - + @@ -76,7 +76,7 @@ of ActionScript.

    Supported functionalityFlash Player 7Flash Player 8Flash Player 9 and 10
    Can load SWFs published for7 and earlier8 and earlier9 (or 10) and earlier
    Contains this AVMAVM1AVM1AVM1 and AVM2
    Runs SWFs written in ActionScript1.0 and 2.01.0 and 2.01.0 and 2.0, and 3.0

    In the following table, "Supported functionality" refers to content running in Flash Player 9 or later. Content running in Flash Player 8 or earlier can load, display, execute, and cross-script only ActionScript 1.0 and 2.0.

    Supported functionality

    Content created in ActionScript 1.0 and 2.0

    Content created in ActionScript 3.0

    Can load content and execute code in content created in

    ActionScript 1.0 and 2.0 only

    ActionScript 1.0 and 2.0, and ActionScript 3.0

    Can cross script content created in

    ActionScript 1.0 and 2.0 only (ActionScript 3.0 through Local Connection)

    ActionScript 1.0 and 2.0 through LocalConnection.

    ActionScript 3.0

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-movie-clips/movie-clip-example-runtime-assets-explorer.html b/docs/development/display/working-with-movie-clips/movie-clip-example-runtime-assets-explorer.html index 59de66471..46951145b 100644 --- a/docs/development/display/working-with-movie-clips/movie-clip-example-runtime-assets-explorer.html +++ b/docs/development/display/working-with-movie-clips/movie-clip-example-runtime-assets-explorer.html @@ -16,7 +16,7 @@ - + @@ -85,7 +85,7 @@ getDefinitionByName() function (from the flash.utils package) to obtain an actual reference to the asset's class in order to create a new instance of that asset.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-movie-clips/working-with-movieclip-objects.html b/docs/development/display/working-with-movie-clips/working-with-movieclip-objects.html index 3f14e5957..8494981c4 100644 --- a/docs/development/display/working-with-movie-clips/working-with-movieclip-objects.html +++ b/docs/development/display/working-with-movie-clips/working-with-movieclip-objects.html @@ -16,7 +16,7 @@ - + @@ -45,7 +45,7 @@ MovieClip class listing in the ActionScript 3.0 Reference for the Adobe Flash Platform.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders.html b/docs/development/display/working-with-pixel-bender-shaders.html index 22141cc18..c522f806c 100644 --- a/docs/development/display/working-with-pixel-bender-shaders.html +++ b/docs/development/display/working-with-pixel-bender-shaders.html @@ -16,7 +16,7 @@ - + @@ -31,7 +31,7 @@ rendering.

    More Help Topics

    flash.display.Shader

    flash.filters.ShaderFilter

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/accessing-shader-metadata.html b/docs/development/display/working-with-pixel-bender-shaders/accessing-shader-metadata.html index 09cb43c75..1017a28b0 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/accessing-shader-metadata.html +++ b/docs/development/display/working-with-pixel-bender-shaders/accessing-shader-metadata.html @@ -16,7 +16,7 @@ - + @@ -48,7 +48,7 @@ Identifying shader inputs and parameters. For more information about input and parameter properties, see Specifying shader input and parameter values.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/basics-of-pixel-bender-shaders.html b/docs/development/display/working-with-pixel-bender-shaders/basics-of-pixel-bender-shaders.html index c678d17fb..a06cb71b2 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/basics-of-pixel-bender-shaders.html +++ b/docs/development/display/working-with-pixel-bender-shaders/basics-of-pixel-bender-shaders.html @@ -16,7 +16,7 @@ - + @@ -85,7 +85,7 @@ the ActionScript class you copied from the text.

  • Run the program using Control > Test Movie

    You will see the results of the example in the preview window.

  • These techniques for testing example code listings are explained in more detail in How to Use ActionScript Examples.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/loading-or-embedding-a-shader.html b/docs/development/display/working-with-pixel-bender-shaders/loading-or-embedding-a-shader.html index 6c4b5f67e..bf7b9cf35 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/loading-or-embedding-a-shader.html +++ b/docs/development/display/working-with-pixel-bender-shaders/loading-or-embedding-a-shader.html @@ -16,7 +16,7 @@ - + @@ -49,7 +49,7 @@ filter, a blend mode, a bitmap fill, or for stand-alone processing of bitmap or other data. You can also use the Shader object's data property to access the shader's metadata, specify input images, and set parameter values.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/specifying-shader-input-and-parameter-values.html b/docs/development/display/working-with-pixel-bender-shaders/specifying-shader-input-and-parameter-values.html index d1de427e0..f0555ac10 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/specifying-shader-input-and-parameter-values.html +++ b/docs/development/display/working-with-pixel-bender-shaders/specifying-shader-input-and-parameter-values.html @@ -16,7 +16,7 @@ - + @@ -151,7 +151,7 @@ a Vector instance named metadata. Note that this example assumes a Shader instance named myShader is already created, and that it is known to have a parameter named brightness:

    var brightness:ShaderParameter = myShader.data.brightness;
    var metadata:Vector.<String> = new Vector.<String>();

    for (var prop:String in brightness)
    {
    if (brightness[prop] is String)
    {
    metadata[metadata.length] = brightness[prop];
    }
    }

    // do something with the metadata
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-blend-mode.html b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-blend-mode.html index 1944b497d..d5c7b6982 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-blend-mode.html +++ b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-blend-mode.html @@ -16,7 +16,7 @@ - + @@ -69,7 +69,7 @@ outCoord() function outside a sampling function, its coordinates always evaluate to 0. You cannot, for example, use the position of a pixel to influence how the blended images are combined.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-drawing-fill.html b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-drawing-fill.html index b9351c34e..64e2e3b53 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-drawing-fill.html +++ b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-drawing-fill.html @@ -16,7 +16,7 @@ - + @@ -52,7 +52,7 @@ to create the "ThreePointGradient.pbj" Pixel Bender bytecode file:

    <languageVersion : 1.0;>
    kernel ThreePointGradient
    <
    namespace : "Petri Leskinen::Example";
    vendor : "Petri Leskinen";
    version : 1;
    description : "Creates a gradient fill using three specified points and colors.";
    >
    {
    parameter float2 point1 // coordinates of the first point
    <
    minValue:float2(0, 0);
    maxValue:float2(4000, 4000);
    defaultValue:float2(0, 0);
    >;

    parameter float4 color1 // color at the first point, opaque red by default
    <
    defaultValue:float4(1.0, 0.0, 0.0, 1.0);
    >;

    parameter float2 point2 // coordinates of the second point
    <
    minValue:float2(0, 0);
    maxValue:float2(4000, 4000);
    defaultValue:float2(0, 500);
    >;

    parameter float4 color2 // color at the second point, opaque green by default
    <
    defaultValue:float4(0.0, 1.0, 0.0, 1.0);
    >;

    parameter float2 point3 // coordinates of the third point
    <
    minValue:float2(0, 0);
    maxValue:float2(4000, 4000);
    defaultValue:float2(0, 500);
    >;

    parameter float4 color3 // color at the third point, opaque blue by default
    <
    defaultValue:float4(0.0, 0.0, 1.0, 1.0);
    >;

    output pixel4 dst;

    void evaluatePixel()
    {
    float2 d2 = point2 - point1;
    float2 d3 = point3 - point1;

    // transformation to a new coordinate system
    // transforms point 1 to origin, point2 to (1, 0), and point3 to (0, 1)
    float2x2 mtrx = float2x2(d3.y, -d2.y, -d3.x, d2.x) / (d2.x * d3.y - d3.x * d2.y);
    float2 pNew = mtrx * (outCoord() - point1);

    // repeat the edge colors on the outside
    pNew.xy = clamp(pNew.xy, 0.0, 1.0); // set the range to 0.0 ... 1.0

    // interpolating the output color or alpha value
    dst = mix(mix(color1, color2, pNew.x), color3, pNew.y);
    }
    }

    Note: If you use a shader fill when rendering under the graphics processing unit (GPU), the filled area will be colored cyan.

    For more information about drawing shapes using the drawing api, see Using the drawing API.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-filter.html b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-filter.html index e3b7d0d09..42b0580bb 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-filter.html +++ b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-as-a-filter.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@ main application class for an ActionScript-only project in Flash Builder, or as the document class for the FLA file in Flash Professional:

    package
    {
    import flash.display.GradientType;
    import flash.display.Graphics;
    import flash.display.Shader;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.filters.ShaderFilter;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;

    public class InvertRGB extends Sprite
    {
    private var shader:Shader;
    private var loader:URLLoader;

    public function InvertRGB()
    {
    init();
    }

    private function init():void
    {
    loader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.BINARY;
    loader.addEventListener(Event.COMPLETE, onLoadComplete);
    loader.load(new URLRequest("invertRGB.pbj"));
    }


    private function onLoadComplete(event:Event):void
    {
    shader = new Shader(loader.data);

    var target:Shape = new Shape();
    addChild(target);

    var g:Graphics = target.graphics;
    var c:Array = [0x990000, 0x445500, 0x007799];
    var a:Array = [255, 255, 255];
    var r:Array = [0, 127, 255];
    var m:Matrix = new Matrix();
    m.createGradientBox(w, h);
    g.beginGradientFill(GradientType.LINEAR, c, a, r, m);
    g.drawRect(10, 10, w, h);
    g.endFill();

    var invertFilter:ShaderFilter = new ShaderFilter(shader);
    target.filters = [invertFilter];
    }
    }
    }

    For more information on applying filters, see Creating and applying filters.

    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-in-stand-alone-mode.html b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-in-stand-alone-mode.html index 7cb830151..0d4ed80d7 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-in-stand-alone-mode.html +++ b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader-in-stand-alone-mode.html @@ -16,7 +16,7 @@ - + @@ -62,7 +62,7 @@ interaction with the user interface and any other events) pauses while the shader executes. When the shader finishes, the target object contains the shader result and the program continues with the next line of code.

    job.start(true);
    - + \ No newline at end of file diff --git a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader.html b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader.html index c370f1832..83910dd9e 100644 --- a/docs/development/display/working-with-pixel-bender-shaders/using-a-shader.html +++ b/docs/development/display/working-with-pixel-bender-shaders/using-a-shader.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ background, with the result is available when the processing completes. This technique can be used to generate bitmap data and also to process non-visual data.

  • Using a shader as a drawing fill

  • Using a shader as a blend mode

  • Using a shader as a filter

  • Using a shader in stand-alone mode

  • - + \ No newline at end of file diff --git a/docs/development/files-and-data.html b/docs/development/files-and-data.html index 786b7028a..7f400cf57 100644 --- a/docs/development/files-and-data.html +++ b/docs/development/files-and-data.html @@ -16,13 +16,13 @@ - + - + \ No newline at end of file diff --git a/docs/development/files-and-data/storing-local-data.html b/docs/development/files-and-data/storing-local-data.html index a6211eaa8..f13c73eb2 100644 --- a/docs/development/files-and-data/storing-local-data.html +++ b/docs/development/files-and-data/storing-local-data.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ Working with local SQL databases in AIR.

    There are a number of security factors that relate to shared objects. For more information, see Shared objects in Security.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/storing-local-data/encrypted-local-storage.html b/docs/development/files-and-data/storing-local-data/encrypted-local-storage.html index eebb5f0b6..b542d1eba 100644 --- a/docs/development/files-and-data/storing-local-data/encrypted-local-storage.html +++ b/docs/development/files-and-data/storing-local-data/encrypted-local-storage.html @@ -16,7 +16,7 @@ - + @@ -97,7 +97,7 @@ EncryptedLocalStore.reset() method, as in the following example:

    EncryptedLocalStore.reset();

    More Help topics

    flash.data.EncryptedLocalStore

    About AIR publisher identifiers

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/storing-local-data/shared-objects.html b/docs/development/files-and-data/storing-local-data/shared-objects.html index 0137ce36e..9bcedbec8 100644 --- a/docs/development/files-and-data/storing-local-data/shared-objects.html +++ b/docs/development/files-and-data/storing-local-data/shared-objects.html @@ -16,7 +16,7 @@ - + @@ -133,7 +133,7 @@ then refresh the page. The application displays the date and time that you clicked the Log Out button on your previous visit. At any time, you can delete the stored information by clicking the Delete LSO button.

    <?xml version="1.0"?>
    <!-- lsos/WelcomeMessage.mxml -->
    <mx:Application xmlns:mx="https://www.adobe.com/2006/mxml" initialize="initApp()">
    <mx:Script>
    <![CDATA[
    public var mySO:SharedObject;
    [Bindable]
    public var welcomeMessage:String;

    public function initApp():void {
    mySO = SharedObject.getLocal("mydata");
    if (mySO.data.visitDate==null) {
    welcomeMessage = "Hello first-timer!"
    } else {
    welcomeMessage = "Welcome back. You last visited on " +
    getVisitDate();
    }
    }

    private function getVisitDate():Date {
    return mySO.data.visitDate;
    }

    private function storeDate():void {
    mySO.data.visitDate = new Date();
    mySO.flush();
    }

    private function deleteLSO():void {
    // Deletes the SharedObject from the client machine.
    // Next time they log in, they will be a 'first-timer'.
    mySO.clear();
    }

    ]]>
    </mx:Script>
    <mx:Label id="label1" text="{welcomeMessage}"/>
    <mx:Button label="Log Out" click="storeDate()"/>
    <mx:Button label="Delete LSO" click="deleteLSO()"/>
    </mx:Application>
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-bytearrays.html b/docs/development/files-and-data/working-with-bytearrays.html index a5e75e5c1..a27acf600 100644 --- a/docs/development/files-and-data/working-with-bytearrays.html +++ b/docs/development/files-and-data/working-with-bytearrays.html @@ -16,7 +16,7 @@ - + @@ -39,7 +39,7 @@ .zip file contains and writing them to the desktop.

    More Help topics

    flash.utils.ByteArray

    flash.utils.IExternalizable

    Action Message Format specification

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-bytearrays/bytearray-example-reading-a-zip-file.html b/docs/development/files-and-data/working-with-bytearrays/bytearray-example-reading-a-zip-file.html index 5934cb9c3..aa4869f90 100644 --- a/docs/development/files-and-data/working-with-bytearrays/bytearray-example-reading-a-zip-file.html +++ b/docs/development/files-and-data/working-with-bytearrays/bytearray-example-reading-a-zip-file.html @@ -16,7 +16,7 @@ - + @@ -83,7 +83,7 @@ giving it the name supplied by the filename parameter. It then writes the file data from the data parameter to the output file stream ( outStream) and closes the file.

    // Flash version
    function outFile(fileName:String, data:ByteArray):void
    {
    var outFile:File = File.desktopDirectory; // destination folder is desktop
    outFile = outFile.resolvePath(fileName); // name of file to write
    var outStream:FileStream = new FileStream();
    // open output file stream in WRITE mode
    outStream.open(outFile, FileMode.WRITE);
    // write out the file
    outStream.writeBytes(data, 0, data.length);
    // close it
    outStream.close();
    }

    private function outFile(fileName:String, data:ByteArray):void
    {
    var outFile:File = File.desktopDirectory; // dest folder is desktop
    outFile = outFile.resolvePath(fileName); // name of file to write
    var outStream:FileStream = new FileStream();
    // open output file stream in WRITE mode
    outStream.open(outFile, FileMode.WRITE);
    // write out the file
    outStream.writeBytes(data, 0, data.length);
    // close it
    outStream.close();
    }
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-bytearrays/reading-and-writing-a-bytearray.html b/docs/development/files-and-data/working-with-bytearrays/reading-and-writing-a-bytearray.html index de8f52e69..bd1c68c2f 100644 --- a/docs/development/files-and-data/working-with-bytearrays/reading-and-writing-a-bytearray.html +++ b/docs/development/files-and-data/working-with-bytearrays/reading-and-writing-a-bytearray.html @@ -16,7 +16,7 @@ - + @@ -101,7 +101,7 @@ uses a for each() loop construct to add each node to a text area for display. The example also displays the value of the objectEncoding property along with a header for the contents of the order file.

    import flash.filesystem.*;
    import flash.display.Sprite;
    import flash.display.TextField;
    import flash.utils.ByteArray;

    public class ReadObjectExample extends Sprite
    {
    public function ReadObjectExample()
    {
    var inBytes:ByteArray = new ByteArray();
    // define text area for displaying XML content
    var myTxt:TextField = new TextField();
    myTxt.width = 550;
    myTxt.height = 400;
    addChild(myTxt);
    //display objectEncoding and file heading
    myTxt.text = "Object encoding is: " + inBytes.objectEncoding + "\n\n" + "order file: \n\n";
    readFileIntoByteArray("order", inBytes);

    inBytes.position = 0; // reset position to beginning
    inBytes.uncompress(CompressionAlgorithm.DEFLATE);
    inBytes.position = 0; //reset position to beginning
    // read XML Object
    var orderXML:XML = inBytes.readObject();

    // for each node in orderXML
    for each (var child:XML in orderXML)
    {
    // append child node to text area
    myTxt.text += child + "\n";
    }
    }

    // read specified file into byte array
    private function readFileIntoByteArray(fileName:String, data:ByteArray):void
    {
    var inFile:File = File.desktopDirectory; // source folder is desktop
    inFile = inFile.resolvePath(fileName); // name of file to read
    var inStream:FileStream = new FileStream();
    inStream.open(inFile, FileMode.READ);
    inStream.readBytes(data);
    inStream.close();
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air.html index faef669a1..bd9e7c673 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ database can be used for storing local, persistent data. For example, it can be used for application data, application user settings, documents, or any other type of data that you want your application to save locally.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/about-local-sql-databases.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/about-local-sql-databases.html index 704e34799..2fc59c8fb 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/about-local-sql-databases.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/about-local-sql-databases.html @@ -16,7 +16,7 @@ - + @@ -156,7 +156,7 @@ mode. For more information on these topics, and suggestions for working in each mode, see Using synchronous and asynchronous database operations.

    More Help topics

    Christophe Coenraets: Employee Directory on AIR for Android

    Raymond Camden: jQuery and AIR - Moving from web page to application

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/changing-or-deleting-data.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/changing-or-deleting-data.html index 8217b4218..0b9a59b51 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/changing-or-deleting-data.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/changing-or-deleting-data.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ SQLStatement instance's text property:

    • To change existing data in a table, use an UPDATE statement.

    • To delete one or more rows of data from a table, use a DELETE statement.

    For descriptions of these statements, see SQL support in local databases.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/connecting-to-a-database.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/connecting-to-a-database.html index bac2e2b85..a40045e67 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/connecting-to-a-database.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/connecting-to-a-database.html @@ -16,7 +16,7 @@ - + @@ -47,7 +47,7 @@ specify SQLMode.READ for the openMode parameter to open an existing database in a read-only mode. In that case data can be retrieved from the database but no data can be added, deleted, or changed.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/creating-and-modifying-a-database.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/creating-and-modifying-a-database.html index 33bef4575..f07818935 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/creating-and-modifying-a-database.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/creating-and-modifying-a-database.html @@ -16,7 +16,7 @@ - + @@ -68,7 +68,7 @@ SQLConnection instance named conn that is already instantiated and is already connected to a database.

    import flash.data.SQLConnection;
    import flash.data.SQLStatement;
    import flash.errors.SQLError;

    // ... create and open the SQLConnection instance named conn ...

    var createStmt:SQLStatement = new SQLStatement();
    createStmt.sqlConnection = conn;

    var sql:String =
    "CREATE TABLE IF NOT EXISTS employees (" +
    " empId INTEGER PRIMARY KEY AUTOINCREMENT, " +
    " firstName TEXT, " +
    " lastName TEXT, " +
    " salary NUMERIC CHECK (salary > 0)" +
    ")";
    createStmt.text = sql;

    try
    {
    createStmt.execute();
    trace("Table created");
    }
    catch (error:SQLError)
    {
    trace("Error message:", error.message);
    trace("Details:", error.details);
    }

    <?xml version="1.0" encoding="utf-8"?>
    <mx:WindowedApplication xmlns:mx="https://www.adobe.com/2006/mxml" creationComplete="init()">
    <mx:Script>
    <![CDATA[
    import flash.data.SQLConnection;
    import flash.data.SQLStatement;
    import flash.errors.SQLError;

    private function init():void
    {
    // ... create and open the SQLConnection instance named conn ...

    var createStmt:SQLStatement = new SQLStatement();
    createStmt.sqlConnection = conn;

    var sql:String =
    "CREATE TABLE IF NOT EXISTS employees (" +
    " empId INTEGER PRIMARY KEY AUTOINCREMENT, " +
    " firstName TEXT, " +
    " lastName TEXT, " +
    " salary NUMERIC CHECK (salary > 0)" +
    ")";
    createStmt.text = sql;

    try
    {
    createStmt.execute();
    trace("Table created");
    }
    catch (error:SQLError)
    {
    trace("Error message:", error.message);
    trace("Details:", error.details);
    }
    }
    ]]>
    </mx:Script>
    </mx:WindowedApplication>

    More Help topics

    Mind the Flex: Updating an existing AIR database

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/handling-database-errors.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/handling-database-errors.html index 8cb184898..507df629c 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/handling-database-errors.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/handling-database-errors.html @@ -16,7 +16,7 @@ - + @@ -158,7 +158,7 @@ name is already in use and asking the user to choose a different name. Another possible response is to allow the user to view information about the other product with the same name.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/inserting-data.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/inserting-data.html index f76dc6565..76f89f7f0 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/inserting-data.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/inserting-data.html @@ -16,7 +16,7 @@ - + @@ -87,7 +87,7 @@ the system-generated row identifier as a table's primary key for defining a foreign key relationship with between two tables.

    For more information about primary keys and generated row identifiers, see SQL support in local databases.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/manipulating-sql-database-data.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/manipulating-sql-database-data.html index b5360ee0b..371084346 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/manipulating-sql-database-data.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/manipulating-sql-database-data.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ the operations to complete before executing other code. For more information on working in asynchronous or synchronous execution mode, see Using synchronous and asynchronous database operations.

    More Help topics

    Connecting to a database

    Working with SQL statements

    Using parameters in statements

    Retrieving data from a database

    Inserting data

    Changing or deleting data

    Working with multiple databases

    Handling database errors

    Working with database data types

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/retrieving-data-from-a-database.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/retrieving-data-from-a-database.html index a549a188c..759782535 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/retrieving-data-from-a-database.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/retrieving-data-from-a-database.html @@ -16,7 +16,7 @@ - + @@ -111,7 +111,7 @@ all the rows are retrieved.

    For more information, see the descriptions for the SQLStatement.execute() method (the prefetch parameter description) and the SQLStatement.next() method.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/strategies-for-working-with-sql-databases.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/strategies-for-working-with-sql-databases.html index 9514e5457..90034b51e 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/strategies-for-working-with-sql-databases.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/strategies-for-working-with-sql-databases.html @@ -16,7 +16,7 @@ - + @@ -99,7 +99,7 @@ time they're executed. See Using parameters in statements for more information.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-encryption-with-sql-databases.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-encryption-with-sql-databases.html index 46382bf18..0e4da4ffd 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-encryption-with-sql-databases.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-encryption-with-sql-databases.html @@ -16,7 +16,7 @@ - + @@ -385,7 +385,7 @@ int variable byte. Finally, the code adds the value in byte to the result ByteArray using its writeByte() method. When the loop finishes, the result ByteArray contains 16 bytes and is ready to use as a database encryption key.

    private function generateEncryptionKey(hash:String):ByteArray
    {
    var result:ByteArray = new ByteArray();

    for (var i:uint = 0; i < 32; i += 2)
    {
    var position:uint = i + 17;
    var hex:String = hash.substr(position, 2);
    var byte:int = parseInt(hex, 16);
    result.writeByte(byte);
    }

    return result;
    }
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-parameters-in-statements.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-parameters-in-statements.html index c1b55708d..56d78349a 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-parameters-in-statements.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-parameters-in-statements.html @@ -16,7 +16,7 @@ - + @@ -76,7 +76,7 @@ because the parameter values are treated explicitly as substituted values, rather than becoming part of the literal statement text. The following is the recommended alternative to the previous listing:

    // assume the variables "username" and "password"
    // contain user-entered data

    var sql:String =
    "SELECT userId " +
    "FROM users " +
    "WHERE username = :username " +
    " AND password = :password";

    var statement:SQLStatement = new SQLStatement();
    statement.text = sql;

    // set parameter values
    statement.parameters[":username"] = username;
    statement.parameters[":password"] = password;
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations.html index 47fd8d5f3..6db9afc7f 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations.html @@ -16,7 +16,7 @@ - + @@ -42,7 +42,7 @@ connection operates in asynchronous execution mode. Once a SQLConnection instance is connected to a database using open() or openAsync(), it is fixed to synchronous or asynchronous execution.

    More Help topics

    Using synchronous database operations

    Understanding the asynchronous execution model

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations/understanding-the-asynchronous-execution-model.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations/understanding-the-asynchronous-execution-model.html index fc63c2916..e37b127f6 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations/understanding-the-asynchronous-execution-model.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations/understanding-the-asynchronous-execution-model.html @@ -16,7 +16,7 @@ - + @@ -61,7 +61,7 @@ to ensure that the operations are executed properly is to create a method that's registered as a listener for the begin event. The code to call the SQLStatement.execute() method is placed within that listener method.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations/using-synchronous-database-operations.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations/using-synchronous-database-operations.html index 192273564..c229975d3 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations/using-synchronous-database-operations.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/using-synchronous-and-asynchronous-database-operations/using-synchronous-database-operations.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ database connection that's no longer needed) in a finally block. The following example demonstrates using try..catch..finally blocks for error handling. It builds on the previous example by adding error handling code:

    var conn:SQLConnection = new SQLConnection();

    // The database file is in the application storage directory
    var folder:File = File.applicationStorageDirectory;
    var dbFile:File = folder.resolvePath("DBSample.db");

    // open the database
    conn.open(dbFile, SQLMode.UPDATE);

    // start a transaction
    conn.begin();

    try
    {
    // add the customer record to the database
    var insertCustomer:SQLStatement = new SQLStatement();
    insertCustomer.sqlConnection = conn;
    insertCustomer.text =
    "INSERT INTO customers (firstName, lastName)" +
    "VALUES ('Bob', 'Jones')";

    insertCustomer.execute();

    var customerId:Number = insertCustomer.getResult().lastInsertRowID;

    // add a related phone number record for the customer
    var insertPhoneNumber:SQLStatement = new SQLStatement();
    insertPhoneNumber.sqlConnection = conn;
    insertPhoneNumber.text =
    "INSERT INTO customerPhoneNumbers (customerId, number)" +
    "VALUES (:customerId, '800-555-1234')";
    insertPhoneNumber.parameters[":customerId"] = customerId;

    insertPhoneNumber.execute();

    // if we've gotten to this point without errors, commit the transaction
    conn.commit();
    }
    catch (error:SQLError)
    {
    // rollback the transaction
    conn.rollback();
    }
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-database-data-types.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-database-data-types.html index b2c9ab83a..eb1f7247b 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-database-data-types.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-database-data-types.html @@ -16,7 +16,7 @@ - + @@ -46,7 +46,7 @@ original data type.

    For more information about the available column affinity types and using data types in SQL statements, see the Data type support.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-multiple-databases.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-multiple-databases.html index a17ef954a..330292508 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-multiple-databases.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-multiple-databases.html @@ -16,7 +16,7 @@ - + @@ -44,7 +44,7 @@ error occurs after one operation takes place, the database data could be left in an intermediate state that would not be reversible and might affect the integrity of the database (and consequently the application).

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-sql-statements.html b/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-sql-statements.html index c3b514011..1fcc03cd0 100644 --- a/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-sql-statements.html +++ b/docs/development/files-and-data/working-with-local-sql-databases-in-air/working-with-sql-statements.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ associative array property.

    selectData.parameters[":param1"] = 25;

    Execute the SQL statement.

    Call the SQLStatement instance's execute() method.

    // using synchronous execution mode
    // or listener methods in asynchronous execution mode
    selectData.execute();

    Additionally, if you're using a Responder instead of event listeners in asynchronous execution mode, pass the Responder instance to the execute() method.

    // using a Responder in asynchronous execution mode
    selectData.execute(-1, selectResponder);

    For specific examples that demonstrate these steps, see the following topics:

    Retrieving data from a database

    Inserting data

    Changing or deleting data

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system.html b/docs/development/files-and-data/working-with-the-file-system.html index 2060119d5..770185c92 100644 --- a/docs/development/files-and-data/working-with-the-file-system.html +++ b/docs/development/files-and-data/working-with-the-file-system.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ flash.net.FileReference

    flash.net.FileReferenceList

    flash.filesystem.File

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api.html index 564ed6c2a..03739dd17 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/air-file-basics.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/air-file-basics.html index 4afc39256..a67e23a3e 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/air-file-basics.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/air-file-basics.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ setting up event listeners. However, since other code cannot execute while a synchronous method is executing, important processes such as display object rendering and animation can be delayed.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/getting-file-system-information.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/getting-file-system-information.html index 50a3de18e..ae1183f12 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/getting-file-system-information.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/getting-file-system-information.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ characteristic, use it. Otherwise, you run the risk of writing code that does not work correctly on all platforms. For example, consider the following code:

    var separator:String;
    if (Capablities.os.indexOf("Mac") > -1)
    {
    separator = "/";
    }
    else
    {
    separator = "\\";
    }

    This code leads to problems on Linux. It is better to simply use the File.separator property.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files.html index 053036b12..6aa9cb197 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/example-reading-an-xml-file-into-an-xml-object.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/example-reading-an-xml-file-into-an-xml-object.html index 0d3ecf045..53cf6f9b9 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/example-reading-an-xml-file-into-an-xml-object.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/example-reading-an-xml-file-into-an-xml-object.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ calls the readUTFBytes() method to get a string version of the read data, and it creates an XML object, prefsXML, based on that string.

    To see a sample application that shows these capabilities, see Reading and writing from an XML preferences file.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/example-reading-and-writing-data-with-random-access.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/example-reading-and-writing-data-with-random-access.html index c495d000a..fb5c99d28 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/example-reading-and-writing-data-with-random-access.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/example-reading-and-writing-data-with-random-access.html @@ -16,7 +16,7 @@ - + @@ -39,7 +39,7 @@ newTitle, to the file, as in the following:

    fileStr.position = file.length - 125;    // 128 - 3
    fileStr.writeMultiByte(newTitle, "iso-8859-1");

    To conform with the ID3 version 1 standard, the length of the newTitle string should be 30 characters, padded at the end with the character code 0 ( String.fromCharCode(0)).

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/using-the-load-and-save-methods.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/using-the-load-and-save-methods.html index b34e323fd..964020ecb 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/using-the-load-and-save-methods.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/using-the-load-and-save-methods.html @@ -16,7 +16,7 @@ - + @@ -37,7 +37,7 @@ method.

  • The FileStream class lets you save data to files without presenting the user with an Open or Save dialog box.

  • You can directly use types other than byte arrays when reading data with the FileStream class.

  • - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/workflow-for-reading-and-writing-files.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/workflow-for-reading-and-writing-files.html index 7b44616dd..f76e446bb 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/workflow-for-reading-and-writing-files.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/workflow-for-reading-and-writing-files.html @@ -16,7 +16,7 @@ - + @@ -49,7 +49,7 @@ Determining space available on a volume.

    Call the close() method of the FileStream object when you are done working with the file.

    Calling the close() method makes the file available to other applications.

    For details, see Initializing a FileStream object, and opening and closing files.

    To see a sample application that uses the FileStream class to read and write files, see the following articles at the Adobe AIR Developer Center:

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects.html index a36817023..4491d21cb 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/asynchronous-programming-and-the events-generated-by-a-filestream-object-opened-asynchronously.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/asynchronous-programming-and-the events-generated-by-a-filestream-object-opened-asynchronously.html index 55abee7e7..cae8a8636 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/asynchronous-programming-and-the events-generated-by-a-filestream-object-opened-asynchronously.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/asynchronous-programming-and-the events-generated-by-a-filestream-object-opened-asynchronously.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ concern for the unwritten bytes. The FileStream object will continue writing data and the close event will be delivered after the final byte is written to the file and the underlying file is closed.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/data-formats-and-choosing-the-read-and-write-methods-to-use.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/data-formats-and-choosing-the-read-and-write-methods-to-use.html index 31029a7f4..2444be6a8 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/data-formats-and-choosing-the-read-and-write-methods-to-use.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/data-formats-and-choosing-the-read-and-write-methods-to-use.html @@ -16,7 +16,7 @@ - + @@ -61,7 +61,7 @@ section.

    Other files formats (for images, databases, application documents, and so on) have different structures, and to work with their data in ActionScript, you must understand how the data is structured.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/filestream-open-modes.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/filestream-open-modes.html index 800bfd65a..5047916f8 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/filestream-open-modes.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/filestream-open-modes.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ the following:

    • The ability to read from the file

    • The ability to write to the file

    • Whether data will always be appended past the end of the file (when writing)

    • What to do when the file does not exist (and when its parent directories do not exist)

    The following are the various file modes (which you can specify as the fileMode parameter of the open() and openAsync() methods):

    File modeDescription
    FileMode.READSpecifies that the file is open for reading only.
    FileMode.WRITESpecifies that the file is open for writing. If the file does not exist, it is created when the FileStream object is opened. If the file does exist, any existing data is deleted.
    FileMode.APPENDSpecifies that the file is open for appending. The file is created if it does not exist. If the file exists, existing data is not overwritten, and all writing begins at the end of the file.
    FileMode.UPDATESpecifies that the file is open for reading and writing. If the file does not exist, it is created. Specify this mode for random read/write access to the file. You can read from any position in the file. When writing to the file, only the bytes written overwrite existing bytes (all other bytes remain unchanged).
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/initializing-a-filestream-object-and-opening-and-closing-files.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/initializing-a-filestream-object-and-opening-and-closing-files.html index 5c7ea630f..15cacc5c9 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/initializing-a-filestream-object-and-opening-and-closing-files.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/initializing-a-filestream-object-and-opening-and-closing-files.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ soon as you open the FileStream object. For details, see The read buffer and the bytesAvailable property of a FileStream object.

    You can call the close() method of a FileStream object to close the associated file, making it available for use by other applications.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/the-position-property-of-a-filestream-object.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/the-position-property-of-a-filestream-object.html index 7698c6bb8..f5e63f02b 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/the-position-property-of-a-filestream-object.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/the-position-property-of-a-filestream-object.html @@ -16,7 +16,7 @@ - + @@ -43,7 +43,7 @@ the position property right after a call to the writeBytes() operation, and the position is set to that value (300) even after the write operation completes:

    var myFile:File = File.documentsDirectory.resolvePath("AIR Test/test.txt");
    var myFileStream:FileStream = new FileStream();
    myFileStream.openAsync(myFile, FileMode.UPDATE);
    myFileStream.position = 4000;
    trace(myFileStream.position); // 4000
    myFileStream.writeBytes(myByteArray, 0, 200);
    myFileStream.position = 300;
    trace(myFileStream.position); // 300
    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/the-read-buffer-and-the-bytesavailable-property-of-a-filestream-object.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/the-read-buffer-and-the-bytesavailable-property-of-a-filestream-object.html index 24fdf6479..d64d7aa57 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/the-read-buffer-and-the-bytesavailable-property-of-a-filestream-object.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/reading-and-writing-files/working-with-filestream-objects/the-read-buffer-and-the-bytesavailable-property-of-a-filestream-object.html @@ -16,7 +16,7 @@ - + @@ -58,7 +58,7 @@ by the position property. The position property may be the position of the last byte written, or it may be a different position, if the user specifies a different value for the position object after the write operation.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-directories.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-directories.html index 8d721bc96..99f14643d 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-directories.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-directories.html @@ -16,7 +16,7 @@ - + @@ -58,7 +58,7 @@ user's documents directory:

    var directory:File = File.documentsDirectory.resolvePath("AIR Test");
    directory.addEventListener(Event.COMPLETE, completeHandler)
    directory.deleteDirectoryAsync(true);

    function completeHandler(event:Event):void {
    trace("Deleted.")
    }

    Also included are the moveToTrash() and moveToTrashAsync() methods, which you can use to move a directory to the System trash. For details, see Moving a file to the trash.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-file-objects-in-air.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-file-objects-in-air.html index a8593cfc4..1ad957386 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-file-objects-in-air.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-file-objects-in-air.html @@ -16,7 +16,7 @@ - + @@ -271,7 +271,7 @@ in an exception. For a complete list of prevented filetypes, see the language reference entry for the File.openWithDefaultApplication() method.

    Note: This limitation does not exist for an AIR application installed using a native installer (an extended desktop application).

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-files.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-files.html index b5418c704..b8b86aff6 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-files.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-files.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@ of the application. Note that there is also a createTempDirectory() method, for creating a unique temporary directory in the System temporary directory.

    You may want to delete the temporary file before closing the application, as it is not automatically deleted on all devices.

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-storage-volumes.html b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-storage-volumes.html index 013c98b98..5bf3c1dae 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-storage-volumes.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-air-file-system-api/working-with-storage-volumes.html @@ -16,7 +16,7 @@ - + @@ -54,7 +54,7 @@ Determining space available on a volume.)

    More Help topics

    StorageVolume

    StorageVolumeInfo

    - + \ No newline at end of file diff --git a/docs/development/files-and-data/working-with-the-file-system/using-the-filereference-class.html b/docs/development/files-and-data/working-with-the-file-system/using-the-filereference-class.html index 378e35c1e..55bc369ae 100644 --- a/docs/development/files-and-data/working-with-the-file-system/using-the-filereference-class.html +++ b/docs/development/files-and-data/working-with-the-file-system/using-the-filereference-class.html @@ -16,7 +16,7 @@ - + @@ -225,7 +225,7 @@ individual file finishes uploading.

    Adobe recommends

    Load and Save Local Files

    In this video, Kevin Hoyt reveals the ease of loading and saving local content using Flash.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air.html b/docs/development/html-content-in-air.html index e7e2d36db..608822dd3 100644 --- a/docs/development/html-content-in-air.html +++ b/docs/development/html-content-in-air.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/about-the-html-environment.html b/docs/development/html-content-in-air/about-the-html-environment.html index 05a7ecf42..4a20a0d46 100644 --- a/docs/development/html-content-in-air/about-the-html-environment.html +++ b/docs/development/html-content-in-air/about-the-html-environment.html @@ -16,7 +16,7 @@ - + @@ -58,7 +58,7 @@ and Window transparency.

    More Help topics

    Webkit DOM Reference

    Safari HTML Reference

    Safari CSS Reference

    www.webkit.org

    Updating AIR applications

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/about-the-html-environment/air-and-webkit.html b/docs/development/html-content-in-air/about-the-html-environment/air-and-webkit.html index d41e190aa..3bd8cc083 100644 --- a/docs/development/html-content-in-air/about-the-html-environment/air-and-webkit.html +++ b/docs/development/html-content-in-air/about-the-html-environment/air-and-webkit.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ general reference on HTML, CSS, and DOM topics (of course, the WebKit and Mozilla engines are not identical).

    More Help topics

    JavaScript in AIR

    HTML in AIR

    CSS in AIR

    WebKit features not supported in AIR

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/about-the-html-environment/css-in-air.html b/docs/development/html-content-in-air/about-the-html-environment/css-in-air.html index 542de01e4..83e268e17 100644 --- a/docs/development/html-content-in-air/about-the-html-environment/css-in-air.html +++ b/docs/development/html-content-in-air/about-the-html-environment/css-in-air.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ nature and may be removed from a future version of WebKit. For more information about the Webkit support for CSS and its extensions to CSS, see Safari CSS Reference.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/about-the-html-environment/html-in-air.html b/docs/development/html-content-in-air/about-the-html-environment/html-in-air.html index 2ca8c6601..51849eb17 100644 --- a/docs/development/html-content-in-air/about-the-html-environment/html-in-air.html +++ b/docs/development/html-content-in-air/about-the-html-environment/html-in-air.html @@ -16,7 +16,7 @@ - + @@ -88,7 +88,7 @@ repeating background:

    <html>
    <head>
    <style>
    body {
    background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF%2F6cA%2F%2F%2F%2Fgxp3lwAAAAJ0Uk5T%2FwDltzBKAAABF0lEQVR42uzZQQ7CMAxE0e%2F7X5oNCyRocWzPiJbMBZ6qpIljE%2BnwklgKG7kwUjc2IkIaxkY0CPdEsCCasws6ShXBgmBBmEagpXQQLAgWBAuSY2gaKaWPYEGwIEwg0FRmECwIFoQeQjJlhJWUEFazjFDJCkI5WYRWMgjtfEGYyQnCXD4jTCdm1zmngFpBFznwVNi5RPSbwbWnpYr%2BBHi%2FtCTfgPLEPL7jBctAKBRptXJ8M%2BprIuZKu%2BUKcg4YK1PLz7kx4bSqHyPaT4d%2B28OCJJiRBo4FCQsSA0bziT3XubMgYUG6fc5fatmGBQkL0hoJ1IaZMiQsSFiQ8vRscTjlQOI2iHZwtpHuf%2BJAYiOiJSkj8Z%2FIQ4ABANvXGLd3%2BZMrAAAAAElFTkSuQmCC');
    background-repeat:repeat;
    }
    </style>
    </head>
    <body>
    </body>
    </html>

    When using data: URLS, be aware that extra whitespace is significant. For example, the data string must be entered as a single, unbroken line. Otherwise, the line breaks are treated as part of the data and the image cannot be decoded.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/about-the-html-environment/javascript-in-air.html b/docs/development/html-content-in-air/about-the-html-environment/javascript-in-air.html index 0916be9a2..40b00ee26 100644 --- a/docs/development/html-content-in-air/about-the-html-environment/javascript-in-air.html +++ b/docs/development/html-content-in-air/about-the-html-environment/javascript-in-air.html @@ -16,7 +16,7 @@ - + @@ -203,7 +203,7 @@ Working with AIR runtime and operating system information.

    The JavaScript URL scheme

    Execution of code defined in a JavaScript URL scheme (as in href="javascript:alert('Test')") is blocked within the application sandbox. No error is thrown.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/about-the-html-environment/overview-of-the-html-environment.html b/docs/development/html-content-in-air/about-the-html-environment/overview-of-the-html-environment.html index 25363ea16..afd405dfe 100644 --- a/docs/development/html-content-in-air/about-the-html-environment/overview-of-the-html-environment.html +++ b/docs/development/html-content-in-air/about-the-html-environment/overview-of-the-html-environment.html @@ -16,7 +16,7 @@ - + @@ -89,7 +89,7 @@ property for checking whether a user's system can display PDF. SWF file content can also be displayed within the HTML environment, but this capability is built in to AIR and does not use an external plug-in.

    No other WebKit plug-ins are supported in AIR.

    More Help topics

    HTML security in Adobe AIR

    HTML Sandboxes

    HTML frame and iframe elements

    JavaScript Window object

    The XMLHttpRequest object

    Adding PDF content in AIR

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/about-the-html-environment/webkit-features-not-supported-in-air.html b/docs/development/html-content-in-air/about-the-html-environment/webkit-features-not-supported-in-air.html index 42c516329..45603a329 100644 --- a/docs/development/html-content-in-air/about-the-html-environment/webkit-features-not-supported-in-air.html +++ b/docs/development/html-content-in-air/about-the-html-environment/webkit-features-not-supported-in-air.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ cross-domain communication APIs)

  • CSS variables

  • Web Open Font Format (WOFF) and SVG fonts.

  • HTML video and audio tags

  • Media device queries

  • Offline application cache

  • Printing (AIR provides its own PrintJob API)

  • Spelling and grammar checkers

  • SVG

  • WAI-ARIA

  • WebSockets (AIR provides its own socket APIs)

  • Web workers

  • WebKit SQL API (AIR provides its own API)

  • WebKit geolocation API (AIR provides its own geolocation API on supported devices)

  • WebKit multi-file upload API

  • WebKit touch events (AIR provides its own touch events)

  • Wireless Markup Language (WML)

  • The following lists contain specific JavaScript APIs, HTML elements, and CSS properties and values that AIR does not support:

    Unsupported JavaScript Window object members:

    • applicationCache()

    • console

    • openDatabase()

    • postMessage()

    • document.print()

    Unsupported HTML tags:

    • audio

    • video

    Unsupported HTML attributes:

    • aria-*

    • draggable

    • formnovalidate

    • list

    • novalidate

    • onbeforeload

    • onhashchange

    • onorientationchange

    • onpagehide

    • onpageshow

    • onpopstate

    • ontouchstart

    • ontouchmove

    • ontouchend

    • ontouchcancel

    • onwebkitbeginfullscreen

    • onwebkitendfullscreen

    • pattern

    • required

    • sandbox

    Unsupported JavaScript events:

    • beforeload

    • hashchange

    • orientationchange

    • pagehide

    • pageshow

    • popstate

    • touchstart

    • touchmove

    • touchend

    • touchcancel

    • webkitbeginfullscreen

    • webkitendfullscreen

    Unsupported CSS properties:

    • background-clip

    • background-origin (use -webkit-background-origin)

    • background-repeat-x

    • background-repeat-y

    • background-size (use -webkit-background-size)

    • border-bottom-left-radius

    • border-bottom-right-radius

    • border-radius

    • border-top-left-radius

    • border-top-right-radius

    • text-rendering

    • -webkit-animation-play-state

    • -webkit-background-clip

    • -webkit-color-correction

    • -webkit-font-smoothing

    Unsupported CSS values:

    • appearance property values:

      • media-volume-slider-container

      • media-volume-slider

      • media-volume-sliderthumb

      • outer-spin-button

    • border-box (background-clip and background-origin)

    • contain (background-size)

    • content-box (background-clip and background-origin)

    • cover (background-size)

    • list property values:

      • afar

      • amharic

      • amharic-abegede

      • cjk-earthly-branch

      • cjk-heavenly-stem

      • ethiopic

      • ethiopic-abegede

      • ethiopic-abegede-am-et

      • ethiopic-abegede-gez

      • ethiopic-abegede-ti-er

      • ethiopic-abegede-ti-et

      • ethiopic-halehame-aa-er

      • ethiopic-halehame-aa-et

      • ethiopic-halehame-am-et

      • ethiopic-halehame-gez

      • ethiopic-halehame-om-et

      • ethiopic-halehame-sid-et

      • ethiopic-halehame-so-et

      • ethiopic-halehame-ti-er

      • ethiopic-halehame-ti-et

      • ethiopic-halehame-tig

      • hangul

      • hangul-consonant

      • lower-norwegian

      • oromo

      • sidama

      • somali

      • tigre

      • tigrinya-er

      • tigrinya-er-abegede

      • tigrinya-et

      • tigrinya-et-abegede

      • upper-greek

      • upper-norwegian

    • -wap-marquee (display property)

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/displaying-html-content-in-mobile-apps.html b/docs/development/html-content-in-air/displaying-html-content-in-mobile-apps.html index e1ab8295c..0cf0536b6 100644 --- a/docs/development/html-content-in-air/displaying-html-content-in-mobile-apps.html +++ b/docs/development/html-content-in-air/displaying-html-content-in-mobile-apps.html @@ -16,7 +16,7 @@ - + @@ -94,7 +94,7 @@ Mark Doherty demonstrates how to log in to an OAuth protected site like Twitter using the StageWebView class.

    Making the most of StageWebView

    Sean Voisen

    HTML Web View in Air for Android

    Jonathan Campos

    Create a basic web browser with StageWebView

    Rich Tretola

    AIR Mobile StageWebView UIComponent

    Sönke Rohde

    Using StageWebView within a UIComponent in Mobile

    Judah Frangipane

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/handling-html-related-events-in-air.html b/docs/development/html-content-in-air/handling-html-related-events-in-air.html index ec7be59ec..9ebb01ff5 100644 --- a/docs/development/html-content-in-air/handling-html-related-events-in-air.html +++ b/docs/development/html-content-in-air/handling-html-related-events-in-air.html @@ -16,7 +16,7 @@ - + @@ -84,7 +84,7 @@ removes its own event listener using the removeEventListener() function:

    var html = runtime.flash.html.HTMLLoader.createRootWindow(true);
    html.addEventListener('complete', htmlCompleteListener);
    function htmlCompleteListener()
    {
    html.removeEventListener(complete, arguments.callee);
    // handler code..
    }
    html.load(new runtime.flash.net.URLRequest("second.html"));

    Removing unneeded event listeners also allows the system garbage collector to reclaim any memory associated with those listeners.

    Checking for existing event listeners

    The hasEventListener() method lets you check for the existence of an event listener on an object.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air.html index e4cd8f7d4..65eff69a8 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ programming an HTML-based AIR application or programming a SWF-based AIR application that runs HTML and JavaScript using the HTMLLoader class (or mx:HTML Flex™ component).

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/about-the-htmlloader-class.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/about-the-htmlloader-class.html index 399132f57..f821d07c6 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/about-the-htmlloader-class.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/about-the-htmlloader-class.html @@ -16,7 +16,7 @@ - + @@ -84,7 +84,7 @@ for JavaScript code in the application security sandbox."

    To avoid this error, follow the coding practices described in the next section, Avoiding security-related JavaScript errors.

    For more information, see HTML security in Adobe AIR.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/about-urls-in-air.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/about-urls-in-air.html index 63e4af7e1..ce31c7037 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/about-urls-in-air.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/about-urls-in-air.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ schemes. For example, the following statement creates a URLRequest object that can be used to request the Adobe home page:

    var urlReq = new air.URLRequest("https://www.adobe.com/");

    For information about URLRequest objects see HTTP communications.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/accessing-air-api-classes-from-javascript.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/accessing-air-api-classes-from-javascript.html index 3dc3c860f..de0167def 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/accessing-air-api-classes-from-javascript.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/accessing-air-api-classes-from-javascript.html @@ -16,7 +16,7 @@ - + @@ -46,7 +46,7 @@ ECMAScript language.) All built-in classes are available in both JavaScript (in HTML content) and ActionScript (in SWF content).

    Note: JavaScript code cannot use the Dictionary, XML, and XMLList classes, which are available in ActionScript.

    More Help topics

    Using the AIRAliases.js file

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/accessing-html-dom-and-javascript-objects-from-actionscript.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/accessing-html-dom-and-javascript-objects-from-actionscript.html index 90cd437fc..cd7f7a817 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/accessing-html-dom-and-javascript-objects-from-actionscript.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/accessing-html-dom-and-javascript-objects-from-actionscript.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ following example sets the contents of the p1 element and the value of the foo JavaScript variable on the page using a reference to the containing HTMLLoader object:

    html.window.document.getElementById("p1").innerHTML = "Goodbye";
    html.window.foo = 66;
    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/avoiding-security-related-javascript-errors.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/avoiding-security-related-javascript-errors.html index 02c5ffe0d..a087377d8 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/avoiding-security-related-javascript-errors.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/avoiding-security-related-javascript-errors.html @@ -16,7 +16,7 @@ - + @@ -66,7 +66,7 @@ be initiated, but do not return until after the load event. After the load event has been handled, synchronous XMLHttpRequests behave normally.

    Dynamically created script elements

    Dynamically created script elements, such as when created with innerHTML or document.createElement() method are ignored.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/converting-date-and-regexp-objects.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/converting-date-and-regexp-objects.html index 88d31fc28..0a9dbab54 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/converting-date-and-regexp-objects.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/converting-date-and-regexp-objects.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ execution context.

    For example, the following ActionScript code converts a JavaScript Date object named jsDate to an ActionScript Date object:

    var asDate:Date = new Date(jsDate.getMilliseconds());

    The following ActionScript code converts a JavaScript RegExp object named jsRegExp to an ActionScript RegExp object:

    var flags:String = "";
    if (jsRegExp.dotAll) flags += "s";
    if (jsRegExp.extended) flags += "x";
    if (jsRegExp.global) flags += "g";
    if (jsRegExp.ignoreCase) flags += "i";
    if (jsRegExp.multiline) flags += "m";
    var asRegExp:RegExp = new RegExp(jsRegExp.source, flags);
    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/cross-scripting-content-in-different-security-sandboxes.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/cross-scripting-content-in-different-security-sandboxes.html index ca7e18a9c..99ba50f40 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/cross-scripting-content-in-different-security-sandboxes.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/cross-scripting-content-in-different-security-sandboxes.html @@ -16,7 +16,7 @@ - + @@ -119,7 +119,7 @@ uses frames to load the child document. You can then establish the bridge from the parent document of the new window to the child document loaded into the frame.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/embedding-swf-content-in-html.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/embedding-swf-content-in-html.html index 3699455cf..58321259e 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/embedding-swf-content-in-html.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/embedding-swf-content-in-html.html @@ -16,7 +16,7 @@ - + @@ -50,7 +50,7 @@ can load an external image file using a relative path.

    The following example depicts how external assets can be loaded through a SWF object embedded in an HTML content:

    var imageLoader;

    function showSWF(urlString, elementID){
    var displayContainer = document.getElementById(elementID);
    imageLoader = createSWFObject(urlString,650,650);
    displayContainer.appendChild(imageLoader);
    }

    function createSWFObject(urlString, width, height){
    var SWFObject = document.createElement("object");
    SWFObject.setAttribute("type","application/x-shockwave-flash");
    SWFObject.setAttribute("width","100%");
    SWFObject.setAttribute("height","100%");

    var movieParam = document.createElement("param");
    movieParam.setAttribute("name","movie");
    movieParam.setAttribute("value",urlString);
    SWFObject.appendChild(movieParam);

    var flashVars = document.createElement("param");
    flashVars.setAttribute("name","FlashVars");

    //Load the asset inside the SWF content.
    flashVars.setAttribute("value","imgPath=air.jpg");
    SWFObject.appendChild(flashVars);

    return SWFObject;
    }
    function loadImage()
    {
    showSWF("ImageLoader.swf", "imageSpot");
    }

    In the following ActionScript example, the image path passed by the HTML file is read and the image is loaded on stage:

    package
    {
    import flash.display.Sprite;
    import flash.display.LoaderInfo;
    import flash.display.StageScaleMode;
    import flash.display.StageAlign;
    import flash.display.Loader;
    import flash.net.URLRequest;

    public class ImageLoader extends Sprite
    {
    public function ImageLoader()
    {
    var flashvars = LoaderInfo(this.loaderInfo).parameters;

    if(flashvars.imgPath){
    var imageLoader = new Loader();
    var image = new URLRequest(flashvars.imgPath);
    imageLoader.load(image);
    addChild(imageLoader);
    imageLoader.x = 0;
    imageLoader.y = 0;
    stage.scaleMode=StageScaleMode.NO_SCALE;
    stage.align=StageAlign.TOP_LEFT;
    }
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/making-actionscript-objects-available-to-javascript.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/making-actionscript-objects-available-to-javascript.html index 1c0109bac..0f6394d4c 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/making-actionscript-objects-available-to-javascript.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/making-actionscript-objects-available-to-javascript.html @@ -16,7 +16,7 @@ - + @@ -55,7 +55,7 @@ object in an HTML page that is no longer loaded." Removing unneeded event listeners also lets AIR reclaim the associated memory. For more information, see Removing event listeners in HTML pages that navigate.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/manipulating-an-html-stylesheet-from-actionscript.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/manipulating-an-html-stylesheet-from-actionscript.html index 6eba0243d..9e2969003 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/manipulating-an-html-stylesheet-from-actionscript.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/manipulating-an-html-stylesheet-from-actionscript.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ as shown here:

    var html:HTMLLoader = new HTMLLoader();
    var urlReq:URLRequest = new URLRequest("test.html");
    html.load(urlReq);
    html.addEventListener(Event.COMPLETE, completeHandler);
    function completeHandler(event:Event):void {
    var styleSheet0:Object = html.window.document.styleSheets[0];
    styleSheet0.cssRules[0].style.fontSize = "32px";
    styleSheet0.cssRules[1].style.color = "#FF0000";
    var styleSheet1:Object = html.window.document.styleSheets[1];
    styleSheet1.cssRules[0].style.color = "blue";
    styleSheet1.cssRules[0].style.font-family = "Monaco";
    }

    This code adjusts the CSS styles so that the resulting HTML document appears like the following:

    Keep in mind that code can add styles to the page after the HTMLLoader object dispatches the complete event.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/using-actionscript-libraries-within-an-html-page.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/using-actionscript-libraries-within-an-html-page.html index 3330c14dd..dc53c0513 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/using-actionscript-libraries-within-an-html-page.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/using-actionscript-libraries-within-an-html-page.html @@ -16,7 +16,7 @@ - + @@ -51,7 +51,7 @@ on the page:

    public function modifyDOM(window:*):void {
    window.document.getElementById("p1").innerHTML = "Bye";
    window.foo = 66;
    }

    More Help topics

    Specifying the required AIR version

    Using compc, the component compiler

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/using-the-airaliases-js-file.html b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/using-the-airaliases-js-file.html index c97fb0c9c..909a08663 100644 --- a/docs/development/html-content-in-air/programming-html-and-javascript-in-air/using-the-airaliases-js-file.html +++ b/docs/development/html-content-in-air/programming-html-and-javascript-in-air/using-the-airaliases-js-file.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ your HTML page:

    <script src="AIRAliases.js"></script>

    Adjust the path in the src reference, as needed.

    Important: Except where noted, the JavaScript example code in this documentation assumes that you have included the AIRAliases.js file in your HTML page.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/scripting-the-air-html-container.html b/docs/development/html-content-in-air/scripting-the-air-html-container.html index a40f9ad71..c1aba1766 100644 --- a/docs/development/html-content-in-air/scripting-the-air-html-container.html +++ b/docs/development/html-content-in-air/scripting-the-air-html-container.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ object by setting the htmlHost property of the object using a new HTMLHost object created with the defaultBehavior parameter set to true.

    Note: In the Adobe® Flex™ Framework, the HTMLLoader object is wrapped by the mx:HTML component. When using Flex, use the HTML component.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/scripting-the-air-html-container/accessing-the-html-history-list.html b/docs/development/html-content-in-air/scripting-the-air-html-container/accessing-the-html-history-list.html index fc8c97ed2..caef9a365 100644 --- a/docs/development/html-content-in-air/scripting-the-air-html-container/accessing-the-html-history-list.html +++ b/docs/development/html-content-in-air/scripting-the-air-html-container/accessing-the-html-history-list.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ methods that let you work with the HTML history list:

    Class memberDescription
    historyLengthThe overall length of the history list, including back and forward entries.
    historyPositionThe current position in the history list. History items before this position represent "back" navigation, and items after this position represent "forward" navigation.
    getHistoryAt()Returns the URLRequest object corresponding to the history entry at the specified position in the history list.
    historyBack()Navigates back in the history list, if possible.
    historyForward()Navigates forward in the history list, if possible.
    historyGo()Navigates the indicated number of steps in the browser history. Navigates forward if positive, backward if negative. Navigating to zero reloads the page. Specifying a position beyond the end navigates to the end of the list.

    Items in the history list are stored as objects of type HTMLHistoryItem. The HTMLHistoryItem class has the following properties:

    PropertyDescription
    isPostSet to true if the HTML page includes POST data.
    originalUrlThe original URL of the HTML page, before any redirects.
    titleThe title of the HTML page.
    urlThe URL of the HTML page.
    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/scripting-the-air-html-container/creating-subclasses-of-the-htmlloader-class.html b/docs/development/html-content-in-air/scripting-the-air-html-container/creating-subclasses-of-the-htmlloader-class.html index 11dd21136..91e10631d 100644 --- a/docs/development/html-content-in-air/scripting-the-air-html-container/creating-subclasses-of-the-htmlloader-class.html +++ b/docs/development/html-content-in-air/scripting-the-air-html-container/creating-subclasses-of-the-htmlloader-class.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ MyHTMLHost object to its htmlHost property:

    package
    {
    import flash.html.HTMLLoader;
    public class MyHTML extends HTMLLoader
    {
    public function MyHTML()
    {
    super();
    htmlHost = new MyHTMLHost();
    }
    }
    }

    For details on the HTMLHost class and the HTMLLoader.createRootWindow() method used in this example, see Defining browser-like user interfaces for HTML content.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/scripting-the-air-html-container/defining-browser-like-user-interfaces-for-html-content.html b/docs/development/html-content-in-air/scripting-the-air-html-container/defining-browser-like-user-interfaces-for-html-content.html index a07bfa9ab..6e6c351aa 100644 --- a/docs/development/html-content-in-air/scripting-the-air-html-container/defining-browser-like-user-interfaces-for-html-content.html +++ b/docs/development/html-content-in-air/scripting-the-air-html-container/defining-browser-like-user-interfaces-for-html-content.html @@ -16,7 +16,7 @@ - + @@ -109,7 +109,7 @@ createRootWindow() indirectly by overriding the HTMLHost createWindow() method to call createRootWindow(), then opener and parent do reference the opening HTML window.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/scripting-the-air-html-container/display-properties-of-htmlloader-objects.html b/docs/development/html-content-in-air/scripting-the-air-html-container/display-properties-of-htmlloader-objects.html index 60e41e558..9f6b0a4cb 100644 --- a/docs/development/html-content-in-air/scripting-the-air-html-container/display-properties-of-htmlloader-objects.html +++ b/docs/development/html-content-in-air/scripting-the-air-html-container/display-properties-of-htmlloader-objects.html @@ -16,7 +16,7 @@ - + @@ -75,7 +75,7 @@ could blur the display of the main window until the user closes the dialog. Likewise, you could fade the display out when closing a window.

    The advanced display properties include:

    PropertyLimitations
    alphaCan reduce the legibility of HTML content
    filtersIn an HTML Window, exterior effects are clipped by the window edge
    graphicsShapes drawn with graphics commands appear below HTML content, including the default background. The paintsDefaultBackground property must be false for the drawn shapes to be visible.
    opaqueBackgroundDoes not change the color of the default background. The paintsDefaultBackground property must be false for this color layer to be visible.
    rotationThe corners of the rectangular HTMLLoader area can be clipped by the window edge. SWF and PDF content loaded in the HTML content is not displayed.
    scaleX, scaleYThe rendered display can appear pixelated at scale factors greater than 1. SWF and PDF content loaded in the HTML content is not displayed.
    transformCan reduce legibility of HTML content. The HTML display can be clipped by the window edge. SWF and PDF content loaded in the HTML content is not displayed if the transform involves rotation, scaling, or skewing.

    The following example illustrates how to set the filters array to blur the entire HTML display:

    var html:HTMLLoader = new HTMLLoader();
    var urlReq:URLRequest = new URLRequest("https://www.adobe.com/");
    html.load(urlReq);
    html.width = 800;
    html.height = 600;

    var blur:BlurFilter = new BlurFilter(8);
    var filters:Array = [blur];
    html.filters = filters;
    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/scripting-the-air-html-container/scrolling-html-content.html b/docs/development/html-content-in-air/scripting-the-air-html-container/scrolling-html-content.html index c117a46f0..6eaa71a15 100644 --- a/docs/development/html-content-in-air/scripting-the-air-html-container/scrolling-html-content.html +++ b/docs/development/html-content-in-air/scripting-the-air-html-container/scrolling-html-content.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ use the HTMLLoader.createRootWindow() method to create a window that contains an HTMLLoader object with scroll bars (see Creating windows with scrolling HTML content).

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/scripting-the-air-html-container/setting-the-character-encoding-to-use-for-html-content.html b/docs/development/html-content-in-air/scripting-the-air-html-container/setting-the-character-encoding-to-use-for-html-content.html index f31140205..29cc9f568 100644 --- a/docs/development/html-content-in-air/scripting-the-air-html-container/setting-the-character-encoding-to-use-for-html-content.html +++ b/docs/development/html-content-in-air/scripting-the-air-html-container/setting-the-character-encoding-to-use-for-html-content.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ the textEncodingOverride property and the setting in the HTML page override the textEncodingFallback property.

    Set the textEncodingOverride property or the textEncodingFallback property before loading the HTML content.

    - + \ No newline at end of file diff --git a/docs/development/html-content-in-air/scripting-the-air-html-container/setting-the-user-agent-when-loading-html-content.html b/docs/development/html-content-in-air/scripting-the-air-html-container/setting-the-user-agent-when-loading-html-content.html index f9e1117db..eb9fec4f4 100644 --- a/docs/development/html-content-in-air/scripting-the-air-html-container/setting-the-user-agent-when-loading-html-content.html +++ b/docs/development/html-content-in-air/scripting-the-air-html-container/setting-the-user-agent-when-loading-html-content.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ user agent value is used. This default value varies depending on the runtime operating system (such as Mac OS or Windows), the runtime language, and the runtime version, as in the following two examples:

    • "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) AdobeAIR/1.0"

    • "Mozilla/5.0 (Windows; U; en) AppleWebKit/420+ (KHTML, like Gecko) AdobeAIR/1.0"

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications.html b/docs/development/internationalizing-applications.html index 5ca5e4b95..89e3ce06d 100644 --- a/docs/development/internationalizing-applications.html +++ b/docs/development/internationalizing-applications.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications.html b/docs/development/internationalizing-applications/internationalizing-applications.html index 6c3c51810..a338f9d8b 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications.html +++ b/docs/development/internationalizing-applications/internationalizing-applications.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ flash.globalization package

    Localization

    Localizing AIR applications

    Charles Bihis: Want to Localize your Flex/AIR Apps?

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/basics-of-internationalizing-applications.html b/docs/development/internationalizing-applications/internationalizing-applications/basics-of-internationalizing-applications.html index c46317321..ca8e61834 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/basics-of-internationalizing-applications.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/basics-of-internationalizing-applications.html @@ -16,7 +16,7 @@ - + @@ -62,7 +62,7 @@ contain other settings that alter the layout or behavior of the user interface for a specific locale. A resource bundle can contain other media types, or references to other media types, that are locale-specific.

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/case-conversion.html b/docs/development/internationalizing-applications/internationalizing-applications/case-conversion.html index 0a5919c96..d9e6e9109 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/case-conversion.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/case-conversion.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ transform a German phrase that includes the letter "ß" (sharp S).

    var phrase:String = "Schloß Neuschwanstein";
    var converter:StringTools = new StringTools("de-DE");

    var upperPhrase:String = converter.toUpperCase(phrase);
    trace(upperPhrase); // SCHLOSS NEUSCHWANSTEIN

    var lowerPhrase:String = converter.toLowerCase(upperPhrase);
    trace(lowerPhrase); // schloss neuschwanstein

    The toUpperCase() method transforms the lowercase letter "ß" into the uppercase letters "SS". This transformation works only in one direction. When the letters "SS" are transformed back to lowercase, the result is "ss" not "ß".

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/determining-the-locale.html b/docs/development/internationalizing-applications/internationalizing-applications/determining-the-locale.html index b1f61f02c..6f63a1fcf 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/determining-the-locale.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/determining-the-locale.html @@ -16,7 +16,7 @@ - + @@ -59,7 +59,7 @@ ID—and it only supports a specific set of locales.

    With AIR 1.5, you can use the flash.system.Capabilities.languages property. This property provides an array of the user's preferred user interface languages. Thus, it does not have the limitations of Capabilities.language.

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/example-internationalizing-a-stock-ticker-application.html b/docs/development/internationalizing-applications/internationalizing-applications/example-internationalizing-a-stock-ticker-application.html index 6a357fc3a..97bec2f9d 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/example-internationalizing-a-stock-ticker-application.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/example-internationalizing-a-stock-ticker-application.html @@ -16,7 +16,7 @@ - + @@ -50,7 +50,7 @@ columns:

    var col1:DataGridColumn = new DataGridColumn("ticker");
    col1.headerText = "Company";
    col1.sortOptions = Array.NUMERIC;
    col1.width = 200;

    var col2:DataGridColumn = new DataGridColumn("volume");
    col2.headerText = "Volume";
    col2.width = 120;
    col2.cellRenderer = RightAlignedCell;
    col2.labelFunction = displayVolume;

    var col3:DataGridColumn = new DataGridColumn("price");
    col3.headerText = "Price";
    col3.width = 70;
    col3.cellRenderer = RightAlignedCell;
    col3.labelFunction = displayPrice;

    var col4:DataGridColumn = new DataGridColumn("change");
    col4.headerText = "Change";
    col4.width = 120;
    col4.cellRenderer = RightAlignedCell;
    col4.labelFunction = displayPercent;

    The Flex version of the example declares its DataGrid in MXML. It also defines similar label functions for each column.

    The labelFunction properties refer to the following functions, which call formatting methods of the Localizer class:

    private function displayVolume(item:Object):String
    {
    return localizer.formatNumber(item.volume, 0);
    }

    private function displayPercent(item:Object):String
    {
    return localizer.formatPercent(item.change ) ;
    }

    private function displayPrice(item:Object):String
    {
    return localizer.formatCurrency(item.price);
    }

    The Localizer methods then set up and call the appropriate formatters:

    public function formatNumber(value:Number, fractionalDigits:int = 2):String
    {
    nf.fractionalDigits = fractionalDigits;
    return nf.formatNumber(value);
    }

    public function formatPercent(value:Number, fractionalDigits:int = 2):String
    {
    // HACK WARNING: The position of the percent sign, and whether a space belongs
    // between it and the number, are locale-sensitive decisions. For example,
    // in Turkish the positive format is %12 and the negative format is -%12.
    // Like most operating systems, flash.globalization classes do not currently
    // provide an API for percentage formatting.
    nf.fractionalDigits = fractionalDigits;
    return nf.formatNumber(value) + "%";
    }

    public function formatCurrency(value:Number):String
    {
    return cf.format(value, symbolIsSafe);
    }

    public function formatDate(dateValue:Date):String
    {
    return df.format(dateValue);
    }
    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/formatting-currency-values.html b/docs/development/internationalizing-applications/internationalizing-applications/formatting-currency-values.html index 75b776acd..2024665a7 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/formatting-currency-values.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/formatting-currency-values.html @@ -16,7 +16,7 @@ - + @@ -65,7 +65,7 @@ locale specifies that the negative indicator comes first. As a result, the parse() method generates an error and the parsed value is NaN.

    After it sets the negativeCurrencyFormat to 2, which specifies that the currency string comes first, the parse() method succeeds.

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/formatting-dates-and-times.html b/docs/development/internationalizing-applications/internationalizing-applications/formatting-dates-and-times.html index e37e1ea8c..566e218a6 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/formatting-dates-and-times.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/formatting-dates-and-times.html @@ -16,7 +16,7 @@ - + @@ -49,7 +49,7 @@ names of the days of the week. The getWeekdayNames() method accepts the same nameStyle and context parameters that the getMonthNames() method does.

    var dtf:DateTimeFormatter = new DateTimeFormatter("fr-FR");
    var weekdays:Vector.<String> = dtf.getWeekdayNames(DateTimeNameStyle.FULL,
    DateTimeNameContext.STANDALONE);
    trace(weekdays[0]); // dimanche
    weekdays = dtf.getWeekdayNames(DateTimeNameStyle.LONG_ABBREVIATION,
    DateTimeNameContext.STANDALONE);
    trace(weekdays[0]); // dim.

    In addition, the getFirstWeekday() method returns the index value of the day that traditionally marks the beginning of the week in the selected locale.

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/formatting-numbers.html b/docs/development/internationalizing-applications/internationalizing-applications/formatting-numbers.html index ecba420c1..e0da34542 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/formatting-numbers.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/formatting-numbers.html @@ -16,7 +16,7 @@ - + @@ -57,7 +57,7 @@ of the first numeric character that was found. You can use the startIndex and endIndex properties to extract the portions of the string that come before and after the digits.

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/overview-of-the-flash-globalization-package.html b/docs/development/internationalizing-applications/internationalizing-applications/overview-of-the-flash-globalization-package.html index 641473d0c..95dbacd5b 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/overview-of-the-flash-globalization-package.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/overview-of-the-flash-globalization-package.html @@ -16,7 +16,7 @@ - + @@ -45,7 +45,7 @@ there is an error. Your application can perform additional error handling logic, if needed. For example, you could display a message to the user or force the application to use a specific, supported locale.

    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/internationalizing-applications/sorting-and-comparing-strings.html b/docs/development/internationalizing-applications/internationalizing-applications/sorting-and-comparing-strings.html index 889c243e6..dbb765a0f 100644 --- a/docs/development/internationalizing-applications/internationalizing-applications/sorting-and-comparing-strings.html +++ b/docs/development/internationalizing-applications/internationalizing-applications/sorting-and-comparing-strings.html @@ -16,7 +16,7 @@ - + @@ -46,7 +46,7 @@ setting various properties. The following table lists the properties and the effect they have upon comparisons:

    Collator PropertyEffect
    numericComparisonControls whether digit characters are treated as numbers or as text.
    ignoreCaseControls whether uppercase and lowercase differences are ignored.
    ignoreCharacterWidthControls whether full-width and half-width forms of some Chinese and Japanese characters are evaluated as equal.
    ignoreDiacriticsControls whether strings that use the same base characters but different accents or other diacritic marks are evaluated as equal.
    ignoreKanaTypeControls whether strings that differ only by the type of kana character being used are treated as equal.
    ignoreSymbolsControls whether symbol characters such as spaces, currency symbols, math symbols, and others are ignored.

    The following code shows that setting the ignoreDiacritics property to true changes the sort order of a list of French words:

    var words:Array = new  Array("COTE", "coté", "côte", "Coté","cote");
    var sorter:Collator = new Collator("fr-CA", CollatorMode.SORTING);
    words.sort(sorter.compare);
    trace(words); // cote,COTE,côte,coté,Coté

    sorter.ignoreDiacritics = true;
    words.sort(sorter.compare);
    trace(words); // côte,coté,cote,Coté,COTE
    - + \ No newline at end of file diff --git a/docs/development/internationalizing-applications/localizing-applications.html b/docs/development/internationalizing-applications/localizing-applications.html index d01b9b5c8..74bce4c2a 100644 --- a/docs/development/internationalizing-applications/localizing-applications.html +++ b/docs/development/internationalizing-applications/localizing-applications.html @@ -16,7 +16,7 @@ - + @@ -83,7 +83,7 @@ Localization

    http://code.google.com/p/as3localelib/

    Localizing AIR applications

    Localizing HTML content with the AIR HTML localization framework

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication.html b/docs/development/networking-and-communication.html index c3d59567e..9786de390 100644 --- a/docs/development/networking-and-communication.html +++ b/docs/development/networking-and-communication.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/basics-of-networking-and-communication.html b/docs/development/networking-and-communication/basics-of-networking-and-communication.html index 4752b1684..2f5b0451f 100644 --- a/docs/development/networking-and-communication/basics-of-networking-and-communication.html +++ b/docs/development/networking-and-communication/basics-of-networking-and-communication.html @@ -16,7 +16,7 @@ - + @@ -139,7 +139,7 @@ records:

    • ARecord—IPv4 address for a host.

    • AAAARecord—IPv6 address for a host.

    • MXRecord—mail exchange record for a host.

    • PTRRecord—host name for an IP address.

    • SRVRecord—service record for a service.

    To look up a record, you pass a query string and the class object representing the record type to the lookup() method of the DNSResolver object. The query string to use depends on the record type:

    Record classQuery stringExample query string
    ARecordhost name"example.com"
    AAAARecordhost name"example.com"
    MXRecordhost name"example.com"
    PTRRecordIP address"208.77.188.166"
    SRVRecordService identifier: _service._protocol.host"_sip._tcp.example.com"

    The following code example looks up the IP address of the host "example.com".

    package
    {
    import flash.display.Sprite;
    import flash.events.DNSResolverEvent;
    import flash.events.ErrorEvent;
    import flash.net.dns.ARecord;
    import flash.net.dns.DNSResolver;

    public class DNSResolverExample extends Sprite
    {

    public function DNSResolverExample()
    {
    var resolver:DNSResolver = new DNSResolver();
    resolver.addEventListener( DNSResolverEvent.LOOKUP, lookupComplete );
    resolver.addEventListener( ErrorEvent.ERROR, lookupError );

    resolver.lookup( "example.com.", ARecord );
    }

    private function lookupComplete( event:DNSResolverEvent ):void
    {
    trace( "Query string: " + event.host );
    trace( "Record count: " + event.resourceRecords.length );
    for each( var record:* in event.resourceRecords )
    {
    if( record is ARecord ) trace( record.address );
    }

    }

    private function lookupError( error:ErrorEvent ):void
    {
    trace("Error: " + error.text );
    }
    }
    }

    For more information, see:

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/communicating-with-native-processes-in-air.html b/docs/development/networking-and-communication/communicating-with-native-processes-in-air.html index baaea1208..98d60c1ea 100644 --- a/docs/development/networking-and-communication/communicating-with-native-processes-in-air.html +++ b/docs/development/networking-and-communication/communicating-with-native-processes-in-air.html @@ -16,7 +16,7 @@ - + @@ -98,7 +98,7 @@ Application profiles

    flash.filesystem.File.openWithDefaultApplication()

    flash.desktop.NativeProcess

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/communicating-with-other-flash-player-and-air-instances.html b/docs/development/networking-and-communication/communicating-with-other-flash-player-and-air-instances.html index 68e10bfb6..dfe4f8653 100644 --- a/docs/development/networking-and-communication/communicating-with-other-flash-player-and-air-instances.html +++ b/docs/development/networking-and-communication/communicating-with-other-flash-player-and-air-instances.html @@ -16,7 +16,7 @@ - + @@ -177,7 +177,7 @@ (As of AIR 1.5.3, not all AIR applications have publisher IDs.)

    More Help topics

    Setting AIR application properties

    Getting the application and publisher identifiers

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/http-communications.html b/docs/development/networking-and-communication/http-communications.html index b1491a9c3..05d40097f 100644 --- a/docs/development/networking-and-communication/http-communications.html +++ b/docs/development/networking-and-communication/http-communications.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ flash.net.URLRequestHeader

    flash.net.URLRequestMethod

    flash.net.URLVariables

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/http-communications/loading-external-data.html b/docs/development/networking-and-communication/http-communications/loading-external-data.html index dca74979a..7f245062d 100644 --- a/docs/development/networking-and-communication/http-communications/loading-external-data.html +++ b/docs/development/networking-and-communication/http-communications/loading-external-data.html @@ -16,7 +16,7 @@ - + @@ -173,7 +173,7 @@ earlier. Finally, the URLLoader instance is created and the URLLoader.load() method is invoked, which initiates the request.

    var variables:URLVariables = new URLVariables("name=Franklin");
    var request:URLRequest = new URLRequest();
    request.url = "http://www.[yourdomain].com/greeting.cfm";
    request.method = URLRequestMethod.POST;
    request.data = variables;
    var loader:URLLoader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.addEventListener(Event.COMPLETE, completeHandler);
    try
    {
    loader.load(request);
    }
    catch (error:Error)
    {
    trace("Unable to load URL");
    }

    function completeHandler(event:Event):void
    {
    trace(event.target.data.welcomeMessage);
    }

    The following code contains the contents of the Adobe ColdFusion® greeting.cfm document used in the previous example:

    <cfif NOT IsDefined("Form.name") OR Len(Trim(Form.Name)) EQ 0>
    <cfset Form.Name = "Stranger" />
    </cfif>
    <cfoutput>welcomeMessage=#UrlEncodedFormat("Welcome, " & Form.name)#
    </cfoutput>
    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/http-communications/opening-a-url-in-another-application.html b/docs/development/networking-and-communication/http-communications/opening-a-url-in-another-application.html index a9ed4b55c..6d36dfa48 100644 --- a/docs/development/networking-and-communication/http-communications/opening-a-url-in-another-application.html +++ b/docs/development/networking-and-communication/http-communications/opening-a-url-in-another-application.html @@ -16,7 +16,7 @@ - + @@ -55,7 +55,7 @@ application

    All other URI schemes are prohibited.

    Local-trusted sandbox

    The following schemes are allowed. Use these schemes as you would use them in a web browser.

    • file:

    • http:

    • https:

    • mailto: — AIR directs these requests to the registered system mail application

    All other URI schemes are prohibited.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/http-communications/web-service-requests.html b/docs/development/networking-and-communication/http-communications/web-service-requests.html index 80860423d..e7b4e134a 100644 --- a/docs/development/networking-and-communication/http-communications/web-service-requests.html +++ b/docs/development/networking-and-communication/http-communications/web-service-requests.html @@ -16,7 +16,7 @@ - + @@ -43,7 +43,7 @@ XMLHttpRequests. You can allow content in other security sandboxes to make cross-domain XMLHttpRequests as long as that content is loaded into an iframe.

    More Help topics

    Website controls (policy files)

    REST-style web service requests

    XML-RPC web service requests

    SOAP web service requests

    Accessing server-side data

    Adobe BlazeDS

    Apache BlazeDS

    Adobe LiveCycle ES2

    REST architecture

    XML-RPC

    SOAP protocol

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/http-communications/web-service-requests/rest-style-web-service-requests.html b/docs/development/networking-and-communication/http-communications/web-service-requests/rest-style-web-service-requests.html index 36e24da7a..6622eaf0e 100644 --- a/docs/development/networking-and-communication/http-communications/web-service-requests/rest-style-web-service-requests.html +++ b/docs/development/networking-and-communication/http-communications/web-service-requests/rest-style-web-service-requests.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ call parameters back to the requestor. The following ActionScript code could be used to call the service:

    import flash.events.Event;
    import flash.events.ErrorEvent;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.net.URLRequestMethod;
    import flash.net.URLVariables;

    private var requestor:URLLoader = new URLLoader();
    public function restServiceCall():void
    {
    //Create the HTTP request object
    var request:URLRequest = new URLRequest( "http://service.example.com/" );
    request.method = URLRequestMethod.GET;

    //Add the URL variables
    var variables:URLVariables = new URLVariables();
    variables.method = "test.echo";
    variables.api_key = "123456ABC";
    variables.message = "Able was I, ere I saw Elba.";
    request.data = variables;

    //Initiate the transaction
    requestor = new URLLoader();
    requestor.addEventListener( Event.COMPLETE, httpRequestComplete );
    requestor.addEventListener( IOErrorEvent.IOERROR, httpRequestError );
    requestor.addEventListener( SecurityErrorEvent.SECURITY_ERROR, httpRequestError );
    requestor.load( request );
    }
    private function httpRequestComplete( event:Event ):void
    {
    trace( event.target.data );
    }

    private function httpRequestError( error:ErrorEvent ):void{
    trace( "An error occured: " + error.message );
    }

    In JavaScript within an AIR application, you can make the same request using the XMLHttpRequest object:

    <html>
    <head>
    <title>RESTful web service request</title>
    <script type="text/javascript">
    function makeRequest()
    {
    var requestDisplay = document.getElementById( "request" );
    var resultDisplay = document.getElementById( "result" );

    //Create a conveninece object to hold the call properties
    var request = {};
    request.URL = "http://service.example.com/";
    request.method = "test.echo";
    request.HTTPmethod = "GET";
    request.parameters = {};
    request.parameters.api_key = "ABCDEF123";
    request.parameters.message = "Able was I ere I saw Elba.";
    var requestURL = makeURL( request );
    xmlhttp = new XMLHttpRequest();
    xmlhttp.open( request.HTTPmethod, requestURL, true);
    xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
    resultDisplay.innerHTML = xmlhttp.responseText;
    }
    }
    xmlhttp.send(null);

    requestDisplay.innerHTML = requestURL;
    }
    //Convert the request object into a properly formatted URL
    function makeURL( request )
    {
    var url = request.URL + "?method=" + escape( request.method );
    for( var property in request.parameters )
    {
    url += "&" + property + "=" + escape( request.parameters[property] );
    }

    return url;
    }
    </script>
    </head>
    <body onload="makeRequest()">
    <h1>Request:</h1>
    <div id="request"></div>
    <h1>Result:</h1>
    <div id="result"></div>
    </body>
    </html>
    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/http-communications/web-service-requests/soap-web-service-requests.html b/docs/development/networking-and-communication/http-communications/web-service-requests/soap-web-service-requests.html index 382e1f541..24782a7d5 100644 --- a/docs/development/networking-and-communication/http-communications/web-service-requests/soap-web-service-requests.html +++ b/docs/development/networking-and-communication/http-communications/web-service-requests/soap-web-service-requests.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ framework.swc and rpc.swc to the library path of a project and then access the Flex classes with ActionScript.

    More Help topics

    Using the Flex web service component in Flash Professional

    Accessing server-side data

    Cristophe Coenraets: Real-time Trader Desktop for Android

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/http-communications/web-service-requests/xml-rpc-web-service-requests.html b/docs/development/networking-and-communication/http-communications/web-service-requests/xml-rpc-web-service-requests.html index 140f21ca0..f9a16475c 100644 --- a/docs/development/networking-and-communication/http-communications/web-service-requests/xml-rpc-web-service-requests.html +++ b/docs/development/networking-and-communication/http-communications/web-service-requests/xml-rpc-web-service-requests.html @@ -16,7 +16,7 @@ - + @@ -31,7 +31,7 @@ must use the DOM methods to create the XML document or create the document as a string and use the JavaScript DOMParser class to convert the string to XML.

    The following example uses DOM methods to create an XML-RPC message and an XMLHttpRequest to conduct the web service transaction:

    <html>
    <head>
    <title>XML-RPC web service request</title>
    <script type="text/javascript">

    function makeRequest()
    {
    var requestDisplay = document.getElementById( "request" );
    var resultDisplay = document.getElementById( "result" );

    var request = {};
    request.URL = "http://services.example.com/xmlrpc/";
    request.method = "test.echo";
    request.HTTPmethod = "POST";
    request.parameters = {};
    request.parameters.api_key = "123456ABC";
    request.parameters.message = "Able was I ere I saw Elba.";
    var requestMessage = formatXMLRPC( request );

    xmlhttp = new XMLHttpRequest();
    xmlhttp.open( request.HTTPmethod, request.URL, true);
    xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
    resultDisplay.innerText = xmlhttp.responseText;
    }
    }
    xmlhttp.send( requestMessage );

    requestDisplay.innerText = xmlToString( requestMessage.documentElement );
    }

    //Formats a request as XML-RPC document
    function formatXMLRPC( request )
    {
    var xmldoc = document.implementation.createDocument( "", "", null );
    var root = xmldoc.createElement( "methodCall" );
    xmldoc.appendChild( root );
    var methodName = xmldoc.createElement( "methodName" );
    var methodString = xmldoc.createTextNode( request.method );
    methodName.appendChild( methodString );

    root.appendChild( methodName );

    var params = xmldoc.createElement( "params" );
    root.appendChild( params );

    var param = xmldoc.createElement( "param" );
    params.appendChild( param );
    var value = xmldoc.createElement( "value" );
    param.appendChild( value );
    var struct = xmldoc.createElement( "struct" );
    value.appendChild( struct );

    for( var property in request.parameters )
    {
    var member = xmldoc.createElement( "member" );
    struct.appendChild( member );

    var name = xmldoc.createElement( "name" );
    var paramName = xmldoc.createTextNode( property );
    name.appendChild( paramName )
    member.appendChild( name );

    var value = xmldoc.createElement( "value" );
    var type = xmldoc.createElement( "string" );
    value.appendChild( type );
    var paramValue = xmldoc.createTextNode( request.parameters[property] );
    type.appendChild( paramValue )
    member.appendChild( value );
    }
    return xmldoc;
    }

    //Returns a string representation of an XML node
    function xmlToString( rootNode, indent )
    {
    if( indent == null ) indent = "";
    var result = indent + "<" + rootNode.tagName + ">\n";
    for( var i = 0; i < rootNode.childNodes.length; i++)
    {
    if(rootNode.childNodes.item( i ).nodeType == Node.TEXT_NODE )
    {
    result += indent + " " + rootNode.childNodes.item( i ).textContent + "\n";
    }
    }
    if( rootNode.childElementCount > 0 )
    {
    result += xmlToString( rootNode.firstElementChild, indent + " " );
    }
    if( rootNode.nextElementSibling )
    {
    result += indent + "</" + rootNode.tagName + ">\n";
    result += xmlToString( rootNode.nextElementSibling, indent );
    }
    else
    {
    result += indent +"</" + rootNode.tagName + ">\n";
    }
    return result;
    }

    </script>
    </head>
    <body onload="makeRequest()">
    <h1>Request:</h1>
    <pre id="request"></pre>
    <h1>Result:</h1>
    <pre id="result"></pre>
    </body>
    </html>
    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/sockets.html b/docs/development/networking-and-communication/sockets.html index bdb6e188e..96c204a12 100644 --- a/docs/development/networking-and-communication/sockets.html +++ b/docs/development/networking-and-communication/sockets.html @@ -16,7 +16,7 @@ - + @@ -254,7 +254,7 @@ where a.b.c.d is a typical IPv4 dotted-decimal value.

  • IPv4 compatible addresses are output as [::a.b.c.d], where a.b.c.d is a typical IPv4 dotted-decimal value.

  • More Help topics

    Connecting to sockets

    flash.net package

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/using-the-external-api.html b/docs/development/networking-and-communication/using-the-external-api.html index e4542ba31..89f195454 100644 --- a/docs/development/networking-and-communication/using-the-external-api.html +++ b/docs/development/networking-and-communication/using-the-external-api.html @@ -16,7 +16,7 @@ - + @@ -43,7 +43,7 @@ as the external container. Thus, you can use the external interface to communicate between the ActionScript code in the loaded SWF and the JavaScript code in the HTML page loaded in the HTMLLoader.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/using-the-external-api/basics-of-using-the-external-api.html b/docs/development/networking-and-communication/using-the-external-api/basics-of-using-the-external-api.html index 136ae7d1a..0f47c97c7 100644 --- a/docs/development/networking-and-communication/using-the-external-api/basics-of-using-the-external-api.html +++ b/docs/development/networking-and-communication/using-the-external-api/basics-of-using-the-external-api.html @@ -16,7 +16,7 @@ - + @@ -82,7 +82,7 @@ error-checking code, which you should use when writing code using the external API. For another full example using the external API, see the class example for the ExternalInterface class in the ActionScript 3.0 Reference.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/using-the-external-api/external-api-example-communicating-between-actionscript-and-javascript-in-a-web-browser.html b/docs/development/networking-and-communication/using-the-external-api/external-api-example-communicating-between-actionscript-and-javascript-in-a-web-browser.html index 8bdb0cf9d..79fe62712 100644 --- a/docs/development/networking-and-communication/using-the-external-api/external-api-example-communicating-between-actionscript-and-javascript-in-a-web-browser.html +++ b/docs/development/networking-and-communication/using-the-external-api/external-api-example-communicating-between-actionscript-and-javascript-in-a-web-browser.html @@ -16,7 +16,7 @@ - + @@ -127,7 +127,7 @@ movie according to the browser-specific syntax, using the window or document object, as shown in the getSWF() JavaScript function in this example:

    <script language="JavaScript">
    ...
    function getSWF(movieName)
    {
    if (navigator.appName.indexOf("Microsoft") != -1)
    {
    return window[movieName];
    }
    else
    {
    return document[movieName];
    }
    }
    ...
    </script>

    If your script does not detect the user's browser type, the user might see unexpected behavior when playing SWF files in an HTML container.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/using-the-external-api/external-api-requirements-and-advantages.html b/docs/development/networking-and-communication/using-the-external-api/external-api-requirements-and-advantages.html index 2b044fb81..3a3efae63 100644 --- a/docs/development/networking-and-communication/using-the-external-api/external-api-requirements-and-advantages.html +++ b/docs/development/networking-and-communication/using-the-external-api/external-api-requirements-and-advantages.html @@ -16,7 +16,7 @@ - + @@ -50,7 +50,7 @@ web page is viewed in Internet Explorer.In addition, if the HTML tags that define the Flash Player instance (the object and embed tags) are nested in an HTML form tag, ExternalInterface calls from ActionScript will not work.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/using-the-external-api/using-the-externalinterface-class.html b/docs/development/networking-and-communication/using-the-external-api/using-the-externalinterface-class.html index 541844589..5135e8e48 100644 --- a/docs/development/networking-and-communication/using-the-external-api/using-the-externalinterface-class.html +++ b/docs/development/networking-and-communication/using-the-external-api/using-the-externalinterface-class.html @@ -16,7 +16,7 @@ - + @@ -119,7 +119,7 @@ proxy that will perform the task of converting native function calls to the serialized XML format. For an example of a proxy class written in C#, see Inside the ExternalInterfaceProxy class.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/xml-signature-validation-in-air.html b/docs/development/networking-and-communication/xml-signature-validation-in-air.html index 9b5a161c8..a777ce4eb 100644 --- a/docs/development/networking-and-communication/xml-signature-validation-in-air.html +++ b/docs/development/networking-and-communication/xml-signature-validation-in-air.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ the loaded bytes. This is particularly valuable when the downloaded resource is a SWF file or other active content that you want to run in the application security sandbox.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/xml-signature-validation-in-air/about-xml-signatures.html b/docs/development/networking-and-communication/xml-signature-validation-in-air/about-xml-signatures.html index a67baa9a4..f03368a98 100644 --- a/docs/development/networking-and-communication/xml-signature-validation-in-air/about-xml-signatures.html +++ b/docs/development/networking-and-communication/xml-signature-validation-in-air/about-xml-signatures.html @@ -16,7 +16,7 @@ - + @@ -80,7 +80,7 @@ the current machine for the timestamp to be considered valid. The XMLSignatureValidator does not provide an API for designating a different certificate to use in validating the timestamp.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/xml-signature-validation-in-air/basics-of-xml-signature-validation.html b/docs/development/networking-and-communication/xml-signature-validation-in-air/basics-of-xml-signature-validation.html index 164eff92c..a4182454a 100644 --- a/docs/development/networking-and-communication/xml-signature-validation-in-air/basics-of-xml-signature-validation.html +++ b/docs/development/networking-and-communication/xml-signature-validation-in-air/basics-of-xml-signature-validation.html @@ -16,7 +16,7 @@ - + @@ -102,7 +102,7 @@ certificate is invalid. If the identityStatus is unknown, then the references are only checked when the referencesValidationSetting is validOrUnknown.

    - + \ No newline at end of file diff --git a/docs/development/networking-and-communication/xml-signature-validation-in-air/implementing-the-iuridereferencer-interface.html b/docs/development/networking-and-communication/xml-signature-validation-in-air/implementing-the-iuridereferencer-interface.html index ab0520df2..73cb10c86 100644 --- a/docs/development/networking-and-communication/xml-signature-validation-in-air/implementing-the-iuridereferencer-interface.html +++ b/docs/development/networking-and-communication/xml-signature-validation-in-air/implementing-the-iuridereferencer-interface.html @@ -16,7 +16,7 @@ - + @@ -96,7 +96,7 @@ object.

    Note: Before validating remote external references, consider whether your application could be vulnerable to a "phone home" or similar type of attack by a maliciously constructed signature document.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content.html b/docs/development/rich-media-content.html index e7ad542f6..009d52624 100644 --- a/docs/development/rich-media-content.html +++ b/docs/development/rich-media-content.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/adding-pdf-content-in-air.html b/docs/development/rich-media-content/adding-pdf-content-in-air.html index 848a3dd1e..33e916526 100644 --- a/docs/development/rich-media-content/adding-pdf-content-in-air.html +++ b/docs/development/rich-media-content/adding-pdf-content-in-air.html @@ -16,7 +16,7 @@ - + @@ -88,7 +88,7 @@ the PDF content. Clicking links to content outside the PDF file redirect the HTMLLoader object that contains the PDF (even if the target of a link is a new window).

  • PDF commenting workflows do not function in AIR.

  • - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management.html b/docs/development/rich-media-content/using-digital-rights-management.html index 06f2cf004..1d156563c 100644 --- a/docs/development/rich-media-content/using-digital-rights-management.html +++ b/docs/development/rich-media-content/using-digital-rights-management.html @@ -16,7 +16,7 @@ - + @@ -58,7 +58,7 @@ flash.net.drm package

    flash.net.NetConnection

    flash.net.NetStream

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/delivering-content.html b/docs/development/rich-media-content/using-digital-rights-management/delivering-content.html index cd13543d2..adbe3b091 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/delivering-content.html +++ b/docs/development/rich-media-content/using-digital-rights-management/delivering-content.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ by other ways. One option to solve this problem is to host the metadata on an HTTP web server, and implement the client video player to retrieve the appropriate metadata, depending on the content being played back.

    private function getMetadata():void {

    extrapolated-path-to-metadata = "http://metadatas.mywebserver.com/" + videoname;
    var urlRequest : URLRequest = new URLRequest(extrapolated-path-to-the-metadata + ".metadata");
    var urlStream : URLStream = new URLStream();
    urlStream.addEventListener(Event.COMPLETE, handleMetadata);
    urlStream.addEventListener(IOErrorEvent.NETWORK_ERROR, handleIOError);
    urlStream.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
    urlStream.addEventListener(IOErrorEvent.VERIFY_ERROR, handleIOError);
    try {
    urlStream.load(urlRequest);
    } catch(se:SecurityError) {
    videoLog.text += se.toString() + "\n";
    } catch(e:Error) {
    videoLog.text += e.toString() + "\n";
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/device-registration.html b/docs/development/rich-media-content/using-digital-rights-management/device-registration.html index 2f8f7618d..e79012c57 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/device-registration.html +++ b/docs/development/rich-media-content/using-digital-rights-management/device-registration.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ send the licenses to the Adobe Access client for consumption using the DRMManager.storeVoucher() method.

  • If the generated ID is not found, the Flash application will go through the device registration procedure.

  • - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/domain-support.html b/docs/development/rich-media-content/using-digital-rights-management/domain-support.html index 2df31153d..37ac4a999 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/domain-support.html +++ b/docs/development/rich-media-content/using-digital-rights-management/domain-support.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ devices that have joined the device group.

    The device group information is then used in the DRMContentData's V oucherAccessInfo object, which will then be used to present the information that is required to successfully retrieve and consume a voucher.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/drm-related-members-and-events-of-the-netstream-class.html b/docs/development/rich-media-content/using-digital-rights-management/drm-related-members-and-events-of-the-netstream-class.html index daa09cf63..2c7624dfa 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/drm-related-members-and-events-of-the-netstream-class.html +++ b/docs/development/rich-media-content/using-digital-rights-management/drm-related-members-and-events-of-the-netstream-class.html @@ -16,7 +16,7 @@ - + @@ -41,7 +41,7 @@ are the same user credentials that permit the user to view the content. The code for playing the video and making sure that a successful connection to the video stream has been made is not included here.

    var connection:NetConnection = new NetConnection();
    connection.connect(null);

    var videoStream:NetStream = new NetStream(connection);

    videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE,
    drmAuthenticateEventHandler)

    private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void
    {
    videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm");
    }
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/factory-reset.html b/docs/development/rich-media-content/using-digital-rights-management/factory-reset.html index 294e82a40..fc883350f 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/factory-reset.html +++ b/docs/development/rich-media-content/using-digital-rights-management/factory-reset.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ application will need to go through the device registration procedure again. If the Flash application sends an outdated pre-generated license, the Adobe Access client will reject it since the license was encrypted for an older device ID.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/license-preview.html b/docs/development/rich-media-content/using-digital-rights-management/license-preview.html index 0df019c8e..0826d7314 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/license-preview.html +++ b/docs/development/rich-media-content/using-digital-rights-management/license-preview.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ valid license looks like but would not actually receive the key to decrypt the content. Support for license preview is optional, and only necessary if you implement a custom application that uses this functionality.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/open-source-media-framework.html b/docs/development/rich-media-content/using-digital-rights-management/open-source-media-framework.html index fd301cdcf..f0232bef7 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/open-source-media-framework.html +++ b/docs/development/rich-media-content/using-digital-rights-management/open-source-media-framework.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ you complete flexibility and control in creating your own rich media experiences. For more information on OSMF, visit the OSMF Developer Site.

    More Help topics

    Workflow for playing protected content

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/out-of-band-licenses.html b/docs/development/rich-media-content/using-digital-rights-management/out-of-band-licenses.html index e67566416..bb33a90ed 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/out-of-band-licenses.html +++ b/docs/development/rich-media-content/using-digital-rights-management/out-of-band-licenses.html @@ -16,7 +16,7 @@ - + @@ -47,7 +47,7 @@ AIR application can then extract the serialized DRM vouchers using the DRMVoucher.toByteArray() method and on your other machines you can import the vouchers using the DRMManager.storeVoucher() method.

    More Help topics

    Device registration

    Factory reset

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/playing-encryped-content-using-domain-support.html b/docs/development/rich-media-content/using-digital-rights-management/playing-encryped-content-using-domain-support.html index 78896752b..6fc0c335f 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/playing-encryped-content-using-domain-support.html +++ b/docs/development/rich-media-content/using-digital-rights-management/playing-encryped-content-using-domain-support.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ limit the number of devices in a device group. If the limit is reached, you may need to call the DRMManager.removeFromDeviceGroup() method on an unused device before registering the current device.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/understanding-the-protected-content-workflow.html b/docs/development/rich-media-content/using-digital-rights-management/understanding-the-protected-content-workflow.html index 04a22b78e..08fb4d92a 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/understanding-the-protected-content-workflow.html +++ b/docs/development/rich-media-content/using-digital-rights-management/understanding-the-protected-content-workflow.html @@ -16,7 +16,7 @@ - + @@ -148,7 +148,7 @@ does not contain the metadata required to obtain a voucher. This missing call also possibly means that Adobe Access does not protect this file.

    The following code example for AIR illustrates how to preload a voucher for a local media file:

    package
    {
    import flash.display.Sprite;
    import flash.events.DRMAuthenticationCompleteEvent;
    import flash.events.DRMAuthenticationErrorEvent;
    import flash.events.DRMErrorEvent;
    import flash.ev ents.DRMStatusEvent;
    import flash.events.NetStatusEvent;
    import flash.net.NetConnection;
    import flash.net.NetStream;
    import flash.net.NetStreamPlayOptions;
    import flash.net.drm.AuthenticationMethod;
    import flash.net.drm.DRMContentData;
    import flash.net.drm.DRMManager;
    import flash.net.drm.LoadVoucherSetting;
    public class DRMPreloader extends Sprite
    {
    private var videoURL:String = "app-storage:/video.flv";
    private var userName:String = "user";
    private var password:String = "password";
    private var preloadConnection:NetConnection;
    private var preloadStream:NetStream;
    private var drmManager:DRMManager = DRMManager.getDRMManager();
    private var drmContentData:DRMContentData;
    public function DRMPreloader():void {
    drmManager.addEventListener(
    DRMAuthenticationCompleteEvent.AUTHENTICATION_COMPLETE,
    onAuthenticationComplete);
    drmManager.addEventListener(DRMAuthenticationErrorEvent.AUTHENTICATION_ERROR,
    onAuthenticationError);
    drmManager.addEventListener(DRMStatusEvent.DRM_STATUS, onDRMStatus);
    drmManager.addEventListener(DRMErrorEvent.DRM_ERROR, onDRMError);
    preloadConnection = new NetConnection();
    preloadConnection.addEventListener(NetStatusEvent.NET_STATUS, onConnect);
    preloadConnection.connect(null);
    }

    private function onConnect( event:NetStatusEvent ):void
    {
    preloadMetadata();
    }
    private function preloadMetadata():void
    {
    preloadStream = new NetStream( preloadConnection );
    preloadStream.client = this;
    var options:NetStreamPlayOptions = new NetStreamPlayOptions();
    options.streamName = videoURL;
    preloadStream.preloadEmbeddedData( options );
    }
    public function onDRMContentData( drmMetadata:DRMContentData ):void
    {
    drmContentData = drmMetadata;
    if ( drmMetadata.authenticationMethod == AuthenticationMethod.USERNAME_AND_PASSWORD )
    {
    authenticateUser();
    }
    else
    {
    getVoucher();
    }
    }
    private function getVoucher():void
    {
    drmManager.loadVoucher( drmContentData, LoadVoucherSetting.ALLOW_SERVER );
    }

    private function authenticateUser():void
    {
    drmManager.authenticate( drmContentData.serverURL, drmContentData.domain, userName, password );
    }
    private function onAuthenticationError( event:DRMAuthenticationErrorEvent ):void
    {
    trace( "Authentication error: " + event.errorID + ", " + event.subErrorID );
    }

    private function onAuthenticationComplete( event:DRMAuthenticationCompleteEvent ):void
    {
    trace( "Authenticated to: " + event.serverURL + ", domain: " + event.domain );
    getVoucher();
    }
    private function onDRMStatus( event:DRMStatusEvent ):void
    {
    trace( "DRM Status: " + event.detail);
    trace("--Voucher allows offline playback = " + event.isAvailableOffline );
    trace("--Voucher already cached = " + event.isLocal );
    trace("--Voucher required authentication = " + !event.isAnonymous );
    }
    private function onDRMError( event:DRMErrorEvent ):void
    {
    trace( "DRM error event: " + event.errorID + ", " + event.subErrorID + ", " + event.text );
    }
    public function onPlayStatus( info:Object ):void
    {
    preloadStream.close();
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/updating-flash-player-to-support-adobe-access.html b/docs/development/rich-media-content/using-digital-rights-management/updating-flash-player-to-support-adobe-access.html index ee05946e4..80b10ec98 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/updating-flash-player-to-support-adobe-access.html +++ b/docs/development/rich-media-content/using-digital-rights-management/updating-flash-player-to-support-adobe-access.html @@ -16,7 +16,7 @@ - + @@ -59,7 +59,7 @@ ActionScript 3.0 Reference for the Adobe Flash Platform.

    After the player update completes, the user is redirected to the page where the update began. The Adobe Access module is downloaded, and the stream can begin playing.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmauthenticateevent-class.html b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmauthenticateevent-class.html index 2330ed972..690f22384 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmauthenticateevent-class.html +++ b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmauthenticateevent-class.html @@ -16,7 +16,7 @@ - + @@ -48,7 +48,7 @@ In this case, the credentials() method is modified so that it also returns the application to the base state. This method does so after passing the user credentials and resetting the TextInput object values.

    <?xml version="1.0" encoding="utf-8"?>
    <mx:WindowedApplication xmlns:mx="https://www.adobe.com/2006/mxml"
    layout="absolute"
    width="800"
    height="500"
    title="DRM FLV Player"
    creationComplete="initApp()">

    <mx:states>
    <mx:State name="LOGIN">
    <mx:AddChild position="lastChild">
    <mx:Panel x="236.5" y="113" width="325" height="204" layout="absolute"
    title="Login">
    <mx:TextInput x="110" y="46" id="uName"/>
    <mx:TextInput x="110" y="76" id="pWord" displayAsPassword="true"/>
    <mx:Text x="35" y="48" text="Username:"/>
    <mx:Text x="35" y="78" text="Password:"/>
    <mx:Button x="120" y="115" label="Login" click="credentials()"/>
    <mx:Button x="193" y="115" label="Reset" click="uName.text='';
    pWord.text='';"/>
    </mx:Panel>
    </mx:AddChild>
    </mx:State>
    </mx:states>

    <mx:Script>
    <![CDATA[
    import flash.events.DRMAuthenticateEvent;
    private function initApp():void
    {
    videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE,
    drmAuthenticateEventHandler);
    }

    public function credentials():void
    {
    videoStream.setDRMAuthenticationCredentials(uName, pWord, "drm");
    uName.text = "";
    pWord.text = "";
    currentState='';
    }

    private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void
    {
    currentState='LOGIN';
    }
    ]]>
    </mx:Script>

    <mx:VideoDisplay id="video" x="50" y="25" width="700" height="350"
    autoPlay="true"
    bufferTime="10.0"
    source="http://www.example.com/flv/Video.flv" />
    </mx:WindowedApplication>
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmcontentdata-class.html b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmcontentdata-class.html index e159b4987..93e452f0d 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmcontentdata-class.html +++ b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmcontentdata-class.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ DRMContentData class listing in the ActionScript 3.0 Reference for the Adobe Flash Platform.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmerrorevent-class.html b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmerrorevent-class.html index 08db46d0b..142f7e86c 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmerrorevent-class.html +++ b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmerrorevent-class.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ attempting to play protected content. Normally, when an application encounters an error, it performs any number of clean-up tasks. It then informs the user of the error and provides options for solving the problem.

    private function drmErrorEventHandler(event:DRMErrorEvent):void
    {
    trace(event.toString());
    }
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmmanager-class.html b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmmanager-class.html index e0b34980c..bea7dde7f 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmmanager-class.html +++ b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmmanager-class.html @@ -16,7 +16,7 @@ - + @@ -65,7 +65,7 @@ provide an API for examining token attributes.)

    DRMAuthenticationError events

    The DRMManager dispatches a DRMAuthenticationErrorEvent object when a user cannot be successfully authenticated through a call to the authenticate() or setAuthenticationToken() methods.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmstatusevent-class.html b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmstatusevent-class.html index 205769963..f337dd22a 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/using-the-drmstatusevent-class.html +++ b/docs/development/rich-media-content/using-digital-rights-management/using-the-drmstatusevent-class.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ provides similar properties for Flash Player.

    PropertyDescription
    contentDataA DRMContentData object containing the DRM metadata embedded in the content.
    detail (AIR only)A string explaining the context of the status event. In DRM 1.0, the only valid value is DRM.voucherObtained.
    isAnonymous (AIR only)Indicates whether the content, protected with Adobe Access, is available without requiring a user to provide authentication credentials (true) or not (false). A false value means that the user must provide a user name and password that matches the one known and expected by the content provider.
    isAvailableOffline (AIR only)Indicates whether the content, protected with Adobe Access, can be made available offline (true) or not (false). In order for digitally protected content to be available offline, its voucher must be cached to the user's local machine.
    isLocalIndicates whether the voucher that is required to play the content is cached locally.
    offlineLeasePeriod (AIR only)The remaining number of days that content can be viewed offline.
    policies (AIR only)A custom object that can contain custom DRM properties.
    voucherThe DRMVoucher.
    voucherEndDate (AIR only)The absolute date on which the voucher expires and the content is no longer viewable.

    Creating a DRMStatusEvent handler

    The following example creates an event handler that outputs the DRM content status information for the NetStream object that originated the event. Add this event handler to a NetStream object that points to protected content.

    function drmStatusEventHandler(event:DRMStatusEvent):void
    {
    trace(event);
    }
    function drmStatusEventHandler(event:DRMStatusEvent):void
    {
    trace(event);
    }
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/using-digital-rights-management/workflow-for-playing-protected-content.html b/docs/development/rich-media-content/using-digital-rights-management/workflow-for-playing-protected-content.html index a2a19efc7..9b536cede 100644 --- a/docs/development/rich-media-content/using-digital-rights-management/workflow-for-playing-protected-content.html +++ b/docs/development/rich-media-content/using-digital-rights-management/workflow-for-playing-protected-content.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ authenticate(). When loading a DRM-protected content, OSMF performs the DRM validating actions and dispatches state events. Add a DRMEvent.DRM_STATE_CHANGE event handler to the DRMTrait.

    private function onDRMCapabilityChange(event :MediaPlayerCapabilityChangeEvent):void
    {
    if (event.type == MediaPlayerCapabilityChangeEvent.HAS_DRM_CHANGE
    && event.enabled)
    {
    drmTrait = player.media.getTrait(MediaTraitType.DRM) as DRMTrait;
    drmTrait.addEventListener
    (DRMEvent.DRM_STATE_CHANGE, onDRMStateChange);
    }
    }
  • Handle the DRM events in the onDRMStateChange() method.

    private function onDRMStateChange(event :DRMEvent) :void
    {
    trace ( "DRMState: ",event.drmState);
    switch(event.drmState)
    {
    case DRMState.AUTHENTICATION_NEEDED:
    // Identity-based content
    var authPopup :AuthWindow = AuthWindow.create(_parentWin);
    authPopup.serverURL = event.serverURL;
    authPopup.addEventListener("dismiss", function () :void {
    trace ("Authentication dismissed");
    if(_drmTrait != null)
    {
    //Ignore authentication. Just
    //try to acquire a license.
    _drmTrait.authenticate(null, null);
    }
    });
    authPopup.addEventListener("authenticate",
    function (event :AuthWindowEvent) :void {
    if(_drmTrait != null)
    {
    _drmTrait.authenticate(event.username, event.password);
    }
    });
    authPopup.show();
    break;
    case DRMState.AUTHENTICATING:
    //Display any authentication message.
    trace("Authenticating...");
    break;
    case DRMState.AUTHENTICATION_COMPLETE:
    // Start to retrieve voucher and playback.
    // You can display the voucher information at this point.
    if(event.token)
    // You just received the authentication token.
    {
    trace("Authentication success. Token: \n", event.token);
    }
    else
    // You have got the voucher.
    {
    trace("DRM License:");
    trace("Playback window period: ",
    !isNaN(event.period) ? event.period == 0 ?
    "<unlimited>" : event.period : "<none>");
    trace("Playback window end date: ",
    event.endDate != null ? event.endDate : "<none>");
    trace("Playback window start date: ",
    event.startDate != null ? event.startDate : "<none>");
    }
    break;
    case DRMState.AUTHENTICATION_ERROR:
    trace ("DRM Error:", event.mediaError.errorID +
    "[" + DRMErrorEventRef.getDRMErrorMnemonic
    (event.mediaError.errorID) + "]");
    //Stop everything.
    player.media = null;
    break;
    case DRMState.DRM_SYSTEM_UPDATING:
    Logger.log("Downloading DRM module...");
    break;
    case DRMState.UNINITIALIZED:
    break;
    }
    }
  • - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-cameras.html b/docs/development/rich-media-content/working-with-cameras.html index ec4efd214..be2cb82e7 100644 --- a/docs/development/rich-media-content/working-with-cameras.html +++ b/docs/development/rich-media-content/working-with-cameras.html @@ -16,7 +16,7 @@ - + @@ -129,7 +129,7 @@ display list:

    var vid:Video;
    var cam:Camera = Camera.getCamera();
    var tf:TextField = new TextField();
    tf.x = 300;
    tf.autoSize = TextFieldAutoSize.LEFT;
    addChild(tf);

    if (cam != null)
    {
    cam.addEventListener(StatusEvent.STATUS, statusHandler);
    vid = new Video();
    vid.attachCamera(cam);
    }
    function statusHandler(event:StatusEvent):void
    {
    if (!cam.muted)
    {
    vid.width = cam.width;
    vid.height = cam.height;
    addChild(vid);
    t.start();
    }
    cam.removeEventListener(StatusEvent.STATUS, statusHandler);
    }

    var t:Timer = new Timer(100);
    t.addEventListener(TimerEvent.TIMER, timerHandler);
    function timerHandler(event:TimerEvent):void
    {
    tf.text = "";
    tf.appendText("activityLevel: " + cam.activityLevel + "\n");
    tf.appendText("bandwidth: " + cam.bandwidth + "\n");
    tf.appendText("currentFPS: " + cam.currentFPS + "\n");
    tf.appendText("fps: " + cam.fps + "\n");
    tf.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n");
    tf.appendText("loopback: " + cam.loopback + "\n");
    tf.appendText("motionLevel: " + cam.motionLevel + "\n");
    tf.appendText("motionTimeout: " + cam.motionTimeout + "\n");
    tf.appendText("quality: " + cam.quality + "\n");
    }

    Every 1/10 of a second (100 milliseconds) the Timer object's timer event is dispatched and the timerHandler() function updates the text field on the display list.

    More Help topics

    Christian Cantrell: How to use CameraUI in a Cross-platform Way

    Michaël CHAIZE: Android, AIR and the Camera

    Christophe Coenraets: Multi-User Video Tic-Tac-Toe

    Mark Doherty: Android Radar app (source)

    Lee Brimelow: How to access the camera on Android devices

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound.html b/docs/development/rich-media-content/working-with-sound.html index 4ddd8e90d..8b299e823 100644 --- a/docs/development/rich-media-content/working-with-sound.html +++ b/docs/development/rich-media-content/working-with-sound.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ information, and capture sound from a user's microphone.

    More Help topics

    flash.media package

    flash.events.SampleDataEvent

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/accessing-raw-sound-data.html b/docs/development/rich-media-content/working-with-sound/accessing-raw-sound-data.html index 2c944a18d..ed5fc46b0 100644 --- a/docs/development/rich-media-content/working-with-sound/accessing-raw-sound-data.html +++ b/docs/development/rich-media-content/working-with-sound/accessing-raw-sound-data.html @@ -16,7 +16,7 @@ - + @@ -68,7 +68,7 @@ second for loop cycles through the next set of 256 values, plotting them in reverse order this time, from right to left. The resulting waveform plots can produce an interesting mirror-image effect, as shown in the following image.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/basics-of-working-with-sound.html b/docs/development/rich-media-content/working-with-sound/basics-of-working-with-sound.html index 08f0051ce..d76a40761 100644 --- a/docs/development/rich-media-content/working-with-sound/basics-of-working-with-sound.html +++ b/docs/development/rich-media-content/working-with-sound/basics-of-working-with-sound.html @@ -16,7 +16,7 @@ - + @@ -67,7 +67,7 @@ later portions of that file are still being loaded from a server.

    Volume
    The loudness of a sound.

    Waveform
    The shape of a graph of the varying amplitudes of a sound signal over time.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/capturing-sound-input.html b/docs/development/rich-media-content/working-with-sound/capturing-sound-input.html index e615ce442..97e400d0f 100644 --- a/docs/development/rich-media-content/working-with-sound/capturing-sound-input.html +++ b/docs/development/rich-media-content/working-with-sound/capturing-sound-input.html @@ -16,7 +16,7 @@ - + @@ -141,7 +141,7 @@ by the Microphone object to the Sound object twice. The following example captures 4 seconds of microphone data and plays it back using a Sound object:

    const DELAY_LENGTH:int = 4000;
    var mic:Microphone = Microphone.getMicrophone();
    mic.setSilenceLevel(0, DELAY_LENGTH);
    mic.gain = 100;
    mic.rate = 44;
    mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);

    var timer:Timer = new Timer(DELAY_LENGTH);
    timer.addEventListener(TimerEvent.TIMER, timerHandler);
    timer.start();

    function micSampleDataHandler(event:SampleDataEvent):void
    {
    while(event.data.bytesAvailable)
    {
    var sample:Number = event.data.readFloat();
    soundBytes.writeFloat(sample);
    }
    }
    var sound:Sound = new Sound();
    var channel:SoundChannel;
    function timerHandler(event:TimerEvent):void
    {
    mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
    timer.stop();
    soundBytes.position = 0;
    sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
    channel.addEventListener( Event.SOUND_COMPLETE, playbackComplete );
    channel = sound.play();
    }

    function playbackSampleHandler(event:SampleDataEvent):void
    {
    for (var i:int = 0; i < 8192 && soundBytes.bytesAvailable > 0; i++)
    {
    trace(sample);
    var sample:Number = soundBytes.readFloat();
    event.data.writeFloat(sample);
    event.data.writeFloat(sample);
    }
    }

    function playbackComplete( event:Event ):void
    {
    trace( "Playback finished.");
    }

    For more information on playing back sounds from sound sample data, see Working with dynamically generated audio.

    More Help topics

    Michael Chaize: AIR, Android, and the Microphone

    Christophe Coenraets: Voice Notes for Android

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/controlling-sound-volume-and-panning.html b/docs/development/rich-media-content/working-with-sound/controlling-sound-volume-and-panning.html index 893dfdfa7..8c623a631 100644 --- a/docs/development/rich-media-content/working-with-sound/controlling-sound-volume-and-panning.html +++ b/docs/development/rich-media-content/working-with-sound/controlling-sound-volume-and-panning.html @@ -16,7 +16,7 @@ - + @@ -59,7 +59,7 @@ soundTransform property of the SoundMixer class. However, that would affect the panning of all sounds currently playing, not just the single sound being played by this SoundChannel object.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/loading-external-sound-files.html b/docs/development/rich-media-content/working-with-sound/loading-external-sound-files.html index 8aa248545..cae09c5d8 100644 --- a/docs/development/rich-media-content/working-with-sound/loading-external-sound-files.html +++ b/docs/development/rich-media-content/working-with-sound/loading-external-sound-files.html @@ -16,7 +16,7 @@ - + @@ -65,7 +65,7 @@ cannot be located, an Event.IO_ERROR event is dispatched by the Sound object. In the previous code, the onIOError() method executes and displays a brief error message when an error occurs.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/playing-sounds.html b/docs/development/rich-media-content/working-with-sound/playing-sounds.html index a95b21f65..146eab405 100644 --- a/docs/development/rich-media-content/working-with-sound/playing-sounds.html +++ b/docs/development/rich-media-content/working-with-sound/playing-sounds.html @@ -16,7 +16,7 @@ - + @@ -80,7 +80,7 @@ and then on the next frame, it restarts from the beginning of the sound. This occurs because the sound loading process is still underway. To stop both the loading and the playback of a streaming sound, call the Sound.close() method.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/security-considerations-when-loading-and-playing-sounds.html b/docs/development/rich-media-content/working-with-sound/security-considerations-when-loading-and-playing-sounds.html index 01abee5b3..3254f2788 100644 --- a/docs/development/rich-media-content/working-with-sound/security-considerations-when-loading-and-playing-sounds.html +++ b/docs/development/rich-media-content/working-with-sound/security-considerations-when-loading-and-playing-sounds.html @@ -16,7 +16,7 @@ - + @@ -58,7 +58,7 @@ all sounds that were loaded from external files. However, sounds that are embedded in FLA files and attached to frames in the timeline using the Flash Authoring tool might start playing again if the animation moves to a new frame.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/sound-example-podcast-player.html b/docs/development/rich-media-content/working-with-sound/sound-example-podcast-player.html index f5e9d6502..e3bd99a94 100644 --- a/docs/development/rich-media-content/working-with-sound/sound-example-podcast-player.html +++ b/docs/development/rich-media-content/working-with-sound/sound-example-podcast-player.html @@ -16,7 +16,7 @@ - + @@ -111,7 +111,7 @@ connected to the Internet.

  • Add subscription features that periodically check for new episodes in a podcast channel and update the episode list automatically.

  • Add podcast searching and browsing functionality using an API from a podcast hosting service like Odeo.com.

  • - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/understanding-the-sound-architecture.html b/docs/development/rich-media-content/working-with-sound/understanding-the-sound-architecture.html index 90641308c..c04d15c26 100644 --- a/docs/development/rich-media-content/working-with-sound/understanding-the-sound-architecture.html +++ b/docs/development/rich-media-content/working-with-sound/understanding-the-sound-architecture.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ then mixed together by the global SoundMixer class during playback,

    The Sound, SoundChannel, and SoundMixer classes are not used for sound data obtained from a microphone or from a streaming media server like Flash Media Server.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/working-with-dynamically-generated-audio.html b/docs/development/rich-media-content/working-with-sound/working-with-dynamically-generated-audio.html index 944d7411f..83c252c31 100644 --- a/docs/development/rich-media-content/working-with-sound/working-with-dynamically-generated-audio.html +++ b/docs/development/rich-media-content/working-with-sound/working-with-dynamically-generated-audio.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@ Sound methods that are enabled are Sound.extract() and Sound.play(). Calling any other methods or properties results in an exception. All methods and properties of the SoundChannel object are still enabled.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/working-with-embedded-sounds.html b/docs/development/rich-media-content/working-with-sound/working-with-embedded-sounds.html index 107f1c2ae..462089127 100644 --- a/docs/development/rich-media-content/working-with-sound/working-with-embedded-sounds.html +++ b/docs/development/rich-media-content/working-with-sound/working-with-embedded-sounds.html @@ -16,7 +16,7 @@ - + @@ -64,7 +64,7 @@ "Embedded asset classes" in Learning ActionScript 3.0.

    More Help topics

    Embedding assets

    Embedded asset classes

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/working-with-sound-metadata.html b/docs/development/rich-media-content/working-with-sound/working-with-sound-metadata.html index af3f0de53..26bbfcbf7 100644 --- a/docs/development/rich-media-content/working-with-sound/working-with-sound-metadata.html +++ b/docs/development/rich-media-content/working-with-sound/working-with-sound-metadata.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ passed to the onID3InfoReceived() method is the original Sound object, so the method then gets the Sound object's id3 property and then iterates through all of its named properties to trace their values.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-sound/working-with-streaming-sound-files.html b/docs/development/rich-media-content/working-with-sound/working-with-streaming-sound-files.html index 9b750b6b9..8a5088b9e 100644 --- a/docs/development/rich-media-content/working-with-sound/working-with-streaming-sound-files.html +++ b/docs/development/rich-media-content/working-with-sound/working-with-streaming-sound-files.html @@ -16,7 +16,7 @@ - + @@ -39,7 +39,7 @@ the sound buffer. If this happens, playback is suspended, though it automatically resumes once more sound data has been loaded.

    To find out if playback is suspended because Flash Player or AIR is waiting for data to load, use the Sound.isBuffering property.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video.html b/docs/development/rich-media-content/working-with-video.html index 8c844bda6..1a9516050 100644 --- a/docs/development/rich-media-content/working-with-video.html +++ b/docs/development/rich-media-content/working-with-video.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ and control buttons underneath—is only one possible use of video. Through ActionScript, you have fine-tuned access to and control over video loading, presentation, and playback.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/about-hardware-acceleration-using-stagevideo.html b/docs/development/rich-media-content/working-with-video/about-hardware-acceleration-using-stagevideo.html index 70deccc11..93b9141bb 100644 --- a/docs/development/rich-media-content/working-with-video/about-hardware-acceleration-using-stagevideo.html +++ b/docs/development/rich-media-content/working-with-video/about-hardware-acceleration-using-stagevideo.html @@ -16,7 +16,7 @@ - + @@ -86,7 +86,7 @@ transparent. Stage video supports only WMODE=direct when not in full screen mode. WMODE has no effect in Safari 4 or higher and IE 9 or higher.

    In most cases, these limitations do not affect video player applications. If you can accept these limitations, use stage video whenever possible.

    More Help topics

    Understanding video formats

    Working with full-screen mode

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/advanced-topics-for-video-files.html b/docs/development/rich-media-content/working-with-video/advanced-topics-for-video-files.html index e49373b17..07692765b 100644 --- a/docs/development/rich-media-content/working-with-video/advanced-topics-for-video-files.html +++ b/docs/development/rich-media-content/working-with-video/advanced-topics-for-video-files.html @@ -16,7 +16,7 @@ - + @@ -50,7 +50,7 @@ an absolute path using a colon-based notation (:) rather than slash-based notation (/). The following list shows the difference in the two kinds of notation:

    • Slash-based notation : myDrive/myFolder/myFLV.flv

    • Colon-based notation : (Mac OS®) myDrive:myFolder:myFLV.flv

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/basics-of-video.html b/docs/development/rich-media-content/working-with-video/basics-of-video.html index 06ae33e36..5bfa6ece4 100644 --- a/docs/development/rich-media-content/working-with-video/basics-of-video.html +++ b/docs/development/rich-media-content/working-with-video/basics-of-video.html @@ -16,7 +16,7 @@ - + @@ -81,7 +81,7 @@ server controls the delivery of the video content, any part of the video can be accessed at any time, rather than needing to wait for it to download before accessing it.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/controlling-video-playback.html b/docs/development/rich-media-content/working-with-video/controlling-video-playback.html index 374cd3800..6d66e95d7 100644 --- a/docs/development/rich-media-content/working-with-video/controlling-video-playback.html +++ b/docs/development/rich-media-content/working-with-video/controlling-video-playback.html @@ -16,7 +16,7 @@ - + @@ -46,7 +46,7 @@ filter these two codes and trace a message:

    function statusHandler(event:NetStatusEvent):void
    {
    switch (event.info.code)
    {
    case "NetStream.Play.Start":
    trace("Start [" + ns.time.toFixed(3) + " seconds]");
    break;
    case "NetStream.Play.Stop":
    trace("Stop [" + ns.time.toFixed(3) + " seconds]");
    break;
    }
    }

    By listening for the netStatus event ( NetStatusEvent.NET_STATUS), you can build a video player which loads the next video in a playlist once the current video has finished playing.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/detecting-player-domain.html b/docs/development/rich-media-content/working-with-video/detecting-player-domain.html index 93c4189e3..556d3c956 100644 --- a/docs/development/rich-media-content/working-with-video/detecting-player-domain.html +++ b/docs/development/rich-media-content/working-with-video/detecting-player-domain.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ pageDomain property of the Security class. The full URL is not divulged for user security and privacy reasons.

    The page domain is available from the static pageDomain property of the Security class:

    var domain:String = Security.pageDomain;
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/loading-video-files.html b/docs/development/rich-media-content/working-with-video/loading-video-files.html index a5a3e41f1..ce83f2fab 100644 --- a/docs/development/rich-media-content/working-with-video/loading-video-files.html +++ b/docs/development/rich-media-content/working-with-video/loading-video-files.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ video file named "video.mp4" in the same directory as the SWF file:

    ns.play("video.mp4");

    More Help topics

    Flex: Spark VideoPlayer control

    spark.components.VideoDisplay

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/monitoring-netstream-activity.html b/docs/development/rich-media-content/working-with-video/monitoring-netstream-activity.html index 1737c1fa2..9b83a905b 100644 --- a/docs/development/rich-media-content/working-with-video/monitoring-netstream-activity.html +++ b/docs/development/rich-media-content/working-with-video/monitoring-netstream-activity.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ not dispatched for either progressive download or HTTP media. Dynamic bitrate switching is an RTMP feature. If a video player using an HTTP stream supports a similar feature, the player can synthesize and dispatch transition events.

    More Help topics

    Monitoring NetStream events

    Detecting player domain

    Adobe Developer Connection: Measuring video consumption in Flash

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/monitoring-netstream-events.html b/docs/development/rich-media-content/working-with-video/monitoring-netstream-events.html index 25660447f..b1d5d5f85 100644 --- a/docs/development/rich-media-content/working-with-video/monitoring-netstream-events.html +++ b/docs/development/rich-media-content/working-with-video/monitoring-netstream-events.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ data events from any active NetStreams in an application. Typically, such a class would upload the data it was interested in analyzing to a server for collection.

    package com.adobe.example
    {
    import flash.events.NetDataEvent;
    import flash.events.NetMonitorEvent;
    import flash.events.NetStatusEvent;
    import flash.net.NetMonitor;
    import flash.net.NetStream;

    public class NetStreamEventMonitor
    {
    private var netmon:NetMonitor;
    private var heartbeat:Timer = new Timer( 5000 );

    public function NetStreamEventMonitor()
    {
    //Create NetMonitor object
    netmon = new NetMonitor();
    netmon.addEventListener( NetMonitorEvent.NET_STREAM_CREATE, newNetStream );

    //Start the heartbeat timer
    heartbeat.addEventListener( TimerEvent.TIMER, onHeartbeat );
    heartbeat.start();
    }

    //On new NetStream
    private function newNetStream( event:NetMonitorEvent ):void
    {
    trace( "New Netstream object");
    var stream:NetStream = event.netStream;
    stream.addEventListener(NetDataEvent.MEDIA_TYPE_DATA, onStreamData);
    stream.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
    }

    //On data events from a NetStream object
    private function onStreamData( event:NetDataEvent ):void
    {

    var netStream:NetStream = event.target as NetStream;
    trace( "Data event from " + netStream.info.uri + " at " + event.timestamp );
    switch( event.info.handler )
    {
    case "onMetaData":
    //handle metadata;
    break;
    case "onXMPData":
    //handle XMP;
    break;
    case "onPlayStatus":
    //handle NetStream.Play.Complete
    case "onImageData":
    //handle image
    break;
    case "onTextData":
    //handle text
    break;
    default:
    //handle other events

    }
    }

    //On status events from a NetStream object
    private function onStatus( event:NetStatusEvent ):void
    {
    trace( "Status event from " + event.target.info.uri + " at " + event.target.time );
    //handle status events
    }
    //On heartbeat timer
    private function onHeartbeat( event:TimerEvent ):void
    {
    var streams:Vector.<NetStream> = netmon.listStreams();
    for( var i:int = 0; i < streams.length; i++ )
    {
    trace( "Heartbeat on " + streams[i].info.uri + " at " + streams[i].time );
    //handle heartbeat event
    }
    }

    }
    }
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/playing-video-in-full-screen-mode.html b/docs/development/rich-media-content/working-with-video/playing-video-in-full-screen-mode.html index 44f186398..63f7004a2 100644 --- a/docs/development/rich-media-content/working-with-video/playing-video-in-full-screen-mode.html +++ b/docs/development/rich-media-content/working-with-video/playing-video-in-full-screen-mode.html @@ -16,7 +16,7 @@ - + @@ -67,7 +67,7 @@ Working with full-screen mode. For more information on StageVideo, see Using the StageVideo class for hardware accelerated presentation.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/streaming-video-files.html b/docs/development/rich-media-content/working-with-video/streaming-video-files.html index 97655ea17..4d0fa5658 100644 --- a/docs/development/rich-media-content/working-with-video/streaming-video-files.html +++ b/docs/development/rich-media-content/working-with-video/streaming-video-files.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ video blogging, video messaging, and multimedia chat environments. For more information, see the Flash Media Server documentation online at www.adobe.com/go/learn_fms_docs_en.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/understanding-cue-points.html b/docs/development/rich-media-content/working-with-video/understanding-cue-points.html index 93524401c..60f98a11a 100644 --- a/docs/development/rich-media-content/working-with-video/understanding-cue-points.html +++ b/docs/development/rich-media-content/working-with-video/understanding-cue-points.html @@ -16,7 +16,7 @@ - + @@ -53,7 +53,7 @@ For more information on F4V cue points, see Using onXMPData().

    For more information on handling cue points and metadata, see Writing callback methods for metadata and cue points.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/understanding-the-video-class.html b/docs/development/rich-media-content/working-with-video/understanding-the-video-class.html index 68107552d..e860d1ca8 100644 --- a/docs/development/rich-media-content/working-with-video/understanding-the-video-class.html +++ b/docs/development/rich-media-content/working-with-video/understanding-the-video-class.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ Manipulating display objects, Working with geometry, and Filtering display objects.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/understanding-video-formats.html b/docs/development/rich-media-content/working-with-video/understanding-video-formats.html index 02121e089..a669be6e8 100644 --- a/docs/development/rich-media-content/working-with-video/understanding-video-formats.html +++ b/docs/development/rich-media-content/working-with-video/understanding-video-formats.html @@ -16,7 +16,7 @@ - + @@ -91,7 +91,7 @@ without interrupting playback.

  • Captioning video content is easier with external FLV files because you can access the video metadata using event handlers.

  • More Help topics

    Flash Media Server: Supported codecs

    Adobe HTTP Dynamic Streaming

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/using-cue-points-and-metadata.html b/docs/development/rich-media-content/working-with-video/using-cue-points-and-metadata.html index 2c1cb7022..7dd35f3d1 100644 --- a/docs/development/rich-media-content/working-with-video/using-cue-points-and-metadata.html +++ b/docs/development/rich-media-content/working-with-video/using-cue-points-and-metadata.html @@ -16,7 +16,7 @@ - + @@ -60,7 +60,7 @@ process this information, in the same way that you would define callback methods for onCuePoint or onMetaData. In the following example, the onTextData() method displays the track ID number and corresponding track text.

    public function onTextData(textData:Object):void
    {
    // display the track number
    trace(textData.trackid);
    // displays the text, which can be a null string, indicating old text
    // that should be erased
    trace(textData.text);
    }
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/using-the-stagevideo-apis.html b/docs/development/rich-media-content/working-with-video/using-the-stagevideo-apis.html index c6aedb942..a0d132107 100644 --- a/docs/development/rich-media-content/working-with-video/using-the-stagevideo-apis.html +++ b/docs/development/rich-media-content/working-with-video/using-the-stagevideo-apis.html @@ -16,7 +16,7 @@ - + @@ -117,7 +117,7 @@ does not provide a means of querying the color space.

    If your application deems the current color space unacceptable, you can choose to switch from a StageVideo object to a Video object. The Video class supports all color spaces through software compositing.

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/using-the-stagevideo-class.html b/docs/development/rich-media-content/working-with-video/using-the-stagevideo-class.html index e46ecdedd..2b0b12163 100644 --- a/docs/development/rich-media-content/working-with-video/using-the-stagevideo-class.html +++ b/docs/development/rich-media-content/working-with-video/using-the-stagevideo-class.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ the stage video feature are available at Getting Started with Stage Video.

    For a StageVideo quick start tutorial, see Working with Stage Video.

    More Help topics

    About hardware acceleration using StageVideo

    Using the StageVideo APIs

    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/video-example-video-jukebox.html b/docs/development/rich-media-content/working-with-video/video-example-video-jukebox.html index d5194b1af..7652dd5d0 100644 --- a/docs/development/rich-media-content/working-with-video/video-example-video-jukebox.html +++ b/docs/development/rich-media-content/working-with-video/video-example-video-jukebox.html @@ -16,7 +16,7 @@ - + @@ -89,7 +89,7 @@ playVideo() method. If the current video is the last video in the playlist, the clear() method is called on the Video object and the progress bar instance's visible property is set to false:

    private function playNextVideo():void
    {
    if (idx < (videosXML.length() - 1))
    {
    idx++;
    playVideo();
    positionBar.visible = true;
    }
    else
    {
    idx++;
    vid.clear();
    positionBar.visible = false;
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/rich-media-content/working-with-video/writing-callback-methods-for-metadata-and-cue-points.html b/docs/development/rich-media-content/working-with-video/writing-callback-methods-for-metadata-and-cue-points.html index 2637fdaa0..a6e400f40 100644 --- a/docs/development/rich-media-content/working-with-video/writing-callback-methods-for-metadata-and-cue-points.html +++ b/docs/development/rich-media-content/working-with-video/writing-callback-methods-for-metadata-and-cue-points.html @@ -16,7 +16,7 @@ - + @@ -70,7 +70,7 @@ handlers, create an onMetaData() and onCuePoint() method in your code, as seen in the following snippet:

    function onMetaData(infoObject:Object):void
    {
    trace("metadata");
    }
    function onCuePoint(infoObject:Object):void
    {
    trace("cue point");
    }

    More Help topics

    Flash Media Server: Handling metadata in streams

    - + \ No newline at end of file diff --git a/docs/development/security.html b/docs/development/security.html index 66e6bbb91..6ee43867f 100644 --- a/docs/development/security.html +++ b/docs/development/security.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ Player security concepts, see the Flash Player Developer Center topic "Security" at www.adobe.com/go/devnet_security_en.

    - + \ No newline at end of file diff --git a/docs/development/security/accessing-loaded-media-as-data.html b/docs/development/security/accessing-loaded-media-as-data.html index 8bbcb02ee..d63b24f08 100644 --- a/docs/development/security/accessing-loaded-media-as-data.html +++ b/docs/development/security/accessing-loaded-media-as-data.html @@ -16,7 +16,7 @@ - + @@ -103,7 +103,7 @@ the domain of the calling SWF file. You can request that the policy file be downloaded by setting the checkPolicyFile property of the NetStream object to true.

    - + \ No newline at end of file diff --git a/docs/development/security/air-security.html b/docs/development/security/air-security.html index 83598b4e8..b7809313f 100644 --- a/docs/development/security/air-security.html +++ b/docs/development/security/air-security.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/security/air-security/air-security-basics.html b/docs/development/security/air-security/air-security-basics.html index ed7d08235..1308aa82b 100644 --- a/docs/development/security/air-security/air-security-basics.html +++ b/docs/development/security/air-security/air-security-basics.html @@ -16,7 +16,7 @@ - + @@ -37,7 +37,7 @@ memory corruption. These are some of the most common vulnerabilities affecting desktop applications written in native code.

    Adobe recommends

    Maintaining Security with Adobe AIR

    Peleus Uhley and Ethan Malasky provide an overview of the security-related issues that can arise when developing Adobe AIR applications.

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/best-security-practices-for-developers.html b/docs/development/security/air-security/best-security-practices-for-developers.html index 155cb7618..1ebc63100 100644 --- a/docs/development/security/air-security/best-security-practices-for-developers.html +++ b/docs/development/security/air-security/best-security-practices-for-developers.html @@ -16,7 +16,7 @@ - + @@ -67,7 +67,7 @@ using a clear versioning scheme for your application makes it more difficult to trick users into installing a downgraded version.

    More Help topics

    Setting AIR application properties

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/code-signing.html b/docs/development/security/air-security/code-signing.html index 793dbc63f..4cccb07e4 100644 --- a/docs/development/security/air-security/code-signing.html +++ b/docs/development/security/air-security/code-signing.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ should only be used for testing an application prior to public release.

    More Help topics

    Signing AIR applications

    ADT code signing options

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/html-security-in-adobe-air.html b/docs/development/security/air-security/html-security-in-adobe-air.html index 3ceb72cfa..401b8df94 100644 --- a/docs/development/security/air-security/html-security-in-adobe-air.html +++ b/docs/development/security/air-security/html-security-in-adobe-air.html @@ -16,7 +16,7 @@ - + @@ -185,7 +185,7 @@ true to place HTML created using the loadString() method into the application sandbox. For more information, see Loading HTML content from a string.

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/installation-and-updates.html b/docs/development/security/air-security/installation-and-updates.html index faf509efa..a0bd189b3 100644 --- a/docs/development/security/air-security/installation-and-updates.html +++ b/docs/development/security/air-security/installation-and-updates.html @@ -16,7 +16,7 @@ - + @@ -119,7 +119,7 @@ Distributing, Installing, and Running AIR applications

    Setting AIR application properties

    Digitally signing an AIR file

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/scripting-between-content-in-different-domains.html b/docs/development/security/air-security/scripting-between-content-in-different-domains.html index 8d2ed59ba..33b511c37 100644 --- a/docs/development/security/air-security/scripting-between-content-in-different-domains.html +++ b/docs/development/security/air-security/scripting-between-content-in-different-domains.html @@ -16,7 +16,7 @@ - + @@ -64,7 +64,7 @@ would be better to expose a readApplicationSetting() API that doesn't take a path and reads a specific file. The more semantic approach limits the damage that an application can do once part of it is compromised.

    More Help topics

    Cross-scripting content in different security sandboxes

    The AIR application sandbox

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/security-on-android-devices.html b/docs/development/security/air-security/security-on-android-devices.html index 3d763c08b..60c124ff5 100644 --- a/docs/development/security/air-security/security-on-android-devices.html +++ b/docs/development/security/air-security/security-on-android-devices.html @@ -16,7 +16,7 @@ - + @@ -82,7 +82,7 @@ access the files of any other application. Thus, data stored using the encrypted local store is not secure on a rooted device.

    More Help topics

    Android permissions

    Android: Security and Permissions

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/security-on-ios-devices.html b/docs/development/security/air-security/security-on-ios-devices.html index 8923b442e..dff86a880 100644 --- a/docs/development/security/air-security/security-on-ios-devices.html +++ b/docs/development/security/air-security/security-on-ios-devices.html @@ -16,7 +16,7 @@ - + @@ -39,7 +39,7 @@ event dispatched by the NativeApplication object signals that an application is about to switch to the background. Use this event to clear or hide any sensitive information.

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/working-securely-with-untrusted-content.html b/docs/development/security/air-security/working-securely-with-untrusted-content.html index 9c0b7e3f4..b1e829431 100644 --- a/docs/development/security/air-security/working-securely-with-untrusted-content.html +++ b/docs/development/security/air-security/working-securely-with-untrusted-content.html @@ -16,7 +16,7 @@ - + @@ -69,7 +69,7 @@ false (the default), the Loader object throws a SecurityError exception.

    Note: In a future release of Adobe AIR, this API may change. When that occurs, you may need to recompile content that uses the allowLoadBytesCodeExecution property of the LoaderContext class.

    - + \ No newline at end of file diff --git a/docs/development/security/air-security/writing-to-disk.html b/docs/development/security/air-security/writing-to-disk.html index ab3cb3b34..c30fddceb 100644 --- a/docs/development/security/air-security/writing-to-disk.html +++ b/docs/development/security/air-security/writing-to-disk.html @@ -16,7 +16,7 @@ - + @@ -49,7 +49,7 @@ /home/<user>/.appdata

    If an application is designed to interact with existing files in the user's file system, be sure to read Best security practices for developers.

    - + \ No newline at end of file diff --git a/docs/development/security/camera-microphone-clipboard-mouse-and-keyboard-access.html b/docs/development/security/camera-microphone-clipboard-mouse-and-keyboard-access.html index 88a5daccc..d3e5aa0bb 100644 --- a/docs/development/security/camera-microphone-clipboard-mouse-and-keyboard-access.html +++ b/docs/development/security/camera-microphone-clipboard-mouse-and-keyboard-access.html @@ -16,7 +16,7 @@ - + @@ -39,7 +39,7 @@ method.

    An application running in Flash Player can monitor only keyboard and mouse events that occur within its focus. Content running in Flash Player cannot detect keyboard or mouse events in another application.

    - + \ No newline at end of file diff --git a/docs/development/security/controlling-outbound-url-access.html b/docs/development/security/controlling-outbound-url-access.html index ec9f7a5b3..fbadf0245 100644 --- a/docs/development/security/controlling-outbound-url-access.html +++ b/docs/development/security/controlling-outbound-url-access.html @@ -16,7 +16,7 @@ - + @@ -71,7 +71,7 @@ method of the ExternalInterface class

  • The flash.net.navigateToURL() function

  • - + \ No newline at end of file diff --git a/docs/development/security/cross-scripting.html b/docs/development/security/cross-scripting.html index a66da95de..1bb5c3740 100644 --- a/docs/development/security/cross-scripting.html +++ b/docs/development/security/cross-scripting.html @@ -16,7 +16,7 @@ - + @@ -98,7 +98,7 @@ between the loaded object and the Loader object: childAllowsParent and parentAllowsChild.

    For events that are dispatched from objects other than display objects, there are no security checks or security-related implications.

    - + \ No newline at end of file diff --git a/docs/development/security/flash-platform-security-overview.html b/docs/development/security/flash-platform-security-overview.html index 241b0acad..2d4eefe53 100644 --- a/docs/development/security/flash-platform-security-overview.html +++ b/docs/development/security/flash-platform-security-overview.html @@ -16,7 +16,7 @@ - + @@ -76,7 +76,7 @@ domain. For details, see Using URLLoader and URLStream.

    Note: Policy files are never required in order for code executing in the AIR application sandbox to load remote content or data.

    - + \ No newline at end of file diff --git a/docs/development/security/full-screen-interactive-mode-security.html b/docs/development/security/full-screen-interactive-mode-security.html index 4d79c51dd..a8ea18712 100644 --- a/docs/development/security/full-screen-interactive-mode-security.html +++ b/docs/development/security/full-screen-interactive-mode-security.html @@ -16,7 +16,7 @@ - + @@ -44,7 +44,7 @@ details, see Administrator controls.

    In a browser, a SWF file must be contained in an HTML page to allow full-screen interactive mode.

    - + \ No newline at end of file diff --git a/docs/development/security/full-screen-mode-security.html b/docs/development/security/full-screen-mode-security.html index bf42a910a..c08240745 100644 --- a/docs/development/security/full-screen-mode-security.html +++ b/docs/development/security/full-screen-mode-security.html @@ -16,7 +16,7 @@ - + @@ -51,7 +51,7 @@ setting FullScreenDisable = 1 in the mms.cfg file. For details, see Administrator controls.

    In a browser, a SWF file must be contained in an HTML page to allow full-screen mode.

    - + \ No newline at end of file diff --git a/docs/development/security/loading-content.html b/docs/development/security/loading-content.html index a280eebc4..a650af16d 100644 --- a/docs/development/security/loading-content.html +++ b/docs/development/security/loading-content.html @@ -16,7 +16,7 @@ - + @@ -124,7 +124,7 @@ Server-Side ActionScript Language Reference. (The drawWithQuality method is available in Flash Player 11.3 and higher; AIR 3.3 and higher.)

    - + \ No newline at end of file diff --git a/docs/development/security/loading-data.html b/docs/development/security/loading-data.html index cd8296348..1b66a3ec5 100644 --- a/docs/development/security/loading-data.html +++ b/docs/development/security/loading-data.html @@ -16,7 +16,7 @@ - + @@ -109,7 +109,7 @@ server other than its own. A SWF file may upload to, or download from, a different server if that server provides a policy file that grants permission to the domain of the invoking SWF file.

    - + \ No newline at end of file diff --git a/docs/development/security/loading-embedded-content-from-swf-files-loaded-into-a-security-domain.html b/docs/development/security/loading-embedded-content-from-swf-files-loaded-into-a-security-domain.html index 35ff171a2..ebf940e2a 100644 --- a/docs/development/security/loading-embedded-content-from-swf-files-loaded-into-a-security-domain.html +++ b/docs/development/security/loading-embedded-content-from-swf-files-loaded-into-a-security-domain.html @@ -16,7 +16,7 @@ - + @@ -41,7 +41,7 @@ SWF file by calling Loader.contentLoaderInfo.applicationDomain.getDefinition() or Loader.contentLoaderInfo.applicationDomain.getQualifiedDefinitionNames() (Flash Player 11.3 and higher; AIR 3.3 and higher).

    - + \ No newline at end of file diff --git a/docs/development/security/permission-controls.html b/docs/development/security/permission-controls.html index fd694461b..fd91ff988 100644 --- a/docs/development/security/permission-controls.html +++ b/docs/development/security/permission-controls.html @@ -16,7 +16,7 @@ - + @@ -265,7 +265,7 @@ method, which causes Flash Player to check for a policy file at a nonstandard location. For more information, see Website controls (policy files).

    - + \ No newline at end of file diff --git a/docs/development/security/restricting-networking-apis.html b/docs/development/security/restricting-networking-apis.html index f1a7f7d11..3abaeff91 100644 --- a/docs/development/security/restricting-networking-apis.html +++ b/docs/development/security/restricting-networking-apis.html @@ -16,7 +16,7 @@ - + @@ -78,7 +78,7 @@ SecurityError exception is thrown).

    When allowNetworking is set to "none", a symbol from an imported shared library added in the Flash Professional (not ActionScript) is blocked at run time.

    - + \ No newline at end of file diff --git a/docs/development/security/security-sandboxes.html b/docs/development/security/security-sandboxes.html index 93aa84247..6d820060c 100644 --- a/docs/development/security/security-sandboxes.html +++ b/docs/development/security/security-sandboxes.html @@ -16,7 +16,7 @@ - + @@ -177,7 +177,7 @@ domain. However, files outside the AIR application sandbox are not permitted to cross-script the AIR file. By default, files in the AIR application sandbox can load content and data from any domain.

    - + \ No newline at end of file diff --git a/docs/development/security/setting-localconnection-permissions.html b/docs/development/security/setting-localconnection-permissions.html index 76e7b1b85..5ee21beea 100644 --- a/docs/development/security/setting-localconnection-permissions.html +++ b/docs/development/security/setting-localconnection-permissions.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ the LocalConnection class that you call. With this change, allowDomain() works in much the same way as Security.allowDomain().

    A SWF file can use the domain property of the LocalConnection class to determine its domain.

    - + \ No newline at end of file diff --git a/docs/development/security/shared-objects.html b/docs/development/security/shared-objects.html index 277fa922f..87c0355bc 100644 --- a/docs/development/security/shared-objects.html +++ b/docs/development/security/shared-objects.html @@ -16,7 +16,7 @@ - + @@ -80,7 +80,7 @@ SharedObject.getLocal() and SharedObject.getRemote() methods return null. For more information, see www.adobe.com/products/flashplayer/articles/thirdpartylso.

    - + \ No newline at end of file diff --git a/docs/development/security/working-with-legacy-content.html b/docs/development/security/working-with-legacy-content.html index 2920e5651..c3a3d4684 100644 --- a/docs/development/security/working-with-legacy-content.html +++ b/docs/development/security/working-with-legacy-content.html @@ -16,7 +16,7 @@ - + @@ -44,7 +44,7 @@ it, to retrieve those persistent shared objects from a SWF that uses ActionScript 3.0, you must set Security.exactSettings to false before calling SharedObject.getLocal().

    - + \ No newline at end of file diff --git a/docs/development/text.html b/docs/development/text.html index 260ba3c91..931801de0 100644 --- a/docs/development/text.html +++ b/docs/development/text.html @@ -16,13 +16,13 @@ - + - + \ No newline at end of file diff --git a/docs/development/text/basics-of-working-with-text.html b/docs/development/text/basics-of-working-with-text.html index ee336b8c6..abfb280b8 100644 --- a/docs/development/text/basics-of-working-with-text.html +++ b/docs/development/text/basics-of-working-with-text.html @@ -16,7 +16,7 @@ - + @@ -73,7 +73,7 @@ baseline), and so on.

    Tracking
    An adjustment of spacing between groups of letters or blocks of text to increase or decrease the density and make the text more readable.

    - + \ No newline at end of file diff --git a/docs/development/text/embedding-fonts.html b/docs/development/text/embedding-fonts.html index b34122ef4..561a7c273 100644 --- a/docs/development/text/embedding-fonts.html +++ b/docs/development/text/embedding-fonts.html @@ -16,13 +16,13 @@ - +

    Embedding fonts

    You can statically embed fonts in ActionScript through the Embed meta-data. Here is a basic example:

    public final class Fonts {
    [Embed(
    source = 'path/to/font.ttf',
    fontName = 'Font Name',
    mimeType = 'application/x-font',
    advancedAntiAliasing = 'true',
    embedAsCFF = 'false'
    )]
    public static const myFont:Class;
    }

    Note that if you want to refer to that font, you also need to refer to this Fonts class somewhere in your ActionScript program.

    Using embedded font in a TextField

    To use the font in a TextField object, you must set its embedFonts property to true and match the property font of the desired TextFormat with the fontName option from the Embed meta-data.

    textField.embedFonts = true;
    textField.defaultTextFormat = new TextFormat;
    textField.defaultTextFormat.font = 'Font Name';

    Embed options

    mimeType

    The mimeType can be set to either:

    • "application/x-font-truetype"
    • "application/x-font" (resolves to system font)

    source

    Path to the font file relative to the ActionScript file that uses Embed.

    fontFamily

    Defines a name for the font that can be used in style sheets.

    fontStyle

    This option can be either:

    • "normal"
    • "italic"
    • "oblique"

    fontWeight

    This option can be either a number in quotes, such as "700" or one of the following:

    • "normal"
    • "bold"
    • "heavy"

    advancedAntiAliasing

    Determines whether to include the advanced anti-aliasing information when embedding the font.

    unicodeRange

    Specifies a range (or subset) of characters that compose the face of an embedded font, in the format U+[beginning of range]-[end of range]. Each character in a font that you use must be described; removing some of these characters reduces the overall size of the description information that Flash must include for each embedded font.

    Examples:

    • [Embed(unicodeRange="U+0041")]
    • [Embed(unicodeRange="U+0041-007F")]
    • [Embed(unicodeRange="U+0041,U+0043-00FF,U+0045")]

    systemFont

    Allows to embed a system font. Replaces the option source. It will embed the font defined by "name" from the computer's Fonts folder.

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-flash-text-engine.html b/docs/development/text/using-the-flash-text-engine.html index 074f7112f..8bb741b2e 100644 --- a/docs/development/text/using-the-flash-text-engine.html +++ b/docs/development/text/using-the-flash-text-engine.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ use the existing TLF component, or use the framework to build your own text component. For more information, see Using the Text Layout Framework.

    More Help topics

    flash.text.engine package

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-flash-text-engine/controlling-text.html b/docs/development/text/using-the-flash-text-engine/controlling-text.html index 83600ed60..6a1fc31a7 100644 --- a/docs/development/text/using-the-flash-text-engine/controlling-text.html +++ b/docs/development/text/using-the-flash-text-engine/controlling-text.html @@ -16,7 +16,7 @@ - + @@ -81,7 +81,7 @@ objects to it. Then it assigns the tab stops to the tabStops property of a TextBlock instance.

    var tabStops:Vector.<TabStop> = new Vector.<TabStop>();
    tabStops.push(tab1, tab2, tab3, tab4);
    textBlock.tabStops = tabStops

    For more information on Vectors, see Working with arrays.

    The following example shows the effect of each of the TabStop alignment options.

    package {

    import flash.text.engine.*;
    import flash.display.Sprite;

    public class TabStopExample extends Sprite
    {
    public function TabStopExample()
    {
    var format:ElementFormat = new ElementFormat();
    format.fontDescription = new FontDescription("Arial");
    format.fontSize = 16;

    var tabStops:Vector.<TabStop> = new Vector.<TabStop>();
    tabStops.push(
    new TabStop(TabAlignment.START, 20),
    new TabStop(TabAlignment.CENTER, 140),
    new TabStop(TabAlignment.DECIMAL, 260, "."),
    new TabStop(TabAlignment.END, 380));
    var textBlock:TextBlock = new TextBlock();
    textBlock.content = new TextElement(
    "\tt1\tt2\tt3\tt4\n" +
    "\tThis line aligns on 1st tab\n" +
    "\t\t\t\tThis is the end\n" +
    "\tThe following fragment centers on the 2nd tab:\t\t\n" +
    "\t\tit's on me\t\t\n" +
    "\tThe following amounts align on the decimal point:\n" +
    "\t\t\t45.00\t\n" +
    "\t\t\t75,320.00\t\n" +
    "\t\t\t6,950.00\t\n" +
    "\t\t\t7.01\t\n", format);

    textBlock.tabStops = tabStops;
    var yPosition:Number = 60;
    var previousTextLine:TextLine = null;
    var textLine:TextLine;
    var i:int;
    for (i = 0; i < 10; i++) {
    textLine = textBlock.createTextLine(previousTextLine, 1000, 0);
    textLine.x = 20;
    textLine.y = yPosition;
    addChild(textLine);
    yPosition += 25;
    previousTextLine = textLine;
    }
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/text/using-the-flash-text-engine/creating-and-displaying-text.html b/docs/development/text/using-the-flash-text-engine/creating-and-displaying-text.html index ad59ed770..2860348c1 100644 --- a/docs/development/text/using-the-flash-text-engine/creating-and-displaying-text.html +++ b/docs/development/text/using-the-flash-text-engine/creating-and-displaying-text.html @@ -16,7 +16,7 @@ - + @@ -59,7 +59,7 @@ replaceText() inserts the specified text at that location. Otherwise it replaces the characters specified by beginIndex and endIndex with the new text.

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-flash-text-engine/flash-text-engine-example-news-layout.html b/docs/development/text/using-the-flash-text-engine/flash-text-engine-example-news-layout.html index 9cac35afd..30dc83bcc 100644 --- a/docs/development/text/using-the-flash-text-engine/flash-text-engine-example-news-layout.html +++ b/docs/development/text/using-the-flash-text-engine/flash-text-engine-example-news-layout.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ space on the page.

    package com.example.programmingas3.newslayout
    {
    import flash.text.engine.*;
    public class HeadlineTextField extends FormattedTextBlock
    {

    public static var MIN_POINT_SIZE:uint = 6;
    public static var MAX_POINT_SIZE:uint = 128;

    public function HeadlineTextField(te:ElementFormat,txt:String,colW:int = 0)
    {
    super(te,txt);
    }

    public function fitText(maxLines:uint = 1, targetWidth:Number = -1):uint
    {
    if (targetWidth == -1)
    {
    targetWidth = this.width;
    }

    var pixelsPerChar:Number = targetWidth / this.blockText.length;
    var pointSize:Number = Math.min(MAX_POINT_SIZE,
    Math.round(pixelsPerChar * 1.8 * maxLines));

    if (pointSize < 6)
    {
    // the point size is too small
    return pointSize;
    }

    this.changeSize(pointSize);
    if (this.totalTextLines > maxLines)
    {
    return shrinkText(--pointSize, maxLines);
    }
    else
    {
    return growText(pointSize, maxLines);
    }
    }

    public function growText(pointSize:Number, maxLines:uint = 1):Number
    {
    if (pointSize >= MAX_POINT_SIZE)
    {
    return pointSize;
    }

    this.changeSize(pointSize + 1);
    if (this.totalTextLines > maxLines)
    {
    // set it back to the last size
    this.changeSize(pointSize);
    return pointSize;
    }
    else
    {
    return growText(pointSize + 1, maxLines);
    }
    }

    public function shrinkText(pointSize:Number, maxLines:uint=1):Number
    {
    if (pointSize <= MIN_POINT_SIZE)
    {
    return pointSize;
    }
    this.changeSize(pointSize);

    if (this.totalTextLines > maxLines)
    {
    return shrinkText(pointSize - 1, maxLines);
    }
    else
    {
    return pointSize;
    }
    }
    }
    }

    MultiColumnText.as handles formatting text within a multicolumn design. It demonstrates the flexible use a TextBlock object as a factory for creating, formatting, and placing text lines.

    package com.example.programmingas3.newslayout
    {
    import flash.display.Sprite;
    import flash.text.engine.*;

    public class MultiColumnText extends Sprite
    {
    private var tb:TextBlock;
    private var te:TextElement;
    private var numColumns:uint = 2;
    private var gutter:uint = 10;
    private var leading:Number = 1.25;
    private var preferredWidth:Number = 400;
    private var preferredHeight:Number = 100;
    private var colWidth:int = 200;

    public function MultiColumnText(txt:String = "",cols:uint = 2,
    gutter:uint = 10, w:Number = 400, h:Number = 100,
    ef:ElementFormat = null):void
    {
    this.numColumns = Math.max(1, cols);
    this.gutter = Math.max(1, gutter);

    this.preferredWidth = w;
    this.preferredHeight = h;

    this.setColumnWidth();

    var field:FormattedTextBlock = new FormattedTextBlock(ef,txt,this.colWidth);
    var totLines:int = field.totalTextLines;
    field = null;
    var linesPerCol:int = Math.ceil(totLines/cols);

    tb = new TextBlock();
    te = new TextElement(txt,ef);
    tb.content = te;
    var textLine:TextLine = null;
    var x:Number = 0;
    var y:Number = 0;
    var i:int = 0;
    var j:int = 0;
    while (textLine = tb.createTextLine(textLine,this.colWidth,0,true))
    {
    textLine.x = Math.floor(i/(linesPerCol+1))*(this.colWidth+this.gutter);
    textLine.y = y;
    y += this.leading*textLine.height;
    j++;
    if(j>linesPerCol)
    {
    y = 0;
    j = 0;
    }
    i++;

    this.addChild(textLine);
    }
    }

    private function setColumnWidth():void
    {
    this.colWidth = Math.floor( (this.preferredWidth -
    ((this.numColumns - 1) * this.gutter)) / this.numColumns);
    }

    }
    }
    - + \ No newline at end of file diff --git a/docs/development/text/using-the-flash-text-engine/formatting-text.html b/docs/development/text/using-the-flash-text-engine/formatting-text.html index ba9214202..0f219f469 100644 --- a/docs/development/text/using-the-flash-text-engine/formatting-text.html +++ b/docs/development/text/using-the-flash-text-engine/formatting-text.html @@ -16,7 +16,7 @@ - + @@ -70,7 +70,7 @@ changed, and it can then be assigned to the TextElement instance. Any new lines created from it have the new formatting. Previous lines created from this same object and using the old format are unchanged.

    package
    {
    import flash.display.Sprite;
    import flash.text.*;

    public class ElementFormatCloneExample extends Sprite
    {
    private var tb:TextBlock = new TextBlock();
    private var te:TextElement;
    private var ef1:ElementFormat;
    private var ef2:ElementFormat;
    private var fd:FontDescription = new FontDescription();

    public function ElementFormatCloneExample()
    {
    fd.fontName = "Garamond";
    ef1 = new ElementFormat(fd);
    ef1.fontSize = 24;
    var str:String = "This is flash text";
    te = new TextElement(str, ef);
    tb.content = te;
    var tx1:TextLine = tb.createTextLine(null,600);
    addChild(tx1);

    ef2 = (ef1.locked) ? ef1.clone() : ef1;
    ef2.fontSize = 32;
    tb.content.elementFormat = ef2;
    var tx2:TextLine = tb.createTextLine(null,600);
    addChild(tx2);
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/text/using-the-flash-text-engine/handling-events-in-fte.html b/docs/development/text/using-the-flash-text-engine/handling-events-in-fte.html index c476b05b7..32b8f3d93 100644 --- a/docs/development/text/using-the-flash-text-engine/handling-events-in-fte.html +++ b/docs/development/text/using-the-flash-text-engine/handling-events-in-fte.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ clickHandler() method changes the text to italic. It also replaces the content of the third text element to read, "Click here to see me in normal font!".

    package
    {
    import flash.text.engine.*;
    import flash.ui.Mouse;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.events.EventDispatcher;

    public class EventMirrorExample extends Sprite
    {
    var fontDescription:FontDescription = new FontDescription("Helvetica", "bold");
    var format:ElementFormat = new ElementFormat(fontDescription, 18);
    var textElement1 = new TextElement("Click ", format);
    var textElement2 = new TextElement("here ", format);
    var textElement3 = new TextElement("to see me in italic! ", format);
    var textBlock:TextBlock = new TextBlock();

    public function EventMirrorExample()
    {
    var myEvent:EventDispatcher = new EventDispatcher();

    myEvent.addEventListener("click", clickHandler);
    myEvent.addEventListener("mouseOut", mouseOutHandler);
    myEvent.addEventListener("mouseOver", mouseOverHandler);

    textElement2.eventMirror=myEvent;

    var groupVector:Vector.<ContentElement> = new Vector.<ContentElement>;
    groupVector.push(textElement1, textElement2, textElement3);
    var groupElement:GroupElement = new GroupElement(groupVector);

    textBlock.content = groupElement;
    createLines(textBlock);
    }

    private function clickHandler(event:MouseEvent):void
    {
    var newFont:FontDescription = new FontDescription();
    newFont.fontWeight = "bold";

    var newFormat:ElementFormat = new ElementFormat();
    newFormat.fontSize = 18;
    if(textElement3.text == "to see me in italic! ") {
    newFont.fontPosture = FontPosture.ITALIC;
    textElement3.replaceText(0,21, "to see me in normal font! ");
    }
    else {
    newFont.fontPosture = FontPosture.NORMAL;
    textElement3.replaceText(0, 26, "to see me in italic! ");
    }
    newFormat.fontDescription = newFont;
    textElement1.elementFormat = newFormat;
    textElement2.elementFormat = newFormat;
    textElement3.elementFormat = newFormat;
    createLines(textBlock);
    }

    private function mouseOverHandler(event:MouseEvent):void
    {
    Mouse.cursor = "button";
    }

    private function mouseOutHandler(event:MouseEvent):void
    {
    Mouse.cursor = "arrow";
    }

    private function createLines(textBlock:TextBlock):void
    {
    if(textBlock.firstLine)
    removeChild (textBlock.firstLine);
    var textLine:TextLine = textBlock.createTextLine (null, 300);
    textLine.x = 15;
    textLine.y = 20;
    addChild (textLine);
    }
    }
    }

    The mouseOverHandler() and mouseOutHandler() functions set the cursor to a button cursor when it's over the word "here" and back to an arrow when it's not.

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-flash-text-engine/working-with-fonts.html b/docs/development/text/using-the-flash-text-engine/working-with-fonts.html index 8c3fa2608..ee8dc5f74 100644 --- a/docs/development/text/using-the-flash-text-engine/working-with-fonts.html +++ b/docs/development/text/using-the-flash-text-engine/working-with-fonts.html @@ -16,7 +16,7 @@ - + @@ -62,7 +62,7 @@ then be assigned to the ElementFormat. Any new lines created from this TextElement have the new formatting. Previous lines created from this same object are unchanged.

    package
    {
    import flash.display.Sprite;
    import flash.text.*;

    public class FontDescriptionCloneExample extends Sprite
    {
    private var tb:TextBlock = new TextBlock();
    private var te:TextElement;
    private var ef1:ElementFormat;
    private var ef2:ElementFormat;
    private var fd1:FontDescription = new FontDescription();
    private var fd2:FontDescription;

    public function FontDescriptionCloneExample()
    {
    fd1.fontName = "Garamond";
    ef1 = new ElementFormat(fd);
    var str:String = "This is flash text";
    te = new TextElement(str, ef);
    tb.content = te;
    var tx1:TextLine = tb.createTextLine(null,600);
    addChild(tx1);

    fd2 = (fd1.locked) ? fd1.clone() : fd1;
    fd2.fontName = "Arial";
    ef2 = (ef1.locked) ? ef1.clone() : ef1;
    ef2.fontDescription = fd2;
    tb.content.elementFormat = ef2;
    var tx2:TextLine = tb.createTextLine(null,600);
    addChild(tx2);
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/text/using-the-text-layout-framework.html b/docs/development/text/using-the-text-layout-framework.html index 401416638..fde3d072f 100644 --- a/docs/development/text/using-the-text-layout-framework.html +++ b/docs/development/text/using-the-text-layout-framework.html @@ -16,7 +16,7 @@ - + @@ -305,7 +305,7 @@ "inherit", which is a constant defined by the FormatValue class. The default value is "none".

    More Help topics

    "Flow" TLF markup application

    TLF 2.0 Lists Markup

    TLF 2.0 SubParagraphGroupElements and typeName

    Padding changes in TLF 2.0

    TLF FlowElement and LinkElement Events and EventMirrors

    TLF Floats

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class.html b/docs/development/text/using-the-textfield-class.html index 1c543f71b..7e38d0e1f 100644 --- a/docs/development/text/using-the-textfield-class.html +++ b/docs/development/text/using-the-textfield-class.html @@ -16,7 +16,7 @@ - + @@ -42,7 +42,7 @@ field, one sentence can be bold red text and the next sentence can be blue italic text.

    In addition to the classes in the flash.text package, you can use the flash.events.TextEvent class to respond to user actions related to text.

    More Help topics

    Text

    MX text controls

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class/advanced-text-rendering.html b/docs/development/text/using-the-textfield-class/advanced-text-rendering.html index e20ac6d12..b607f1324 100644 --- a/docs/development/text/using-the-textfield-class/advanced-text-rendering.html +++ b/docs/development/text/using-the-textfield-class/advanced-text-rendering.html @@ -16,7 +16,7 @@ - + @@ -66,7 +66,7 @@ Embed fonts for consistent text appearance

    Embedding assets

    Fonts

    Peter deHaan: Embedding fonts

    Divillysausages.com: AS3 Font embedding masterclass

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class/capturing-text-input.html b/docs/development/text/using-the-textfield-class/capturing-text-input.html index 0564f3cef..3dc8dfea2 100644 --- a/docs/development/text/using-the-textfield-class/capturing-text-input.html +++ b/docs/development/text/using-the-textfield-class/capturing-text-input.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ event handler called textInputCapture captures the string of text entered and assigns it a variable. Flash Player or AIR displays the new text in another text field, called myOutputBox.

    package
    {
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.text.*;
    import flash.events.*;

    public class CaptureUserInput extends Sprite
    {
    private var myTextBox:TextField = new TextField();
    private var myOutputBox:TextField = new TextField();
    private var myText:String = "Type your text here.";

    public function CaptureUserInput()
    {
    captureText();
    }

    public function captureText():void
    {
    myTextBox.type = TextFieldType.INPUT;
    myTextBox.background = true;
    addChild(myTextBox);
    myTextBox.text = myText;
    myTextBox.addEventListener(TextEvent.TEXT_INPUT, textInputCapture);
    }

    public function textInputCapture(event:TextEvent):void
    {
    var str:String = myTextBox.text;
    createOutputBox(str);
    }

    public function createOutputBox(str:String):void
    {
    myOutputBox.background = true;
    myOutputBox.x = 200;
    addChild(myOutputBox);
    myOutputBox.text = str;
    }

    }
    }
    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class/displaying-text.html b/docs/development/text/using-the-textfield-class/displaying-text.html index 383727587..53f6a86f4 100644 --- a/docs/development/text/using-the-textfield-class/displaying-text.html +++ b/docs/development/text/using-the-textfield-class/displaying-text.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@ like a mouse click or a keypress.

    The following example creates a text field that is a set size and contains more text than the field can display at one time. As the user clicks the text field, the text scrolls vertically.

    package
    {
    import flash.display.Sprite;
    import flash.text.*;
    import flash.events.MouseEvent;

    public class TextScrollExample extends Sprite
    {
    private var myTextBox:TextField = new TextField();
    private var myText:String = "Hello world and welcome to the show. It's really nice to meet you. Take your coat off and stay a while. OK, show is over. Hope you had fun. You can go home now. Don't forget to tip your waiter. There are mints in the bowl by the door. Thank you. Please come again.";

    public function TextScrollExample()
    {
    myTextBox.text = myText;
    myTextBox.width = 200;
    myTextBox.height = 50;
    myTextBox.multiline = true;
    myTextBox.wordWrap = true;
    myTextBox.background = true;
    myTextBox.border = true;

    var format:TextFormat = new TextFormat();
    format.font = "Verdana";
    format.color = 0xFF0000;
    format.size = 10;

    myTextBox.defaultTextFormat = format;
    addChild(myTextBox);
    myTextBox.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownScroll);
    }

    public function mouseDownScroll(event:MouseEvent):void
    {
    myTextBox.scrollV++;
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class/formatting-text.html b/docs/development/text/using-the-textfield-class/formatting-text.html index cd3d386df..171291313 100644 --- a/docs/development/text/using-the-textfield-class/formatting-text.html +++ b/docs/development/text/using-the-textfield-class/formatting-text.html @@ -16,7 +16,7 @@ - + @@ -82,7 +82,7 @@ of the text.

    The following example uses TextField.setTextFormat() on a range of characters to change the appearance of part of the content of myTextField when the user clicks the text field:

    var myTextField:TextField = new TextField();
    myTextField.text = "No matter where you click on this text field the TEXT IN ALL CAPS changes format.";
    myTextField.autoSize = TextFieldAutoSize.LEFT;
    addChild(myTextField);
    addEventListener(MouseEvent.CLICK, changeText);

    var myformat:TextFormat = new TextFormat();
    myformat.color = 0xFF0000;
    myformat.size = 18;
    myformat.underline = true;

    function changeText(event:MouseEvent):void
    {
    myTextField.setTextFormat(myformat, 49, 65);
    }
    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class/restricting-text-input.html b/docs/development/text/using-the-textfield-class/restricting-text-input.html index f11e056cd..2a356a356 100644 --- a/docs/development/text/using-the-textfield-class/restricting-text-input.html +++ b/docs/development/text/using-the-textfield-class/restricting-text-input.html @@ -16,7 +16,7 @@ - + @@ -40,7 +40,7 @@ automatically converts restricted letters to the allowed case. If you use the fl.text.TLFTextField.restrict property (that is, if you use a TLF text field), the runtime ignores restricted letters.

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class/selecting-and-manipulating-text.html b/docs/development/text/using-the-textfield-class/selecting-and-manipulating-text.html index c18111e83..7d0dff8c9 100644 --- a/docs/development/text/using-the-textfield-class/selecting-and-manipulating-text.html +++ b/docs/development/text/using-the-textfield-class/selecting-and-manipulating-text.html @@ -16,7 +16,7 @@ - + @@ -37,7 +37,7 @@ change the text appearance. For more information about applying a collection of TextFormat properties to selected text, see Formatting ranges of text within a text field.

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class/textfield-example-newspaper-style-text-formatting.html b/docs/development/text/using-the-textfield-class/textfield-example-newspaper-style-text-formatting.html index 485e57854..52d5b0f08 100644 --- a/docs/development/text/using-the-textfield-class/textfield-example-newspaper-style-text-formatting.html +++ b/docs/development/text/using-the-textfield-class/textfield-example-newspaper-style-text-formatting.html @@ -16,7 +16,7 @@ - + @@ -86,7 +86,7 @@ alignment style has been set to "justify" then the justifyLastLine() method is called to justify the final line of text in a field. Otherwise that last line would be treated as an end-of-paragraph line and not justified.

    - + \ No newline at end of file diff --git a/docs/development/text/using-the-textfield-class/working-with-static-text.html b/docs/development/text/using-the-textfield-class/working-with-static-text.html index 3a135deef..f8ac31f1c 100644 --- a/docs/development/text/using-the-textfield-class/working-with-static-text.html +++ b/docs/development/text/using-the-textfield-class/working-with-static-text.html @@ -16,7 +16,7 @@ - + @@ -48,7 +48,7 @@ Timeline:

    var mySnap:TextSnapshot = this.textSnapshot;
    var count:Number = mySnap.charCount;
    mySnap.setSelected(0, 4, true);
    mySnap.setSelected(1, 2, false);
    var myText:String = mySnap.getSelectedText(false);
    trace(myText);

    The TextSnapshot class is useful for getting the text out of static text fields in a loaded SWF file, if you want to use the text as a value in another part of an application.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction.html b/docs/development/user-interaction.html index 842aca553..c8619dfeb 100644 --- a/docs/development/user-interaction.html +++ b/docs/development/user-interaction.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/accelerometer-input.html b/docs/development/user-interaction/accelerometer-input.html index 70cd72739..28b8e9e39 100644 --- a/docs/development/user-interaction/accelerometer-input.html +++ b/docs/development/user-interaction/accelerometer-input.html @@ -16,7 +16,7 @@ - + @@ -65,7 +65,7 @@ interval is small.

    More Help topics

    flash.sensors.Accelerometer

    flash.events.AccelerometerEvent

    Adobe recommends

    Flash Pro CS5.5 Mobile (Android/iOS) – Part 2: Project 2 Accelerometer and Debugging

    Antonio Holguin

    AIR and the Accelerometer

    Michaël Chaize

    Air for Android: Accelerometer

    Jonathan Campos

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/basics-of-user-interaction.html b/docs/development/user-interaction/basics-of-user-interaction.html index 7acf83108..0fe6c42b5 100644 --- a/docs/development/user-interaction/basics-of-user-interaction.html +++ b/docs/development/user-interaction/basics-of-user-interaction.html @@ -16,7 +16,7 @@ - + @@ -90,7 +90,7 @@ Keyboard

    Mouse

    ContextMenu

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/copy-and-paste.html b/docs/development/user-interaction/copy-and-paste.html index c9368860a..1f1e9af61 100644 --- a/docs/development/user-interaction/copy-and-paste.html +++ b/docs/development/user-interaction/copy-and-paste.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/development/user-interaction/copy-and-paste/basics-of-copy-and-paste.html b/docs/development/user-interaction/copy-and-paste/basics-of-copy-and-paste.html index 4189f5c0b..4893d3181 100644 --- a/docs/development/user-interaction/copy-and-paste/basics-of-copy-and-paste.html +++ b/docs/development/user-interaction/copy-and-paste/basics-of-copy-and-paste.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ data, a serialized Bitmap object, and as a file. Rendering of the data in a format can be deferred so that the format is not actually created until the data in that format is read.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/copy-and-paste/clipboard-data-formats.html b/docs/development/user-interaction/copy-and-paste/clipboard-data-formats.html index 72d9d771f..18623a73b 100644 --- a/docs/development/user-interaction/copy-and-paste/clipboard-data-formats.html +++ b/docs/development/user-interaction/copy-and-paste/clipboard-data-formats.html @@ -16,7 +16,7 @@ - + @@ -83,7 +83,7 @@ source text until the paste button is pressed. (When using deferred rendering in a real application, you might want to store or protect the source data in some way to prevent this problem.)

    Flash example

    package {
    import flash.desktop.Clipboard;
    import flash.desktop.ClipboardFormats;
    import flash.desktop.ClipboardTransferMode;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.TextFieldType;
    import flash.events.MouseEvent;
    import flash.events.Event;
    public class DeferredRenderingExample extends Sprite
    {
    private var sourceTextField:TextField;
    private var destination:TextField;
    private var copyText:TextField;
    public function DeferredRenderingExample():void
    {
    sourceTextField = createTextField(10, 10, 380, 90);
    sourceTextField.text = "Neque porro quisquam est qui dolorem "
    + "ipsum quia dolor sit amet, consectetur, adipisci velit.";

    copyText = createTextField(10, 110, 35, 20);
    copyText.htmlText = "<a href='#'>Copy</a>";
    copyText.addEventListener(MouseEvent.CLICK, onCopy);

    destination = createTextField(10, 145, 380, 90);
    destination.addEventListener(Event.PASTE, onPaste);
    }
    private function createTextField(x:Number, y:Number, width:Number,
    height:Number):TextField
    {
    var newTxt:TextField = new TextField();
    newTxt.x = x;
    newTxt.y = y;
    newTxt.height = height;
    newTxt.width = width;
    newTxt.border = true;
    newTxt.multiline = true;
    newTxt.wordWrap = true;
    newTxt.type = TextFieldType.INPUT;
    addChild(newTxt);
    return newTxt;
    }
    public function onCopy(event:MouseEvent):void
    {
    Clipboard.generalClipboard.clear();
    Clipboard.generalClipboard.setDataHandler(ClipboardFormats.TEXT_FORMAT,
    renderData);
    }
    public function onPaste(event:Event):void
    {
    sourceTextField.text =
    Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT).toString;
    }
    public function renderData():String
    {
    trace("Rendering data");
    var sourceStr:String = sourceTextField.text;
    if (sourceTextField.selectionEndIndex >
    sourceTextField.selectionBeginIndex)
    {
    return sourceStr.substring(sourceTextField.selectionBeginIndex,
    sourceTextField.selectionEndIndex);
    }
    else
    {
    return sourceStr;
    }
    }
    }
    }

    Flex example

    <mx:Application xmlns:mx="https://www.adobe.com/2006/mxml" layout="absolute" width="326" height="330" applicationComplete="init()">
    <mx:Script>
    <![CDATA[
    import flash.desktop.Clipboard;
    import flash.desktop.ClipboardFormats;

    public function init():void
    {
    destination.addEventListener("paste", doPaste);
    }

    public function doCopy():void
    {
    Clipboard.generalClipboard.clear();
    Clipboard.generalClipboard.setDataHandler(ClipboardFormats.TEXT_FORMAT, renderData);
    }
    public function doPaste(event:Event):void
    {
    destination.text = Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT).toString;
    }

    public function renderData():String{
    trace("Rendering data");
    return source.text;
    }
    ]]>
    </mx:Script>
    <mx:Label x="10" y="10" text="Source"/>
    <mx:TextArea id="source" x="10" y="36" width="300" height="100">
    <mx:text>Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.</mx:text>
    </mx:TextArea>
    <mx:Label x="10" y="181" text="Destination"/>
    <mx:TextArea id="destination" x="12" y="207" width="300" height="100"/>
    <mx:Button click="doCopy();" x="91" y="156" label="Copy"/>
    </mx:Application>
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/copy-and-paste/html-copy-and-paste-in-air.html b/docs/development/user-interaction/copy-and-paste/html-copy-and-paste-in-air.html index d83afaf7d..45fa206eb 100644 --- a/docs/development/user-interaction/copy-and-paste/html-copy-and-paste-in-air.html +++ b/docs/development/user-interaction/copy-and-paste/html-copy-and-paste-in-air.html @@ -16,7 +16,7 @@ - + @@ -44,7 +44,7 @@ selected data to the clipboard and removes it from the document. The paste handler inserts the clipboard contents as HTML and styles the insertion as bold text.

    <html>
    <head>
    <title>Copy and Paste</title>
    <script language="javascript" type="text/javascript">
    function onCopy(event){
    var selection = window.getSelection();
    event.clipboardData.setData("text/html","<i>" + selection + "</i>");
    event.preventDefault();
    }

    function onCut(event){
    var selection = window.getSelection();
    event.clipboardData.setData("text/html","<i>" + selection + "</i>");
    var range = selection.getRangeAt(0);
    range.extractContents();

    event.preventDefault();
    }

    function onPaste(event){
    var insertion = document.createElement("b");
    insertion.innerHTML = event.clipboardData.getData("text/html");
    var selection = window.getSelection();
    var range = selection.getRangeAt(0);
    range.insertNode(insertion);
    event.preventDefault();
    }
    </script>
    </head>
    <body onCopy="onCopy(event)"
    onPaste="onPaste(event)"
    onCut="onCut(event)">
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
    doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore
    veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam
    voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur
    magni dolores eos qui ratione voluptatem sequi nesciunt.</p>
    </body>
    </html>
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/copy-and-paste/reading-from-and-writing-to-the-system-clipboard.html b/docs/development/user-interaction/copy-and-paste/reading-from-and-writing-to-the-system-clipboard.html index 3f8e0b038..9d6decb4a 100644 --- a/docs/development/user-interaction/copy-and-paste/reading-from-and-writing-to-the-system-clipboard.html +++ b/docs/development/user-interaction/copy-and-paste/reading-from-and-writing-to-the-system-clipboard.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ keyboard or mouse event, or a copy or cut event. In other words, only code running in the AIR application sandbox can call the setData() method outside of a user event handler.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air.html b/docs/development/user-interaction/drag-and-drop-in-air.html index 1216c32dd..49efc9e8d 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air.html +++ b/docs/development/user-interaction/drag-and-drop-in-air.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ when the user drags in an object from outside a component or application.

    With the drag-and-drop API, you can allow a user to drag data between applications and between components within an application. Supported transfer formats include:

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/basics-of-drag-and-drop-in-air.html b/docs/development/user-interaction/drag-and-drop-in-air/basics-of-drag-and-drop-in-air.html index d34f618f4..8ab1abb0c 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/basics-of-drag-and-drop-in-air.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/basics-of-drag-and-drop-in-air.html @@ -16,7 +16,7 @@ - + @@ -72,7 +72,7 @@ or component is running within the more restrictive browser environment. AIR classes cannot be used in components or applications that run outside the AIR run-time environment.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/drag-and-drop-in-html.html b/docs/development/user-interaction/drag-and-drop-in-air/drag-and-drop-in-html.html index 6236223f4..7900e6249 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/drag-and-drop-in-html.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/drag-and-drop-in-html.html @@ -16,7 +16,7 @@ - + @@ -70,7 +70,7 @@ dragenter events:

    function doDragStart(event) {
    event.dataTransfer.setData("text/plain","Text to drag");
    event.dataTransfer.effectAllowed = "copyMove";
    }

    function doDragOver(event) {
    event.dataTransfer.dropEffect = "copy";
    }

    function doDragEnter(event) {
    event.dataTransfer.dropEffect = "copy";
    }

    Note: Although you should always set the dropEffect property in the handler for dragenter, be aware that the next dragover event resets the property to its default value. Set dropEffect in response to both events.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/dragging-data-into-an-html-element.html b/docs/development/user-interaction/drag-and-drop-in-air/dragging-data-into-an-html-element.html index 583af55f3..e25f476b6 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/dragging-data-into-an-html-element.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/dragging-data-into-an-html-element.html @@ -16,7 +16,7 @@ - + @@ -39,7 +39,7 @@ document. No API exists to convert a mouse position into an insertion point within an element. This limitation can make it difficult to implement insertion-type drag gestures.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/dragging-data-out-of-an-html-element.html b/docs/development/user-interaction/drag-and-drop-in-air/dragging-data-out-of-an-html-element.html index aacb11ceb..74932adac 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/dragging-data-out-of-an-html-element.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/dragging-data-out-of-an-html-element.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ example adds representations of a picture of George in several data formats, which increases the likelihood that other applications can use the dragged data.

    function dragStartHandler(event){
    event.dataTransfer.effectAllowed = "copy";

    var dragImage = document.getElementById("imageOfGeorge");
    var dragFile = new air.File(dragImage.src);
    event.dataTransfer.setData("text/plain","A picture of George");
    event.dataTransfer.setData("image/x-vnd.adobe.air.bitmap", dragImage);
    event.dataTransfer.setData("application/x-vnd.adobe.air.file-list",
    new Array(dragFile));
    }

    Note: When you call the setData() method of dataTransfer object, no data is added by the default drag-and-drop behavior.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises.html b/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises.html index 2b8cc3d4e..28b6703b7 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises.html @@ -16,7 +16,7 @@ - + @@ -45,7 +45,7 @@ Clipboard.generalClipboard).

    More Help topics

    Dropping remote files

    Implementing the IFilePromise interface

    flash.desktop.IFilePromise

    air.desktop.URLFilePromise

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises/dropping-remote-files.html b/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises/dropping-remote-files.html index 8676534e6..09f82b535 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises/dropping-remote-files.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises/dropping-remote-files.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ on the clipboard as a file promise, along with its two linked image files. The images are copied into an images subfolder so that the relative links are maintained.

    if( Clipboard.supportsFilePromise )
    {
    //Create the promise objects
    var filePromise:URLFilePromise = new URLFilePromise();
    filePromise.request = new URLRequest("http://example.com/article.html");
    filePromise.relativePath = "article.html";

    var image1Promise:URLFilePromise = new URLFilePromise();
    image1Promise.request = new URLRequest("http://example.com/images/img_1.jpg");
    image1Promise.relativePath = "images/img_1.html";
    var image2Promise:URLFilePromise = new URLFilePromise();
    image2Promise.request = new URLRequest("http://example.com/images/img_2.jpg");
    image2Promise.relativePath = "images/img_2.jpg";

    //Put the promise objects onto the clipboard inside an array
    var fileList:Array = new Array( filePromise, image1Promise, image2Promise );
    var clipboard:Clipboard = new Clipboard();
    clipboard.setData( ClipboardFormats.FILE_PROMISE_LIST_FORMAT, fileList );
    //Start the drag operation
    NativeDragManager.doDrag( dragSource, clipboard );
    }
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises/implementing-the-ifilepromise-interface.html b/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises/implementing-the-ifilepromise-interface.html index 993984aaf..dace10419 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises/implementing-the-ifilepromise-interface.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/dropping-file-promises/implementing-the-ifilepromise-interface.html @@ -16,7 +16,7 @@ - + @@ -95,7 +95,7 @@ EventDispatcher and implement IDataInput (or implement both interfaces).

    The asynchronous IFilePromise implementation is almost identical to the synchronous implementation. The main differences are that isAsync returns true and that the open() method returns an asynchronous data object:

    package
    {
    import flash.desktop.IFilePromise;
    import flash.events.ErrorEvent;
    import flash.events.EventDispatcher;
    import flash.utils.IDataInput;

    public class AsynchronousFilePromise extends EventDispatcher implements IFilePromise
    {
    private var fileGenerator:AsyncDataProvider;
    private const fileSize:int = 5000; //size of file data
    private var filePath:String = "AsynchronousFile.txt";

    public function get relativePath():String
    {
    return filePath;
    }

    public function get isAsync():Boolean
    {
    return true;
    }

    public function open():IDataInput
    {
    fileGenerator = new AsyncDataProvider();
    fileGenerator.fileSize = fileSize;
    fileGenerator.begin();
    return fileGenerator;
    }

    public function close():void
    {
    fileGenerator.end();
    }

    public function reportError(e:ErrorEvent):void
    {
    trace("Something went wrong: " + e.errorID + " - " + e.type + ", " + e.text );
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/example-overriding-the-default-html-drag-in-behavior.html b/docs/development/user-interaction/drag-and-drop-in-air/example-overriding-the-default-html-drag-in-behavior.html index c520fac89..15042d710 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/example-overriding-the-default-html-drag-in-behavior.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/example-overriding-the-default-html-drag-in-behavior.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ dragenter and dragover events. In response to a drop event, the handler converts the transferred data into an HTML row element and inserts the row into a table for display.

    <html>
    <head>
    <title>Drag-and-drop</title>
    <script language="javascript" type="text/javascript" src="AIRAliases.js"></script>
    <script language="javascript">
    function init(){
    var target = document.getElementById('target');
    target.addEventListener("dragenter", dragEnterOverHandler);
    target.addEventListener("dragover", dragEnterOverHandler);
    target.addEventListener("drop", dropHandler);

    var source = document.getElementById('source');
    source.addEventListener("dragstart", dragStartHandler);
    source.addEventListener("dragend", dragEndHandler);

    emptyRow = document.getElementById("emptyTargetRow");
    }

    function dragStartHandler(event){
    event.dataTransfer.effectAllowed = "copy";
    }

    function dragEndHandler(event){
    air.trace(event.type + ": " + event.dataTransfer.dropEffect);
    }

    function dragEnterOverHandler(event){
    event.preventDefault();
    }

    var emptyRow;
    function dropHandler(event){
    for(var prop in event){
    air.trace(prop + " = " + event[prop]);
    }
    var row = document.createElement('tr');
    row.innerHTML = "<td>" + event.dataTransfer.getData("text/plain") + "</td>" +
    "<td>" + event.dataTransfer.getData("text/html") + "</td>" +
    "<td>" + event.dataTransfer.getData("text/uri-list") + "</td>" +
    "<td>" + event.dataTransfer.getData("application/x-vnd.adobe.air.file-list") +
    "</td>";

    var imageCell = document.createElement('td');
    if((event.dataTransfer.types.toString()).search("image/x-vnd.adobe.air.bitmap") > -1){
    imageCell.appendChild(event.dataTransfer.getData("image/x-vnd.adobe.air.bitmap"));
    }
    row.appendChild(imageCell);
    var parent = emptyRow.parentNode;
    parent.insertBefore(row, emptyRow);
    }
    </script>
    </head>
    <body onLoad="init()" style="padding:5px">
    <div>
    <h1>Source</h1>
    <p>Items to drag:</p>
    <ul id="source">
    <li>Plain text.</li>
    <li>HTML <b>formatted</b> text.</li>
    <li>A <a href="http://www.adobe.com">URL.</a></li>
    <li><img src="icons/AIRApp_16.png" alt="An image"/></li>
    <li style="-webkit-user-drag:none;">
    Uses "-webkit-user-drag:none" style.
    </li>
    <li style="-webkit-user-select:none;">
    Uses "-webkit-user-select:none" style.
    </li>
    </ul>
    </div>
    <div id="target" style="border-style:dashed;">
    <h1>Target</h1>
    <p>Drag items from the source list (or elsewhere).</p>
    <table id="displayTable" border="1">
    <tr><th>Plain text</th><th>Html text</th><th>URL</th><th>File list</th><th>Bitmap Data</th></tr>
    <tr id="emptyTargetRow"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
    </table>
    </div>
    </body>
    </html>
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/handling-file-drops-in-non-application-html-sandboxes.html b/docs/development/user-interaction/drag-and-drop-in-air/handling-file-drops-in-non-application-html-sandboxes.html index 17b2cc85c..d7c9d30d0 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/handling-file-drops-in-non-application-html-sandboxes.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/handling-file-drops-in-non-application-html-sandboxes.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ event on the HTMLLoader object and traces out the file url.

    <html>
    <head>
    <title>Drag-and-drop in a remote sandbox</title>
    <script language="javascript" type="text/javascript" src="AIRAliases.js"></script>
    <script language="javascript">
    window.htmlLoader.addEventListener("nativeDragDrop",function(event){
    var filelist = event.clipboard.getData(air.ClipboardFormats.FILE_LIST_FORMAT);
    air.trace(filelist[0].url);
    });
    </script>
    </head>
    <body>
    <iframe src="child.html"
    sandboxRoot="http://localhost/"
    documentRoot="app:/"
    frameBorder="0" width="100%" height="100%">
    </iframe>
    </body>
    </html>

    The child document must present a valid drop target by calling the Event object preventDefault() method in the HTML dragenter and dragover event handlers. Otherwise, the drop event can never occur.

    <html>
    <head>
    <title>Drag and drop target</title>
    <script language="javascript" type="text/javascript">
    function preventDefault(event){
    event.preventDefault();
    }
    </script>
    </head>
    <body ondragenter="preventDefault(event)" ondragover="preventDefault(event)">
    <div>
    <h1>Drop Files Here</h1>
    </div>
    </body>
    </html>
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/supporting-the-drag-in-gesture.html b/docs/development/user-interaction/drag-and-drop-in-air/supporting-the-drag-in-gesture.html index 29457dbc2..348b6577b 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/supporting-the-drag-in-gesture.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/supporting-the-drag-in-gesture.html @@ -16,7 +16,7 @@ - + @@ -72,7 +72,7 @@ the map when the user dragged information into them, you could use the mouse coordinates reported in the nativeDragOver event to track the mouse position within the map.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/drag-and-drop-in-air/supporting-the-drag-out-gesture.html b/docs/development/user-interaction/drag-and-drop-in-air/supporting-the-drag-out-gesture.html index 5cda36d11..a915854ba 100644 --- a/docs/development/user-interaction/drag-and-drop-in-air/supporting-the-drag-out-gesture.html +++ b/docs/development/user-interaction/drag-and-drop-in-air/supporting-the-drag-out-gesture.html @@ -16,7 +16,7 @@ - + @@ -46,7 +46,7 @@ button while the cursor is outside an eligible drop target. The drag manager sets the dropAction property for an abandoned gesture to NativeDragAction.NONE.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/keyboard-input.html b/docs/development/user-interaction/keyboard-input.html index 2f139205f..0243a2b6f 100644 --- a/docs/development/user-interaction/keyboard-input.html +++ b/docs/development/user-interaction/keyboard-input.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ advantage of their system IME in your applications.

    More Help topics

    flash.events.KeyboardEvent

    flash.system.IME

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/keyboard-input/capturing-keyboard-input.html b/docs/development/user-interaction/keyboard-input/capturing-keyboard-input.html index d0d1c9893..4ceb1a891 100644 --- a/docs/development/user-interaction/keyboard-input/capturing-keyboard-input.html +++ b/docs/development/user-interaction/keyboard-input/capturing-keyboard-input.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@ Adobe Flash Player or AIR. For example, in Microsoft Internet Explorer, pressing Ctrl+W closes the browser window before any contained SWF file dispatches a keyboard event.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/keyboard-input/using-the-ime-class.html b/docs/development/user-interaction/keyboard-input/using-the-ime-class.html index 70cce64a7..58a96aaf1 100644 --- a/docs/development/user-interaction/keyboard-input/using-the-ime-class.html +++ b/docs/development/user-interaction/keyboard-input/using-the-ime-class.html @@ -16,7 +16,7 @@ - + @@ -72,7 +72,7 @@ enter Japanese text. The second text field, outputTxt, is a dynamic text field that displays error messages to the user, or echoes the Japanese string that the user types into the inputTxt text field.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/keyboard-input/virtual-keyboards.html b/docs/development/user-interaction/keyboard-input/virtual-keyboards.html index d8603525b..205fb94c1 100644 --- a/docs/development/user-interaction/keyboard-input/virtual-keyboards.html +++ b/docs/development/user-interaction/keyboard-input/virtual-keyboards.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ keyboard instead of a physical one. The classes in the Flash API let you:

    • Detect when the virtual keyboard is raised and when it closes.

    • Prevent the keyboard from raising.

    • Determine the area of the stage obscured by the virtual keyboard.

    • Create interactive objects that raise the keyboard when they gain focus. (Not supported by AIR applications on iOS.)

    • (AIR only) Disable the automatic panning behavior so that your application can modify its own display to accommodate the keyboard.

    More Help topics

    Controlling virtual keyboard behavior

    Adding virtual keyboard support for interactive objects

    Handling application display changes

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/keyboard-input/virtual-keyboards/adding-virtual-keyboard-support-for-interactive-objects.html b/docs/development/user-interaction/keyboard-input/virtual-keyboards/adding-virtual-keyboard-support-for-interactive-objects.html index 736721632..e92a1d36e 100644 --- a/docs/development/user-interaction/keyboard-input/virtual-keyboards/adding-virtual-keyboard-support-for-interactive-objects.html +++ b/docs/development/user-interaction/keyboard-input/virtual-keyboards/adding-virtual-keyboard-support-for-interactive-objects.html @@ -16,7 +16,7 @@ - + @@ -46,7 +46,7 @@ change when the scaleMode property is set to noScale. In other modes, the dimensions of the stage do not change; instead, the content is scaled to compensate.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/keyboard-input/virtual-keyboards/controlling-virtual-keyboard-behavior.html b/docs/development/user-interaction/keyboard-input/virtual-keyboards/controlling-virtual-keyboard-behavior.html index 02355ecba..93a206f5c 100644 --- a/docs/development/user-interaction/keyboard-input/virtual-keyboards/controlling-virtual-keyboard-behavior.html +++ b/docs/development/user-interaction/keyboard-input/virtual-keyboards/controlling-virtual-keyboard-behavior.html @@ -16,7 +16,7 @@ - + @@ -39,7 +39,7 @@ it if it is already raised. The lower TextField demonstrates the default behavior. The example reports the soft keyboard events dispatched by both text fields.

    package
    {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFieldType;
    import flash.events.SoftKeyboardEvent;
    public class SoftKeyboardEventExample extends Sprite
    {
    private var tf1:TextField = new TextField();
    private var tf2:TextField = new TextField();

    public function SoftKeyboardEventExample()
    {
    tf1.width = this.stage.stageWidth;
    tf1.type = TextFieldType.INPUT;
    tf1.border = true;
    this.addChild( tf1 );

    tf1.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATING, preventSoftKe yboard );
    tf1.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, preventSoftKe yboard );
    tf1.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, preventSoftKeyboard );

    tf2.border = true;
    tf2.type = TextFieldType.INPUT;
    tf2.width = this.stage.stageWidth;
    tf2.y = tf1.y + tf1.height + 30;
    this.addChild( tf2 );

    tf2.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATING, allowSoftKeyboard );
    tf2.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, allowSoftKeyboard );
    tf2.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, allowSoftKeyboard);
    }

    private function preventSoftKeyboard( event:SoftKeyboardEvent ):void
    {
    event.preventDefault();
    this.stage.focus = null; //close the keyboard, if raised
    trace( "tf1 dispatched: " + event.type + " -- " + event.triggerType );
    }
    private function allowSoftKeyboard( event:SoftKeyboardEvent ) :void
    {
    trace( "tf2 dispatched: " + event.type + " -- " + event.triggerType );
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/keyboard-input/virtual-keyboards/handling-application-display-changes.html b/docs/development/user-interaction/keyboard-input/virtual-keyboards/handling-application-display-changes.html index fe831b3cd..9a8e07014 100644 --- a/docs/development/user-interaction/keyboard-input/virtual-keyboards/handling-application-display-changes.html +++ b/docs/development/user-interaction/keyboard-input/virtual-keyboards/handling-application-display-changes.html @@ -16,7 +16,7 @@ - + @@ -37,7 +37,7 @@ the native fullscreen IME keyboard is used for all text entry. This IME keyboard has a built-in text entry field and obscures the entire stage. There is no way to display a landscape keyboard that does not fill the screen.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/mouse-input.html b/docs/development/user-interaction/mouse-input.html index 1aa5aa2b3..edff9502c 100644 --- a/docs/development/user-interaction/mouse-input.html +++ b/docs/development/user-interaction/mouse-input.html @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ Discovering input types.

    More Help topics

    Touch, multitouch and gesture input

    flash.ui.Mouse

    flash.events.MouseEvent

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/mouse-input/capturing-mouse-input.html b/docs/development/user-interaction/mouse-input/capturing-mouse-input.html index 5dee6dd66..076ff5d5a 100644 --- a/docs/development/user-interaction/mouse-input/capturing-mouse-input.html +++ b/docs/development/user-interaction/mouse-input/capturing-mouse-input.html @@ -16,7 +16,7 @@ - + @@ -51,7 +51,7 @@ MouseEvent.MOUSE_MOVE event, and setting the coordinates of a display object (your custom cursor) to the stageX and stageY properties of the event. The following example illustrates a basic execution of this task:

    var cursor:Sprite = new Sprite();
    cursor.graphics.beginFill(0x000000);
    cursor.graphics.drawCircle(0,0,20);
    cursor.graphics.endFill();
    addChild(cursor);

    stage.addEventListener(MouseEvent.MOUSE_MOVE,redrawCursor);
    Mouse.hide();

    function redrawCursor(event:MouseEvent):void
    {
    cursor.x = event.stageX;
    cursor.y = event.stageY;
    }
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/mouse-input/mouse-input-example-word-search.html b/docs/development/user-interaction/mouse-input/mouse-input-example-word-search.html index 32f94c869..a0fe506bb 100644 --- a/docs/development/user-interaction/mouse-input/mouse-input-example-word-search.html +++ b/docs/development/user-interaction/mouse-input/mouse-input-example-word-search.html @@ -16,7 +16,7 @@ - + @@ -67,7 +67,7 @@ available to play by increasing the TOTAL_TIME variable. You can also increase the PERCENT_VOWELS variable slightly to increase the likelihood of finding words.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/taskbar-icons-in-air.html b/docs/development/user-interaction/taskbar-icons-in-air.html index fb30f1f63..edc7317a3 100644 --- a/docs/development/user-interaction/taskbar-icons-in-air.html +++ b/docs/development/user-interaction/taskbar-icons-in-air.html @@ -16,7 +16,7 @@ - + @@ -122,7 +122,7 @@ flash.desktop.NativeApplication

    flash.desktop.DockIcon

    flash.desktop.SystemTrayIcon

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/touch-multitouch-and-gesture-input.html b/docs/development/user-interaction/touch-multitouch-and-gesture-input.html index 209f1ce92..c89d11386 100644 --- a/docs/development/user-interaction/touch-multitouch-and-gesture-input.html +++ b/docs/development/user-interaction/touch-multitouch-and-gesture-input.html @@ -16,7 +16,7 @@ - + @@ -52,7 +52,7 @@ flash.events.TransformGestureEvent

    flash.events.GesturePhase

    flash.events.PressAndTapGestureEvent

    Paul Trani: Touch Events and Gestures on Mobile

    Mike Jones: Virtual Game Controllers

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/touch-multitouch-and-gesture-input/basics-of-touch-input.html b/docs/development/user-interaction/touch-multitouch-and-gesture-input/basics-of-touch-input.html index 7f2e3f0cb..c88c99a42 100644 --- a/docs/development/user-interaction/touch-multitouch-and-gesture-input/basics-of-touch-input.html +++ b/docs/development/user-interaction/touch-multitouch-and-gesture-input/basics-of-touch-input.html @@ -16,7 +16,7 @@ - + @@ -98,7 +98,7 @@ individually, and handle each accordingly.

    For a gesture, interpret specific information about the transformation of the gesture as it occurs. Track the coordinates of the point of contact (or several) as they move across the screen.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/touch-multitouch-and-gesture-input/gesture-event-handling.html b/docs/development/user-interaction/touch-multitouch-and-gesture-input/gesture-event-handling.html index 94503cff8..6bb1aa2af 100644 --- a/docs/development/user-interaction/touch-multitouch-and-gesture-input/gesture-event-handling.html +++ b/docs/development/user-interaction/touch-multitouch-and-gesture-input/gesture-event-handling.html @@ -16,7 +16,7 @@ - + @@ -59,7 +59,7 @@ phases. The phase property of the event object for an InteractiveObject listening for the gestureSwipe or gestureTwoFingerTap events is always all once the event is dispatched:

    Multitouch.inputMode = MultitouchInputMode.GESTURE;
    var mySprite = new Sprite();
    mySprite.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe);
    mySprite.addEventListener(GestureEvent.GESTURE_TWO_FINGER_TAP, onTwoTap);
    mySprite.graphics.beginFill(0x336699);
    mySprite.graphics.drawRect(0, 0, 40, 40);
    var myTextField = new TextField();
    myTextField.y = 200;
    addChild(mySprite);
    addChild(myTextField);

    function onSwipe(swipeEvt:TransformGestureEvent):void {
    myTextField.text = swipeEvt.phase // Output is "all"
    }
    function onTwoTap(tapEvt:GestureEvent):void {
    myTextField.text = tapEvt.phase // Output is "all"
    }
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-and-drag.html b/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-and-drag.html index 973f9e0c7..70fc1e085 100644 --- a/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-and-drag.html +++ b/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-and-drag.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ handler for a touch event. The variable bg is a display object that contains mySprite:

    mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
    mySprite.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);

    function onTouchBegin(e:TouchEvent) {
    e.target.startTouchDrag(e.touchPointID, false, bg.getRect(this));
    trace("touch begin");
    }

    function onTouchEnd(e:TouchEvent) {
    e.target.stopTouchDrag(e.touchPointID);
    trace("touch end");
    }

    And the following shows a more advanced example combining dragging with touch event phases:

    Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
    var mySprite:Sprite = new Sprite();

    mySprite.graphics.beginFill(0x336699);
    mySprite.graphics.drawRect(0,0,40,40);
    addChild(mySprite);

    mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
    mySprite.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
    mySprite.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);

    function onTouchBegin(evt:TouchEvent) {
    evt.target.startTouchDrag(evt.touchPointID);
    evt.target.scaleX *= 1.5;
    evt.target.scaleY *= 1.5;
    }

    function onTouchMove(evt:TouchEvent) {
    evt.target.alpha = 0.5;
    }

    function onTouchEnd(evt:TouchEvent) {
    evt.target.stopTouchDrag(evt.touchPointID);
    evt.target.width = 40;
    evt.target.height = 40;
    evt.target.alpha = 1;
    }
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-event-handling.html b/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-event-handling.html index 6ac3bfd05..a0c1cef4a 100644 --- a/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-event-handling.html +++ b/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-event-handling.html @@ -16,7 +16,7 @@ - + @@ -66,7 +66,7 @@ move and end phases are on the stage, not the display object. The stage listens for the move or end phases in case the user's touch moves beyond the display object boundaries.

    Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
    var mySprite:Sprite = new Sprite();
    mySprite.graphics.beginFill(0x336699);
    mySprite.graphics.drawRect(0,0,40,40);
    addChild(mySprite);
    var myTextField:TextField = new TextField();
    addChild(myTextField);
    myTextField.width = 200;
    myTextField.height = 20;
    var touchMoveID:int = 0;

    mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
    function onTouchBegin(event:TouchEvent) {
    if(touchMoveID != 0) {
    myTextField.text = "already moving. ignoring new touch";
    return;
    }
    touchMoveID = event.touchPointID;

    myTextField.text = "touch begin" + event.touchPointID;
    stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
    stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);
    }
    function onTouchMove(event:TouchEvent) {
    if(event.touchPointID != touchMoveID) {
    myTextField.text = "ignoring unrelated touch";
    return;
    }
    mySprite.x = event.stageX;
    mySprite.y = event.stageY;
    myTextField.text = "touch move" + event.touchPointID;
    }
    function onTouchEnd(event:TouchEvent) {
    if(event.touchPointID != touchMoveID) {
    myTextField.text = "ignoring unrelated touch end";
    return;
    }
    touchMoveID = 0;
    stage.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
    stage.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd);
    myTextField.text = "touch end" + event.touchPointID;
    }
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-support-discovery.html b/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-support-discovery.html index 069a6204b..a5e52a80d 100644 --- a/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-support-discovery.html +++ b/docs/development/user-interaction/touch-multitouch-and-gesture-input/touch-support-discovery.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@ available, or not, in the current environment.

    You can also use the API for keyboard, touch, and mouse support, see Discovering input types.

    For more information about compatibility testing, see Troubleshooting.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/touch-multitouch-and-gesture-input/troubleshooting.html b/docs/development/user-interaction/touch-multitouch-and-gesture-input/troubleshooting.html index 38f1ff4ea..d19186f56 100644 --- a/docs/development/user-interaction/touch-multitouch-and-gesture-input/troubleshooting.html +++ b/docs/development/user-interaction/touch-multitouch-and-gesture-input/troubleshooting.html @@ -16,7 +16,7 @@ - + @@ -78,7 +78,7 @@ gesture very quickly.

  • Windows 7 Starter Edition does not support multitouch. See the AIR Labs Forum for details: http://forums.adobe.com/thread/579180?tstart=0

  • For Mac OS 10.5.3 and later, the Multitouch.supportsGestureEvents value is always true, even if the hardware does not support gesture events.

  • - + \ No newline at end of file diff --git a/docs/development/user-interaction/working-with-menus.html b/docs/development/user-interaction/working-with-menus.html index 0c7a29a94..6c26ea141 100644 --- a/docs/development/user-interaction/working-with-menus.html +++ b/docs/development/user-interaction/working-with-menus.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/development/user-interaction/working-with-menus/about-context-menus-in-html-air.html b/docs/development/user-interaction/working-with-menus/about-context-menus-in-html-air.html index e3de1b6e1..95df06c74 100644 --- a/docs/development/user-interaction/working-with-menus/about-context-menus-in-html-air.html +++ b/docs/development/user-interaction/working-with-menus/about-context-menus-in-html-air.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ displaying an AIR native context menu. The following example displays a native context menu by calling the menu display() method in response to the HTML contextmenu event:

    <html>
    <head>
    <script src="AIRAliases.js" language="JavaScript" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
    function showContextMenu(event){
    event.preventDefault();
    contextMenu.display(window.nativeWindow.stage, event.clientX, event.clientY);
    }

    function createContextMenu(){
    var menu = new air.NativeMenu();
    var command = menu.addItem(new air.NativeMenuItem("Custom command"));
    command.addEventListener(air.Event.SELECT, onCommand);
    return menu;
    }

    function onCommand(){
    air.trace("Context command invoked.");
    }

    var contextMenu = createContextMenu();
    </script>
    </head>
    <body>
    <p oncontextmenu="showContextMenu(event)" style="-khtml-user-select:auto;">Custom context menu.</p>
    </body>
    </html>
    - + \ No newline at end of file diff --git a/docs/development/user-interaction/working-with-menus/creating-native-menus-air.html b/docs/development/user-interaction/working-with-menus/creating-native-menus-air.html index 1ee2fd269..363ec224f 100644 --- a/docs/development/user-interaction/working-with-menus/creating-native-menus-air.html +++ b/docs/development/user-interaction/working-with-menus/creating-native-menus-air.html @@ -16,7 +16,7 @@ - + @@ -51,7 +51,7 @@ parameter to true in the constructor. Then add the separator item to the menu in the correct location:

    var separatorA:NativeMenuItem = new NativeMenuItem("A", true);
    editMenu.addItem(separatorA);

    The label specified for the separator, if any, is not displayed.

    More Help topics

    Using the Flex AIR components

    Developing cross-platform AIR applications

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/working-with-menus/displaying-pop-up-native-menus-air.html b/docs/development/user-interaction/working-with-menus/displaying-pop-up-native-menus-air.html index 781c16ce4..d20913a39 100644 --- a/docs/development/user-interaction/working-with-menus/displaying-pop-up-native-menus-air.html +++ b/docs/development/user-interaction/working-with-menus/displaying-pop-up-native-menus-air.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ as a pop-up.

    The following method displays the menu defined by a NativeMenu object named popupMenu in response to a mouse click:

    private function onMouseClick(event:MouseEvent):void {
    popupMenu.display(event.target.stage, event.stageX, event.stageY);
    }

    Note: The menu does not need to be displayed in direct response to an event. Any method can call the display() function.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/working-with-menus/handling-menu-events.html b/docs/development/user-interaction/working-with-menus/handling-menu-events.html index 0c959df08..a99e4601e 100644 --- a/docs/development/user-interaction/working-with-menus/handling-menu-events.html +++ b/docs/development/user-interaction/working-with-menus/handling-menu-events.html @@ -16,7 +16,7 @@ - + @@ -36,7 +36,7 @@ listen for the menuSelect event from a ContextMenu object.

    In AIR 2.6 and later, you can use the preparing event to update a menu in response to either displaying a menu or selecting an item with a keyboard shortcut.

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/working-with-menus/menu-basics.html b/docs/development/user-interaction/working-with-menus/menu-basics.html index b2bdf3f25..fb40a1986 100644 --- a/docs/development/user-interaction/working-with-menus/menu-basics.html +++ b/docs/development/user-interaction/working-with-menus/menu-basics.html @@ -16,7 +16,7 @@ - + @@ -171,7 +171,7 @@ arbitrary object in each item. For example, in an "Open Recent" menu, you could assign the File object for each document to each menu item.

    var file:File = File.applicationStorageDirectory.resolvePath("GreatGatsby.pdf")
    var menuItem:NativeMenuItem = docMenu.addItem(new NativeMenuItem(file.name));
    menuItem.data = file;

    More Help topics

    About the FlexNativeMenu control

    - + \ No newline at end of file diff --git a/docs/development/user-interaction/working-with-menus/native-menu-example-window-and-application-menu-air.html b/docs/development/user-interaction/working-with-menus/native-menu-example-window-and-application-menu-air.html index a3ffb652e..5595c0396 100644 --- a/docs/development/user-interaction/working-with-menus/native-menu-example-window-and-application-menu-air.html +++ b/docs/development/user-interaction/working-with-menus/native-menu-example-window-and-application-menu-air.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ Documents array (which doesn't actually change in this example). Although not shown in this example, you can also listen for displaying events on individual items.

    package
    {
    import flash.display.NativeMenu;
    import flash.display.NativeMenuItem;
    import flash.display.NativeWindow;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filesystem.File;
    import flash.desktop.NativeApplication;

    public class MenuExample extends Sprite
    {
    private var recentDocuments:Array =
    new Array(new File("app-storage:/GreatGatsby.pdf"),
    new File("app-storage:/WarAndPeace.pdf"),
    new File("app-storage:/Iliad.pdf"));

    public function MenuExample()
    {
    var fileMenu:NativeMenuItem;
    var editMenu:NativeMenuItem;

    if (NativeWindow.supportsMenu){
    stage.nativeWindow.menu = new NativeMenu();
    stage.nativeWindow.menu.addEventListener(Event.SELECT, selectCommandMenu);
    fileMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("File"));
    fileMenu.submenu = createFileMenu();
    editMenu = stage.nativeWindow.menu.addItem(new NativeMenuItem("Edit"));
    editMenu.submenu = createEditMenu();
    }

    if (NativeApplication.supportsMenu){
    NativeApplication.nativeApplication.menu.addEventListener(Event.SELECT, selectCommandMenu);
    fileMenu = NativeApplication.nativeApplication.menu.addItem(new NativeMenuItem("File"));
    fileMenu.submenu = createFileMenu();
    editMenu = NativeApplication.nativeApplication.menu.addItem(new NativeMenuItem("Edit"));
    editMenu.submenu = createEditMenu();
    }
    }

    public function createFileMenu():NativeMenu {
    var fileMenu:NativeMenu = new NativeMenu();
    fileMenu.addEventListener(Event.SELECT, selectCommandMenu);

    var newCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("New"));
    newCommand.addEventListener(Event.SELECT, selectCommand);
    var saveCommand:NativeMenuItem = fileMenu.addItem(new NativeMenuItem("Save"));
    saveCommand.addEventListener(Event.SELECT, selectCommand);
    var openRecentMenu:NativeMenuItem =
    fileMenu.addItem(new NativeMenuItem("Open Recent"));
    openRecentMenu.submenu = new NativeMenu();
    openRecentMenu.submenu.addEventListener(Event.DISPLAYING,
    updateRecentDocumentMenu);
    openRecentMenu.submenu.addEventListener(Event.SELECT, selectCommandMenu);

    return fileMenu;
    }

    public function createEditMenu():NativeMenu {
    var editMenu:NativeMenu = new NativeMenu();
    editMenu.addEventListener(Event.SELECT, selectCommandMenu);

    var copyCommand:NativeMenuItem = editMenu.addItem(new NativeMenuItem("Copy"));
    copyCommand.addEventListener(Event.SELECT, selectCommand);
    copyCommand.keyEquivalent = "c";
    var pasteCommand:NativeMenuItem =
    editMenu.addItem(new NativeMenuItem("Paste"));
    pasteCommand.addEventListener(Event.SELECT, selectCommand);
    pasteCommand.keyEquivalent = "v";
    editMenu.addItem(new NativeMenuItem("", true));
    var preferencesCommand:NativeMenuItem =
    editMenu.addItem(new NativeMenuItem("Preferences"));
    preferencesCommand.addEventListener(Event.SELECT, selectCommand);

    return editMenu;
    }

    private function updateRecentDocumentMenu(event:Event):void {
    trace("Updating recent document menu.");
    var docMenu:NativeMenu = NativeMenu(event.target);

    for each (var item:NativeMenuItem in docMenu.items) {
    docMenu.removeItem(item);
    }

    for each (var file:File in recentDocuments) {
    var menuItem:NativeMenuItem =
    docMenu.addItem(new NativeMenuItem(file.name));
    menuItem.data = file;
    menuItem.addEventListener(Event.SELECT, selectRecentDocument);
    }
    }

    private function selectRecentDocument(event:Event):void {
    trace("Selected recent document: " + event.target.data.name);
    }

    private function selectCommand(event:Event):void {
    trace("Selected command: " + event.target.label);
    }

    private function selectCommandMenu(event:Event):void {
    if (event.currentTarget.parent != null) {
    var menuItem:NativeMenuItem =
    findItemForMenu(NativeMenu(event.currentTarget));
    if (menuItem != null) {
    trace("Select event for \"" +
    event.target.label +
    "\" command handled by menu: " +
    menuItem.label);
    }
    } else {
    trace("Select event for \"" +
    event.target.label +
    "\" command handled by root menu.");
    }
    }

    private function findItemForMenu(menu:NativeMenu):NativeMenuItem {
    for each (var item:NativeMenuItem in menu.parent.items) {
    if (item != null) {
    if (item.submenu == menu) {
    return item;
    }
    }
    }
    return null;
    }
    }
    }
    - + \ No newline at end of file diff --git a/docs/features.html b/docs/features.html index 5feeed99a..ca0618776 100644 --- a/docs/features.html +++ b/docs/features.html @@ -16,13 +16,13 @@ - +

    Features

    Cross platform

    The runtime provides a consistent cross-operating system framework for deploying applications and therefore reduces cross-platform testing by ensuring consistent functionality and interactions across platforms. Instead of developing for a specific operating system, you target the runtime, which has the following benefits:

    • Applications developed for AIR run across multiple operating systems without any additional work by you. The runtime ensures consistent and predictable presentation and interactions across all the operating systems supported by AIR.
    • Applications can be built faster by enabling you to leverage existing web technologies and design patterns. You can extend applications to the desktop and mobile devices without learning traditional development technologies or the complexity of native code.
    • Application development is easier than using lower-level languages such as C and C++.
    • You do not need to manage the complex, low-level APIs specific to each operating system, but can access them if required through powerful native extensions.

    AIR applications are installed and run just like any other desktop or mobile application and appear no different to the end user.

    • With AIR, you can target desktop (Windows and MacOS) and main mobile platforms (iOS, Android, Amazon Fire devices...)

    • You can even quickly build and deploy iOS apps to Apple devices on Windows ! *

    • The same code has identical behavior across various devices, allowing to develop on a platform and port it to another with almost no changes.

    Mature and free environment

    AIR was released in 2008 by Adobe and is very stable and mature. It has been used in countless projects by big companies over the years. It is now actively maintained and updated by Harman, a Samsung company.

    • AIR has a free tier that allows you to develop your applications completely for free! (only an AIR splash screen will be displayed at startup). Reasonable paid tiers will remove the default splash screen and give you access to extra support.
    • You can use ActionScript 3 to develop elegant OOP code (the Haxe language can also be used to compile to AIR for even more advanced language features).
    • AIR offers a very rich API covering many areas: Graphics (vectors and bitmap), Animation, User input, Rich text display, Sound, Networking, Data storage...
    • Many libraries and code examples are already available.
    • Some awesome libraries like Starling (GPU accelerated engine) or Feathers UI (complete UI design solution) as also available for free!

    Development made easy

    Due to its consistent behavior across different platforms, the AIR desktop simulator allows to quickly test your code without having to deploy your apps to actual devices.

    • You can debug your apps over Wifi or USB, and inspect your code with breakpoints at runtime. Profile your apps and see potential bottlenecks with Adobe Scout.
    • The compile times are very fast, making tests and iterations easy.
    • Different quality IDEs are available, both free or commercial.
    • Join our friendly community for extra guidance and support!

    Native extensions

    You can expand AIR functionalities with native extensions, to call native functionality not exposed by the runtime or to access native SDKs.

    Many extensions are already available, both open source or commercially maintained: in-app billing, app rating, social sharing, analytics, ads, notifications, and many more!

    - + \ No newline at end of file diff --git a/docs/tools/building/ant.html b/docs/tools/building/ant.html index 9ac3193e6..344c48f5a 100644 --- a/docs/tools/building/ant.html +++ b/docs/tools/building/ant.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ Ant by default looks for a script file called build.xml in the current directory. A build script should have a project as the main node and at least one target which contains a series of commands to run through as part of the build.

    <?xml version="1.0"?>
    <project name="example" default="main" >

    <target name="main" >
    <!-- commands here -->
    </target>

    </project>

    Properties File

    Generally it is good practice to define all configuration variables in a "properties" file and then include this file in your ant script.

    For example:

    build.config
    project.name=MyApplication
    version=1.0.0

    Then in your script:

    build.xml
    <project name="example" default="main" >

    <property file="build.config" />

    <target name="main" >
    <!-- commands here -->
    <echo message="Building ${project.name} v${version}" />
    </target>

    </project>

    Environment

    As you have setup your AIR SDK environment variables it is easy to access them using the env variables in ant.

    build.xml
    <project name="example" default="main" >

    <property environment="env."/>

    <fail unless="env.AIR_HOME" message="AIR_HOME needs to be defined as an environment variable or in the Ant build." />
    <fail unless="env.AIR_TOOLS" message="AIR_TOOLS needs to be defined as an environment variable or in the Ant build." />

    <property name="air.adt" value="${env.AIR_HOME}/bin/adt" />
    <property name="air.apm" value="${env.AIR_TOOLS}/apm" />

    </project>

    This allows you to access the AIR build tools and package manager easily based on your current environment.

    - + \ No newline at end of file diff --git a/docs/tools/building/ant/examples.html b/docs/tools/building/ant/examples.html index 261efa1ab..6101473d0 100644 --- a/docs/tools/building/ant/examples.html +++ b/docs/tools/building/ant/examples.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

    Examples

    In the following examples are shown some of the most common usages of the ant tasks.

    Compiling SWCs

    Note most of the following can be equally applied to mxmlc to build a swf.

    Basics

    Build the all the source in src into bin/output.swc library:

    build.xml
    <?xml version="1.0"?>
    <project name="example" default="compile" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />

    <target name="compile">
    <mkdir dir="${output.dir}"/>
    <compc output="${output.dir}/output.swc" failonerror="true" maxmemory="1024m">
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    </compc>
    </target>

    </project>

    Specify Configuration

    The following specifies the configuration to use for compilation. You use the load-config tag to specify an xml configuration, this can either be a custom one, or one of the 2 default configuration files included with the AIR SDK:

    frameworks/air-config.xml
    frameworks/flex-config.xml

    These represent build configurations for AIR and FLEX libraries respectively. They include all the references to the AIR and Flex frameworks allowing your code to access the standard framework classes.

    build.xml
    <?xml version="1.0"?>
    <project name="example" default="compile" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />

    <target name="compile">
    <mkdir dir="${output.dir}"/>
    <compc output="${output.dir}/output.swc" failonerror="true" maxmemory="1024m">
    <load-config filename="${env.AIR_HOME}/frameworks/air-config.xml" />
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    </compc>
    </target>

    </project>

    Including Libraries

    The library-path option allows you to add other swc's as a dependency.

    build.xml
    <?xml version="1.0"?>
    <project name="example" default="compile" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />

    <target name="compile">
    <mkdir dir="${output.dir}"/>
    <compc output="${output.dir}/output.swc" failonerror="true" maxmemory="1024m">
    <load-config filename="${env.AIR_HOME}/frameworks/air-config.xml" />
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    <library-path file="lib.swc" append="true"/>
    </compc>
    </target>

    </project>

    Or you could include a directory containing a series of swc libraries:

    build.xml
    <?xml version="1.0"?>
    <project name="example" default="compile" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />
    <property name="libraries.dir" value="libs" />

    <target name="compile">
    <mkdir dir="${output.dir}" />
    <compc output="${output.dir}/output.swc" failonerror="true" maxmemory="1024m">
    <load-config filename="${env.AIR_HOME}/frameworks/air-config.xml" />
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    <library-path dir="${libraries.dir}" append="true">
    <include name="*.swc" />
    </library-path>
    </compc>
    </target>

    </project>

    Metadata

    You can use the keep-as3-metadata tag to specify the metadata tags to keep in the compiled code:

    build.xml
    <?xml version="1.0"?>
    <project name="example" default="compile" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />

    <target name="compile">
    <mkdir dir="${output.dir}" />
    <compc output="${output.dir}/output.swc" failonerror="true" maxmemory="1024m">
    <load-config filename="${env.AIR_HOME}/frameworks/air-config.xml" />
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    <keep-as3-metadata name="Inject" />
    <keep-as3-metadata name="PostConstruct" />
    </compc>
    </target>

    </project>

    Compiler Defines

    Compiler definitions allow you to pass in values into your code at compilation time.

    build.xml
    <?xml version="1.0"?>
    <project name="example" default="compile" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />

    <property name="version" value="1.0.0" />

    <target name="compile">
    <mkdir dir="${output.dir}" />
    <compc output="${output.dir}/output.swc" failonerror="true" maxmemory="1024m">
    <load-config filename="${env.AIR_HOME}/frameworks/air-config.xml" />
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    <compiler.define name="CONFIG::VERSION" value="'${version}'" />
    </compc>
    </target>

    </project>

    Then in your actionscript:

    Main.as
    package 
    {
    import flash.display.Sprite;

    public class MyApp extends Sprite
    {
    public static const VERSION : String = CONFIG::VERSION;

    public function Main():void
    {
    trace( VERSION ); // outputs 1.0.0 as defined in the build script
    }
    }
    }

    Reports

    You can output a few reports and the configuration from the task to analyse the result of the compilation. These are passed directly as attributes on the compc task

    • dump-config: write a file containing all currently set configuration values;
    • size-report: output an XML-formatted report detailing the size of all code and data;
    • link-report: output a XML-formatted report of all definitions linked;
        <compc ...  
    dump-config="${output.dir}/config.xml"
    size-report="${output.dir}/sizereport.xml"
    link-report="${output.dir}/linkreport.xml" >

    Compiling SWF

    Most of the above can be applied to the mxmlc command to build a swf.

    Basics

    Build the all the source in src into bin/output.swf library:

    build.xml
    <?xml version="1.0"?>
    <project name="example" default="compile" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />

    <target name="compile">
    <mkdir dir="${output.dir}"/>
    <mxmlc output="${output.dir}/output.swf" failonerror="true" maxmemory="1024m">
    <load-config filename="${env.AIR_HOME}/frameworks/air-config.xml" />
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    </mxmlc>
    </target>

    </project>

    Compiling with ANEs

    ANEs are a special type of library and require additional attention when building your application swf / swc. An ANE is essentially a SWC to the compilers and should be linked as an external library which will be included when packaging your AIR application using adt.

    However, if you simply add an ANE as an external-library-path it will be ignored. You need to copy and rename these .ane files to .swc before compiling in order to correctly compile your swc or swf that references an ane. Fortunately this is easy with Ant:

    build.xml
    <?xml version="1.0"?>
    <project name="ane_example" default="compile" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />
    <property name="ane.dir" value="ane" />
    <property name="ane.swc.dir" value="ane-swc" />

    <target name="create-ane-swc">
    <!-- Copy ANE files to the ane-swc and rename to .swc -->
    <delete dir="${ane.swc.dir}" />
    <copy todir="${ane.swc.dir}">
    <fileset dir="${ane.dir}">
    <include name="*.ane" />
    </fileset>
    <globmapper from="*.ane" to="*.swc"/>
    </copy>
    </target>

    <target name="compile" depends="create-ane-swc" >

    <mkdir dir="${output.dir}"/>
    <mxmlc output="${output.dir}/output.swf" failonerror="true" maxmemory="1024m">
    <load-config filename="${env.AIR_HOME}/frameworks/air-config.xml" />
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    <external-library-path dir="${ane.swc.dir}" append="true">
    <include name="**/*.swc"/>
    </external-library-path>
    </mxmlc>

    <delete dir="${ane.swc.dir}" />
    </target>

    </project>

    Packaging AIR

    Packaging an AIR project uses the exec Ant task which allows you to call an executable.

    <exec executable="${air.adt}" failonerror="true">
    <arg line="-package"/>
    <arg line="-storetype pkcs12"/>
    <arg line="-keystore certificate.p12"/>
    <arg line="-storepass ${password}"/>
    <arg line="${output.dir}/MyApp.air"/>
    <arg line="${source.dir}/MyApp-app.xml"/>
    <arg line="-C ${output.dir} output.swf"/>
    </exec>

    As you have to use adt.bat on Windows and adt on macOS there is a useful Ant script we can use to select the appropriate executable:

    <!-- Simple condition to switch between adt.bat and adt -->
    <condition property="isWindows" else="false">
    <os family="windows" />
    </condition>
    <condition property="air.adt"
    value="${env.AIR_HOME}/bin/adt.bat"
    else="${env.AIR_HOME}/bin/adt">
    <istrue value="${isWindows}"/>
    </condition>

    In the following we compile our source using mxmlc and then build an .air package from the output.swf using the MyApp-app.xml AIR application descriptor:

    build.xml
    <project name="air_example" default="build" >

    <property environment="env."/>
    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    <property name="output.dir" value="bin" />
    <property name="source.dir" value="src" />
    <property name="ane.dir" value="ane" />
    <property name="ane.swc.dir" value="ane-swc" />

    <!-- Copy ANE files to the ane-swc and rename to .swc -->
    <target name="create-ane-swc">
    <delete dir="${ane.swc.dir}" />
    <copy todir="${ane.swc.dir}">
    <fileset dir="${ane.dir}">
    <include name="*.ane" />
    </fileset>
    <globmapper from="*.ane" to="*.swc"/>
    </copy>
    </target>

    <!-- Compile a swf from our code -->
    <target name="compile" depends="create-ane-swc" >
    <mkdir dir="${output.dir}"/>
    <mxmlc output="${output.dir}/output.swf" failonerror="true" maxmemory="1024m">
    <load-config filename="${env.AIR_HOME}/frameworks/air-config.xml" />
    <source-path path-element="${source.dir}"/>
    <include-sources dir="${source.dir}" includes="*"/>
    <external-library-path dir="${ane.swc.dir}" append="true">
    <include name="**/*.swc"/>
    </external-library-path>
    </mxmlc>
    <delete dir="${ane.swc.dir}" />
    </target>

    <!-- Simple condition to switch between adt.bat and adt -->
    <condition property="isWindows" else="false">
    <os family="windows" />
    </condition>
    <condition property="air.adt" value="${env.AIR_HOME}/bin/adt.bat" else="${env.AIR_HOME}/bin/adt">
    <istrue value="${isWindows}"/>
    </condition>

    <!-- Package an air from our code -->
    <target name="build" depends="compile">

    <exec executable="${air.adt}" failonerror="true">
    <arg line="-package"/>
    <arg line="-storetype pkcs12"/>
    <arg line="-keystore certificate.p12"/>
    <arg line="-storepass ${password}"/>
    <arg line="${output.dir}/MyApp.air"/>
    <arg line="${source.dir}/MyApp-app.xml"/>
    <arg line="-C ${output.dir} output.swf"/>
    </exec>

    </target>

    </project>
    - + \ No newline at end of file diff --git a/docs/tools/building/ant/tasks.html b/docs/tools/building/ant/tasks.html index 014d94fb0..f5a8b74b3 100644 --- a/docs/tools/building/ant/tasks.html +++ b/docs/tools/building/ant/tasks.html @@ -16,14 +16,14 @@ - +

    Tasks

    AIR provides a series of Ant tasks for each of the main commands used when compiling and packaging actionscript code and AIR applications.

    These tasks are made available to your ant script by using the taskdef pointed to the AIR SDK as follows:

    <taskdef resource="flexTasks.tasks" classpath="${env.AIR_HOME}/ant"/>

    This makes the following tasks available

    • mxmlc: actionscript/mxml compiler for generating swf files;
    • compc: actionscript component compiler, for generating swc libraries;
    • asdoc: ASDoc documentation generator;
    • adt and adl: AIR developer tool and the AIR debug launcher via an exec task.

    mxmlc

    The mxmlc task gives you access to a task that implements all of the features of the mxmlc command for compiling as (AS3) and mxml files into a swf.

    For example:

    <mxmlc file="src/Main.as" output="output.swf">
    <source-path path-element="src"/>
    <source-path path-element="${AIR_HOME}/frameworks"/>
    </mxmlc>

    The tags for the mxmlc task align with the parameters for the mxmlc command line utility. You can see these by running mxmlc -help list (or mxmlc -help advanced) on the command line.

    mxmlc parameter list

    $ mxmlc -help advanced
    Adobe ActionScript Compiler (mxmlc)
    Version 2.0.0 build 1234
    Copyright 2004-2012 Adobe Systems Incorporated. All rights reserved.

    -advanced-telemetry
    -advanced-telemetry-password <string>
    -compiler.accessible
    -compiler.actionscript-file-encoding <string>
    -compiler.allow-source-path-overlap
    -compiler.as3
    -compiler.compress
    -compiler.context-root <context-path>
    -compiler.debug
    -compiler.defaults-css-files [filename] [...]
    -compiler.defaults-css-url <string>
    -compiler.define <name> <value>
    -compiler.enable-runtime-design-layers
    -compiler.es
    -compiler.external-library-path [path-element] [...]
    -compiler.fonts.advanced-anti-aliasing
    -compiler.fonts.languages.language-range <lang> <range>
    -compiler.fonts.local-font-paths [path-element] [...]
    -compiler.fonts.local-fonts-snapshot <string>
    -compiler.fonts.managers [manager-class] [...]
    -compiler.fonts.max-cached-fonts <string>
    -compiler.fonts.max-glyphs-per-face <string>
    -compiler.headless-server
    -compiler.include-libraries [library] [...]
    -compiler.inline
    -compiler.isolate-styles
    -compiler.keep-all-type-selectors
    -compiler.keep-as3-metadata [name] [...]
    -compiler.library-path [path-element] [...]
    -compiler.locale [locale-element] [...]
    -compiler.minimum-supported-version <string>
    -compiler.mobile
    -compiler.mxml.compatibility-version <version>
    -compiler.mxml.minimum-supported-version <string>
    -compiler.namespaces.namespace [uri] [manifest] [...]
    -compiler.omit-trace-statements
    -compiler.optimize
    -compiler.preloader <string>
    -compiler.remove-dead-code
    -compiler.report-invalid-styles-as-warnings
    -compiler.report-missing-required-skin-parts-as-warnings
    -compiler.services <filename>
    -compiler.show-actionscript-warnings
    -compiler.show-binding-warnings
    -compiler.show-invalid-css-property-warnings
    -compiler.show-multiple-definition-warnings
    -compiler.show-shadowed-device-font-warnings
    -compiler.show-unused-type-selector-warnings
    -compiler.source-path [path-element] [...]
    -compiler.strict
    -compiler.theme [filename] [...]
    -compiler.verbose-stacktraces
    -compiler.warn-array-tostring-changes
    -compiler.warn-assignment-within-conditional
    -compiler.warn-bad-array-cast
    -compiler.warn-bad-bool-assignment
    -compiler.warn-bad-date-cast
    -compiler.warn-bad-es3-type-method
    -compiler.warn-bad-es3-type-prop
    -compiler.warn-bad-nan-comparison
    -compiler.warn-bad-null-assignment
    -compiler.warn-bad-null-comparison
    -compiler.warn-bad-undefined-comparison
    -compiler.warn-boolean-constructor-with-no-args
    -compiler.warn-changes-in-resolve
    -compiler.warn-class-is-sealed
    -compiler.warn-const-not-initialized
    -compiler.warn-constructor-returns-value
    -compiler.warn-deprecated-event-handler-error
    -compiler.warn-deprecated-function-error
    -compiler.warn-deprecated-property-error
    -compiler.warn-duplicate-argument-names
    -compiler.warn-duplicate-variable-def
    -compiler.warn-for-var-in-changes
    -compiler.warn-import-hides-class
    -compiler.warn-instance-of-changes
    -compiler.warn-internal-error
    -compiler.warn-level-not-supported
    -compiler.warn-missing-namespace-decl
    -compiler.warn-negative-uint-literal
    -compiler.warn-no-constructor
    -compiler.warn-no-explicit-super-call-in-constructor
    -compiler.warn-no-type-decl
    -compiler.warn-number-from-string-changes
    -compiler.warn-scoping-change-in-this
    -compiler.warn-slow-text-field-addition
    -compiler.warn-unlikely-function-value
    -compiler.warn-xml-class-has-changed
    -debug-password <string>
    -default-background-color <int>
    -default-frame-rate <int>
    -default-script-limits <max-recursion-depth> <max-execution-time>
    -default-size <width> <height>
    -dependency-graph <filename>
    -dump-config <filename>
    -error-problems [class] [...]
    -externs [symbol] [...]
    -frames.frame [label] [classname] [...]
    -help [keyword] [...]
    -ignore-problems [class] [...]
    -include-inheritance-dependencies-only
    -include-resource-bundles [bundle] [...]
    -includes [symbol] [...]
    -link-report <filename>
    -load-config <filename>
    -load-externs <filename>
    -metadata.contributor <name>
    -metadata.creator <name>
    -metadata.date <text>
    -metadata.description <text>
    -metadata.language <code>
    -metadata.localized-description <text> <lang>
    -metadata.localized-title <title> <lang>
    -metadata.publisher <name>
    -metadata.title <text>
    -output <filename>
    -raw-metadata <text>
    -remove-unused-rsls
    -resource-bundle-list <filename>
    -runtime-shared-libraries [url] [...]
    -runtime-shared-library-path [path-element] [rsl-url] [policy-file-url] [rsl-url] [policy-file-url]
    -runtime-shared-library-settings.application-domain [path-element] [application-domain-target] [...]
    -runtime-shared-library-settings.force-rsls [path-element] [...]
    -single-thread
    -size-report <filename>
    -static-link-runtime-shared-libraries
    -swf-version <int>
    -target-player <version>
    -tools-locale <string>
    -use-direct-blit
    -use-gpu
    -use-network
    -verify-digests
    -version
    -warning-problems [class] [...]
    -warnings

    To describe one of these parameters in detail you can call mxmlc -help <parameter>, eg:

    $ mxmlc -help use-network
    Adobe ActionScript Compiler (mxmlc)
    Version 2.0.0 build 1234
    Copyright 2004-2012 Adobe Systems Incorporated. All rights reserved.

    -use-network
    toggle whether the SWF is flagged for access to network resources

    compc

    The compc (component compiler) task is used to generate swc component libraries from source code and asset files (such as images, css etc).

    For example:

    <compc output="output.swc">
    <source-path path-element="src"/>
    <include-sources dir="src" includes="*"/>
    </compc>

    The tags for the compc task align with the parameters for the compc command line utility. You can see these by running compc -help list (or compc -help advanced) on the command line.

    compc parameter list

    $ compc -help advanced
    Adobe SWC Component Compiler (compc)
    Version 2.0.0 build 1234
    Copyright 2004-2012 Adobe Systems Incorporated. All rights reserved.

    -advanced-telemetry
    -advanced-telemetry-password <string>
    -compiler.accessible
    -compiler.actionscript-file-encoding <string>
    -compiler.allow-source-path-overlap
    -compiler.as3
    -compiler.compress
    -compiler.context-root <context-path>
    -compiler.debug
    -compiler.defaults-css-files [filename] [...]
    -compiler.defaults-css-url <string>
    -compiler.define <name> <value>
    -compiler.enable-runtime-design-layers
    -compiler.es
    -compiler.external-library-path [path-element] [...]
    -compiler.fonts.advanced-anti-aliasing
    -compiler.fonts.languages.language-range <lang> <range>
    -compiler.fonts.local-font-paths [path-element] [...]
    -compiler.fonts.local-fonts-snapshot <string>
    -compiler.fonts.managers [manager-class] [...]
    -compiler.fonts.max-cached-fonts <string>
    -compiler.fonts.max-glyphs-per-face <string>
    -compiler.headless-server
    -compiler.include-libraries [library] [...]
    -compiler.inline
    -compiler.isolate-styles
    -compiler.keep-all-type-selectors
    -compiler.keep-as3-metadata [name] [...]
    -compiler.library-path [path-element] [...]
    -compiler.locale [locale-element] [...]
    -compiler.minimum-supported-version <string>
    -compiler.mobile
    -compiler.mxml.compatibility-version <version>
    -compiler.mxml.minimum-supported-version <string>
    -compiler.namespaces.namespace [uri] [manifest] [...]
    -compiler.omit-trace-statements
    -compiler.optimize
    -compiler.preloader <string>
    -compiler.remove-dead-code
    -compiler.report-invalid-styles-as-warnings
    -compiler.report-missing-required-skin-parts-as-warnings
    -compiler.services <filename>
    -compiler.show-actionscript-warnings
    -compiler.show-binding-warnings
    -compiler.show-invalid-css-property-warnings
    -compiler.show-multiple-definition-warnings
    -compiler.show-shadowed-device-font-warnings
    -compiler.show-unused-type-selector-warnings
    -compiler.source-path [path-element] [...]
    -compiler.strict
    -compiler.theme [filename] [...]
    -compiler.verbose-stacktraces
    -compiler.warn-array-tostring-changes
    -compiler.warn-assignment-within-conditional
    -compiler.warn-bad-array-cast
    -compiler.warn-bad-bool-assignment
    -compiler.warn-bad-date-cast
    -compiler.warn-bad-es3-type-method
    -compiler.warn-bad-es3-type-prop
    -compiler.warn-bad-nan-comparison
    -compiler.warn-bad-null-assignment
    -compiler.warn-bad-null-comparison
    -compiler.warn-bad-undefined-comparison
    -compiler.warn-boolean-constructor-with-no-args
    -compiler.warn-changes-in-resolve
    -compiler.warn-class-is-sealed
    -compiler.warn-const-not-initialized
    -compiler.warn-constructor-returns-value
    -compiler.warn-deprecated-event-handler-error
    -compiler.warn-deprecated-function-error
    -compiler.warn-deprecated-property-error
    -compiler.warn-duplicate-argument-names
    -compiler.warn-duplicate-variable-def
    -compiler.warn-for-var-in-changes
    -compiler.warn-import-hides-class
    -compiler.warn-instance-of-changes
    -compiler.warn-internal-error
    -compiler.warn-level-not-supported
    -compiler.warn-missing-namespace-decl
    -compiler.warn-negative-uint-literal
    -compiler.warn-no-constructor
    -compiler.warn-no-explicit-super-call-in-constructor
    -compiler.warn-no-type-decl
    -compiler.warn-number-from-string-changes
    -compiler.warn-scoping-change-in-this
    -compiler.warn-slow-text-field-addition
    -compiler.warn-unlikely-function-value
    -compiler.warn-xml-class-has-changed
    -debug-password <string>
    -default-background-color <int>
    -default-frame-rate <int>
    -default-script-limits <max-recursion-depth> <max-execution-time>
    -default-size <width> <height>
    -dependency-graph <filename>
    -directory
    -dump-config <filename>
    -error-problems [class] [...]
    -externs [symbol] [...]
    -frames.frame [label] [classname] [...]
    -help [keyword] [...]
    -ignore-problems [class] [...]
    -include-classes [class] [...]
    -include-file [name] [path] [...]
    -include-inheritance-dependencies-only
    -include-lookup-only
    -include-namespaces [uri] [...]
    -include-resource-bundles [bundle] [...]
    -include-sources [path-element] [...]
    -include-stylesheet [name] [path] [...]
    -includes [symbol] [...]
    -link-report <filename>
    -load-config <filename>
    -load-externs <filename>
    -metadata.contributor <name>
    -metadata.creator <name>
    -metadata.date <text>
    -metadata.description <text>
    -metadata.language <code>
    -metadata.localized-description <text> <lang>
    -metadata.localized-title <title> <lang>
    -metadata.publisher <name>
    -metadata.title <text>
    -output <filename>
    -raw-metadata <text>
    -remove-unused-rsls
    -resource-bundle-list <filename>
    -runtime-shared-libraries [url] [...]
    -runtime-shared-library-path [path-element] [rsl-url] [policy-file-url] [rsl-url] [policy-file-url]
    -runtime-shared-library-settings.application-domain [path-element] [application-domain-target] [...]
    -runtime-shared-library-settings.force-rsls [path-element] [...]
    -single-thread
    -size-report <filename>
    -static-link-runtime-shared-libraries
    -swf-version <int>
    -target-player <version>
    -tools-locale <string>
    -use-direct-blit
    -use-gpu
    -use-network
    -verify-digests
    -version
    -warning-problems [class] [...]
    -warnings

    To describe one of these parameters in detail you can call compc -help <parameter>, eg:

    $ compc -help include-sources
    Adobe SWC Component Compiler (compc)
    Version 2.0.0 build 1234
    Copyright 2004-2012 Adobe Systems Incorporated. All rights reserved.

    -include-sources [path-element] [...]
    a list of directories and source files to include in the output SWC
    (repeatable)

    asdoc

    The asdoc task is a command-line tool that you can use to create API language reference documentation as HTML pages from the ActionScript classes and MXML files.

    adt

    The adt task is the AIR Developer Tool and represents the key packaging tool for creating AIR applications and components. You can use adt to:

    • Package an AIR application in a variety of formats
      • .air installation file;
      • iOS ipa;
      • Android apk / aab;
      • native installer eg exe on Windows or dmg on macOS
    • Package a native extension as an AIR Native Extension (ANE) file;
    • Sign an AIR application with a digital certificate;
    • Install, uninstall and launch applications on connected devices;
    <exec executable="${env.AIR_HOME}/bin/adt">
    <arg line="-package"/>
    <arg line="-storetype pkcs12"/>
    <arg line="-keystore certificate.p12"/>
    <arg line="-storepass password"/>
    ...
    </exec>

    adl

    ADL is a command line debugger for Adobe® AIR™ applications in the AIR SDK. You can use this to launch an AIR application without packaging into a captive runtime application or using the AIR Runtime.

    This command can be called through an exec task similar to adt:

    <exec executable="${env.AIR_HOME}/bin/adl">
    ...
    </exec>
    - + \ No newline at end of file diff --git a/docs/tools/development/scout/faqs.html b/docs/tools/development/scout/faqs.html index 5c0e608f3..fa8368a93 100644 --- a/docs/tools/development/scout/faqs.html +++ b/docs/tools/development/scout/faqs.html @@ -16,14 +16,14 @@ - +

    Frequently Asked Questions

    Below are a set of frequently asked questions that may be helpful as you get started with Scout.

    Why can't I get Flash Player to connect to Scout?

    If you don't see any sessions appearing, try the following:

    • Ensure your version of Adobe Scout is up to date.
    • Ensure your version of Flash Player is new enough.
    • For mobile projects, ensure you built with an up-to-date version of the SDK or Flash Builder.
    • For mobile projects, ensure the companion app is connected.
    • Also ensure the .telemetry.cfg file is in the correct location with the right contents.
    • Verify that the Scout server listening. Open Scout, and then type localhost:7934 into your web browser. It should respond quickly with "server dropped connection", "no data received", or something similar (since Scout is not an HTTP server). Scout should show the error message "can't start a session because the telemetry data isn't valid". If the browser stalls for a long time, and then comes back with "server not found" or something similar, then the socket isn't working. Check your firewall and security settings. You can try changing the Scout port under Preferences > Listen For New Session On Port. If you do this, remember to update your .telemetry.cfg file.

    If the iOS or Android Scout companion app can't connect, try the following:

    • Ensure your Scout companion app is up to date.
    • If the companion app cannot find your machine, see if it connects when you choose Other and type the IP address.
    • See if you can connect to your machine from the device using another app. You may want to try setting up a web server on your machine and connecting to it:
      • On Mac OS, go to System Preferences > Sharing, and enable Web Sharing.
      • On Windows, enable Internet Information Services (IIS).
      • Test that you can access your machine's website from itself.
      • Now try to do the same from your device.

    How do I remotely profile from Chrome?

    If you're using the Flash Pepper plugin on Chrome (the one that is enabled by default), the .telemetry.cfg file is in a less convenient location. This is because Chrome's sandboxing limits the locations that Flash Player is allowed to read files from.

    The locations are as follows (the format of the file is exactly the same):

    • Mac OS: ~/Library/Application Support/Google/Chrome/Default/Pepper Data/Shockwave Flash/UserHome/.telemetry.cfg
    • Windows: %HOMEDRIVE%%HOMEPATH%\AppData\Local\Google\Chrome\User Data\Default\Pepper Data\Shockwave Flash\UserHome\.telemetry.cfg

    What does "Waiting for GPU" mean?

    In a Stage3D app, your CPU and GPU have to be synchronized with one another to get the framerate you want. If either one is overloaded the framerate will drop. If a significant amount of time is spent "Waiting for GPU", this means that your GPU is overloaded. There are a few possibilities:

    • GPUs will not go faster than 60 fps. If you try to update the screen any faster than this, they simply block. If you're achieving 60 fps, don't worry about any waiting-for-GPU time.
    • If you're getting a consistently low framerate, you're asking the GPU to do too much. You'll have to optimize your 3D code (or run on a more powerful device). For example, try to render fewer triangles, use simpler AGAL programs, or use smaller textures. At the moment, Scout can't directly show you what was slow on the GPU, because it can't measure time on the GPU. However, if you turn on Stage3D Recording and look in the Stage3D Rendering panel, you can see exactly which Stage3D commands you're executing, step through them, and see how they affect the scene. You may be able to find ways to make this more efficient.
    • If your framerate is jittering, oscillating, or following a sawtooth pattern, you could be experiencing a Flash Player problem relating to synchronization between the CPU and GPU. Adobe is working on this.

    Scout crashed, or displayed an error. What do I do?

    If Scout crashed before you had time to save your session, you can recover the data from the following locations, where you'll find one or more FLM files:

    • Mac OS: /var/folders/… …/Adobe Performance Data
    • Windows: %HOMEDRIVE%%HOMEPATH%\AppData\Local\Temp\Adobe Performance Data

    Note that on Mac OS, the actual location can vary, so the best way to find it is to go to /var/folders in Finder, and search for "Adobe Performance Data".

    If you try to open the FLM and Scout crashes again, then you've found a bug. Adobe would be grateful if you submit your FLM so the problem can be fix the problem!

    If an error occurs, there may be more information in the Scout log:

    • Mac OS: ~/Library/Preferences/Adobe/Scout/1.0/logs
    • Windows: %HOMEDRIVE%%HOMEPATH%\AppData\Roaming\Adobe\Scout\1.0\logs
    - + \ No newline at end of file diff --git a/docs/tools/development/scout/getting-started.html b/docs/tools/development/scout/getting-started.html index e5c1763f6..f44a02c0f 100644 --- a/docs/tools/development/scout/getting-started.html +++ b/docs/tools/development/scout/getting-started.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ To access all the data that is available, such as information on your ActionScript code and detailed information about DisplayList rendering and Stage3D, you need to enable advanced telemetry on your SWF.

    The reason this information isn't exposed by default is to prevent other people from using Scout to easily acquire these details about your content. Don't worry though; it's very easy to enable this, and unleash the full power that Scout has to offer.

    There are a few different ways to enable advanced telemetry depending on your development environment.

    TODO

    - + \ No newline at end of file diff --git a/docs/tools/development/scout/usage.html b/docs/tools/development/scout/usage.html index 80ec51ffb..d4d8eb097 100644 --- a/docs/tools/development/scout/usage.html +++ b/docs/tools/development/scout/usage.html @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ This is really useful for finding a specific function call in a big application.

    Perhaps the most useful feature of all is the ability to find text in a different frame. If you click on the >> button, Scout will search past the end of the current frame selection, until it finds a frame that has the text that you're looking for. Scout then jumps to that frame, and if the search result isn't in a visible panel, it'll open the panel and scroll to the result. The << button does the same thing, but searches backwards.

    - + \ No newline at end of file diff --git a/docs/tutorials.html b/docs/tutorials.html index 066caf77d..5c57260e9 100644 --- a/docs/tutorials.html +++ b/docs/tutorials.html @@ -16,13 +16,13 @@ - +

    Tutorials

    These tutorials cover some of the core concepts when developing applications with the AIR SDK.

    They teach you how to build applications and, of particular note are the platform specific tutorials that cover the concepts involved with packaging and deploying applications to certain platforms.

    - + \ No newline at end of file diff --git a/docs/tutorials/platform/android.html b/docs/tutorials/platform/android.html index 8e9c59ff3..a81aad5fe 100644 --- a/docs/tutorials/platform/android.html +++ b/docs/tutorials/platform/android.html @@ -16,13 +16,13 @@ - +

    Android

    About

    Android is a mobile operating system based on a modified version of the Linux kernel and other open source software, designed primarily for touchscreen mobile devices such as smartphones and tablets. Android is developed by a consortium of developers known as the Open Handset Alliance and commercially sponsored by Google.

    These tutorials cover some of the core concepts when developing applications with the AIR SDK for Android. These are concepts specific to the Android platform and generally are not applicable to other platforms.

    Some of these concepts are specific to deploying to a particular store, such as Google Play and may not apply to all Android applications.

    Tutorials here include:

    - + \ No newline at end of file diff --git a/docs/tutorials/platform/android/android-tv-support.html b/docs/tutorials/platform/android/android-tv-support.html index 19c9bfed3..5b35a3cf7 100644 --- a/docs/tutorials/platform/android/android-tv-support.html +++ b/docs/tutorials/platform/android/android-tv-support.html @@ -16,13 +16,13 @@ - +

    Android TV Support

    With AIR 28, Android TV support for AIR Android applications comes with more stability and improvements.

    Developers can develop captive runtime applications that are also compatible with Android TV. Use swf-version 31 or greater and namespace 20.0 or greater to access this feature. The two tags mentioned below need to be added to the app.xml file to support Android TV applications.

    1. <supportsAndroidTV></supportsAndroidTV>

      Value for the <supportsAndroidTV> tag can be either "true" or "false". If this tag is not added, then the default value will be "false".

      • <supportsAndroidTV>true</supportsAndroidTV>: Application is supported on Android TV and it will reflect on the home screen of Android TV after the installation.
      • <supportsAndroidTV>false</supportsAndroidTV>: Application is not supported on Android TV and it will not be shown on the home screen of the Android TV. However, it will be reflected in the downloaded apps inside Settings of the device.
    2. <banner></banner>

      This is the tag where the user can give the banner image path. Application Banners represent your app or game on the home screens of TV devices and serve as a way for users to launch the app. The specific requirements for a banner image are 320 x 180 px PNG (xhdpiresource).

      In case the developer does not provide the banner image but enables supportsAndroidTV, a default banner image will reflect on the home screen of Android TV.

    In order to access new APIs for TV devices, you must create a project or modify an existing project that targets Android 5.0 (API level 21) or higher.

    Applications can only be packaged with apk captive runtime target for Android TV.

    Android TV support is available from AIR SDK 20.0 or higher, and so the namespace needs to be added accordingly in app.xml file.

    Example Application Descriptor

    Make the below changes in your application descriptor file parallel to <manifestAdditions> tag:

    app.xml
    <android>

    <manifestAdditions><![CDATA[
    <manifest android:installLocation="auto">


    ...

    </manifest>
    ]]></manifestAdditions>

    <supportsAndroidTV>true</supportsAndroidTV>

    <banner>/path/to/bannerimage_320x180.png</banner>

    </android>
    - + \ No newline at end of file diff --git a/docs/tutorials/platform/android/custom-resources.html b/docs/tutorials/platform/android/custom-resources.html index 32b5b3e6c..646e8bb17 100644 --- a/docs/tutorials/platform/android/custom-resources.html +++ b/docs/tutorials/platform/android/custom-resources.html @@ -16,13 +16,13 @@ - +

    Custom Resources

    Resources are the additional files and static content that Android uses, such as bitmaps, layout definitions, user interface strings, animation instructions, and more.

    They are used by native Android code in SDKs and ANEs that you may use in your application. For example, the following require custom resources:

    • notification icons;
    • layered application launch icons;
    • Firebase configuration values;

    In the past you may have created a "Custom Resources" ANE, to package the resources into an extension and then included this extension in your application.

    This is no longer required! We now have the ability to directly include resources in an AIR application.

    Resources Directory

    Create a directory in your application source for storing your resources. We suggest you use res for the name of this directory to align with the official Android name for this directory but you can name it anything you desire.

    This directory should be at the same level as your application descriptor, and your application swf when packaging your application.

    eg

    .
    |____libs
    |____library.swc
    |____src
    |____Application.as
    |____Application-app.xml
    |____res
    |____values
    |____values.xml

    You must include it as a packaged directory and ensure it ends up in your build directory. For example in IntelliJ, add it as a packaged directory in your module settings under the Android tab. Or if you are using adt directly add it as -C . res to the package command.

    Specify the resdir

    Next you need to indicate to AIR that this directory is to be treated as a resource directory. To do this we add a resdir node to the application descriptor, just after the android node:

    ...
    </android>
    <resdir>res</resdir>
    ...

    The value of this node should be the name of your resources directory.

    Creating Resources

    There is no change to constructing the resources, follow the guide from whatever SDK or ANE you are using that requires the resources. Once you have created your resources you must place them in the directory you have created above in the Android resource directory structure. So you should have something like the following:

    res
    |____drawable-mdpi
    |____ic_stat_icon.png
    |____drawable-hdpi
    |____ic_stat_icon.png
    |____drawable-xhdpi
    |____ic_stat_icon.png
    |____drawable-xxhdpi
    |____ic_stat_icon.png
    |____drawable-xxxhdpi
    |____ic_stat_icon.png
    |____values
    |____values.xml

    Notification Icons

    The Android Asset Studio is a great online resource which will convert your icon into the correct sizes and formats for an Android notification icon.

    Your notification icon needs to be white(grey) and transparent and will be converted to meet these requirements if you provide something different.

    To generate these goto the Android Asset Studio Notification Icon Generator and upload your source image. Make sure you change the name of the icon. You will be using this name to reference this icon in notifications.

    - + \ No newline at end of file diff --git a/docs/tutorials/platform/android/handling-1024bit-certificates.html b/docs/tutorials/platform/android/handling-1024bit-certificates.html index de630a664..a63c93eab 100644 --- a/docs/tutorials/platform/android/handling-1024bit-certificates.html +++ b/docs/tutorials/platform/android/handling-1024bit-certificates.html @@ -16,13 +16,13 @@ - +

    Handling 1024bit Certificates

    In the past you may have been using a 1024bit certificate for signing your application. With the latest Java releases 1024bit certificates are no longer supported and as creating Android applications requires a newer version of Java you will need to update to a 2048bit certificate (or better).

    To generate a new certificate you can use adt :

    adt -certificate -cn ORG_NAME -validityPeriod 20 2048-RSA certificate.p12 PASSWORD
    note

    The latest version of Java that supports 1024 bit certificates is 1.8.0_112.

    An issue arises however with platforms that don't allow certificate changes, particularly with the Google Play Store.

    In this case the easiest approach is to update to Play App Signing and upload the old certificate for Google to automatically sign releases. You will create a new 2048 "upload certificate" which you will use for testing and uploading.

    Play App Signing

    Convert existing certificate

    Firstly go through the process to convert your existing certificates, including setting up "Play App Signing". When you reach the point of having to "Export and upload a key from Java keystore" it will likely fail as you cannot read your existing certificate using the latest Java.

    You will need to ensure you have version 1.8.0_112 of the Java development kit installed on your machine, along with the current version you are using for AIR. You can find versions of the JDK here.

    Download the pepk.jar tool java application and extract it to a known location. (This is an older version of the Google supplied tool that still supports java 1.8).

    1. Change Java Environment

    You will need to temporarily change your java version to use the version 1.8 you just installed:

    Open your terminal application, and set the environment to use Java 1.8:

    export JAVA_HOME=`/usr/libexec/java_home -v1.8.0_112`
    export JAVACMD=${JAVA_HOME}/bin/java

    You can confirm by running java -version and you should see 1.8.0_112.

    1. Get the certificate alias

    Get the alias (generally this value is 1 but you should confirm):

    keytool -v -list -keystore Certificate.p12
    1. Encrypt for uploading

    Then run the tool (the encryption key should be listed on the play store page "Export and upload a key from Java keystore"):

    java -jar pepk.jar  \
    --keystore=Certificate.p12 --alias=1 \
    --output=encrypted_certificate.zip \
    --encryptionkey=XXXX

    This will create a encrypted_certificate.zip file which you can upload to the Play console.

    Create an upload certificate

    Important

    Do not skip this step when converting an old certificate. It is listed as optional in the documentation for Play App Signing but in this case it is required.

    Next you will need to create an upload certificate. This is the certificate you will use to sign your application with AIR for testing and uploading. This should be a newer 2048 bit certificate.

    Close the terminal that you temporarily changed the java version in the previous section and open a new terminal window, confirming your java version has returned to the latest.

    • Create a RSA 2048 certificate using adt (replace fields as required):
    adt -certificate \
    -cn "common name" \
    -validityPeriod 20 \
    2048-RSA \
    upload_certificate.p12 \
    PASSWORD
    • Convert the p12 to a pem file:
    keytool -export -rfc \
    -keystore upload_certificate.p12 \
    -alias 1 \
    -file upload_certificate.pem
    • Upload the upload_certificate.pem file as your upload certificate.

    More details on the upload certificate can be found here including how to change an upload certificate if you didn't create one when setting up Play App Signing.

    Debugging Services

    Many Android services are tied to the signature of your application (you may have entered a fingerprint of your certificate when setting up a service). Services such as Firebase and Facebook use this signature to verify the request is coming from the correct application.

    When you are testing with the new upload certificate you may find some of the services are failing due to the signature mismatch. This won't affect your live application as Google is signing it with your original certificate, however to aid your testing it is recommended that you add an additional fingerprint for your new upload certificate to your service configuration.

    - + \ No newline at end of file diff --git a/docs/tutorials/platform/android/packaging-android-app-bundles.html b/docs/tutorials/platform/android/packaging-android-app-bundles.html index a0cd0a0f0..27f25e730 100644 --- a/docs/tutorials/platform/android/packaging-android-app-bundles.html +++ b/docs/tutorials/platform/android/packaging-android-app-bundles.html @@ -16,13 +16,13 @@ - +

    Packaging Android App Bundles

    info

    This is specific for Google Play Publishing

    note

    Important: From August 2021, new apps are required to publish with the Android App Bundle on Google Play. New apps larger than 150 MB are now supported by either Play Feature Delivery or Play Asset Delivery.

    An Android App Bundle (AAB) is a publishing format that includes all your app’s compiled code and resources, and defers APK generation and signing to Google Play.

    Google Play uses your app bundle to generate and serve optimized APKs for each device configuration, so only the code and resources that are needed for a specific device are downloaded to run your app. You no longer have to build, sign, and manage multiple APKs to optimize support for different devices, and users get smaller, more-optimized downloads.

    More information on Android App Bundles here.

    Packaging

    AIR supports creation of an App Bundle by creating an Android Studio project and using Gradle to build this. It requires an Android SDK to be installed. It also needs to have a JDK present and available via the JAVA_HOME environment variable.

    info

    The creation of an Android App Bundle involves a few steps and can take significantly longer than creating an APK file. We recommend that APK generation is still used during development and testing, and the AAB output can be used when packaging up an application for upload to the Play Store.

    Installing Android SDK

    You must download and install the Android SDK to your development machine. The easiest way to do this is to install Android Studio. Download.

    Manual Install

    It is possible to install just the Android SDK if you do not want to install Android Studio. You will need to:

    Using sdkmanager

    To list the available packages :

    sdkmanager --list

    Then to install the required sdk, you will want to install the following packages at least, build-tools;XX.X.X, platform-tools, platforms;android-XX and the emulator:

    sdkmanager --install "build-tools;30.0.3"
    "platform-tools"
    "platforms;android-30"
    "emulator"

    Specify the Android SDK Path

    You need to specify the path to your Android SDK in your AIR SDK configuration. There are several methods available to do this.

    Using the AIR SDK Manager

    You can use the AIR SDK Manager to set this configuration option. This is the simplest approach and provides a UI to edit your global adt.cfg directly.

    Using adt.cfg

    You can specify the Android SDK in the adt.cfg file located at [AIRSDK]/lib/adt.cfg and adding the following line:

    AndroidPlatformSDK=/path/to/android/sdk

    This will need to be updated in every AIR SDK you use.

    Using an environment variable

    You can set the path to the Android SDK by setting an environment variable named AIR_ANDROID_SDK_HOME that points to the Android SDK location.

    This has the advantage of applying the setting to all installs of the AIR SDK.

    Using platformsdk

    If you use adt to package your application you can supply the path to the Android SDK via the -platformsdk option:

    adt ... -platformsdk /path/to/android/sdk

    Creating the AAB

    Using adt

    To package an AAB using adt simply change the target from apk to aab :

    adt -package
    -target aab
    <signing options>
    output.aab
    <app descriptor and files>
    [-extdir <folder>]
    -platformsdk <path_to_android_sdk>

    You can exclude the platformsdk option if you are using one of the other approaches above.

    IDE's without AAB option

    If you are using an IDE that currently cannot change the output target to aab you can force AIR to output an aab from the normal apk packaging process. This applies to most IDE's currently, including IntelliJ, Animate and FDT.

    This is done by setting a configuration option in adt.cfg (located at [AIRSDK]/lib/adt.cfg):

    CreateAndroidAppBundle=true
    note

    This will force the output to be in the AAB format, however your IDE may still output a file with the extension of apk. If this is the case you will need to rename the output from application.apk to application.aab.

    Specifying Certificates

    There is no change to how you specify the certificate used to sign the package whether it is an APK or AAB that you are creating. The method you are currently using for producing an APK is the same with AAB.

    You can continue to use the same application certificate that you created in the past to sign your application, however you may want to see the notes on the upload certificate in the next section.

    Signing and Certificates

    In the past you were most likely using adt to generate a p12 certificate that you were using to sign your APK for Google Play.

    Example certificate generation

    adt -certificate    -cn COMPANYNAME
    -o "COMPANY LTD"
    -validityPeriod 20
    -ou AU 2048-RSA
    YOUR_CERTIFICATE.p12
    PASSWORD

    If you are creating a new application you can still use this approach and the follow the directions below to convert it for uploading to the Play Console.

    Converting Existing Certificates

    Play App Signing is required for publishing applications using an Android App Bundle.

    Allow Google to protect the app signing key for your app and sign each release so Android devices can trust that updates are from you. This is a requirement to publish with the Android App Bundle.

    To convert your existing certificate for use with Play App Signing you can use the tool provided by Google to convert and encrypt your certificate file for uploading.

    Firstly identify the alias of your key in your certificate by using keytool:

    keytool -v -list -keystore YOUR_CERTIFICATE.p12
    keytool location

    keytool is a key and certificate management utility.

    You will find it in $JAVA_HOME/bin/keytool.

    You will need to enter the password and then it should output something like the below:

    Keystore type: JKS
    Keystore provider: SUN

    Your keystore contains 1 entry

    Alias name: 1
    Creation date: 03/06/2017
    ...

    Take note of the Alias name: , in this case it is "1".

    Next, start the process of signing up to "Play App Signing" in the Play console for your applilcation and use the Export and Upload a key from java keystore method.

    • Log into the Play console and find the App Integrity page for your application:

    • Select the "Export and upload a key from Java keystore" option:

    This will give you the option to download the PEPK tool (pepk.jar) and show you an encryption key to use in the command.

    Use this as below, replacing the alias with the alias name you got above:

    java -jar pepk.jar  --keystore=YOUR_CERTIFICATE.p12
    --alias=1
    --output=encrypted_certificate.zip
    --encryptionkey=XXXXXXXXX

    This will create a encrypted_certificate.zip file which you can upload to the Play console.

    1024bit certificates

    If you are attempting to convert a legacy 1024bit certificate, this process may fail. Have a look at the documentation on handling 1024bit certificates.

    Upload Certificate

    Optional

    Using the upload certificate is optional but recommended by Google. You can continue to use your application certificate to sign your AAB for uploading to the Play console, and generally that will be the easiest approach.

    The upload certificate is the certificate that you will use to sign your AAB for submission to the Play Store (and likely for debugging locally). Once you have completed the process of signing up for Play app signing, the App integrity section will show you details on the certificate that you uploaded as the "App signing key certificate" and also show you the "Upload key certificate" details.

    • If you don't add a separate upload certificate during the Play App Signing setup process then you should continue to use your existing certificate to sign your AAB for submission to the Play Store. You can confirm this by looking in App integrity section and comparing the signatures of the upload and application certificates.

    • If you choose to create a new upload certificate then during the Play App Signing setup process you should upload an additional certificate. It is important that you do this as part of the migrating process otherwise you will have to contact Google to upgrade the key (see below).

      • Select "Upload your upload key certificate" in the Play App Signing page and select the pem upload certificate file.

    To create an upload certificate

    • Create a RSA 2048 certificate using adt (replace fields as required):
    adt -certificate \
    -cn "common name" \
    -validityPeriod 20 \
    2048-RSA \
    upload_certificate.p12 \
    password
    • Convert the p12 to a pem file:
    keytool -export -rfc \
    -keystore upload_certificate.p12 \
    -alias 1 \
    -file upload_certificate.pem
    • Upload the upload_certificate.pem file as your upload certificate.

    What to do if you need to change your upload certificate

    If you have already setup Play App Signing to change the upload key certificate go to the "App integrity" section for your application and follow the process to "Request key upgrade".

    • Open the "App integrity" section for your application;
    • Select "Request key upgrade";
    • Select "I've lost the upload key which I use to sign each release";
    • Follow the guide to contact support and provide a new certificate;

    Testing

    After you build your Android App Bundle, you should test how Google Play uses it to generate APKs and how those APKs behave when deployed to a device. There are two ways you should consider testing your app bundle: locally using the bundletool command line tool and through Google Play by uploading your bundle to the Play Console and using a test track. This section explains how to use bundletool to test your app bundle locally.

    info

    If you haven't already done so, install bundletool using brew (brew install bundletool) or download bundletool from the GitHub repository.

    In all the examples below bundletool can be replaced with java -jar bundletool.jar if you are using the jar from the repository directly.

    The bundletool generates an apks from your app bundle, this is a container called an APK set archive, which uses the apks file extension. To generate an APK set for all device configurations your app supports from your app bundle, use the bundletool build-apks command, as shown below.

    bundletool build-apks --bundle=my_app.aab --output=my_app.apks

    If you want to deploy to a device, you need to also include your app’s signing information and add the --connected-device option to specify the particular APK to build:

    bundletool build-apks
    --bundle=my_app.aab
    --output=my_app.apks
    --connected-device
    --ks=YOUR_KEYSTORE.ks
    --ks-pass=pass:PASSWORD
    --ks-key-alias=ALIAS

    (See the section below to create a keystore.ks)

    Then to install the app to the connected device:

    bundletool install-apks --apks=my_app.apks

    More information on the bundletool can be found here

    Creating a keystore.ks

    You can create a keystore for use in the bundletool from your existing p12 file using the following command.

    keytool -importkeystore
    -srckeystore YOUR_CERTIFICATE.p12
    -srcstoretype pkcs12
    -srcalias 1
    -destkeystore YOUR_KEYSTORE.ks
    -deststoretype jks
    -destalias ALIAS

    You will need to set the srcalias to match the one from your certificate (see above for getting this information) and then set a new ALIAS which you will pass to the bundle tool.

    This will ask for a password for the new keystore and for the password for your existing certificate.

    - + \ No newline at end of file diff --git a/docs/tutorials/platform/desktop/packaging-native-installer.html b/docs/tutorials/platform/desktop/packaging-native-installer.html index 22c2f9c9f..94364c875 100644 --- a/docs/tutorials/platform/desktop/packaging-native-installer.html +++ b/docs/tutorials/platform/desktop/packaging-native-installer.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/tutorials/platform/ios/packaging-ipa.html b/docs/tutorials/platform/ios/packaging-ipa.html index b97e627a7..3a409838c 100644 --- a/docs/tutorials/platform/ios/packaging-ipa.html +++ b/docs/tutorials/platform/ios/packaging-ipa.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/docs/tutorials/platform/macos/creating-macos-pkg-files.html b/docs/tutorials/platform/macos/creating-macos-pkg-files.html index 8eb085a62..dc669770b 100644 --- a/docs/tutorials/platform/macos/creating-macos-pkg-files.html +++ b/docs/tutorials/platform/macos/creating-macos-pkg-files.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ Note that the certificate alias you're using must be present and valid in your Keychain tool with the exact same name, and you will likely get a request to authorise ADL to access your keychain for this process.

    /path/to/adt -package -storetype KeychainStore -alias "Developer ID Application: ECorp(XXXXXXXXX)" -target bundle -storetype KeychainStore -alias "Developer ID Application: ECorp(XXXXXXXXX)" /path/to/bundle/you/want/to/create /path/to/your/application.xml -extdir /path/to/anes/if/you/use/them -C /path/to/your/swf ECorp.swf -C /path/to/your/assets . -C /path/to/your/icons . -C /path/to/your/launch/images

    This option will also incorporate any entitlements that are listed in the application descriptor file under the <macOS><Entitlements> block.

    The output of this stage should be a suitably signed application bundle folder. It is worth checking that this will run properly at this stage: if something has gone wrong with signing and/or entitlements, this is the time to put this right.

    Create your .pkg file

    Assuming you want to distribute via a .pkg file you can create one as follows. Apparently, you can also create .dmg files that can contain your application, or just zip your bundle, but this results in a file that your users can launch and results in a wizard-style installer.

    Get a Developer ID Installer certificate.

    Head back to developer.apple.com and create a new certificate. This time it will be of the 'Developer ID Installer' type. Make sure you install it into your System and Login keychains again.

    Pkg command

    Now run the following command taking note that we are using the installer certificate this time:

    productbuild --sign "Developer ID Installer: ECorp (XXXXXXX)" --component "/path/to/bundle.app" /Applications "/path/to/pkg/to/create/eCorp.pkg" 

    Notarize your .pkg file

    If you don't notarize your app users may be unable to install it. As a first step, you'll need to have (or create) an app-specific password for your apple account. This can be done at https://appleid.apple.com a quick google should help if you need it.

    Now we'll upload our pkg file to Apple's notarization service with the following:

    xcrun altool -type osx --notarize-app --primary-bundle-id "com.your.bundle.identifier" --username "your.apple.id@gmail.com" --password "your-app-specific-password" --file "/path/to/pkg/eCorp.pkg"

    Nothing will happen for a while as the file is uploaded, eventually, you should get an upload success message. You'll be given a reference string, copy this. Wait 5-10 minutes then check your email for your rejection email. Apple will say your app wasn't notarized. To find out why we'll need to run the following:

    xcrun altool --notarization-info your-ref-string -u "your.apple.id@gmail.com" --password "your-app-specific-password"

    You'll get a response back with a URL for a log file. Throw that into your web browser and you'll see a file explaining your rejection reason. i.e. one of your ANEs wasn't signed. Go back to step 2.5, sign the ANEs and then repeat all subsequent steps and try again.

    Hopefully, on your next try, you'll get a notarization success email instead.

    Staple your notarization to your pkg file

    In order for your app not to require an internet connection to check its notarization status, you should staple the notarization to it. This can be done with:

    xcrun stapler staple -v "/path/to/your/pkg/ECorp.pkg"

    You should get a success message and congrats your pkg is ready for distribution.

    The following 2 guides helped me when I got stuck. They have a lot of details but don't quite follow the process that worked for me. Hopefully, they can help if you run into issues.

    https://www.molleindustria.org/blog/notarizing-your-flashair-applications-for-macos/

    https://lessons.livecode.com/m/4071/l/1122100-codesigning-and-notarizing-your-lc-standalone-for-distribution-outside-the-mac-appstore#addendum-2-the-asc-provider

    - + \ No newline at end of file diff --git a/index.html b/index.html index 587f647b2..e1321cfc4 100644 --- a/index.html +++ b/index.html @@ -16,14 +16,14 @@ - +

    AIR SDK

    Develop beautiful cross-platform applications from a single code base using the AIR SDK and ActionScript

    Cross Platform

    AIR enables developers to create and package cross platform games and applications for major platforms like iOS, Android, Windows and macOS all from a single code base.

    Less code means faster development!

    Mature Environment

    AIR was originally released in 2008 so has a wealth of examples, tutorials and guides providing a vast resource for developers. Tooling is also mature and readily available including tight integration with animation tools such as Animate which make animation and asset creation easy.

    Develop Locally

    While developing you can use the local AIR simulator for fast development and quick iteration testing. This speeds up development time not requiring to deploy to devices or even processor-heavy device simulators.

    Native Extensions

    AIR has the ability to implement native functionality simply and there are a wealth of native extensions available to AIR developers providing everything from in-app billing to processing complex algorithms.

    package
    {
    import flash.display.Sprite;
    import flash.text.TextField;
    public class MyApp extends Sprite
    {
    private var textField : TextField;
    public function MyApp():void
    {
    textField = new TextField();
    textField.text = "Hello World!";
    addChild( textField );
    }
    }
    }

    Hello World!

    The code here represents a basic application that displays a text field with the text "Hello World!". It demonstrates extending the base Sprite display object and uses the TextField object to display the text.

    - + \ No newline at end of file diff --git a/news.html b/news.html index cbb3e9c6a..ef95be020 100644 --- a/news.html +++ b/news.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ capabilities required to support Privacy Manifests for iPhone/iPad applications. There are some other minor functional changes plus recent bug fixes that have been implemented.

    Features

    • AIR-6979: Removing colour-profile adjustments from the loading point of a JPEG
    • github-3116: Adding generation of AIR privacy manifest from defaults merged with ANEs
    • github-3172: Mac bundle creation to generate CFBundleDisplayName tag
    • github-3173: Mac bundle creation to generate CFBundleSupportedPlatforms tag

    Bug fixes

    • github-2976: Adding 'property' as a supported Android Manifest tag
    • github-3126: Fixing issue with Loader.loadBytes() throwing errors in Workers
    • github-3160: Ensuring Linux bundles can be created even if the rpm/deb identification checks fail
    • github-3171: Allow Android manifestAdditions to override activity's screenOrientation attribute

    · One min read
    Michael

    AIR SDK 50.2.4.5 has been released by Harman.

    Release 50.2.4.5 includes a number of bug fixes that had been provided also within the 51.0 pre- release branch but were also considered useful to release into production at an earlier date, across various different platforms.

    Bug fixes

    • AIR-7028: AIR Android file permission callbacks not always called
    • AIR-7029: AIR Android applicationDirectory files may not be accessible
    • AIR-7035: String.fromCharCode() should support all unicode code points
    • AIR-7059: Fixing AIR crash on iOS around network authentication (see AIR-6479)
    • github-2610: Ensuring Win32 timezone retrieval works for default tz when not dynamic
    • github-2807: Removing ANRs caused by access of nativeGetTextBoxBounds from wrong thread
    • github-2903: Fixing instability when breaking into a debugger on uncaught error
    • github-3049: Eliminating instability in GC following socket thread querying the app descriptor
    • github-3062: Updating Win32 camera handling to include better fallbacks where direct connect fails
    • github-3087: Correcting invalid scheme detection to prevent false-flagging of relative paths
    • github-3098: Allowing a/v data access for NetStream in data generation mode

    · 2 min read
    Michael

    AIR SDK 51.0.0.4 has been released by Harman.

    New features

    • AIR-6054: Adding support for file modification times for zip entries
    • AIR-6055: AIR Zip support for creation and saving of zip archives
    • AIR-7046: Adding ZipArchive.load/saveFromByteArray implementations
    • AIR-6866: Enable NativeWindow class for Android
    • AIR-7018: ADT add IPALinkFolder build configuration and linker script for macOS remote build
    • AIR-7044: AIR TextLine embedded fonts to support COLR tables
    • AIR-7045: AIR TextLine embedded fonts to support CBDT tables
    • github-149: Implementing FontDescription.createFromByteArray to load an OpenType/TrueType font for FTE
    • github-216: WebSocket client connection and handshaking
    • github-pad20: Updating NetStream.play() to accept IDataInput argument

    Bug fixes

    • AIR-6743: Update icon list in descriptor XSD
    • AIR-7031: AIRSDK Android dependency lists
    • AIR-7035: String.fromCharCode() should support all unicode code points
    • AIR-7036: Adding platform-specific fallback fonts for Emoji character ranges in Flash Text Engine
    • AIR-7059: Fixing AIR crash on iOS around network authentication (see AIR-6479)
    • github-1917: Correcting Linux bundle creation to support ARM64 ANEs
    • github-2807: Removing ANRs caused by access of nativeGetTextBoxBounds from wrong thread
    • github-2871: Switching to a 64-bit version of the LLVM ld64 linker
    • github-3098: Allowing a/v data access for NetStream in data generation mode
    • github-3102: Preventing crash when using Workers in a beta/prerelease build
    • github-3106: MacOS EncryptedLocalStore updating key storage mechanisms

    · 2 min read
    Michael

    AIR SDK 51.0.0.2 has been released by Harman.

    Discussion on the new features can be found here.

    New features

    • AIR-309: Adding AS3 API for allowing AS3 to handle HTTPS certificate errors
    • AIR-5963: Add ANE capabilities to render a Sprite using a MediaBuffer - initial support via BitmapData
    • AIR-6012: AS3 API for StageWebView constructor changes
    • AIR-6051, AIR-6053, AIR-6054: AIR zip support: Basic reading in of zip files to get entry details
    • AIR-6063: Updated OpenSSL-based ELS key storage
    • AIR-6279: AIR runtime support for float (removing float4 code)
    • AIR-6288: AIR AS3 API for encrypting and decrypting a byte array
    • AIR-6425: AS3 API for Socket.tcpNoDelay setting
    • AIR-6579: AS3 String startsWith and endsWith
    • AIR-6580: Add 'includes' and 'isEmpty' to Array and Vector classes
    • AIR-6581: Adding ByteArray conversions to/from base16 and base64
    • AIR-6707: Adding DatagramSocket.broadcast() method for UDP broadcasts
    • AIR-6752: AIR Digest to include SHA-512 support
    • AIR-6991: ByteArray write random bytes
    • AIR-6992: Update SWF tag encryption to support custom keys
    • AIR-7018: ADT move all iOS linker inputs into a single folder structure
    • github-216: Support for WebSocket servers
    • github-1242: Allow images in HTML text fields via 'allowedDomains' property
    • github-1858: Adding horizontal mouse wheel support
    • github-1936: Allow windows.UseWebView2 'exclusive' mode to prevent IE/WebBrowser usage
    • github-2625: Adding NetworkInfo.disableNetworkChanges flag to prevent socket disconnects
    • github-2742: Adding Function.declaration property to find details of a function
    • github-3060: AS3 StageTextContentType class for StageText support for OTP SMS entry

    Bug fixes

    • AIR-6840: FileReference.upload() to cope with binary file responses (Windows)
    • github-2318: Removing StageVideo viewport coordinate limits for AIR 51 apps
    • github-3024: Removing StageWebView viewport coordination limits for AIR 51 apps
    • github-3062: Updating Win32 camera handling to include better fallbacks where direct connect fails

    · One min read
    Michael

    AIR SDK 50.2.4.4 has been released by Harman.

    Bug fixes

    • AIR-6979: AIR JPEG decoding to take account of macOS display colour profile
    • github-2972: Ensuring correct toplevels are used for user-specified ANEs to correct delayed-loading
    • github-3000: Ensuring Android StageText elements can be re-added to stage
    • github-3034: iPhone WebView inspectable flag to response to test builds as well as debug builds
    • github-3034: Preventing iPhone WebView crash in debug builds pre-iOS16.4
    • github-3043: Updating handling of content URIs and file paths in Android
    • github-3046: Fixing null reference error in ADT on Android manifest 'uses-feature' entry
    • github-3058: Enabling native AAB signing with Java providerName argument

    · One min read
    Michael

    AIR SDK 50.2.4.3 has been released by Harman.

    Bug fixes

    • AIR-6479: Thread protection around credential handling in macOS URL stream
    • AIR-6931: Ensure macOS apps installed via AIR shared runtime are always x64
    • AIR-6964: AIR Android manifest additional features should override any from the template
    • github-2010: Re-implementing fix to allow Rectangle ..ToOutput methods to use 'this' as output
    • github-2625: Updating RTMPS code to accept self-signed certificates
    • github-2978: Ensuring APK files are code-signed with a release configuration
    • github-2988: Ensuring URL schemes conforming to RFC3986 are accepted in AIR
    • github-2989: Correcting DER-encoding of macho entitlements for IPA code signature
    • github-2992: Ensuring AABs built using Animate have all the native libraries included
    • github-2993: Adding thread-safety to new audio code to avoid segfault

    · One min read
    Michael

    AIR SDK 50.2.4.2 has been released by Harman.

    Bug fixes

    • AIR-4740: Remove use of sun.security classes for code signing - replace with BouncyCastle
    • github-1003: Ensuring Android surface restore copes with different event ordering
    • github-1199: Adjusting VideoViewAIR to prevent UnsatisfiedLinkError when calling JNI method too early
    • github-2409: Adding missing media symbols into AppleTV runtime libraries
    • github-2615: Updating Android stagetext/stagewebview functionality to cope better in background threads
    • github-2642: Adjusting thread handling for iOS audio to avoid glitching
    • github-2863: Ensuring ios webviews are inspectable for debug builds
    • github-2906: Allowing non-latin characters in files for Gradle-based builds (and using gradle for apk-signing)
    • github-2924: Fixing Android VideoTexture flicker at start of video playback
    • github-2950: Ensuring Android ANE .so libraries are packaged in AAB bundles

    · One min read
    Michael

    AIR SDK 50.2.4.1 has been released by Harman.

    Features

    AIR-6707: The earlier update to switch to a 'broadcast' mechanism for any address ending in .255 is now rolled out across all platform binaries. AIR-6809: Building on Sonoma/Xcode 15 for iPhoneOS/tvOS/macOS

    • github-2885: Picking up iOS/tvOS platform SDK version from platformsdk path
    • github-2911: Switching IPA linker on macOS to use ld-classic

    Bug fixes

    • github-1194: Adjusting Android lifecycle handlers to avoid black screen in Home/Launcher scenario
    • github-2810: Ensuring AIR copes with UIBackgroundModes being a string as well as an array
    • github-2869: Allowing Stage3D contexts to be created in Android gpu rendering mode
    • github-2888: Moving Android planeKickCascade function into UI thread to avoid exception
    • github-2893: Ensuring BitmapData.decode() works for transparency in PNGs
    • github-2923: Updating LLVM LD64.exe to remove MSVC runtime dependencies

    · One min read
    Michael

    AIR SDK 50.2.3.7 has been released by Harman.

    This release is primarily intended to revert the problems we'd caused when trying to fix #2772 - there are a few other Android-related changes brought into it too. But we're almost finished preparing a "50.2.4" version that will include the new iPhoneOS/macOS SDKs and Xcode version, and will be something people can then use in production whilst we push out the 51.0 branch initially as a beta.

    Bug Fixes

    • github-2835: Preventing crash in Android VideoTexture dispose
    • github-2837: Fixing calls to OpenGL for texture set-up to avoid later failure in VertexBuffer
    • github-2864: Ensuring Android screen state is known to avoid black-screen
    • github-2873: Building APK target can use 'all' arch plus the config file to limit the included ABIs
    • github-2879: Reverting github-2772 regarding activate/deactivate events on Android
    - + \ No newline at end of file diff --git a/news/2021/10/14/new-additions.html b/news/2021/10/14/new-additions.html index 37e2dd084..7659d9009 100644 --- a/news/2021/10/14/new-additions.html +++ b/news/2021/10/14/new-additions.html @@ -16,13 +16,13 @@ - +

    Community and Showcase Sections

    · 2 min read
    Michael

    Due to a lot of requests over the previous months we have added several new sections to promote developers and better direct people to the current resources available for AIR.

    We also have started creating a detailed "Getting Started" guide to walk new users through the installation of the AIR SDK and setup of a development environment.

    The first of these is the Community section. This section is aimed to direct developers to the resources and community channels that are available and active on the net.

    We have initially added three of what we believe are the most important resources currently:

    And we will be adding the ever present stackoverflow reference as well. If you believe anything else should be added, please let us know!

    The second is the Showcase section. The showcase is designed to be a place for AIR developers to not only promote their work but promote the AIR platform and show what is possible using the AIR SDK. You can add your own application through a pull request to the repository (or you can just email me your details).

    If you have any feedback on the tutorials or guides we are writing (or if you would like to contribute) please reach out!

    - + \ No newline at end of file diff --git a/news/2021/12/02/new-air-release.html b/news/2021/12/02/new-air-release.html index e7d9152d8..adc50a7fd 100644 --- a/news/2021/12/02/new-air-release.html +++ b/news/2021/12/02/new-air-release.html @@ -16,7 +16,7 @@ - + @@ -44,7 +44,7 @@ github-apm40: Fixing crash when using command-line tools with nativeprocess
    AIR-4740: Remove use of sun internal security classes for APK/AAB signing
    AIR-5427: AIR Android security update for https certificate errors

    - + \ No newline at end of file diff --git a/news/2021/12/14/new-air-release.html b/news/2021/12/14/new-air-release.html index def212136..69ca057a9 100644 --- a/news/2021/12/14/new-air-release.html +++ b/news/2021/12/14/new-air-release.html @@ -16,7 +16,7 @@ - + @@ -42,7 +42,7 @@ github-1430: ADT failing to launch an Android application when using new build mechanism
    github-1431: Better error handling for invalid license files
    AIR-5449: AIR Android packaging using ADT should work with compatible major/minor AIR releases

    - + \ No newline at end of file diff --git a/news/2022/01/17/new-air-release.html b/news/2022/01/17/new-air-release.html index e826ad5df..7c4a60fe8 100644 --- a/news/2022/01/17/new-air-release.html +++ b/news/2022/01/17/new-air-release.html @@ -16,13 +16,13 @@ - +

    Release 33.1.1.743

    · One min read
    Jan

    AIR Runtime 33.1.1.743 has been released by Harman.

    Bug Fixes

    • github-183: Fixing crash when cleaning up Windows StageWebView when debugger is active
    • github-1509/1522/1529: Correcting file dialog handling of properties such as filters and filenames
    • github-1510: Protected the audio track 'stopped' property from destroyed objects on Android
    • github-1516: Fixing problem with ANE zips being closed before extracting all Android files
    • github-1528: Using XML descriptor 'versionLabel' for Android 'versionName' field
    • github-1531: Ensure event handlers are still called when lower-priority event listeners are added within an earlier handler
    • github-1536: Detecting Windows 11 version in Capabilities information
    • github-1541: Ensuring unnamed local variables can still be inspected via a debugger connection
    - + \ No newline at end of file diff --git a/news/2022/03/08/new-air-release.html b/news/2022/03/08/new-air-release.html index 0400ddd7e..72d844558 100644 --- a/news/2022/03/08/new-air-release.html +++ b/news/2022/03/08/new-air-release.html @@ -16,13 +16,13 @@ - +

    Release 33.1.1.795

    · 2 min read
    Jan

    AIR Runtime 33.1.1.795 has been released by Harman.

    Features

    • github-1724: Adding 'preventDeviceModelAccess' tag in the ‘android’ section of the application descriptor to stop Build.MODEL call
    • github-1729: Enabling low/medium quality mode on desktop builds via an ‘allowLowQuality’ tag in the ‘initialWindow’ section of the application descriptor file.

    Bug Fixes

    • AIR-5760: Fixing crash in Android font rendering with clip larger than bitmap
    • github-427: Moving the adt.lic file into a user-specific folder rather than in the SDK
    • github-1001: Fixing StageVideo full screen viewport on MacOS Retina screens
    • github-1299: Fixing Android text rendering: invalid text width, and JNI error after long time running
    • github-1404: Fixing white-screen issue with Android non-full-screen content after the splash screen
    • github-1584: Handling empty R.java arrays in internal Android resource bytecode generator
    • github-1654: Removing spurious alpha channel from VideoTexture camera inputs
    • github-1666: Ensure we don't package multidex.jar from ANEs
    • github-1715: Updating URLs used in native installers to point to HARMAN AIR runtimes
    • github-1700: Ensuring Android arch overrides work with new gradle-based APK building
    • github-1704: Ensuring asset folders starting with underscores are packaged in Android
    • github-1709: Ensuring correct support for camera input on Linux
    • github-1721: Skipping APKSigner v2 process if running within JRE < 1.8
    - + \ No newline at end of file diff --git a/news/2022/05/12/air-release.html b/news/2022/05/12/air-release.html index 080cc9abb..fd4c67e49 100644 --- a/news/2022/05/12/air-release.html +++ b/news/2022/05/12/air-release.html @@ -16,13 +16,13 @@ - +

    Release 33.1.1.856

    · 2 min read
    Michael

    AIR SDK 33.1.1.856 has been released by Harman.

    Features

    • AIR-5912: Adding the ability to capture Android device logs via ADT
    • AIR-5878: Changes for new Android Scout companion app for Android 12 support
    • github-1818: Adding new ADT targets 'android-studio' and 'android-studio-debug'
    • github-1866: Add support for certificate generation with RSA-4096 keys

    Bug Fixes

    • AIR-331: Defaulting Android manifests to use a high max_aspect ratio
    • AIR-5864: BitmapData.draw doesn't cope above 8192 pixels
    • AIR-5895: Scout - add query section to AIR Android manifests
    • AIR-5901: Moving macOS ANE frameworks into Contents/Frameworks
    • github-964: Ensuring stage color changes force a refresh in direct mode
    • github-1641: Ensuring StageWebView does not send navigation error events when the navigation was deliberately cancelled
    • github-1742: Updating NAIB to display errors if an installer is used without the AIR runtime
    • github-1824: Re-introducing support for HTML-based AIR applications via native StageWebView
    • github-1847: Updating HTMLLoader to not throw on API errors - and 1x1 objects made invisible
    • github-1860: Updating EGL configuration choice for depth/stencil buffers
    • github-1875: Fixing crash on macOS caused by user home folder permissions
    • github-1878: Updating default player/swf versions to 33.1/44 in the AS compiler
    - + \ No newline at end of file diff --git a/news/2022/06/14/air-release.html b/news/2022/06/14/air-release.html index 24e7364e1..a12028614 100644 --- a/news/2022/06/14/air-release.html +++ b/news/2022/06/14/air-release.html @@ -16,13 +16,13 @@ - +

    Release 33.1.1.889

    · One min read
    Michael

    AIR SDK 33.1.1.889 has been released by Harman.

    Features

    • AIR-5964: Updating Falcon2 compiler to merge ABC blocks within SWC libraries
    • github-1829: Encrypted Local Store support on Linux

    Bug Fixes

    • AIR-5931: Fixing CRL issue 'Extension of the wrong type' when signing an AIR package
    • AIR-5932: Switching AAB jar-signing JDK detection to new build configuration
    • AIR-5990: Fixing problem running ADL from Animate on Apple M1 hardware
    • github-1856: Fixing URL session and connection reuse on macOS
    • github-1875: Fixing crash on macOS caused by user home folder permissions
    • github-1905: Ensuring Android 'queries' manifest section supports 'intent' sub-items
    • github-1912: Implementing support for omit-trace-statements, by default omitting only in release mode
    • github-1915: Fixing crash when calling Graphics.readGraphicsData() on Android-GPU
    • github-1923: Ensuring apk-debug and aab-debug builds use the debug gradle configurations
    • github-1936: Correcting StageWebView.isSupported to reflect availability of any native webview
    • github-1952: Fixing Android crash when viewing Video after VideoTexture
    - + \ No newline at end of file diff --git a/news/2022/08/05/air-release.html b/news/2022/08/05/air-release.html index 7a2e908b1..7e5e8d1ab 100644 --- a/news/2022/08/05/air-release.html +++ b/news/2022/08/05/air-release.html @@ -16,14 +16,14 @@ - +

    Release 33.1.1.929

    · One min read
    Michael

    AIR SDK 33.1.1.929 has been released by Harman.

    Features

    • AIR-5964: Reverting the merging of ABC blocks in SWCs
    • github-1963: Allowing the app descriptor to limit the Direct3D version level (using a new descriptor option <maxD3D> under the <windows> section)
    • github-2014: Adding 'ignore' option for autoOrients to avoid using OrientationEventListener

    Bug Fixes

    • github-402: Sending ByteArray from Worker cause Adobe Scout show incorrect memory consumption
    • github-1950: Cleaning up local JNI references to avoid Java OutOfMemory errors
    • github-1965: Fixing runtimeClases.jar file format to remove directory entries, and enabling jetifier
    • github-1973: Removing exe and dll files from the Linux and macOS SDK zips
    • github-1974: Reworking omit-trace-statements to ensure the compiler still works within Flash Builder
    • github-2010: Fixing error in Rectangle.unionToOutput if 'this' object is the same as 'output' parameter
    • github-2042, github-2047: Fixing problem with autoOrients setting being skipped
    - + \ No newline at end of file diff --git a/news/2023/02/22/air-release.html b/news/2023/02/22/air-release.html index ace273df0..8cb04bf01 100644 --- a/news/2023/02/22/air-release.html +++ b/news/2023/02/22/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.1.1

    · One min read
    Michael

    AIR SDK 50.2.1.1 has been released by Harman.

    Features

    • AIR-4357: AIR Android – adding runtimeInBackgroundThread flag to app descriptor
    • AIR-6386: Adding handlers for Developer ID Application certs for .air on macOS
    • AIR-6424: Adding support for TCP_NODELAY via a host name flag
    • AIR-6438: Adding support for content:// URIs on Android
    • github-956: Adding gradle dependencies sections to Android ANEs
    • github-2357: Adding 'onRequestPermissionsResult' mechanism for Android ANEs to use
    • github-2369: Adding a package error if the macOS captive runtime is malformed
    • github-2417: Building support for Apple tvOS applications
    • github-2435: Adding configuration file 'iPhoneSimulator' entry
    • github-2467: Adding Java FREByteArray setLength method
    • github-2469: Removing default Android INTERNET permission injection

    Bug fixes

    • AIR-5846: Remove A2712Enabler from SDK/runtime
    • github-2208: Allow activation of windows on Linux even if they aren’t owner/owned
    • github-2339: Ensuring Win32 Webview classes move properly between stages
    • github-2372: Adding a default string for NSLocationAlwaysAndWhenInUseUsageDescription in IPA info plist file
    • github-2375: Fixing framework code resources in IPA signature
    • github-2385: Reverting FDB Worker workaround from - github-399
    • github-2441: Ensuring IPA framework packaging handles universal binaries without armv7
    - + \ No newline at end of file diff --git a/news/2023/03/20/air-release.html b/news/2023/03/20/air-release.html index 43cbd0805..47eb9c407 100644 --- a/news/2023/03/20/air-release.html +++ b/news/2023/03/20/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.2.1

    · 2 min read
    Michael

    AIR SDK 50.2.2.1 has been released by Harman.

    Features

    • AIR-6395: Implementation of screen mode on mobile platforms
    • AIR-6451: ADT output logging to SDK Manager troubleshooting tab
    • AIR-6475: AIR ANE - ability to use VideoTexture for Android video players
    • github-1777: Ensuring iOS cameras support higher resolutions
    • github-1802: Updating camera maximum resolution to 4K
    • github-1984: Enabling video on linux using ffmpeg
    • github-2073: Adding support for HTTPS_PROXY environment variable to ADT
    • github-2482: ADT certificate creation supporting 25 year default and beyond 2050
    • github-2502: Adding file version information into .exe file generated by windows bundle packaging
    • github-2522: Throw an error if 'new Vector()' is called with an invalid argument type
    • github-2525: Automatically injecting INTERNET permission for debug Android packages

    Bug fixes

    • AIR-6037: Updating iOS event handling to fix screen time impact on audio
    • AIR-6479: Fixing instabilities in macOS URL handling
    • AIR-6486: Fixing crash in Android permission manager from CameraRoll storage request
    • github-1830: Updating macho signing to allow replacing of a smaller signature at the end of a file
    • github-2293: Add caching of method closures to reduce memory churn
    • github-2339: Fixing StageWebView location handling across stages and screens
    • github-2385: Ensuring Worker isolates load ANE swf definitions at start-up
    • github-2409: Updating build settings for tvOS runtime to avoid missing symbols
    • github-2481: Fixing performance slowdown when Direct3D window is minimised
    • github-2493: Fixing crash on Linux when exiting fullscreen
    • github-2496: Ensuring any folder structures are created for mac bundle outputs
    • github-2508: Ensuring that dpi-changed resize events are handled during moveWindow
    - + \ No newline at end of file diff --git a/news/2023/03/22/air-release.html b/news/2023/03/22/air-release.html index 334644e66..5e332f78f 100644 --- a/news/2023/03/22/air-release.html +++ b/news/2023/03/22/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.2.2

    · One min read
    Michael

    AIR SDK 50.2.2.2 has been released by Harman.

    Bug fixes

    • AIR-6494/github-2531: IPA files need to have correct Xcode/platform tool version codes
    • github-2529: Fixing code-signing of frameworks - omitting pkginfo from files2 section
    - + \ No newline at end of file diff --git a/news/2023/04/03/air-release.html b/news/2023/04/03/air-release.html index 2f9d51592..c0508ce39 100644 --- a/news/2023/04/03/air-release.html +++ b/news/2023/04/03/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.2.3

    · One min read
    Michael

    AIR SDK 50.2.2.3 has been released by Harman.

    Bug fixes

    • AIR-6525: Generating stub files for swift libraries
    • AIR-6526: Ensuring ADT does not generate bitcode (for tvOS)
    • github-1984: Removing Linux H.264 video support whilst issues are resolved
    • github-2326: Workaround for Android ANE functions to run in UI thread
    • github-2409: Removing tvOS invalid reference
    • github-2486: Ensuring only one maximize event is sent on macOS
    • github-2517: Check for intent handling before requesting SAF file permissions
    • github-2532: Fixing argumenterror thrown when closing a window after StageWebView.dispose() call
    • github-2533: Attempting to resolve Android content files and launch in default app; Updating Android file handling functions to use Java to fix permission issues; Correcting File.resolvePath() for Android content URLs
    • github-2547: Ensure StateChange Events are sent for maximise events on Linux even if the window has already been resized.
    - + \ No newline at end of file diff --git a/news/2023/04/14/air-release.html b/news/2023/04/14/air-release.html index f7fd00399..23d27b321 100644 --- a/news/2023/04/14/air-release.html +++ b/news/2023/04/14/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.2.4

    · One min read
    Michael

    AIR SDK 50.2.2.4 has been released by Harman.

    Bug fixes

    • AIR-6568: Fix permission handling for MANAGE_EXTERNAL_STORAGE
    • github-2559: Fixing issues with content URIs and permissions on Android
    • github-2568: Ensuring Android JNI file util classes can be loaded
    - + \ No newline at end of file diff --git a/news/2023/04/29/air-release.html b/news/2023/04/29/air-release.html index a5facc775..a41633a84 100644 --- a/news/2023/04/29/air-release.html +++ b/news/2023/04/29/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.2.5

    · One min read
    Michael

    AIR SDK 50.2.2.5 has been released by Harman.

    Bug Fixes

    • AIR-6560: Ensuring auto-orientation updates from AS3 are recognised in iOS16
    • github-2409: Removing another tvOS invalid reference
    • github-2551: Ensuring cyrillic text works in StageWebView.loadString()
    • github-2576: Protecting against a crash in registering ANEs
    • github-2577: Avoiding the display of UIAlertController in the main thread
    • github-2591: Fixing crash when saving a file asynchronously
    • github-2599: Fixing AIR not resuming after proximity sensing on iOS
    - + \ No newline at end of file diff --git a/news/2023/05/24/air-release.html b/news/2023/05/24/air-release.html index 04aaa52af..e2495c97f 100644 --- a/news/2023/05/24/air-release.html +++ b/news/2023/05/24/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.2.6

    · One min read
    Michael

    AIR SDK 50.2.2.6 has been released by Harman.

    Bug Fixes

    • AIR-6609: AIR Android ANRs caused by surface nativeIsXXX calls blocking
    • AIR-6626: AIR Android JNI stability improvements for runtime in background thread
    • github-360: Eliminating duplication on the command line when calling LD64
    • github-1871: Ensuring Android AIR file utils have API-level conditional access
    • github-1871: Adjusting Android openWithDefaultApplication to not need query-package permissions
    • github-2326: Updating Android WebView creation to work in a background thread
    • github-2385: Ensuring Worker start-up continues if an ANE loading fails due to permissions
    • github-2571: Fixing crash-on-exit due to use of permission manager
    • github-2612: Adding support for provisioning profile for macOS app bundle packaging
    • github-2618: Fixing asynchronous XML signature verification
    • github-2620: Ensuring Android secure socket returns the certificate status
    • github-2657: Adding Android lint options to not abort on error
    - + \ No newline at end of file diff --git a/news/2023/06/30/air-release.html b/news/2023/06/30/air-release.html index 9777262fe..f3b56127b 100644 --- a/news/2023/06/30/air-release.html +++ b/news/2023/06/30/air-release.html @@ -16,14 +16,14 @@ - +

    Release 50.2.3.1

    · 2 min read
    Michael

    AIR SDK 50.2.3.1 has been released by Harman.

    Features

    • AIR-6564: AIR Media - basic iOS sound output implementation
    • github-1453: Adding certificateError event for secure HTTP/socket connections

    Bug Fixes

    • AIR-4357: Removing deferred framebuffer clears for Android runtime in background thread
    • github-1824: Ensuring AIR apps can run from the root folder of a Windows drive
    • github-1856: Fixing URL session closure on macOS for cancelled connections
    • github-1871: Further updates to support File.openWithDefaultApplication on Android
    • github-2409: Fixing tvOS stub generation and reverting symbol removals
    • github-2535: Don't Activate on _NET_WM_STATE event if the window is being hidden
    • github-2603: Ensuring Android file chooser ignores non-mime type filters
    • github-2615: Updating Android StageText to work in a background thread
    • github-2655: Fixing the iOS certificate security alert message by moving it out from async thread
    • github-2660: Ensuring Android platformsdk is picked up properly on cmdline
    • github-2665: Removing memory leakage in Worker when sending strings over MessageChannel
    • github-2666: Ensuring android CameraUI provider is properly named with air prefix
    • github-2667: Fixing JNI problems with Android TimeZone.availableTimeZoneNames
    • github-2670: Ensuring AIR on Android shuts down appropriately on exit() call
    • github-2671: Preventing Android JNI-detach crash
    • github-2684: Ensuring command-line platformsdk has priority in ADT
    • github-2694: Excluding invalid libc++.so files from Gradle builds

    Note re github-2409 (Fixing tvOS stub generation) - the stub-tvos folder update didn't work in this release, so this error is actually still present; there is a patch library under the github issue entry to resolve it.

    - + \ No newline at end of file diff --git a/news/2023/07/11/air-release.html b/news/2023/07/11/air-release.html index 10531e90d..b28282d79 100644 --- a/news/2023/07/11/air-release.html +++ b/news/2023/07/11/air-release.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/news/2023/08/10/air-release.html b/news/2023/08/10/air-release.html index 48eea1cec..ab830cc7f 100644 --- a/news/2023/08/10/air-release.html +++ b/news/2023/08/10/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.3.3

    · One min read
    Michael

    AIR SDK 50.2.3.3 has been released by Harman.

    Bug Fixes

    • AIR-6707: Adding support for socket broadcast using DatagramSocket send to 255.255.255.255
    • AIR-6721: Ensuring videos with 4-channel audio still play (with silence)
    • github-2238: Ensuring the Windows splash screen doesn't stay topmost when debugging
    • github-2409: Updating tvOS stub generation for SDK v16.4
    • github-2667: Optimizing JNI and ensuring clean-up for Android TimeZone support
    • github-2726: Updating AIR runtime installer to use WebView2 on Windows
    • github-2733: Fixing network connection reuse for iOS apps
    • github-2758: Updating libSwiftCompat.a to include the necessary definitions from libswiftCompatibility56.a
    - + \ No newline at end of file diff --git a/news/2023/08/19/air-release.html b/news/2023/08/19/air-release.html index 9031ca005..7bd860bd0 100644 --- a/news/2023/08/19/air-release.html +++ b/news/2023/08/19/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.3.4

    · One min read
    Michael

    AIR SDK 50.2.3.4 has been released by Harman.

    Bug Fixes

    • github-2533: Ensuring Android content URIs can be set as File.nativePath and File.url values
    • github-2614: Ensuring ANEs have the native 'dispose' method called when Workers are present
    • github-2770: Ensuring Multitouch.maxTouchPoints returns an appropriate value on Android
    • github-2771: FileStream.openAsync wasn't completing when using Android content URIs
    - + \ No newline at end of file diff --git a/news/2023/09/08/air-release.html b/news/2023/09/08/air-release.html index 344fdce6f..d8bada7ec 100644 --- a/news/2023/09/08/air-release.html +++ b/news/2023/09/08/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.3.5

    · One min read
    Michael

    AIR SDK 50.2.3.5 has been released by Harman.

    Bug Fixes

    • AIR-6707: Setting UDP broadcast settings for ..*.255 addresses
    • AIR-6765: Fixing crash in embedded font rendering cache
    • AIR-6766: ADT rejects iOS ANEs that don't contain universal binaries
    • github-88: Fixing green strip at the bottom of some Windows H.264 videos
    • github-360: ADT packaging IPA files - reducing long ld64 command lines
    • github-1607: Correcting Android Context usage of visual contexts when needed
    • github-2754: Updating JNI reference handling/clean-up for Android file access
    • github-2755: Updating descriptor XSD docs for missing icon sizes
    • github-2771: Ensuring Android content files can be opened/read asynchronously
    • github-2772: Ensuring AIR activate/deactivate events are sent on activity focus events
    • github-2773: Ensuring AIR Android soft keyboard behaviour matches OS
    • github-2777: Dispatch touch events on Android when requested, regardless of the device touchscreen feature flag
    • github-2801: Ensuring macOS KeychainStore certificates can be used without private keys
    - + \ No newline at end of file diff --git a/news/2023/09/26/community-discord.html b/news/2023/09/26/community-discord.html index b97947717..f7e99dfd5 100644 --- a/news/2023/09/26/community-discord.html +++ b/news/2023/09/26/community-discord.html @@ -16,13 +16,13 @@ - +

    Discord

    · One min read
    Michael

    A new discord server has been established and is becoming an active place for AIR developers from around the world to communicate in real time.

    Join the server, and show what your working on, get answers to your questions or just connect with the AIR community.

    Join airsdk.dev

    - + \ No newline at end of file diff --git a/news/2023/10/02/air-release.html b/news/2023/10/02/air-release.html index a29bfdad0..11ebf19fd 100644 --- a/news/2023/10/02/air-release.html +++ b/news/2023/10/02/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.3.6

    · One min read
    Michael

    AIR SDK 50.2.3.6 has been released by Harman.

    Bug Fixes

    • AIR-6777: ADT must not output the password for the signing key
    • github-360: Fixing packaging of ANE frameworks within subfolders
    • github-2768: Adjusting ADT iOS linker command-line to avoid crash
    • github-2768: Updating swift compatibility library to include x86_64 symbols
    • github-2772: Sending activate/deactivate events based on Android window focus
    • github-2801: Updating certificate/key handling to remove mac keychain signing failure
    • github-2838: Removing sdk_version and using platform_version for iPhoneOS SDK
    - + \ No newline at end of file diff --git a/news/2023/11/03/air-release.html b/news/2023/11/03/air-release.html index 5c083980f..6e7843677 100644 --- a/news/2023/11/03/air-release.html +++ b/news/2023/11/03/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.3.7

    · One min read
    Michael

    AIR SDK 50.2.3.7 has been released by Harman.

    This release is primarily intended to revert the problems we'd caused when trying to fix #2772 - there are a few other Android-related changes brought into it too. But we're almost finished preparing a "50.2.4" version that will include the new iPhoneOS/macOS SDKs and Xcode version, and will be something people can then use in production whilst we push out the 51.0 branch initially as a beta.

    Bug Fixes

    • github-2835: Preventing crash in Android VideoTexture dispose
    • github-2837: Fixing calls to OpenGL for texture set-up to avoid later failure in VertexBuffer
    • github-2864: Ensuring Android screen state is known to avoid black-screen
    • github-2873: Building APK target can use 'all' arch plus the config file to limit the included ABIs
    • github-2879: Reverting github-2772 regarding activate/deactivate events on Android
    - + \ No newline at end of file diff --git a/news/2023/11/09/air-release.html b/news/2023/11/09/air-release.html index f141e6521..8b5402c94 100644 --- a/news/2023/11/09/air-release.html +++ b/news/2023/11/09/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.3.8

    · One min read
    Michael

    AIR SDK 50.2.3.8 has been released by Harman.

    Bug Fixes

    • github-1443: Ensuring AIR Ant flexTasks.jar file recognises ANEs
    • github-2885: Updating IPA linker (LLVM based) to mimic Apple’s LD64 behaviour
    • github-2873: Ensuring Android multi-abi APKs don’t include unnecessary ANE libraries
    - + \ No newline at end of file diff --git a/news/2023/11/24/air-release.html b/news/2023/11/24/air-release.html index bdc23b06c..15d1391fb 100644 --- a/news/2023/11/24/air-release.html +++ b/news/2023/11/24/air-release.html @@ -16,14 +16,14 @@ - +

    Release 50.2.4.1

    · One min read
    Michael

    AIR SDK 50.2.4.1 has been released by Harman.

    Features

    AIR-6707: The earlier update to switch to a 'broadcast' mechanism for any address ending in .255 is now rolled out across all platform binaries. AIR-6809: Building on Sonoma/Xcode 15 for iPhoneOS/tvOS/macOS

    • github-2885: Picking up iOS/tvOS platform SDK version from platformsdk path
    • github-2911: Switching IPA linker on macOS to use ld-classic

    Bug fixes

    • github-1194: Adjusting Android lifecycle handlers to avoid black screen in Home/Launcher scenario
    • github-2810: Ensuring AIR copes with UIBackgroundModes being a string as well as an array
    • github-2869: Allowing Stage3D contexts to be created in Android gpu rendering mode
    • github-2888: Moving Android planeKickCascade function into UI thread to avoid exception
    • github-2893: Ensuring BitmapData.decode() works for transparency in PNGs
    • github-2923: Updating LLVM LD64.exe to remove MSVC runtime dependencies
    - + \ No newline at end of file diff --git a/news/2023/12/20/air-release.html b/news/2023/12/20/air-release.html index 07b633de9..79c467873 100644 --- a/news/2023/12/20/air-release.html +++ b/news/2023/12/20/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.4.2

    · One min read
    Michael

    AIR SDK 50.2.4.2 has been released by Harman.

    Bug fixes

    • AIR-4740: Remove use of sun.security classes for code signing - replace with BouncyCastle
    • github-1003: Ensuring Android surface restore copes with different event ordering
    • github-1199: Adjusting VideoViewAIR to prevent UnsatisfiedLinkError when calling JNI method too early
    • github-2409: Adding missing media symbols into AppleTV runtime libraries
    • github-2615: Updating Android stagetext/stagewebview functionality to cope better in background threads
    • github-2642: Adjusting thread handling for iOS audio to avoid glitching
    • github-2863: Ensuring ios webviews are inspectable for debug builds
    • github-2906: Allowing non-latin characters in files for Gradle-based builds (and using gradle for apk-signing)
    • github-2924: Fixing Android VideoTexture flicker at start of video playback
    • github-2950: Ensuring Android ANE .so libraries are packaged in AAB bundles
    - + \ No newline at end of file diff --git a/news/2024/01/25/air-release.html b/news/2024/01/25/air-release.html index 4c1ca76e4..2f5e72dab 100644 --- a/news/2024/01/25/air-release.html +++ b/news/2024/01/25/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.4.3

    · One min read
    Michael

    AIR SDK 50.2.4.3 has been released by Harman.

    Bug fixes

    • AIR-6479: Thread protection around credential handling in macOS URL stream
    • AIR-6931: Ensure macOS apps installed via AIR shared runtime are always x64
    • AIR-6964: AIR Android manifest additional features should override any from the template
    • github-2010: Re-implementing fix to allow Rectangle ..ToOutput methods to use 'this' as output
    • github-2625: Updating RTMPS code to accept self-signed certificates
    • github-2978: Ensuring APK files are code-signed with a release configuration
    • github-2988: Ensuring URL schemes conforming to RFC3986 are accepted in AIR
    • github-2989: Correcting DER-encoding of macho entitlements for IPA code signature
    • github-2992: Ensuring AABs built using Animate have all the native libraries included
    • github-2993: Adding thread-safety to new audio code to avoid segfault
    - + \ No newline at end of file diff --git a/news/2024/02/12/air-release.html b/news/2024/02/12/air-release.html index 4105daccd..f91933349 100644 --- a/news/2024/02/12/air-release.html +++ b/news/2024/02/12/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.4.4

    · One min read
    Michael

    AIR SDK 50.2.4.4 has been released by Harman.

    Bug fixes

    • AIR-6979: AIR JPEG decoding to take account of macOS display colour profile
    • github-2972: Ensuring correct toplevels are used for user-specified ANEs to correct delayed-loading
    • github-3000: Ensuring Android StageText elements can be re-added to stage
    • github-3034: iPhone WebView inspectable flag to response to test builds as well as debug builds
    • github-3034: Preventing iPhone WebView crash in debug builds pre-iOS16.4
    • github-3043: Updating handling of content URIs and file paths in Android
    • github-3046: Fixing null reference error in ADT on Android manifest 'uses-feature' entry
    • github-3058: Enabling native AAB signing with Java providerName argument
    - + \ No newline at end of file diff --git a/news/2024/02/26/air-release.html b/news/2024/02/26/air-release.html index 52c54ac3b..81c207b59 100644 --- a/news/2024/02/26/air-release.html +++ b/news/2024/02/26/air-release.html @@ -16,13 +16,13 @@ - +

    Release 51.0.0.2

    · 2 min read
    Michael

    AIR SDK 51.0.0.2 has been released by Harman.

    Discussion on the new features can be found here.

    New features

    • AIR-309: Adding AS3 API for allowing AS3 to handle HTTPS certificate errors
    • AIR-5963: Add ANE capabilities to render a Sprite using a MediaBuffer - initial support via BitmapData
    • AIR-6012: AS3 API for StageWebView constructor changes
    • AIR-6051, AIR-6053, AIR-6054: AIR zip support: Basic reading in of zip files to get entry details
    • AIR-6063: Updated OpenSSL-based ELS key storage
    • AIR-6279: AIR runtime support for float (removing float4 code)
    • AIR-6288: AIR AS3 API for encrypting and decrypting a byte array
    • AIR-6425: AS3 API for Socket.tcpNoDelay setting
    • AIR-6579: AS3 String startsWith and endsWith
    • AIR-6580: Add 'includes' and 'isEmpty' to Array and Vector classes
    • AIR-6581: Adding ByteArray conversions to/from base16 and base64
    • AIR-6707: Adding DatagramSocket.broadcast() method for UDP broadcasts
    • AIR-6752: AIR Digest to include SHA-512 support
    • AIR-6991: ByteArray write random bytes
    • AIR-6992: Update SWF tag encryption to support custom keys
    • AIR-7018: ADT move all iOS linker inputs into a single folder structure
    • github-216: Support for WebSocket servers
    • github-1242: Allow images in HTML text fields via 'allowedDomains' property
    • github-1858: Adding horizontal mouse wheel support
    • github-1936: Allow windows.UseWebView2 'exclusive' mode to prevent IE/WebBrowser usage
    • github-2625: Adding NetworkInfo.disableNetworkChanges flag to prevent socket disconnects
    • github-2742: Adding Function.declaration property to find details of a function
    • github-3060: AS3 StageTextContentType class for StageText support for OTP SMS entry

    Bug fixes

    • AIR-6840: FileReference.upload() to cope with binary file responses (Windows)
    • github-2318: Removing StageVideo viewport coordinate limits for AIR 51 apps
    • github-3024: Removing StageWebView viewport coordination limits for AIR 51 apps
    • github-3062: Updating Win32 camera handling to include better fallbacks where direct connect fails
    - + \ No newline at end of file diff --git a/news/2024/03/22/air-release.html b/news/2024/03/22/air-release.html index fc1444b11..dc561e8c8 100644 --- a/news/2024/03/22/air-release.html +++ b/news/2024/03/22/air-release.html @@ -16,13 +16,13 @@ - +

    Release 51.0.0.4

    · 2 min read
    Michael

    AIR SDK 51.0.0.4 has been released by Harman.

    New features

    • AIR-6054: Adding support for file modification times for zip entries
    • AIR-6055: AIR Zip support for creation and saving of zip archives
    • AIR-7046: Adding ZipArchive.load/saveFromByteArray implementations
    • AIR-6866: Enable NativeWindow class for Android
    • AIR-7018: ADT add IPALinkFolder build configuration and linker script for macOS remote build
    • AIR-7044: AIR TextLine embedded fonts to support COLR tables
    • AIR-7045: AIR TextLine embedded fonts to support CBDT tables
    • github-149: Implementing FontDescription.createFromByteArray to load an OpenType/TrueType font for FTE
    • github-216: WebSocket client connection and handshaking
    • github-pad20: Updating NetStream.play() to accept IDataInput argument

    Bug fixes

    • AIR-6743: Update icon list in descriptor XSD
    • AIR-7031: AIRSDK Android dependency lists
    • AIR-7035: String.fromCharCode() should support all unicode code points
    • AIR-7036: Adding platform-specific fallback fonts for Emoji character ranges in Flash Text Engine
    • AIR-7059: Fixing AIR crash on iOS around network authentication (see AIR-6479)
    • github-1917: Correcting Linux bundle creation to support ARM64 ANEs
    • github-2807: Removing ANRs caused by access of nativeGetTextBoxBounds from wrong thread
    • github-2871: Switching to a 64-bit version of the LLVM ld64 linker
    • github-3098: Allowing a/v data access for NetStream in data generation mode
    • github-3102: Preventing crash when using Workers in a beta/prerelease build
    • github-3106: MacOS EncryptedLocalStore updating key storage mechanisms
    - + \ No newline at end of file diff --git a/news/2024/04/01/air-release.html b/news/2024/04/01/air-release.html index 098871b1e..ce79d274c 100644 --- a/news/2024/04/01/air-release.html +++ b/news/2024/04/01/air-release.html @@ -16,13 +16,13 @@ - +

    Release 50.2.4.5

    · One min read
    Michael

    AIR SDK 50.2.4.5 has been released by Harman.

    Release 50.2.4.5 includes a number of bug fixes that had been provided also within the 51.0 pre- release branch but were also considered useful to release into production at an earlier date, across various different platforms.

    Bug fixes

    • AIR-7028: AIR Android file permission callbacks not always called
    • AIR-7029: AIR Android applicationDirectory files may not be accessible
    • AIR-7035: String.fromCharCode() should support all unicode code points
    • AIR-7059: Fixing AIR crash on iOS around network authentication (see AIR-6479)
    • github-2610: Ensuring Win32 timezone retrieval works for default tz when not dynamic
    • github-2807: Removing ANRs caused by access of nativeGetTextBoxBounds from wrong thread
    • github-2903: Fixing instability when breaking into a debugger on uncaught error
    • github-3049: Eliminating instability in GC following socket thread querying the app descriptor
    • github-3062: Updating Win32 camera handling to include better fallbacks where direct connect fails
    • github-3087: Correcting invalid scheme detection to prevent false-flagging of relative paths
    • github-3098: Allowing a/v data access for NetStream in data generation mode
    - + \ No newline at end of file diff --git a/news/2024/04/22/air-release.html b/news/2024/04/22/air-release.html index d9902b6ad..443225f0d 100644 --- a/news/2024/04/22/air-release.html +++ b/news/2024/04/22/air-release.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

    Release 50.2.5.1

    · One min read
    Michael

    AIR SDK 50.2.5.1 has been released by Harman.

    Release 50.2.5.1 of the AIR SDK is a feature update in order to provide some of the additional capabilities required to support Privacy Manifests for iPhone/iPad applications. There are some other minor functional changes plus recent bug fixes that have been implemented.

    Features

    • AIR-6979: Removing colour-profile adjustments from the loading point of a JPEG
    • github-3116: Adding generation of AIR privacy manifest from defaults merged with ANEs
    • github-3172: Mac bundle creation to generate CFBundleDisplayName tag
    • github-3173: Mac bundle creation to generate CFBundleSupportedPlatforms tag

    Bug fixes

    • github-2976: Adding 'property' as a supported Android Manifest tag
    • github-3126: Fixing issue with Loader.loadBytes() throwing errors in Workers
    • github-3160: Ensuring Linux bundles can be created even if the rpm/deb identification checks fail
    • github-3171: Allow Android manifestAdditions to override activity's screenOrientation attribute
    - + \ No newline at end of file diff --git a/news/archive.html b/news/archive.html index 0b15eec7f..ad584ed94 100644 --- a/news/archive.html +++ b/news/archive.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/news/page/2.html b/news/page/2.html index ee6923031..582811f02 100644 --- a/news/page/2.html +++ b/news/page/2.html @@ -16,14 +16,14 @@ - +

    · One min read
    Michael

    AIR SDK 50.2.3.6 has been released by Harman.

    Bug Fixes

    • AIR-6777: ADT must not output the password for the signing key
    • github-360: Fixing packaging of ANE frameworks within subfolders
    • github-2768: Adjusting ADT iOS linker command-line to avoid crash
    • github-2768: Updating swift compatibility library to include x86_64 symbols
    • github-2772: Sending activate/deactivate events based on Android window focus
    • github-2801: Updating certificate/key handling to remove mac keychain signing failure
    • github-2838: Removing sdk_version and using platform_version for iPhoneOS SDK

    · One min read
    Michael

    A new discord server has been established and is becoming an active place for AIR developers from around the world to communicate in real time.

    Join the server, and show what your working on, get answers to your questions or just connect with the AIR community.

    Join airsdk.dev

    · One min read
    Michael

    AIR SDK 50.2.3.5 has been released by Harman.

    Bug Fixes

    • AIR-6707: Setting UDP broadcast settings for ..*.255 addresses
    • AIR-6765: Fixing crash in embedded font rendering cache
    • AIR-6766: ADT rejects iOS ANEs that don't contain universal binaries
    • github-88: Fixing green strip at the bottom of some Windows H.264 videos
    • github-360: ADT packaging IPA files - reducing long ld64 command lines
    • github-1607: Correcting Android Context usage of visual contexts when needed
    • github-2754: Updating JNI reference handling/clean-up for Android file access
    • github-2755: Updating descriptor XSD docs for missing icon sizes
    • github-2771: Ensuring Android content files can be opened/read asynchronously
    • github-2772: Ensuring AIR activate/deactivate events are sent on activity focus events
    • github-2773: Ensuring AIR Android soft keyboard behaviour matches OS
    • github-2777: Dispatch touch events on Android when requested, regardless of the device touchscreen feature flag
    • github-2801: Ensuring macOS KeychainStore certificates can be used without private keys

    · One min read
    Michael

    AIR SDK 50.2.3.4 has been released by Harman.

    Bug Fixes

    • github-2533: Ensuring Android content URIs can be set as File.nativePath and File.url values
    • github-2614: Ensuring ANEs have the native 'dispose' method called when Workers are present
    • github-2770: Ensuring Multitouch.maxTouchPoints returns an appropriate value on Android
    • github-2771: FileStream.openAsync wasn't completing when using Android content URIs

    · One min read
    Michael

    AIR SDK 50.2.3.3 has been released by Harman.

    Bug Fixes

    • AIR-6707: Adding support for socket broadcast using DatagramSocket send to 255.255.255.255
    • AIR-6721: Ensuring videos with 4-channel audio still play (with silence)
    • github-2238: Ensuring the Windows splash screen doesn't stay topmost when debugging
    • github-2409: Updating tvOS stub generation for SDK v16.4
    • github-2667: Optimizing JNI and ensuring clean-up for Android TimeZone support
    • github-2726: Updating AIR runtime installer to use WebView2 on Windows
    • github-2733: Fixing network connection reuse for iOS apps
    • github-2758: Updating libSwiftCompat.a to include the necessary definitions from libswiftCompatibility56.a

    · 2 min read
    Michael

    AIR SDK 50.2.3.1 has been released by Harman.

    Features

    • AIR-6564: AIR Media - basic iOS sound output implementation
    • github-1453: Adding certificateError event for secure HTTP/socket connections

    Bug Fixes

    • AIR-4357: Removing deferred framebuffer clears for Android runtime in background thread
    • github-1824: Ensuring AIR apps can run from the root folder of a Windows drive
    • github-1856: Fixing URL session closure on macOS for cancelled connections
    • github-1871: Further updates to support File.openWithDefaultApplication on Android
    • github-2409: Fixing tvOS stub generation and reverting symbol removals
    • github-2535: Don't Activate on _NET_WM_STATE event if the window is being hidden
    • github-2603: Ensuring Android file chooser ignores non-mime type filters
    • github-2615: Updating Android StageText to work in a background thread
    • github-2655: Fixing the iOS certificate security alert message by moving it out from async thread
    • github-2660: Ensuring Android platformsdk is picked up properly on cmdline
    • github-2665: Removing memory leakage in Worker when sending strings over MessageChannel
    • github-2666: Ensuring android CameraUI provider is properly named with air prefix
    • github-2667: Fixing JNI problems with Android TimeZone.availableTimeZoneNames
    • github-2670: Ensuring AIR on Android shuts down appropriately on exit() call
    • github-2671: Preventing Android JNI-detach crash
    • github-2684: Ensuring command-line platformsdk has priority in ADT
    • github-2694: Excluding invalid libc++.so files from Gradle builds

    Note re github-2409 (Fixing tvOS stub generation) - the stub-tvos folder update didn't work in this release, so this error is actually still present; there is a patch library under the github issue entry to resolve it.

    · One min read
    Michael

    AIR SDK 50.2.2.6 has been released by Harman.

    Bug Fixes

    • AIR-6609: AIR Android ANRs caused by surface nativeIsXXX calls blocking
    • AIR-6626: AIR Android JNI stability improvements for runtime in background thread
    • github-360: Eliminating duplication on the command line when calling LD64
    • github-1871: Ensuring Android AIR file utils have API-level conditional access
    • github-1871: Adjusting Android openWithDefaultApplication to not need query-package permissions
    • github-2326: Updating Android WebView creation to work in a background thread
    • github-2385: Ensuring Worker start-up continues if an ANE loading fails due to permissions
    • github-2571: Fixing crash-on-exit due to use of permission manager
    • github-2612: Adding support for provisioning profile for macOS app bundle packaging
    • github-2618: Fixing asynchronous XML signature verification
    • github-2620: Ensuring Android secure socket returns the certificate status
    • github-2657: Adding Android lint options to not abort on error

    · One min read
    Michael

    AIR SDK 50.2.2.5 has been released by Harman.

    Bug Fixes

    • AIR-6560: Ensuring auto-orientation updates from AS3 are recognised in iOS16
    • github-2409: Removing another tvOS invalid reference
    • github-2551: Ensuring cyrillic text works in StageWebView.loadString()
    • github-2576: Protecting against a crash in registering ANEs
    • github-2577: Avoiding the display of UIAlertController in the main thread
    • github-2591: Fixing crash when saving a file asynchronously
    • github-2599: Fixing AIR not resuming after proximity sensing on iOS
    - + \ No newline at end of file diff --git a/news/page/3.html b/news/page/3.html index ae11295e2..a567f0168 100644 --- a/news/page/3.html +++ b/news/page/3.html @@ -16,7 +16,7 @@ - + @@ -43,7 +43,7 @@ github-1430: ADT failing to launch an Android application when using new build mechanism
    github-1431: Better error handling for invalid license files
    AIR-5449: AIR Android packaging using ADT should work with compatible major/minor AIR releases

    - + \ No newline at end of file diff --git a/news/page/4.html b/news/page/4.html index 0d5227134..9c9e62a7f 100644 --- a/news/page/4.html +++ b/news/page/4.html @@ -16,7 +16,7 @@ - + @@ -44,7 +44,7 @@ github-apm40: Fixing crash when using command-line tools with nativeprocess
    AIR-4740: Remove use of sun internal security classes for APK/AAB signing
    AIR-5427: AIR Android security update for https certificate errors

    · 2 min read
    Michael

    Due to a lot of requests over the previous months we have added several new sections to promote developers and better direct people to the current resources available for AIR.

    We also have started creating a detailed "Getting Started" guide to walk new users through the installation of the AIR SDK and setup of a development environment.

    The first of these is the Community section. This section is aimed to direct developers to the resources and community channels that are available and active on the net.

    We have initially added three of what we believe are the most important resources currently:

    And we will be adding the ever present stackoverflow reference as well. If you believe anything else should be added, please let us know!

    The second is the Showcase section. The showcase is designed to be a place for AIR developers to not only promote their work but promote the AIR platform and show what is possible using the AIR SDK. You can add your own application through a pull request to the repository (or you can just email me your details).

    If you have any feedback on the tutorials or guides we are writing (or if you would like to contribute) please reach out!

    · One min read
    Michael

    Welcome to the new AIR SDK developer portal.

    This site is aimed to become the central location for all things AIR.

    - + \ No newline at end of file diff --git a/news/tags.html b/news/tags.html index 5f0a4c263..a74593963 100644 --- a/news/tags.html +++ b/news/tags.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/news/tags/airsdk.html b/news/tags/airsdk.html index ef3c6b9fc..98b666744 100644 --- a/news/tags/airsdk.html +++ b/news/tags/airsdk.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ capabilities required to support Privacy Manifests for iPhone/iPad applications. There are some other minor functional changes plus recent bug fixes that have been implemented.

    Features

    • AIR-6979: Removing colour-profile adjustments from the loading point of a JPEG
    • github-3116: Adding generation of AIR privacy manifest from defaults merged with ANEs
    • github-3172: Mac bundle creation to generate CFBundleDisplayName tag
    • github-3173: Mac bundle creation to generate CFBundleSupportedPlatforms tag

    Bug fixes

    • github-2976: Adding 'property' as a supported Android Manifest tag
    • github-3126: Fixing issue with Loader.loadBytes() throwing errors in Workers
    • github-3160: Ensuring Linux bundles can be created even if the rpm/deb identification checks fail
    • github-3171: Allow Android manifestAdditions to override activity's screenOrientation attribute

    · One min read
    Michael

    AIR SDK 50.2.4.5 has been released by Harman.

    Release 50.2.4.5 includes a number of bug fixes that had been provided also within the 51.0 pre- release branch but were also considered useful to release into production at an earlier date, across various different platforms.

    Bug fixes

    • AIR-7028: AIR Android file permission callbacks not always called
    • AIR-7029: AIR Android applicationDirectory files may not be accessible
    • AIR-7035: String.fromCharCode() should support all unicode code points
    • AIR-7059: Fixing AIR crash on iOS around network authentication (see AIR-6479)
    • github-2610: Ensuring Win32 timezone retrieval works for default tz when not dynamic
    • github-2807: Removing ANRs caused by access of nativeGetTextBoxBounds from wrong thread
    • github-2903: Fixing instability when breaking into a debugger on uncaught error
    • github-3049: Eliminating instability in GC following socket thread querying the app descriptor
    • github-3062: Updating Win32 camera handling to include better fallbacks where direct connect fails
    • github-3087: Correcting invalid scheme detection to prevent false-flagging of relative paths
    • github-3098: Allowing a/v data access for NetStream in data generation mode

    · 2 min read
    Michael

    AIR SDK 51.0.0.4 has been released by Harman.

    New features

    • AIR-6054: Adding support for file modification times for zip entries
    • AIR-6055: AIR Zip support for creation and saving of zip archives
    • AIR-7046: Adding ZipArchive.load/saveFromByteArray implementations
    • AIR-6866: Enable NativeWindow class for Android
    • AIR-7018: ADT add IPALinkFolder build configuration and linker script for macOS remote build
    • AIR-7044: AIR TextLine embedded fonts to support COLR tables
    • AIR-7045: AIR TextLine embedded fonts to support CBDT tables
    • github-149: Implementing FontDescription.createFromByteArray to load an OpenType/TrueType font for FTE
    • github-216: WebSocket client connection and handshaking
    • github-pad20: Updating NetStream.play() to accept IDataInput argument

    Bug fixes

    • AIR-6743: Update icon list in descriptor XSD
    • AIR-7031: AIRSDK Android dependency lists
    • AIR-7035: String.fromCharCode() should support all unicode code points
    • AIR-7036: Adding platform-specific fallback fonts for Emoji character ranges in Flash Text Engine
    • AIR-7059: Fixing AIR crash on iOS around network authentication (see AIR-6479)
    • github-1917: Correcting Linux bundle creation to support ARM64 ANEs
    • github-2807: Removing ANRs caused by access of nativeGetTextBoxBounds from wrong thread
    • github-2871: Switching to a 64-bit version of the LLVM ld64 linker
    • github-3098: Allowing a/v data access for NetStream in data generation mode
    • github-3102: Preventing crash when using Workers in a beta/prerelease build
    • github-3106: MacOS EncryptedLocalStore updating key storage mechanisms

    · 2 min read
    Michael

    AIR SDK 51.0.0.2 has been released by Harman.

    Discussion on the new features can be found here.

    New features

    • AIR-309: Adding AS3 API for allowing AS3 to handle HTTPS certificate errors
    • AIR-5963: Add ANE capabilities to render a Sprite using a MediaBuffer - initial support via BitmapData
    • AIR-6012: AS3 API for StageWebView constructor changes
    • AIR-6051, AIR-6053, AIR-6054: AIR zip support: Basic reading in of zip files to get entry details
    • AIR-6063: Updated OpenSSL-based ELS key storage
    • AIR-6279: AIR runtime support for float (removing float4 code)
    • AIR-6288: AIR AS3 API for encrypting and decrypting a byte array
    • AIR-6425: AS3 API for Socket.tcpNoDelay setting
    • AIR-6579: AS3 String startsWith and endsWith
    • AIR-6580: Add 'includes' and 'isEmpty' to Array and Vector classes
    • AIR-6581: Adding ByteArray conversions to/from base16 and base64
    • AIR-6707: Adding DatagramSocket.broadcast() method for UDP broadcasts
    • AIR-6752: AIR Digest to include SHA-512 support
    • AIR-6991: ByteArray write random bytes
    • AIR-6992: Update SWF tag encryption to support custom keys
    • AIR-7018: ADT move all iOS linker inputs into a single folder structure
    • github-216: Support for WebSocket servers
    • github-1242: Allow images in HTML text fields via 'allowedDomains' property
    • github-1858: Adding horizontal mouse wheel support
    • github-1936: Allow windows.UseWebView2 'exclusive' mode to prevent IE/WebBrowser usage
    • github-2625: Adding NetworkInfo.disableNetworkChanges flag to prevent socket disconnects
    • github-2742: Adding Function.declaration property to find details of a function
    • github-3060: AS3 StageTextContentType class for StageText support for OTP SMS entry

    Bug fixes

    • AIR-6840: FileReference.upload() to cope with binary file responses (Windows)
    • github-2318: Removing StageVideo viewport coordinate limits for AIR 51 apps
    • github-3024: Removing StageWebView viewport coordination limits for AIR 51 apps
    • github-3062: Updating Win32 camera handling to include better fallbacks where direct connect fails

    · One min read
    Michael

    AIR SDK 50.2.4.4 has been released by Harman.

    Bug fixes

    • AIR-6979: AIR JPEG decoding to take account of macOS display colour profile
    • github-2972: Ensuring correct toplevels are used for user-specified ANEs to correct delayed-loading
    • github-3000: Ensuring Android StageText elements can be re-added to stage
    • github-3034: iPhone WebView inspectable flag to response to test builds as well as debug builds
    • github-3034: Preventing iPhone WebView crash in debug builds pre-iOS16.4
    • github-3043: Updating handling of content URIs and file paths in Android
    • github-3046: Fixing null reference error in ADT on Android manifest 'uses-feature' entry
    • github-3058: Enabling native AAB signing with Java providerName argument

    · One min read
    Michael

    AIR SDK 50.2.4.3 has been released by Harman.

    Bug fixes

    • AIR-6479: Thread protection around credential handling in macOS URL stream
    • AIR-6931: Ensure macOS apps installed via AIR shared runtime are always x64
    • AIR-6964: AIR Android manifest additional features should override any from the template
    • github-2010: Re-implementing fix to allow Rectangle ..ToOutput methods to use 'this' as output
    • github-2625: Updating RTMPS code to accept self-signed certificates
    • github-2978: Ensuring APK files are code-signed with a release configuration
    • github-2988: Ensuring URL schemes conforming to RFC3986 are accepted in AIR
    • github-2989: Correcting DER-encoding of macho entitlements for IPA code signature
    • github-2992: Ensuring AABs built using Animate have all the native libraries included
    • github-2993: Adding thread-safety to new audio code to avoid segfault

    · One min read
    Michael

    AIR SDK 50.2.4.2 has been released by Harman.

    Bug fixes

    • AIR-4740: Remove use of sun.security classes for code signing - replace with BouncyCastle
    • github-1003: Ensuring Android surface restore copes with different event ordering
    • github-1199: Adjusting VideoViewAIR to prevent UnsatisfiedLinkError when calling JNI method too early
    • github-2409: Adding missing media symbols into AppleTV runtime libraries
    • github-2615: Updating Android stagetext/stagewebview functionality to cope better in background threads
    • github-2642: Adjusting thread handling for iOS audio to avoid glitching
    • github-2863: Ensuring ios webviews are inspectable for debug builds
    • github-2906: Allowing non-latin characters in files for Gradle-based builds (and using gradle for apk-signing)
    • github-2924: Fixing Android VideoTexture flicker at start of video playback
    • github-2950: Ensuring Android ANE .so libraries are packaged in AAB bundles

    · One min read
    Michael

    AIR SDK 50.2.4.1 has been released by Harman.

    Features

    AIR-6707: The earlier update to switch to a 'broadcast' mechanism for any address ending in .255 is now rolled out across all platform binaries. AIR-6809: Building on Sonoma/Xcode 15 for iPhoneOS/tvOS/macOS

    • github-2885: Picking up iOS/tvOS platform SDK version from platformsdk path
    • github-2911: Switching IPA linker on macOS to use ld-classic

    Bug fixes

    • github-1194: Adjusting Android lifecycle handlers to avoid black screen in Home/Launcher scenario
    • github-2810: Ensuring AIR copes with UIBackgroundModes being a string as well as an array
    • github-2869: Allowing Stage3D contexts to be created in Android gpu rendering mode
    • github-2888: Moving Android planeKickCascade function into UI thread to avoid exception
    • github-2893: Ensuring BitmapData.decode() works for transparency in PNGs
    • github-2923: Updating LLVM LD64.exe to remove MSVC runtime dependencies

    · One min read
    Michael

    AIR SDK 50.2.3.7 has been released by Harman.

    This release is primarily intended to revert the problems we'd caused when trying to fix #2772 - there are a few other Android-related changes brought into it too. But we're almost finished preparing a "50.2.4" version that will include the new iPhoneOS/macOS SDKs and Xcode version, and will be something people can then use in production whilst we push out the 51.0 branch initially as a beta.

    Bug Fixes

    • github-2835: Preventing crash in Android VideoTexture dispose
    • github-2837: Fixing calls to OpenGL for texture set-up to avoid later failure in VertexBuffer
    • github-2864: Ensuring Android screen state is known to avoid black-screen
    • github-2873: Building APK target can use 'all' arch plus the config file to limit the included ABIs
    • github-2879: Reverting github-2772 regarding activate/deactivate events on Android
    - + \ No newline at end of file diff --git a/news/tags/airsdk/page/2.html b/news/tags/airsdk/page/2.html index 89d24ce32..7f0a30a70 100644 --- a/news/tags/airsdk/page/2.html +++ b/news/tags/airsdk/page/2.html @@ -16,14 +16,14 @@ - +

    32 posts tagged with "airsdk"

    View All Tags

    · One min read
    Michael

    AIR SDK 50.2.3.6 has been released by Harman.

    Bug Fixes

    • AIR-6777: ADT must not output the password for the signing key
    • github-360: Fixing packaging of ANE frameworks within subfolders
    • github-2768: Adjusting ADT iOS linker command-line to avoid crash
    • github-2768: Updating swift compatibility library to include x86_64 symbols
    • github-2772: Sending activate/deactivate events based on Android window focus
    • github-2801: Updating certificate/key handling to remove mac keychain signing failure
    • github-2838: Removing sdk_version and using platform_version for iPhoneOS SDK

    · One min read
    Michael

    AIR SDK 50.2.3.5 has been released by Harman.

    Bug Fixes

    • AIR-6707: Setting UDP broadcast settings for ..*.255 addresses
    • AIR-6765: Fixing crash in embedded font rendering cache
    • AIR-6766: ADT rejects iOS ANEs that don't contain universal binaries
    • github-88: Fixing green strip at the bottom of some Windows H.264 videos
    • github-360: ADT packaging IPA files - reducing long ld64 command lines
    • github-1607: Correcting Android Context usage of visual contexts when needed
    • github-2754: Updating JNI reference handling/clean-up for Android file access
    • github-2755: Updating descriptor XSD docs for missing icon sizes
    • github-2771: Ensuring Android content files can be opened/read asynchronously
    • github-2772: Ensuring AIR activate/deactivate events are sent on activity focus events
    • github-2773: Ensuring AIR Android soft keyboard behaviour matches OS
    • github-2777: Dispatch touch events on Android when requested, regardless of the device touchscreen feature flag
    • github-2801: Ensuring macOS KeychainStore certificates can be used without private keys

    · One min read
    Michael

    AIR SDK 50.2.3.4 has been released by Harman.

    Bug Fixes

    • github-2533: Ensuring Android content URIs can be set as File.nativePath and File.url values
    • github-2614: Ensuring ANEs have the native 'dispose' method called when Workers are present
    • github-2770: Ensuring Multitouch.maxTouchPoints returns an appropriate value on Android
    • github-2771: FileStream.openAsync wasn't completing when using Android content URIs

    · One min read
    Michael

    AIR SDK 50.2.3.3 has been released by Harman.

    Bug Fixes

    • AIR-6707: Adding support for socket broadcast using DatagramSocket send to 255.255.255.255
    • AIR-6721: Ensuring videos with 4-channel audio still play (with silence)
    • github-2238: Ensuring the Windows splash screen doesn't stay topmost when debugging
    • github-2409: Updating tvOS stub generation for SDK v16.4
    • github-2667: Optimizing JNI and ensuring clean-up for Android TimeZone support
    • github-2726: Updating AIR runtime installer to use WebView2 on Windows
    • github-2733: Fixing network connection reuse for iOS apps
    • github-2758: Updating libSwiftCompat.a to include the necessary definitions from libswiftCompatibility56.a

    · 2 min read
    Michael

    AIR SDK 50.2.3.1 has been released by Harman.

    Features

    • AIR-6564: AIR Media - basic iOS sound output implementation
    • github-1453: Adding certificateError event for secure HTTP/socket connections

    Bug Fixes

    • AIR-4357: Removing deferred framebuffer clears for Android runtime in background thread
    • github-1824: Ensuring AIR apps can run from the root folder of a Windows drive
    • github-1856: Fixing URL session closure on macOS for cancelled connections
    • github-1871: Further updates to support File.openWithDefaultApplication on Android
    • github-2409: Fixing tvOS stub generation and reverting symbol removals
    • github-2535: Don't Activate on _NET_WM_STATE event if the window is being hidden
    • github-2603: Ensuring Android file chooser ignores non-mime type filters
    • github-2615: Updating Android StageText to work in a background thread
    • github-2655: Fixing the iOS certificate security alert message by moving it out from async thread
    • github-2660: Ensuring Android platformsdk is picked up properly on cmdline
    • github-2665: Removing memory leakage in Worker when sending strings over MessageChannel
    • github-2666: Ensuring android CameraUI provider is properly named with air prefix
    • github-2667: Fixing JNI problems with Android TimeZone.availableTimeZoneNames
    • github-2670: Ensuring AIR on Android shuts down appropriately on exit() call
    • github-2671: Preventing Android JNI-detach crash
    • github-2684: Ensuring command-line platformsdk has priority in ADT
    • github-2694: Excluding invalid libc++.so files from Gradle builds

    Note re github-2409 (Fixing tvOS stub generation) - the stub-tvos folder update didn't work in this release, so this error is actually still present; there is a patch library under the github issue entry to resolve it.

    · One min read
    Michael

    AIR SDK 50.2.2.6 has been released by Harman.

    Bug Fixes

    • AIR-6609: AIR Android ANRs caused by surface nativeIsXXX calls blocking
    • AIR-6626: AIR Android JNI stability improvements for runtime in background thread
    • github-360: Eliminating duplication on the command line when calling LD64
    • github-1871: Ensuring Android AIR file utils have API-level conditional access
    • github-1871: Adjusting Android openWithDefaultApplication to not need query-package permissions
    • github-2326: Updating Android WebView creation to work in a background thread
    • github-2385: Ensuring Worker start-up continues if an ANE loading fails due to permissions
    • github-2571: Fixing crash-on-exit due to use of permission manager
    • github-2612: Adding support for provisioning profile for macOS app bundle packaging
    • github-2618: Fixing asynchronous XML signature verification
    • github-2620: Ensuring Android secure socket returns the certificate status
    • github-2657: Adding Android lint options to not abort on error

    · One min read
    Michael

    AIR SDK 50.2.2.5 has been released by Harman.

    Bug Fixes

    • AIR-6560: Ensuring auto-orientation updates from AS3 are recognised in iOS16
    • github-2409: Removing another tvOS invalid reference
    • github-2551: Ensuring cyrillic text works in StageWebView.loadString()
    • github-2576: Protecting against a crash in registering ANEs
    • github-2577: Avoiding the display of UIAlertController in the main thread
    • github-2591: Fixing crash when saving a file asynchronously
    • github-2599: Fixing AIR not resuming after proximity sensing on iOS

    · One min read
    Michael

    AIR SDK 50.2.2.3 has been released by Harman.

    Bug fixes

    • AIR-6525: Generating stub files for swift libraries
    • AIR-6526: Ensuring ADT does not generate bitcode (for tvOS)
    • github-1984: Removing Linux H.264 video support whilst issues are resolved
    • github-2326: Workaround for Android ANE functions to run in UI thread
    • github-2409: Removing tvOS invalid reference
    • github-2486: Ensuring only one maximize event is sent on macOS
    • github-2517: Check for intent handling before requesting SAF file permissions
    • github-2532: Fixing argumenterror thrown when closing a window after StageWebView.dispose() call
    • github-2533: Attempting to resolve Android content files and launch in default app; Updating Android file handling functions to use Java to fix permission issues; Correcting File.resolvePath() for Android content URLs
    • github-2547: Ensure StateChange Events are sent for maximise events on Linux even if the window has already been resized.
    - + \ No newline at end of file diff --git a/news/tags/airsdk/page/3.html b/news/tags/airsdk/page/3.html index 7c4f17e49..06207a409 100644 --- a/news/tags/airsdk/page/3.html +++ b/news/tags/airsdk/page/3.html @@ -16,7 +16,7 @@ - + @@ -65,7 +65,7 @@ github-apm40: Fixing crash when using command-line tools with nativeprocess
    AIR-4740: Remove use of sun internal security classes for APK/AAB signing
    AIR-5427: AIR Android security update for https certificate errors

    - + \ No newline at end of file diff --git a/news/tags/airsdk/page/4.html b/news/tags/airsdk/page/4.html index 642f469f8..5487008fa 100644 --- a/news/tags/airsdk/page/4.html +++ b/news/tags/airsdk/page/4.html @@ -16,13 +16,13 @@ - +

    32 posts tagged with "airsdk"

    View All Tags

    · 2 min read
    Michael

    Due to a lot of requests over the previous months we have added several new sections to promote developers and better direct people to the current resources available for AIR.

    We also have started creating a detailed "Getting Started" guide to walk new users through the installation of the AIR SDK and setup of a development environment.

    The first of these is the Community section. This section is aimed to direct developers to the resources and community channels that are available and active on the net.

    We have initially added three of what we believe are the most important resources currently:

    And we will be adding the ever present stackoverflow reference as well. If you believe anything else should be added, please let us know!

    The second is the Showcase section. The showcase is designed to be a place for AIR developers to not only promote their work but promote the AIR platform and show what is possible using the AIR SDK. You can add your own application through a pull request to the repository (or you can just email me your details).

    If you have any feedback on the tutorials or guides we are writing (or if you would like to contribute) please reach out!

    · One min read
    Michael

    Welcome to the new AIR SDK developer portal.

    This site is aimed to become the central location for all things AIR.

    - + \ No newline at end of file diff --git a/news/tags/community.html b/news/tags/community.html index daaa1d455..da84ac0fa 100644 --- a/news/tags/community.html +++ b/news/tags/community.html @@ -16,13 +16,13 @@ - +

    One post tagged with "community"

    View All Tags

    · One min read
    Michael

    A new discord server has been established and is becoming an active place for AIR developers from around the world to communicate in real time.

    Join the server, and show what your working on, get answers to your questions or just connect with the AIR community.

    Join airsdk.dev

    - + \ No newline at end of file diff --git a/news/tags/discord.html b/news/tags/discord.html index 6070e7cf2..90845d3c3 100644 --- a/news/tags/discord.html +++ b/news/tags/discord.html @@ -16,13 +16,13 @@ - +

    One post tagged with "discord"

    View All Tags

    · One min read
    Michael

    A new discord server has been established and is becoming an active place for AIR developers from around the world to communicate in real time.

    Join the server, and show what your working on, get answers to your questions or just connect with the AIR community.

    Join airsdk.dev

    - + \ No newline at end of file diff --git a/news/tags/updates.html b/news/tags/updates.html index 2e6582e4f..df0e42bc1 100644 --- a/news/tags/updates.html +++ b/news/tags/updates.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ capabilities required to support Privacy Manifests for iPhone/iPad applications. There are some other minor functional changes plus recent bug fixes that have been implemented.

    Features

    • AIR-6979: Removing colour-profile adjustments from the loading point of a JPEG
    • github-3116: Adding generation of AIR privacy manifest from defaults merged with ANEs
    • github-3172: Mac bundle creation to generate CFBundleDisplayName tag
    • github-3173: Mac bundle creation to generate CFBundleSupportedPlatforms tag

    Bug fixes

    • github-2976: Adding 'property' as a supported Android Manifest tag
    • github-3126: Fixing issue with Loader.loadBytes() throwing errors in Workers
    • github-3160: Ensuring Linux bundles can be created even if the rpm/deb identification checks fail
    • github-3171: Allow Android manifestAdditions to override activity's screenOrientation attribute

    · One min read
    Michael

    AIR SDK 50.2.4.5 has been released by Harman.

    Release 50.2.4.5 includes a number of bug fixes that had been provided also within the 51.0 pre- release branch but were also considered useful to release into production at an earlier date, across various different platforms.

    Bug fixes

    • AIR-7028: AIR Android file permission callbacks not always called
    • AIR-7029: AIR Android applicationDirectory files may not be accessible
    • AIR-7035: String.fromCharCode() should support all unicode code points
    • AIR-7059: Fixing AIR crash on iOS around network authentication (see AIR-6479)
    • github-2610: Ensuring Win32 timezone retrieval works for default tz when not dynamic
    • github-2807: Removing ANRs caused by access of nativeGetTextBoxBounds from wrong thread
    • github-2903: Fixing instability when breaking into a debugger on uncaught error
    • github-3049: Eliminating instability in GC following socket thread querying the app descriptor
    • github-3062: Updating Win32 camera handling to include better fallbacks where direct connect fails
    • github-3087: Correcting invalid scheme detection to prevent false-flagging of relative paths
    • github-3098: Allowing a/v data access for NetStream in data generation mode

    · 2 min read
    Michael

    AIR SDK 51.0.0.4 has been released by Harman.

    New features

    • AIR-6054: Adding support for file modification times for zip entries
    • AIR-6055: AIR Zip support for creation and saving of zip archives
    • AIR-7046: Adding ZipArchive.load/saveFromByteArray implementations
    • AIR-6866: Enable NativeWindow class for Android
    • AIR-7018: ADT add IPALinkFolder build configuration and linker script for macOS remote build
    • AIR-7044: AIR TextLine embedded fonts to support COLR tables
    • AIR-7045: AIR TextLine embedded fonts to support CBDT tables
    • github-149: Implementing FontDescription.createFromByteArray to load an OpenType/TrueType font for FTE
    • github-216: WebSocket client connection and handshaking
    • github-pad20: Updating NetStream.play() to accept IDataInput argument

    Bug fixes

    • AIR-6743: Update icon list in descriptor XSD
    • AIR-7031: AIRSDK Android dependency lists
    • AIR-7035: String.fromCharCode() should support all unicode code points
    • AIR-7036: Adding platform-specific fallback fonts for Emoji character ranges in Flash Text Engine
    • AIR-7059: Fixing AIR crash on iOS around network authentication (see AIR-6479)
    • github-1917: Correcting Linux bundle creation to support ARM64 ANEs
    • github-2807: Removing ANRs caused by access of nativeGetTextBoxBounds from wrong thread
    • github-2871: Switching to a 64-bit version of the LLVM ld64 linker
    • github-3098: Allowing a/v data access for NetStream in data generation mode
    • github-3102: Preventing crash when using Workers in a beta/prerelease build
    • github-3106: MacOS EncryptedLocalStore updating key storage mechanisms

    · 2 min read
    Michael

    AIR SDK 51.0.0.2 has been released by Harman.

    Discussion on the new features can be found here.

    New features

    • AIR-309: Adding AS3 API for allowing AS3 to handle HTTPS certificate errors
    • AIR-5963: Add ANE capabilities to render a Sprite using a MediaBuffer - initial support via BitmapData
    • AIR-6012: AS3 API for StageWebView constructor changes
    • AIR-6051, AIR-6053, AIR-6054: AIR zip support: Basic reading in of zip files to get entry details
    • AIR-6063: Updated OpenSSL-based ELS key storage
    • AIR-6279: AIR runtime support for float (removing float4 code)
    • AIR-6288: AIR AS3 API for encrypting and decrypting a byte array
    • AIR-6425: AS3 API for Socket.tcpNoDelay setting
    • AIR-6579: AS3 String startsWith and endsWith
    • AIR-6580: Add 'includes' and 'isEmpty' to Array and Vector classes
    • AIR-6581: Adding ByteArray conversions to/from base16 and base64
    • AIR-6707: Adding DatagramSocket.broadcast() method for UDP broadcasts
    • AIR-6752: AIR Digest to include SHA-512 support
    • AIR-6991: ByteArray write random bytes
    • AIR-6992: Update SWF tag encryption to support custom keys
    • AIR-7018: ADT move all iOS linker inputs into a single folder structure
    • github-216: Support for WebSocket servers
    • github-1242: Allow images in HTML text fields via 'allowedDomains' property
    • github-1858: Adding horizontal mouse wheel support
    • github-1936: Allow windows.UseWebView2 'exclusive' mode to prevent IE/WebBrowser usage
    • github-2625: Adding NetworkInfo.disableNetworkChanges flag to prevent socket disconnects
    • github-2742: Adding Function.declaration property to find details of a function
    • github-3060: AS3 StageTextContentType class for StageText support for OTP SMS entry

    Bug fixes

    • AIR-6840: FileReference.upload() to cope with binary file responses (Windows)
    • github-2318: Removing StageVideo viewport coordinate limits for AIR 51 apps
    • github-3024: Removing StageWebView viewport coordination limits for AIR 51 apps
    • github-3062: Updating Win32 camera handling to include better fallbacks where direct connect fails

    · One min read
    Michael

    AIR SDK 50.2.4.4 has been released by Harman.

    Bug fixes

    • AIR-6979: AIR JPEG decoding to take account of macOS display colour profile
    • github-2972: Ensuring correct toplevels are used for user-specified ANEs to correct delayed-loading
    • github-3000: Ensuring Android StageText elements can be re-added to stage
    • github-3034: iPhone WebView inspectable flag to response to test builds as well as debug builds
    • github-3034: Preventing iPhone WebView crash in debug builds pre-iOS16.4
    • github-3043: Updating handling of content URIs and file paths in Android
    • github-3046: Fixing null reference error in ADT on Android manifest 'uses-feature' entry
    • github-3058: Enabling native AAB signing with Java providerName argument

    · One min read
    Michael

    AIR SDK 50.2.4.3 has been released by Harman.

    Bug fixes

    • AIR-6479: Thread protection around credential handling in macOS URL stream
    • AIR-6931: Ensure macOS apps installed via AIR shared runtime are always x64
    • AIR-6964: AIR Android manifest additional features should override any from the template
    • github-2010: Re-implementing fix to allow Rectangle ..ToOutput methods to use 'this' as output
    • github-2625: Updating RTMPS code to accept self-signed certificates
    • github-2978: Ensuring APK files are code-signed with a release configuration
    • github-2988: Ensuring URL schemes conforming to RFC3986 are accepted in AIR
    • github-2989: Correcting DER-encoding of macho entitlements for IPA code signature
    • github-2992: Ensuring AABs built using Animate have all the native libraries included
    • github-2993: Adding thread-safety to new audio code to avoid segfault

    · One min read
    Michael

    AIR SDK 50.2.4.2 has been released by Harman.

    Bug fixes

    • AIR-4740: Remove use of sun.security classes for code signing - replace with BouncyCastle
    • github-1003: Ensuring Android surface restore copes with different event ordering
    • github-1199: Adjusting VideoViewAIR to prevent UnsatisfiedLinkError when calling JNI method too early
    • github-2409: Adding missing media symbols into AppleTV runtime libraries
    • github-2615: Updating Android stagetext/stagewebview functionality to cope better in background threads
    • github-2642: Adjusting thread handling for iOS audio to avoid glitching
    • github-2863: Ensuring ios webviews are inspectable for debug builds
    • github-2906: Allowing non-latin characters in files for Gradle-based builds (and using gradle for apk-signing)
    • github-2924: Fixing Android VideoTexture flicker at start of video playback
    • github-2950: Ensuring Android ANE .so libraries are packaged in AAB bundles

    · One min read
    Michael

    AIR SDK 50.2.4.1 has been released by Harman.

    Features

    AIR-6707: The earlier update to switch to a 'broadcast' mechanism for any address ending in .255 is now rolled out across all platform binaries. AIR-6809: Building on Sonoma/Xcode 15 for iPhoneOS/tvOS/macOS

    • github-2885: Picking up iOS/tvOS platform SDK version from platformsdk path
    • github-2911: Switching IPA linker on macOS to use ld-classic

    Bug fixes

    • github-1194: Adjusting Android lifecycle handlers to avoid black screen in Home/Launcher scenario
    • github-2810: Ensuring AIR copes with UIBackgroundModes being a string as well as an array
    • github-2869: Allowing Stage3D contexts to be created in Android gpu rendering mode
    • github-2888: Moving Android planeKickCascade function into UI thread to avoid exception
    • github-2893: Ensuring BitmapData.decode() works for transparency in PNGs
    • github-2923: Updating LLVM LD64.exe to remove MSVC runtime dependencies

    · One min read
    Michael

    AIR SDK 50.2.3.7 has been released by Harman.

    This release is primarily intended to revert the problems we'd caused when trying to fix #2772 - there are a few other Android-related changes brought into it too. But we're almost finished preparing a "50.2.4" version that will include the new iPhoneOS/macOS SDKs and Xcode version, and will be something people can then use in production whilst we push out the 51.0 branch initially as a beta.

    Bug Fixes

    • github-2835: Preventing crash in Android VideoTexture dispose
    • github-2837: Fixing calls to OpenGL for texture set-up to avoid later failure in VertexBuffer
    • github-2864: Ensuring Android screen state is known to avoid black-screen
    • github-2873: Building APK target can use 'all' arch plus the config file to limit the included ABIs
    • github-2879: Reverting github-2772 regarding activate/deactivate events on Android
    - + \ No newline at end of file diff --git a/news/tags/updates/page/2.html b/news/tags/updates/page/2.html index 6dc4912ed..47357083a 100644 --- a/news/tags/updates/page/2.html +++ b/news/tags/updates/page/2.html @@ -16,14 +16,14 @@ - +

    31 posts tagged with "updates"

    View All Tags

    · One min read
    Michael

    AIR SDK 50.2.3.6 has been released by Harman.

    Bug Fixes

    • AIR-6777: ADT must not output the password for the signing key
    • github-360: Fixing packaging of ANE frameworks within subfolders
    • github-2768: Adjusting ADT iOS linker command-line to avoid crash
    • github-2768: Updating swift compatibility library to include x86_64 symbols
    • github-2772: Sending activate/deactivate events based on Android window focus
    • github-2801: Updating certificate/key handling to remove mac keychain signing failure
    • github-2838: Removing sdk_version and using platform_version for iPhoneOS SDK

    · One min read
    Michael

    AIR SDK 50.2.3.5 has been released by Harman.

    Bug Fixes

    • AIR-6707: Setting UDP broadcast settings for ..*.255 addresses
    • AIR-6765: Fixing crash in embedded font rendering cache
    • AIR-6766: ADT rejects iOS ANEs that don't contain universal binaries
    • github-88: Fixing green strip at the bottom of some Windows H.264 videos
    • github-360: ADT packaging IPA files - reducing long ld64 command lines
    • github-1607: Correcting Android Context usage of visual contexts when needed
    • github-2754: Updating JNI reference handling/clean-up for Android file access
    • github-2755: Updating descriptor XSD docs for missing icon sizes
    • github-2771: Ensuring Android content files can be opened/read asynchronously
    • github-2772: Ensuring AIR activate/deactivate events are sent on activity focus events
    • github-2773: Ensuring AIR Android soft keyboard behaviour matches OS
    • github-2777: Dispatch touch events on Android when requested, regardless of the device touchscreen feature flag
    • github-2801: Ensuring macOS KeychainStore certificates can be used without private keys

    · One min read
    Michael

    AIR SDK 50.2.3.4 has been released by Harman.

    Bug Fixes

    • github-2533: Ensuring Android content URIs can be set as File.nativePath and File.url values
    • github-2614: Ensuring ANEs have the native 'dispose' method called when Workers are present
    • github-2770: Ensuring Multitouch.maxTouchPoints returns an appropriate value on Android
    • github-2771: FileStream.openAsync wasn't completing when using Android content URIs

    · One min read
    Michael

    AIR SDK 50.2.3.3 has been released by Harman.

    Bug Fixes

    • AIR-6707: Adding support for socket broadcast using DatagramSocket send to 255.255.255.255
    • AIR-6721: Ensuring videos with 4-channel audio still play (with silence)
    • github-2238: Ensuring the Windows splash screen doesn't stay topmost when debugging
    • github-2409: Updating tvOS stub generation for SDK v16.4
    • github-2667: Optimizing JNI and ensuring clean-up for Android TimeZone support
    • github-2726: Updating AIR runtime installer to use WebView2 on Windows
    • github-2733: Fixing network connection reuse for iOS apps
    • github-2758: Updating libSwiftCompat.a to include the necessary definitions from libswiftCompatibility56.a

    · 2 min read
    Michael

    AIR SDK 50.2.3.1 has been released by Harman.

    Features

    • AIR-6564: AIR Media - basic iOS sound output implementation
    • github-1453: Adding certificateError event for secure HTTP/socket connections

    Bug Fixes

    • AIR-4357: Removing deferred framebuffer clears for Android runtime in background thread
    • github-1824: Ensuring AIR apps can run from the root folder of a Windows drive
    • github-1856: Fixing URL session closure on macOS for cancelled connections
    • github-1871: Further updates to support File.openWithDefaultApplication on Android
    • github-2409: Fixing tvOS stub generation and reverting symbol removals
    • github-2535: Don't Activate on _NET_WM_STATE event if the window is being hidden
    • github-2603: Ensuring Android file chooser ignores non-mime type filters
    • github-2615: Updating Android StageText to work in a background thread
    • github-2655: Fixing the iOS certificate security alert message by moving it out from async thread
    • github-2660: Ensuring Android platformsdk is picked up properly on cmdline
    • github-2665: Removing memory leakage in Worker when sending strings over MessageChannel
    • github-2666: Ensuring android CameraUI provider is properly named with air prefix
    • github-2667: Fixing JNI problems with Android TimeZone.availableTimeZoneNames
    • github-2670: Ensuring AIR on Android shuts down appropriately on exit() call
    • github-2671: Preventing Android JNI-detach crash
    • github-2684: Ensuring command-line platformsdk has priority in ADT
    • github-2694: Excluding invalid libc++.so files from Gradle builds

    Note re github-2409 (Fixing tvOS stub generation) - the stub-tvos folder update didn't work in this release, so this error is actually still present; there is a patch library under the github issue entry to resolve it.

    · One min read
    Michael

    AIR SDK 50.2.2.6 has been released by Harman.

    Bug Fixes

    • AIR-6609: AIR Android ANRs caused by surface nativeIsXXX calls blocking
    • AIR-6626: AIR Android JNI stability improvements for runtime in background thread
    • github-360: Eliminating duplication on the command line when calling LD64
    • github-1871: Ensuring Android AIR file utils have API-level conditional access
    • github-1871: Adjusting Android openWithDefaultApplication to not need query-package permissions
    • github-2326: Updating Android WebView creation to work in a background thread
    • github-2385: Ensuring Worker start-up continues if an ANE loading fails due to permissions
    • github-2571: Fixing crash-on-exit due to use of permission manager
    • github-2612: Adding support for provisioning profile for macOS app bundle packaging
    • github-2618: Fixing asynchronous XML signature verification
    • github-2620: Ensuring Android secure socket returns the certificate status
    • github-2657: Adding Android lint options to not abort on error

    · One min read
    Michael

    AIR SDK 50.2.2.5 has been released by Harman.

    Bug Fixes

    • AIR-6560: Ensuring auto-orientation updates from AS3 are recognised in iOS16
    • github-2409: Removing another tvOS invalid reference
    • github-2551: Ensuring cyrillic text works in StageWebView.loadString()
    • github-2576: Protecting against a crash in registering ANEs
    • github-2577: Avoiding the display of UIAlertController in the main thread
    • github-2591: Fixing crash when saving a file asynchronously
    • github-2599: Fixing AIR not resuming after proximity sensing on iOS

    · One min read
    Michael

    AIR SDK 50.2.2.3 has been released by Harman.

    Bug fixes

    • AIR-6525: Generating stub files for swift libraries
    • AIR-6526: Ensuring ADT does not generate bitcode (for tvOS)
    • github-1984: Removing Linux H.264 video support whilst issues are resolved
    • github-2326: Workaround for Android ANE functions to run in UI thread
    • github-2409: Removing tvOS invalid reference
    • github-2486: Ensuring only one maximize event is sent on macOS
    • github-2517: Check for intent handling before requesting SAF file permissions
    • github-2532: Fixing argumenterror thrown when closing a window after StageWebView.dispose() call
    • github-2533: Attempting to resolve Android content files and launch in default app; Updating Android file handling functions to use Java to fix permission issues; Correcting File.resolvePath() for Android content URLs
    • github-2547: Ensure StateChange Events are sent for maximise events on Linux even if the window has already been resized.
    - + \ No newline at end of file diff --git a/news/tags/updates/page/3.html b/news/tags/updates/page/3.html index 6cfd10fdc..2e4c8a3ee 100644 --- a/news/tags/updates/page/3.html +++ b/news/tags/updates/page/3.html @@ -16,7 +16,7 @@ - + @@ -65,7 +65,7 @@ github-apm40: Fixing crash when using command-line tools with nativeprocess
    AIR-4740: Remove use of sun internal security classes for APK/AAB signing
    AIR-5427: AIR Android security update for https certificate errors

    - + \ No newline at end of file diff --git a/news/tags/updates/page/4.html b/news/tags/updates/page/4.html index 0f7d88e43..4d835cdb2 100644 --- a/news/tags/updates/page/4.html +++ b/news/tags/updates/page/4.html @@ -16,13 +16,13 @@ - +

    31 posts tagged with "updates"

    View All Tags

    · 2 min read
    Michael

    Due to a lot of requests over the previous months we have added several new sections to promote developers and better direct people to the current resources available for AIR.

    We also have started creating a detailed "Getting Started" guide to walk new users through the installation of the AIR SDK and setup of a development environment.

    The first of these is the Community section. This section is aimed to direct developers to the resources and community channels that are available and active on the net.

    We have initially added three of what we believe are the most important resources currently:

    And we will be adding the ever present stackoverflow reference as well. If you believe anything else should be added, please let us know!

    The second is the Showcase section. The showcase is designed to be a place for AIR developers to not only promote their work but promote the AIR platform and show what is possible using the AIR SDK. You can add your own application through a pull request to the repository (or you can just email me your details).

    If you have any feedback on the tutorials or guides we are writing (or if you would like to contribute) please reach out!

    - + \ No newline at end of file diff --git a/news/welcome.html b/news/welcome.html index 61aec4e0a..53f2866ba 100644 --- a/news/welcome.html +++ b/news/welcome.html @@ -16,13 +16,13 @@ - +

    Welcome

    · One min read
    Michael

    Welcome to the new AIR SDK developer portal.

    This site is aimed to become the central location for all things AIR.

    - + \ No newline at end of file diff --git a/reference.html b/reference.html index b28d88a02..05322574f 100644 --- a/reference.html +++ b/reference.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/reference/3.0.html b/reference/3.0.html index 93433ab71..951ca8d2f 100644 --- a/reference/3.0.html +++ b/reference/3.0.html @@ -16,13 +16,13 @@ - +
    - + \ No newline at end of file diff --git a/showcase.html b/showcase.html index 5081df2a1..43bc612a3 100644 --- a/showcase.html +++ b/showcase.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

    AIR Application Showcase

    See what developers are building with the AIR SDK

    AIR Package Manager
    highlightutilitycommandline
    The AIR Package Manager is a command line utiltiy for managing AIR applications
    20 000 Cogs under the Sea
    gamemobiledesktop
    Start your awesome underwater steampunk adventure. Build underwater factory, connect the cogwheels ⚙ for the most efficient work in the idle game 🎮 mode. Tap volcanoes 🌋 for oxygen, drill the seabed and mine ⛏ the ore.
    Bonza Jigsaw
    gamemobile
    Solve jigsaw puzzles that feature stunning images from around the globe. Austrian alps, Canadian creatures, Danish dance and Brazilian beaches. Explore exotic regions and discover new cultures, embrace the diversity that makes our world unique and preserve the values that bring us together.
    Bonza Planet
    gamemobile
    Combine word search, jigsaw and trivia to solve puzzles as you explore the world of Bonza Planet. This edition of Bonza highlights themes like Animals, Travel, Planet Earth, Humanity and Science.
    Bonza Word Puzzle
    gamemobile
    Bonza is a new type of crossword that has become an instant classic. It mixes word search, jigsaw and trivia to create something completely fresh. If you like a word challenge and you enjoy pushing boxes around with your fingers, then you'll love Bonza Word Puzzle.
    Boo!
    gamemobiledesktop
    Boo! is a spooky puzzle game for you! To solve the puzzles you have to dip the pumpkin in the different paints and wear attributes to mask certain parts of the pumpkin. Can you make the correct pumpkin in 42 Halloween themed levels? Complete all the levels to unlock the daily puzzle mode.
    Bullet Heaven 2
    gamedesktop
    A mesmerizing bullet-hell shoot-em-up. Shoot at cute enemies, while dodging hundreds of bullets per second! This game was made with Starling, has full controller and leaderboard support, and supports up to 4 players locally.
    Dallmeier HEMISPHERE® SeMSy®
    utilitydesktop
    The HEMISPHERE® SeMSy® video and alarm management system is one of the most comprehensive solutions on the market for video management systems (VMS). The application portfolio goes far beyond classic video management tasks and offers the comprehensive integration of third-party systems via various interfaces and industry modules.
    Engineer Millionaire
    gamemobiledesktop
    Cogs, money and mad science! All what you have at start is a machine which produces coins out of nothing, but it’s all what you need to build your factory, mine coal, construct drones and become a millionaire!
    Epic Battle Fantasy 4
    gamedesktop
    A light-hearted turn-based RPG, inspired by 2D classics. You will battle through waves of enemies, grow your characters, read cringey dialogue, explore a diverse world, solve puzzles, and of course, save the world. Originally packaged with MDM Zinc, it has been updated to use AIR in the latest version.
    Epic Battle Fantasy 5
    gamemobiledesktop
    A 30-hour turn-based RPG adventure, full of video game references, juvenile dialogue, and anime fanservice... and also strategic combat, monster catching, and tons of treasure hunting! Made with AIR and the classic Flash display list, it took over 4 years of work and sold over 100,000 copies!
    Epic Battle Fantasy Collection
    gamedesktop
    A collection of short and silly games from the early days of the internet. There's turn-based RPGs, shoot-em-ups, platformers, and more - updated with new quality-of-life features. This is an AIR application that launches .swf files, both ActionScript 3 and ActionScript 2, and adds Steam features!
    Factory balls
    gamemobiledesktop
    You might think that working on the assembly line is tedious work, but not if you're manufacturing Factory Balls! Your job in this logic puzzle game is to custom craft each ball to a specific order. You've got all the tools you need to fulfill each order... except the instruction manual.
    Farm and Mine
    gamemobiledesktop
    Farm and mine idle tycoon combines the most fun features from idle farm tycoon games and clicker mine factory simulators. You have a vegetable farm at start. But as you grow more food, build a house, hire a farmer, drill for idle coal mining and oil pumping, you can create a farming empire and become a millionaire tycoon
    GameVelvet - Online Card Games and Board Games
    gamemobiledesktop
    More than 25 board and card games available for Android, iPhone, iPad, Windows Store. The app is available in 5 languages: English, Portuguese, Italian, French, and Spanish and has more than 800,000 monthly active users in all platforms. Users can choose to play traditional card and board games with online players around the world or train with bots (AI).
    HD Poker
    gamesocialdesktop
    HD Poker is the place for you to Unlock your Happy Within™, with an awesome community and the best vibes! Invite your friends and family and enjoy the most awesome and fun poker game in the world. Available on Steam for Windows and macOS
    Idle Tower Builder
    gamemobiledesktop
    You are in charge of building the world highest tower. Gather or produce the necessary resources and fulfill your aim!
    Pink
    gamemobile
    Can you make the screen pink in 50 levels? Each level has its own logic. The 6th part in the colour puzzle series. After yellow, red, black, blue and green, it's time to solve 50 new conundrums!
    Shapik: the Quest
    gamemobiledesktop
    This is a story of Shapik, traveling through magic forest in search of his missing sister. Explore a beautiful world, full of mystery, magic and danger and find your missing sister, solving puzzles on your way.
    SimsUshare
    educationmobiledesktop
    SimsUshare is the easiest way to create compelling Fire & Safety training simulations using your own photos. It is the #1 fire simulator training application in the Fire Service, used by tens of thousands customers
    Smart Heat
    utilitymobile
    With an easy and intuitive interface, Smart Heat will assist you in managing your CAOS Bluetooth heater. Smart Heat can manage the entire weekly program and settings of your exclusive heater. Manage your time slots of activity, heating speed and temperature, eco settings, and led colour and intensity.
    Steampunk Idle Spinner
    gamemobiledesktop
    Steampunk Idle Spinner is the game in which you can build incredible mad science contraptions and spectate them spin and earn money! The game has mines, cogwheels, balloons, electric field generators, vapor collector, portal and generates awesome vibes of exploration, construction and discovery.
    String art DIY
    entertainmentmobile
    The fastest and most accurate thread/string art generator. The app is designed as a DIY (Do it yourself) tool which you can use to weave the threads yourself. And it is free to use
    Sugar game
    gamemobile
    Draw on the screen to direct sugar into the cups. Experience the soothing puzzling with sugar particles trickling across the screen. A relaxing puzzle game from the creator of the original Flash "sugar, sugar" games.
    Summoners Fate
    gamedesktop
    Summoners Fate is a tabletop inspired roguelike that fuses traditional turn-based combat with tactical card combat. Choose your Summoner and embark on ever-changing adventures in the Multiverse in search of hidden secrets, powerful cards and mutated rabbits.
    Transmutation
    gamemobiledesktop
    You are the alchemist: medieval mad scientist! All what you have at the start is Air. But then you discover, how to get other elements: Water, Slime, Earth, Rock, Fire and so on!
    VoltLab
    educationmobile
    A fun study of the physics of electricity with VoltLab
    WYQS - West Yorkshire Queer Stories
    educationmobile
    Use the interactive map to follow our history trail and discover Leeds’s hidden queer past. From Pride to squats, from 1840s court cases to 1990s raves, you can listen to voices from across the West Yorkshire queer community and see the city and its past in a new light.
    - + \ No newline at end of file