imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp
branchRCL_3
changeset 8 7403edfcf0fb
parent 7 2eb74cf6572e
child 9 dea39715fc05
equal deleted inserted replaced
7:2eb74cf6572e 8:7403edfcf0fb
    40 CThumbnailScaleTask* CThumbnailScaleTask::NewL( CThumbnailTaskProcessor&
    40 CThumbnailScaleTask* CThumbnailScaleTask::NewL( CThumbnailTaskProcessor&
    41     aProcessor, CThumbnailServer& aServer, const TDesC& aFilename, CFbsBitmap*
    41     aProcessor, CThumbnailServer& aServer, const TDesC& aFilename, CFbsBitmap*
    42     aBitmap, const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
    42     aBitmap, const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
    43     TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
    43     TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
    44     const TThumbnailSize aThumbnailSize, const TInt64 aModified,
    44     const TThumbnailSize aThumbnailSize, const TInt64 aModified,
    45     TBool aBitmapToPool, const TBool aEXIF)
    45     TBool aBitmapToPool, const TBool aEXIF, const TThumbnailServerRequestId aRequestId)
    46     {
    46     {
    47     // We take ownership of aBitmap
    47     // We take ownership of aBitmap
    48     CleanupStack::PushL( aBitmap );
    48     CleanupStack::PushL( aBitmap );
    49     CThumbnailScaleTask* self = new( ELeave )CThumbnailScaleTask( aProcessor,
    49     CThumbnailScaleTask* self = new( ELeave )CThumbnailScaleTask( aProcessor,
    50         aServer, aFilename, aBitmap, aOriginalSize, aTargetSize, aCrop,
    50         aServer, aFilename, aBitmap, aOriginalSize, aTargetSize, aCrop,
    51         aDisplayMode, aPriority, aTargetUri, aThumbnailSize, aModified,
    51         aDisplayMode, aPriority, aTargetUri, aThumbnailSize, aModified,
    52         aBitmapToPool, aEXIF);
    52         aBitmapToPool, aEXIF, aRequestId);
    53     CleanupStack::Pop( aBitmap );
    53     CleanupStack::Pop( aBitmap );
    54     CleanupStack::PushL( self );
    54     CleanupStack::PushL( self );
    55     self->ConstructL();
    55     self->ConstructL();
    56     CleanupStack::Pop( self );
    56     CleanupStack::Pop( self );
    57     return self;
    57     return self;
    66 CThumbnailScaleTask::CThumbnailScaleTask( CThumbnailTaskProcessor& aProcessor,
    66 CThumbnailScaleTask::CThumbnailScaleTask( CThumbnailTaskProcessor& aProcessor,
    67     CThumbnailServer& aServer, const TDesC& aFilename, CFbsBitmap* aBitmap,
    67     CThumbnailServer& aServer, const TDesC& aFilename, CFbsBitmap* aBitmap,
    68     const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
    68     const TSize& aOriginalSize, const TSize& aTargetSize, TBool aCrop,
    69     TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
    69     TDisplayMode aDisplayMode, TInt aPriority, const TDesC& aTargetUri,
    70     const TThumbnailSize aThumbnailSize, const TInt64 aModified,
    70     const TThumbnailSize aThumbnailSize, const TInt64 aModified,
    71     TBool aBitmapToPool, const TBool aEXIF):
    71     TBool aBitmapToPool, const TBool aEXIF, const TThumbnailServerRequestId aRequestId):
    72     CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), iOwnBitmap( aBitmap ),
    72     CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), iOwnBitmap( aBitmap ),
    73     iOriginalSize( aOriginalSize ), iTargetSize(aTargetSize), iTargetSizeTN( aTargetSize ), iCrop( aCrop ),
    73     iOriginalSize( aOriginalSize ), iTargetSize(aTargetSize), iTargetSizeTN( aTargetSize ), iCrop( aCrop ),
    74     iDisplayMode( aDisplayMode ), iFilename( aFilename ), iTargetUri( aTargetUri ),
    74     iDisplayMode( aDisplayMode ), iFilename( aFilename ), iTargetUri( aTargetUri ),
    75     iThumbnailSize(aThumbnailSize), iModified(aModified),
    75     iThumbnailSize(aThumbnailSize), iModified(aModified),
    76     iBitmapToPool(aBitmapToPool), iEXIF(aEXIF)
    76     iBitmapToPool(aBitmapToPool), iEXIF(aEXIF)
    77     {
    77     {
    78     TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::CThumbnailScaleTask()", this );
    78     TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::CThumbnailScaleTask()", this );
       
    79     
       
    80     iRequestId = aRequestId;
    79     }
    81     }
    80 
    82 
    81 
    83 
    82 // ---------------------------------------------------------------------------
    84 // ---------------------------------------------------------------------------
    83 // CThumbnailScaleTask::ConstructL()
    85 // CThumbnailScaleTask::ConstructL()
   148         {
   150         {
   149         // exact target size, crop excess
   151         // exact target size, crop excess
   150         CalculateCropRectangle();
   152         CalculateCropRectangle();
   151         }
   153         }
   152     
   154     
       
   155     TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - sizes calculated", this );
       
   156     
   153 #ifdef _DEBUG
   157 #ifdef _DEBUG
   154     aStart.UniversalTime();
   158     aStart.UniversalTime();
   155 #endif
   159 #endif
   156     
   160     
   157     delete iScaledBitmap;
   161     delete iScaledBitmap;
   160     
   164     
   161     TSize bitmapSize = iBitmap->SizeInPixels();
   165     TSize bitmapSize = iBitmap->SizeInPixels();
   162     
   166     
   163     if(bitmapSize.iHeight == iTargetSize.iHeight && bitmapSize.iWidth == iTargetSize.iWidth)
   167     if(bitmapSize.iHeight == iTargetSize.iHeight && bitmapSize.iWidth == iTargetSize.iWidth)
   164         {
   168         {
       
   169         TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - no need for scaling", this);
       
   170     
   165         // copy bitmap 1:1
   171         // copy bitmap 1:1
   166         User::LeaveIfError( iScaledBitmap->Create( bitmapSize, iBitmap->DisplayMode() ));
   172         User::LeaveIfError( iScaledBitmap->Create( bitmapSize, iBitmap->DisplayMode() ));
   167         CFbsBitmapDevice* device = CFbsBitmapDevice::NewL(iScaledBitmap);
   173         CFbsBitmapDevice* device = CFbsBitmapDevice::NewL(iScaledBitmap);
   168         CleanupStack::PushL(device);
   174         CleanupStack::PushL(device);
   169         CFbsBitGc* gc = NULL;
   175         CFbsBitGc* gc = NULL;
   170         User::LeaveIfError(device->CreateContext(gc));
   176         User::LeaveIfError(device->CreateContext(gc));
   171         CleanupStack::PushL(gc);
   177         CleanupStack::PushL(gc);
   172         gc->BitBlt(TPoint(0, 0), iBitmap);
   178         gc->BitBlt(TPoint(0, 0), iBitmap);
   173         CleanupStack::PopAndDestroy(2, device); // gc
   179         CleanupStack::PopAndDestroy(2, device); // gc
   174         
   180         
   175         TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - no need for scaling", this);
       
   176         TRAPD( err, StoreAndCompleteL());
   181         TRAPD( err, StoreAndCompleteL());
   177         Complete( err );
   182         Complete( err );
   178         ResetMessageData();
   183         ResetMessageData();
   179         }
   184         }
   180     else
   185     else
   181         {
   186         {
   182         TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - scaling", this);
   187         TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() - scaling", this);
       
   188         
   183         User::LeaveIfError( iScaledBitmap->Create( iTargetSize, iBitmap->DisplayMode() ));
   189         User::LeaveIfError( iScaledBitmap->Create( iTargetSize, iBitmap->DisplayMode() ));
   184         iServer.ScaleBitmapL( iStatus, * iBitmap, * iScaledBitmap, iCropRectangle );
   190         iServer.ScaleBitmapL( iStatus, * iBitmap, * iScaledBitmap, iCropRectangle );
   185         SetActive();
   191         SetActive();
   186         }
   192         }  
   187    
   193     
       
   194     TN_DEBUG2( "CThumbnailScaleTask(0x%08x)::StartL() end", this );
   188     }
   195     }
   189 
   196 
   190 
   197 
   191 // ---------------------------------------------------------------------------
   198 // ---------------------------------------------------------------------------
   192 // CThumbnailScaleTask::RunL()
   199 // CThumbnailScaleTask::RunL()