---
title: WWDC2000 Session 142
framework: wwdc
role: article
path: wwdc/wwdc2000-142
---

# WWDC2000 Session 142

## Transcript

Kind: captions Language: en ladies and gentlemen please welcome user experience technology manager John goal NZ well good afternoon and welcome to session 142 this is one of many of the sessions here at the conference on the Aqua user experience and Mac OS 10 and this session really is as I said on Monday in the Aqua review session is really the mirror session of that one and this one presents the materials from the Aqua review session really from an API point of view so from the programmers point of view speaking through all the material that whispers in the Aqua review session item by item and telling you how to implement these things within your apps as a developer so to walk you through this content I'd like to bring on stage guy Fullerton a member of the high-level toolbox engineering team at Apple so aqua is the next generation user experience for Mac OS but it's more than just a whole bunch of pretty pictures on the screen it's behaviors its functionality and it's your entire experience when using Mac OS 10 and the key for you as developers is that aqua is not complete until your applications take advantage of it until we have lots of applications on the system that take advantage of it so i'm going to show you the steps that are required for your application to Aqua phi and it's really not a very difficult process a lot of the functionality the toolbox and lower level system services will do for you automatically I'll also show you how to avoid certain problem areas when you're doing your code and aqua fiying your application and lastly I hope to give you some kind of level of insight into exactly why aqua is the way it is so that when your application needs to do some sort of custom user interface element you can better match the rest of the Aqua experience so the most striking thing about aqua when you first see it is probably the windows they're obviously drastically different from Mac OS 9 and appearance and there's several cool technology features that we've built into Mac os10 that make using Windows much more of a pleasure one thing about Windows that may not necessarily be obvious the first time you start using mac OS 10 is the fact that we have a brand-new layering model on Mac OS 9 when you select an application either by clicking on one of its windows or choosing it from the application menu or something like that all of that application windows all of that applications windows come to the foreground on Mac OS pin we don't have that behavior when you click on an applications window just that one window comes to the foreground this is beneficial for a couple reasons the main reason is beneficial in any case is that users have a very document-centric way of working and this facilitates it very easily so there's a couple things as application developers you need to be aware of with respect to this functionality the first is that because one of just one of your windows can come to the front most and that does bring your application to the foreground but just because your application is at the foreground you can't assume that all your windows are visible if you have some sort of status window you might want to bring that forward in addition to just the one window the user clicked on similarly the toolbox will automatically bring all of your applications floating windows to the foreground when any one of your windows comes to the front and to make it easier on your lives your window list is not changed at all in this model you will only see your windows in the window list and you won't have to watch out for any other applications windows and if your user does want to bring all of your apps windows to the foreground there's a couple mechanisms to do that I'll talk about one a little bit later on but they can always click on your applications icon on the dock to bring everything forward at once so Mac os10 automatically double buffers your window content for you this has several cool advantages the first is a user advantage and that is that drawing appears very snappy if you create a mac OS 9 window just a normal mac OS 9 window and you don't go through any effort of double buffering it and you make individual quick draw calls or appearance primitive calls or other calls that draw you'll see each individual draw operation take place one after the other and it looks kind of clunky well on Mac OS 10 we automatically redirect the drawing into the off-screen buffer for that window or what anything over the map screen buffer and then later that gets blit to the screen all in one fell swoop it has a very crisp snappy appearance to it addition additionally the fact that we buffer windows lets us take advantage of ports in really cool ways to do shadow compositing or translucency effects and things like that so like I mentioned when you're drawing with quick draw on Mac OS 9 individual graphics operations take place one at a time and on 10 they still take place one at a time but they write to some off-screen buffer typically your application does not need to manage that buffer and the timing with which it's used to and the timing that's used to transfer it to the screen the toolbox does that for you in probably ninety nine percent of the cases when you do some drawing and then you re enter the event loop we will automatically flush all the windows that need to be flushed if you do have some cases in your application we're sort of intermediate frames of the drawing might make sense to display or if you're doing some kind of animation without calling into the event loop you can always manually flush by using the QD flush court buffer API so in Mac OS 10 we automatically turn on buffering for you and in this case we've got an API called 2d is port buffered and this tells you when a given port is buffered I'll get to something else in a second so essentially what this means is now that you were automatically doing an off-screen buffer for you if your application on Mac OS 9 was doing its own off screening or own double buffering through G world you don't need to execute that code on Mac OS 10 so you want to use the qds port buffered API and when it returns true to conditionally turn off your own G world support for your windows additionally each buffer for a window has its own device depth and the windows server and courts will automatically do the dithering if it happens to be rendered to a device that has a lower bit depth than the courts buffer so you don't even need to bother doing device live when you're running on Mac OS 10 on Mac OS 9 of course we don't do any automatic buffering so it might behoove you to conditional eyes you give your G world drawing code in there and conditional eyes it just to run on mac OS 9 using the QT is port buffer at api you'll also want a device loop on mac OS 9 just like you always have it'll make sure you draw properly across all devices i should make another note that the duty flush port buffer api even though it does nothing on mac OS 9 is still perfectly safe to call so one of the ways we take advantage of quartz is through window shadowing window shadowing is important for a number of reasons one of which is the fact that unlike mac OS 9 platinum windows an aqua window does not have a thick border around the edge and the window shadow is one of the ways you can help differentiate the edges of your windows this also lets us do cool usability features like the fact the frontmost window actually has a darker deeper shadow than the rest of the windows in your application to make it stand out a little bit better but not all windows necessarily need shadows you might have a case in your application where you're displaying a window for instance if you've got a scroll bar and you pop up a little window that displays the page number that they user will scroll to when they live with a scroll bar it may not make sense to display a shadow on that window so you can turn off the shadow in two ways the first way is by calling create new window to build that window if you pass in the nose shadow attribute of course we're going to create a window that doesn't have a shadow the second way is not it does not work yet on DP for but by the time we ship the final version of Mac OS 10 it will work we have a change window attributes API that's been around since I think Mac OS 85 that allows you to dynamically turn on and off certain window features and the shadowing will be one such feature now the fact that we have your windows buffer means we can do other cool things like drag the window around live of course this will only work if you call the standard tool box drag window API a lot of you have custom dragging code for your windows typically implemented with dragway region or direct drawing to the screen and doing your own pattern X touring and stuff like that that won't work on 10 first off because drag great region will not have the behavior you expect we'll go into a little bit more detail on that on the carbon enhancement session and drawing to the screen just really doesn't work on Mac OS 10 in DP for there are ways to give us a kind of but it's not going to draw to the buffer so it's just not going to work out and I'd say avoid it if you do need some custom dragging behavior you can always take advantage of carbon events and hook into the drag window functionality to do certain custom dragging so of course another real cool feature of Mac OS 10 is the dock and as you've seen windows can minimize down to the dock the toolbox tries to do as much of this work for you as possible in fact it's basically free for your application any any document window which is one that has the collapsible bit the collapsible attribute turned on for it will automatically minimize down to the dock when you click the collapse box now in Mac OS 8 I believe we introduced the collapse windows suite of AP is which worked with mac OS 8 window shading behavior the collapse window api allows you to window shade and unwin doe shade windows so i'm not go as 10 we're reusing these api's to do the minimization process additionally calling select window on a window that happens to be minimized will unmask it from the dock and bring it to the front in one operation so when a minute window is minimized as a couple things you need to be aware of the first is that the window is still visible this has several key advantages if the windows minimized in the docs say a progress window you can continually update the progress window and if the user clicks on the dock done minimize the window it'll unmediated on state which is good also it's still in your windowless so you need to be aware of that we have an is window collapsed API which is again been around since Mac OS 8 if it's true your window is in a minimized state there might be certain functionality in your application that you'll want to turn off for certain minimize windows for instance if you have a windows menu with a range or tiling item probably don't want to range your tile your minimized windows it'll look kind of odd to the user if there's a hole in the arranging that you did the doctors will just show minimize windows in it also shows application icons or possibly documents you've added to it and of course you're going to want a good icon for your application to show in the dock when it's running now the doc uses 128-bit by 128 bit icons which are obviously much bigger than the 32 by 32 icons if you don't provide a 128 x 128 icon will take your 32 bit by 32 by 32 icon and scale it and as you've seen some of the demos it can look kind of clunky and it really doesn't give your app a good feel to it so we're going to talk more about this in two different sessions there's an application packaging session and an icon services session the icon services session will tell you how to build up the icon ref 128 128 icon graph the application packaging session will show you how to stick that into your applications bundle so obviously the menus in aqua went through a visual transformation but there's a more subtle transformation that we did that really increases the usability of aqua and that is a little bit of many bar reorganization under mac OS 9 mac OS 9 obviously has a very long history and so commands kept getting added to it and added to it and after time became kind of clunky and things aren't necessarily arranged in the best possible way so an aqua we tried to rectify that the leftmost menu in the app in the menu bar is the application menu this is the menu in which you put all of the commands that only pertain to your application as you can see quit and about things like preferences and the hide and show items building application menu is something you'll all recognize this familiar from a resource standpoint it's essentially just an apple menu create a normal Apple menu which has the Apple characters its title put your about item in it just like you always have put a separator in it just like you always have we're not Mac OS 9 when you're running on carbon lib we detect this the Apple menu we automatically populate it with apple menu items and we even handle all those selections for you when you run on mac OS 10 we do a couple different things first off we populate it with all the standard application menu items quit hide show preferences and all those secondly we change the name of the application menu to be that of your application now a lot of today's applications have very long names you know you've got a company name the actual app name typically a version number on it that whole string is not appropriate to throw into the application menu but by default the toolbox will so we've come up with a scenario so that you can actually create a short version of your applications name specifically for stuffing into the application menu title and this is by one item in your application bundles info.plist we'll talk more about that at the application packaging session as well now if you don't provide one of these short names will take your applications long name and truncate it probably someplace in the middle where it doesn't necessarily make sense so you really need to provide a short application name if your application name is is it all non-trivial so like I mentioned on carbon lid we handle most application menu selections for you automatically but when your app needs to do a few other things you need to handle your about item the way you always have but then again you've already have code to do that so that's no change we added a quit and preferences item to it but it's your responsibility to handle those items when a user chooses the quit item from the application menu we'll send you a standard quit application apple event handle that the way you always would you know bring up your saved don't save dialogues and shut down your application is appropriate when they choose the Preferences item we send you a brand new Apple event called show preferences when you receive this Apple event you want to obviously display your preferences everything else in the application menu is handled automatically right now we deal with the hide and show items automatically the services isn't quite wired up yet and we'll have more details on that later now a lot of applications have either complex preferences or they have plugins which need preferences or they might even have just multiple preferences items from for historical sake and we made the Preferences menu customizable so that you could add multiple preferences items or even delete it if you need to the Preferences item in the application menu has a command ID associated with it all lowercase P re SP SP re f just like you would expect and you can find the position of that item in the Preferences menu by using a new menu manager API in fact we have a whole suite of new menu manager api's that are designed to let you deal with many commands menu items sorry on a command basis you can find them hide them children things of that nature so once you've found the Preferences item you might want to change its name you might want to hide it you might want to add other items you can customize it however you need to the next menu over in the menu bar is a file menu this hasn't changed a whole lot but it's important to understand what it's for now it's the place that you put all of your documents Pacific Command there should be nothing that pertains only to the application here or stuff that contains the document content so as you can see the file menu no longer has a quick command now the last menu we'd like everyone to adopt is a window menu this window menu becomes particularly important now that we have a different layering model if your windows are intermingled with another applications windows it's important to offer an easy way to the users to get at the other windows in your application and of course if you add this it'll show up in your carbon live versions as well and I'm sure your users will find it useful there as well now unfortunately we don't have an automatic window menu support but we're looking at what it will take to do that so for the time being if your application does not already have a window menu you just need to add a few standard commands to it and then add one item for every window in your application if the user chooses one of the items that pertains to one of your windows just call select window to bring it forward one of the one of the standard commands is collapse or sorry minimize command and when the user chooses minimize you should collapse the frontmost window and the other standard command is bring all to front they choose that you want to bring all of your application windows to front obviously and you do that by calling set front process on your application process serial number this is also a really good place to put any tiling arranging functionality if you offer that in your application so all right you've just laid out your menus for aqua well what should they look like when they're running on Mac OS 9 well the answer is they should look like Mac OS 9 menus the file menu should still contain the quick command and your preferences items should be wherever you normally put it in your Mac OS 9 product to facilitate this we've added a bit to the menu managers Gestalt that's the Aqua layout bit if you see this bit turned on you want to change the way your menus are laid out of course there's a number of different ways you can do that you might have Oh a set of different mbar and many resources in your app and change which one you load based on whether or not the bit is set alternatively you can go ahead and leave the quick command in your file menu and remove it when you're running on under aqua or maybe dynamically add it if you're running on Mac OS 9 or do whatever you need to do and you also conditionally want to move your preferences I time around so before I go any further I want to give you a demo that's not exactly related to aqua but I've got some ulterior motive so bear with me so if I can get the demo machine we've got a very simple application here and I don't know if it's showing up very well in some of the other demos but aqua menus are transparent might have seen that before but we've been working on the menu manager a little bit besides just adding some api's to deal with the command IDs we've also added dynamic menu support so while I've got this menu pull down I can change the modifier case that I hold down and it changes the items that are displayed I'd like to go back to slides so between those two facts from the fact that in Mac OS 8 with the appearance manager we also introduced a whole bunch of new menu item glyphs and the full keyboard command sweet you can assign control option shift and those things to your menu command modifiers between all those features there's basically no reason not to adopt the system menu death for your text based menus that in fact is the only way to get translucency for your menus right now translucency is not supported in custom em deaths of course when you adopt the standard am deaf you're going to have maximum future compatibility as well so in my opinion the absolute best feature of aqua is sheets this is the way modality all we should have been sheets are a way to associate an individual dialogue or alert directly to the document which it applies and this is probably the individual hardest thing to implement for aqua but even as such it's not very hard the toolbox tries to take care of as much work for you as it possibly can we run the genie effect we deal with the document modality and we also deal with the window grouping when the sheets pulled down on a window you can actually click the document window and move both the window and the sheet around so the work you have to do like I said is very simple and it's four basic steps the steps you're pretty much used to for all your normal windows with a slight twist to create a sheet you use the create new window API and just tell it hey it's a sheet class window all right that gives you the sheet but before you can actually display it there's one thing you need to do in the carbon event session we mentioned mention how a lot of our new functionality was only going to be accessible via carbon event and this is one of those pieces of new functionality so when a genius is about to run we need to show the window and have the windows image ready immediately so we can run the genie effect with the real bit in order to do that we need your application to respond to the cave k event window draw contents apple event sorry carbon oven you simply do this by installing the event handler and in when you receive the event do your normal window drawing if you you can call draw controls or draw whatever custom content you need to and so we'll send you this event will have your bits already ready and we will run the genius pectin spin your window out so to actually run the genie effect and show the window you call show sheet window this window is just like show window except it takes an extra parameter and that parameter is the document window to which it applies this API does a couple things first it associates the sheet with its document it'll run the genie effect and then it sets up the system to deal with the proper modality of that sheet to just its document the other important thing to note is this API returns immediately just like show window it doesn't put you into some sort of funky modal state and we only exit after the users done with the genie that doesn't happen show window returns immediately and your application must continue with its normal event processing and it's just that normal event processing you'll receive events for the sheet just like you would for any other window and you can handle them just like for any other window and if you want to take advantage of carbon events to make your life a little bit easier you can do that too so the user interacts with your sheet for a while and ultimately they're going to click a button or do something in the sheet that means dismiss it and to get rid of the sheet and thereby animate the genie effect you call hide sheet window this also unbinds the sheets from its document and like any other window you just dispose it when you're finished with it alternatively you could keep it around for a later use of show sheet window if you want so the vast majority of sheet use is usually very simple you'll typically want to do save dialog sprint dialogues or custom alerts and things of that nature and we've offered a standard alert API for a little while now and we made an equivalent of that using sheets and it's called create standard sheet so create standard sheet has mostly the same parameters as standard alert you can customize a message text the explanation text you can customize the buttons a little bit the one difference is that create standard sheet takes an event target rest then eventtarget rest is one of the carbon event objects to which events can be sent and this this target is particularly important because when the sheet is ultimately dismissed we are going to send the event telling you what the user clicked directly to that event target so you create your sheet window you call show sheet window and from that point on it's handled automatically create standard sheets will automatically install carbon event ham enough carbon event handlers onto the sheet window such that all of the event processing for that sheet is handled for you you won't receive any events for that sheet via wait next event so when the user manipulates the sheet finally clicks one of the buttons the create standard sheet API set up some stuff so that we will call hide and hide sheet window for you automatically and then we send a particular carbon event to the event target you provided it'll be ok cancel or other depending on whatever button the user clicked so the navigation services and printing teams have come up with a new suite of api's to let you take advantage of their dialogue services in such a way that they use sheets should definitely check out the sessions they discuss this at to find out all the details there but in general they try to make your lives as easy as possible and do as much as the work for you as possible so one of the other major changes with aqua is the system font we're now drawing with Lucetta and in fact it's even a little bit bigger than you might be expecting on Mac OS 9 the system font was charcoal before that it was Chicago but in both cases it was 12 points the system font in lucida is 13 points the small system font is 11 point and additionally there's a few cases where we render render the font with special effects in certain cases of the push button for example has a slight shadow as does the window title and in fact the window title is rendered in 14 points so this is a few nuances there so despite the fact that loser that has a longer putt sorry a larger point size it still has the overall overall has the same metrics as charcoal or Chicago I think charcoal and Chicago have a 16-point overall line height lucid is roughly equivalent definitely design go over 16 similarly the small system font has an overall line height of 13 points one important fact to note is that lucida is on average a little bit larger a little bit longer than charcoal of Chicago so you might need to take care there of course your applications are going to want to use aqua text wherever they can and if you use the standard system controls windows and menus we're going to take care of all that for you automatically but I know your applications do a lot of custom drawing so we've implemented a suite of appearance manager aqua savvy theme text drawing api's they actually build upon some earlier parents manager technology using the theme fonts IDs this was a set of meta fonts you could request like just let me use the system font or just let me use the small system font or the small bold system font so the suite of AP is lets you draw or measure or truncate any number of these meta fonts in an aqua savvy way and in order to make your lives easier we've tried to make these api's relatively equal to the quick draw text AP is that you've grown to know and love we have an equivalent to the te text box API we have an equivalent to string width we have an equivalent to trunk string and those things so aqua obviously changed all the widgets and all the controls so they have a brand new look in addition we've added a few new controls and added some features to some of the older ones so I know you saw slide changes on the previous slide I should go into some background here so when dp3 when everybody first saw aqua the controls were much bigger than they were in platinum I think push buttons were around twenty six pixels tall pop ups were maybe 24 everything in general was larger and we heard a lot of feedback about that you told us that it was gonna be very difficult to relay out all your dialogues and we took that feedback to heart and so now in DP for all of the controls are basically the same you've basically the same metrics as their platinum equivalents the heights for the controls are mostly maintained there are a few cases where we won't shrink below a certain size for instance you can't create a push button at six pixels tall that kind of defeats the purpose and a few controls widths do increase slightly there's a number of reasons for this like I mentioned before lucida as a system font is slightly wider than charcoal in Chicago so if you if you're using static text items or if you have certain controls that have a lot of text in them you might find that you need to widen it a little bit to show it on the same number of lines you used to be additionally a few of the controls like push buttons have a more rounded appearance the end caps on platinum push buttons were practically square so you could cram a lot more text onto the button image but an aqua one is more rounded and if you start cramming the text on the text might write off the edge so you'll probably need to widen your dialogues or widen the items out in your dialogues and controls a little bit but to help so we didn't want to wreck your investment in your dialogue layout so we tried to make it such that your layout effort was about equal to a localization effort but not more than that and the other benefit is that if you take a dialogue that you've implemented to look really good in platinum and Yuri lay it all out for aqua and you take that same dialogue and run it back on platinum again it's still going to look good so you should get what you should be able to get away with just having one set of dialogue and control resources for your application so I mentioned before that we've got a number of new controls and I'd like to take you to the one by one so the first one is the round button you've probably seen this either in the finder or in the health viewer generally used as a navigation button you know forward backwards home things of that nature and you can customize its content through an icon rest of course we have a new creation API for this one as well we adding we're adding a whole slew of new creation api's for all the controls will go into details on that in the carbon enhancement session but we've got one for the round button to make your life easier you may not have seen a disclosure button before this right now is only showing up in the open and save panels it's used to for lack of better words expand and contract the dialog if you click it when the dialogues and its small faded expands to the large state getting more information got a creation API for that one so when we introduced Mac OS 8 we introduced a progress bar control and that was really cool people use it for progress but other people started using it for relevance ranking including our own products Sherlock used it for its relevance ranking indicator and searches but we redesigned the progress bar for aqua and its appearance really isn't suitable anymore as a relevant ranker so we've introduced new control call a red alvins bar and it's perfectly suited for relevance ranking we use it in Sherlock obviously while I've got this slide up the bottom half of that Sherlock window is another new control we're adding it's not just an aqua control it's also available on Mac OS 9 it's called the data browser and we have a complete session on that it is a super list manager replacement or you can think of it that way it's a totally modern control that's both aqua savvy and platinum savvy there's all the list management in the UI that you would ever want draws those header buttons deals with the shadowing effect underneath the header buttons and all that wonderful stuff so like I mentioned we've had the progress bar for quite some time now but I've seen some apps that still didn't realize that it's been available since Mac OS 8 but there are still applications out there that use the old Phil wreck technique to do progress it's going to look really crummy under aqua so please please please start using the progress bar control if you can't use the progress bar control we have an appearance primitive to make your life easier keep in mind that right now there is no way to get the appearance primitive to animate the way the progress bar doesn't aqua the actual sorry the actual progress bar control is the only way to get animation of the progress bar on aqua so a few of the controls you going to know and love have been enhanced slightly sliders and scroll bars support a new feature which is called scroll to hear scroll to hear work such that if you click in the page up or page down area of the scroll bar the thumb jumps automatically to that location you can start tracking the sum from that location like right likewise for sliders you can click in the middle of the slider track and the Sun will jump automatically there of course if you don't like that behavior you can always option click in the track and you'll get the same behavior used to on normal mac OS and I believe there's a preference in the Preferences application that allows you to toggle the default setting now scroll to here is only available for live tracking variants of the controls there's a couple technical reasons for it but in general just start using the live tracking variants of the controls this is good for a couple reasons not only do you get the scroll to hear behavior but also you're going to fit in a little bit better with the overall aqua experience which is about providing immediate live feedback to the user it's much more satisfying if you can click on a scroll bar and start scrolling it and see the content move immediately so please please please use the live variants if you had a chance to play with any dialogues under aqua you've seen that our default button no longer has a ring around it instead it pulses this happens automatically when you use the push button control so long is that push button control has been tagged as the default button it's a couple ways to do that they set dialogue default item API is one way and that API is been around for a long time if you have a dialogue the simplest ways just you sit dialogue default item if you don't have a dialogue there's actually two options the first and most high level option is to call set window default button you can call that on any button in a window obviously only call it on the one button you intend to be the default alternatively you can call set control data with a special tag and some special data on an individual control to do it as well but in general it's easier to just stick to the the dialogue and the window versions of the api's so one important note I should make about default buttons is that a lot of your application code tends to depend on the old behavior of the toolbox in Mac OS 8 in Mac OS 9 where we we patch quick-draw to determine if you're calling frame around wrecked and when we see that around to control we go and we tag it as a default button automatically behind your back for you and that was intended to allow you to transition to the Platinum appearance a little bit easier but you know what Mac os10 you can't patch and we're in the same boat as you guys so we can't patch quick draw anymore and if you're calling frame around wrecked around your default button you're going to get around wreck around your default button it's going to look kind of bad and as I mentioned before the progress bar now animates this is good because it it gives the user a better indication that your machine is actually live and still running even if your progress bar isn't updating you know maybe it's hit a snag in the internet connection if you're downloading a file or something like that still gives the user some feedback so the appearance manager under akhlagh to a certain extent had to be gutted and rewritten from scratch we did this so that we could take advantage of the cool drawing services that quartz provides and additionally we obviously needed to offer some new api's to your applications so that you could render your widgets manually using in an aqua savvy way and I give you one example of that before and that was the theme text api's we've got a few others as well so the new controls that we're offering are obviously backed by new appearance primitives and if there isn't a primitive a primitive that directly applies to that control we've probably enhanced draw theme button to take care of that particular widget there are a number of new theme button kinds that are used with the draw theme buttons API one particularly interesting constant is the K seamless header button right now that's the only way to draw a list header button the way you see in data browser in the finder in Sherlock we don't offer control to do that yet hopefully data browser we serve your needs but if we do find some needs if you do find it necessary to draw those buttons on your own we can probably do some kind of control for you just let me know of course we have themed button constants for all the standard controls all the new standard controls I just showed you like the round button and the disclosure button and things of that nature so a Makela spa 85 we threatened to start doing themes with patterns in them but we didn't really follow through with that well now we followed through with it in aqua we actually have themed brushes that don't just represent RGB colors they represent pattern and if you want to draw backgrounds of either dialogues or windows or certain controls like tabs and placards in a theme savvy way you'll need to use these same brushes additionally if you're trying to save and restore the graphics environment around a call to say draw theme button you'll need to use some api's we added in mac OS 85 dealing with drawing states these drawing state api's are a encapsulated way to save and restore and normalize the drawing state in a way that's completely pattern savvy so I suggest you start adopting these immediately if if you find that your application comes up and patterns aren't quite aligned right or don't look quite the right color it may actually be the necessity for your code to adopt these drawing state api's so this is it this is your chance your application could be the first one of its class to go out and adopt the Aqua interface and that would mean that that's what when customers are clamoring for because everybody wants to use the cool new stuff on Mac OS 10 we've tried to make that as easy as possible for you to adopt of course if you use the standard system menus controls and dialogues you're going to get most of this stuff for free if you're already that far great you only have a couple of the steps you'll need to take the obvious choices are taking advantage of sheets in any way you possibly can you'll want to use nav services and printing and their sheet support if you have custom sheet support you know you can use the sheet ati's we're introducing directly in the toolbox and then you want to relay out for aqua to make your stuff look good most importantly is probably the menu bar layout so that you can give the user and overall good experience and an intuitive sense of where to find the right items in the menu bar then you want to relight your dialogues to look good with the new aqua metrics so with that I'd like to bring up John Glenn Vita lead us through the roadmap and from QA thanks guy so there's quite a few sessions that kind of relate to this stuff that's specifically disease to these api's but that relate to other OCH wave guys or other Mac os10 API is that effect to the user experience one is already passed which is the Aqua overview 140 using interface builder is interface bill is a great tool for prototyping your applications on 10 and getting the right look under aqua guy referred to data browser for this list manager on steroids so to speak control that you can build in your applications and get finder like lists and that type of behavior that's in the data browser session icon services in aqua 147 on Thursday that's a session you need to go to to learn how to create great icons take advantage of icon services API is to show those icons at different sizes etc navigation services is talks about the open and save dialogues and new API is in that regard and finding out how to do the proper open and save dialogues under 9 and 10 with the new API is that are there and getting the right look and feel sheets etc for opening and opening a file Apple help again like I said in other sessions HTML help is the way to go with help on Mac OS 10 so that's the session you need to go to we're going to talk about help api's but also how to author the HTML help in the right way application packaging and document typing session 144 it's not so much about the visual user experience of aqua but it relates to the packaging model on Mac OS 10 which is a user experience related issue and you also need to know about the new document typing and file naming conventions that are on Tim and how that affects you and your users in your application development and section 143 carbon enhancements one as well as carbon enhancements to which go into a little bit more depth than some of the api's let guys talked about and also talk about other API is in Mac OS 10 that affects the user experience that you're going to deliver and then of course the aqua feedback forum which we're really looking forward to and we're going to invite you to attend as well as the high-level toolbox feedback forum for giving a guy and his team and the hydel select team a feedback on high-level toolbox api's they've been discussed today and in other sessions so those sessions that you should think about attending and we would encourage you to attend so who do you contact for more assistance as a developer first of all myself if you need assistance in understanding aqua or understanding how to do an application that really is going to take advantage of the rich elegant user experience of aqua please you know get in touch with me specific to API issues if you have requests for new API is under carbon or changes to api's or those sorts of things the other contact is David Wright both of us are in the world wide developer relations organization and we'd encourage you to contact us with developer related issues around this topic so I'd like to invite the high level toolbox team up on stage for the Q&A and if they're 80
