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