changeset 3455:1f7a7a342f72 8.0-b88

Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/MASTER/jfx/rt
author David Grieve<david.grieve@oracle.com>
date Wed, 01 May 2013 11:16:07 -0400
parents 7ce3487f962e 1d91c0e30f3c
children 49cea84b56be 94716ed4cf40 12cc9b4d5aca
files .classpath
diffstat 24 files changed, 435 insertions(+), 104 deletions(-) [+]
line wrap: on
line diff
--- a/.classpath	Mon Apr 29 20:02:32 2013 +0400
+++ b/.classpath	Wed May 01 11:16:07 2013 -0400
@@ -62,10 +62,9 @@
     <classpathentry kind="src" path="javafx-fxml/src"/>
     <classpathentry kind="src" path="javafx-fxml/test"/>
     <classpathentry kind="src" path="javafx-geom/src"/>
-    <classpathentry kind="src" path="javafx-geom/test"/>
-	
-	<classpathentry kind="src" path="javafx-iio/src"/>
-	<classpathentry kind="src" path="javafx-iio/test"/>
+    <classpathentry kind="src" path="javafx-geom/test"/>	
+    <classpathentry kind="src" path="javafx-iio/src"/>
+    <classpathentry kind="src" path="javafx-iio/test"/>
     <classpathentry kind="src" path="javafx-logging/src"/>
     <classpathentry kind="src" path="javafx-sg-common/src"/>
     <classpathentry kind="src" path="javafx-sg-common/test"/>
@@ -109,6 +108,26 @@
 		</attributes>
 	</classpathentry>
     <classpathentry kind="src" path="prism-j2d/src"/>
+    <classpathentry kind="src" path="prism-d3d/src"/>
+    <classpathentry kind="src" path="prism-d3d/build/gensrc">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="prism-es2/src"/>
+	<classpathentry kind="src" path="prism-es2-eglfb/src"/>
+	<classpathentry kind="src" path="prism-es2-eglx11/src"/>
+	<!--
+	<classpathentry kind="src" path="prism-es2-ios/src"/>
+	-->
+	<classpathentry kind="src" path="prism-es2-mac/src"/>
+	<classpathentry kind="src" path="prism-es2-win/src"/>
+	<classpathentry kind="src" path="prism-es2-x11/src"/>
+	<classpathentry kind="src" path="prism-es2/build/gensrc">
+		<attributes>
+			<attribute name="optional" value="true"/>
+		</attributes>
+	</classpathentry>
     <classpathentry kind="src" path="prism-sw/src"/>
     <classpathentry kind="src" path="prism-null/src"/>
     <classpathentry kind="src" path="prism-ps/src"/>
--- a/apps/experiments/Modena/src/modena/Modena.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/apps/experiments/Modena/src/modena/Modena.java	Wed May 01 11:16:07 2013 -0400
@@ -79,6 +79,7 @@
 import javafx.scene.control.ToggleButtonBuilder;
 import javafx.scene.control.ToggleGroup;
 import javafx.scene.control.ToolBar;
+import javafx.scene.control.Tooltip;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.image.WritableImage;
@@ -98,6 +99,7 @@
     }
     private static final String testAppCssUrl = Modena.class.getResource("TestApp.css").toExternalForm();
     private static String MODENA_STYLESHEET_URL;
+    private static String MODENA_EMBEDDED_STYLESHEET_URL;
     private static String MODENA_STYLESHEET_BASE;
     private static String CASPIAN_STYLESHEET_URL;
     private static String CASPIAN_STYLESHEET_BASE;
@@ -121,6 +123,8 @@
                     com.sun.javafx.scene.control.skin.ButtonSkin.class.getResource("modena/modena.css").toExternalForm();
             MODENA_STYLESHEET_BASE = MODENA_STYLESHEET_URL.substring(0,MODENA_STYLESHEET_URL.lastIndexOf('/')+1);
             CASPIAN_STYLESHEET_BASE = CASPIAN_STYLESHEET_URL.substring(0,CASPIAN_STYLESHEET_URL.lastIndexOf('/')+1);
+            MODENA_EMBEDDED_STYLESHEET_URL = MODENA_STYLESHEET_BASE + "modena-embedded-performance.css";
+            System.out.println("MODENA_EMBEDDED_STYLESHEET_URL = " + MODENA_EMBEDDED_STYLESHEET_URL);
         } catch (MalformedURLException ex) {
             Logger.getLogger(Modena.class.getName()).log(Level.SEVERE, null, ex);
         }
@@ -143,17 +147,18 @@
     private int fontSize = 13;
     private String styleSheetContent = "";
     private String styleSheetBase = "";
-    private ToggleButton modenaButton,retinaButton,rtlButton;
+    private ToggleButton modenaButton,retinaButton,rtlButton,embeddedPerformanceButton;
     private TabPane contentTabs;
     private boolean test = false;
+    private boolean embeddedPerformanceMode = false;
     private final EventHandler<ActionEvent> rebuild = new EventHandler<ActionEvent>(){
-        @Override public void handle(ActionEvent event) { 
+        @Override public void handle(ActionEvent event) {
             Platform.runLater(new Runnable() {
                 @Override public void run() {
                     updateUserAgentStyleSheet();
-                    rebuildUI(modenaButton.isSelected(), retinaButton.isSelected(), 
-                            contentTabs.getSelectionModel().getSelectedIndex(),
-                            samplePageNavigation.getCurrentSection());
+                    rebuildUI(modenaButton.isSelected(), retinaButton.isSelected(),
+                              contentTabs.getSelectionModel().getSelectedIndex(),
+                              samplePageNavigation.getCurrentSection());
                 }
             });
         }
@@ -253,6 +258,7 @@
         styleSheetContent = modena ? 
                 loadUrl(MODENA_STYLESHEET_URL) : 
                 loadUrl(CASPIAN_STYLESHEET_URL);
+        if (modena && embeddedPerformanceMode) styleSheetContent += loadUrl(MODENA_EMBEDDED_STYLESHEET_URL);
         styleSheetBase = modena ? MODENA_STYLESHEET_BASE : CASPIAN_STYLESHEET_BASE;
         styleSheetContent += "\n.root {\n";
         System.out.println("baseColor = "+baseColor);
@@ -391,6 +397,17 @@
                             }
                         })
                     .build(),
