diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 2010 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: Implementation of virtual key ctrl utility for arabic hwr. +* +*/ + +// INCLUDE +#include +#include +#include + +#include "peninputfingerhwarvkbutility.h" +#include "peninputlayoutvkb.h" +#include "peninputpluginutils.h" +#include "hbufcarrayar.h" +#include "peninputfingerhwrarstoreconstants.h" + +// --------------------------------------------------------------------------- +// Load virtual keys image +// --------------------------------------------------------------------------- +// +void PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(CVirtualKeyboard& aVkbCtrl, const TInt aResId, const RArray& aCellRects) + { + aVkbCtrl.SetResourceId(aResId); + + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); + + // construct keys + TInt resKeyCount = reader.ReadInt16(); + TInt existsKeyCount = aVkbCtrl.KeyArray().Count(); + TInt rectCount = aCellRects.Count(); + + for ( TInt i = 0; i < resKeyCount; i++ ) + { + if ( i < existsKeyCount ) + { + CVirtualKey* vk = aVkbCtrl.KeyArray()[i]; + UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] ); + } + else + { + CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] ); + CleanupStack::PushL( vk ); + aVkbCtrl.AddKeyL( vk ); + + CleanupStack::Pop( vk ); + } + } + + CleanupStack::PopAndDestroy( 1 ); // reader + + aVkbCtrl.Draw(); + aVkbCtrl.UpdateArea( aVkbCtrl.Rect() ); + } + +// --------------------------------------------------------------------------- +// Create the virtual key +// --------------------------------------------------------------------------- +// +CVirtualKey* PeninputFingerHwrArVkbUtility::CreateVkbKeyL(TResourceReader& aReader,const TRect& aKeyRect) + { + CHBufCArray* keytexts = CHBufCArray::NewL(); + CleanupStack::PushL( keytexts ); + + for ( TInt i = 0; i <= EPosLast; i++ ) + { + HBufC* unicode = aReader.ReadHBufCL(); + keytexts->Array().AppendL( unicode ); + } + + TInt keyscancode = aReader.ReadInt16(); + + HBufC* text = keytexts->Array()[0]; + + CVirtualKey* vk = NULL; + if ( text ) + { + vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 ); + } + else + { + vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 ); + } + + CleanupStack::PopAndDestroy( keytexts ); //keytexts + + + TRect innerrect = aKeyRect; + innerrect.Shrink( TSize(10, 10) ); + vk->SetInnerRect( innerrect ); + + return vk; + } + +// --------------------------------------------------------------------------- +// Load virtual keys image +// --------------------------------------------------------------------------- +// +void PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(CVirtualKeyboard& aVkbCtrl, TInt aResId, const TSize& aKeySize) + { + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); + + TPtrC bmpFileName = reader.ReadTPtrC(); + TInt32 imgMajorSkinId = reader.ReadInt32(); + TAknsItemID id; + + TSize keySize = aKeySize; + + for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 ) + { + // Get the image ids and mask ids from resource + TInt bmpId = reader.ReadInt16(); + TInt bmpMskId = reader.ReadInt16(); + + // read skin item id + const TInt skinitemid = reader.ReadInt16(); + id.Set( TInt( imgMajorSkinId ), skinitemid ); + + if ( bmpId != KInvalidImg ) + { + CFbsBitmap* bmp = NULL; + CFbsBitmap* maskbmp = NULL; + + if ( bmpMskId != KInvalidImg ) + { + AknsUtils::CreateIconL( AknsUtils::SkinInstance(), + id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId ); + + // set maskbmp and size + AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved ); + aVkbCtrl.SetNonIrregularKeyBitmapL(TVirtualKeyBmpType(EKeyBmpNormal + index + 1 ),maskbmp); + } + else + { + AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id, + bmp, bmpFileName, bmpId ); + } + // set bmp and size + AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved ); + aVkbCtrl.SetNonIrregularKeyBitmapL(TVirtualKeyBmpType( EKeyBmpNormal + index ),bmp); + } + } + // Pop and destroy reader + CleanupStack::PopAndDestroy( 1 ); + } + +// --------------------------------------------------------------------------- +// update virtual key info. +// --------------------------------------------------------------------------- +// +void PeninputFingerHwrArVkbUtility::UpdateVkbKeyL(CVirtualKey* aVirtualKey, TResourceReader& aReader, const TRect& aKeyRect) + { + CHBufCArray* keytexts = CHBufCArray::NewL(); + CleanupStack::PushL( keytexts ); + + for ( TInt i = 0; i <= EPosLast; i++ ) + { + HBufC* unicode = aReader.ReadHBufCL(); + keytexts->Array().AppendL( unicode ); + } + + TInt keyscancode = aReader.ReadInt16(); + + HBufC* text = keytexts->Array()[0]; + if ( text ) + { + aVirtualKey->SetKeyData( *text ); + } + else + { + aVirtualKey->SetKeyData( KNullDesC ); + } + + aVirtualKey->SetKeyScancode( keyscancode ); + + CleanupStack::PopAndDestroy( keytexts ); //keytexts + + aVirtualKey->SetRect(aKeyRect); + TRect innerrect = aKeyRect; + innerrect.Shrink( TSize(2,2) ); + aVirtualKey->SetInnerRect( innerrect ); + } + +// End Of File