1 /* 2 * mouse_slider.h 3 * DIN Is Noise is copyright (c) 2006-2021 Jagannathan Sampath 4 * DIN Is Noise is released under GNU Public License 2.0 5 * For more information, please visit https://dinisnoise.org/ 6 */ 7 8 #ifndef __mouse_slider 9 #define __mouse_slider 10 11 #include "widget.h" 12 #include "arrow_button.h" 13 14 #include <list> 15 16 struct mouse_slider_listener { 17 18 std::string name; 19 enum {X, Y, NONE}; 20 int orient; 21 double delta0, delta; 22 mouse_slider_listener (); 23 virtual void moused (int dir, double scl = 1.0) {} after_slidemouse_slider_listener24 virtual void after_slide () {} 25 }; 26 27 struct mouse_slider : widget { 28 29 int sz, sz_2, szn, szn_1; 30 arrow_button axl, axr; 31 arrow_button ayb, ayt; 32 void update_x_arrows (); 33 void update_y_arrows (); 34 35 static const int margin = 10; 36 int lowx, highx, midx; 37 int lowy, highy, midy; 38 int prevx, prevy; 39 int initx, inity, inityy; 40 41 std::list<mouse_slider_listener*> mslx, msly; 42 int nmslx, nmsly; 43 void print (std::list<mouse_slider_listener*>&, std::list<mouse_slider_listener*>&); 44 void print (std::list<mouse_slider_listener*>&); 45 46 int dx, dy; 47 48 int justx (); 49 int justy (); 50 51 int active; 52 53 int warp; 54 55 int lmb_clicked; 56 57 mouse_slider (); 58 ~mouse_slider (); 59 int handle_input (); 60 61 int pts [8]; 62 void draw (); 63 64 //void printdx (); 65 //void printdy (); 66 67 void add (mouse_slider_listener* sl); 68 void remove (mouse_slider_listener* sl); 69 70 double base; 71 int shift; 72 struct scalet { 73 enum {FIXED, CHANGING}; 74 int style; 75 double value; 76 void operator*= (const double& v) { value *= v; } 77 void operator/= (const double& v) { value /= v; } 78 void calcvalue (double& b, int s); 79 } scale; 80 81 int activate (int shft = 0, int scalestyle = scalet::CHANGING); 82 int deactivate (); 83 84 }; 85 86 void cant_mouse_slide (); 87 void activate_mouse_slider (int shift = 0, int scalestyle = mouse_slider::scalet::CHANGING); 88 89 extern mouse_slider mouse_slider0; 90 91 #define MAKE_MOUSE_SLIDER_LISTENER(name,var) struct name : mouse_slider_listener { void after_slide (); void moused (int dir, double scl); }; name var; 92 #define AFTER_SLIDE(scope,name) void scope::name::after_slide () 93 #define MOUSED(scope,name) void scope::name::moused (int dir, double scl) 94 95 #endif 96