+                embeddedPerformanceButton = ToggleButtonBuilder.create()
+                    .text("EP")
+                    .selected(embeddedPerformanceMode)
+                    .tooltip(new Tooltip("Apply Embedded Performance extra stylesheet"))
+                    .onAction(new EventHandler<ActionEvent>() {
+                        @Override public void handle(ActionEvent event) {
+                            embeddedPerformanceMode = embeddedPerformanceButton.isSelected();
+                            rebuild.handle(event);
+                        }
+                    })
+                    .build(),
                 new Separator(),
                 retinaButton,
                 new Label("Base:"),
--- a/javafx-ui-charts/src/javafx/scene/chart/AreaChart.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-charts/src/javafx/scene/chart/AreaChart.java	Wed May 01 11:16:07 2013 -0400
@@ -296,6 +296,7 @@
                             item.getCurrentX())),
                             new KeyFrame(Duration.millis(800), new EventHandler<ActionEvent>() {
                                 @Override public void handle(ActionEvent actionEvent) {
+                                    item.setSeries(null);
                                     getPlotChildren().remove(symbol);
                                     removeDataItemFromDisplay(series, item);
                                 }
@@ -307,6 +308,7 @@
                 );
             }
         } else {
+            item.setSeries(null);
             getPlotChildren().remove(symbol);
             removeDataItemFromDisplay(series, item);
         }
--- a/javafx-ui-charts/src/javafx/scene/chart/BarChart.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-charts/src/javafx/scene/chart/BarChart.java	Wed May 01 11:16:07 2013 -0400
@@ -242,6 +242,7 @@
             seriesOfDataRemoved = series;
             dataRemoveTimeline.setOnFinished(new EventHandler<ActionEvent>() {
                 public void handle(ActionEvent event) {
+                    item.setSeries(null);
                     getPlotChildren().remove(bar);
                     removeDataItemFromDisplay(series, item);
                     dataItemBeingRemoved = null;
@@ -250,6 +251,7 @@
             });
             dataRemoveTimeline.play();
         } else {
+            item.setSeries(null);
             getPlotChildren().remove(bar);
             removeDataItemFromDisplay(series, item);
             updateMap(series, item);
--- a/javafx-ui-charts/src/javafx/scene/chart/LineChart.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-charts/src/javafx/scene/chart/LineChart.java	Wed May 01 11:16:07 2013 -0400
@@ -280,6 +280,7 @@
                     ft.setToValue(0);
                     ft.setOnFinished(new EventHandler<ActionEvent>() {
                         @Override public void handle(ActionEvent actionEvent) {
+                            item.setSeries(null);
                             getPlotChildren().remove(symbol);
                             removeDataItemFromDisplay(series, item);
                         }
@@ -294,6 +295,7 @@
                 dataRemoveTimeline.play();
             }
         } else {
+            item.setSeries(null);
             if (symbol != null) getPlotChildren().remove(symbol);
             removeDataItemFromDisplay(series, item);
         }
--- a/javafx-ui-charts/src/javafx/scene/chart/XYChart.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-charts/src/javafx/scene/chart/XYChart.java	Wed May 01 11:16:07 2013 -0400
@@ -166,7 +166,7 @@
             requestChartLayout();
         }
     };
-
+    
     // -------------- PUBLIC PROPERTIES --------------------------------------------------------------------------------
 
     private final Axis<X> xAxis;
@@ -1213,7 +1213,7 @@
         private boolean setToRemove = false;
         /** The series this data belongs to */
         private Series<X,Y> series;
-        private void setSeries(Series<X,Y> series) {
+        void setSeries(Series<X,Y> series) {
             this.series = series;
         }
 
@@ -1479,7 +1479,6 @@
                     }
                     // update data items reference to series
                     for (Data<X,Y> item : c.getRemoved()) {
-                        item.setSeries(null);
                         item.setToRemove = true;
                     }
                     if (c.getAddedSize() > 0) {
@@ -1509,6 +1508,18 @@
                             }
                         }
                     }
+                    // check cycle in the data list
+                    // if cycle exists, and the data is not set to be removed, 
+                    // eliminate loop and throw exception stating operation not permitted.
+                    // RT-28880 : infinite loop when same data is added to two charts.
+                    Data<X,Y> cycle = checkCycleInList();
+                    if ( cycle != null) {
+                        if (!cycle.setToRemove) {
+                            eliminateLoop(cycle);
+                            throw new IllegalArgumentException(
+                                    "Duplicate data added or same data added to more than one chart ");
+                        }
+                    }
                     // inform chart
                     XYChart<X,Y> chart = getChart();
                     if(chart!=null) chart.dataItemsChanged(Series.this,
@@ -1516,6 +1527,39 @@
                 }
             }
         };
+        
+        private Data<X,Y> checkCycleInList() {
+            Data<X,Y> slow = null;
+            Data<X,Y> fast = null;
+            slow = fast = begin;
+            while (slow != null && fast != null) {
+                fast = fast.next;
+                if (fast == slow) return slow;
+                if (fast == null) return null;
+                fast = fast.next;
+                if (fast == slow) return fast;
+                slow = slow.next;
+            }
+            return null;
+        }
+        
+        private void eliminateLoop(Data<X,Y> cycle) {
+            Data<X,Y> slow = cycle;
+            // Identify the data that is the start of the loop
+            Data<X,Y> fast = begin;
+            //until both the refs are one short of the common element which is the start of the loop
+            while(fast.next != slow.next) {
+                fast = fast.next;
+                slow = slow.next;
+            }
+            Data<X,Y>start = fast.next;
+            //Eliminate loop by setting next pointer of last element to null
+            fast = start;
+            while(fast.next != start) {
+                fast = fast.next;
+            }
+            fast.next = null; //break the loop
+        }
 
         // -------------- PUBLIC PROPERTIES ----------------------------------------
 
@@ -1679,5 +1723,5 @@
             return count;
         }
     }
-
+    
 }
--- a/javafx-ui-common/src/com/sun/javafx/application/PlatformImpl.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-common/src/com/sun/javafx/application/PlatformImpl.java	Wed May 01 11:16:07 2013 -0400
@@ -25,6 +25,7 @@
 
 package com.sun.javafx.application;
 
