Skip to content

Commit ff0490f

Browse files
committed
Implemented navigation to pages based on pagination dot clicks.
1 parent deaf0db commit ff0490f

2 files changed

Lines changed: 41 additions & 3 deletions

File tree

core/src/main/java/emu/joric/HomeScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ private void showProgramPage(AppConfigItem appConfigItem, boolean skipScroll) {
865865
showProgramPage(getProgramIndex(appConfigItem), skipScroll);
866866
}
867867

868-
private void showProgramPage(int programIndex, boolean skipScroll) {
868+
public void showProgramPage(int programIndex, boolean skipScroll) {
869869
// Apply scroll X without animating, i.e. move immediately to the page.
870870
Stage currentStage = viewportManager.isPortrait()? portraitStage : landscapeStage;
871871
PagedScrollPane pagedScrollPane = (PagedScrollPane)

core/src/main/java/emu/joric/ui/PaginationWidget.java

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,57 @@ public PaginationWidget(HomeScreen homeScreen, float width) {
5757
addListener(new ClickListener(-1) {
5858
@Override
5959
public void clicked(InputEvent event, float x, float y) {
60-
//System.out.println("clicked: " + x + ", y: " + y);
6160
if (y < PAGINATION_BAR_HEIGHT) {
6261
if (x < ICON_SIZE) {
6362
homeScreen.keyUp(Keys.PAGE_UP);
6463
}
65-
if (x > (width - ICON_SIZE)) {
64+
else if (x > (width - ICON_SIZE)) {
6665
homeScreen.keyUp(Keys.PAGE_DOWN);
6766
}
67+
else {
68+
PagedScrollPane pagedScrollPane = homeScreen.getPagedScrollPane();
69+
int clickedPageNum = getPageNumberForClick(x, y);
70+
if (clickedPageNum > -1) {
71+
if (clickedPageNum != pagedScrollPane.getCurrentPageNumber()) {
72+
if (clickedPageNum == 0) {
73+
homeScreen.keyUp(Keys.HOME);
74+
} else {
75+
int programsPerPage = pagedScrollPane.getProgramsPerPage();
76+
int programIndex = (programsPerPage * (clickedPageNum - 1));
77+
homeScreen.showProgramPage(programIndex, false);
78+
}
79+
}
80+
}
81+
}
6882
}
6983
}
7084
});
7185
}
7286

87+
public int getPageNumberForClick(float x, float y) {
88+
int clickedPageNum = -1;
89+
PagedScrollPane pagedScrollPane = homeScreen.getPagedScrollPane();
90+
if (pagedScrollPane != null) {
91+
int numOfPages = pagedScrollPane.getNumOfPages();
92+
if (numOfPages > 0) {
93+
int gapBetweenCircles = Math.min((width - (PAGINATION_BAR_HEIGHT * 10)) / numOfPages, 20);
94+
int totalCirclesWidth = (numOfPages * (CIRCLE_DIAMETER + gapBetweenCircles)) - gapBetweenCircles;
95+
for (int pageNum=0; pageNum < numOfPages; pageNum++) {
96+
float circleX =
97+
((width / 2) - (totalCirclesWidth / 2)) + CIRCLE_RADIUS +
98+
(pageNum * (CIRCLE_DIAMETER + gapBetweenCircles));
99+
float circleY = PAGINATION_BAR_HEIGHT / 2;
100+
float dx = x - circleX;
101+
float dy = y - circleY;
102+
if (Math.sqrt((dx * dx) + (dy * dy)) <= (CIRCLE_RADIUS + (gapBetweenCircles / 2))) {
103+
clickedPageNum = pageNum;
104+
}
105+
}
106+
}
107+
}
108+
return clickedPageNum;
109+
}
110+
73111
public void draw(Batch batch, float parentAlpha) {
74112
validate();
75113

0 commit comments

Comments
 (0)