New WPF 4.0 Features
24 June 09 06:35 PM | text | 1 Comments   

WPF 4.0 Beta1 was released last month. While many exciting features were included in Beat1, there was no work targeting text, flow, or layout. This will all be reversed with WPF Beat2. Below is a brief overview for each of the features included in Beta2 which target text, flow, or layout. I will make subsequent posts giving more detail about each feature, including API details. For now, I just want to let everyone know that great features are coming!

 

 

Text clarity improvements

In previous versions of WPF, all text is formatted without specifically accounting for pixel boundaries. This approach provides uniform scalability and ensures that glyph outlines adhere to font specifications. Unfortunately, small text appears blurry when it is rendered across pixel boundaries, and this has affected our customers.  In the past, we have only been able to say “we are working on a fix.”  Now I can tell you that this is solved in WPF4.0!

 

As of Beta2, WPF provides developers with the ability to control how text is both formatted and rendered. Text can now be formatted to either strictly adhere to font specifications or fall on pixel boundaries. This new option allows text to be rendered more clearly at the slight expense of glyph shape and position.

 

The option to set the rendering mode for text (eg, aliased, grayscale, ClearType) is also conveniently exposed. In most situations ClearType is an obvious win; however ClearType can degrade the user experience on CRTs and for people whose eyes are color sensitive. In the past, WPF forced all apps to use ClearType. Now, developers can choose between two additional rendering modes.

 

 

A Bindable Run

The inability to bind Run.Text has forced many people to create home brew solutions. In WPF4.0, Run.Text has been converted to a Dependency Property.  Run.Text now enjoys most of the benefits that come with this change, such as the ability to be bound, styled, and templated.

 

One-way binding is fully supported. Unfortunately, we did not have time to implement full support for two-way binding. This scenario is supported if a run is only modified through the property system, but not when the run is modified via a RichTextBox or the text object model.

 

 

LayoutRounding 

WPF’s layout engine frequently causes subpixel rendering along element boundaries. This can lead to both rendering artifacts and blurry rendering, as antialiasing causes subpixel rendered elements to be displayed over multiple actual pixels. A classic example of this problem is small icons which get blurred because the icon images are placed on subpixel boundaries. Enabling LayoutRounding forces the WPF layout engine to place elements on whole pixel boundaries, thus removing most of the rendering artifacts caused by this problem.

 

 

Caret and Selection Brush

The default visual appearance of most objects in WPF can be easily tweaked or completely changed.  This provides developers far greater power over the visual look of an application than ever before. Facilitating the creation of highly customized apps has become a major adoption point for WPF. Despite WPF’s extensibility, the color of text selection and carets in text boxes and document viewers remains baked into the framework. WPF now exposes properties to control the brushes used to paint text selection and carets.

 

 

-Chipalo

Introducing the DirectWrite Font System
15 April 09 09:00 PM | text | 3 Comments   

Hi, my name is Niklas Borson and I’m a developer on the DirectWrite team at Microsoft. DirectWrite has multiple layers of functionality, including text layout, script processing, glyph rendering, and the font system. In this post, I’d like to talk about some of the thinking behind the design of the font API in DirectWrite, and how it differs from GDI.

Logical vs. Physical Fonts

It will be helpful in the discussion that follows to distinguish between logical and physical fonts. Of course you might argue that fonts were really only “physical” back in the days of metal type. However, what I mean by a physical font in the context of computer typography is the actual data that defines the appearance of text in a particular font. A physical font can be represented as an OpenType file on your hard disk or as a virtual file embedded in a document.

A logical font, on the other hand, is something closer to a typical user’s conception of a font. Users rarely deal directly with font files. If you’re using a word processor, you select the name of a font family from a list. If you want to make the text bold you click a button or check a box. Doing so might mean the text is rendered using timesbd.ttf instead of times.ttf, but you neither know nor care about that. Thus, a logical font is not really the font itself, but a set of abstract properties that describe the font you want.

