コード例 #1
0
CCApplication::Orientation CCApplication::setOrientation(Orientation orientation)
{
    if(orientation == kOrientationPortrait)
    {   
        PDL_SetOrientation(PDL_ORIENTATION_90 );    
        return kOrientationLandscapeRight;
    }
    if(orientation == kOrientationLandscapeRight) 
    {   
        PDL_SetOrientation(PDL_ORIENTATION_0 ); 
        return kOrientationPortrait;
    }
    if(orientation==kOrientationLandscapeLeft) 
    {   
        PDL_SetOrientation(PDL_ORIENTATION_180 );    
        return kOrientationPortraitUpsideDown;
    }
    if(orientation==kOrientationPortraitUpsideDown) 
    {
        PDL_SetOrientation(PDL_ORIENTATION_270 );
        return kOrientationLandscapeLeft;
    }
	return orientation;
}
コード例 #2
0
ファイル: GLUtil.cpp プロジェクト: dtzWill/supernes
void updateOrientation()
{
    //XXX: This function is a beast, make it less crazy.
    //
    float screenAspect = (float)destWidth/(float)destHeight;
    float emulatedAspect = (float)srcWidth/(float)srcHeight;

    //XXX: Hack until skins support setting their orientation
    if ( use_on_screen && skin )
        orientation = ORIENTATION_LANDSCAPE_R;

    switch( orientation )
    {
    case ORIENTATION_LANDSCAPE_R:
        memcpy( vertexCoords, land_r_vertexCoords, 8*sizeof(float) );
        break;
    case ORIENTATION_LANDSCAPE_L:
        memcpy( vertexCoords, land_l_vertexCoords, 8*sizeof(float) );
        break;
    default:
        printf( "Unsupported orientation: %d!\n", orientation );
        printf( "Defaulting to portrait orientation\n" );
        //fall through
        orientation = ORIENTATION_PORTRAIT;
    case ORIENTATION_PORTRAIT:
        memcpy( vertexCoords, portrait_vertexCoords, 8*sizeof(float) );
        break;
    }
    if ( orientation != ORIENTATION_PORTRAIT )
    {
        emulatedAspect = 1/emulatedAspect;//landscape has reversed aspect ratio
    }

    if (!fullscreen)
    {
        for ( int i = 0; i < 4; i++ )
        {
            vertexCoords[2*i+1] *= screenAspect / emulatedAspect;
        }

        if ( use_on_screen && skin )
        {
            float csw = skin->controller_screen_width,
                  csh = skin->controller_screen_height;
            float controller_aspect = csw / csh;
            int x_offset_center = 0, y_offset_center = 0;

            // Forcing b/c I know aspect ratios > 1 :(
            float effectiveHeight = destWidth;
            float effectiveWidth = effectiveHeight / emulatedAspect;

            // So, given these, we need to scale to max csw and csh.
            float scale_max_csw = csw/effectiveWidth;
            float scale_max_csh = csh/effectiveHeight;

            // Pick the leser, and use that to calculate centering offsets
            float scale_factor;
            if ( scale_max_csw < scale_max_csh )
            {
                scale_factor = scale_max_csw;
                //We're scaling to the width, so we need to center the height:
                y_offset_center = (effectiveHeight * scale_max_csh - effectiveHeight * scale_max_csw) / 2;
            }
            else
            {
                scale_factor = scale_max_csh;
                //We're scaling to the height, so we need to center the width:
                x_offset_center = (effectiveWidth * scale_max_csw - effectiveWidth * scale_max_csh) / 2;
            }

            for ( int i = 0; i < 4; i++ )
            {
                //scale
                vertexCoords[2*i] *= scale_factor;
                vertexCoords[2*i+1] *= scale_factor;
            }

            float y_offset = 1.0 - vertexCoords[0];
            float x_offset = 1.0 - vertexCoords[1];

            //push the screen to the coordinates indicated
            y_offset -= ( (float)skin->controller_screen_y_offset / (float)destWidth ) * 2;
            x_offset -= ( (float)skin->controller_screen_x_offset / (float)destHeight ) * 2;

            //And account for centering...
            y_offset -= ( y_offset_center / (float)destWidth ) * 2;
            x_offset -= ( x_offset_center / (float)destHeight ) * 2;

            for ( int i = 0; i < 4; i++ )
            {
                //translate
                vertexCoords[2*i] += y_offset;
                vertexCoords[2*i+1] += x_offset;
            }
        }
    }

    int notification_direction;
    switch ( orientation )
    {
    case ORIENTATION_PORTRAIT:
        notification_direction = PDL_ORIENTATION_BOTTOM;
        break;
    case ORIENTATION_LANDSCAPE_L:
        notification_direction = PDL_ORIENTATION_RIGHT;
        break;
    case ORIENTATION_LANDSCAPE_R:
        notification_direction = PDL_ORIENTATION_LEFT;
        break;
    default:
        //o_O invalid orientation.
        notification_direction = PDL_ORIENTATION_BOTTOM;
        break;
    }
    PDL_SetOrientation( notification_direction );
}
コード例 #3
0
ファイル: tp_main.c プロジェクト: flyingsnow/TPP
int main(int argc, char** argv)
{
	int result;
	int fd;
	fz_context *ctx;
	char buf[10];
	int c; 
	int pagewidth, pageheight;
	
	result = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);

	if(result !=  0) {
		printf("Could not init SDL: %s\n", SDL_GetError());
		exit(1);
	}

	PDL_Init(0);
	PDL_SetOrientation(PDL_ORIENTATION_0);
    
    PDL_RegisterJSHandler("flipPage",flip_page);
    PDL_RegisterJSHandler("panPage",pan_page);	
 //   PDL_RegisterJSHandler("pause", pause);																																																									
 //	PDL_RegisterJSHandler("resume", resume);
	
    PDL_JSRegistrationComplete();
    PDL_CallJS("ready", NULL, 0);

	memset(&pitch_action, 0, sizeof(PDF_Pitch_t));

	//gesture_data = (Gesture_Event *)malloc(sizeof(Gesture_Event));
	memset(&gesture_data, 0, sizeof(Gesture_Event));
	pitch_action.scale = 1.0;
	
	Surface = SDL_SetVideoMode(0, 0, 0, SDL_SWSURFACE);

	SDL_FillRect(Surface, NULL, 0xF0F0F);
	SDL_Flip(Surface);

	ctx = fz_new_context(NULL, FZ_STORE_DEFAULT);

	pdfapp_init(ctx, &app);

	app.scrw = 1024;
	app.scrh = 768;
	app.pageno = 10;
	
	src.x = 20;
	src.y = 20;
	src.w = 1024;
	src.h = 768;

	dest.x = 0;
	dest.y = 0;
	
	fd = open(argv[1], O_RDONLY, 0666);
	if (fd < 0)	{
		printf("cannot open file\n");
		fz_throw(app.ctx, "cannot open file '%s'", argv[1]);
	}
	pdfapp_open(&app,argv[1],fd,0);
	
	//app.rotate = 90 * 3;
	pdfapp_showpage(&app,1,1,1);
	draw_pdf();
	
