Example #1
0
dword scene_readimage(dword selidx)
{
	u64 timer_start, timer_end;
	u64 slide_start, slide_end;

	width_rotated = 0, height_rotated = 0, thumb_width = 0, thumb_height =
		0, paintleft = 0, painttop = 0;
	imgdata = NULL, imgshow = NULL;
	oldangle = 0;
	curtop = 0, curleft = 0, xpos = 0, ypos = 0;
	img_needrf = true, img_needrc = true, img_needrp = true, showinfo =
		false, thumb = false;
	slideshow = false;
	now = 0, lasttime = 0;
	imgreading = true;

	if (config.imginfobar)
		imgh = PSP_SCREEN_HEIGHT - DISP_FONTSIZE;
	else
		imgh = PSP_SCREEN_HEIGHT;

	if (config.use_image_queue) {
		cache_setup(config.max_cache_img, &selidx);
		cache_set_forward(true);
		cache_on(true);
	}

	xrRtcGetCurrentTick(&timer_start);

	while (1) {
		u64 dbgnow, dbglasttick;
		dword key = 0;
		int ret;

		if (img_needrf) {
			int fid;
			dword ret;

			fid = freq_enter_hotzone();
			xrRtcGetCurrentTick(&dbglasttick);
			ret = scene_reloadimage(selidx);

			if (ret == -1) {
				freq_leave(fid);
				break;
			}

			img_needrf = false;
			xrRtcGetCurrentTick(&dbgnow);
			dbg_printf(d, _("装载图像时间: %.2f秒"),
					   pspDiffTime(&dbgnow, &dbglasttick));
			freq_leave(fid);
		}

		if (img_needrc) {
			int fid;

			fid = freq_enter_hotzone();
			xrRtcGetCurrentTick(&dbglasttick);
			scene_rotateimage();
			img_needrc = false;
			xrRtcGetCurrentTick(&dbgnow);
			dbg_printf(d, _("旋转图像时间: %.2f秒"),
					   pspDiffTime(&dbgnow, &dbglasttick));
			freq_leave(fid);
		}

		if (img_needrp) {
			scene_printimage(selidx);
			img_needrp = false;
		}

		now = time(NULL);

		if (config.thumb == conf_thumb_scroll && thumb) {
			thumb = false;
			img_needrp = true;
		}

		key = ctrl_read_cont();
		ret = image_handle_input(&selidx, key);

		if (ret == -1 && slideshow && !slideshow_move) {
			if (key == PSP_CTRL_CIRCLE) {
			} else if (key != 0
					   && (key == config.imgkey[1] || key == config.imgkey2[1]
						   || key == CTRL_FORWARD)) {
				bool should_exit = false;

				next_image(&selidx, &should_exit);

				if (should_exit) {
					break;
				}
			} else if (key != 0
					   && (key == config.imgkey[0] || key == config.imgkey2[0]
						   || key == CTRL_BACK)) {
				prev_image(&selidx);
			} else {
				xrPowerTick(0);
				if (config.imgpaging == conf_imgpaging_direct ||
					config.imgpaging == conf_imgpaging_updown ||
					config.imgpaging == conf_imgpaging_leftright) {
					if (now - lasttime >= config.slideinterval) {
						lasttime = now;
						ret = scene_slideshow_forward(&selidx);
					}
				} else {
					xrRtcGetCurrentTick(&slide_end);
					if (pspDiffTime(&slide_end, &slide_start) >= 0.1) {
						xrRtcGetCurrentTick(&slide_start);
					} else {
						lasttime = now;
						ret = scene_slideshow_forward(&selidx);
					}
				}
			}
		}

		if (showinfo && (key & PSP_CTRL_CIRCLE) == 0) {
			img_needrp = true;
			showinfo = false;
		}

		xrRtcGetCurrentTick(&timer_end);

		if (pspDiffTime(&timer_end, &timer_start) >= 1.0) {
			xrRtcGetCurrentTick(&timer_start);
			secticks++;
		}

		if (config.autosleep != 0 && secticks > 60 * config.autosleep) {
			power_down();
			xrPowerRequestSuspend();
			secticks = 0;
		}

		if (ret != -1) {
			selidx = ret;
			break;
		}

		scene_image_delay_action();
	}

	reset_image_show_ptr();

	if (config.use_image_queue) {
		cache_on(false);
	}

	imgreading = false;

	if (config.use_image_queue) {
	} else {
		if (imgdata != NULL) {
			free(imgdata);
			imgdata = NULL;
		}
	}

	if (config.use_image_queue) {
		// let cacher delete exif data
		exif_array = NULL;
	} else {
		if (exif_array) {
			buffer_array_free(exif_array);
			exif_array = NULL;
		}
	}

	return selidx;
}
void
Sprite2DView::update_slideshow(float delta, const Controller& controller)
{
  if (!new_sprite)
  {
    width  = sprite.get_width();
    height = sprite.get_height();
    aspect = width/height;

    if (aspect > 4.0/3.0)
    { // expand vertical
      float s = DISPLAY_H/height;
      width  *= s;
      height *= s;
      sprite.set_scale(s);

      if (offset - (width - DISPLAY_W) > 0)
      {
        offset = (width - DISPLAY_W);

        if (auto_scroll && display_time > 3.0f)
          next_image();
      }
      else
      {
        offset += delta * 50.0f + controller.get_axis_state(X_AXIS) * 200.0f * delta;
      }

      offset +=  controller.get_ball_state(MOUSE_MOTION_Y);
    }
    else
    { // expand horizontal
      float s = 800.0f/width;
      width  *= s;
      height *= s;
      sprite.set_scale(s);

      if (offset - (height - DISPLAY_H) > 0)
      {
        offset = (width - DISPLAY_H);

        if (auto_scroll && display_time > 3.0f)
          next_image();
      }
      else
      {
        offset += delta * 50.0f +   controller.get_axis_state(X_AXIS) * 200.0f * delta;
      }

      offset += controller.get_ball_state(MOUSE_MOTION_Y);
    }
  }

  if (controller.button_was_pressed(PRIMARY_BUTTON))
  {
    next_image();
  }
  else if (controller.button_was_pressed(SECONDARY_BUTTON))
  {
    prev_image();
  }
}
Example #3
0
static int image_handle_input(dword * selidx, dword key)
{
	slideshow_move = false;

#ifdef ENABLE_ANALOG
	if (config.img_enable_analog) {
		int x, y, orgtop = curtop, orgleft = curleft;

		if (ctrl_analog(&x, &y)) {
			slideshow_move = true;
			x = x / 31 * (int) config.imgmvspd / 2;
			y = y / 31 * (int) config.imgmvspd / 2;
			curtop += y;

			if (curtop + imgh > height_rotated)
				curtop = (int) height_rotated - imgh;

			if (curtop < 0)
				curtop = 0;

			curleft += x;

			if (curleft + PSP_SCREEN_WIDTH > width_rotated)
				curleft = (int) width_rotated - PSP_SCREEN_WIDTH;

			if (curleft < 0)
				curleft = 0;

			thumb = (config.thumb == conf_thumb_scroll);
			img_needrp = (thumb || orgtop != curtop || orgleft != curleft);
		}
	}
#endif

	if (key == 0)
		goto next;

	if (!slideshow || (key != CTRL_FORWARD && key != 0))
		secticks = 0;

	if (key == (PSP_CTRL_SELECT | PSP_CTRL_START)) {
		return exit_confirm();
	} else if (key == PSP_CTRL_SELECT) {
		bool lastbicubic = config.bicubic;

		img_needrp = true;

		if (scene_options(selidx)) {
			imgreading = false;
			reset_image_ptr();

			return *selidx;
		}

		if (lastbicubic != config.bicubic)
			img_needrc = true;

		if (config.imginfobar)
			imgh = PSP_SCREEN_HEIGHT - DISP_FONTSIZE;
		else
			imgh = PSP_SCREEN_HEIGHT;

	} else if (key == PSP_CTRL_START) {
		scene_mp3bar();
		img_needrp = true;
	} else if (key == config.imgkey[1] || key == config.imgkey2[1]
			   || key == CTRL_FORWARD) {
		bool should_exit = false;

		if (config.imgpaging == conf_imgpaging_updown ||
			config.imgpaging == conf_imgpaging_leftright)
			xrKernelDelayThread(200000);

		if (!image_paging(true, config.imgpaging))
			goto next;

		next_image(selidx, &should_exit);

		if (should_exit) {
			return *selidx;
		}
	} else if (key == config.imgkey[0] || key == config.imgkey2[0]
			   || key == CTRL_BACK) {
		if (config.imgpaging == conf_imgpaging_updown ||
			config.imgpaging == conf_imgpaging_leftright)
			xrKernelDelayThread(200000);

		if (!image_paging(false, config.imgpaging))
			goto next;

		prev_image(selidx);
	} else if (key == config.imgkey[2] || key == config.imgkey2[2]) {
		ctrl_waitrelease();

		if (config.fit == conf_fit_custom)
			config.fit = conf_fit_none;
		else
			config.fit++;

		img_needrc = img_needrp = true;
	} else if (key == config.imgkey[10] || key == config.imgkey2[10]) {
		config.bicubic = !config.bicubic;
		img_needrc = img_needrp = true;
	} else if (key == config.imgkey[11] || key == config.imgkey2[11]) {
		if (!slideshow) {
			slideshow = true;
			lasttime = time(NULL);
			ctrl_waitrelease();
		} else {
			slideshow = false;
			win_msg(_("幻灯片播放已经停止!"), COLOR_WHITE,
					COLOR_WHITE, config.msgbcolor);
			ctrl_waitrelease();
		}
	} else if (key == config.imgkey[7] || key == config.imgkey2[7]) {
		SceCtrlData ctl;
		int t = 0;

		config.imginfobar = !config.imginfobar;

		if (config.imginfobar)
			imgh = PSP_SCREEN_HEIGHT - DISP_FONTSIZE;
		else
			imgh = PSP_SCREEN_HEIGHT;

		if (height_rotated > imgh && curtop > height_rotated - imgh)
			curtop = height_rotated - imgh;

		img_needrc = (config.fit == conf_fit_height);
		img_needrp = true;

		do {
			xrCtrlReadBufferPositive(&ctl, 1);
			xrKernelDelayThread(10000);
			t += 10000;
		} while (ctl.Buttons != 0 && t <= 500000);
	} else if (key == config.imgkey[9] || key == config.imgkey2[9]
			   || key == CTRL_PLAYPAUSE) {
		if (slideshow) {
			slideshow = false;
			win_msg(_("幻灯片播放已经停止!"), COLOR_WHITE,
					COLOR_WHITE, config.msgbcolor);
			ctrl_waitrelease();
		} else {
			imgreading = false;
			reset_image_ptr();

			return *selidx;
		}
	} else if (key == config.imgkey[8] || key == config.imgkey2[8]) {
		if (!slideshow && !showinfo) {
			img_needrp = true;
			showinfo = true;
		}
	} else if (key == config.imgkey[5] || key == config.imgkey2[5]) {
		if (config.rotate == conf_rotate_0)
			config.rotate = conf_rotate_270;
		else
			config.rotate--;

		ctrl_waitreleasekey(key);
		img_needrc = img_needrp = true;
	} else if (key == config.imgkey[6] || key == config.imgkey2[6]) {
		if (config.rotate == conf_rotate_270)
			config.rotate = conf_rotate_0;
		else
			config.rotate++;

		ctrl_waitreleasekey(key);
		img_needrc = img_needrp = true;
	} else if (key == config.imgkey[3] || key == config.imgkey2[3]) {
		if (config.scale > 200)
			config.scale -= 50;
		else if (config.scale > 10)
			config.scale -= 5;
		else
			goto next;

		config.fit = conf_fit_custom;
		img_needrc = img_needrp = true;
		ctrl_waitreleasekey(key);
	} else if (key == config.imgkey[4] || key == config.imgkey2[4]) {
		if (config.scale < 200)
			config.scale += 5;
		else if (config.scale < 1000)
			config.scale += 50;
		else
			goto next;

		config.fit = conf_fit_custom;
		img_needrc = img_needrp = true;
		ctrl_waitreleasekey(key);
	} else if (key &
			   (config.imgkey[12] | config.imgkey[13] | config.
				imgkey[14] | config.imgkey[15] | config.imgkey2[12] | config.
				imgkey2[13] | config.imgkey2[14] | config.imgkey2[15])
			   && !(key &
					~(config.imgkey[12] | config.imgkey[13] | config.
					  imgkey[14] | config.imgkey[15] | config.
					  imgkey2[12] | config.imgkey2[13] | config.
					  imgkey2[14] | config.imgkey2[15]
					))) {
		slideshow_move = true;
		image_move(key);
	} else
		img_needrf = img_needrc = false;

  next:
	return -1;
}