add SpeedScroll

This commit is contained in:
cuu 2019-01-28 23:13:05 +08:00
parent f9a74d6579
commit 2e5ea437cd
5 changed files with 64 additions and 24 deletions

View File

@ -3,7 +3,7 @@
import os
import pygame
import glob
import time
from libs.roundrects import aa_round_rect
## local UI import
@ -255,30 +255,33 @@ class FavListPage(Page):
if len(self._MyList) == 0:
return
self._PsIndex -= 1
tmp = self._PsIndex
self._PsIndex -= self._ScrollStep
if self._PsIndex < 0:
self._PsIndex = 0
dy = tmp - self._PsIndex
cur_li = self._MyList[self._PsIndex]
if cur_li._PosY < 0:
for i in range(0, len(self._MyList)):
self._MyList[i]._PosY += self._MyList[i]._Height
self._Scrolled += 1
self._MyList[i]._PosY += self._MyList[i]._Height*dy
self._Scrolled +=dy
def ScrollDown(self):
if len(self._MyList) == 0:
return
self._PsIndex +=1
tmp = self._PsIndex
self._PsIndex +=self._ScrollStep
if self._PsIndex >= len(self._MyList):
self._PsIndex = len(self._MyList) -1
dy = self._PsIndex - tmp
cur_li = self._MyList[self._PsIndex]
if cur_li._PosY +cur_li._Height > self._Height:
for i in range(0,len(self._MyList)):
self._MyList[i]._PosY -= self._MyList[i]._Height
self._Scrolled -=1
self._MyList[i]._PosY -= self._MyList[i]._Height*dy
self._Scrolled -= dy
def SyncScroll(self):
##
if self._Scrolled == 0:
@ -374,6 +377,19 @@ class FavListPage(Page):
self._Screen.Draw()
self._Screen.SwapAndShow()
def SpeedScroll(self, thekey):
if self._Screen._LastKey == thekey:
self._ScrollStep+=1
if self._ScrollStep >=5:
self._ScrollStep = 5
else:
self._ScrollStep = 1
cur_time = time.time()
if cur_time - self._Screen._LastKeyDown > 0.3:
self._ScrollStep = 1
def KeyDown(self,event):
if event.key == CurKeys["Menu"] or event.key == CurKeys["Left"]:
@ -383,10 +399,12 @@ class FavListPage(Page):
if event.key == CurKeys["Up"]:
self.SpeedScroll(event.key)
self.ScrollUp()
self._Screen.Draw()
self._Screen.SwapAndShow()
if event.key == CurKeys["Down"]:
self.SpeedScroll(event.key)
self.ScrollDown()
self._Screen.Draw()
self._Screen.SwapAndShow()

View File

@ -9,7 +9,7 @@ import shutil
import gobject
import validators
#from pySmartDL import SmartDL
import time
from libs.roundrects import aa_round_rect
@ -289,28 +289,32 @@ class RomListPage(Page):
if len(self._MyList) == 0:
return
self._PsIndex -= 1
tmp = self._PsIndex
self._PsIndex -= self._ScrollStep
if self._PsIndex < 0:
self._PsIndex = 0
dy = tmp - self._PsIndex
cur_li = self._MyList[self._PsIndex]
if cur_li._PosY < 0:
for i in range(0, len(self._MyList)):
self._MyList[i]._PosY += self._MyList[i]._Height
self._Scrolled +=1
self._MyList[i]._PosY += self._MyList[i]._Height*dy
self._Scrolled +=dy
def ScrollDown(self):
if len(self._MyList) == 0:
return
self._PsIndex +=1
tmp = self._PsIndex
self._PsIndex +=self._ScrollStep
if self._PsIndex >= len(self._MyList):
self._PsIndex = len(self._MyList) -1
dy = self._PsIndex - tmp
cur_li = self._MyList[self._PsIndex]
if cur_li._PosY +cur_li._Height > self._Height:
for i in range(0,len(self._MyList)):
self._MyList[i]._PosY -= self._MyList[i]._Height
self._Scrolled -= 1
self._MyList[i]._PosY -= self._MyList[i]._Height*dy
self._Scrolled -= dy
def SyncScroll(self):
##
@ -409,6 +413,19 @@ class RomListPage(Page):
self._Screen.Draw()
self._Screen.SwapAndShow()
def SpeedScroll(self, thekey):
if self._Screen._LastKey == thekey:
self._ScrollStep+=1
if self._ScrollStep >=5:
self._ScrollStep = 5
else:
self._ScrollStep = 1
cur_time = time.time()
if cur_time - self._Screen._LastKeyDown > 0.3:
self._ScrollStep = 1
def KeyDown(self,event):
if event.key == CurKeys["Menu"] :
@ -423,11 +440,13 @@ class RomListPage(Page):
self._Screen.SwapAndShow()
if event.key == CurKeys["Up"]:
self.SpeedScroll(event.key)
self.ScrollUp()
self._Screen.Draw()
self._Screen.SwapAndShow()
if event.key == CurKeys["Down"]:
self.SpeedScroll(event.key)
self.ScrollDown()
self._Screen.Draw()
self._Screen.SwapAndShow()

View File

@ -146,6 +146,7 @@ class MainScreen(Widget):
_CounterScreen = None
_LastKey = -1
_LastKeyDown = -1
def __init__(self):
self._Pages = []

View File

@ -100,6 +100,7 @@ class Page(Widget):
_EasingDur = 30
_Padding = pygame.Rect(0,0,0,0)# x,y,w,h
_Margin = pygame.Rect(0,0,0,0)
_ScrollStep = 1
def __init__(self):
self._Icons = []

View File

@ -416,6 +416,7 @@ def event_process(event,main_screen):
if callable( key_down_cb ):
main_screen.KeyDown(event)
main_screen._LastKeyDown = everytime_keydown
return
def gobject_pygame_event_poll_timer(main_screen):