mirror of
https://github.com/BernardoGiordano/Checkpoint
synced 2024-12-01 04:49:10 +00:00
finish touch hid rewrite for switch + bonuses
make empty destructors default, same effect. do we even need to define them? Fix uses platform dependent header files defining what gets passed to the different update functions All "fix me"s eradicated needs testing to ensure nothing broke
This commit is contained in:
parent
85fa31e842
commit
98f020f7fe
38 changed files with 238 additions and 194 deletions
|
@ -45,7 +45,7 @@ public:
|
||||||
~CheatManagerOverlay(void);
|
~CheatManagerOverlay(void);
|
||||||
void drawTop(void) const override;
|
void drawTop(void) const override;
|
||||||
void drawBottom(void) const override;
|
void drawBottom(void) const override;
|
||||||
void update(touchPosition* touch) override;
|
void update(TouchScreen* touch) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void save(const std::string& key, Scrollable* s);
|
void save(const std::string& key, Scrollable* s);
|
||||||
|
|
|
@ -43,7 +43,7 @@ public:
|
||||||
~ErrorOverlay(void);
|
~ErrorOverlay(void);
|
||||||
void drawTop(void) const override;
|
void drawTop(void) const override;
|
||||||
void drawBottom(void) const override;
|
void drawBottom(void) const override;
|
||||||
void update(touchPosition* touch) override;
|
void update(TouchScreen* touch) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u32 posx, posy;
|
u32 posx, posy;
|
||||||
|
|
|
@ -43,7 +43,7 @@ public:
|
||||||
~InfoOverlay(void);
|
~InfoOverlay(void);
|
||||||
void drawTop(void) const override;
|
void drawTop(void) const override;
|
||||||
void drawBottom(void) const override;
|
void drawBottom(void) const override;
|
||||||
void update(touchPosition* touch) override;
|
void update(TouchScreen* touch) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u32 posx, posy;
|
u32 posx, posy;
|
||||||
|
|
|
@ -46,7 +46,7 @@ public:
|
||||||
~MainScreen(void);
|
~MainScreen(void);
|
||||||
void drawTop(void) const override;
|
void drawTop(void) const override;
|
||||||
void drawBottom(void) const override;
|
void drawBottom(void) const override;
|
||||||
void update(touchPosition* touch) override;
|
void update(TouchScreen* touch) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int selectorX(size_t i) const;
|
int selectorX(size_t i) const;
|
||||||
|
|
34
3ds/include/TouchScreen.hpp
Normal file
34
3ds/include/TouchScreen.hpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Checkpoint
|
||||||
|
* Copyright (C) 2017-2019 Bernardo Giordano, FlagBrew
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
|
||||||
|
* * Requiring preservation of specified reasonable legal notices or
|
||||||
|
* author attributions in that material or in the Appropriate Legal
|
||||||
|
* Notices displayed by works containing it.
|
||||||
|
* * Prohibiting misrepresentation of the origin of that material,
|
||||||
|
* or requiring that modified versions of such material be marked in
|
||||||
|
* reasonable ways as different from the original version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TOUCHSCREEN_HPP
|
||||||
|
#define TOUCHSCREEN_HPP
|
||||||
|
|
||||||
|
#include <3ds.h>
|
||||||
|
|
||||||
|
using TouchScreen = touchPosition;
|
||||||
|
|
||||||
|
#endif
|
|
@ -44,7 +44,7 @@ public:
|
||||||
~YesNoOverlay(void);
|
~YesNoOverlay(void);
|
||||||
void drawTop(void) const override;
|
void drawTop(void) const override;
|
||||||
void drawBottom(void) const override;
|
void drawBottom(void) const override;
|
||||||
void update(touchPosition* touch) override;
|
void update(TouchScreen* touch) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u32 posx, posy;
|
u32 posx, posy;
|
||||||
|
|
|
@ -52,7 +52,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CheatManager(void);
|
CheatManager(void);
|
||||||
~CheatManager(void){};
|
~CheatManager() = default;
|
||||||
|
|
||||||
CheatManager(CheatManager const&) = delete;
|
CheatManager(CheatManager const&) = delete;
|
||||||
void operator=(CheatManager const&) = delete;
|
void operator=(CheatManager const&) = delete;
|
||||||
|
|
|
@ -53,7 +53,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Configuration(void);
|
Configuration(void);
|
||||||
~Configuration(void){};
|
~Configuration() = default;
|
||||||
|
|
||||||
void store(void);
|
void store(void);
|
||||||
nlohmann::json loadJson(const std::string& path);
|
nlohmann::json loadJson(const std::string& path);
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
class Directory {
|
class Directory {
|
||||||
public:
|
public:
|
||||||
Directory(FS_Archive archive, const std::u16string& root);
|
Directory(FS_Archive archive, const std::u16string& root);
|
||||||
~Directory(void){};
|
~Directory() = default;
|
||||||
|
|
||||||
Result error(void);
|
Result error(void);
|
||||||
std::u16string entry(size_t index);
|
std::u16string entry(size_t index);
|
||||||
|
|
|
@ -34,7 +34,7 @@ class FSStream {
|
||||||
public:
|
public:
|
||||||
FSStream(FS_Archive archive, const std::u16string& path, u32 flags);
|
FSStream(FS_Archive archive, const std::u16string& path, u32 flags);
|
||||||
FSStream(FS_Archive archive, const std::u16string& path, u32 flags, u32 size);
|
FSStream(FS_Archive archive, const std::u16string& path, u32 flags, u32 size);
|
||||||
~FSStream(void){};
|
~FSStream() = default;
|
||||||
|
|
||||||
Result close(void);
|
Result close(void);
|
||||||
bool eof(void);
|
bool eof(void);
|
||||||
|
|
|
@ -90,7 +90,7 @@ void CheatManagerOverlay::drawBottom(void) const
|
||||||
C2D_DrawRectSolid(0, 0, 0.5f, 320, 240, COLOR_OVERLAY);
|
C2D_DrawRectSolid(0, 0, 0.5f, 320, 240, COLOR_OVERLAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheatManagerOverlay::update(touchPosition* touch)
|
void CheatManagerOverlay::update(TouchScreen* touch)
|
||||||
{
|
{
|
||||||
if (hidKeysDown() & KEY_A) {
|
if (hidKeysDown() & KEY_A) {
|
||||||
std::string cellName = scrollable->cellName(scrollable->index());
|
std::string cellName = scrollable->cellName(scrollable->index());
|
||||||
|
|
|
@ -61,7 +61,7 @@ void ErrorOverlay::drawBottom(void) const
|
||||||
Gui::drawPulsingOutline(42, 162, 236, 36, 2, COLOR_RED);
|
Gui::drawPulsingOutline(42, 162, 236, 36, 2, COLOR_RED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ErrorOverlay::update(touchPosition* touch)
|
void ErrorOverlay::update(TouchScreen* touch)
|
||||||
{
|
{
|
||||||
if (button->released() || (hidKeysDown() & KEY_A) || (hidKeysDown() & KEY_B)) {
|
if (button->released() || (hidKeysDown() & KEY_A) || (hidKeysDown() & KEY_B)) {
|
||||||
screen.removeOverlay();
|
screen.removeOverlay();
|
||||||
|
|
|
@ -57,7 +57,7 @@ void InfoOverlay::drawBottom(void) const
|
||||||
Gui::drawPulsingOutline(42, 162, 236, 36, 2, COLOR_BLUE);
|
Gui::drawPulsingOutline(42, 162, 236, 36, 2, COLOR_BLUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InfoOverlay::update(touchPosition* touch)
|
void InfoOverlay::update(TouchScreen* touch)
|
||||||
{
|
{
|
||||||
if (button->released() || (hidKeysDown() & KEY_A) || (hidKeysDown() & KEY_B)) {
|
if (button->released() || (hidKeysDown() & KEY_A) || (hidKeysDown() & KEY_B)) {
|
||||||
screen.removeOverlay();
|
screen.removeOverlay();
|
||||||
|
|
|
@ -264,7 +264,7 @@ void MainScreen::drawBottom(void) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainScreen::update(touchPosition* touch)
|
void MainScreen::update(TouchScreen* touch)
|
||||||
{
|
{
|
||||||
updateSelector();
|
updateSelector();
|
||||||
handleEvents(touch);
|
handleEvents(touch);
|
||||||
|
|
|
@ -72,7 +72,7 @@ void YesNoOverlay::drawBottom(void) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void YesNoOverlay::update(touchPosition* touch)
|
void YesNoOverlay::update(TouchScreen* touch)
|
||||||
{
|
{
|
||||||
hid.update(2);
|
hid.update(2);
|
||||||
|
|
||||||
|
|
|
@ -29,18 +29,12 @@
|
||||||
|
|
||||||
#include "Screen.hpp"
|
#include "Screen.hpp"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
|
||||||
#if defined(_3DS)
|
|
||||||
#include <3ds.h>
|
|
||||||
#elif defined(__SWITCH__)
|
|
||||||
#include <switch.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class Overlay {
|
class Overlay {
|
||||||
public:
|
public:
|
||||||
Overlay(Screen& screen) : screen(screen), me(screen.currentOverlay) {}
|
Overlay(Screen& screen) : screen(screen), me(screen.currentOverlay) {}
|
||||||
virtual ~Overlay() {}
|
virtual ~Overlay() = default;
|
||||||
virtual void update(PadState*) = 0;
|
virtual void update(TouchScreen*) = 0;
|
||||||
#if defined(_3DS)
|
#if defined(_3DS)
|
||||||
virtual void drawTop() const = 0;
|
virtual void drawTop() const = 0;
|
||||||
virtual void drawBottom() const = 0;
|
virtual void drawBottom() const = 0;
|
||||||
|
|
|
@ -44,17 +44,6 @@ void Screen::doDrawBottom() const
|
||||||
currentOverlay->drawBottom();
|
currentOverlay->drawBottom();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::doUpdate(touchPosition* touch)
|
|
||||||
{
|
|
||||||
if (currentOverlay) {
|
|
||||||
currentOverlay->update(touch);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
update(touch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(__SWITCH__)
|
#elif defined(__SWITCH__)
|
||||||
|
|
||||||
void Screen::doDraw() const
|
void Screen::doDraw() const
|
||||||
|
@ -65,14 +54,14 @@ void Screen::doDraw() const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::doUpdate(PadState* pad)
|
#endif
|
||||||
|
|
||||||
|
void Screen::doUpdate(TouchScreen* touch)
|
||||||
{
|
{
|
||||||
if (currentOverlay) {
|
if (currentOverlay) {
|
||||||
currentOverlay->update(pad);
|
currentOverlay->update(touch);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
update(pad);
|
update(touch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
|
@ -27,11 +27,7 @@
|
||||||
#ifndef SCREEN_HPP
|
#ifndef SCREEN_HPP
|
||||||
#define SCREEN_HPP
|
#define SCREEN_HPP
|
||||||
|
|
||||||
#if defined(_3DS)
|
#include "TouchScreen.hpp"
|
||||||
#include <3ds.h>
|
|
||||||
#elif defined(__SWITCH__)
|
|
||||||
#include <switch.h>
|
|
||||||
#endif
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
class Overlay;
|
class Overlay;
|
||||||
|
@ -40,31 +36,27 @@ class Screen {
|
||||||
friend class Overlay;
|
friend class Overlay;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Screen(void) {}
|
virtual ~Screen() = default;
|
||||||
virtual ~Screen(void) {}
|
|
||||||
// Call draw, then currentOverlay->draw if it exists
|
// Call draw, then currentOverlay->draw if it exists
|
||||||
#if defined(_3DS)
|
#if defined(_3DS)
|
||||||
virtual void doDrawTop(void) const final;
|
void doDrawTop(void) const;
|
||||||
virtual void doDrawBottom(void) const final;
|
void doDrawBottom(void) const;
|
||||||
virtual void drawTop(void) const = 0;
|
virtual void drawTop(void) const = 0;
|
||||||
virtual void drawBottom(void) const = 0;
|
virtual void drawBottom(void) const = 0;
|
||||||
// Call currentOverlay->update if it exists, and update if it doesn't
|
|
||||||
virtual void doUpdate(touchPosition*) final;
|
|
||||||
virtual void update(touchPosition*) = 0;
|
|
||||||
#elif defined(__SWITCH__)
|
#elif defined(__SWITCH__)
|
||||||
virtual void doDraw() const final;
|
void doDraw() const;
|
||||||
virtual void draw() const = 0;
|
virtual void draw() const = 0;
|
||||||
// Call currentOverlay->update if it exists, and update if it doesn't
|
|
||||||
virtual void doUpdate(PadState*) final;
|
|
||||||
virtual void update(PadState*) = 0;
|
|
||||||
#endif
|
#endif
|
||||||
void removeOverlay() { currentOverlay = nullptr; }
|
// Call currentOverlay->update if it exists, and update if it doesn't
|
||||||
|
void doUpdate(TouchScreen*);
|
||||||
|
virtual void update(TouchScreen*) = 0;
|
||||||
|
void removeOverlay() { currentOverlay.reset(); }
|
||||||
void setOverlay(std::shared_ptr<Overlay>& overlay) { currentOverlay = overlay; }
|
void setOverlay(std::shared_ptr<Overlay>& overlay) { currentOverlay = overlay; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// No point in restricting this to only being editable during update, especially since it's drawn afterwards. Allows setting it before the first
|
// No point in restricting this to only being editable during update, especially since it's drawn afterwards. Allows setting it before the first
|
||||||
// draw loop is done
|
// draw loop is done
|
||||||
mutable std::shared_ptr<Overlay> currentOverlay = nullptr;
|
mutable std::shared_ptr<Overlay> currentOverlay;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -46,7 +46,7 @@ public:
|
||||||
CheatManagerOverlay(Screen& screen, const std::string& mtext);
|
CheatManagerOverlay(Screen& screen, const std::string& mtext);
|
||||||
~CheatManagerOverlay(void) {}
|
~CheatManagerOverlay(void) {}
|
||||||
void draw(void) const override;
|
void draw(void) const override;
|
||||||
void update(PadState*) override;
|
void update(TouchScreen*) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void save(const std::string& key, Scrollable* s);
|
void save(const std::string& key, Scrollable* s);
|
||||||
|
|
|
@ -41,7 +41,7 @@ public:
|
||||||
ErrorOverlay(Screen& screen, Result res, const std::string& mtext);
|
ErrorOverlay(Screen& screen, Result res, const std::string& mtext);
|
||||||
~ErrorOverlay(void) {}
|
~ErrorOverlay(void) {}
|
||||||
void draw(void) const override;
|
void draw(void) const override;
|
||||||
void update(PadState*) override;
|
void update(TouchScreen*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u32 textw, texth;
|
u32 textw, texth;
|
||||||
|
|
|
@ -41,7 +41,7 @@ public:
|
||||||
InfoOverlay(Screen& screen, const std::string& mtext);
|
InfoOverlay(Screen& screen, const std::string& mtext);
|
||||||
~InfoOverlay(void) {}
|
~InfoOverlay(void) {}
|
||||||
void draw(void) const override;
|
void draw(void) const override;
|
||||||
void update(PadState* touch) override;
|
void update(TouchScreen* touch) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u32 textw, texth;
|
u32 textw, texth;
|
||||||
|
|
|
@ -50,7 +50,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
KeyboardManager(void);
|
KeyboardManager(void);
|
||||||
virtual ~KeyboardManager(void){};
|
virtual ~KeyboardManager() = default;
|
||||||
|
|
||||||
Result res;
|
Result res;
|
||||||
bool systemKeyboardAvailable;
|
bool systemKeyboardAvailable;
|
||||||
|
|
|
@ -48,16 +48,15 @@ class Scrollable;
|
||||||
|
|
||||||
class MainScreen : public Screen {
|
class MainScreen : public Screen {
|
||||||
public:
|
public:
|
||||||
MainScreen(void);
|
MainScreen(TouchScreen*);
|
||||||
MainScreen(PadState*);
|
|
||||||
void draw(void) const override;
|
void draw(void) const override;
|
||||||
void update(PadState* pad) override;
|
void update(TouchScreen* pad) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int selectorX(size_t i) const;
|
int selectorX(size_t i) const;
|
||||||
int selectorY(size_t i) const;
|
int selectorY(size_t i) const;
|
||||||
void updateSelector(PadState* pad);
|
void updateSelector(TouchScreen* pad);
|
||||||
void handleEvents(PadState* pad);
|
void handleEvents(TouchScreen* pad);
|
||||||
std::string nameFromCell(size_t index) const;
|
std::string nameFromCell(size_t index) const;
|
||||||
void entryType(entryType_t type);
|
void entryType(entryType_t type);
|
||||||
size_t index(entryType_t type) const;
|
size_t index(entryType_t type) const;
|
||||||
|
@ -72,6 +71,7 @@ private:
|
||||||
entryType_t type;
|
entryType_t type;
|
||||||
int selectionTimer;
|
int selectionTimer;
|
||||||
bool pksmBridge;
|
bool pksmBridge;
|
||||||
|
bool wantInstructions;
|
||||||
Hid<HidDirection::HORIZONTAL, HidDirection::HORIZONTAL> hid;
|
Hid<HidDirection::HORIZONTAL, HidDirection::HORIZONTAL> hid;
|
||||||
std::unique_ptr<Scrollable> backupList;
|
std::unique_ptr<Scrollable> backupList;
|
||||||
std::unique_ptr<Clickable> buttonCheats, buttonBackup, buttonRestore;
|
std::unique_ptr<Clickable> buttonCheats, buttonBackup, buttonRestore;
|
||||||
|
|
34
switch/include/TouchScreen.hpp
Normal file
34
switch/include/TouchScreen.hpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* This file is part of Checkpoint
|
||||||
|
* Copyright (C) 2017-2019 Bernardo Giordano, FlagBrew
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
|
||||||
|
* * Requiring preservation of specified reasonable legal notices or
|
||||||
|
* author attributions in that material or in the Appropriate Legal
|
||||||
|
* Notices displayed by works containing it.
|
||||||
|
* * Prohibiting misrepresentation of the origin of that material,
|
||||||
|
* or requiring that modified versions of such material be marked in
|
||||||
|
* reasonable ways as different from the original version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TOUCHSCREEN_HPP
|
||||||
|
#define TOUCHSCREEN_HPP
|
||||||
|
|
||||||
|
#include <switch.h>
|
||||||
|
|
||||||
|
struct TouchScreen : public HidTouchScreenState, public PadState { };
|
||||||
|
|
||||||
|
#endif
|
|
@ -43,7 +43,7 @@ public:
|
||||||
YesNoOverlay(Screen& screen, const std::string& mtext, const std::function<void()>& callbackYes, const std::function<void()>& callbackNo);
|
YesNoOverlay(Screen& screen, const std::string& mtext, const std::function<void()>& callbackYes, const std::function<void()>& callbackNo);
|
||||||
~YesNoOverlay(void) {}
|
~YesNoOverlay(void) {}
|
||||||
void draw(void) const override;
|
void draw(void) const override;
|
||||||
void update(PadState*) override;
|
void update(TouchScreen*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u32 textw, texth;
|
u32 textw, texth;
|
||||||
|
|
|
@ -54,7 +54,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CheatManager(void);
|
CheatManager(void);
|
||||||
~CheatManager(void){};
|
~CheatManager() = default;
|
||||||
|
|
||||||
CheatManager(CheatManager const&) = delete;
|
CheatManager(CheatManager const&) = delete;
|
||||||
void operator=(CheatManager const&) = delete;
|
void operator=(CheatManager const&) = delete;
|
||||||
|
|
|
@ -39,11 +39,11 @@ public:
|
||||||
: IClickable(x, y, w, h, colorBg, colorText, message, centered)
|
: IClickable(x, y, w, h, colorBg, colorText, message, centered)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
virtual ~Clickable(void){};
|
virtual ~Clickable() = default;
|
||||||
|
|
||||||
void draw(float font, SDL_Color overlay) override;
|
void draw(float font, SDL_Color overlay) override;
|
||||||
bool held(void) override;
|
bool held() override;
|
||||||
bool released(void) override;
|
bool released() override;
|
||||||
void drawOutline(SDL_Color color) override;
|
void drawOutline(SDL_Color color) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ struct DirectoryEntry {
|
||||||
class Directory {
|
class Directory {
|
||||||
public:
|
public:
|
||||||
Directory(const std::string& root);
|
Directory(const std::string& root);
|
||||||
~Directory(void){};
|
~Directory() = default;
|
||||||
|
|
||||||
Result error(void);
|
Result error(void);
|
||||||
std::string entry(size_t index);
|
std::string entry(size_t index);
|
||||||
|
|
|
@ -49,15 +49,15 @@ private:
|
||||||
bool upDown() const override { return padGetButtonsDown(pad) & HidNpadButton_Up; }
|
bool upDown() const override { return padGetButtonsDown(pad) & HidNpadButton_Up; }
|
||||||
bool leftDown() const override { return padGetButtonsDown(pad) & HidNpadButton_Left; }
|
bool leftDown() const override { return padGetButtonsDown(pad) & HidNpadButton_Left; }
|
||||||
bool rightDown() const override { return padGetButtonsDown(pad) & HidNpadButton_Right; }
|
bool rightDown() const override { return padGetButtonsDown(pad) & HidNpadButton_Right; }
|
||||||
// TODO: fix me
|
bool leftTriggerDown() const override { return padGetButtonsDown(pad) & HidNpadButton_L; }
|
||||||
bool leftTriggerDown() const override { return false; }
|
bool rightTriggerDown() const override { return padGetButtonsDown(pad) & HidNpadButton_R; }
|
||||||
bool rightTriggerDown() const override { return false; }
|
|
||||||
bool downHeld() const override { return false; }
|
bool downHeld() const override { return padGetButtons(pad) & HidNpadButton_Down; }
|
||||||
bool upHeld() const override { return false; }
|
bool upHeld() const override { return padGetButtons(pad) & HidNpadButton_Up; }
|
||||||
bool leftHeld() const override { return false; }
|
bool leftHeld() const override { return padGetButtons(pad) & HidNpadButton_Left; }
|
||||||
bool rightHeld() const override { return false; }
|
bool rightHeld() const override { return padGetButtons(pad) & HidNpadButton_Right; }
|
||||||
bool leftTriggerHeld() const override { return false; }
|
bool leftTriggerHeld() const override { return padGetButtons(pad) & HidNpadButton_L; }
|
||||||
bool rightTriggerHeld() const override { return false; }
|
bool rightTriggerHeld() const override { return padGetButtons(pad) & HidNpadButton_R; }
|
||||||
u64 tick() const override { return armGetSystemTick(); }
|
u64 tick() const override { return armGetSystemTick(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
class Title {
|
class Title {
|
||||||
public:
|
public:
|
||||||
void init(u8 saveDataType, u64 titleid, AccountUid userID, const std::string& name, const std::string& author);
|
void init(u8 saveDataType, u64 titleid, AccountUid userID, const std::string& name, const std::string& author);
|
||||||
~Title(void){};
|
~Title() = default;
|
||||||
|
|
||||||
std::string author(void);
|
std::string author(void);
|
||||||
std::pair<std::string, std::string> displayName(void);
|
std::pair<std::string, std::string> displayName(void);
|
||||||
|
|
|
@ -83,7 +83,7 @@ void CheatManagerOverlay::draw(void) const
|
||||||
20, 94, ceilf(664 + (32 - height) / 2), COLOR_WHITE, multiSelected ? "\ue003 to deselect all cheats" : "\ue003 to select all cheats");
|
20, 94, ceilf(664 + (32 - height) / 2), COLOR_WHITE, multiSelected ? "\ue003 to deselect all cheats" : "\ue003 to select all cheats");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheatManagerOverlay::update(PadState* pad)
|
void CheatManagerOverlay::update(TouchScreen* pad)
|
||||||
{
|
{
|
||||||
u64 kDown = padGetButtonsDown(pad);
|
u64 kDown = padGetButtonsDown(pad);
|
||||||
if (kDown & HidNpadButton_A) {
|
if (kDown & HidNpadButton_A) {
|
||||||
|
|
|
@ -45,7 +45,7 @@ void ErrorOverlay::draw(void) const
|
||||||
drawPulsingOutline(322, 462, 636, 56, 4, COLOR_RED);
|
drawPulsingOutline(322, 462, 636, 56, 4, COLOR_RED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ErrorOverlay::update(PadState* pad)
|
void ErrorOverlay::update(TouchScreen* pad)
|
||||||
{
|
{
|
||||||
u64 kDown = padGetButtonsDown(pad);
|
u64 kDown = padGetButtonsDown(pad);
|
||||||
if (button->released() || (kDown & HidNpadButton_A) || (kDown & HidNpadButton_B)) {
|
if (button->released() || (kDown & HidNpadButton_A) || (kDown & HidNpadButton_B)) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ void InfoOverlay::draw(void) const
|
||||||
drawPulsingOutline(322, 462, 636, 56, 4, COLOR_BLUE);
|
drawPulsingOutline(322, 462, 636, 56, 4, COLOR_BLUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InfoOverlay::update(PadState* pad)
|
void InfoOverlay::update(TouchScreen* pad)
|
||||||
{
|
{
|
||||||
u64 kDown = padGetButtonsDown(pad);
|
u64 kDown = padGetButtonsDown(pad);
|
||||||
if (button->released() || (kDown & HidNpadButton_A) || (kDown & HidNpadButton_B)) {
|
if (button->released() || (kDown & HidNpadButton_A) || (kDown & HidNpadButton_B)) {
|
||||||
|
|
|
@ -28,10 +28,11 @@
|
||||||
|
|
||||||
static constexpr size_t rowlen = 5, collen = 4, rows = 10, SIDEBAR_w = 96;
|
static constexpr size_t rowlen = 5, collen = 4, rows = 10, SIDEBAR_w = 96;
|
||||||
|
|
||||||
MainScreen::MainScreen(PadState* pad) : hid(rowlen * collen, collen, pad)
|
MainScreen::MainScreen(TouchScreen* pad) : hid(rowlen * collen, collen, pad)
|
||||||
{
|
{
|
||||||
pksmBridge = false;
|
pksmBridge = false;
|
||||||
selectionTimer = 0;
|
wantInstructions = false;
|
||||||
|
selectionTimer = 0;
|
||||||
sprintf(ver, "v%d.%d.%d", VERSION_MAJOR, VERSION_MINOR, VERSION_MICRO);
|
sprintf(ver, "v%d.%d.%d", VERSION_MAJOR, VERSION_MINOR, VERSION_MICRO);
|
||||||
backupList = std::make_unique<Scrollable>(538, 276, 414, 380, rows);
|
backupList = std::make_unique<Scrollable>(538, 276, 414, 380, rows);
|
||||||
buttonBackup = std::make_unique<Clickable>(956, 276, 220, 80, theme().c2, theme().c6, "Backup \ue004", true);
|
buttonBackup = std::make_unique<Clickable>(956, 276, 220, 80, theme().c2, theme().c6, "Backup \ue004", true);
|
||||||
|
@ -183,32 +184,31 @@ void MainScreen::draw() const
|
||||||
SDLH_GetTextDimensions(26, "checkpoint", &checkpoint_w, &checkpoint_h);
|
SDLH_GetTextDimensions(26, "checkpoint", &checkpoint_w, &checkpoint_h);
|
||||||
SDLH_GetTextDimensions(24, "\ue046 Instructions", &inst_w, &inst_h);
|
SDLH_GetTextDimensions(24, "\ue046 Instructions", &inst_w, &inst_h);
|
||||||
|
|
||||||
// TODO: fix me
|
if (wantInstructions && currentOverlay == nullptr) {
|
||||||
// if (hidKeysHeld(CONTROLLER_P1_AUTO) & KEY_MINUS && currentOverlay == nullptr) {
|
SDLH_DrawRect(0, 0, 1280, 720, COLOR_OVERLAY);
|
||||||
// SDLH_DrawRect(0, 0, 1280, 720, COLOR_OVERLAY);
|
SDLH_DrawText(27, 1205, 646, theme().c6, "\ue085\ue086");
|
||||||
// SDLH_DrawText(27, 1205, 646, theme().c6, "\ue085\ue086");
|
SDLH_DrawText(24, 58, 69, theme().c6, "\ue058 Tap to select title");
|
||||||
// SDLH_DrawText(24, 58, 69, theme().c6, "\ue058 Tap to select title");
|
SDLH_DrawText(24, 58, 109, theme().c6, ("\ue026 Sort: " + sortMode()).c_str());
|
||||||
// SDLH_DrawText(24, 58, 109, theme().c6, ("\ue026 Sort: " + sortMode()).c_str());
|
SDLH_DrawText(24, 100, 270, theme().c6, "\ue006 \ue080 to scroll between titles");
|
||||||
// SDLH_DrawText(24, 100, 270, theme().c6, "\ue006 \ue080 to scroll between titles");
|
SDLH_DrawText(24, 100, 300, theme().c6, "\ue004 \ue005 to scroll between pages");
|
||||||
// SDLH_DrawText(24, 100, 300, theme().c6, "\ue004 \ue005 to scroll between pages");
|
SDLH_DrawText(24, 100, 330, theme().c6, "\ue000 to enter the selected title");
|
||||||
// SDLH_DrawText(24, 100, 330, theme().c6, "\ue000 to enter the selected title");
|
SDLH_DrawText(24, 100, 360, theme().c6, "\ue001 to exit the selected title");
|
||||||
// SDLH_DrawText(24, 100, 360, theme().c6, "\ue001 to exit the selected title");
|
SDLH_DrawText(24, 100, 390, theme().c6, "\ue002 to change sort mode");
|
||||||
// SDLH_DrawText(24, 100, 390, theme().c6, "\ue002 to change sort mode");
|
SDLH_DrawText(24, 100, 420, theme().c6, "\ue003 to multiselect title");
|
||||||
// SDLH_DrawText(24, 100, 420, theme().c6, "\ue003 to multiselect title");
|
SDLH_DrawText(24, 100, 450, theme().c6, "Hold \ue003 to select all titles");
|
||||||
// SDLH_DrawText(24, 100, 450, theme().c6, "Hold \ue003 to select all titles");
|
SDLH_DrawText(24, 616, 480, theme().c6, "\ue002 to delete a backup");
|
||||||
// SDLH_DrawText(24, 616, 480, theme().c6, "\ue002 to delete a backup");
|
if (Configuration::getInstance().isPKSMBridgeEnabled()) {
|
||||||
// if (Configuration::getInstance().isPKSMBridgeEnabled()) {
|
SDLH_DrawText(24, 100, 480, theme().c6, "\ue004 + \ue005 to enable PKSM bridge");
|
||||||
// SDLH_DrawText(24, 100, 480, theme().c6, "\ue004 + \ue005 to enable PKSM bridge");
|
}
|
||||||
// }
|
if (gethostid() != INADDR_LOOPBACK) {
|
||||||
// if (gethostid() != INADDR_LOOPBACK) {
|
if (g_ftpAvailable && Configuration::getInstance().isFTPEnabled()) {
|
||||||
// if (g_ftpAvailable && Configuration::getInstance().isFTPEnabled()) {
|
SDLH_DrawText(24, 16 * 6 + checkpoint_w + 8 + ver_w + inst_w, 642 + (40 - checkpoint_h) / 2 + checkpoint_h - inst_h, COLOR_GOLD,
|
||||||
// SDLH_DrawText(24, 16 * 6 + checkpoint_w + 8 + ver_w + inst_w, 642 + (40 - checkpoint_h) / 2 + checkpoint_h - inst_h, COLOR_GOLD,
|
StringUtils::format("FTP server running on %s:50000", getConsoleIP()).c_str());
|
||||||
// StringUtils::format("FTP server running on %s:50000", getConsoleIP()).c_str());
|
}
|
||||||
// }
|
SDLH_DrawText(24, 16 * 6 + checkpoint_w + 8 + ver_w + inst_w, 672 + (40 - checkpoint_h) / 2 + checkpoint_h - inst_h, COLOR_GOLD,
|
||||||
// SDLH_DrawText(24, 16 * 6 + checkpoint_w + 8 + ver_w + inst_w, 672 + (40 - checkpoint_h) / 2 + checkpoint_h - inst_h, COLOR_GOLD,
|
StringUtils::format("Configuration server running on %s:8000", getConsoleIP()).c_str());
|
||||||
// StringUtils::format("Configuration server running on %s:8000", getConsoleIP()).c_str());
|
}
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
SDLH_DrawRect(0, 672, checkpoint_w + ver_w + 2 * 16 + 8, 40, lightBlack);
|
SDLH_DrawRect(0, 672, checkpoint_w + ver_w + 2 * 16 + 8, 40, lightBlack);
|
||||||
SDLH_DrawText(26, 16, 672 + (40 - checkpoint_h) / 2 + 2, theme().c6, "checkpoint");
|
SDLH_DrawText(26, 16, 672 + (40 - checkpoint_h) / 2 + 2, theme().c6, "checkpoint");
|
||||||
|
@ -224,13 +224,13 @@ void MainScreen::draw() const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainScreen::update(PadState* pad)
|
void MainScreen::update(TouchScreen* pad)
|
||||||
{
|
{
|
||||||
updateSelector(pad);
|
updateSelector(pad);
|
||||||
handleEvents(pad);
|
handleEvents(pad);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainScreen::updateSelector(PadState* pad)
|
void MainScreen::updateSelector(TouchScreen* pad)
|
||||||
{
|
{
|
||||||
if (!g_backupScrollEnabled) {
|
if (!g_backupScrollEnabled) {
|
||||||
size_t count = getTitleCount(g_currentUId);
|
size_t count = getTitleCount(g_currentUId);
|
||||||
|
@ -246,10 +246,9 @@ void MainScreen::updateSelector(PadState* pad)
|
||||||
|
|
||||||
u32 x = selectorX(index);
|
u32 x = selectorX(index);
|
||||||
u32 y = selectorY(index);
|
u32 y = selectorY(index);
|
||||||
// TODO: FIX ME
|
if (pad->count > 0 && pad->touches[0].x >= x && pad->touches[0].x <= x + 128 && pad->touches[0].y >= y && pad->touches[0].y <= y + 128) {
|
||||||
// if (hidKeysHeld(CONTROLLER_P1_AUTO) & KEY_TOUCH && touch->px >= x && touch->px <= x + 128 && touch->py >= y && touch->py <= y + 128) {
|
hid.index(index);
|
||||||
// hid.index(index);
|
}
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,12 +262,13 @@ void MainScreen::updateSelector(PadState* pad)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainScreen::handleEvents(PadState* pad)
|
void MainScreen::handleEvents(TouchScreen* pad)
|
||||||
{
|
{
|
||||||
// TODO: fix me
|
const u64 kheld = padGetButtons(pad);
|
||||||
// u32 kheld = padGetButtonsHeld(&pad);
|
const u64 kdown = padGetButtonsDown(pad);
|
||||||
|
|
||||||
|
wantInstructions = (kheld & HidNpadButton_Minus);
|
||||||
|
|
||||||
u32 kdown = padGetButtonsDown(pad);
|
|
||||||
if (kdown & HidNpadButton_ZL || kdown & HidNpadButton_ZR) {
|
if (kdown & HidNpadButton_ZL || kdown & HidNpadButton_ZR) {
|
||||||
while ((g_currentUId = Account::selectAccount()) == 0)
|
while ((g_currentUId = Account::selectAccount()) == 0)
|
||||||
;
|
;
|
||||||
|
@ -281,34 +281,33 @@ void MainScreen::handleEvents(PadState* pad)
|
||||||
Title title;
|
Title title;
|
||||||
getTitle(title, g_currentUId, this->index(TITLES));
|
getTitle(title, g_currentUId, this->index(TITLES));
|
||||||
if (!getPKSMBridgeFlag()) {
|
if (!getPKSMBridgeFlag()) {
|
||||||
// TODO: fix me
|
if ((kheld & HidNpadButton_L) && (kheld & HidNpadButton_R) && isPKSMBridgeTitle(title.id())) {
|
||||||
// if ((kheld & HidNpadButton_L) && (kheld & HidNpadButton_R) && isPKSMBridgeTitle(title.id())) {
|
setPKSMBridgeFlag(true);
|
||||||
// setPKSMBridgeFlag(true);
|
updateButtons();
|
||||||
// updateButtons();
|
}
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// // handle touchscreen
|
// handle touchscreen
|
||||||
// if (!g_backupScrollEnabled && hidKeysHeld(CONTROLLER_P1_AUTO) & KEY_TOUCH && touch->px >= 1200 && touch->px <= 1200 + USER_ICON_SIZE &&
|
if (!g_backupScrollEnabled && pad->count > 0 && pad->touches[0].x >= 1200 && pad->touches[0].x <= 1200 + USER_ICON_SIZE &&
|
||||||
// touch->py >= 626 && touch->py <= 626 + USER_ICON_SIZE) {
|
pad->touches[0].y >= 626 && pad->touches[0].y <= 626 + USER_ICON_SIZE) {
|
||||||
// while ((g_currentUId = Account::selectAccount()) == 0)
|
while ((g_currentUId = Account::selectAccount()) == 0)
|
||||||
// ;
|
;
|
||||||
// this->index(TITLES, 0);
|
this->index(TITLES, 0);
|
||||||
// this->index(CELLS, 0);
|
this->index(CELLS, 0);
|
||||||
// setPKSMBridgeFlag(false);
|
setPKSMBridgeFlag(false);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// // Handle touching the backup list
|
// Handle touching the backup list
|
||||||
// if ((hidKeysDown(CONTROLLER_P1_AUTO) & KEY_TOUCH && (int)touch->px > 538 && (int)touch->px < 952 && (int)touch->py > 276 &&
|
if (pad->count > 0 && pad->touches[0].x > 538 && pad->touches[0].x < 952 && pad->touches[0].y > 276 &&
|
||||||
// (int)touch->py < 656)) {
|
pad->touches[0].y < 656) {
|
||||||
// // Activate backup list only if multiple selections are enabled
|
// Activate backup list only if multiple selections are enabled
|
||||||
// if (!MS::multipleSelectionEnabled()) {
|
if (!MS::multipleSelectionEnabled()) {
|
||||||
// g_backupScrollEnabled = true;
|
g_backupScrollEnabled = true;
|
||||||
// updateButtons();
|
updateButtons();
|
||||||
// entryType(CELLS);
|
entryType(CELLS);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// Handle pressing A
|
// Handle pressing A
|
||||||
// Backup list active: Backup/Restore
|
// Backup list active: Backup/Restore
|
||||||
|
@ -366,10 +365,8 @@ void MainScreen::handleEvents(PadState* pad)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle pressing B
|
// Handle pressing B
|
||||||
if (kdown & HidNpadButton_B
|
if ((kdown & HidNpadButton_B) || (pad->count > 0 && pad->touches[0].x <= 532 && pad->touches[0].y <= 664))
|
||||||
// || (hidKeysDown(CONTROLLER_P1_AUTO) & KEY_TOUCH && (int)touch->px >= 0 && (int)touch->px <= 532 && (int)touch->py >= 0 &&
|
{
|
||||||
// (int)touch->py <= 664)
|
|
||||||
){
|
|
||||||
this->index(CELLS, 0);
|
this->index(CELLS, 0);
|
||||||
g_backupScrollEnabled = false;
|
g_backupScrollEnabled = false;
|
||||||
entryType(TITLES);
|
entryType(TITLES);
|
||||||
|
@ -417,13 +414,13 @@ void MainScreen::handleEvents(PadState* pad)
|
||||||
updateButtons(); // Do this last
|
updateButtons(); // Do this last
|
||||||
}
|
}
|
||||||
|
|
||||||
// // Handle holding Y
|
// Handle holding Y
|
||||||
// if (hidKeysHeld(CONTROLLER_P1_AUTO) & KEY_Y && !(g_backupScrollEnabled)) {
|
if (kheld & KEY_Y && !(g_backupScrollEnabled)) {
|
||||||
// selectionTimer++;
|
selectionTimer++;
|
||||||
// }
|
}
|
||||||
// else {
|
else {
|
||||||
// selectionTimer = 0;
|
selectionTimer = 0;
|
||||||
// }
|
}
|
||||||
|
|
||||||
if (selectionTimer > 45) {
|
if (selectionTimer > 45) {
|
||||||
MS::clearSelectedEntries();
|
MS::clearSelectedEntries();
|
||||||
|
|
|
@ -56,7 +56,7 @@ void YesNoOverlay::draw(void) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void YesNoOverlay::update(PadState* pad)
|
void YesNoOverlay::update(TouchScreen* pad)
|
||||||
{
|
{
|
||||||
hid.update(2);
|
hid.update(2);
|
||||||
|
|
||||||
|
|
|
@ -28,31 +28,36 @@
|
||||||
|
|
||||||
bool Clickable::held()
|
bool Clickable::held()
|
||||||
{
|
{
|
||||||
// TODO: fix me
|
HidTouchScreenState state={0};
|
||||||
// touchPosition touch;
|
if (hidGetTouchScreenStates(&state, 1)) {
|
||||||
// hidTouchRead(&touch, 0);
|
return state.count > 0 && state.touches[0].y > (unsigned)my && state.touches[0].y < (unsigned)(my + mh) &&
|
||||||
// return ((hidKeysHeld(CONTROLLER_P1_AUTO) & KEY_TOUCH) && (int)touch.px > mx && (int)touch.px < mx + mw && (int)touch.py > my &&
|
state.touches[0].x > (unsigned)mx && state.touches[0].x < (unsigned)(mx + mw);
|
||||||
// (int)touch.py < my + mh);
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Clickable::released(void)
|
bool Clickable::released()
|
||||||
{
|
{
|
||||||
// TODO: fix me
|
const auto [on, currentlyTouching] = [this]() {
|
||||||
// touchPosition touch;
|
HidTouchScreenState state={0};
|
||||||
// hidTouchRead(&touch, 0);
|
if (hidGetTouchScreenStates(&state, 1)) {
|
||||||
// const bool on = (int)touch.px > mx && (int)touch.px < mx + mw && (int)touch.py > my && (int)touch.py < my + mh;
|
return std::make_pair(state.count > 0 && state.touches[0].y > (unsigned)my &&
|
||||||
|
state.touches[0].y < (unsigned)(my + mh) && state.touches[0].x > (unsigned)mx &&
|
||||||
|
state.touches[0].x < (unsigned)(mx + mw), true);
|
||||||
|
}
|
||||||
|
return std::make_pair(false, false);
|
||||||
|
}();
|
||||||
|
|
||||||
// if (on) {
|
if (on) {
|
||||||
// mOldPressed = true;
|
mOldPressed = true;
|
||||||
// }
|
}
|
||||||
// else {
|
else {
|
||||||
// if (mOldPressed && !(touch.px > 0 || touch.py > 0)) {
|
if (mOldPressed && !currentlyTouching) {
|
||||||
// mOldPressed = false;
|
mOldPressed = false;
|
||||||
// return true;
|
return true;
|
||||||
// }
|
}
|
||||||
// mOldPressed = false;
|
mOldPressed = false;
|
||||||
// }
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ int main(void)
|
||||||
exit(res);
|
exit(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
PadState pad;
|
TouchScreen pad;
|
||||||
padInitializeDefault(&pad);
|
padInitializeDefault(&pad);
|
||||||
|
|
||||||
g_screen = std::make_unique<MainScreen>(&pad);
|
g_screen = std::make_unique<MainScreen>(&pad);
|
||||||
|
@ -72,7 +72,7 @@ int main(void)
|
||||||
if (kDown & HidNpadButton_Plus)
|
if (kDown & HidNpadButton_Plus)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// hidTouchRead(&touch, 0);
|
hidGetTouchScreenStates(&pad, 1);
|
||||||
|
|
||||||
g_screen->doDraw();
|
g_screen->doDraw();
|
||||||
g_screen->doUpdate(&pad);
|
g_screen->doUpdate(&pad);
|
||||||
|
|
|
@ -54,21 +54,20 @@ void Scrollable::push_back(SDL_Color color, SDL_Color colorMessage, const std::s
|
||||||
|
|
||||||
void Scrollable::updateSelection(void)
|
void Scrollable::updateSelection(void)
|
||||||
{
|
{
|
||||||
// TODO: fix me
|
const int hu = (mHid.maxEntries(size()) + 1) * mh / mVisibleEntries;
|
||||||
|
|
||||||
// touchPosition touch;
|
HidTouchScreenState state={0};
|
||||||
// hidTouchRead(&touch, 0);
|
if (hidGetTouchScreenStates(&state, 1)) {
|
||||||
|
|
||||||
// const int hu = (mHid.maxEntries(size()) + 1) * mh / mVisibleEntries;
|
if (state.count > 0 && state.touches[0].y > (float)my && state.touches[0].y < (float)(my + hu) && state.touches[0].x > (float)mx &&
|
||||||
|
state.touches[0].x < (float)(mx + mw)) {
|
||||||
|
mHid.index(ceilf((state.touches[0].y - my) * mVisibleEntries / mh));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// if (hidKeysHeld(CONTROLLER_P1_AUTO) & KEY_TOUCH && touch.py > (float)my && touch.py < (float)(my + hu) && touch.px > (float)mx &&
|
mHid.update(size());
|
||||||
// touch.px < (float)(mx + mw)) {
|
mIndex = mHid.index();
|
||||||
// mHid.index(ceilf((touch.py - my) * mVisibleEntries / mh));
|
mPage = mHid.page();
|
||||||
// }
|
|
||||||
|
|
||||||
// mHid.update(size());
|
|
||||||
// mIndex = mHid.index();
|
|
||||||
// mPage = mHid.page();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scrollable::draw(bool condition)
|
void Scrollable::draw(bool condition)
|
||||||
|
|
Loading…
Reference in a new issue