first commit
This commit is contained in:
commit
5893b00dd2
1669 changed files with 1982740 additions and 0 deletions
164
libraries/M5Unified/examples/Basic/Touch/DragDrop/DragDrop.ino
Normal file
164
libraries/M5Unified/examples/Basic/Touch/DragDrop/DragDrop.ino
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
#include <M5Unified.h>
|
||||
|
||||
struct box_t
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int w;
|
||||
int h;
|
||||
std::uint16_t color;
|
||||
int touch_id = -1;
|
||||
|
||||
void clear(void)
|
||||
{
|
||||
M5.Display.setColor(M5.Display.getBaseColor());
|
||||
for (int i = 0; i < 8; ++i)
|
||||
{
|
||||
M5.Display.drawRect(x+i, y+i, w-i*2, h-i*2);
|
||||
}
|
||||
}
|
||||
void draw(void)
|
||||
{
|
||||
M5.Display.setColor(color);
|
||||
int ie = touch_id < 0 ? 4 : 8;
|
||||
for (int i = 0; i < ie; ++i)
|
||||
{
|
||||
M5.Display.drawRect(x+i, y+i, w-i*2, h-i*2);
|
||||
}
|
||||
}
|
||||
bool contain(int x, int y)
|
||||
{
|
||||
return this->x <= x && x < (this->x + this->w)
|
||||
&& this->y <= y && y < (this->y + this->h);
|
||||
}
|
||||
};
|
||||
|
||||
static constexpr std::size_t box_count = 4;
|
||||
static box_t box_list[box_count];
|
||||
|
||||
void setup(void)
|
||||
{
|
||||
M5.begin();
|
||||
|
||||
for (std::size_t i = 0; i < box_count; ++i)
|
||||
{
|
||||
box_list[i].w = 100;
|
||||
box_list[i].h = 100;
|
||||
}
|
||||
box_list[0].x = 0;
|
||||
box_list[0].y = 0;
|
||||
box_list[1].x = M5.Display.width() - box_list[1].w;
|
||||
box_list[1].y = 0;
|
||||
box_list[2].x = 0;
|
||||
box_list[2].y = M5.Display.height() - box_list[2].h;
|
||||
box_list[3].x = M5.Display.width() - box_list[3].w;
|
||||
box_list[3].y = M5.Display.height() - box_list[3].h;
|
||||
box_list[0].color = TFT_RED;
|
||||
box_list[1].color = TFT_BLUE;
|
||||
box_list[2].color = TFT_GREEN;
|
||||
box_list[3].color = TFT_YELLOW;
|
||||
|
||||
M5.Display.setEpdMode(epd_mode_t::epd_fastest);
|
||||
M5.Display.startWrite();
|
||||
M5.Display.setTextSize(2);
|
||||
for (std::size_t i = 0; i < box_count; ++i)
|
||||
{
|
||||
box_list[i].draw();
|
||||
}
|
||||
}
|
||||
|
||||
void loop(void)
|
||||
{
|
||||
M5.delay(1);
|
||||
|
||||
M5.update();
|
||||
|
||||
auto count = M5.Touch.getCount();
|
||||
if (!count)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static m5::touch_state_t prev_state;
|
||||
auto t = M5.Touch.getDetail();
|
||||
if (prev_state != t.state)
|
||||
{
|
||||
prev_state = t.state;
|
||||
static constexpr const char* state_name[16] =
|
||||
{ "none"
|
||||
, "touch"
|
||||
, "touch_end"
|
||||
, "touch_begin"
|
||||
, "___"
|
||||
, "hold"
|
||||
, "hold_end"
|
||||
, "hold_begin"
|
||||
, "___"
|
||||
, "flick"
|
||||
, "flick_end"
|
||||
, "flick_begin"
|
||||
, "___"
|
||||
, "drag"
|
||||
, "drag_end"
|
||||
, "drag_begin"
|
||||
};
|
||||
M5_LOGI("%s", state_name[t.state]);
|
||||
}
|
||||
|
||||
for (std::size_t i = 0; i < count; ++i)
|
||||
{
|
||||
auto t = M5.Touch.getDetail(i);
|
||||
|
||||
for (std::size_t j = 0; j < box_count; ++j)
|
||||
{
|
||||
if (t.wasHold())
|
||||
{
|
||||
if (box_list[j].contain(t.x, t.y))
|
||||
{
|
||||
box_list[j].touch_id = t.id;
|
||||
}
|
||||
}
|
||||
|
||||
M5.Display.waitDisplay();
|
||||
if (box_list[j].touch_id == t.id)
|
||||
{
|
||||
if (t.wasReleased())
|
||||
{
|
||||
box_list[j].touch_id = -1;
|
||||
box_list[j].clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
auto dx = t.deltaX();
|
||||
auto dy = t.deltaY();
|
||||
if (dx || dy)
|
||||
{
|
||||
box_list[j].clear();
|
||||
box_list[j].x += dx;
|
||||
box_list[j].y += dy;
|
||||
}
|
||||
}
|
||||
}
|
||||
box_list[j].draw();
|
||||
}
|
||||
}
|
||||
M5.Display.display();
|
||||
}
|
||||
|
||||
#if !defined ( ARDUINO ) && defined ( ESP_PLATFORM )
|
||||
extern "C" {
|
||||
void loopTask(void*)
|
||||
{
|
||||
setup();
|
||||
for (;;) {
|
||||
loop();
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
void app_main()
|
||||
{
|
||||
xTaskCreatePinnedToCore(loopTask, "loopTask", 8192, NULL, 1, NULL, 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue