diff -r f5050f1da672 -r 04becd199f91 javauis/lcdui_akn/javalcdui/src/Device.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/lcdui_akn/javalcdui/src/Device.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,112 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "CMIDToolkit.h" +#include "javax_microedition_lcdui_Device.h" + +const TInt KAlphaLevels = 256; + +LOCAL_C TInt GetDeviceAttribs(CMIDToolkit* aToolkit, jint* aAttribArray, jint aArrayLength) +{ + if (aArrayLength < javax_microedition_lcdui_Device_ATTRIB_COUNT) + { + return KErrOverflow; + } + + MMIDUtils& utils = *aToolkit->Utils(); + MMIDGraphicsFactory& factory = aToolkit->GraphicsFactory(); + + jint caps = 0; + + if (factory.DoubleBuffer()) + { + caps |= javax_microedition_lcdui_Device_CAPS_DOUBLE_BUFFERED; + } + if (utils.HasPointerEvents()) + { + caps |= javax_microedition_lcdui_Device_CAPS_POINTER_EVENTS; + } + if (utils.HasPointerMotionEvents()) + { + caps |= javax_microedition_lcdui_Device_CAPS_POINTER_MOTION_EVENTS; + } + if (utils.HasRepeatEvents()) + { + caps |= javax_microedition_lcdui_Device_CAPS_KEY_REPEAT_EVENTS; + } + + + + TDisplayMode frameBufferMode = factory.DisplayMode(); + if (frameBufferMode > EGray256) + { + caps |= javax_microedition_lcdui_Device_CAPS_COLOR; + } + + CCoeEnv* controlEnv = CCoeEnv::Static(); + CWsScreenDevice* screenDevice = controlEnv->ScreenDevice(); + + TSize screenSize = screenDevice->SizeInPixels(); + + aAttribArray[ javax_microedition_lcdui_Device_ATTRIB_CAPABILITIES ] = caps; + aAttribArray[ javax_microedition_lcdui_Device_ATTRIB_NUM_COLORS ] = TDisplayModeUtils::NumDisplayModeColors(frameBufferMode); + aAttribArray[ javax_microedition_lcdui_Device_ATTRIB_NUM_ALPHAS ] = KAlphaLevels; + aAttribArray[ javax_microedition_lcdui_Device_ATTRIB_SCREEN_WIDTH ] = screenSize.iWidth; + aAttribArray[ javax_microedition_lcdui_Device_ATTRIB_SCREEN_HEIGHT] = screenSize.iHeight; + + return KErrNone; +} + +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Device__1getAttribs(JNIEnv* aJni, jobject, jint aToolkit, jintArray aAttribArray) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + + if (aJni->GetArrayLength(aAttribArray) != javax_microedition_lcdui_Device_ATTRIB_COUNT) + { + return KErrArgument; + } + + jint attribArray[javax_microedition_lcdui_Device_ATTRIB_COUNT]; + jint attribCount = javax_microedition_lcdui_Device_ATTRIB_COUNT; + jint err; + + err = toolkit->Execute(&GetDeviceAttribs, toolkit, &attribArray[0], attribCount); + if (KErrNone == err) + { + aJni->SetIntArrayRegion(aAttribArray, 0, attribCount, &attribArray[0]); + } + + return err; +} + +LOCAL_C void InvokeCanvasSizeWithoutKeypad(MMIDDisplayable* aDisplayable, jint* aSizeArray) +{ + TRect onScreenKeypadRect = aDisplayable->GetCanvasRectFromLaf(); + aSizeArray[0] = onScreenKeypadRect.Width(); + aSizeArray[1] = onScreenKeypadRect.Height(); +} + +JNIEXPORT void JNICALL Java_javax_microedition_lcdui_Device__1getCanvasSizeWithoutKeypad +(JNIEnv* aEnv,jobject, jint aToolkit, jint aDisplayable, jintArray aSize) +{ + MMIDDisplayable* displayable = MIDUnhandObject(aDisplayable); + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + jint sizeArray[2]; + toolkit->Execute(&InvokeCanvasSizeWithoutKeypad, displayable, sizeArray); + aEnv->SetIntArrayRegion(aSize, 0, 2, sizeArray); +}