+import com.sun.javafx.PlatformUtil;
 import com.sun.javafx.css.StyleManager;
 import com.sun.javafx.runtime.SystemProperties;
 
@@ -544,6 +545,11 @@
                                 StyleManager.getInstance().addUserAgentStylesheet(
                                         "com/sun/javafx/scene/control/skin/modena/touch.css");
                             }
+                            // when running on embedded add a extra stylesheet to tune performance of modena theme
+                            if (PlatformUtil.isEmbedded()) {
+                                StyleManager.getInstance().addUserAgentStylesheet(
+                                        "com/sun/javafx/scene/control/skin/modena/modena-embedded-performance.css");
+                            }
                             return null;
                         }
                     });
--- a/javafx-ui-common/src/com/sun/javafx/scene/KeyboardShortcutsHandler.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-common/src/com/sun/javafx/scene/KeyboardShortcutsHandler.java	Wed May 01 11:16:07 2013 -0400
@@ -56,8 +56,6 @@
     private ObservableMap<KeyCombination, Runnable> accelerators;
     private ObservableMap<KeyCombination, ObservableList<Mnemonic>> mnemonics;
 
-    private boolean mnemonicsLatch = false;
-
     public void addMnemonic(Mnemonic m) {
         ObservableList<Mnemonic> mnemonicsList = (ObservableList)getMnemonics().get(m.getKeyCombination());
         if (mnemonicsList == null) {
@@ -188,14 +186,16 @@
                     if (!isMnemonicsDisplayEnabled()) {
                         setMnemonicsDisplayEnabled(true);
                     }
-                    if (PlatformUtil.isWindows()) {
-                        mnemonicsLatch = !mnemonicsLatch;
+                    else {
+                        if (PlatformUtil.isWindows()) {
+                            setMnemonicsDisplayEnabled(!isMnemonicsDisplayEnabled());
+                        }
                     }
                 }
             }
             if (event.getEventType() == KeyEvent.KEY_RELEASED) {
                 if (!((KeyEvent)event).isAltDown()) {
-                    if (mnemonicsLatch != true) {
+                    if (!PlatformUtil.isWindows()) {
                         setMnemonicsDisplayEnabled(false);
                     }
                 }
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ColorPalette.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ColorPalette.java	Wed May 01 11:16:07 2013 -0400
@@ -50,7 +50,6 @@
 import javafx.scene.paint.Color;
 import javafx.scene.shape.Rectangle;
 import javafx.scene.shape.StrokeType;
-import javafx.stage.Window;
 
 
 public class ColorPalette extends VBox {
@@ -70,8 +69,6 @@
     CustomColorDialog customColorDialog = null;
     private final List<ColorSquare> customSquares = FXCollections.observableArrayList();
  
-    private double x;
-    private double y;
     private PopupControl popupControl;
     private ColorSquare focusedSquare;
     private ContextMenu contextMenu = null;
@@ -125,7 +122,7 @@
                 }
                 customColorDialog.setCurrentColor(colorPicker.valueProperty().get());
                 if (popupControl != null) popupControl.setAutoHide(false);
-                customColorDialog.show(x, y);
+                customColorDialog.show();
                 if (popupControl != null) popupControl.setAutoHide(true);
             }
         });
@@ -372,11 +369,6 @@
         this.popupControl = pc;
     }
     
-    public void setDialogLocation(double xValue, double yValue) {
-        x = xValue;
-        y = yValue;
-    }
-    
     public ColorPickerGrid getColorGrid() {
         return colorPickerGrid;
     }
@@ -470,7 +462,7 @@
                         if (isCustom && contextMenu != null) {
                             if (!contextMenu.isShowing()) {
                                 contextMenu.show(ColorSquare.this, Side.RIGHT, 0, 0);
-                                Utils.addMnemonics(contextMenu, ColorSquare.this.getScene());
+                                Utils.addMnemonics(contextMenu, ColorSquare.this.getScene(), colorPicker.impl_isShowMnemonics());
                             }
                             else {
                                 contextMenu.hide();
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ColorPickerSkin.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ColorPickerSkin.java	Wed May 01 11:16:07 2013 -0400
@@ -40,7 +40,6 @@
 import javafx.geometry.Pos;
 import javafx.scene.Node;
 import javafx.event.EventHandler;
-import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.StackPane;
@@ -453,7 +452,6 @@
         final ColorPicker colorPicker = (ColorPicker)getSkinnable();
         popupContent.updateSelection(colorPicker.getValue());
         popupContent.clearFocus();
-        popupContent.setDialogLocation(getPopup().getX()+getPopup().getWidth(), getPopup().getY());
     }
     
     @Override protected void handleControlPropertyChanged(String p) {
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ComboBoxListViewSkin.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ComboBoxListViewSkin.java	Wed May 01 11:16:07 2013 -0400
@@ -446,8 +446,12 @@
         } else {
             // run item through StringConverter if it isn't null
             StringConverter<T> c = comboBox.getConverter();
-            String s = item == null ? comboBox.getPromptText() : (c == null ? item.toString() : c.toString(item));
+            
+            // prompt text used to be displayed in the display text of a 
+            // non-editable node, but was removed as per RT-29284
+            String s = item == null ? /*comboBox.getPromptText()*/"" : (c == null ? item.toString() : c.toString(item));
             cell.setText(s);
+            
             cell.setGraphic(null);
             return s == null || s.isEmpty();
         }
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ContextMenuContent.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ContextMenuContent.java	Wed May 01 11:16:07 2013 -0400
@@ -810,6 +810,7 @@
 
                 // Listener to items in PopupMenu to update items in PopupMenuContent
                 itemsDirty = true;
+                updateItems(); // RT-29761
             }
         });
     }