The reason for making this distinction is that different application scenarios naturally fit at one level or another. If you just want to draw some simple text on the screen, it makes sense to work at the logical font level – for example, just specify “Times New Roman” and let the text formatting engine handle the details. Among those details are what to do if times.ttf can’t render some of the characters you specify. Since you’re working at the logical font level, the text formatting engine has the flexibility to fall back to a different physical font.

On the other hand, some applications need to work with fonts at a lower level. For example, if an application implements its own text formatting engine, it ultimately needs a physical font so it can map Unicode characters to glyphs (character shapes), position the glyphs, and render them.

The level of abstraction affects a developer’s expectations of an API. At a high level, it can be helpful if an API just “does the right thing,” even if that means making certain decisions for you like falling back to a different font. However, developers using low-level APIs tend to value control and predictability more than convenience. For example, glyph indices are font-specific – they don’t have a standard meaning like Unicode characters – so if you’re rendering glyph indices you really want to know exactly what physical font will be used.

Fonts in GDI

In GDI, one typically creates a font by filling in a LOGFONT structure and then calling CreateFontIndirect, which returns a font handle (HFONT). As you would expect from the name, a LOGFONT structure is a logical font – i.e., merely a set of properties that describe the font you want. What might surprise you is that an HFONT is also a logical font. For example, you can fill in a LOGFONT with a face name of “Fred” and successfully create an HFONT from it, whether or not a font named “Fred” actually exists. If you draw some text using that HFONT, GDI will look for a matching physical font to draw the text with. If it doesn’t find a “Fred” it will use some other font. This font mapping process is entirely internal to GDI and there’s no way for an application to determine the physical font it used.

As described above, there are a lot of application scenarios where working at the logical font level makes sense, and HFONT works well for this. For applications that need to work with fonts at a lower level, GDI does have some functions that can really be thought of as physical font APIs. Examples are GetFontData, GetGlyphIndices, and even ExtTextOut when used with the ETO_GLYPH_INDEX flag. Yet these “physical” font functions still use an HFONT to specify the font. This means font mapping still occurs under the hood, though since no text is specified there is no font fallback and the same HFONT always maps to the same physical font internally. While this model works, the lack of a true physical font object in GDI can make it harder for application developers that use these low-level functions to be sure of what is going on.

Fonts in DirectWrite

DirectWrite has multiple layers of functionality, in which the lowest layers are intended to provide a solid foundation on which higher-level services can be built. The lowest layer of the font API is the IDWriteFontFace interface, which represents a physical font. This interface exposes low-level methods for getting glyph metrics, glyph indices, and so on. It is also used with other low-level APIs for complex script analysis and glyph rendering. Because a physical font encapsulates font data, you create an IDWriteFontFace object by specifying the source of the data: an IDWriteFontFile object.

We thought about introducing another interface to represent a logical font. However, after a lot of thought and discussion, we eventually concluded that a so-called “logical font” isn’t really a font at all, but merely a set of properties used to select a font. Also, since these logical font properties are inputs to the text formatting process, the appropriate place to specify them is in the text formatting API. Thus, DirectWrite’s nearest equivalent to GDI’s LOGFONT structure is the IDWriteTextFormat interface, which has properties for font family name, font weight, font style, font stretch, and font size. You can also set each of these properties individually on ranges of text after creating an IDWriteTextLayout object.

In between those two layers is the font collection API. A font collection is simply a set of fonts, which can be either the system font collection (i.e., the set of installed fonts) or a custom font collection (i.e., a set of fonts enumerated by an application-defined callback). Font collections are organized hierarchically. The collection itself contains a list of font families each of which contains a list of fonts. An application can use the font collection API to implement a font selection UI such as a font dialog box.

The reason I say the font collection API is “in between” the logical and physical layers is that it can serve as a bridge between the two. Suppose you were implementing your own text formatting engine. As inputs you would take logical properties like family name, weight, etc., from which you would somehow need to obtain a physical font. The font collection API provides lookup methods that enable you to find the physical font that best matches to a given set of properties. By way of analogy, you could think of a font collection as a database, a physical font as a record in the database, and a logical font as a query.

