blob: f690ad939e98ef4e33b00f804bc0d6ce11b11aad [file] [log] [blame]
/*
* Copyright 1995-2001 Sun Microsystems, Inc. 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. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
#ifdef HEADLESS
#error This file should not be included in headless library
#endif
#include "awt_p.h"
#include "java_awt_Color.h"
#include "java_awt_Font.h"
#include "java_awt_Label.h"
#include "sun_awt_motif_MLabelPeer.h"
#include "sun_awt_motif_MComponentPeer.h"
#include "awt_Component.h"
#include "multi_font.h"
#include <jni.h>
#include <jni_util.h>
extern struct MComponentPeerIDs mComponentPeerIDs;
extern AwtGraphicsConfigDataPtr
copyGraphicsConfigToPeer(JNIEnv *env, jobject this);
static char emptyString[] = "";
/*
* Class: sun_awt_motif_MLabelPeer
* Method: create
* Signature: (Lsun/awt/motif/MComponentPeer;)V
*/
JNIEXPORT void JNICALL Java_sun_awt_motif_MLabelPeer_create
(JNIEnv *env, jobject this, jobject parent)
{
struct ComponentData *cdata;
struct ComponentData *wdata;
jobject target;
jobject globalRef = awtJNI_CreateAndSetGlobalRef(env, this);
AwtGraphicsConfigDataPtr adata;
AWT_LOCK();
if (JNU_IsNull(env, parent)) {
JNU_ThrowNullPointerException(env, "NullPointerException");
AWT_UNLOCK();
return;
}
target = (*env)->GetObjectField(env, this, mComponentPeerIDs.target);
wdata = (struct ComponentData *)
JNU_GetLongFieldAsPtr(env, parent, mComponentPeerIDs.pData);
if (JNU_IsNull(env, target) || wdata == NULL) {
JNU_ThrowNullPointerException(env, "NullPointerException");
AWT_UNLOCK();
return;
}
cdata = ZALLOC(ComponentData);
if (cdata == NULL) {
JNU_ThrowOutOfMemoryError(env, "OutOfMemoryError");
AWT_UNLOCK();
return;
}
JNU_SetLongFieldFromPtr(env, this, mComponentPeerIDs.pData,cdata);
adata = copyGraphicsConfigToPeer(env, this);
cdata->widget = XtVaCreateManagedWidget("",
xmLabelWidgetClass, wdata->widget,
XmNhighlightThickness, 0,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNrecomputeSize, False,
XmNuserData, (XtPointer) globalRef,
XmNtraversalOn, True,
XmNscreen,
ScreenOfDisplay(awt_display,
adata->awt_visInfo.screen),
XmNfontList, getMotifFontList(),
NULL);
XtSetMappedWhenManaged(cdata->widget, False);
AWT_UNLOCK();
}
/*
* Class: sun_awt_motif_MLabelPeer
* Method: setText
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_sun_awt_motif_MLabelPeer_setText
(JNIEnv *env, jobject this, jstring label)
{
char *clabel = NULL;
char *clabelEnd;
struct ComponentData *cdata;
XmString xim = NULL;
jobject font;
Boolean isMultiFont;
AWT_LOCK();
font = awtJNI_GetFont(env, this);
isMultiFont = awtJNI_IsMultiFont(env, font);
cdata = (struct ComponentData *)
JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
if (cdata == NULL || cdata->widget == NULL) {
JNU_ThrowNullPointerException(env, "NullPointerException");
AWT_UNLOCK();
return;
}
if (JNU_IsNull(env, label)) {
clabel = emptyString;
} else {
if (isMultiFont) {
if ((*env)->GetStringLength(env, label) <= 0) {
xim = XmStringCreateLocalized("");
} else {
xim = awtJNI_MakeMultiFontString(env, label, font);
}
} else {
clabel = (char *) JNU_GetStringPlatformChars(env, label, NULL);
/* scan for any \n's and terminate the string at that point */
clabelEnd = strchr(clabel, '\n');
if (clabelEnd != NULL) {
*clabelEnd = '\0';
}
}
}
if (!isMultiFont) {
xim = XmStringCreate(clabel, "labelFont");
}
XtVaSetValues(cdata->widget, XmNlabelString, xim, NULL);
if (!isMultiFont) {
/* Must test for "" too! */
if (clabel != NULL && (*clabel != '\0')) {
JNU_ReleaseStringPlatformChars(env, label, (const char *) clabel);
}
}
XmStringFree(xim);
AWT_FLUSH_UNLOCK();
}
/*
* Class: sun_awt_motif_MLabelPeer
* Method: setAlignment
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_sun_awt_motif_MLabelPeer_setAlignment
(JNIEnv *env, jobject this, jint alignment)
{
struct ComponentData *cdata;
AWT_LOCK();
cdata = (struct ComponentData *)
JNU_GetLongFieldAsPtr(env,this,mComponentPeerIDs.pData);
if (cdata == NULL || cdata->widget == NULL) {
JNU_ThrowNullPointerException(env, "NullPointerException");
AWT_UNLOCK();
return;
}
switch (alignment) {
case java_awt_Label_LEFT:
XtVaSetValues(cdata->widget,
XmNalignment, XmALIGNMENT_BEGINNING,
NULL);
break;
case java_awt_Label_CENTER:
XtVaSetValues(cdata->widget,
XmNalignment, XmALIGNMENT_CENTER,
NULL);
break;
case java_awt_Label_RIGHT:
XtVaSetValues(cdata->widget,
XmNalignment, XmALIGNMENT_END,
NULL);
break;
default:
break;
}
AWT_FLUSH_UNLOCK();
}