Rename to TNCat, add chip chase, G-codes and a Wayland layout
The project is now TNCat, after HEIDENHAIN's TNC controls. Binary, QML module URI, settings path, bundle id and .desktop entry follow; the environment switches are TNCAT_*. Entertainment: a curled steel chip skitters in every minute or two, the cat runs it down and bats it away a few times before sitting back looking pleased. Mood changes flash the matching machine code above its head, G00 for a sprint, G01 for a stroll, M08 while it washes, G28 for a stretch, M30 for a nap. Window handling was split into two layouts. X11 and macOS keep one small window per object, positioned by the app. Wayland gets a screen-filling overlay whose input region is masked down to the cat, since a Wayland client cannot place its own window. Overlay mode is automatic there and available elsewhere via TNCAT_OVERLAY=1. Also adds a ground-line setting so the cat can walk above a softkey row. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
acef398f49
commit
0f1df75a1d
19 files changed
+817
-185
No files matched your search
@@ -0,0 +1,70 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
import QtQuick
|
||||
import QtQuick.Shapes
|
||||
|
||||
// A curled steel chip, the kind that comes off a milling cutter.
|
||||
// Design space is 60 x 44 units.
|
||||
Item {
|
||||
id: chip
|
||||
|
||||
property int kick: 0
|
||||
|
||||
readonly property real unit: width / 60
|
||||
|
||||
implicitWidth: 60
|
||||
implicitHeight: 44
|
||||
|
||||
Item {
|
||||
width: 60
|
||||
height: 44
|
||||
transformOrigin: Item.TopLeft
|
||||
scale: chip.unit
|
||||
|
||||
Rectangle { // ground shadow
|
||||
x: 14; y: 36
|
||||
width: 32; height: 6
|
||||
radius: 3
|
||||
color: "#000000"
|
||||
opacity: 0.18
|
||||
antialiasing: true
|
||||
}
|
||||
|
||||
Item {
|
||||
id: curl
|
||||
x: 30; y: 22
|
||||
width: 0; height: 0
|
||||
|
||||
Shape {
|
||||
x: -30; y: -22
|
||||
width: 60; height: 44
|
||||
preferredRendererType: Shape.CurveRenderer
|
||||
|
||||
ShapePath { // the curl
|
||||
strokeColor: "#8d99ae"
|
||||
strokeWidth: 5
|
||||
capStyle: ShapePath.RoundCap
|
||||
fillColor: "transparent"
|
||||
startX: 12; startY: 32
|
||||
PathCubic { control1X: 2; control1Y: 20; control2X: 14; control2Y: 6; x: 30; y: 10 }
|
||||
PathCubic { control1X: 44; control1Y: 14; control2X: 48; control2Y: 30; x: 38; y: 34 }
|
||||
PathCubic { control1X: 30; control1Y: 37; control2X: 26; control2Y: 28; x: 32; y: 24 }
|
||||
}
|
||||
ShapePath { // highlight along the outer edge
|
||||
strokeColor: "#dfe6ee"
|
||||
strokeWidth: 1.6
|
||||
capStyle: ShapePath.RoundCap
|
||||
fillColor: "transparent"
|
||||
startX: 13; startY: 29
|
||||
PathCubic { control1X: 5; control1Y: 19; control2X: 16; control2Y: 8; x: 30; y: 12 }
|
||||
}
|
||||
}
|
||||
|
||||
RotationAnimation on rotation {
|
||||
running: true
|
||||
loops: Animation.Infinite
|
||||
from: 0; to: 360
|
||||
duration: 2600
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user