Both the physical font API and the font collection API have extensibility mechanisms. You create a physical font object from an IDWriteFontFile interface, but this interface doesn’t have to be a conventional Win32 file. It can be a virtual file implemented in terms of callbacks you define. Similarly, you can also create a custom font collection by implementing a callback interface that enumerates font files. This allows you to format and render text using application-defined fonts without having to install them first. Because the custom font collection is completely separate from the system font collection, this approach also avoids any naming conflicts that might otherwise arise between your custom fonts and fonts already installed on the system.

Weight/Width/Slope Font Model

One final difference I should mention between DirectWrite and GDI concerns the way fonts are grouped into font families. DirectWrite uses the Weight/Width/Slope font model, which means you can have any number of fonts in the same font family as long as each can be uniquely differentiated by weight, stretch (aka. width), and/or style (aka. slope). This is the same model used by WPF, as described in an earlier blog post about the WPF font selection model.

To give a specific example, if you enumerate font families using GDI’s EnumFontFamiliesEx function, you’ll find that the following are all enumerated as separate family names by GDI:

  • Franklin Gothic Book
  • Franklin Gothic Demi
  • Franklin Gothic Demi Cond
  • Franklin Gothic Heavy
  • Franklin Gothic Medium
  • Franklin Gothic Medium Cond

In DirectWrite, “Franklin Gothic Book” is a separate family, but all of the other fonts are grouped into a single font family called “Franklin Gothic.” In GDI, you’d specify the demi-bold condensed font using the name “Franklin Gothic Demi Cond”. If you did the same thing with DirectWrite, you’d find that the family name wasn’t recognized and DirectWrite would fall back to another font entirely like Arial. Instead, you would specify “Franklin Gothic” as the family name, DWRITE_FONT_WEIGHT_DEMI_BOLD as the weight, DWRITE_FONT_STRETCH_CONDENSED as the stretch, and DWRITE_FONT_STYLE_NORMAL as the style.

If your application only uses DirectWrite then none of the above is likely to cause you any problems. After all, DirectWrite is internally consistent and won’t enumerate family names that it doesn’t recognize! However, you may need to take special care if you use DirectWrite in combination with another API. More on that below.

Interoperability with GDI

The DirectWrite font system has two levels of interoperability with GDI. First, at the logical font level, we provide round-trip conversions to and from GDI’s LOGFONT. Second, at the physical font level, there is a one-way conversion from an HFONT (selected into an HDC) to an IDWriteFontFace. All of these are exposed through the IDWriteGdiInterop interface.

The LOGFONT conversions exist to compensate for the fact that DirectWrite uses a different font model than GDI. As described in the previous section, you sometimes use a different name to specify a font in DirectWrite than you’d use to specify the same font in GDI. If you use both DirectWrite and GDI in the same application, you may need to convert the family name and other logical font properties back and forth between the two systems. The ConvertFontToLOGFONT and CreateFontFromLOGFONT methods enable you to do this. There is also a ConvertFontFaceToLOGFONT method, which takes a font face object as input but is otherwise functionally equivalent to the ConvertFontToLOGFONT method.

For example, suppose your application uses DirectWrite internally but also uses the Win32 common font dialog box. In this case, you would call CreateFontFromLOGFONT to convert the LOGFONT returned by the dialog box to an IDWriteFont object. From this you could get the logical font properties compatible with DirectWrite’s font system. A subtler example would be an application that uses DirectWrite internally but uses a file format that stores GDI-style font names. In this case, you might use CreateFontFromLOGFONT when reading from the file and ConvertFontToLOGFONT when writing to the file.

Warning: All of the LOGFONT conversions described above operate at the logical font level, which means they don’t offer the kind of strong guarantees you would expect from a physical font API. They are useful for the kind of high-level scenarios described in the previous paragraph but should not be used if you require a specific physical font. For example, you might be tempted to render a DWRITE_GLYPH_RUN using GDI by converting the fontFace member to a LOGFONT, creating an HFONT and selecting it into an HDC, and then using ExtTextOut with ETO_GLYPH_INDEX. Don’t do this! It is not guaranteed that GDI will select the same physical font as the fontFace member you started with, in which cases (since glyph indices are font-specific) you’ll get garbage output.

