AppSrc/CDrawMagGlass.cpp
author jkauppin
Fri, 15 Oct 2010 10:18:29 +0900
changeset 3 93fff7023be8
permissions -rw-r--r--
Initial version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     1
/*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     3
* All rights reserved.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     4
* This component and the accompanying materials are made available
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     6
* which accompanies this distribution, and is available
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     8
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     9
* Initial Contributors:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    11
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    12
* Contributors: Juha Kauppinen, Mika Hokkanen
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    13
* 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    14
* Description: Photo Browser
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    15
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    16
*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    17
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    18
#include "CDrawMagGlass.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    19
#include "TextureLoader.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    20
#include "DrawUtility.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    21
#include "ImagicConsts.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    22
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    23
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    24
GLfixed CDrawMagGlass::iMagGlassVertices[VERTICES_PER_LINE*VERTICES_PER_LINE*3];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    25
GLfixed CDrawMagGlass::iMagGlassTex[VERTICES_PER_LINE*VERTICES_PER_LINE*2];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    26
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    27
const TInt CDrawMagGlass::iMagGlassTriCount=(VERTICES_PER_LINE-1)*(VERTICES_PER_LINE-1)*2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    28
GLushort CDrawMagGlass::iMagGlassIndices[CDrawMagGlass::iMagGlassTriCount*3];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    29
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    30
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    31
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    32
// Texture coordinate data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    33
const GLfixed CDrawMagGlass::iGlobalTexCoords[] =
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    34
   {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    35
   //bitmap has to be flipped over
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    36
   0,       1<<16,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    37
   1<<16,   1<<16,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    38
   0,       0,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    39
   1<<16,   0
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    40
   };
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    41
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    42
CDrawMagGlass::CDrawMagGlass()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    43
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    44
    // No implementation required
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    45
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    46
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    47
CDrawMagGlass::~CDrawMagGlass()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    48
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    49
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    50
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    51
CDrawMagGlass* CDrawMagGlass::NewLC(CImagicContainerBrowser* aContainer, CDrawOneByOne* aDrawOneByOne)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    52
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    53
    CDrawMagGlass* self = new (ELeave) CDrawMagGlass();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    54
    CleanupStack::PushL(self);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    55
    self->ConstructL(aContainer,aDrawOneByOne);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    56
    return self;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    57
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    58
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    59
CDrawMagGlass* CDrawMagGlass::NewL(CImagicContainerBrowser* aContainer, CDrawOneByOne* aDrawOneByOne)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    60
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    61
    CDrawMagGlass* self = CDrawMagGlass::NewLC(aContainer,aDrawOneByOne);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    62
    CleanupStack::Pop(); // self;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    63
    return self;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    64
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    65
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    66
void CDrawMagGlass::ConstructL(CImagicContainerBrowser* aContainer, CDrawOneByOne* aDrawOneByOne)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    67
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    68
    iContainer = aContainer;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    69
    iDrawOneByOne = aDrawOneByOne;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    70
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    71
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    72
TReal CDrawMagGlass::GetMagGlassZoomFactor()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    73
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    74
    DP1_IMAGIC(_L("CDrawMagGlass::GetMagGlassZoomFactor - magGlass: %f"), iMagGlassZoomFactor);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    75
    return iMagGlassZoomFactor;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    76
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    77
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    78
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    79
// Interpolates given value into target value with step
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    80
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    81
void CDrawMagGlass::Interpolate(float &aValue, const float aTarget, const float aStep)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    82
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    83
    //DP0_IMAGIC(_L("CImagicContainerBrowser::Interpolate"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    84
    // Calculate new value
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    85
    float diff = aTarget-aValue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    86
    aValue += diff * aStep * 0.2/*iTimeDiff*/ * 30; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    87
    //float timediff = Min(0.1f, iTimeDiff); // so max value of timediff is 100tick (100ms)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    88
    //aValue += diff * aStep * timediff * 30; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    89
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    90
    // Check that value is in range
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    91
    if (aValue > aTarget && diff > 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    92
        aValue = aTarget;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    93
    if (aValue < aTarget && diff < 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    94
        aValue = aTarget;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    95
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    96
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    97
void CDrawMagGlass::InitDrawMagGlass()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    98
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    99
    iMagGlassZoomFactor = 1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   100
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   101
    TInt pos=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   102
    for (TInt y=0; y<VERTICES_PER_LINE-1; y++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   103
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   104
        TInt startvert=y*VERTICES_PER_LINE;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   105
        for (TInt x=0; x<VERTICES_PER_LINE-1; x++, pos+=6)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   106
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   107
            // First triangle
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   108
            iMagGlassIndices[pos+0]=startvert+x;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   109
            iMagGlassIndices[pos+1]=startvert+x+1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   110
            iMagGlassIndices[pos+2]=startvert+x+VERTICES_PER_LINE;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   111
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   112
            // Second triangle
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   113
            iMagGlassIndices[pos+3]=startvert+x+VERTICES_PER_LINE;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   114
            iMagGlassIndices[pos+4]=startvert+x+1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   115
            iMagGlassIndices[pos+5]=startvert+x+VERTICES_PER_LINE+1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   116
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   117
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   118
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   119
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   120
void CDrawMagGlass::DrawMagGlass(const TSize &aScreenPhysicalSize, TReal aImageAspectRatio)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   121
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   122
    TInt pos=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   123
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   124
#ifdef __WINS__ 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   125
    // Fake touhcpoint for emulator
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   126
    iContainer->iLastTouchPoint.iX=320/2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   127
    iContainer->iLastTouchPoint.iY=240/2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   128
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   129
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   130
    // Calculate finger position on screen
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   131
    // First calculate position on 0-1 range
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   132
    GLfixed xFinger;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   133
    GLfixed yFinger;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   134
    if(iContainer->GetScreenOrientation())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   135
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   136
        const TInt fingerOffset = 100;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   137
        xFinger=iContainer->iLastTouchPoint.iX*(1<<16) / aScreenPhysicalSize.iWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   138
        yFinger=(iContainer->iLastTouchPoint.iY-fingerOffset)*(1<<16) / aScreenPhysicalSize.iHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   139
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   140
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   141
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   142
        const TInt fingerOffset = 100;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   143
        xFinger=(iContainer->iLastTouchPoint.iX-fingerOffset)*(1<<16) / aScreenPhysicalSize.iWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   144
        yFinger=(iContainer->iLastTouchPoint.iY)*(1<<16) / aScreenPhysicalSize.iHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   145
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   146
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   147
    // Move center to match OpenGL center
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   148
    xFinger=-(0.5*(1<<16)-xFinger);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   149
    yFinger=0.5*(1<<16)-yFinger;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   150
    // Then scale it to opengl window size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   151
    /*xFinger=xFinger*iContainer->iDrawOnebyOneW*2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   152
    yFinger=yFinger*iContainer->iDrawOnebyOneH*2;*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   153
    xFinger=xFinger*iDrawOneByOne->GetDrawOneByOneWidth()*2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   154
    yFinger=yFinger*iDrawOneByOne->GetDrawOneByOneHeight()*2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   155
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   156
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   157
    CImageData* data=iContainer->iIEngine->GetImageData(iContainer->GetCurrentIndex());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   158
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   159
    if((data->GetOrientation() == 0 || data->GetOrientation() == 180) && !iContainer->GetScreenOrientation())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   160
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   161
        GLfixed tmpX=xFinger;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   162
        GLfixed tmpY=yFinger;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   163
        xFinger = tmpY;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   164
        yFinger = tmpX * -1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   165
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   166
    else if(data->GetOrientation() == 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   167
        ;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   168
    else if((data->GetOrientation() == 90 || data->GetOrientation() == 270) && iContainer->GetScreenOrientation())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   169
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   170
        GLfixed tmpX=xFinger;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   171
        GLfixed tmpY=yFinger;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   172
        xFinger = tmpY;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   173
        yFinger = tmpX * -1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   174
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   175
    else if((data->GetOrientation() == 90 || data->GetOrientation() == 270) && !iContainer->GetScreenOrientation())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   176
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   177
        xFinger = xFinger * -1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   178
        yFinger = yFinger * -1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   179
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   180
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   181
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   182
    //Interpolate(iMagGlassZoomFactor, 1.8, 0.05);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   183
    //const float step=0.3; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   184
    //const float step=0.2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   185
    /*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   186
    if (iMagGlassZoomFactor < CDrawOneByOne::KMaxMagGlassZoomFactor-step)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   187
        //iDrawOneByOne->IncMagGlassZoomFactor(step);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   188
        iMagGlassZoomFactor += step;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   189
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   190
        //iDrawOneByOne->SetMagGlassZoomFactor(CDrawOneByOne::KMaxMagGlassZoomFactor);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   191
        iMagGlassZoomFactor = CDrawOneByOne::KMaxMagGlassZoomFactor;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   192
    */
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   193
    Interpolate(iMagGlassZoomFactor, CDrawOneByOne::KMaxMagGlassZoomFactor, 0.1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   194
    DP1_IMAGIC(_L("CDrawMagGlass::DrawMagGlass - magGlass: %f"), iMagGlassZoomFactor);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   195
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   196
    /*CImageData* data=iIEngine->GetImageData(iCurrentIndex, iImagicAppUi->GetUIDrawMode());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   197
    if(data->GetOrientation() == 90 || data->GetOrientation() == 270)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   198
        aImageAspectRatio = 1/aImageAspectRatio;*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   199
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   200
    // Create vertices
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   201
    pos=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   202
    TInt texPos=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   203
    for (TInt y=0; y<VERTICES_PER_LINE; y++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   204
        for (TInt x=0; x<VERTICES_PER_LINE; x++,pos+=3,texPos+=2)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   205
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   206
            // Calculate new vertex coordinates
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   207
            // First, calculate center
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   208
            GLfixed xCoord= x;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   209
            GLfixed yCoord=-y;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   210
            GLfixed zCoord= 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   211
            // Then convert to fixed point
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   212
            xCoord*=(1<<16)/(VERTICES_PER_LINE-1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   213
            yCoord*=(1<<16)/(VERTICES_PER_LINE-1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   214
            // shift 0.5 to locate image center at (0,0) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   215
            xCoord -= (1<<15);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   216
            yCoord += (1<<15);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   217
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   218
            // Set aspect ratio
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   219
            if (aImageAspectRatio > 1)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   220
                yCoord *= (1/aImageAspectRatio);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   221
            else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   222
                xCoord *= (1*aImageAspectRatio);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   223
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   224
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   225
            // Zoom ball sizes
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   226
            const float ballSize=0.35;      // Zoom ball size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   227
            const float zoomSize=0.2;     // Sharp zoom size, has to be at least 0.1 smaller bigger than ball size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   228
            // Calculate squared values
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   229
            const GLfixed ballSizeSquared=(ballSize*(1<<8))*(ballSize*(1<<8));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   230
            const GLfixed zoomSizeSquared=(zoomSize*(1<<8))*(zoomSize*(1<<8));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   231
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   232
            // Calculate distance to finger with both axis
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   233
            GLfixed xDist=xFinger-xCoord;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   234
            GLfixed yDist=yFinger-yCoord;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   235
            // Calculate squared distance with phytagoras
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   236
            GLfixed dist=(xDist/(1<<8))*(xDist/(1<<8)) + (yDist/(1<<8))*(yDist/(1<<8));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   237
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   238
            // Are we close enough
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   239
            if (dist < ballSizeSquared)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   240
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   241
                // Zoom factor
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   242
                //const float iMagGlassZoomFactor=1.8;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   243
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   244
                // Determine proper zoom for this vertex
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   245
                //float zoom=iContainer->iMagGlassZoomFactor;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   246
                float zoom=iMagGlassZoomFactor;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   247
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   248
                if (dist > zoomSizeSquared)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   249
                    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   250
                    // We are between sharp zoom and ball edge
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   251
                    // Calculat escale factor for zoom
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   252
                    float scale=((float)(dist-zoomSizeSquared))/(ballSizeSquared-zoomSizeSquared);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   253
                    zoom=(zoom-1)*(1.0-scale)+1;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   254
                    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   255
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   256
                // Calculate new axis distances with zoom
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   257
                xDist*=zoom;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   258
                yDist*=zoom;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   259
                // Calculate new coordinates based on distances
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   260
                xCoord=xFinger-xDist;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   261
                yCoord=yFinger-yDist;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   262
                zCoord=128;     // Set coordinate a bit above of original picture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   263
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   264
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   265
            // Store vertex data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   266
            iMagGlassVertices[pos+0]=xCoord;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   267
            iMagGlassVertices[pos+1]=yCoord;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   268
            iMagGlassVertices[pos+2]=zCoord;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   269
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   270
            // Set texture coodrinates
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   271
            iMagGlassTex[texPos+0]=x*(1<<16)/(VERTICES_PER_LINE-1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   272
            iMagGlassTex[texPos+1]=y*(1<<16)/(VERTICES_PER_LINE-1);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   273
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   274
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   275
    glEnable(GL_DEPTH_TEST);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   276
    glEnable(GL_CULL_FACE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   277
    glCullFace(GL_FRONT);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   278
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   279
    // Set vertex and texture coordinates and draw
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   280
    glVertexPointer(3, GL_FIXED, 0, iMagGlassVertices);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   281
    glTexCoordPointer(2, GL_FIXED, 0, iMagGlassTex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   282
    glDrawElements(GL_TRIANGLES,iMagGlassTriCount*3,GL_UNSIGNED_SHORT,iMagGlassIndices);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   283
    //glDrawElements(GL_LINES,triCount*3,GL_UNSIGNED_SHORT,indices);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   284
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   285
    glDisable(GL_CULL_FACE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   286
    glDisable(GL_DEPTH_TEST);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   287
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   288