@@ -1406,7 +1407,7 @@
         @Override protected double computePrefHeight(double width) {
             double prefHeight = 0;
             if (item instanceof CustomMenuItem || item instanceof SeparatorMenuItem) {
-                prefHeight = getChildren().get(0).prefHeight(-1);
+                prefHeight = (getChildren().isEmpty()) ? 0 : getChildren().get(0).prefHeight(-1);
             } else {
                 prefHeight = Math.max(prefHeight, (left != null) ? left.prefHeight(-1) : 0);
                 prefHeight = Math.max(prefHeight, (graphic != null) ? graphic.prefHeight(-1) : 0);
@@ -1457,7 +1458,7 @@
     private class MenuLabel extends Label {
 
         final MenuItem menuitem;
-        MenuItemContainer menuItemContainer;
+        final MenuItemContainer menuItemContainer;
         public MenuLabel(MenuItem item, MenuItemContainer mic) {
             super(item.getText());
             setMnemonicParsing(item.isMnemonicParsing());
@@ -1482,6 +1483,71 @@
 
                     }
                     Event.fireEvent(menuitem, new ActionEvent());
+
+
+                    /*
+                    ** The menuitem may contain a submenu, so check
+                    ** if there needs to be any further action
+                    */
+                    if (menuitem instanceof Menu) {
+                        if (((Menu)menuitem).isShowing()) {
+                            ((Menu)menuitem).hide();
+                        }
+                        else {
+                            /*
+                            ** close and open submenus first
+                            */
+                            for (Node node : itemsContainer.getChildren()) {
+                                if (node instanceof MenuItemContainer
+                                    && ((MenuItemContainer)node).item instanceof Menu) {
+                                    Menu menu = (Menu)((MenuItemContainer)node).item;
+                                    if (menu.isShowing()) {
+                                        menu.hide();
+                                    }
+                                }
+                            }
+
+                            Node nx = itemsContainer.getChildren().get(0);
+                            if (nx instanceof MenuItemContainer) {
+                                MenuItem item = ((MenuItemContainer)nx).item;
+                                item = menuitem;
+                                if (item instanceof Menu) {
+                                    final Menu menu = (Menu) item;
+                                    if (menu.isDisable()) return;
+
+                                    selectedBackground = menuItemContainer;
+
+                                    /*
+                                    ** if submenu for this menu is already showing then do nothing
+                                    ** Menubar will process the right key and move to the next menu
+                                    */
+                                    if (openSubmenu == menu && submenu.isShowing()) return;
+                                    menu.show();
+
+                                    /*
+                                    ** request focus on the first item of the submenu after it is shown
+                                    */
+                                    ContextMenuContent cmContent = (ContextMenuContent)submenu.getSkin().getNode();
+                                    if (cmContent != null) {
+                                        if (cmContent.itemsContainer.getChildren().size() > 0) {
+                                            ((MenuItemContainer)(cmContent.itemsContainer.getChildren().get(0))).requestFocus();
+                                        } else {
+                                            cmContent.requestFocus();
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    else {
+                        /*
+                        ** the menuitem doesn't have a submenu, so once
+                        ** we've fired our event we can close the menu
+                        */
+                        if (menuitem.getParentMenu().isShowing()) {
+                            menuitem.getParentMenu().hide();
+                        }
+                    }
                     e.consume();
                 }
             });
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/CustomColorDialog.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/CustomColorDialog.java	Wed May 01 11:16:07 2013 -0400
@@ -25,6 +25,8 @@
 
 package com.sun.javafx.scene.control.skin;
 
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
 import javafx.beans.property.*;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
@@ -44,7 +46,9 @@
 import javafx.geometry.Insets;
 import javafx.geometry.Orientation;
 import javafx.geometry.Pos;
+import javafx.geometry.Rectangle2D;
 import javafx.scene.input.KeyEvent;
+import javafx.stage.Screen;
 /**
  *
  * @author paru
@@ -141,18 +145,59 @@
         return dialog;
     }
     
-    public void show(double x, double y) {
-        if (x != 0 && y != 0) {
-            dialog.setX(x);
-            dialog.setY(y);
+    public void show() {
+        if (dialog.getOwner() != null) {
+            // Workaround of RT-29871: Instead of just invoking fixPosition() 
+            // here need to use listener that fixes dialog position once both
+            // width and height are determined
+            dialog.widthProperty().addListener(positionAdjuster);
+            dialog.heightProperty().addListener(positionAdjuster);
+            positionAdjuster.invalidated(null);
         }
         if (dialog.getScene() == null) dialog.setScene(customScene);
         colorRectPane.updateValues();
         dialog.show();
     }
     
+    private InvalidationListener positionAdjuster = new InvalidationListener() {
+
+        @Override
+        public void invalidated(Observable ignored) {
+            if (Double.isNaN(dialog.getWidth()) || Double.isNaN(dialog.getHeight())) {
+                return;
+            }
+            dialog.widthProperty().removeListener(positionAdjuster);
+            dialog.heightProperty().removeListener(positionAdjuster);
+            fixPosition();
+        }
+
+    };
+    
+    private void fixPosition() {
+        Window w = dialog.getOwner();
+        Screen s = com.sun.javafx.Utils.getScreen(w);
+        Rectangle2D sb = s.getBounds();
+        double xR = w.getX() + w.getWidth();
+        double xL = w.getX() - dialog.getWidth();
+        double x, y;
+        if (sb.getMaxX() >= xR + dialog.getWidth()) {
+            x = xR;
+        } else if (sb.getMinX() <= xL) {
+            x = xL;
+        } else {
+            x = Math.max(sb.getMinX(), sb.getMaxX() - dialog.getWidth());
+        }
+        y = Math.max(sb.getMinY(), Math.min(sb.getMaxY() - dialog.getHeight(), w.getY()));
+        dialog.setX(x);
+        dialog.setY(y);
+    }
+    
     @Override public void layoutChildren() {
         super.layoutChildren();
+        if (dialog.getMinWidth() > 0 && dialog.getMinHeight() > 0) {
+            // don't recalculate min size once it's set
+            return;
+        }
         dialog.setMinWidth(computeMinWidth(getHeight()) + (dialog.getWidth() - customScene.getWidth()));
         dialog.setMinHeight(computeMinHeight(getWidth()) + (dialog.getHeight() - customScene.getHeight()));
     }
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuButtonSkinBase.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/MenuButtonSkinBase.java	Wed May 01 11:16:07 2013 -0400
@@ -212,7 +212,7 @@
             }
 
             if (popup.isShowing()) {
-                Utils.addMnemonics(popup, getSkinnable().getScene());
+                Utils.addMnemonics(popup, getSkinnable().getScene(), getSkinnable().impl_isShowMnemonics());
             }
             else {
                 Utils.removeMnemonics(popup, getSkinnable().getScene());
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ScrollPaneSkin.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/ScrollPaneSkin.java	Wed May 01 11:16:07 2013 -0400
@@ -143,8 +143,13 @@
     private final InvalidationListener nodeListener = new InvalidationListener() {
         @Override public void invalidated(Observable valueModel) {
             if (nodeWidth != -1.0 && nodeHeight != -1.0) {
-                // if new size causes scrollbar visibility to change, then need to relayout
-                if (vsbvis != determineVerticalSBVisible() || hsbvis != determineHorizontalSBVisible()) {
+                /*
+                ** if the new size causes scrollbar visibility to change, then need to relayout
+                ** we also need to correct the thumb size when the scrollnode's size changes 
+                */
+                if (vsbvis != determineVerticalSBVisible() || hsbvis != determineHorizontalSBVisible() ||
+                    (scrollNode.getLayoutBounds().getWidth() != 0.0  && nodeWidth != scrollNode.getLayoutBounds().getWidth()) ||
+                    (scrollNode.getLayoutBounds().getHeight() != 0.0 && nodeHeight != scrollNode.getLayoutBounds().getHeight())) {
                     getSkinnable().requestLayout();
                 } else {
                     // otherwise just update scrollbars based on new scrollNode size
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TabPaneSkin.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TabPaneSkin.java	Wed May 01 11:16:07 2013 -0400
@@ -1039,6 +1039,7 @@
         private Label label;
         private StackPane closeBtn;
         private StackPane inner;
+        private Tooltip oldTooltip;
         private Tooltip tooltip;
         private Rectangle clip;
         
@@ -1190,6 +1191,7 @@
             tooltip = tab.getTooltip();
             if (tooltip != null) {
                 Tooltip.install(this, tooltip);
+                oldTooltip = tooltip;
             }
 
             listener.registerChangeListener(tab.closableProperty(), "CLOSABLE");
@@ -1271,10 +1273,15 @@
             } else if ("CONTEXT_MENU".equals(p)) {
                 // todo
             } else if ("TOOLTIP".equals(p)) {
-                getChildren().remove(tooltip);
+                // uninstall the old tooltip
+                if (oldTooltip != null) {
+                    Tooltip.uninstall(this, oldTooltip);
+                }
                 tooltip = tab.getTooltip();
                 if (tooltip != null) {
-//                    getChildren().addAll(tooltip);
+                    // install new tooltip and save as old tooltip.
+                    Tooltip.install(this, tooltip);
+                    oldTooltip = tooltip; 
                 }
             } else if ("DISABLE".equals(p)) {
                 pseudoClassStateChanged(DISABLED_PSEUDOCLASS_STATE, tab.isDisable());
@@ -1302,12 +1309,16 @@
                 updateGraphicRotation();
             } else if ("TAB_MIN_WIDTH".equals(p)) {
                 requestLayout();
+                getSkinnable().requestLayout();
             } else if ("TAB_MAX_WIDTH".equals(p)) {
                 requestLayout();
+                getSkinnable().requestLayout();
             } else if ("TAB_MIN_HEIGHT".equals(p)) {
                 requestLayout();
+                getSkinnable().requestLayout();
             } else if ("TAB_MAX_HEIGHT".equals(p)) {
                 requestLayout();
+                getSkinnable().requestLayout();
             } 
         }
 
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableColumnHeader.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableColumnHeader.java	Wed May 01 11:16:07 2013 -0400
@@ -235,7 +235,7 @@
             if (menu != null && menu.isShowing()) return;
             if (header.getTableHeaderRow().isReordering() && header.isColumnReorderingEnabled()) {
                 header.columnReorderingComplete(me);
-            } else {
+            } else if (me.isStillSincePress()) {
                 TableColumnHeader.sortColumn(
                         header.getTableViewSkin().getSortOrder(), 
                         tableColumn, 
@@ -685,6 +685,8 @@
     private int newColumnPos;
     
     private void columnReorderingStarted(MouseEvent me) {
+        if (! column.impl_isReorderable()) return;
+        
         // Used to ensure the column ghost is positioned relative to where the
         // user clicked on the column header
         dragOffset = me.getX();
@@ -695,6 +697,8 @@
     }
 
     private void columnReordering(MouseEvent me) {
+        if (! column.impl_isReorderable()) return;
+        
         // this is for handling the column drag to reorder columns.
         // It shows a line to indicate where the 'drop' will be.
 
@@ -778,6 +782,8 @@
     }
     
     protected void columnReorderingComplete(MouseEvent me) {
+        if (! column.impl_isReorderable()) return;
+        
         // Move col from where it is now to the new position.
         moveColumn(getTableColumn(), newColumnPos);
         
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableHeaderRow.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableHeaderRow.java	Wed May 01 11:16:07 2013 -0400
@@ -45,6 +45,7 @@
 import javafx.geometry.VPos;
 import javafx.scene.control.CheckMenuItem;
 import javafx.scene.control.ContextMenu;
+import javafx.scene.control.Control;
 import javafx.scene.control.Label;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableColumnBase;
@@ -94,7 +95,10 @@
     private void updateTableWidth() {
         // snapping added for RT-19428
         double padding = snapSize(getTablePadding().getLeft()) + snapSize(getTablePadding().getRight());
-        this.tableWidth = snapSize(tableSkin.getSkinnable().getWidth()) - padding;
+        
+        Control c = tableSkin.getSkinnable();
+        this.tableWidth = c == null ? 0 : snapSize(c.getWidth()) - padding;
+        
         clip.setWidth(tableWidth);
     }
 
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableViewSkinBase.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TableViewSkinBase.java	Wed May 01 11:16:07 2013 -0400
@@ -149,7 +149,8 @@
         tableHeaderRow.setFocusTraversable(false);
         control.paddingProperty().addListener(new InvalidationListener() {
             @Override public void invalidated(Observable valueModel) {
-                tableHeaderRow.setTablePadding(getSkinnable().getInsets());
+                C c = getSkinnable();
+                tableHeaderRow.setTablePadding(c == null ? Insets.EMPTY : c.getInsets());
             }
         });
 
@@ -675,7 +676,10 @@
 
     private void refreshView() {
         rowCountDirty = true;
-        getSkinnable().requestLayout();
+        Control c = getSkinnable();
+        if (c != null) {
+            c.requestLayout();
+        }
     }
 
     private int itemCount = -1;
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/Utils.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/Utils.java	Wed May 01 11:16:07 2013 -0400
@@ -811,6 +811,10 @@
     }
 
     static void addMnemonics(ContextMenu popup, Scene scene) {
+        addMnemonics(popup, scene, false);
+    }
+
+    static void addMnemonics(ContextMenu popup, Scene scene, boolean initialState) {
 
         if (!com.sun.javafx.PlatformUtil.isMac()) {
 
@@ -839,6 +843,7 @@
 
                         Mnemonic myMnemonic = new Mnemonic(cmContent.getLabelAt(i), mnemonicKeyCombo);
                         scene.addMnemonic(myMnemonic);
+                        cmContent.getLabelAt(i).impl_setShowMnemonics(initialState);
                     }
                 }
             }
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/VirtualFlow.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/VirtualFlow.java	Wed May 01 11:16:07 2013 -0400
@@ -1669,10 +1669,13 @@
 
     private void resizeCellSize(T cell) {
         if (cell == null) return;
-        if (isVertical())
-            cell.resize(cell.getWidth(), cell.prefHeight(-1));
-        else
-            cell.resize(cell.prefWidth(-1), cell.getHeight());
+        if (isVertical()) {
+            double width = cell.getWidth();
+            cell.resize(width, cell.prefHeight(width));
+        } else {
+            double height = cell.getHeight();
+            cell.resize(cell.prefWidth(height), cell.getHeight());
+        }
     }
 
     private void setCellIndex(T cell, int index) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/modena/modena-embedded-performance.css	Wed May 01 11:16:07 2013 -0400
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* This is a extra stylesheet for Modena theme that is enabled on Embedded
+ * to tune performance for lower powered devices */
+
+/* ====   REMOVE ALL EFFECTS   ================================================= */
+.slider .thumb,
+.scroll-bar:horizontal > .decrement-button > .decrement-arrow,
+.scroll-bar:horizontal > .increment-button > .increment-arrow,
+.scroll-bar:vertical > .decrement-button > .decrement-arrow,
+.scroll-bar:vertical > .increment-button > .increment-arrow,
+.context-menu,
+.menu-up-arrow,
+.menu-down-arrow,
+.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button,
+.combo-box-popup > .list-view,
+.titled-pane:focused > .title > .arrow-button > .arrow,
+.color-palette,
+.custom-color-dialog > .color-rect-pane #color-rect-indicator,
+.custom-color-dialog > .color-rect-pane > .color-bar > #color-bar-indicator,
+.tooltip {
+    -fx-effect: null;
+}
\ No newline at end of file
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/modena/modena.css	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/modena/modena.css	Wed May 01 11:16:07 2013 -0400
@@ -155,6 +155,29 @@
     CHART_COLOR_6: #9a42c8;
     CHART_COLOR_7: #c84164;
     CHART_COLOR_8: #888888;
+    /* Chart Color Palette Semi-Transparent
+     * These are used by charts that need semi transparent versions of the above colors, such as BubbleChart. They
+     * are exactly the same colors as above just with alpha
+     *
+     * 20% opacity
+     */
+    CHART_COLOR_1_TRANS_20: #f3622d33;
+    CHART_COLOR_2_TRANS_20: #fba71b33;
+    CHART_COLOR_3_TRANS_20: #57b75733;
+    CHART_COLOR_4_TRANS_20: #41a9c933;
+    CHART_COLOR_5_TRANS_20: #4258c933;
+    CHART_COLOR_6_TRANS_20: #9a42c833;
+    CHART_COLOR_7_TRANS_20: #c8416433;
+    CHART_COLOR_8_TRANS_20: #88888833;
+    /* 70% opacity */
+    CHART_COLOR_1_TRANS_70: #f3622db3;
+    CHART_COLOR_2_TRANS_70: #fba71bb3;
+    CHART_COLOR_3_TRANS_70: #57b757b3;
+    CHART_COLOR_4_TRANS_70: #41a9c9b3;
+    CHART_COLOR_5_TRANS_70: #4258c9b3;
+    CHART_COLOR_6_TRANS_70: #9a42c8b3;
+    CHART_COLOR_7_TRANS_70: #c84164b3;
+    CHART_COLOR_8_TRANS_70: #888888b3;
 
     /***************************************************************************
      *                                                                         *
@@ -324,6 +347,7 @@
     -fx-selection-bar-text: -fx-text-background-color;
 
     /* These are needed for Popup */
+    -fx-background-color: inherit;
     -fx-background-radius: inherit;
     -fx-background-insets: inherit;
     -fx-padding: inherit;
@@ -483,6 +507,7 @@
     -fx-stroke: transparent;
 }
 
+.titled-pane:show-mnemonics > .mnemonic-underline,
 .label:show-mnemonics > .mnemonic-underline,
 .context-menu:show-mnemonics > .mnemonic-underline,
 .menu:show-mnemonics > .mnemonic-underline,
@@ -746,17 +771,29 @@
     -fx-border-color: transparent;
     -fx-border-width: 1px;
 }
-.hyperlink:visited {
+.hyperlink,
+.hyperlink:hover,
+.hyperlink:hover:visited {
     -fx-text-fill: -fx-accent;
 }
+.hyperlink:armed,
+.hyperlink:visited,
+.hyperlink:hover:armed {
+    -fx-text-fill: -fx-text-background-color;
+}
+.hyperlink:hover,
+.hyperlink:visited,
+.hyperlink:hover:visited {
+    -fx-underline: true;
+}
+.hyperlink:visited:armed {
+    -fx-underline: false;
+}
 .hyperlink:focused {
     -fx-border-color: -fx-focus-color;
     -fx-border-style: segments(0.166667em, 0.166667em);
     -fx-border-width: 1px;
 }
-.hyperlink:hover {
-    -fx-underline: true;
-}
 .hyperlink:show-mnemonics > .mnemonic-underline {
     -fx-stroke: -fx-text-fill;
 }
@@ -1776,7 +1813,7 @@
 .titled-pane > *.content {
     -fx-border-color: -fx-box-border;
     -fx-border-insets: -1 0 0 0;
-    -fx-background-color: linear-gradient(from 0px 0px to 0px 5px, derive(-fx-color, -4%), transparent);
+    -fx-background-color: linear-gradient(from 0px 0px to 0px 5px, derive(-fx-background, -6%), -fx-background);
 }
 
 
@@ -1872,11 +1909,6 @@
     -fx-padding: 1em; /* 12 */
     -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.2) , 12, 0.0 , 0 , 8 );
 }
-/*.color-palette > .color-picker-grid > .color-square > .color-rect {
-    -fx-stroke: black;
-    -fx-stroke-width: 0.4;
-    -fx-border-color: black;
-}*/
 .color-palette > .color-picker-grid {
     -fx-padding: 0.5px;
     -fx-snap-to-pixel: false;
@@ -2064,12 +2096,12 @@
 .pagination > .pagination-control > .control-box > .left-arrow-button {
     -fx-background-radius: 3 0 0 3, 3 0 0 3, 2 0 0 2, 1 0 0 1;
     -fx-background-insets: 0 0 -1 5, 0 0 0 5, 1 1 1 6, 2 2 2 7;
-    -fx-padding: 0.166667em 0em 0.25em 0.9em;
+    -fx-padding: 0em 0.417em 0em 0.833em; /* 0 5 0 10 */
 }
 .pagination > .pagination-control > .control-box > .right-arrow-button {
     -fx-background-radius: 0 3 3 0, 0 3 3 0, 0 2 2 0, 0 1 1 0;
     -fx-background-insets: 0 5 -1 0, 0 5 0 0, 1 6 1 1, 2 7 2 2;
-    -fx-padding: 0.166667em 0em 0.25em 0.4em;
+    -fx-padding: 0em 0.75em 0em 0.417em; /* 0 9 0 5 */
 }
 .pagination > .pagination-control .left-arrow {
     -fx-background-color: -fx-mark-highlight-color, -fx-mark-color;
@@ -2087,7 +2119,7 @@
 }
 .pagination > .pagination-control > .control-box > .bullet-button {   
    -fx-background-radius: 0, 4em, 4em, 4em, 4em;
-   -fx-padding: 0.333em;  
+   -fx-padding: 0.333em;
    -fx-background-color: transparent, -fx-outer-border, -fx-inner-border, -fx-body-color;
    -fx-background-insets: 0, 5,  6,  7;
 }
@@ -2101,12 +2133,12 @@
 .pagination.bullet > .pagination-control > .control-box > .left-arrow-button {
     -fx-background-radius: 4em;
     -fx-background-insets: 0, 1, 2;
-    -fx-padding: 0 0 0 0.667em; /* 0 0 0 8 */
+    -fx-padding: 0em 0.25em 0em 0.083em; /* 0 3 0 1 */
 } 
 .pagination.bullet > .pagination-control > .control-box > .right-arrow-button {
     -fx-background-radius: 4em;
     -fx-background-insets: 0, 1, 2;
-    -fx-padding: 0 0 0 0.833em; /* 0 0 0 10 */
+    -fx-padding: 0em 0.083em 0em 0.25em; /* 0 1 0 3 */
 }
 .pagination > .pagination-control > .control-box > .number-button {
     -fx-background-radius: 0;
@@ -2640,13 +2672,13 @@
  ******************************************************************************/
 
 .chart-line-symbol {
-    -fx-background-color: #f9d900, white;
+    -fx-background-color: CHART_COLOR_1, white;
     -fx-background-insets: 0, 2;
     -fx-background-radius: 5px;
     -fx-padding: 5px;
 }
 .chart-series-line {
-    -fx-stroke: #f9d900;
+    -fx-stroke: CHART_COLOR_1;
     -fx-stroke-width: 3px;
 }
 .default-color0.chart-line-symbol { -fx-background-color: CHART_COLOR_1, white; }
@@ -2673,7 +2705,7 @@
  ******************************************************************************/
 
 .chart-area-symbol {
-    -fx-background-color: #f9d900, white;
+    -fx-background-color: CHART_COLOR_1, white;
     -fx-background-insets: 0, 1;
     -fx-background-radius: 4px; /* makes sure this remains circular */
     -fx-padding: 3px;
@@ -2687,7 +2719,7 @@
 .default-color6.chart-area-symbol { -fx-background-color: CHART_COLOR_7, white; }
 .default-color7.chart-area-symbol { -fx-background-color: CHART_COLOR_8, white; }
 .chart-series-area-line {
-    -fx-stroke: #f9d900;
+    -fx-stroke: CHART_COLOR_1;
     -fx-stroke-width: 1px;
 }
 .default-color0.chart-series-area-line { -fx-stroke: CHART_COLOR_1; }
@@ -2700,16 +2732,16 @@
 .default-color7.chart-series-area-line { -fx-stroke: CHART_COLOR_8; }
 .chart-series-area-fill {
     -fx-stroke: null;
-    -fx-fill: #f9d90044;
-}
-.default-color0.chart-series-area-fill { -fx-fill: CHART_COLOR_1; -fx-opacity: 0.2; }
-.default-color1.chart-series-area-fill { -fx-fill: CHART_COLOR_2; -fx-opacity: 0.2; }
-.default-color2.chart-series-area-fill { -fx-fill: CHART_COLOR_3; -fx-opacity: 0.2; }
-.default-color3.chart-series-area-fill { -fx-fill: CHART_COLOR_4; -fx-opacity: 0.2; }
-.default-color4.chart-series-area-fill { -fx-fill: CHART_COLOR_5; -fx-opacity: 0.2; }
-.default-color5.chart-series-area-fill { -fx-fill: CHART_COLOR_6; -fx-opacity: 0.2; }
-.default-color6.chart-series-area-fill { -fx-fill: CHART_COLOR_7; -fx-opacity: 0.2; }
-.default-color7.chart-series-area-fill { -fx-fill: CHART_COLOR_8; -fx-opacity: 0.2; }
+    -fx-fill: CHART_COLOR_1_TRANS_20;
+}
+.default-color0.chart-series-area-fill { -fx-fill: CHART_COLOR_1_TRANS_20; }
+.default-color1.chart-series-area-fill { -fx-fill: CHART_COLOR_2_TRANS_20; }
+.default-color2.chart-series-area-fill { -fx-fill: CHART_COLOR_3_TRANS_20; }
+.default-color3.chart-series-area-fill { -fx-fill: CHART_COLOR_4_TRANS_20; }
+.default-color4.chart-series-area-fill { -fx-fill: CHART_COLOR_5_TRANS_20; }
+.default-color5.chart-series-area-fill { -fx-fill: CHART_COLOR_6_TRANS_20; }
+.default-color6.chart-series-area-fill { -fx-fill: CHART_COLOR_7_TRANS_20; }
+.default-color7.chart-series-area-fill { -fx-fill: CHART_COLOR_8_TRANS_20; }
 .area-legend-symbol {
     -fx-padding: 6px;
     -fx-background-radius: 6px; /* makes sure this remains circular */
@@ -2727,17 +2759,17 @@
     -fx-padding: 8px;
 }
 .chart-bubble {
-    -fx-bubble-fill: #f9d900;
+    -fx-bubble-fill: CHART_COLOR_1_TRANS_70;
     -fx-background-color: radial-gradient(center 50% 50%, radius 80%, derive(-fx-bubble-fill,20%), derive(-fx-bubble-fill,-30%));
 }
-.default-color0.chart-bubble { -fx-bubble-fill: CHART_COLOR_1; -fx-opacity: 0.7; }
-.default-color1.chart-bubble { -fx-bubble-fill: CHART_COLOR_2; -fx-opacity: 0.7; }
-.default-color2.chart-bubble { -fx-bubble-fill: CHART_COLOR_3; -fx-opacity: 0.7; }
-.default-color3.chart-bubble { -fx-bubble-fill: CHART_COLOR_4; -fx-opacity: 0.7; }
-.default-color4.chart-bubble { -fx-bubble-fill: CHART_COLOR_5; -fx-opacity: 0.7; }
-.default-color5.chart-bubble { -fx-bubble-fill: CHART_COLOR_6; -fx-opacity: 0.7; }
-.default-color6.chart-bubble { -fx-bubble-fill: CHART_COLOR_7; -fx-opacity: 0.7; }
-.default-color7.chart-bubble { -fx-bubble-fill: CHART_COLOR_8; -fx-opacity: 0.7; }
+.default-color0.chart-bubble { -fx-bubble-fill: CHART_COLOR_1_TRANS_70; }
+.default-color1.chart-bubble { -fx-bubble-fill: CHART_COLOR_2_TRANS_70; }
+.default-color2.chart-bubble { -fx-bubble-fill: CHART_COLOR_3_TRANS_70; }
+.default-color3.chart-bubble { -fx-bubble-fill: CHART_COLOR_4_TRANS_70; }
+.default-color4.chart-bubble { -fx-bubble-fill: CHART_COLOR_5_TRANS_70; }
+.default-color5.chart-bubble { -fx-bubble-fill: CHART_COLOR_6_TRANS_70; }
+.default-color6.chart-bubble { -fx-bubble-fill: CHART_COLOR_7_TRANS_70; }
+.default-color7.chart-bubble { -fx-bubble-fill: CHART_COLOR_8_TRANS_70; }
 
 /*******************************************************************************
  *                                                                             *
@@ -2745,22 +2777,8 @@
  *                                                                             *
  ******************************************************************************/
 
-/* TODO flip gradient vertical for negative bars */
-/*.chart-bar {
-    -fx-bar-fill: #22bad9;
-    -fx-background-color:   derive(-fx-bar-fill,-30%),
-                            linear-gradient(to bottom, derive(-fx-bar-fill,40%), derive(-fx-bar-fill,10%)),
-                            linear-gradient(to bottom, derive(-fx-bar-fill,10%) ,derive(-fx-bar-fill,-6%));
-    -fx-background-insets: 0,1 1 0 1,2 2 1 2;
-}
-.chart-bar.negative {
-    -fx-background-color:   derive(-fx-bar-fill,-30%),
-                            linear-gradient(to top, derive(-fx-bar-fill,40%), derive(-fx-bar-fill,10%)),
-                            linear-gradient(to top, derive(-fx-bar-fill,10%) ,derive(-fx-bar-fill,-6%));
-    -fx-background-insets: 1 0 0 0,1,2;
-}*/
 .chart-bar {
-    -fx-bar-fill: #22bad9;
+    -fx-bar-fill: CHART_COLOR_1;
     -fx-background-color:   linear-gradient(to right, 
                                 derive(-fx-bar-fill, -4%),
                                 derive(-fx-bar-fill, -1%),
@@ -2805,7 +2823,7 @@
  ******************************************************************************/
 
 .chart-pie {
-    -fx-pie-color: #2f357f;
+    -fx-pie-color: CHART_COLOR_1;
     -fx-background-color: radial-gradient(radius 100%, derive(-fx-pie-color,20%), derive(-fx-pie-color,-10%));
     -fx-background-insets: 1;
     -fx-border-color: -fx-background;
--- a/javafx-ui-controls/src/javafx/scene/control/TableColumnBase.java	Mon Apr 29 20:02:32 2013 +0400
+++ b/javafx-ui-controls/src/javafx/scene/control/TableColumnBase.java	Wed May 01 11:16:07 2013 -0400
@@ -478,6 +478,39 @@
     }
     
     
+    
+    // --- Reorderable
+    private BooleanProperty reorderable;
+    /**
+     * @treatAsPrivate implementation detail
+     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
+     */
+    @Deprecated
+    public final BooleanProperty impl_reorderableProperty() {
+        if (reorderable == null) {
+            reorderable = new SimpleBooleanProperty(this, "reorderable", true);
+        }
+        return reorderable;
+    }
+    /**
+     * @treatAsPrivate implementation detail
+     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
+     */
+    @Deprecated
+    public final void impl_setReorderable(boolean value) {
+        impl_reorderableProperty().set(value);
+    }
+    /**
+     * @treatAsPrivate implementation detail
+     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
+     */
+    @Deprecated
+    public final boolean impl_isReorderable() {
+        return reorderable == null ? false : reorderable.get();
+    }
+    
+    
+    
     // --- Comparator
     /**
      * Comparator function used when sorting this table column. The two Objects