#if 0
	content = SDL_CreateRGBSurfaceFrom(app.image->samples, app.image->w, app.image->h,
		32, app.image->w * 4, 0x00, 0x00, 0x00, 0x00);
	

	SDL_BlitSurface(content,NULL, Surface, NULL);
	SDL_Flip(Surface);
#endif

	SDL_Event Event;
	Event.type = SDL_NOEVENT;
	int temp1, temp2;
	
	do {
		if (Paused)	{
			SDL_WaitEvent(&Event);
			if (Event.type == SDL_ACTIVEEVENT)
			{
				if ((Event.active.state & SDL_APPACTIVE) && (Event.active.gain == 1))
				{
					Paused = SDL_FALSE;
				}
			}
		}			
	else {
		while(SDL_PollEvent(&Event)) {
			handle_events(Event);
//			switch (Event.type) {
#if 0
				case SDL_MOUSEBUTTONDOWN:
						fingerNum = Event.button.which + 1;
                        mouse_state = SDL_MOUSEBUTTONDOWN;
						printf("%2d fingers touch down\n",Event.button.which);
					break;
					
				case SDL_MOUSEBUTTONUP:
						if(fingerNum == 2) { 
							memset(&pitch_action, 0, sizeof(PDF_Pitch_t)-sizeof(float32));
							pinch = SDL_FALSE;
							//pitch_action.scale = 1.0;
						}
						if(fingerNum == 1 && mouse_state == SDL_MOUSEBUTTONDOWN) {
                            if(Event.button.x > (app.image->h / 2)) {
								buf[0] = '.';
                            }
							else {
								buf[0] = ',';
							}
							pdfapp_onkey(&app,buf[0]);
							printf("Flip page\n");
					    	draw_pdf();
						}
					//	printf("%2d fingers touching\n",fingerNum);
                        mouse_state = NULL;	
						printf("%2d fingers touch up\n",Event.button.which);

						if(fingerNum > 0)
							fingerNum -= 1; 
					break;

				case SDL_MOUSEMOTION:
					if(fingerNum == 2) {
							if(Event.motion.which == 0) {
								pitch_action.x0 = Event.motion.x;
								pitch_action.y0 = Event.motion.y;
								}
							if(Event.motion.which == 1) {
								pitch_action.x1 = Event.motion.x;
								pitch_action.y1 = Event.motion.y;
								}
							pitch_action.cx = (pitch_action.x0 + pitch_action.x1)/2;
							pitch_action.cy = (pitch_action.y0 + pitch_action.y1)/2;
							temp1  = pow((pitch_action.x0 - pitch_action.x1),2);
							temp2  = pow((pitch_action.y0 - pitch_action.y1),2);
							pitch_action.distance1 = sqrt(temp1 + temp2);
							
							pitch_action.offset = pitch_action.distance1 - pitch_action.distance0;
							pitch_action.distance0 = pitch_action.distance1;

							pitch_action.offset = (int)pitch_action.offset;
						//	printf("cx:%4d, cy:%4d, offset:%4f \n",pitch_action.cx,
						//		pitch_action.cy, pitch_action.offset);

							#if 1
							if(pitch_action.offset > 0 && pitch_action.offset < 5) {
								#if 0
									app.resolution *= (Uint16)pitch_action.offset;
									if (app.resolution > MAXRES)
										app.resolution = MAXRES;
									pdfapp_showpage(&app, 0, 1, 0);									
									draw_pdf();
								#endif
								pinch = SDL_TRUE;
								pitch_action.scale += 0.008;
								if(pitch_action.scale > 2)
									pitch_action.scale = 2;
								printf("-------------------------------------pinch out\n");
									
							}
							else if(pitch_action.offset < 0) {
								#if 0
									app.resolution /=(Uint16)( abs(pitch_action.offset));
									if (app.resolution < MINRES)
										app.resolution = MINRES;
									pdfapp_showpage(&app, 0, 1, 0);
									draw_pdf();
								#endif
									pinch = SDL_TRUE;
									pitch_action.scale -= 0.008;
									if(pitch_action.scale < 0.9)
										pitch_action.scale = 0.9;

									printf("----------------------------------pinch in\n");
								}
							else {
								pinch = SDL_FALSE;
							}
							#endif
						}
					//printf("which: %d, x = %4d, y = %4d \n",Event.motion.which,
					//	Event.motion.x, Event.motion.y);
                    mouse_state =  SDL_MOUSEMOTION;
					printf("Finger move \n");
                    break;
#endif
/*
				// handle deactivation by pausing our animation
				case SDL_ACTIVEEVENT:
					if ((Event.active.state & SDL_APPACTIVE) &&	(Event.active.gain == 0))
					{
						Paused = SDL_TRUE;
					}
					break;
					
				default:
					break;
//				}
*/
		}

#if 1
		if(pinch) {
			#if 1			
			if(pitch_action.scale == 1.4) {
				app.resolution = 72 * 1.4;
				pdfapp_showpage(&app,0,1,1);
				draw_pdf();
				printf("----increase pdf resolution \n");
			}
			if(pitch_action.scale == 1) {
				app.resolution = 72;
				pdfapp_showpage(&app,0,1,1);
				draw_pdf();
			}
			content = zoomSurface(page_copy,pitch_action.scale,pitch_action.scale,SMOOTHING_OFF);

			SDL_FillRect(Surface, NULL, SDL_MapRGBA(Surface->format, 45, 45, 45, 0));

			SDL_BlitSurface(content,NULL, Surface, NULL);
			SDL_Flip(Surface);
			SDL_FreeSurface(content);
			#else 
			app.resolution *= pitch_action.scale;
			if(app.resolution > MAXRES)
				app.resolution = MAXRES;
			if (app.resolution < MINRES)
				app.resolution = MINRES;
			pdfapp_showpage(&app, 0, 1, 1);
			draw_pdf();
			#endif
		}
#endif
			SDL_Delay(0);
		}
	}while(Event.type != SDL_QUIT);
	//cleanup
	SDL_FreeSurface(content);
	SDL_FreeSurface(Surface);
	
	pdfapp_close(&app);

	PDL_Quit();
	SDL_Quit();
	
	return 0;
}