We do provide one conversion that works at the physical font level, but it works on only one direction: from an HDC to an IDWriteFontFace. It is intended for a very specific scenario. Suppose your application already has a complicated text formatting engine which uses GDI (and perhaps Uniscribe) and renders glyphs using ExtTextOut with ETO_GLYPH_INDEX. You don’t want to rewrite your whole text engine, but you’d like to use DirectWrite (or maybe Direct2D) for just the final step of rendering the glyphs. To do so, you would remove the ExtTextOut call, and instead call CreateFontFaceFromHdc to get an IDWriteFontFace object, which you could then use to render the glyph indices. Unlike the LOGFONT conversions described above, this method is guaranteed to yield the same physical font that would have been used by GDI to render the glyphs.

If you’ve made it this far, thank you for your attention! The DirectWrite font system does differ from the familiar GDI way of doing things, and I hope the above will help people understand how it differs and why. We all look forward to hearing what you think!

DirectWrite Questions and Answers
13 April 09 10:57 PM | text | 1 Comments   

Hi, my name is Mikhail Leonov, and I’m a Senior Software Development Engineer on the DirectWrite team at Microsoft. I would like to address common user feedback on DirectWrite in a relatively informal ‘simple question – simple answer’ format. Feedback themes were gathered mostly from the user comments on various DirectWrite related blogs. Please feel free to post additional questions in the comments section right after this blog post. Throughout this post, I will assume the reader is familiar with DirectWrite basics. This link provides a good starting point: http://channel9.msdn.com/pdc2008/PC18/.

DirectWrite from the programmer’s point of view
I want to experiment with DirectWrite in my application. How do I start using it?

DirectWrite can be used from native C++ code by including DWrite.h header file and linking to the DWrite.lib library. At the runtime, the application will automatically load DWrite.dll.

To start with, the application needs to call DWriteCreateFactory. The factory pointer returned by DWriteCreateFactory implements IDWriteFactory interface, which can be used to perform actions such as creating DirectWrite font and layout objects.

For more information, please refer to the introductory DirectWrite materials linked in the beginning of this post.

DirectWrite on pre-Windows 7 operating systems
My application needs to work on Vista and XP. Is using DirectWrite an option for me?

DirectWrite technology will ship first with Windows 7. After Windows 7 ships, DirectWrite will be made available for Windows Vista as well. There are no plans today to make DirectWrite available on Windows XP.

Microsoft platforms and applications using DirectWrite
Does Microsoft use DirectWrite in its own products? I installed Windows 7, and I don’t see natural ClearType anywhere on the screen.

DirectWrite is used by the Windows 7 ClearType Text Tuner control panel applet and by the XPS Viewer application. It is worth noting that DirectWrite is a new technology, and it takes time for customers to evaluate their existing text functionality and determine how to take advantage of DirectWrite.

Supported font formats
Does DirectWrite only support TrueType fonts? How about Type 1 fonts or bitmap fonts?

DirectWrite supports font files conformant to the OpenType specification version 1.5, which can be accessed here: http://www.microsoft.com/typography/otspec/default.htm. This support includes OpenType fonts with both TrueType and CFF outlines, and TrueType fonts with embedded bitmaps. Simply speaking, if your font has a TTF, OTF or TTC extension, DirectWrite should support it well.

DirectWrite does not support bitmap or vector .FON font files, and DirectWrite does not support Adobe Type 1 .PFM/.PFB font files.

Installed fonts, local fonts, embedded fonts, per user fonts
My application uses a custom font for certain user interface elements. Do I have to install it on the system in order for DirectWrite to be able to use it?

No, one doesn’t have to install a font in order for DirectWrite to be able to use it. DirectWrite provides full support for font files that are local to an application.

The application that uses DirectWrite needs to register its own IDWriteFontFileLoader interface implementation that manages the association between the font file location and contents. To support local font file enumeration functionality, the application needs to register its own IDWriteFontCollectionLoader interface.

