| <div> |
| |
| <h2>Applications / Framework</h2> |
| |
| <h3>ApplicationConfiguration API</h3> |
| |
| <p> |
| We introduced a new API to configure and start RAP applications programmatically. |
| This is an alternative to registering application entrypoints, themes, etc. as extensions. |
| With this new API it is now possible to write very write lightweight applications that do not |
| depend on the Eclipse UI stack (<code>org.<wbr/>eclipse.<wbr/>rap.<wbr/>ui*</code>) or the |
| the Equinox extension registry. |
| </p> |
| <p> |
| To configure an application, implement the new interface |
| <code>org.<wbr/>eclipse.<wbr/>rwt.<wbr/>engine.<wbr/>ApplicationConfiguration</code>: |
| </p> |
| <pre> |
| public class SimpleConfiguration implements ApplicationConfiguration { |
| |
| public void configure( Application application ) { |
| application.addEntryPoint( "/simple", SimpleEntryPoint.class, null ); |
| application.addEntryPoint( "/other", AnotherEntryPoint.class, null ); |
| application.addServiceHandler( "custom.id", new MyServiceHandler() ); |
| ... |
| } |
| } |
| </pre> |
| <p> |
| An application can be started programmatically using an <code>ApplicationRunner</code>: |
| </p> |
| <pre> |
| ApplicationConfiguration configuration = new SimpleConfiguration(); |
| ApplicationRunner runner = new ApplicationRunner( configuration, servletContext ); |
| runner.start(); |
| </pre> |
| <p> |
| ... or registered as an OSGi service (see below). |
| </p> |
| |
| <h3>OSGi Integration</h3> |
| |
| <p> |
| A new bundle <code>org.<wbr/>eclipse.<wbr/>rap.<wbr/>rwt.<wbr/>osgi</code> has been introduced |
| that integrates RAP with OSGi. |
| This bundle is now required for every RAP application in an OSGi environment, including |
| applications that use the Eclipse workbench. |
| </p> |
| <p> |
| When an <code>ApplicationConfiguration</code> is registered as an OSGi service, the rwt.osgi |
| bundle will auto-start an application with this configuration. |
| By default, the application is started in the root context path. |
| Using a service property, a custom context path can be selected. |
| The name of this service property is kept in the constant |
| <code>org.<wbr/>eclipse.<wbr/>rap.<wbr/>rwt.<wbr/>osgi.<wbr/>ApplicationLauncher.<wbr/>PROPERTY_CONTEXT_NAME</code>. |
| </p> |
| <p> |
| Here's an example of an application configuration registered as a declarative service using the |
| context path <em>example</em>: |
| </p> |
| <pre> |
| <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"> |
| <implementation class="com.example.SimpleConfiguration"/> |
| <service> |
| <provide interface="org.eclipse.rwt.application.ApplicationConfiguration"/> |
| </service> |
| <property name="contextName" type="String" value="example"/> |
| </scr:component> |
| </pre> |
| <p> |
| Alternatively, applications can also be started programmatically using the |
| <code>ApplicationLauncher</code>, which is made available as a service by the rwt.osgi bundle. |
| </p> |
| <pre> |
| ApplicationLauncher launcher = <em>... (acquire from service)</em> |
| HttpService httpService = <em>... (acquire from service)</em> |
| launcher.launch( configuration, httpService, httpContext, contextName, contextDirectory ); |
| </pre> |
| |
| <h3>Simplified RWT Startup</h3> |
| |
| <p> |
| RWT applications are now also configured using the new ApplicationConfiguration API. |
| The former init parameters have been replaced by one parameter that accepts the fully qualified |
| class name of an <code>ApplicationConfiguration</code> implementation. |
| The name of this init parameter is kept in the constant |
| <code>ApplicationConfiguration.<wbr/>CONFIGURATION_PARAM</code>. |
| Here's an exemplary web.xml snippet: |
| </p> |
| <pre> |
| <context-param> |
| <param-name>org.eclipse.rap.applicationConfiguration</param-name> |
| <param-value>com.example.ExampleConfiguration</param-value> |
| </context-param> |
| <listener> |
| <listener-class>org.eclipse.rwt.engine.RWTServletContextListener</listener-class> |
| </listener> |
| </pre> |
| <p> |
| The <code>RWTServletContextListener</code> needs to be registered so that RWT is notified when |
| the servlet context is created. |
| For more information, check the |
| <a href="http://eclipse.org/rap/developers-guide/">developer's guide</a>. |
| </p> |
| |
| <h3>EntryPoint Parameters</h3> |
| |
| <p> |
| Some properties of the application, such as the theme, the page title, or the favicon, can |
| already be customized in a branding extension. |
| The new ApplicationConfiguration API provides a more general concept for those customizations, |
| accepting a simple property map for entry points. |
| The property names for the default web client are defined by the new class |
| <code>org.<wbr/>eclipse.<wbr/>rwt.<wbr/>client.<wbr/>WebClient</code>. |
| Other client implementations can provide their own properties. |
| Here's an example how to use it: |
| </p> |
| <pre> |
| Map<String, String> properties = new HashMap<String, String>(); |
| properties.put( WebClient.THEME_ID, "com.example.mytheme" ); |
| properties.put( WebClient.FAVICON, "images/favicon.png" ); |
| application.addEntryPoint( "/example", entryPointFactory, properties ); |
| </pre> |
| |
| <h3>EntryPoints by Path</h3> |
| |
| <p> |
| So far, entrypoints have been registered with a <em>name</em> and have been available at a URL |
| like this: |
| </p> |
| <pre> |
| http://hostname/context/rap?startup=<em><entryPointName></em> |
| </pre> |
| <p> |
| Both, the servlet name “rap” and the parameter name “startup” were hard-coded in RWT. |
| A branding had to be used to map the entrypoint to a custom URL. |
| Now, the extension point <code>org.<wbr/>eclipse.<wbr/>rap.<wbr/>ui.<wbr/>entrypoint</code> |
| supports a new attribute <code>path</code> that allows to register an entrypoint for a given |
| path: |
| </p> |
| <pre> |
| <extension |
| point="org.eclipse.rap.ui.entrypoint"> |
| <entrypoint |
| id="org.example.exampleEntryPoint" |
| class="org.example.ExampleEntryPoint" |
| path="/example" /> |
| </extension> |
| </pre> |
| <p> |
| This example shows how an entrypoint is registered for the path <em>/example</em>. |
| The application will be available at: |
| </p> |
| <pre> |
| http://hostname/context/example |
| </pre> |
| <p> |
| This method is encouraged and meant to replace the registration using a parameter. |
| Also with the new <code>ApplicationConfiguration</code> API, entrypoints are registered by path. |
| </p> |
| |
| <h3>New Operation Mode for JEE Compatibility</h3> |
| |
| <p> |
| In order to provide full compatibility to SWT, the SWT threading model has to be emulated very |
| closely. |
| To make this possible, RWT starts a separate UI thread for every user session and executes all |
| application code in this thread by default. |
| This carries the consequence that application code cannot directly access JEE transaction or |
| security contexts, which are only available on the original request thread. |
| </p> |
| |
| <p> |
| However, this exact compatibility to SWT is only required by code that uses SWT's few blocking |
| APIs. |
| The most obvious case are blocking dialogs (i.e. calling dialog.open() will suspend code |
| execution until the dialog is closed by the user, and then return a value). |
| The Eclipse workbench needs full SWT compatibility, but most other applications benefit from |
| a simple, lightweight operation mode that does not start these separate threads. |
| Instead of using the blocking APIs, those applications can use a callback pattern. |
| </p> |
| |
| <p> |
| To support those lightweight applications, RWT now has two exchangeable <em>operation modes</em> |
| called <em>SWT compatibility</em> and <em>JEE compatibility</em>. |
| The JEE compatibility mode is encouraged for new applications that do not use the workbench, |
| because it is simpler, consumes less server resources and complies with the requirements of JEE. |
| It is also the default for applications using the new ApplicationConfiguration API. |
| The operation mode can be configured in the ApplicationConfiguration: |
| </p> |
| <pre> |
| public void configure( Application application ) { |
| application.setOperationMode( OperationMode.SWT_COMPATIBILITY ); |
| ... |
| } |
| </pre> |
| <p> |
| An important consequence of the new JEE compatibility mode is that the method |
| <code>Display.sleep()</code> is not supported. |
| Applications must omit the SWT main loop in the entrypoints. |
| </p> |
| <p> |
| Applications that are started using extension points always run in the SWT compatibility |
| mode. |
| </p> |
| <p> |
| For more detailed information, please check the |
| <a href="http://eclipse.org/rap/developers-guide/">developer's guide</a>. |
| </p> |
| |
| <h3>Failover and Clustering Support</h3> |
| |
| <p> |
| With the new JEE compatible mode, RWT also supports transparent session failover. |
| This enables RWT standalone applications to run in a high-availability cluster. |
| </p> |
| <p> |
| In order to replicate sessions between cluster nodes, all classes in RWT whose instances will |
| have session scope are now serializable. |
| Note that application code must also be prepared for clustering by making all objects that live |
| in the session scope serializable. |
| </p> |
| <p> |
| Serializable RWT sessions can also be used to swap inactive sessions onto disk and thereby |
| releasing the memory consumed by them. This allows for infinite session timeout settings |
| and saves users from annoying 'the session has timed out' messages. |
| </p> |
| <p> |
| Clustering of OSGi applications is not yet supported. |
| For further details, please check the |
| <a href="http://wiki.eclipse.org/RAP/RWT_Cluster">Cluster wiki page</a>. |
| </p> |
| |
| <h2>Network / Communication</h2> |
| |
| <h3>New Client/Server Protocol</h3> |
| |
| <p> |
| The communication between server and client has been replaced with a new, JSON-based format. |
| With this new protocol, RAP now provides for exchangeable client implementations. |
| RAP clients can be developed in any language and for any platform. |
| The new protocol also makes the responses much more readable and eases debugging. |
| </p> |
| <p> |
| <img class="framed" src="images/Firebug-JSON.png" /> |
| </p> |
| <p> |
| The exact format is described in the |
| <a href="http://wiki.eclipse.org/RAP/Protocol">RAP Protocol wiki page</a>. |
| </p> |
| |
| <h3>UICallback Improvements</h3> |
| |
| <p> |
| The UI callback was redesigned and made more robust. |
| </p> |
| <p> |
| When a callback request fails, the client sends a new callback request to re-establish |
| the broken callback connection. To avoid unnecessary load on the client, retry requests |
| are sent with a suitable delay. |
| </p> |
| <p> |
| On some servlet engines, an active UI callback prevented the session from expiring. This |
| has been solved so that applications can activate the UI callback without interfering |
| with the session timeout. |
| </p> |
| <p> |
| The <a href="http://wiki.eclipse.org/RAP/UI_Callback">Server Push wiki page</a> |
| summarizes how the mechanism works internally. |
| </p> |
| |
| <h2>Target Platform Changes</h2> |
| |
| <h3>q07 Fragment removed</h3> |
| |
| <p> |
| The fragment <code>org.<wbr/>eclipse.<wbr/>rap.<wbr/>rwt.<wbr/>q07</code> is no longer needed |
| and has been removed. |
| The contents have been merged into the <code>org.<wbr/>eclipse.<wbr/>rap.<wbr/>rwt</code> |
| bundle. |
| </p> |
| <p> |
| The q07 fragment had originally been introduced to be able to support different versions of |
| the qx client library. Meanwhile, we decided to maintain and evolve our own copy of this |
| client library |
| (<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=320993">bug 320993</a>), |
| so the fragment is not needed anymore. |
| Moreover, the new protocol provides a more flexible way to support alternative clients. |
| </p> |
| |
| <h3>New rwt.osgi Bundle</h3> |
| |
| <p> |
| The RWT OSGi integration bundle <code>org.<wbr/>eclipse.<wbr/>rap.<wbr/>rwt.<wbr/>osgi</code> |
| has been added to the RAP runtime. |
| Please remember to include this bundle in your configuration for all OSGi-based applications. |
| </p> |
| |
| <h3>Eclipse 4.2</h3> |
| |
| <p> |
| The RAP 1.5 target platform is based on Eclipse 4.2 (Juno). |
| However, RAP does not yet provide an integration with the 4.2 workbench. |
| The RAP implementation of the Eclipse workbench is still based on 3.x. |
| </p> |
| <p> |
| There are a couple of important changes to the target platform. |
| </p> |
| |
| <ul> |
| <li> |
| The target now contains the <strong>Servlet 3.0</strong> API. |
| Although the <code>javax.<wbr/>servlet</code> bundle has a 3.0 version, it exports packages |
| as version 2.6.0 to comply with the OSGi versioning rules |
| (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=360245">bug 360245</a>). |
| </li> |
| <li> |
| The target platform includes <strong>Jetty 8</strong> instead of Jetty 6. |
| This is not just a change of the version number, also the package names have changed |
| from <code>org.mortbay.jetty</code> to <code>org.eclipse.jetty</code>. |
| Since the Jetty project decided to split their code into smaller modules |
| there are now seven Jetty bundles required instead of two. |
| </li> |
| <li> |
| The platform now includes a new OSGi console based on the Apache <strong>Felix Gogo</strong> |
| project. |
| Therefore, the basic target platform for RAP applications now contains three more bundles |
| from Apache Gogo |
| (<code>org.<wbr/>apache.<wbr/>felix.<wbr/>gogo.*</code>) to support it. |
| </li> |
| </ul> |
| <p> |
| Please adapt your launch configurations to these changes as needed. |
| </p> |
| |
| <h3>Runtime Feature Split</h3> |
| |
| <p> |
| The runtime repository now contains two different features: |
| The first one contains all bundles provided by the RAP project. |
| The other feature provides a selection of bundles from the Juno platform that are |
| required for a complete RAP target platform. |
| If you want to create a simple RAP target platform, you'll need both. |
| </p> |
| <p> |
| This split will make it easier to work with mixed targets. |
| If you already have the Equinox Core SDK and Jetty, you'll only need to add RAP itself. |
| This way, you prevent duplicate bundles in your target platform. |
| </p> |
| |
| <h2>Widget Set</h2> |
| |
| <h3>Shared JavaScript Implementation of Tree and Table</h3> |
| |
| <p> |
| Tree and Table are now using the same JavaScript implementation on the client. This allowed us |
| to fix a lot of <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=332524#c0">bugs</a> and |
| gave the Table a small performance boost. It also makes it very easy for us to always enable new |
| features for both widges on the same time, like fixed columns and markup. |
| </p> |
| |
| <h3>Markup Support</h3> |
| |
| <p> |
| For a selection of widgets, simple HTML markup is now accepted in the <code>setText()</code> |
| method. Currently supported widgets are <code>TableItem</code>, <code>TreeItem</code>, |
| <code>List</code>, <code>Label</code> and <code>CLabel</code>. |
| </p> |
| <p> |
| <img class="framed" src="images/Markup-Table.png" /> |
| </p> |
| <p> |
| To enable markup support for a widget, use the new constant |
| <code>RWT.MARKUP_ENABLED</code> in the <code>setData()</code> method. |
| This must be done directly after creating the widget and cannot be changed later. |
| Here's a code example: |
| </p> |
| <pre> |
| Table table = new Table( parent, SWT.BORDER ); |
| table.setData( RWT.MARKUP_ENABLED, Boolean.TRUE ); |
| TableItem item = new TableItem( table, SWT.NONE ); |
| item.setText( "Some <em>text</em> with <strong>markup<strong>" ); |
| </pre> |
| <p> |
| The markup will be validated on the server. Currently, the following HTML elements |
| area allowed: |
| </p> |
| <ul> |
| <li> |
| most <strong>inline elements</strong> like |
| <code><em></code>, |
| <code><strong></code>, |
| <code><big></code>, |
| <code><small></code>, |
| <code><sup></code>, |
| <code><sub></code>, |
| <code><del></code>, |
| <code><ins></code>, etc. |
| </li> |
| <li> |
| <strong>linebreaks</strong> |
| using <code><br/></code> |
| </li> |
| <li> |
| <strong>images</strong>: |
| <code><img src="images/example.png" width="16" height="16" /></code>, |
| width and height are obligatory |
| </li> |
| <li> |
| <strong>links</strong> like |
| <code><a href="http://eclipse.org">Eclipse</a></code>. |
| To open the linked page in a new tab, you can use the <code>target</code> |
| attribute. |
| </li> |
| </ul> |
| <p> |
| See the JavaDoc for <code>RWT.MARKUP_ENABLED</code> for further information. |
| You can try it out in our updated demo on the |
| <a href="http://rap.eclipsesource.com/rapdemo/examples#rich-label">Rich Labels</a> page. |
| Check out the |
| <a href="http://rap.eclipsesource.com/rapdemo/examples#table-markup">Table with markup</a> |
| page as well. |
| </p> |
| |
| <h3>Custom Item Height</h3> |
| |
| <p> |
| When you use markup in a Table or a Tree, you may want to set a fixed item height manually. |
| To do so, you can use the new <code>setData()</code> constant |
| <code>RWT.CUSTOM_ITEM_HEIGHT</code>: |
| </p> |
| <pre> |
| table.setData( RWT.CUSTOM_ITEM_HEIGHT, Integer.valueOf( 62 ) ) |
| </pre> |
| <p> |
| A custom item height must be set directly after creating the widget and cannot be changed |
| later. |
| </p> |
| |
| <h3>Virtual Tree</h3> |
| |
| <p> |
| The server-side part of the Tree widget was considerably improved and optimized. Now, |
| a Tree with SWT.VIRTUAL style can handle huge item counts without performance degradation. |
| </p> |
| <p> |
| For a live demo, check out the tab called <em>Complex Data</em> in our |
| <a href="http://rap.eclipsesource.com/">Examples demo</a>. |
| </p> |
| |
| <h3>Fixed Table Columns</h3> |
| |
| <p> |
| It's now possible to exclude a given number of leftmost table columns from horizontal |
| scrolling. |
| This is very useful for tables that have a lot of columns, with the first column(s) |
| containing some kind of heading or key value (e.g. a person's name) that should always be |
| visible. |
| </p> |
| <p> |
| <img class="framed" src="images/FixedColumns.png" /> |
| </p> |
| <p> |
| For more details, see the JavaDoc on <code>RWT.FIXED_COLUMNS</code>. |
| </p> |
| |
| <h3>Multiline Headers for Tree and Table</h3> |
| |
| <p> |
| <img class="framed" src="images/MultilineHeaders.png" /> |
| </p> |
| <p> |
| <code>TableColum</code> and <code>TreeColumn</code> now respect line breaks. |
| No special setting is required. When the text of a header contains a linebreak character |
| (<code>\n</code>), the line break will be rendered and the column height will be adjusted |
| automatically. |
| </p> |
| |
| <h3>Non-blocking Script Evaluation for Browser</h3> |
| |
| <p> |
| The <code>Browser</code> widget provides two methods to execute JavaScript, |
| <code>execute()</code> and <code>evaluate()</code>. |
| Both methods are blocking and won't work with the new <code>JEE_COMPATIBILITY</code> mode. |
| </p> |
| <p> |
| Therefore, a new utility class <code>BrowserUtil</code> has been introduced to evaluate |
| JavaScript in a Browser widget in a non-blocking way. |
| Instead of waiting for the script to be executed, you provide a |
| <code>BrowserCallback</code> implementation that will be notified when the evaluation has |
| completed: |
| </p> |
| <pre> |
| Browser browser = new Browser( parent, SWT.NONE ); |
| ... |
| BrowserUtil.evaluate( browser, script, new BrowserCallback() { |
| public void evaluationSucceeded( Object result ) { |
| } |
| public void evaluationFailed( Exception exception ) { |
| } |
| } ); |
| </pre> |
| |
| <h3>Arrow Buttons</h3> |
| |
| <p> |
| Finally, we support the <code>SWT.ARROW</code> style flag for <code>Button</code>. |
| This style is used together with one of <code>SWT.TOP</code>, <code>SWT.BOTTOM</code>, |
| <code>SWT.LEFT</code>, or <code>SWT.RIGHT</code> to create buttons with an arrow symbol. |
| </p> |
| <p> |
| <img class="framed" title="Arrow Buttons in RAP" src="images/ArrowButtons.png" /> |
| </p> |
| <p> |
| Of course, the style of arrow buttons can be configured in a theme: |
| </p> |
| <pre> |
| Button[ARROW] { |
| border: 1px solid #bdbdbd; |
| padding: 10px; |
| } |
| |
| Button-ArrowIcon[UP] { |
| background-image: url( theme/images/arrow-up.png ); |
| } |
| </pre> |
| |
| <h2>Event System</h2> |
| |
| <h3>Filtering Key Events for Widgets</h3> |
| |
| <p> |
| The <code>RWT.ACTIVE_KEYS</code> constant has been |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=343248">introduced in RAP 1.4</a> |
| to allow for key bindings. |
| Now this constant can also be used to limit the keys that will trigger a key event on a |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=346597">single widget</a>. |
| This means that when a key-listener is attached to a widget, |
| it's now possible to choose beforehand which keys will trigger events. |
| This can drastically reduce the traffic caused by key-events. |
| For more details, see the JavaDoc on <code>RWT.ACTIVE_KEYS</code>. |
| </p> |
| <!-- TODO example --> |
| |
| <h3>Suppressing Default Actions for Keys</h3> |
| <!-- RWT.CANCEL_KEYS allows to suppress default key event operations --> |
| |
| <p> |
| The new constant <code>RWT.CANCEL_KEYS</code> can be used to specify a |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367079">list of keys to be cancelled</a>. |
| Instead of dynamically cancelling events by setting the <code>doit</code>-flag to |
| <code>false</code> in a <code>KeyListener</code>, this allows to do the same thing in a |
| static way. |
| When CANCEL_KEYS are defined, this will suppress the default operation associated with these |
| keys, e.g. changing focus on <code>TAB</code> or closing a popup with <code>ESC</code>. |
| Note that some browser shortcuts can not be suppressed, like changing the browser tab with |
| CTRL+TAB. |
| </p> |
| <p> |
| Like <code>RWT.ACTIVE_KEYS</code>, this can be done either globally, using |
| <code>Display.setData()</code>, or on a |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367869">per-widget base</a> |
| using <code>Widget.setData()</code>. |
| For more details, see the JavaDoc on <code>RWT.CANCEL_KEYS</code>. |
| </p> |
| |
| <h3>Discontinued Support for doit-flag on Key Events</h3> |
| |
| <p> |
| We decided to replace the support for dynamically vetoing key and traverse events |
| in favor of the static approach described above. |
| With this change, setting the <code>doit</code>-flag on <code>KeyEvent</code>s and |
| <code>TraverseEvent</code>s has |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367871">no longer any effect</a> |
| in RAP. |
| As a replacement, the <code>RWT.CANCEL_KEYS</code> constant should be used. |
| JFace cell editors have already been adapted to this change. |
| <!-- TODO custom navigation strategies --> |
| </p> |
| <p> |
| We've introduced <code>KeyEvents</code> and <code>TraverseEvents</code> in RAP 1.2 to be |
| able to support JFace cell editors. |
| There were multiple issues remaining that we could never overcome, |
| such as synchronous HTTP requests not working correctly in some browsers, |
| or security-restrictions for certain keys for in others. |
| Over time, we've realized that dynamically preventable key and traverse events are not |
| going to work fully and reliably in all browser. |
| </p> |
| <p> |
| We dislike taking functionality away, but in this case we are convinced that the |
| improvements are more valuable than the loss. |
| We were able to heavily improve the key event handling and to fix |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367091">several issues</a> |
| regarding |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=329639">missing events</a> or |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=366788">wrong values</a>. |
| The change also allowed us to send key events in asynchronous HTTP requests |
| <em>in all browsers</em>, making the client UI more responsive. |
| </p> |
| |
| <h2>Theming</h2> |
| |
| <h3>New Default Theme</h3> |
| |
| <p> |
| RAP 1.5 got a new default look. |
| The new theme aims at bringing a modern, decent look into RAP applications with more white |
| space and subtle usage of roundings, shadows and gradients. To achieve this, the |
| themability of many RWT widgets has been extended by adding missing CSS properties. |
| </p> |
| <p> |
| <img class="framed" src="images/NewTheme-Dialog.png" /> |
| <img class="framed" src="images/NewTheme-Form.png" /> |
| </p> |
| |
| <h3>Fallback for Custom Themes</h3> |
| |
| <p> |
| The RAP default theme is now an equitable theme, and it is no longer used as a fallback for |
| custom themes. |
| Instead of the default theme, all theming properties now have a default value which is used |
| as a fallback in case the theme does not define a value for this property. |
| </p> |
| <p> |
| Unlike the RAP default theme, these fallback values will not change. |
| They are chosen to be plain values without any effects, i.e. no gradients, rounded borders, |
| or shadows, just plain black-and-white. |
| With this change, custom themes will be more stable. |
| Changes to the RAP default theme will not affect custom themes anymore. |
| </p> |
| <p> |
| The default values are still defined in the respective |
| <code><Widget>.default.css</code> files, and the RAP default theme is now contained |
| in a file of its own. |
| For details, see |
| <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=363736">bug 363736</a>. |
| </p> |
| |
| <h3>Text Shadows</h3> |
| |
| <p> |
| The Theming now supports text shadows for most widgets that display text: |
| Shell, Label, CLabel, CTabFolder, Button, DateTime, ExpandBar, Group, Link, |
| List, Spinner, TabFolder, Menu, ToolTip, Combo, CCombo, Tree, Table, Text, and ToolBar |
| </p> |
| <p> |
| <img class="framed" title="Text Shadows in RAP" src="images/Text-Shadows.png" /> |
| </p> |
| <p> |
| Text shadows are not available in Internet Explorer due to this browser's lack of support |
| for this feature. |
| Transparency for text shadows is supported using the |
| <a href="http://www.w3.org/TR/css3-color/#rgba-color">rgba</a> notation for color. |
| Example: |
| </p> |
| <pre> |
| Button { |
| text-shadow: 0 1px 0 rgba( 0, 0, 0, 0.3 ); |
| }</pre> |
| |
| <h3>New Animations</h3> |
| |
| <p> |
| The theming for <code>Shell</code> and <code>Composite</code> now supports these additional |
| animations: |
| </p> |
| <p> |
| <code>flyInTop</code>, <code>flyInRight</code>, <code>flyInBottom</code>, <code>flyInLeft</code>,<br/> |
| <code>flyOutTop</code>, <code>flyOutRight</code>, <code>flyOutBottom</code>, <code>flyOutLeft</code> |
| </p> |
| <p> |
| In addition, <code>Composite</code> now also supports |
| <code>fadeIn</code>, <code>fadeOut</code>, <code>slideIn</code>, and <code>slideOut</code>. |
| </p> |
| <p> |
| The animations are shown when the widget either appears or disappears, respectively. |
| Since the widget's children are animated together with its parent, it's now possible to |
| animate any widget by placing it in a Composite. |
| It should be noted that the animations may not run smoothly in older browsers, or when the |
| Shell/Composite is very bulky. |
| Using fadeIn/Our or slideIn/Out in IE7 or 8 can cause minor rendering glitches during the |
| animation, depending on the contained widgets and their theming. |
| </p> |
| |
| <h3>FileUpload Theming</h3> |
| |
| <p> |
| The FileUpload widget is no longer bound to the theming of the <code>Button</code> theming |
| but can be styled separately. |
| All CSS properties that are supported for <code>Button</code> are now also supported for the |
| new <code>FileUpload</code> CSS element. |
| </p> |
| |
| <h2>Browser Support</h2> |
| |
| <h3>Improved Internet Explorer 9 Support</h3> |
| |
| <p> |
| Internet Explorer 9 was a significant improvement over previous versions, finally catching |
| up to other browsers regarding performance and compatibility. |
| RAP can now fully utilize all its new features (HTML5, CSS3, SVG) by switching to standard |
| rendering in IE9 (as opposed to quirksmode used for previous IE versions). |
| This gives RAP applications a noticeable performance-boost in IE9, especially when using GC |
| for drawing complex graphs. |
| </p> |
| |
| <h3>Discontinued Internet Explorer 6 Support</h3> |
| |
| <p> |
| As technology marches on, we also decided to no longer officially support IE6 in RAP 1.5. |
| RAP 1.4 will continue to support it. |
| </p> |
| |
| <h2>JFace</h2> |
| |
| <h3>Content Proposal Improvements</h3> |
| |
| <p> |
| The key event fixes mentioned above also allowed us to repair our |
| <code>ContentProposalAdapter</code> implementation. |
| Now we can provide a fully functional content proposal that can be operated completely by |
| the keyboard on all browsers. |
| Combined with the <code>RWT.ACTIVE_KEYS</code> constant, the requests can be limited to |
| those needed for opening the content proposal. |
| </p> |
| <p> |
| <img class="framed" src="images/ContentProposal.png" /> |
| </p> |
| |
| <h2>RAP Project</h2> |
| |
| <h3>Source Code Moved to Git, Mirrored on GitHub</h3> |
| |
| <p> |
| Our source code has moved from CVS to Git. |
| The CVS still exists but is now read-only. |
| If you used to work with RAP source code from CVS, check the |
| <a href="http://eclipse.org/rap/source">source code</a> page for the new repository URLs. |
| Mirrors of the rap repositories are also available on |
| <a href="https://github.com/eclipse/">GitHub</a>. |
| </p> |
| |
| <h3>Public Nightly Builds</h3> |
| |
| <p> |
| With RAP 1.5, all software is built on the |
| <a href="https://hudson.eclipse.org/hudson/">Eclipse foundation's Hudson server</a>. |
| Nightly builds are available in a public repository. |
| The details can be found on the <a href="http://eclipse.org/rap/downloads/">downloads page</a>. |
| </p> |
| |
| <h3>Developer Guide Online</h3> |
| |
| <p> |
| To help developers finding up-to date information on RAP, we provide the latest version of |
| the developer's guide on our <a href="http://eclipse.org/rap/developers-guide/">project website</a>. |
| </p> |
| |
| </div> |