diff options
author | Felipe Heidrich | 2008-03-03 18:41:22 +0000 |
---|---|---|
committer | Felipe Heidrich | 2008-03-03 18:41:22 +0000 |
commit | d96bb7d14b0502175aaffe21366e4259f6bf8cfc (patch) | |
tree | 51dd7748c1d985face2f3c8742c3b222b16a16d0 | |
parent | 8dffe457addf7aa23b16b0bf1a105aafd890d061 (diff) | |
download | eclipse.platform.swt-wpf_work.tar.gz eclipse.platform.swt-wpf_work.tar.xz eclipse.platform.swt-wpf_work.zip |
WPF hacks for Animation and FlickerViewerwpf_work
6 files changed, 180 insertions, 14 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/LinearPropertyAnimation.java b/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/LinearPropertyAnimation.java index 5e697f05ef..46bcba7bdd 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/LinearPropertyAnimation.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/LinearPropertyAnimation.java @@ -28,6 +28,27 @@ public class LinearPropertyAnimation extends PropertyAnimation { setTargetProperty(animation, property); } + void createPointAnimation() { + int children = OS.TimelineGroup_Children(handle); + if ("location".equals(property)) { + xAnim = OS.gcnew_DoubleAnimation(); + OS.IList_Add(children, xAnim); + setTargetProperty(xAnim, "x"); + yAnim = OS.gcnew_DoubleAnimation(); + OS.IList_Add(children, yAnim); + setTargetProperty(yAnim, "y"); + } + if ("size".equals(property)) { + wAnim = OS.gcnew_DoubleAnimation(); + OS.IList_Add(children, wAnim); + setTargetProperty(wAnim, "Width"); + hAnim = OS.gcnew_DoubleAnimation(); + OS.IList_Add(children, hAnim); + setTargetProperty(hAnim, "Height"); + } + OS.GCHandle_Free(children); + } + void createRectangleAnimation() { int children = OS.TimelineGroup_Children(handle); xAnim = OS.gcnew_DoubleAnimation(); @@ -104,27 +125,55 @@ public class LinearPropertyAnimation extends PropertyAnimation { void updateFromToValues() { if (paramType == Double.TYPE) { - OS.DoubleAnimation_From(animation, ((Double)from).doubleValue()); - OS.DoubleAnimation_To(animation, ((Double)to).doubleValue()); + double fromValue = 0, toValue; + if ("alpha".equals(property)) { + if (from != null) fromValue = ((Number)from).doubleValue() / 255; + toValue = ((Number)to).doubleValue() / 255; + } else { + if (from != null) fromValue = ((Number)from).doubleValue(); + toValue = ((Number)to).doubleValue(); + } + if (from != null) OS.DoubleAnimation_From(animation, fromValue); + OS.DoubleAnimation_To(animation, toValue); } if (paramType == Color.class || paramType == Transform.class) { OS.DoubleAnimation_From(animation, 0); OS.DoubleAnimation_To(animation, 1); } if (paramType == Integer.TYPE) { - OS.Int32Animation_From(animation, ((Integer)from).intValue()); + if (from != null) OS.Int32Animation_From(animation, ((Integer)from).intValue()); OS.Int32Animation_To(animation, ((Integer)to).intValue()); } if (paramType == Rectangle.class) { - OS.DoubleAnimation_From(xAnim, ((Rectangle)from).x); + if (from != null) { + OS.DoubleAnimation_From(xAnim, ((Rectangle)from).x); + OS.DoubleAnimation_From(yAnim, ((Rectangle)from).y); + OS.DoubleAnimation_From(wAnim, ((Rectangle)from).width); + OS.DoubleAnimation_From(hAnim, ((Rectangle)from).height); + } OS.DoubleAnimation_To(xAnim, ((Rectangle)to).x); - OS.DoubleAnimation_From(yAnim, ((Rectangle)from).y); OS.DoubleAnimation_To(yAnim, ((Rectangle)to).y); - OS.DoubleAnimation_From(wAnim, ((Rectangle)from).width); OS.DoubleAnimation_To(wAnim, ((Rectangle)to).width); - OS.DoubleAnimation_From(hAnim, ((Rectangle)from).height); OS.DoubleAnimation_To(hAnim, ((Rectangle)to).height); } + if (paramType == Point.class) { + if ("location".equals(property)) { + if (from != null) { + OS.DoubleAnimation_From(xAnim, ((Point)from).x); + OS.DoubleAnimation_From(yAnim, ((Point)from).y); + } + OS.DoubleAnimation_To(xAnim, ((Point)to).x); + OS.DoubleAnimation_To(yAnim, ((Point)to).y); + } + if ("size".equals(property)) { + if (from != null) { + OS.DoubleAnimation_From(wAnim, ((Point)from).x); + OS.DoubleAnimation_From(hAnim, ((Point)from).y); + } + OS.DoubleAnimation_To(wAnim, ((Point)to).x); + OS.DoubleAnimation_To(hAnim, ((Point)to).y); + } + } // else { // throw new RuntimeException(paramType.getName() + " is not supported yet."); // } diff --git a/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/Properties.java b/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/Properties.java index d6506457ce..ae35daa1cc 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/Properties.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/Properties.java @@ -18,6 +18,7 @@ class Properties { } static int getDependencyProperty(Object target, String property) { + if (property.equalsIgnoreCase("alpha")) return OS.UIElement_OpacityProperty(); if (property.equalsIgnoreCase("x")) return OS.Canvas_LeftProperty(); if (property.equalsIgnoreCase("y")) return OS.Canvas_TopProperty(); if (property.equalsIgnoreCase("Width")) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/PropertyAnimation.java b/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/PropertyAnimation.java index c347eaf2c8..2fe609f5cf 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/PropertyAnimation.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Animation2/wpf/org/eclipse/swt/animation/PropertyAnimation.java @@ -48,6 +48,9 @@ public class PropertyAnimation extends Animation { void createRectangleAnimation() { } + void createPointAnimation() { + } + void OnPropertyChanged(int object, int args) { try { if (nextValue != null) { @@ -173,6 +176,10 @@ public class PropertyAnimation extends Animation { // } void setParamType() { + if ("alpha".equals(property) || "x".equals(property) || "y".equals(property) || "width".equals(property) || "height".equals(property)) { + paramType = Double.TYPE; + return; + } String mName = "set" + property.substring(0, 1).toUpperCase() + property.substring(1); Class clazz = target.getClass(); Method[] methods = clazz.getMethods(); @@ -245,6 +252,10 @@ public class PropertyAnimation extends Animation { createRectangleAnimation(); return; } + if (paramType == Point.class) { + createPointAnimation(); + return; + } throw new RuntimeException(paramType + " is not supported yet."); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java index 7860829221..ae9890c7a6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java @@ -871,6 +871,31 @@ void removeControl (Control control) { fixTabList (control); } +void resized () { + super.resized(); + if (isDisposed ()) return; + if (layout != null) { + markLayout (false, false); + updateLayout (false, false); + } +} + +public void setAlpha(int alpha) { + checkWidget (); + int backgroundHandle = backgroundHandle (); + int property = backgroundProperty (); + int brush = OS.DependencyObject_GetValue (backgroundHandle, property); + if (brush != 0) { + int newBrush = OS.Freezable_Clone(brush); + OS.Brush_Opacity (newBrush, (alpha & 0xFF) / (double)0xFF); + OS.DependencyObject_SetValue (backgroundHandle, property, newBrush); + OS.GCHandle_Free (brush); + OS.GCHandle_Free (newBrush); + } + OS.GCHandle_Free (property); +// OS.UIElement_Opacity (handle, (alpha & 0xFF) / (double)0xFF); +} + void setBackgroundBrush (int brush) { if (brush != 0) { OS.Panel_Background (handle, brush); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java index c097fa425c..f66aa840d2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java @@ -46,6 +46,7 @@ public abstract class Control extends Widget implements Drawable { Region region; // int drawCount; int foreground, background; + int x, y, width, height; Font font; Composite parent; @@ -1286,6 +1287,49 @@ void hookEvents () { handler = OS.gcnew_ContextMenuEventHandler (jniRef, "HandleContextMenuOpening"); OS.FrameworkElement_ContextMenuOpening (handle, handler); OS.GCHandle_Free (handler); + + handler = OS.gcnew_SizeChangedEventHandler(jniRef, "HandleSizeChanged"); + OS.FrameworkElement_SizeChanged (topHandle, handler); + OS.GCHandle_Free (handler); + + int typeid = OS.Canvas_typeid(); + handler = OS.gcnew_EventHandler(jniRef, "HandleTopChanged"); + int property = OS.Canvas_TopProperty(); + int dpd = OS.DependencyPropertyDescriptor_FromProperty(property, typeid); + OS.DependencyPropertyDescriptor_AddValueChanged(dpd, topHandle, handler); + OS.GCHandle_Free(handler); + OS.GCHandle_Free(property); + OS.GCHandle_Free(dpd); + handler = OS.gcnew_EventHandler(jniRef, "HandleLeftChanged"); + property = OS.Canvas_LeftProperty(); + dpd = OS.DependencyPropertyDescriptor_FromProperty(property, typeid); + OS.DependencyPropertyDescriptor_AddValueChanged(dpd, topHandle, handler); + OS.GCHandle_Free(handler); + OS.GCHandle_Free(property); + OS.GCHandle_Free(dpd); + OS.GCHandle_Free(typeid); +} + +void HandleLeftChanged (int sender, int e) { + int topHandle = topHandle(); + int x = (int)OS.Canvas_GetLeft(topHandle); + int y = (int)OS.Canvas_GetTop(topHandle); + if (x != this.x || y != this.y) { + this.x = x; + this.y = y; + sendEvent(SWT.Move); + } +} + +void HandleTopChanged (int sender, int e) { + int topHandle = topHandle(); + int x = (int)OS.Canvas_GetLeft(topHandle); + int y = (int)OS.Canvas_GetTop(topHandle); + if (x != this.x || y != this.y) { + this.x = x; + this.y = y; + sendEvent(SWT.Move); + } } void HandleContextMenuOpening (int sender, int e) { @@ -1427,6 +1471,22 @@ void HandlePreviewTextInput(int sender, int e) { sendKeyEvent (SWT.KeyDown, e, true); } +void HandleSizeChanged (int sender, int e) { + if (!checkEvent (e)) return; + int topHandle = topHandle(); + int width = (int) OS.FrameworkElement_ActualWidth (topHandle); + int height = (int) OS.FrameworkElement_ActualHeight (topHandle); + if (this.width != width || this.height != height) { + this.width = width; + this.height = height; + resized (); + } +} + +void resized () { + sendEvent (SWT.Resize); +} + boolean hasFocus () { // return OS.UIElement_IsFocused (handle); // return OS.UIElement_IsKeyboardFocused (handle); @@ -2416,8 +2476,14 @@ int setBounds (int x, int y, int width, int height, int flags) { if ((flags & MOVED) != 0) { int oldX = (int) OS.Canvas_GetLeft (topHandle); int oldY = (int) OS.Canvas_GetTop (topHandle); - if (oldX != x) OS.Canvas_SetLeft (topHandle, x); - if (oldY != y) OS.Canvas_SetTop (topHandle, y); + if (oldX != x) { + this.x = x; + OS.Canvas_SetLeft (topHandle, x); + } + if (oldY != y) { + this.y = y; + OS.Canvas_SetTop (topHandle, y); + } if (oldX != x || oldY != y) { sendEvent (SWT.Move); if (isDisposed ()) return 0; @@ -2427,8 +2493,14 @@ int setBounds (int x, int y, int width, int height, int flags) { if ((flags & RESIZED) != 0) { int oldWidth = (int) OS.FrameworkElement_Width (topHandle); int oldHeight = (int) OS.FrameworkElement_Height (topHandle); - if (oldWidth != width) OS.FrameworkElement_Width (topHandle, width); - if (oldHeight != height) OS.FrameworkElement_Height (topHandle, height); + if (oldWidth != width) { + this.width = width; + OS.FrameworkElement_Width (topHandle, width); + } + if (oldHeight != height) { + this.height = height; + OS.FrameworkElement_Height (topHandle, height); + } if (oldWidth != width || oldHeight != height) { sendEvent (SWT.Resize); if (isDisposed ()) return 0; @@ -2538,8 +2610,16 @@ public void setDragDetect (boolean dragDetect) { } } -public void setBitmapEffect(Effect effect){ - OS.UIElement_BitmapEffect (handle, effect.handle); +public void setEffect(Effect effect){ + checkWidget (); + if (effect != null && effect.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT); + if (effect != null) { + OS.UIElement_BitmapEffect (handle, effect.handle); + OS.UIElement_ClipToBounds (topHandle (), false); + } else { + OS.UIElement_BitmapEffect (handle, 0); + setClipping(); + } // updateLayout(handle); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java index f2709294ff..53d86c2062 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java @@ -126,7 +126,7 @@ void createHandle () { } int defaultBackground () { - return OS.SystemColors_ControlColor; + return 0; } /** |