blob: e7532304e16d5e07e80745dbfab583ad797756b8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
#include "swt.h"
#include "os_structs.h"
#include "os_stats.h"
extern "C" {
#define OS_NATIVE(func) Java_org_eclipse_swt_internal_wpf_OS_##func
static JavaVM *jvm = NULL;
}
public ref class JniRefCookie {
public:
jobject object;
JniRefCookie (JNIEnv* env, jint jniRef) {
this->object = env->NewGlobalRef((jobject)jniRef);
}
~JniRefCookie() {
this->!JniRefCookie();
}
!JniRefCookie() {
if (object == NULL) return;
JNIEnv* env;
bool detach = false;
#ifdef JNI_VERSION_1_2
if (IS_JNI_1_2) {
jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
}
#endif
if (env == NULL) {
jvm->AttachCurrentThread((void **)&env, NULL);
if (IS_JNI_1_2) detach = true;
}
if (env != NULL) {
env->DeleteGlobalRef(object);
if (detach) jvm->DetachCurrentThread();
}
}
};
/* */
/* Table and Tree Classes */
/* */
public ref class SWTTreeViewRowPresenter : GridViewRowPresenter {
private:
TreeView^ tree;
static void Handle_Loaded (Object^ sender, RoutedEventArgs^ args) {
SWTTreeViewRowPresenter^ presenter = (SWTTreeViewRowPresenter^) sender;
presenter->InvalidateMeasure ();
}
public:
SWTTreeViewRowPresenter (Object^ treeview) {
this->tree = (TreeView^)treeview;
Loaded += gcnew RoutedEventHandler (&SWTTreeViewRowPresenter::Handle_Loaded);
}
protected:
virtual Size MeasureOverride (Size constraint) override {
Point point = TranslatePoint(*gcnew Point (0,0), tree);
Size size = GridViewRowPresenter::MeasureOverride (constraint);
size.Width -= Math::Min (point.X, size.Width);
return size;
}
virtual Size ArrangeOverride (Size arrangeSize) override {
double availableWidth = arrangeSize.Width;
int i = VisualChildrenCount - 1;
for (; i>=0; i--) {
UIElement^ child = (UIElement^) GetVisualChild (i);
GridViewColumn^ column = Columns [i];
double x = 0;
double width = 0;
if (i == 0) {
width = availableWidth;
} else {
width = column->ActualWidth;
//if (Double::IsNaN(width)) width = 0;
x = availableWidth - width;
}
width = Math::Max (0.0, width);
Point^ loc = gcnew Point (x, 0);
Size^ size = gcnew Size (width, child->DesiredSize.Height);
Rect^ rect = gcnew Rect (*loc, *size);
child->Arrange (*rect);
availableWidth -= width;
}
return arrangeSize;
}
};
public ref class SWTCellConverter : IValueConverter {
private:
public:
virtual Object^ Convert (Object^ value, Type^ targetType, Object^ parameter, CultureInfo^ culture) {
if (value == nullptr) return value;
IList^ cellData = (IList^)value;
int index = (int)parameter;
if (index >= cellData->Count) return nullptr;
return cellData[index];
}
virtual Object^ ConvertBack (Object^ value, Type^ targetType, Object^ parameter, CultureInfo^ culture) {
throw gcnew System::InvalidOperationException("Not implemented");
}
};
public ref class SWTRow : INotifyPropertyChanged {
private:
JniRefCookie^ cookie;
FrameworkElement^ item;
jmethodID GetTextMID;
jmethodID GetImageMID;
jmethodID GetCheckMID;
jmethodID GetForegroundMID;
jmethodID GetBackgroundMID;
jmethodID GetFontMID;
Object^ callin (jmethodID mid) {
jobject object = cookie->object;
if (object == NULL || mid == NULL) return nullptr;
JNIEnv* env;
int result = 0;
bool detach = false;
#ifdef JNI_VERSION_1_2
if (IS_JNI_1_2) {
jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
}
#endif
if (env == NULL) {
jvm->AttachCurrentThread((void **)&env, NULL);
if (IS_JNI_1_2) detach = true;
}
if (env != NULL) {
if (!env->ExceptionOccurred()) {
GCHandle gch0 = GCHandle::Alloc(item);
result = env->CallIntMethod(object, mid, (int)(IntPtr)gch0);
gch0.Free();
}
if (detach) jvm->DetachCurrentThread();
}
return TO_OBJECT (result);
}
public:
virtual event PropertyChangedEventHandler^ PropertyChanged;
SWTRow (JNIEnv* env, jint jniRef, FrameworkElement^ item) {
if (jvm == NULL) env->GetJavaVM(&jvm);
cookie = gcnew JniRefCookie(env, jniRef);
jobject object = cookie->object;
if (object) {
jclass javaClass = env->GetObjectClass(object);
GetTextMID = env->GetMethodID(javaClass, "GetText", "(I)I");
GetImageMID = env->GetMethodID(javaClass, "GetImage", "(I)I");
GetCheckMID = env->GetMethodID(javaClass, "GetCheck", "(I)I");
GetForegroundMID = env->GetMethodID(javaClass, "GetForeground", "(I)I");
GetBackgroundMID = env->GetMethodID(javaClass, "GetBackground", "(I)I");
GetFontMID = env->GetMethodID(javaClass, "GetFont", "(I)I");
}
this->item = item;
}
property Object^ Text {
Object^ get () { return callin(GetTextMID); }
}
property Object^ Image {
Object^ get () { return callin(GetImageMID); }
}
property Object^ Foreground {
Object^ get () { return callin(GetForegroundMID); }
}
property Object^ Background {
Object^ get () { return callin(GetBackgroundMID); }
}
property Object^ Font {
Object^ get () { return callin(GetFontMID); }
}
property Object^ Check {
Object^ get () {
int value = ((IntPtr)callin(GetCheckMID)).ToInt32();
Nullable<bool> result;
switch (value) {
case 0: result = false; break;
case 1: result = true; break;
}
return result;
}
void set (Object^ value) { };
}
void NotifyPropertyChanged (int property) {
switch (property) {
case 0:
PropertyChanged (this, gcnew PropertyChangedEventArgs("Text"));
break;
case 1:
PropertyChanged (this, gcnew PropertyChangedEventArgs("Image"));
break;
case 2:
PropertyChanged (this, gcnew PropertyChangedEventArgs("Foreground"));
break;
case 3:
PropertyChanged (this, gcnew PropertyChangedEventArgs("Background"));
break;
case 4:
PropertyChanged (this, gcnew PropertyChangedEventArgs("Check"));
break;
case 5:
PropertyChanged (this, gcnew PropertyChangedEventArgs("Font"));
break;
}
}
};
/* */
/* Canvas */
/* */
public ref class SWTCanvas : Canvas {
private:
DrawingVisual^ _visual;
jmethodID OnRenderMID;
JniRefCookie^ cookie;
void callin (jmethodID mid, DrawingContext^ arg0) {
jobject object = cookie->object;
if (object == NULL || mid == NULL) return;
JNIEnv* env;
bool detach = false;
#ifdef JNI_VERSION_1_2
if (IS_JNI_1_2) {
jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
}
#endif
if (env == NULL) {
jvm->AttachCurrentThread((void **)&env, NULL);
if (IS_JNI_1_2) detach = true;
}
if (env != NULL) {
if (!env->ExceptionOccurred()) {
GCHandle gch0 = GCHandle::Alloc(arg0);
env->CallVoidMethod(object, mid, (int)(IntPtr)gch0);
gch0.Free();
}
if (detach) jvm->DetachCurrentThread();
}
}
void updateVisual(DrawingVisual^ visual) {
if (_visual != nullptr) {
RemoveVisualChild(_visual);
}
_visual = visual;
if (_visual != nullptr) {
AddVisualChild(_visual);
}
}
protected:
virtual void OnRender(DrawingContext^ drawingContext) override {
this->Canvas::OnRender(drawingContext);
callin(OnRenderMID, drawingContext);
}
property int VisualChildrenCount {
virtual int get () override {
int count = this->Canvas::VisualChildrenCount;
if (_visual != nullptr) count++;
return count;
}
}
virtual Visual^ GetVisualChild(int index) override {
if (_visual != nullptr) {
//int count = this->Canvas::VisualChildrenCount;
//if (index == count) return _visual;
if (index == 0) return _visual;
return this->Canvas::GetVisualChild(index - 1);
}
return this->Canvas::GetVisualChild(index);
}
public:
SWTCanvas (JNIEnv* env, jint jniRef) {
if (jvm == NULL) env->GetJavaVM(&jvm);
cookie = gcnew JniRefCookie(env, jniRef);
jobject object = cookie->object;
if (object) {
jclass javaClass = env->GetObjectClass(object);
OnRenderMID = env->GetMethodID(javaClass, "OnRender", "(I)V");
}
_visual = nullptr;
}
property DrawingVisual^ Visual {
DrawingVisual^ get() {
return _visual;
}
void set(DrawingVisual^ visual) {
updateVisual(visual);
}
}
};
/* */
/* Cursor Support Class */
/* */
public ref class SWTSafeHandle : SafeHandle {
private:
bool _isIcon;
public:
SWTSafeHandle (IntPtr handle, bool isIcon) : SafeHandle ((IntPtr)-1, true) {
this->handle = handle;
_isIcon = isIcon;
}
virtual bool ReleaseHandle () override {
bool result;
if (_isIcon) {
result = DestroyIcon((HICON)(int)handle);
} else {
result = DestroyCursor((HCURSOR)(int)handle);
}
handle = (IntPtr)(-1);
return result;
}
property bool IsInvalid {
virtual bool get() override { return (int)handle == -1; }
}
};
/* */
/* Text Layout Classes */
/* */
public ref class SWTTextEmbeddedObject : TextEmbeddedObject {
private:
int _length;
double _width, _height, _baseline;
TextRunProperties^ _properties;
public:
SWTTextEmbeddedObject (TextRunProperties^ properties, int length, double width, double height, double baseline) {
_properties = properties;
_length = length;
_width = width;
_height = height;
_baseline = baseline;
}
virtual void Draw(DrawingContext^ drawingContext, Point origin, bool rightToLeft, bool sideways) override {
}
virtual System::Windows::Rect ComputeBoundingBox(bool rightToLeft, bool sideways) override {
return System::Windows::Rect(0, 0, _width, _height);
}
virtual TextEmbeddedObjectMetrics^ Format(double remainingParagraphWidth) override {
return gcnew TextEmbeddedObjectMetrics(_width, _height, _baseline);
}
property LineBreakCondition BreakAfter {
virtual LineBreakCondition get() override { return LineBreakCondition::BreakAlways; }
}
property LineBreakCondition BreakBefore {
virtual LineBreakCondition get() override { return LineBreakCondition::BreakAlways; }
}
property bool HasFixedSize {
virtual bool get() override { return true; }
}
property System::Windows::Media::TextFormatting::CharacterBufferReference CharacterBufferReference {
virtual System::Windows::Media::TextFormatting::CharacterBufferReference get() override { throw gcnew Exception("The method or operation is not implemented."); }
}
property int Length {
virtual int get() override { return _length; }
}
property TextRunProperties^ Properties {
virtual TextRunProperties^ get() override { return _properties; }
}
};
public ref class SWTTextParagraphProperties : TextParagraphProperties {
private:
System::Windows::FlowDirection _flowDirection;
System::Windows::TextAlignment _textAlignment;
bool _firstLineInParagraph;
TextRunProperties^ _defaultTextRunProperties;
System::Windows::TextWrapping _textWrap;
double _indent;
double _paragraphIndent;
double _lineHeight;
System::Collections::Generic::IList<TextTabProperties^>^ _tabs;
public:
SWTTextParagraphProperties (
System::Windows::FlowDirection flowDirection,
System::Windows::TextAlignment textAlignment,
bool firstLineInParagraph,
TextRunProperties^ defaultTextRunProperties,
System::Windows::TextWrapping textWrap,
double lineHeight,
double indent,
System::Collections::Generic::IList<TextTabProperties^>^ tabs)
{
_flowDirection = flowDirection;
_textAlignment = textAlignment;
_firstLineInParagraph = firstLineInParagraph;
_defaultTextRunProperties = defaultTextRunProperties;
_textWrap = textWrap;
_lineHeight = lineHeight;
_indent = indent;
_tabs = tabs;
}
property System::Windows::FlowDirection FlowDirection {
virtual System::Windows::FlowDirection get() override { return _flowDirection; }
}
property System::Windows::TextAlignment TextAlignment {
virtual System::Windows::TextAlignment get() override { return _textAlignment; }
}
property bool FirstLineInParagraph {
virtual bool get() override { return _firstLineInParagraph; }
}
property TextRunProperties^ DefaultTextRunProperties {
virtual TextRunProperties^ get() override { return _defaultTextRunProperties; }
}
property System::Windows::TextWrapping TextWrapping {
virtual System::Windows::TextWrapping get() override { return _textWrap; }
}
property double LineHeight {
virtual double get() override { return _lineHeight; }
}
property double Indent {
virtual double get() override { return _indent; }
}
property System::Windows::Media::TextFormatting::TextMarkerProperties^ TextMarkerProperties {
virtual System::Windows::Media::TextFormatting::TextMarkerProperties^ get() override { return nullptr; }
}
property double ParagraphIndent {
virtual double get() override { return _paragraphIndent; }
}
property System::Collections::Generic::IList<TextTabProperties^>^ Tabs {
virtual System::Collections::Generic::IList<TextTabProperties^>^ get() override { return _tabs; }
}
};
public ref class SWTTextRunProperties : TextRunProperties {
private:
System::Windows::Media::Typeface^ _typeface;
double _emSize;
double _emHintingSize;
System::Windows::TextDecorationCollection^ _textDecorations;
System::Windows::Media::Brush^ _foregroundBrush;
System::Windows::Media::Brush^ _backgroundBrush;
System::Windows::BaselineAlignment _baselineAlignment;
System::Globalization::CultureInfo^ _culture;
public:
SWTTextRunProperties (
System::Windows::Media::Typeface^ typeface,
double size,
double hintingSize,
System::Windows::TextDecorationCollection^ textDecorations,
System::Windows::Media::Brush^ forgroundBrush,
System::Windows::Media::Brush^ backgroundBrush,
System::Windows::BaselineAlignment baselineAlignment,
System::Globalization::CultureInfo^ culture)
{
_typeface = typeface;
_emSize = size;
_emHintingSize = hintingSize;
_textDecorations = textDecorations;
_foregroundBrush = forgroundBrush;
_backgroundBrush = backgroundBrush;
_baselineAlignment = baselineAlignment;
_culture = culture;
}
property System::Windows::Media::Typeface^ Typeface {
virtual System::Windows::Media::Typeface^ get() override { return _typeface; }
}
property double FontRenderingEmSize {
virtual double get() override { return _emSize; }
}
property double FontHintingEmSize {
virtual double get() override { return _emHintingSize; }
}
property System::Windows::TextDecorationCollection^ TextDecorations {
virtual System::Windows::TextDecorationCollection^ get() override { return _textDecorations; }
}
property System::Windows::Media::Brush^ ForegroundBrush {
virtual System::Windows::Media::Brush^ get() override { return _foregroundBrush; }
void set(System::Windows::Media::Brush^ brush) { _foregroundBrush = brush; }
}
property System::Windows::Media::Brush^ BackgroundBrush {
virtual System::Windows::Media::Brush^ get() override { return _backgroundBrush; }
}
property System::Windows::BaselineAlignment BaselineAlignment {
virtual System::Windows::BaselineAlignment get() override { return _baselineAlignment; }
}
property System::Globalization::CultureInfo^ CultureInfo {
virtual System::Globalization::CultureInfo^ get() override { return _culture; }
}
property System::Windows::Media::TextFormatting::TextRunTypographyProperties^ TypographyProperties {
virtual System::Windows::Media::TextFormatting::TextRunTypographyProperties^ get() override { return nullptr; }
}
property System::Windows::Media::TextEffectCollection^ TextEffects {
virtual System::Windows::Media::TextEffectCollection^ get() override { return nullptr; }
}
property System::Windows::Media::NumberSubstitution^ NumberSubstitution {
virtual System::Windows::Media::NumberSubstitution^ get() override { return nullptr; }
}
};
public ref class SWTTextSource : TextSource {
private:
jmethodID GetTextRunMID, GetPrecedingTextMID;
JniRefCookie^ cookie;
public:
SWTTextSource (JNIEnv* env, jint jniRef) {
if (jvm == NULL) env->GetJavaVM(&jvm);
cookie = gcnew JniRefCookie(env, jniRef);
jobject object = cookie->object;
if (object) {
jclass javaClass = env->GetObjectClass(object);
GetTextRunMID = env->GetMethodID(javaClass, "GetTextRun", "(I)I");
GetPrecedingTextMID = env->GetMethodID(javaClass, "GetPrecedingText", "(I)I");
}
}
Object^ callin (jmethodID mid, int arg0) {
jobject object = cookie->object;
if (object == NULL || mid == NULL) return nullptr;
JNIEnv* env;
bool detach = false;
int result = 0;
#ifdef JNI_VERSION_1_2
if (IS_JNI_1_2) {
jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
}
#endif
if (env == NULL) {
jvm->AttachCurrentThread((void **)&env, NULL);
if (IS_JNI_1_2) detach = true;
}
if (env != NULL) {
if (!env->ExceptionOccurred()) {
result = env->CallIntMethod(object, mid, arg0);
}
if (detach) jvm->DetachCurrentThread();
}
return TO_OBJECT (result);
}
virtual TextRun^ GetTextRun(int textSourceCharacterIndex) override {
return (TextRun^) callin(GetTextRunMID, textSourceCharacterIndex);
}
virtual TextSpan<CultureSpecificCharacterBufferRange^>^ GetPrecedingText(int textSourceCharacterIndexLimit) override {
return (TextSpan<CultureSpecificCharacterBufferRange^>^) callin(GetPrecedingTextMID, textSourceCharacterIndexLimit);
}
virtual int GetTextEffectCharacterIndexFromTextSourceCharacterIndex(int textSourceCharacterIndex) override {
return 0;
}
};
extern "C" {
jint GCHandle_GetHandle(Object^ obj) {
return obj == nullptr ? 0 : (int)GCHandle::ToIntPtr(GCHandle::Alloc(obj));
}
/* */
/* Event Handler Class */
/* */
delegate void NoArgsDelegate ();
ref class SWTHandler {
private:
jmethodID mid;
JniRefCookie^ cookie;
public:
SWTHandler() {
}
SWTHandler(JNIEnv* env, jint jniRef, jstring method) {
const char * methodString;
if (jvm == NULL) env->GetJavaVM(&jvm);
cookie = gcnew JniRefCookie(env, jniRef);
jobject object = cookie->object;
if (method) methodString = (const char *) env->GetStringUTFChars(method, NULL);
if (object && methodString) {
jclass javaClass = env->GetObjectClass(object);
mid = env->GetMethodID(javaClass, methodString, "(II)V");
}
if (method && methodString) env->ReleaseStringUTFChars(method, methodString);
}
void EventHandler (Object^ sender, EventArgs^ e) {
jobject object = cookie->object;
if (object == NULL || mid == NULL) return;
JNIEnv* env;
bool detach = false;
#ifdef JNI_VERSION_1_2
if (IS_JNI_1_2) {
jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
}
#endif
if (env == NULL) {
jvm->AttachCurrentThread((void **)&env, NULL);
if (IS_JNI_1_2) detach = true;
}
if (env != NULL) {
if (!env->ExceptionOccurred()) {
//TODO alloc sender causes handle table corruption
//GCHandle gch0 = GCHandle::Alloc(sender);
GCHandle gch1 = GCHandle::Alloc(e);
//env->CallVoidMethod(object, mid, (int)(IntPtr)gch0, (int)(IntPtr)gch1);
env->CallVoidMethod(object, mid, 0, (int)(IntPtr)gch1);
//gch0.Free();
gch1.Free();
}
if (detach) jvm->DetachCurrentThread();
}
}
void TimerHandler (Object^ sender, EventArgs^ e) {
jobject object = cookie->object;
if (object == NULL || mid == NULL) return;
JNIEnv* env;
bool detach = false;
#ifdef JNI_VERSION_1_2
if (IS_JNI_1_2) {
jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
}
#endif
if (env == NULL) {
jvm->AttachCurrentThread((void **)&env, NULL);
if (IS_JNI_1_2) detach = true;
}
if (env != NULL) {
if (!env->ExceptionOccurred()) {
if (sender->GetType() == DispatcherTimer::typeid) {
DispatcherTimer^ timer = (DispatcherTimer^)sender;
int index = (int)timer->Tag;
GCHandle gch1 = GCHandle::Alloc(e);
env->CallVoidMethod(object, mid, index, (int)(IntPtr)gch1);
gch1.Free();
}
}
if (detach) jvm->DetachCurrentThread();
}
}
void CancelEventHandler (Object^ sender, CancelEventArgs^ e) {
EventHandler (sender, e);
}
void RoutedEventHandler (Object^ sender, RoutedEventArgs^ e) {
EventHandler (sender, e);
}
void RoutedPropertyChangedEventHandler (Object^ sender, RoutedPropertyChangedEventArgs<double>^ e) {
EventHandler (sender, e);
}
void RoutedPropertyChangedEventHandler (Object^ sender, RoutedPropertyChangedEventArgs<Object^>^ e) {
EventHandler (sender, e);
}
void ExecutedRoutedEventHandler (Object^ sender, ExecutedRoutedEventArgs^ e) {
EventHandler (sender, e);
}
void DispatcherHookEventHandler (Object^ sender, DispatcherHookEventArgs^ e) {
EventHandler (sender, e);
}
void SizeChangedEventHandler (Object^ sender, SizeChangedEventArgs^ e) {
EventHandler (sender, e);
}
void ScrollEventHandler (Object^ sender, ScrollEventArgs^ e) {
EventHandler (sender, e);
}
void SelectionChangedEventHandler (Object^ sender, SelectionChangedEventArgs^ e) {
EventHandler (sender, e);
}
void KeyEventHandler (Object^ sender, KeyEventArgs^ e) {
EventHandler (sender, e);
}
void MouseEventHandler (Object^ sender, MouseEventArgs^ e) {
EventHandler (sender, e);
}
void MouseButtonEventHandler (Object^ sender, MouseButtonEventArgs^ e) {
EventHandler (sender, e);
}
void MouseWheelEventHandler (Object^ sender, MouseWheelEventArgs^ e) {
EventHandler (sender, e);
}
void TextCompositionEventHandler (Object^ sender, TextCompositionEventArgs^ e) {
EventHandler (sender, e);
}
void TextChangedEventHandler (Object^ sender, TextChangedEventArgs^ e) {
EventHandler (sender, e);
}
void KeyboardFocusChangedEventHandler (Object^ sender, KeyboardFocusChangedEventArgs^ e) {
EventHandler (sender, e);
}
void ContextMenuEventHandler (Object^ sender, ContextMenuEventArgs^ e) {
EventHandler (sender, e);
}
void NoArgsDelegate() {}
};
#define HANDLER_CONSTRUCTOR(name) JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1##name##) (JNIEnv *env, jclass that, jint arg0, jstring arg1) { \
jint rc = 0; \
OS_NATIVE_ENTER(env, that, gcnew_1##name##_FUNC); \
rc = (jint)TO_HANDLE(gcnew name (gcnew SWTHandler(env, arg0, arg1), &SWTHandler::##name##)); \
OS_NATIVE_EXIT(env, that, gcnew_1##name##_FUNC); \
return rc; \
} \
#ifndef NO_gcnew_1EventHandler
HANDLER_CONSTRUCTOR (EventHandler)
#endif
#ifndef NO_gcnew_1CancelEventHandler
HANDLER_CONSTRUCTOR (CancelEventHandler)
#endif
#ifndef NO_gcnew_1ExecutedRoutedEventHandler
HANDLER_CONSTRUCTOR (ExecutedRoutedEventHandler)
#endif
#ifndef NO_gcnew_1DispatcherHookEventHandler
HANDLER_CONSTRUCTOR (DispatcherHookEventHandler)
#endif
#ifndef NO_gcnew_1SizeChangedEventHandler
HANDLER_CONSTRUCTOR (SizeChangedEventHandler)
#endif
#ifndef NO_gcnew_1ScrollEventHandler
HANDLER_CONSTRUCTOR (ScrollEventHandler)
#endif
#ifndef NO_gcnew_1SelectionChangedEventHandler
HANDLER_CONSTRUCTOR (SelectionChangedEventHandler)
#endif
#ifndef NO_gcnew_1KeyEventHandler
HANDLER_CONSTRUCTOR (KeyEventHandler)
#endif
#ifndef NO_gcnew_1MouseEventHandler
HANDLER_CONSTRUCTOR (MouseEventHandler)
#endif
#ifndef NO_gcnew_1MouseButtonEventHandler
HANDLER_CONSTRUCTOR (MouseButtonEventHandler)
#endif
#ifndef NO_gcnew_1MouseWheelEventHandler
HANDLER_CONSTRUCTOR (MouseWheelEventHandler)
#endif
#ifndef NO_gcnew_1TextCompositionEventHandler
HANDLER_CONSTRUCTOR (TextCompositionEventHandler)
#endif
#ifndef NO_gcnew_1TextChangedEventHandler
HANDLER_CONSTRUCTOR (TextChangedEventHandler)
#endif
#ifndef NO_gcnew_1KeyboardFocusChangedEventHandler
HANDLER_CONSTRUCTOR (KeyboardFocusChangedEventHandler)
#endif
#ifndef NO_gcnew_1ContextMenuEventHandler
HANDLER_CONSTRUCTOR (ContextMenuEventHandler)
#endif
#ifndef NO_gcnew_1RoutedEventHandler
HANDLER_CONSTRUCTOR (RoutedEventHandler)
#endif
// special cases
#ifndef NO_gcnew_1TimerHandler
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TimerHandler) (JNIEnv *env, jclass that, jint arg0, jstring arg1) {
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1TimerHandler_FUNC);
rc = (jint)TO_HANDLE(gcnew EventHandler (gcnew SWTHandler(env, arg0, arg1), &SWTHandler::TimerHandler));
OS_NATIVE_EXIT(env, that, gcnew_1TimerHandler_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1RoutedPropertyChangedEventHandlerObject
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RoutedPropertyChangedEventHandlerObject) (JNIEnv *env, jclass that, jint arg0, jstring arg1) {
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1RoutedPropertyChangedEventHandlerObject_FUNC);
rc = (jint)TO_HANDLE(gcnew RoutedPropertyChangedEventHandler<Object^>(gcnew SWTHandler(env, arg0, arg1), &SWTHandler::RoutedPropertyChangedEventHandler));
OS_NATIVE_EXIT(env, that, gcnew_1RoutedPropertyChangedEventHandlerObject_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1RoutedPropertyChangedEventHandler
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RoutedPropertyChangedEventHandler) (JNIEnv *env, jclass that, jint arg0, jstring arg1) {
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1RoutedPropertyChangedEventHandler_FUNC);
rc = (jint)TO_HANDLE(gcnew RoutedPropertyChangedEventHandler<double>(gcnew SWTHandler(env, arg0, arg1), &SWTHandler::RoutedPropertyChangedEventHandler));
OS_NATIVE_EXIT(env, that, gcnew_1RoutedPropertyChangedEventHandler_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1NoArgsDelegate
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1NoArgsDelegate) (JNIEnv *env, jclass that) {
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1NoArgsDelegate_FUNC);
rc = (jint)TO_HANDLE(gcnew NoArgsDelegate(gcnew SWTHandler(), &SWTHandler::NoArgsDelegate));
OS_NATIVE_EXIT(env, that, gcnew_1NoArgsDelegate_FUNC);
return rc;
}
#endif
/* */
/* Custom Classes Constructors and Functions */
/* */
#ifndef NO_gcnew_1SWTCanvas
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTCanvas)
(JNIEnv *env, jclass that, jint arg0)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTCanvas_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTCanvas(env, arg0));
OS_NATIVE_EXIT(env, that, gcnew_1SWTCanvas_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1SWTRow
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTRow)
(JNIEnv *env, jclass that, jint arg0, jint arg1)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTRow_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTRow(env, arg0, (FrameworkElement^)TO_OBJECT(arg1)));
OS_NATIVE_EXIT(env, that, gcnew_1SWTRow_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1SWTSafeHandle
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTSafeHandle)
(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTSafeHandle_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTSafeHandle((IntPtr)arg0, (bool)arg1));
OS_NATIVE_EXIT(env, that, gcnew_1SWTSafeHandle_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1SWTTextSource
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextSource)
(JNIEnv *env, jclass that, jint arg0)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTTextSource_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTTextSource(env, arg0));
OS_NATIVE_EXIT(env, that, gcnew_1SWTTextSource_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1SWTTextParagraphProperties
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextParagraphProperties)
(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jint arg3, jint arg4, jdouble arg5, jdouble arg6, int arg7)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTTextParagraphProperties_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTTextParagraphProperties((FlowDirection)arg0, (TextAlignment)arg1, arg2, (TextRunProperties^)TO_OBJECT(arg3), (TextWrapping)arg4, arg5, arg6, (System::Collections::Generic::IList<TextTabProperties^>^)TO_OBJECT(arg7)));
OS_NATIVE_EXIT(env, that, gcnew_1SWTTextParagraphProperties_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1SWTTextEmbeddedObject
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextEmbeddedObject)
(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jdouble arg4)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTTextEmbeddedObject_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTTextEmbeddedObject((TextRunProperties^)TO_OBJECT(arg0), arg1, arg2, arg3, arg4));
OS_NATIVE_EXIT(env, that, gcnew_1SWTTextEmbeddedObject_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1SWTTextRunProperties
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextRunProperties)
(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTTextRunProperties_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTTextRunProperties((Typeface^)TO_OBJECT(arg0), arg1, arg2, (TextDecorationCollection^)TO_OBJECT(arg3), (Brush^)TO_OBJECT(arg4), (Brush^)TO_OBJECT(arg5), (BaselineAlignment)arg6, (CultureInfo^)TO_OBJECT(arg7)));
OS_NATIVE_EXIT(env, that, gcnew_1SWTTextRunProperties_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1SWTTreeViewRowPresenter
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTreeViewRowPresenter)
(JNIEnv *env, jclass that, jint arg0)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTTreeViewRowPresenter_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTTreeViewRowPresenter(TO_OBJECT(arg0)));
OS_NATIVE_EXIT(env, that, gcnew_1SWTTreeViewRowPresenter_FUNC);
return rc;
}
#endif
#ifndef NO_gcnew_1SWTCellConverter
JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTCellConverter)
(JNIEnv *env, jclass that)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, gcnew_1SWTCellConverter_FUNC);
rc = (jint)TO_HANDLE(gcnew SWTCellConverter());
OS_NATIVE_EXIT(env, that, gcnew_1SWTCellConverter_FUNC);
return rc;
}
#endif
#ifndef NO_SWTTextRunProperties_1ForegroundBrush
JNIEXPORT void JNICALL OS_NATIVE(SWTTextRunProperties_1ForegroundBrush)
(JNIEnv *env, jclass that, jint arg0, jint arg1)
{
OS_NATIVE_ENTER(env, that, SWTTextRunProperties_1ForegroundBrush_FUNC);
((SWTTextRunProperties^)TO_OBJECT(arg0))->ForegroundBrush = ((Brush^)TO_OBJECT(arg1));
OS_NATIVE_EXIT(env, that, SWTTextRunProperties_1ForegroundBrush_FUNC);
}
#endif
#ifndef NO_SWTCanvas_1Visual__I
JNIEXPORT jint JNICALL OS_NATIVE(SWTCanvas_1Visual__I)
(JNIEnv *env, jclass that, jint arg0)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, SWTCanvas_1Visual__I_FUNC);
rc = (jint)TO_HANDLE(((SWTCanvas^)TO_OBJECT(arg0))->Visual);
OS_NATIVE_EXIT(env, that, SWTCanvas_1Visual__I_FUNC);
return rc;
}
#endif
#ifndef NO_SWTCanvas_1Visual__II
JNIEXPORT void JNICALL OS_NATIVE(SWTCanvas_1Visual__II)
(JNIEnv *env, jclass that, jint arg0, jint arg1)
{
OS_NATIVE_ENTER(env, that, SWTCanvas_1Visual__II_FUNC);
((SWTCanvas^)TO_OBJECT(arg0))->Visual = ((DrawingVisual^)TO_OBJECT(arg1));
OS_NATIVE_EXIT(env, that, SWTCanvas_1Visual__II_FUNC);
}
#endif
#ifndef NO_JNIGetObject
JNIEXPORT jobject JNICALL OS_NATIVE(JNIGetObject)
(JNIEnv *env, jclass that, jint arg0)
{
jobject rc = 0;
OS_NATIVE_ENTER(env, that, JNIGetObject_FUNC);
rc = (jobject)arg0;
OS_NATIVE_EXIT(env, that, JNIGetObject_FUNC);
return rc;
}
#endif
JNIEXPORT void JNICALL OS_NATIVE(GCHandle_1Free) (JNIEnv *env, jclass that, jint arg0) {
OS_NATIVE_ENTER(env, that, GCHandle_1Free_FUNC);
GCHandle handle = GCHandle::FromIntPtr((IntPtr)arg0);
if (handle.Target == nullptr) throw gcnew Exception("Handle already freed");
handle.Free();
OS_NATIVE_EXIT(env, that, GCHandle_1Free_FUNC);
}
JNIEXPORT jint JNICALL OS_NATIVE(GCHandle_1Alloc) (JNIEnv *env, jclass that, jint arg0) {
jint rc = 0;
OS_NATIVE_ENTER(env, that, GCHandle_1Alloc_FUNC);
rc = TO_HANDLE (TO_OBJECT (arg0));
OS_NATIVE_EXIT(env, that, GCHandle_1Alloc_FUNC);
return rc;
}
#ifndef NO_Bitmap_1GetHicon
JNIEXPORT jint JNICALL OS_NATIVE(Bitmap_1GetHicon)
(JNIEnv *env, jclass that, jint arg0)
{
jint rc = 0;
OS_NATIVE_ENTER(env, that, Bitmap_1GetHicon_FUNC);
rc = (jint)(int)((System::Drawing::Bitmap^)TO_OBJECT(arg0))->GetHicon();
OS_NATIVE_EXIT(env, that, Bitmap_1GetHicon_FUNC);
return rc;
}
#endif
#ifndef NO_SWTRow_1NotifyPropertyChanged
JNIEXPORT void JNICALL OS_NATIVE(SWTRow_1NotifyPropertyChanged)
(JNIEnv *env, jclass that, jint arg0, jint arg1)
{
OS_NATIVE_ENTER(env, that, SWTRow_1NotifyPropertyChanged_FUNC);
((SWTRow^)TO_OBJECT(arg0))->NotifyPropertyChanged(arg1);
OS_NATIVE_EXIT(env, that, SWTRow_1NotifyPropertyChanged_FUNC);
}
#endif
#ifndef NO_memcpy
JNIEXPORT void JNICALL OS_NATIVE(memcpy)
(JNIEnv *env, jclass that, jcharArray arg0, jint arg1, jint arg2)
{
jchar *lparg0=NULL;
pin_ptr<wchar_t> lparg1;
OS_NATIVE_ENTER(env, that, memcpy_FUNC);
#ifdef JNI_VERSION_1_2
if (IS_JNI_1_2) {
if (arg0) if ((lparg0 = (jchar *)env->GetPrimitiveArrayCritical(arg0, NULL)) == NULL) goto fail;
} else
#endif
{
if (arg0) if ((lparg0 = env->GetCharArrayElements(arg0, NULL)) == NULL) goto fail;
}
if (arg2 > 0) {
lparg1 = &((array<wchar_t>^)TO_OBJECT(arg1))[0];
memmove(lparg0, lparg1, arg2);
}
fail:
#ifdef JNI_VERSION_1_2
if (IS_JNI_1_2) {
if (arg0 && lparg0) env->ReleasePrimitiveArrayCritical(arg0, lparg0, 0);
} else
#endif
{
if (arg0 && lparg0) env->ReleaseCharArrayElements(arg0, lparg0, 0);
}
OS_NATIVE_EXIT(env, that, memcpy_FUNC);
}
#endif
} // extern "C" ends
#ifndef NO_ToggleButton_1IsCheckedNullSetter
extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1IsCheckedNullSetter)(JNIEnv *env, jclass that, jint arg0);
JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1IsCheckedNullSetter)
(JNIEnv *env, jclass that, jint arg0)
{
OS_NATIVE_ENTER(env, that, ToggleButton_1IsCheckedNullSetter_FUNC);
((ToggleButton^)TO_OBJECT(arg0))->IsChecked = Nullable<bool>();
OS_NATIVE_EXIT(env, that, ToggleButton_1IsCheckedNullSetter_FUNC);
}
#endif