plate.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. typedef enum {
  2. KT_OPEN = 1,
  3. KT_CORNER = 2,
  4. KT_LEFT = 4,
  5. KT_RIGHT = 8,
  6. KT_CORNU = 16,
  7. KT_SELECTED = 256
  8. } kt_flags;
  9. typedef struct {
  10. double x;
  11. double y;
  12. kt_flags flags;
  13. } knot;
  14. typedef struct {
  15. int n_kt;
  16. int n_kt_max;
  17. knot *kt;
  18. int closed;
  19. } subpath;
  20. typedef enum {
  21. MOUSE_MODE_SELECT,
  22. MOUSE_MODE_ADD_CURVE,
  23. MOUSE_MODE_ADD_CORNER,
  24. MOUSE_MODE_ADD_CORNU,
  25. MOUSE_MODE_ADD_LEFT,
  26. MOUSE_MODE_ADD_RIGHT
  27. } mouse_mode;
  28. typedef enum {
  29. MOTION_MODE_IDLE,
  30. MOTION_MODE_SELECT,
  31. MOTION_MODE_MOVE
  32. } motion_mode;
  33. typedef struct {
  34. double x0, y0;
  35. const char *description;
  36. int n_sp;
  37. int n_sp_max;
  38. subpath *sp;
  39. mouse_mode mmode;
  40. mouse_mode last_curve_mmode;
  41. motion_mode motmode;
  42. double sel_x0, sel_y0;
  43. } plate;
  44. typedef enum {
  45. PRESS_MOD_SHIFT = 1,
  46. PRESS_MOD_CTRL = 2,
  47. PRESS_MOD_DOUBLE = 4,
  48. PRESS_MOD_TRIPLE = 8
  49. } press_mod;
  50. plate *
  51. new_plate(void);
  52. void
  53. free_plate(plate *p);
  54. plate *
  55. copy_plate(const plate *p);
  56. void
  57. plate_select_all(plate *p, int selected);
  58. subpath *
  59. plate_find_selected_sp(plate *p);
  60. subpath *
  61. plate_new_sp(plate *p);
  62. void
  63. plate_press(plate *p, double x, double y, press_mod mods);
  64. void
  65. plate_motion_move(plate *p, double x, double y);
  66. void
  67. plate_motion_select(plate *p, double x, double y);
  68. void plate_unpress(plate *p);
  69. void
  70. plate_toggle_corner(plate *p);
  71. void
  72. plate_delete_pt(plate *p);
  73. spiro_seg *
  74. draw_subpath(const subpath *sp, bezctx *bc);
  75. int
  76. file_write_plate(const char *fn, const plate *p);
  77. plate *
  78. file_read_plate(const char *fn);