#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Jan 30 18:06:26 2025

@author: fatih
"""

import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk


class TouchApp(Gtk.Window):
    def __init__(self):
        super().__init__(title="Dokunmatik Algılama")
        self.fullscreen()
        self.connect("destroy", Gtk.main_quit)

        self.drawing_area = Gtk.DrawingArea()
        self.drawing_area.connect("draw", self.on_draw)
        self.add(self.drawing_area)

        self.touch_points = {}

        self.add_events(Gdk.EventMask.TOUCH_MASK)
        self.connect("touch-event", self.on_touch)

    def on_touch(self, widget, event):
        event_type = event.type
        touch_id = event.sequence

        if event_type == Gdk.EventType.TOUCH_BEGIN or event_type == Gdk.EventType.TOUCH_UPDATE:
            self.touch_points[touch_id] = (event.x, event.y)
        elif event_type == Gdk.EventType.TOUCH_END:
            self.touch_points.pop(touch_id, None)

        self.drawing_area.queue_draw()

    def on_draw(self, widget, cr):
        cr.set_source_rgb(1, 1, 1)
        cr.paint()

        r, g, b = 0x21 / 255, 0xAE / 255, 0xD8 / 255

        cr.set_source_rgb(r, g, b)
        for x, y in self.touch_points.values():
            cr.arc(x, y, 20, 0, 2 * 3.14)
            cr.fill()

        cr.set_source_rgb(0, 0, 0)
        cr.set_font_size(20)
        text = f"Aktif Dokunmalar: {len(self.touch_points)}"

        extents = cr.text_extents(text)
        width = widget.get_allocated_width()
        text_y = widget.get_allocated_height() - 40
        text_x = (width - extents.width) / 2
        cr.move_to(text_x, text_y)
        cr.show_text(text)

        button_size = 30
        button_x = (width - button_size) / 2
        button_y = text_y - 89

        cr.set_source_rgb(1, 0, 0)
        cr.rectangle(button_x, button_y, button_size, button_size)
        cr.fill()

        cr.set_source_rgb(1, 1, 1)
        cr.set_font_size(17)
        cr.move_to(button_x + 8, button_y + 22)
        cr.show_text("✖")

        return True

    def on_click(self, widget, event):
        width = widget.get_allocated_width()
        text_y = widget.get_allocated_height() - 40
        button_size = 30
        button_x = (width - button_size) / 2
        button_y = text_y - 89

        if event.type == Gdk.EventType.BUTTON_RELEASE:
            if button_x <= event.x <= button_x + button_size and button_y <= event.y <= button_y + button_size:
                Gtk.main_quit()


if __name__ == "__main__":
    app = TouchApp()
    app.connect("button-release-event", app.on_click)
    app.show_all()
    Gtk.main()