Rendering technologies to use DirectWrite with
Can I use DirectWrite in my GDI+ application? How about using DirectWrite with Direct3D or GDI?

DirectWrite font stack is designed to be independent from any rendering technology, so clients have flexibility to use any existing rendering mechanism in their IDWriteTextRenderer implementation. In addition, DirectWrite is designed to work well with Direct2D rendering components, and Direct2D provides convenient wrappers such as ID2D1RenderTarget::DrawText() for drawing text on D2D surfaces.

DirectWrite itself provides GDI interoperability helpers via IDWriteGdiInterop interface. One can create a DirectWrite font face object that corresponds to a font selected in a GDI HDC and easily replace ExtTextOut(…, ETO_GLYPH_INDEX, …) calls with DirectWrite based glyph run drawing calls without requiring significant changes to the rest of the application code. One can also create a LOGFONT description for a DirectWrite font face object to re-use existing GDI based controls from a DirectWrite based text processing component. On top of that, one can create GDI surfaces that satisfy DirectWrite rendering requirements through IDWriteGdiInterop::CreateBitmapRenderTarget() method, and draw DirectWrite glyph runs on that surface using IDWriteBitmapRenderTarget::DrawGlyphRun() method.

Interoperability with GDI+ can be achieved via GetHdc() and FromHdc() methods provided by the GDI+ Graphics object. The client has a choice of starting with a Graphics object and only switching to HDC methods for DirectWrite interoperability calls, or starting with an HDC obtained from IDWriteBitmapRenderTarget::GetMemoryDC() and switching to Graphics object derived from it. Which of these two approached is the best depends on the application needs.

Applications that render using Direct3D usually need to obtain text in either bitmap or outline form. To get the former, the client can ask DirectWrite to produce alpha textures containing text using IDWriteGlyphRunAnalysis interface. To get the latter, the client can use IDirectWriteFontFace::GetGlyphRunOutline() method to produce a geometry containing text.

Rendering quality
How do I specify text rendering options in DirectWrite? I want to use the new natural ClearType for text paragraphs, while having text in my menus and buttons look like the rest of the operating system.

In your case, two different measuring modes should be used—DWRITE_MEASURING_MODE_NATURAL for text paragraphs, and DWRITE_MEASURING_MODE_GDI_CLASSIC for menu and button text. The measuring mode then gets passed to drawing calls such as ID2D1RenderTarget::DrawText() and DrawGlyphRun() as an input parameter. For clients who create IDWriteTextLayout themselves, DWRITE_MEASURING_MODE_NATURAL corresponds to calling IDWriteFactory::CreateTextLayout(), and DWRITE_MEASURING_MODE_GDI_CLASSIC corresponds to calling IDWriteFactory::CreateGdiCompatibleTextLayout() with useGdiNatural set to FALSE.

DirectWrite beta documentation
16 January 09 01:42 AM | text | 0 Comments   

There is now DirectWrite content in MSDN as part of the Win7 beta documentation.    The content includes overview docs, API reference and sample code.  If you have downloaded the Windows 7 beta, try out the DirectWrite APIs and send us your feedback either on this blog, or via the MSDN feedback dialog box, the “Send comments about this topic to Microsoft” link, as well as the Community Content section at the bottom of each topic.

-Sriram

DirectWrite
11 December 08 04:33 PM | text | 4 Comments   

Hello – my name is Sriram Subramanian and I am a Senior Program Manager on Windows 7 for text.  As you can see from the updated title – this blog will start discussing the new DirectWrite text APIs in Windows 7 in addition to the WPF text and layout functionality.   While I was at it, I thought it would be a good idea to update the theme also.

DirectWrite is being introduced in Windows 7 and  is one of the new additions to the DirectX family of APIs.   It provides the ease of use and the layered programming model for application developers to improve the text experience for their Windows applications.   This is largely driven by the fact that modern Windows applications have sophisticated requirements for text in their UI and documents. These include better readability, support for a large variety of languages and scripts, and superior rendering performance. In addition, most existing applications require a way to carry forward existing investments in the Win32® code base.    DirectWrite addresses these requirements.  Check out the DirectWrite whitepaper that was distributed at the PDC.

-Sriram

Filed under:
WPF Text Clarity Doc
18 August 08 07:25 PM | text | 7 Comments   

I have posted a doc about: problems inherent to rendering small text, how WPF tackles these problems, and workarounds that can be employed to mitigate some rendering problems until these issues are resolved. You can find it on WindowsClient.net here, check it out.

New Blog Admin
18 July 08 09:25 PM | text | 3 Comments   
Hi, my name is Chipalo, and I am a program manager on WPF. Unfortunately, Chris is no longer with Microsoft. I wanted to introduce myself because I have taken over his responsibilities and will be maintaining this blog in the future.
WPF 3.5 to support the languages of ~1 billion more people
19 September 07 05:39 PM | text | 1 Comments   

We're quite excited about our upcoming WPF 3.5 release which will now support seven Indic scripts!!

For those of you curious about what languages this implies, here's a mapping between scripts, languages, and fonts:

Script

Font

Languages

Devangari

Mangal

Hindi, Marathi, Sanskrit

Bengali

Vrinda

Bengali

Gujarati

Shruti

Gujarati

Gurmukhi

Raavi

Punjabi

Oriya

Kalinga

Oriya

Tamil

Latha

Tamil

Telugu

Gautami

Telugu

Kannada

Tunga

Kannada

Malayalam

Kartika

Malayalam

For other new upcoming features, check out Tim Sneath's blog.

Note: Indic script support is not available in the current public Beta, it will be available in the final release.

 -Chris Han

WPF TypeCon Workshop Material
06 August 07 09:34 PM | text | 0 Comments   

Thanks to all who attended TypeCon's Fonts and Typography in WPF workshop. We had a great time chatting with you all Thursday morning. In the below zip file you can find some of the material we went over in the lab. This includes:

1. The extremely useful WPF Layout and Font Quick Reference which lists and describes common typography and text layout related properties.

2. The completed version of the reflective textbox lab

3. Mikhail Leonov's presentation on WPF font model.

Also here are a couple links that may be helpful:

WPF Typography SDK page:http://msdn2.microsoft.com/en-us/library/ms742190.aspx 

The Sample OpenType Font Pack: http://msdn2.microsoft.com/en-us/library/ms746705.aspx

WPF forums: http://forums.microsoft.com/msdn/showforum.aspx?forumid=119&siteid=1

-Christine Ahonen, Chris Han, Mikhail Leonov, and Simon Daniels

 

Filed under: , ,
Attachment(s): WPF_TypeCon_Session.zip
Job opening in the Windows text team
12 June 07 06:08 PM | text | 0 Comments   

Hi everyone,

our team is seeking a strong developer to help us design and deliver world-class text processing components for the newer versions of Microsoft Windows.

To apply, please follow this link - http://members.microsoft.com/careers/search/details.aspx?JobID=33E1258A-46D7-4CA5-94D4-6BB426792B19

Thanks for your interest, and best regards,

Mikhail Leonov

WPF Text team

Microsoft Surface
30 May 07 05:22 PM | text | 1 Comments   

Unrelated to text, but extremely cool...

 Microsoft Chairman Bill Gates once talked about putting a PC on every desk. Now Gates is talking about turning the desk itself — or a tabletop — into a computer. Microsoft is set to announce an ambitious new computing category today called "surface computing" to try to make it happen.

The initiative, several years in the making, transforms an ordinary tabletop into a translucent, interactive façade. The surface can recognize cellphones, digital cameras, special ID-coded digital dominoes and other physical objects.

And it can respond to human touch. Kids can finger-paint digitally. Business travelers can dive into maps and surf the Web without a mouse or keyboard, by using simple touch gestures across the screen. In restaurant settings, you'll be able to order meals and play digital board games. At home, there may be no more fussing with the half-dozen remote controls sitting on your coffee table. That's because the table becomes the remote control.

http://www.microsoft.com/surface/

http://www.usatoday.com/tech/products/2007-05-29-microsoft-surface_N.htm

 

Silverlight Times Reader on a Mac
16 May 07 06:06 PM | text | 2 Comments   

