252 @publishedAll |
260 @publishedAll |
253 @released |
261 @released |
254 */ |
262 */ |
255 EXPORT_C TInt CFbsBitmap::Create(const TSize& aSizeInPixels,TDisplayMode aDispMode) |
263 EXPORT_C TInt CFbsBitmap::Create(const TSize& aSizeInPixels,TDisplayMode aDispMode) |
256 { |
264 { |
257 return DoCreate(aSizeInPixels,aDispMode,KUidCFbsBitmapCreation); |
265 FBS_OST(OstTraceExt4(GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATE_ENTRY, "> this=0x%08x; w=%d; h=%d; dm=%d", (TUint)this, aSizeInPixels.iWidth, aSizeInPixels.iHeight, aDispMode); ) |
|
266 TInt err = DoCreate(aSizeInPixels,aDispMode,KUidCFbsBitmapCreation); |
|
267 FBS_OST(TInt ssh = (iFbs ? iFbs->ServerSessionHandle() : 0);) |
|
268 FBS_OST(OstTraceExt5(GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATE_EXIT, "< this=0x%08x; err=%d; iH=0x%08x; iSH=0x%08x; iSSH=0x%08x", (TUint)this, err, iHandle, iServerHandle, ssh); ) |
|
269 return err; |
258 } |
270 } |
259 |
271 |
260 TInt CFbsBitmap::DoCreate(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aUid, TInt aDataSize) |
272 TInt CFbsBitmap::DoCreate(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aUid, TInt aDataSize) |
261 { |
273 { |
262 if(!iFbs) return(KErrCouldNotConnect); |
274 if(!iFbs) return(KErrCouldNotConnect); |
303 @publishedAll |
315 @publishedAll |
304 @released |
316 @released |
305 */ |
317 */ |
306 EXPORT_C TInt CFbsBitmap::CreateHardwareBitmap(const TSize& aSizeInPixels,TDisplayMode aDispMode,TUid aCreatorUid) |
318 EXPORT_C TInt CFbsBitmap::CreateHardwareBitmap(const TSize& aSizeInPixels,TDisplayMode aDispMode,TUid aCreatorUid) |
307 { |
319 { |
308 return DoCreate(aSizeInPixels,aDispMode,aCreatorUid); |
320 FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEHARDWAREBITMAP_ENTRY, "> this=0x%08x; w=%d; h=%d; dm=%d; uid=0x%08x", (TUint)this, aSizeInPixels.iWidth, aSizeInPixels.iHeight, aDispMode, aCreatorUid.iUid);) |
|
321 TInt err = DoCreate(aSizeInPixels,aDispMode,aCreatorUid); |
|
322 FBS_OST(TInt ssh = (iFbs ? iFbs->ServerSessionHandle() : 0);) |
|
323 FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEHARDWAREBITMAP_EXIT, "< this=0x%08x; err=%d; iH=0x%08x; iSH=0x%08x; iSSH=0x%08x", (TUint)this, err, iHandle, iServerHandle, ssh);) |
|
324 return err; |
309 } |
325 } |
310 |
326 |
311 /** Resets the pixel-size of the bitmap. |
327 /** Resets the pixel-size of the bitmap. |
312 If the new size is bigger than the old, the original bitmap is still situated |
328 If the new size is bigger than the old, the original bitmap is still situated |
313 at (0,0), but pixels outside the range of the old pixel-size are set to zero. |
329 at (0,0), but pixels outside the range of the old pixel-size are set to zero. |
404 with the specified handle number. |
420 with the specified handle number. |
405 @publishedAll |
421 @publishedAll |
406 @released |
422 @released |
407 @see CFbsBitmap::Handle() |
423 @see CFbsBitmap::Handle() |
408 */ |
424 */ |
409 EXPORT_C TInt CFbsBitmap::Duplicate(TInt aBitmapHandle) |
425 EXPORT_C TInt CFbsBitmap::Duplicate(TInt aBitmapHandle) |
410 { |
426 { |
|
427 TInt ret = KErrNone; |
|
428 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_DUPLICATE_ENTRY, "> this=0x%08x; iH=0x%08x;", (TUint)this, aBitmapHandle);) |
411 if(!iFbs) |
429 if(!iFbs) |
412 { |
430 { |
413 return(KErrCouldNotConnect); |
431 ret = KErrCouldNotConnect; |
414 } |
432 FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR, "! this=0x%08x; !iFbs", (TUint)this);) |
415 if(!aBitmapHandle) |
433 } |
416 { |
434 else if(!aBitmapHandle) |
417 return(KErrUnknown); |
435 { |
418 } |
436 ret = KErrUnknown; |
419 Reset(); |
437 FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR2, "! this=0x%08x; !aBitmapHandle", (TUint)this);) |
420 TBool isinrom=EFalse; |
438 } |
421 TInt ret=User::IsRomAddress(isinrom,(TAny*)aBitmapHandle); |
439 else |
422 if(ret!=KErrNone) |
440 { |
423 { |
441 TBool isinrom = EFalse; |
424 return(KErrUnknown); |
442 ret = User::IsRomAddress(isinrom, (TAny*)aBitmapHandle); |
425 } |
443 if (ret == KErrNone) |
426 if(isinrom) |
444 { |
427 { |
445 if (isinrom) |
428 if (((CBitwiseBitmap*)aBitmapHandle)->Uid() != KCBitwiseBitmapUid) |
446 { |
429 return(KErrUnknown); |
447 ret = DuplicateInRom(aBitmapHandle); |
430 iAddressPointer = (CBitwiseBitmap*)aBitmapHandle; |
448 FBS_OST_IF(ret != KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR4, "! this=0x%08x; DuplicateInRom() returned %d;", (TUint)this, ret);) |
431 iFlags = EIsRomBitmap; |
449 } |
432 iHandle=1; |
450 else |
433 return iFbs->AllocScanLineBuffer(iAddressPointer->iByteWidth + 4); |
451 { |
434 } |
452 ret = DuplicateInRam(aBitmapHandle); |
435 TPckgBuf<TBmpHandles> b; |
453 FBS_OST_IF(ret != KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR5, "! this=0x%08x; DuplicateInRam() returned %d;", (TUint)this, ret);) |
436 TIpcArgs args(aBitmapHandle,&b); |
454 } |
437 ret=iFbs->SendCommand(EFbsMessBitmapDuplicate,args); |
455 } |
438 if(ret!=KErrNone) |
456 else |
439 { |
457 { |
440 return(ret); |
458 FBS_OST(OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATE_ERROR3, "! this=0x%08x; IsRomAddress() returned %d", (TUint)this, ret);) |
441 } |
459 ret = KErrUnknown; |
442 iHandle=b().iHandle; |
460 } |
443 iServerHandle=b().iServerHandle; |
461 } |
444 iAddressPointer=(CBitwiseBitmap*)(iFbs->HeapBase()+b().iAddressOffset); |
462 FBS_OST(TInt ssh = (iFbs ? iFbs->ServerSessionHandle() : 0);) |
445 if (iAddressPointer->iUid.iUid != KCBitwiseBitmapUid.iUid && iAddressPointer->iUid.iUid != KCBitwiseBitmapHardwareUid.iUid) |
463 FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_DUPLICATE_EXIT, "< this=0x%08x; iH=0x%08x; iSH=0x%08x; ret=%d; iSSH=0x%08x", (TUint)this, iHandle, iServerHandle, ret, ssh);) |
446 { |
464 return ret; |
447 iFlags = EIsExtendedBitmap; |
465 } |
448 } |
466 |
449 ret = iFbs->iHelper->AddBitmap(*this); |
467 /** Duplicates a bitmap where the bitmap handle refers to a rom bitmap. |
450 if (ret != KErrNone) |
468 @param aBitmapHandle A valid Rom bitmap handle. |
451 { |
469 @return KErrNone on success. |
452 return ret; |
470 */ |
453 } |
471 TInt CFbsBitmap::DuplicateInRom(TInt aBitmapHandle) |
454 return iFbs->AllocScanLineBuffer(iAddressPointer->iByteWidth+4); |
472 { |
455 } |
473 TInt ret = KErrNone; |
|
474 Reset(); |
|
475 TUid uid = ((CBitwiseBitmap*)aBitmapHandle)->Uid(); |
|
476 if (uid != KCBitwiseBitmapUid) |
|
477 { |
|
478 FBS_OST(OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINROM_ERROR, "! this=0x%08x; 0x%08x != KCBitwiseBitmapUid", (TUint)this, (TUint)uid.iUid);) |
|
479 ret = KErrUnknown; |
|
480 } |
|
481 else |
|
482 { |
|
483 iAddressPointer = (CBitwiseBitmap*)aBitmapHandle; |
|
484 iFlags = EIsRomBitmap; |
|
485 iHandle=1; |
|
486 ret = iFbs->AllocScanLineBuffer(iAddressPointer->iByteWidth + 4); |
|
487 FBS_OST_IF(ret!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINROM_ERROR2, "! this=0x%08x; AllocScanLineBuffer() returned %d", (TUint)this, ret);) |
|
488 } |
|
489 return ret; |
|
490 } |
|
491 |
|
492 /** Duplicates a bitmap where the bitmap handle refers to a ram bitmap |
|
493 @param aBitmapHandle A valid Ram bitmap handle. |
|
494 @return KErrNone on success. |
|
495 */ |
|
496 TInt CFbsBitmap::DuplicateInRam(TInt aBitmapHandle) |
|
497 { |
|
498 TInt ret = KErrNone; |
|
499 Reset(); |
|
500 |
|
501 TPckgBuf<TBmpHandles> b; |
|
502 TIpcArgs args(aBitmapHandle,&b); |
|
503 ret=iFbs->SendCommand(EFbsMessBitmapDuplicate,args); |
|
504 FBS_OST_IF(ret!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINRAM_ERROR, "! this=0x%08x; SendCommand(EFbsMessBitmapDuplicate) returned %d", (TUint)this, ret);) |
|
505 if(ret==KErrNone) |
|
506 { |
|
507 iHandle=b().iHandle; |
|
508 iServerHandle=b().iServerHandle; |
|
509 iAddressPointer=(CBitwiseBitmap*)(iFbs->HeapBase()+b().iAddressOffset); |
|
510 if (iAddressPointer->iUid.iUid != KCBitwiseBitmapUid.iUid && iAddressPointer->iUid.iUid != KCBitwiseBitmapHardwareUid.iUid) |
|
511 { |
|
512 iFlags = EIsExtendedBitmap; |
|
513 } |
|
514 ret = iFbs->iHelper->AddBitmap(*this); |
|
515 FBS_OST_IF(ret!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINRAM_ERROR2, "! this=0x%08x; AddBitmap() returned %d", (TUint)this, ret);) |
|
516 if (ret == KErrNone) |
|
517 { |
|
518 ret = iFbs->AllocScanLineBuffer(iAddressPointer->iByteWidth+4); |
|
519 FBS_OST_IF(ret!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_DUPLICATEINRAM_ERROR3, "! this=0x%08x; AllocScanLineBuffer() returned %d", (TUint)this, ret);) |
|
520 } |
|
521 } |
|
522 return ret; |
|
523 } |
456 |
524 |
457 /** Loads a specific bitmap from a multi-bitmap file. |
525 /** Loads a specific bitmap from a multi-bitmap file. |
458 The bitmap may be shared by other font and bitmap server clients. |
526 The bitmap may be shared by other font and bitmap server clients. |
459 @param aFileName The filename of the multi-bitmap (.mbm) file. |
527 @param aFileName The filename of the multi-bitmap (.mbm) file. |
460 @param aId The bitmap identifier. |
528 @param aId The bitmap identifier. |
465 @publishedAll |
533 @publishedAll |
466 @released |
534 @released |
467 */ |
535 */ |
468 EXPORT_C TInt CFbsBitmap::Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded) |
536 EXPORT_C TInt CFbsBitmap::Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded) |
469 { |
537 { |
470 return Load(aFileName,aId,aShareIfLoaded,0); |
538 FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD_ENTRY, "> this=0x%08x; file=%S, id=0x%08x; share=%d", (TUint)this, aFileName, aId, aShareIfLoaded);) |
|
539 TInt err = Load(aFileName,aId,aShareIfLoaded,0); |
|
540 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);) |
|
541 return err; |
471 } |
542 } |
472 |
543 |
473 /** Loads a specific bitmap from a multi-bitmap file. |
544 /** Loads a specific bitmap from a multi-bitmap file. |
474 The bitmap may be shared by other font and bitmap server clients. |
545 The bitmap may be shared by other font and bitmap server clients. |
475 @param aFileName The filename of the multi-bitmap (.mbm) file. |
546 @param aFileName The filename of the multi-bitmap (.mbm) file. |
481 @publishedAll |
552 @publishedAll |
482 @released |
553 @released |
483 */ |
554 */ |
484 EXPORT_C TInt CFbsBitmap::Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) |
555 EXPORT_C TInt CFbsBitmap::Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) |
485 { |
556 { |
|
557 TInt err = KErrNone; |
|
558 FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD2_ENTRY, "> this=0x%08x; file=%S, id=0x%08x; share=%d; off=%d", (TUint)this, aFileName, aId, aShareIfLoaded, aFileOffset);) |
486 if(!iFbs) |
559 if(!iFbs) |
487 { |
560 { |
488 return(KErrCouldNotConnect); |
561 FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_LOAD2_ERROR, "! this=0x%08x; !iFbs", (TUint)this);) |
489 } |
562 err = KErrCouldNotConnect; |
490 Reset(); |
|
491 TUint32* rompointer = NULL; |
|
492 //access using filename has the advantage of using rom address lookup cache |
|
493 IsFileInRom(aFileName, rompointer); |
|
494 TBool romPointerValid; |
|
495 TInt err = DoLoadFromRom(rompointer, aId, aFileOffset, romPointerValid); |
|
496 if(romPointerValid) |
|
497 { |
|
498 return err; |
|
499 } |
|
500 _LIT(KResourcePath, "?:\\Resource\\*"); |
|
501 TInt match = aFileName.MatchF(KResourcePath); |
|
502 //if the file is in the resource directory we don't need to check capabilities and the file can just be opened on the server side. |
|
503 if (match == 0) |
|
504 { |
|
505 err = DoLoad(aFileName,aId,aShareIfLoaded,aFileOffset); |
|
506 } |
563 } |
507 else |
564 else |
508 { |
565 { |
509 RFile file; |
566 Reset(); |
510 err = file.Open(iFbs->FileServer(),aFileName,EFileShareReadersOnly); |
567 TUint32* rompointer = NULL; |
511 if (err!=KErrNone) |
568 //access using filename has the advantage of using rom address lookup cache |
512 { |
569 IsFileInRom(aFileName, rompointer); |
513 return err; |
570 TBool romPointerValid; |
514 } |
571 err = DoLoadFromRom(rompointer, aId, aFileOffset, romPointerValid); |
515 err = DoLoad(file,aId,aShareIfLoaded,aFileOffset); |
572 if(romPointerValid) |
516 file.Close(); |
573 { |
517 } |
574 FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_LOAD2_ERROR2, "! this=0x%08x; romPointerValid", (TUint)this);) |
|
575 err = KErrCouldNotConnect; |
|
576 } |
|
577 else |
|
578 { |
|
579 _LIT(KResourcePath, "?:\\Resource\\*"); |
|
580 TInt match = aFileName.MatchF(KResourcePath); |
|
581 //if the file is in the resource directory we don't need to check capabilities and the file can just be opened on the server side. |
|
582 if (match == 0) |
|
583 { |
|
584 err = DoLoad(aFileName,aId,aShareIfLoaded,aFileOffset); |
|
585 FBS_OST_IF(err!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOAD2_ERROR3, "! this=0x%08x; DoLoad returned %d", (TUint)this, err);) |
|
586 } |
|
587 else |
|
588 { |
|
589 RFile file; |
|
590 err = file.Open(iFbs->FileServer(),aFileName,EFileShareReadersOnly); |
|
591 if (err==KErrNone) |
|
592 { |
|
593 err = DoLoad(file,aId,aShareIfLoaded,aFileOffset); |
|
594 FBS_OST_IF(err!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOAD2_ERROR4, "! this=0x%08x; DoLoad returned %d", (TUint)this, err);) |
|
595 } |
|
596 file.Close(); |
|
597 } |
|
598 } |
|
599 } |
|
600 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD2_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);) |
518 return err; |
601 return err; |
519 } |
602 } |
520 |
603 |
521 /** Loads and compresses a specific bitmap from a multi-bitmap file. |
604 /** Loads and compresses a specific bitmap from a multi-bitmap file. |
522 The bitmap may be shared by other font and bitmap server clients. |
605 The bitmap may be shared by other font and bitmap server clients. |
530 @publishedAll |
613 @publishedAll |
531 @released |
614 @released |
532 */ |
615 */ |
533 EXPORT_C TInt CFbsBitmap::LoadAndCompress(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded) |
616 EXPORT_C TInt CFbsBitmap::LoadAndCompress(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded) |
534 { |
617 { |
535 return LoadAndCompress(aFileName, aId, aShareIfLoaded, 0); |
618 FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d", (TUint)this, aFileName, aId, aShareIfLoaded);) |
|
619 TInt ret = LoadAndCompress(aFileName, aId, aShareIfLoaded, 0); |
|
620 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS_EXIT, "< this=0x%08x; err=%d", (TUint)this, ret);) |
|
621 return ret; |
536 } |
622 } |
537 |
623 |
538 /** Loads and compresses a specific bitmap from a multi-bitmap file. |
624 /** Loads and compresses a specific bitmap from a multi-bitmap file. |
539 The bitmap may be shared by other font and bitmap server clients. If the |
625 The bitmap may be shared by other font and bitmap server clients. If the |
540 bitmap is loaded from ROM then compression is not allowed. |
626 bitmap is loaded from ROM then compression is not allowed. |
547 codes. |
633 codes. |
548 @publishedAll |
634 @publishedAll |
549 @released |
635 @released |
550 */ |
636 */ |
551 EXPORT_C TInt CFbsBitmap::LoadAndCompress(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) |
637 EXPORT_C TInt CFbsBitmap::LoadAndCompress(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) |
552 { |
638 { |
|
639 FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS2_ENTRY, "> this=0x%08x; file=%S, id=0x%08x; share=%d; off=%d", (TUint)this, aFileName, aId, aShareIfLoaded, aFileOffset);) |
553 TInt err = Load(aFileName,aId,aShareIfLoaded,aFileOffset); |
640 TInt err = Load(aFileName,aId,aShareIfLoaded,aFileOffset); |
554 if (err == KErrNone) |
641 if (err == KErrNone) |
555 { |
642 { |
556 err = !(iFlags & EIsRomBitmap) ? Compress() : KErrAccessDenied; |
643 err = !(iFlags & EIsRomBitmap) ? Compress() : KErrAccessDenied; |
557 } |
644 FBS_OST_IF(err!=KErrNone, OstTraceExt3( TRACE_ERROR, CFBSBITMAP_LOADANDCOMPRESS2_ERROR, "! this=0x%08x; iFlags=0x%08x; err=%d", (TUint)this, (TUint)iFlags, err);) |
|
645 } |
|
646 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS2_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);) |
558 return err; |
647 return err; |
559 } |
648 } |
560 |
649 |
561 /** Saves the bitmap as a direct file store. |
650 /** Saves the bitmap as a direct file store. |
562 The file store overwrites any existing file with the same name. |
651 The file store overwrites any existing file with the same name. |
1248 @see CFbsBitmap::DataAddress() |
1337 @see CFbsBitmap::DataAddress() |
1249 @see CFbsBitmap::EndDataAccess() |
1338 @see CFbsBitmap::EndDataAccess() |
1250 */ |
1339 */ |
1251 EXPORT_C void CFbsBitmap::BeginDataAccess() const |
1340 EXPORT_C void CFbsBitmap::BeginDataAccess() const |
1252 { |
1341 { |
1253 if (!iHandle) |
1342 FBS_OST_VERBOSE(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_BEGINDATAACCESS_ENTRY, "> this=0x%08x;", (TUint)this);); |
1254 return; |
1343 FBS_OST_IF(!iHandle, OstTrace1(TRACE_ERROR, CFBSBITMAP_BEGINDATAACCESS_ERROR, "! this=0x%08x; !iHandle", (TUint)this);); |
1255 (void)CleanAddress(); //called for side-effect to make sure bitmap reference is current. Should be low overhead. |
1344 |
1256 const_cast<CFbsBitmap*>(this)->iUseCount++; |
1345 if (iHandle) |
|
1346 { |
|
1347 (void)CleanAddress(); //called for side-effect to make sure bitmap reference is current. Should be low overhead. |
|
1348 const_cast<CFbsBitmap*>(this)->iUseCount++; |
|
1349 } |
|
1350 |
|
1351 FBS_OST_VERBOSE(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_BEGINDATAACCESS_EXIT, "< this=0x%08x; iUseCount=%d;", (TUint)this, const_cast<CFbsBitmap*>(this)->iUseCount);) |
1257 } |
1352 } |
1258 |
1353 |
1259 /** Marks the end of direct access to the bitmap data. |
1354 /** Marks the end of direct access to the bitmap data. |
1260 Use this function after ending direct access to the bitmap data. |
1355 Use this function after ending direct access to the bitmap data. |
1261 Calls to EndDataAccess() must correspond to prior calls to BeginDataAccess(). |
1356 Calls to EndDataAccess() must correspond to prior calls to BeginDataAccess(). |
1269 @param aReadOnly True if the bitmap data had only been read. False if the data has been modified. |
1364 @param aReadOnly True if the bitmap data had only been read. False if the data has been modified. |
1270 @see CFbsBitmap::BeginDataAccess() |
1365 @see CFbsBitmap::BeginDataAccess() |
1271 */ |
1366 */ |
1272 EXPORT_C void CFbsBitmap::EndDataAccess(TBool aReadOnly) const |
1367 EXPORT_C void CFbsBitmap::EndDataAccess(TBool aReadOnly) const |
1273 { |
1368 { |
1274 if (!iHandle) |
1369 FBS_OST_VERBOSE(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_ENDDATAACCESS_ENTRY, "> this=0x%08x; aReadOnly=%d;", (TUint)this, (TUint)aReadOnly);) |
1275 return; |
1370 FBS_OST_IF(!iHandle, OstTrace1(TRACE_ERROR, CFBSBITMAP_ENDDATAACCESS_ERROR, "! this=0x%08x; !iHandle", (TUint)this);); |
1276 const_cast<CFbsBitmap*>(this)->iUseCount--; |
1371 if (iHandle) |
1277 if (!aReadOnly && !(iFlags & EIsReadOnlyBitmapMask)) |
1372 { |
1278 User::LockedInc(iAddressPointer->Extra()->iTouchCount); |
1373 const_cast<CFbsBitmap*>(this)->iUseCount--; |
|
1374 if (!aReadOnly && !(iFlags & EIsReadOnlyBitmapMask)) |
|
1375 { |
|
1376 User::LockedInc(iAddressPointer->Extra()->iTouchCount); |
|
1377 } |
|
1378 } |
|
1379 FBS_OST_VERBOSE(OstTraceExt2(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_ENDDATAACCESS_EXIT, "< this=0x%08x; iUseCount=%d;", (TUint)this, const_cast<CFbsBitmap*>(this)->iUseCount);) |
1279 } |
1380 } |
1280 |
1381 |
1281 /** Locks the global bitmap heap. |
1382 /** Locks the global bitmap heap. |
1282 This function is deprecated, since it is no longer necessary to lock the global |
1383 This function is deprecated, since it is no longer necessary to lock the global |
1283 bitmap heap to prevent the pixel data from being moved in memory asynchronously, |
1384 bitmap heap to prevent the pixel data from being moved in memory asynchronously, |
1297 @see CFbsBitmap::UnlockHeap() |
1398 @see CFbsBitmap::UnlockHeap() |
1298 @see CFbsBitmap::BeginDataAccess() |
1399 @see CFbsBitmap::BeginDataAccess() |
1299 */ |
1400 */ |
1300 EXPORT_C void CFbsBitmap::LockHeap(TBool /*aAlways*/) const |
1401 EXPORT_C void CFbsBitmap::LockHeap(TBool /*aAlways*/) const |
1301 { |
1402 { |
|
1403 FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_LOCKHEAP_ENTRY, "> this=0x%08x;", (TUint)this);) |
1302 BeginDataAccess(); |
1404 BeginDataAccess(); |
1303 #ifdef SYMBIAN_DEBUG_FBS_LOCKHEAP |
1405 #ifdef SYMBIAN_DEBUG_FBS_LOCKHEAP |
1304 //These debug checks now refer to the cleaned data address |
1406 //These debug checks now refer to the cleaned data address |
1305 if (!iHandle) |
1407 FBS_OST_IF(!iHandle, OstTrace1(TRACE_ERROR, CFBSBITMAP_LOCKHEAP_ERROR, "! this=0x%08x; !iHandle", (TUint)this);); |
1306 return; |
1408 if (iHandle && !(iFlags & EIsRomBitmap)) // can't do anything with ROM bitmaps |
1307 if (!(iFlags & EIsRomBitmap)) // can't do anything with ROM bitmaps |
|
1308 { |
1409 { |
1309 TThreadId threadId = RThread().Id(); |
1410 TThreadId threadId = RThread().Id(); |
1310 iFbs->iHelper->iDebugMutex.Wait(); |
1411 iFbs->iHelper->iDebugMutex.Wait(); |
1311 if (iAddressPointer->Extra()->iLockCount++ == 0) |
1412 if (iAddressPointer->Extra()->iLockCount++ == 0) |
1312 { |
1413 { |
1330 @see CFbsBitmap::LockHeap() |
1432 @see CFbsBitmap::LockHeap() |
1331 @see CFbsBitmap::EndDataAccess() |
1433 @see CFbsBitmap::EndDataAccess() |
1332 */ |
1434 */ |
1333 EXPORT_C void CFbsBitmap::UnlockHeap(TBool /*aAlways*/) const |
1435 EXPORT_C void CFbsBitmap::UnlockHeap(TBool /*aAlways*/) const |
1334 { |
1436 { |
|
1437 FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_UNLOCKHEAP_ENTRY, "> this=0x%08x;", (TUint)this);) |
|
1438 FBS_OST_IF(!iHandle, OstTrace1(TRACE_ERROR, CFBSBITMAP_UNLOCKHEAP_ERROR, "! this=0x%08x; !iHandle", (TUint)this);); |
|
1439 if (iHandle) |
|
1440 { |
1335 #ifdef SYMBIAN_DEBUG_FBS_LOCKHEAP |
1441 #ifdef SYMBIAN_DEBUG_FBS_LOCKHEAP |
1336 if (!iHandle) |
1442 if (!(iFlags & EIsRomBitmap)) // can't do anything with ROM bitmaps |
1337 return; |
1443 { |
1338 if (!(iFlags & EIsRomBitmap)) // can't do anything with ROM bitmaps |
1444 TThreadId threadId = RThread().Id(); |
1339 { |
1445 iFbs->iHelper->iDebugMutex.Wait(); |
1340 TThreadId threadId = RThread().Id(); |
1446 __ASSERT_ALWAYS(iAddressPointer->Extra()->iLockCount > 0, Panic(EFbsPanicBadHeapLock)); |
1341 iFbs->iHelper->iDebugMutex.Wait(); |
1447 __ASSERT_ALWAYS(iAddressPointer->Extra()->iThreadId == threadId, Panic(EFbsPanicBadHeapLock)); |
1342 __ASSERT_ALWAYS(iAddressPointer->Extra()->iLockCount > 0, Panic(EFbsPanicBadHeapLock)); |
1448 if (--iAddressPointer->Extra()->iLockCount == 0) |
1343 __ASSERT_ALWAYS(iAddressPointer->Extra()->iThreadId == threadId, Panic(EFbsPanicBadHeapLock)); |
1449 iAddressPointer->Extra()->iThreadId = TThreadId(KNullThreadId); |
1344 if (--iAddressPointer->Extra()->iLockCount == 0) |
1450 iFbs->iHelper->iDebugMutex.Signal(); |
1345 iAddressPointer->Extra()->iThreadId = TThreadId(KNullThreadId); |
1451 } |
1346 iFbs->iHelper->iDebugMutex.Signal(); |
|
1347 } |
|
1348 #endif |
1452 #endif |
1349 EndDataAccess(); |
1453 EndDataAccess(); |
|
1454 } |
|
1455 FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_UNLOCKHEAP_EXIT, "< this=0x%08x;", (TUint)this);) |
1350 } |
1456 } |
1351 |
1457 |
1352 /** Locks the global bitmap heap, leaving on the clean-up stack a pointer |
1458 /** Locks the global bitmap heap, leaving on the clean-up stack a pointer |
1353 to a TCleanupItem that unlocks the heap on deletion. |
1459 to a TCleanupItem that unlocks the heap on deletion. |
1354 Use this function instead of LockHeap() if code may leave between the |
1460 Use this function instead of LockHeap() if code may leave between the |
1360 @deprecated |
1466 @deprecated |
1361 @see CFbsBitmap::LockHeap() |
1467 @see CFbsBitmap::LockHeap() |
1362 */ |
1468 */ |
1363 EXPORT_C void CFbsBitmap::LockHeapLC(TBool /*aAlways*/) const |
1469 EXPORT_C void CFbsBitmap::LockHeapLC(TBool /*aAlways*/) const |
1364 { |
1470 { |
1365 LockHeap(); |
1471 FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_LOCKHEAPLC_ENTRY, "> this=0x%08x;", (TUint)this);) |
|
1472 LockHeap(); |
1366 TCleanupItem cleanitem(CFbsBitmap::UnlockHeap, (TAny*)this); |
1473 TCleanupItem cleanitem(CFbsBitmap::UnlockHeap, (TAny*)this); |
1367 CleanupStack::PushL(cleanitem); |
1474 CleanupStack::PushL(cleanitem); |
|
1475 FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_LOCKHEAPLC_EXIT, "< this=0x%08x;", (TUint)this);) |
1368 } |
1476 } |
1369 |
1477 |
1370 EXPORT_C void CFbsBitmap::UnlockHeap(TAny* aFbsBitmap) |
1478 EXPORT_C void CFbsBitmap::UnlockHeap(TAny* aFbsBitmap) |
1371 { |
1479 { |
1372 ((CFbsBitmap*)aFbsBitmap)->UnlockHeap(); |
1480 FBS_OST(OstTrace1(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_UNLOCKHEAP2_ENTRY, "> bitmap=0x%08x;", (TUint)aFbsBitmap);) |
|
1481 ((CFbsBitmap*)aFbsBitmap)->UnlockHeap(); |
|
1482 FBS_OST(OstTrace0(GRAPHICS_CONTROL_FUNCTIONS, CFBSBITMAP_UNLOCKHEAP2_EXIT, "<");) |
1373 } |
1483 } |
1374 |
1484 |
1375 /** Tests whether the bitmap is volatile. |
1485 /** Tests whether the bitmap is volatile. |
1376 A bitmap becomes volatile if CFbsBitmap::DataAdress() is called without |
1486 A bitmap becomes volatile if CFbsBitmap::DataAdress() is called without |
1377 CFbsBitmap::BeginDataAccess() having been called before and it can become non-volatile |
1487 CFbsBitmap::BeginDataAccess() having been called before and it can become non-volatile |
1721 @publishedAll |
1831 @publishedAll |
1722 @released |
1832 @released |
1723 */ |
1833 */ |
1724 EXPORT_C TInt CFbsBitmap::Load(RFile& aFile,TInt32 aId/*=0*/,TBool aShareIfLoaded/*=ETrue*/) |
1834 EXPORT_C TInt CFbsBitmap::Load(RFile& aFile,TInt32 aId/*=0*/,TBool aShareIfLoaded/*=ETrue*/) |
1725 { |
1835 { |
1726 return Load(aFile,aId,aShareIfLoaded,0); |
1836 FBS_OST(TFullName fileName;) |
|
1837 FBS_OST(aFile.FullName(fileName);) |
|
1838 FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD3_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d", (TUint)this, fileName, aId, aShareIfLoaded);) |
|
1839 TInt ret = Load(aFile,aId,aShareIfLoaded,0); |
|
1840 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD3_EXIT, "< this=0x%08x, ret=%d", (TUint)this, ret);) |
|
1841 return ret; |
1727 } |
1842 } |
1728 |
1843 |
1729 /** Loads a specific bitmap from an opened multi-bitmap file handle. |
1844 /** Loads a specific bitmap from an opened multi-bitmap file handle. |
1730 The bitmap may be shared by other font and bitmap server clients. |
1845 The bitmap may be shared by other font and bitmap server clients. |
1731 @param aFile The handle of the multi-bitmap (.mbm) file. |
1846 @param aFile The handle of the multi-bitmap (.mbm) file. |
1737 @publishedAll |
1852 @publishedAll |
1738 @released |
1853 @released |
1739 */ |
1854 */ |
1740 EXPORT_C TInt CFbsBitmap::Load(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) |
1855 EXPORT_C TInt CFbsBitmap::Load(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) |
1741 { |
1856 { |
|
1857 TInt err = KErrNone; |
|
1858 FBS_OST(TFullName fileName;) |
|
1859 FBS_OST(aFile.FullName(fileName);) |
|
1860 FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD4_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d; off=%d", (TUint)this, fileName, aId, aShareIfLoaded, aFileOffset);) |
1742 if (!iFbs) |
1861 if (!iFbs) |
1743 { |
1862 { |
1744 return(KErrCouldNotConnect); |
1863 FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_LOAD4_ERROR, "! this=0x%08x; !iFbs", (TUint)this);) |
1745 } |
1864 err = KErrCouldNotConnect; |
1746 Reset(); |
1865 } |
1747 TUint32* rompointer; |
1866 else |
1748 IsFileInRom(aFile,rompointer); |
1867 { |
1749 TBool romPointerValid; |
1868 Reset(); |
1750 TInt err = DoLoadFromRom(rompointer, aId, aFileOffset, romPointerValid); |
1869 TUint32* rompointer; |
1751 if (!romPointerValid) |
1870 IsFileInRom(aFile,rompointer); |
1752 { |
1871 TBool romPointerValid; |
1753 err = DoLoad(aFile,aId,aShareIfLoaded,aFileOffset); |
1872 err = DoLoadFromRom(rompointer, aId, aFileOffset, romPointerValid); |
1754 } |
1873 if (!romPointerValid) |
|
1874 { |
|
1875 err = DoLoad(aFile,aId,aShareIfLoaded,aFileOffset); |
|
1876 FBS_OST_IF(err!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOAD4_ERROR2, "! this=0x%08x; DoLoad() returned %d", (TUint)this, err);) |
|
1877 } |
|
1878 } |
|
1879 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOAD4_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);) |
1755 return err; |
1880 return err; |
1756 } |
1881 } |
1757 |
1882 |
1758 /** Loads and compresses a specific bitmap from an opened multi-bitmap file handle. |
1883 /** Loads and compresses a specific bitmap from an opened multi-bitmap file handle. |
1759 The bitmap may be shared by other font and bitmap server clients. |
1884 The bitmap may be shared by other font and bitmap server clients. |
1767 @publishedAll |
1892 @publishedAll |
1768 @released |
1893 @released |
1769 */ |
1894 */ |
1770 EXPORT_C TInt CFbsBitmap::LoadAndCompress(RFile& aFile,TInt32 aId/*=0*/,TBool aShareIfLoaded/*=ETrue*/) |
1895 EXPORT_C TInt CFbsBitmap::LoadAndCompress(RFile& aFile,TInt32 aId/*=0*/,TBool aShareIfLoaded/*=ETrue*/) |
1771 { |
1896 { |
1772 return LoadAndCompress(aFile,aId,aShareIfLoaded,0); |
1897 FBS_OST(TFullName fileName;) |
|
1898 FBS_OST(aFile.FullName(fileName);) |
|
1899 FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS3_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d", (TUint)this, fileName, aId, aShareIfLoaded);) |
|
1900 TInt ret = LoadAndCompress(aFile,aId,aShareIfLoaded,0); |
|
1901 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS3_EXIT, "< this=0x%08x; ret=%d", (TUint)this, ret);) |
|
1902 return ret; |
1773 } |
1903 } |
1774 |
1904 |
1775 /** Loads and compresses a specific bitmap from an opened multi-bitmap file handle. |
1905 /** Loads and compresses a specific bitmap from an opened multi-bitmap file handle. |
1776 The bitmap may be shared by other font and bitmap server clients. If the |
1906 The bitmap may be shared by other font and bitmap server clients. If the |
1777 bitmap is loaded from ROM then compression is not allowed. |
1907 bitmap is loaded from ROM then compression is not allowed. |
1785 @publishedAll |
1915 @publishedAll |
1786 @released |
1916 @released |
1787 */ |
1917 */ |
1788 EXPORT_C TInt CFbsBitmap::LoadAndCompress(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) |
1918 EXPORT_C TInt CFbsBitmap::LoadAndCompress(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset) |
1789 { |
1919 { |
|
1920 FBS_OST(TFullName fileName;) |
|
1921 FBS_OST(aFile.FullName(fileName);) |
|
1922 FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS4_ENTRY, "> this=0x%08x; file=%S; id=0x%08x; share=%d", (TUint)this, fileName, aId, aShareIfLoaded);) |
1790 TInt err = Load(aFile,aId,aShareIfLoaded,aFileOffset); |
1923 TInt err = Load(aFile,aId,aShareIfLoaded,aFileOffset); |
1791 if (err == KErrNone) |
1924 if (err == KErrNone) |
1792 { |
1925 { |
1793 err = !(iFlags & EIsRomBitmap) ? Compress() : KErrAccessDenied; |
1926 if (!(iFlags & EIsRomBitmap)) |
1794 } |
1927 { |
|
1928 err = Compress(); |
|
1929 FBS_OST_IF(err!=KErrNone, OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOADANDCOMPRESS4_ERROR, "! this=0x%08x; Compress() returned %d", (TUint)this, err);) |
|
1930 } |
|
1931 else |
|
1932 { |
|
1933 err = KErrAccessDenied; |
|
1934 FBS_OST(OstTraceExt2( TRACE_ERROR, CFBSBITMAP_LOADANDCOMPRESS4_ERROR2, "! this=0x%08x; Cannot compress bitmap in ROM; iFlags=0x%08x", (TUint)this, (TUint)iFlags);) |
|
1935 } |
|
1936 } |
|
1937 FBS_OST(OstTraceExt2( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_LOADANDCOMPRESS4_EXIT, "< this=0x%08x; err=%d", (TUint)this, err);) |
1795 return err; |
1938 return err; |
1796 } |
1939 } |
1797 |
1940 |
1798 /** Gets all the bitmap handles for all the bitmaps stored in the Font Bitmap Server. There is a limit of |
1941 /** Gets all the bitmap handles for all the bitmaps stored in the Font Bitmap Server. There is a limit of |
1799 the number of bitmaps that can be retrieved defined by KMaxBitmapHandleBufferSize. If this limit has been |
1942 the number of bitmaps that can be retrieved defined by KMaxBitmapHandleBufferSize. If this limit has been |
1906 @see CFbsBitmap::BeginDataAccess() |
2049 @see CFbsBitmap::BeginDataAccess() |
1907 @see CFbsBitmap::EndDataAccess() |
2050 @see CFbsBitmap::EndDataAccess() |
1908 */ |
2051 */ |
1909 EXPORT_C TInt CFbsBitmap::CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, const TAny* aData, TInt aDataSize) |
2052 EXPORT_C TInt CFbsBitmap::CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, const TAny* aData, TInt aDataSize) |
1910 { |
2053 { |
|
2054 TInt err; |
|
2055 FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEEXTENDEDBITMAP_ENTRY, "> this=0x%08x; w=%d; h=%d; dm=%d; type=0x%08x", (TUint)this, aSizeInPixels.iWidth, aSizeInPixels.iHeight, aDispMode, aType.iUid);) |
1911 if (!aData || aDataSize == 0) |
2056 if (!aData || aDataSize == 0) |
1912 { |
2057 { |
1913 return KErrArgument; |
2058 FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_CREATEEXTENDEDBITMAP_ERROR, "! this=0x%08x; (!aData || aDataSize == 0)", (TUint)this);) |
1914 } |
2059 err = KErrArgument; |
1915 TInt err = DoCreate(aSizeInPixels, aDispMode, aType, aDataSize); |
2060 } |
1916 if (err == KErrNone) |
2061 else |
1917 { |
2062 { |
1918 Mem::Copy(iFbs->iLargeBitmapChunk.Base() + iAddressPointer->iDataOffset, aData, aDataSize); |
2063 err = DoCreate(aSizeInPixels, aDispMode, aType, aDataSize); |
1919 } |
2064 if (err == KErrNone) |
|
2065 { |
|
2066 Mem::Copy(iFbs->iLargeBitmapChunk.Base() + iAddressPointer->iDataOffset, aData, aDataSize); |
|
2067 } |
|
2068 } |
|
2069 FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEEXTENDEDBITMAP_EXIT, "< this=0x%08x; err=%d; iH=0x%08x; iSH=0x%08x", (TUint)this, err, iHandle, iServerHandle);) |
1920 return err; |
2070 return err; |
1921 } |
2071 } |
1922 |
2072 |
1923 /** |
2073 /** |
1924 Creates an extended bitmap. Extended bitmaps are used to store immutable |
2074 Creates an extended bitmap. Extended bitmaps are used to store immutable |
1958 @see CFbsBitmap::EndDataAccess() |
2108 @see CFbsBitmap::EndDataAccess() |
1959 @see MFbsExtendedBitmapInitializer |
2109 @see MFbsExtendedBitmapInitializer |
1960 */ |
2110 */ |
1961 EXPORT_C TInt CFbsBitmap::CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, TInt aDataSize, MFbsExtendedBitmapInitializer& aInitializer) |
2111 EXPORT_C TInt CFbsBitmap::CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, TInt aDataSize, MFbsExtendedBitmapInitializer& aInitializer) |
1962 { |
2112 { |
|
2113 TInt err; |
|
2114 FBS_OST(OstTraceExt5( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEEXTENDEDBITMAP2_ENTRY, "> this=0x%08x; w=%d; h=%d; dm=%d; type=0x%08x;", (TUint)this, aSizeInPixels.iWidth, aSizeInPixels.iHeight, aDispMode, aType.iUid);) |
1963 if (aDataSize == 0) |
2115 if (aDataSize == 0) |
1964 { |
2116 { |
1965 return KErrArgument; |
2117 FBS_OST(OstTrace1( TRACE_ERROR, CFBSBITMAP_CREATEEXTENDEDBITMAP2_ERROR, "! this=0x%08x; aDataSize == 0", (TUint)this);) |
1966 } |
2118 err = KErrArgument; |
1967 TInt err = DoCreate(aSizeInPixels, aDispMode, aType, aDataSize); |
2119 } |
1968 if (err == KErrNone) |
2120 else |
1969 { |
2121 { |
1970 err = aInitializer.InitExtendedBitmap(iFbs->iLargeBitmapChunk.Base() + iAddressPointer->iDataOffset, aDataSize); |
2122 err = DoCreate(aSizeInPixels, aDispMode, aType, aDataSize); |
1971 if (err != KErrNone) |
2123 if (err == KErrNone) |
1972 { |
2124 { |
1973 Reset(); |
2125 err = aInitializer.InitExtendedBitmap(iFbs->iLargeBitmapChunk.Base() + iAddressPointer->iDataOffset, aDataSize); |
1974 } |
2126 if (err != KErrNone) |
1975 } |
2127 { |
|
2128 Reset(); |
|
2129 } |
|
2130 } |
|
2131 } |
|
2132 FBS_OST(OstTraceExt4( GRAPHICS_RESOURCE_MANAGEMENT_FUNCTIONS, CFBSBITMAP_CREATEEXTENDEDBITMAP2_EXIT, "< this=0x%08x; err=%d; iH=0x%08x; iSH=0x%08x", (TUint)this, err, iHandle, iServerHandle);) |
1976 return err; |
2133 return err; |
1977 } |
2134 } |
1978 |
2135 |
1979 /** |
2136 /** |
1980 Gets the UID identifying the data format of an extended bitmap. |
2137 Gets the UID identifying the data format of an extended bitmap. |