You may have seen people on the subway or bus reading the New York Times on a tablet PC.  You might even use the reader yourself.  The reader has gotten some really impressive adoption since launching not long ago.  But you probably haven't seen anyone enjoying this amazing online/offline reading experience on a Macintosh.  Macintosh users aren't shy about pulling out their machines in public places, but the New York Times Reader hasn't been available for Mac.

Now that Silverlight is coming to the Mac, things are beginning to change.  Take a look at this demo of the New York Times Reader running in Safari on a Macintosh! 

A video interview of Kevin Gjerstad and I demonstrating a prototype of the Times Reader using Silverlight just got posted yesterday on the VisitMix front page, check it out.

Silverlight Times Reader Prototype

-Chris Han

 

The Art, Science, and Business of Killer Content Experiences MIX Session
01 May 07 08:15 PM | text | 2 Comments   

I hope some of you who are attending MIX were able to attend this talk this morning. If not, here's a short summary of the chat along with some screen shots of the Silverlight Times Reader prototype that was demo'ed during the talk.

  • Kevin Gjerstad, Group Program Manager of WPF, walked through some of the history of typography, the problems with reading today on screen, and how WPF aims to address those problems with features like multi-column layout, pagination, dynamic hyphenation, and optimal paragraph.
  • Robert Larson, VP of Product Development at the New York Times, walked through the WPF based Times Reader and the business model that they're employing with it. Also, the most exciting part -- at least for me -- was hearing about their user metrics. The most staggering statistic is that there's a average 7x increase in user page views when compared to the web site!
  • Warrick Fitzgerald, CTO at LiveTechnology, demonstrated WPF adaptive ads produced from their LiveAdMaker system. This system automates and drastically reduces the cost of producing WPF based ads that adapt to the ad space that they're given in the Times Reader.
  • Then Nathan Dunlap, Senior Iteractive Designer at IdentityMine, joined everyone on stage for an open panel Q&A.

One of the demos Kevin showed was a technology prototype using Silverlight to present the New York Times Reader. This prototype was shown on a Mac in Safari but can run on any device and browser Silverlight supports. The prototype uses a server side pre-pagination technique that sends down the content and layout data via XMLHttpRequest from a web server down to a client.

 Here are some screen shots of it:

Silverlight Times Reader Article

 


We'd love to get your feedback on this prototype. If you're here at MIX, stop by the sandbox and come find me if you want to take a closer look or chat about it.


Happy MIX'in,

Chris Han
 




 

BDM03 The Art, Science, and Business of Killer Content Experiences
Speaker(s): Kevin Gjerstad - Microsoft, Robert Larson - New York Times, Wayne Reuvers - LiveTech
Audience(s): Business Decision Maker
A new wave of Rich, Interactive Content Applications are emerging and are poised to revolutionize the way content is displayed, read and monetized on screen. Hear how various content applications were built and learn about the business goals and usability principles that drove design. Discover how to use the same principles and technologies to create a killer reading experience of your own. A panel of industry insiders, including guests from the New York Times, ad agencies, and design firms, will share their experiences and participate in a Q&A session about creating rich content experiences.


WPF font selection model
23 April 07 07:51 PM | text | 5 Comments   

Hi,
my name is Mikhail Leonov, I'm a developer on the WPF Text team.

WPF introduces a new font selection model that allows applications to select fonts using FontFamily, FontWeight, FontStyle and FontStretch properties. Customers often need to know how the information stored in the font files is mapped to these properties by the WPF engine, so we wrote a white paper that contains detailed explanation of the font mapping process in WPF. I hope this paper is useful to developers and font designers, and I'm looking forward to your feedback. The attached copy of the paper is in the PDF format, but I can also upload XPS and DOCX versions if needed.

Best regards,
Mikhail Leonov - MSFT

Fortes is back.
30 March 07 11:00 PM | text | 0 Comments   

Fil Fortes has restarted blogging on WPF flow & text topics. Lots of good posts including a bindable run conrol and discussions about inline: http://fortes.com

More Posts Next page »
Page view tracker