ckb-next  beta-v0.2.8 at branch testing
ckb-next driver for corsair devices
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
main.c
Go to the documentation of this file.
1 #include "../ckb/ckb-anim.h"
2 #include <math.h>
3 
4 void ckb_info(){
5  // Plugin info
6  CKB_NAME("Heat Map");
7  CKB_VERSION("0.2");
8  CKB_COPYRIGHT("2015", "RULER501");
9  CKB_LICENSE("LGPLv3");
10  CKB_GUID("{097D69F0-70B2-48B8-AFE2-25A1CDB0D92C}");
11  CKB_DESCRIPTION("A spot effect on pressed keys that shows usage");
12 
13  // Effect parameters
14  CKB_PARAM_AGRADIENT("color", "Fade color:", "", "ffffffff");
15  CKB_PARAM_BOOL("random", "Random Brightness", 0);
16  CKB_PARAM_LONG("ffade", "Frames to fade", "frames", 30, 10, 1000);
17  CKB_PARAM_DOUBLE("pressestofull", "Presses to full", "keypresses", 10.f, 1.f, 100.f);
18 
19  // Timing/input parameters
24 
25  // Presets
26  CKB_PRESET_START("Single Spot");
27  CKB_PRESET_PARAM("random", "0");
28  CKB_PRESET_PARAM("ffade", "30");
29  CKB_PRESET_PARAM("pressestofull", "10");
30  CKB_PRESET_PARAM("trigger", "0");
31  CKB_PRESET_PARAM("kptrigger", "1");
33 }
34 
36 int randomBright = 0;
37 long ffade = 30;
38 double pressestofull = 10.f;
39 
40 typedef struct{
41  unsigned int usages;
42  int pressed;
43  double timing;
44  int x;
45  int y;
46 } keyanim;
47 
48 keyanim* anims = NULL;
49 
50 void ckb_init(ckb_runctx* context){
51  anims = calloc(context->keycount, sizeof(keyanim));
52  for(int i=0; i < context->keycount; i++){
53  anims[i].x = context->keys[i].x;
54  anims[i].y = context->keys[i].y;
55  }
56 }
57 
58 void ckb_parameter(ckb_runctx* context, const char* name, const char* value){
59  CKB_PARSE_AGRADIENT("color", &animcolor){}
60  CKB_PARSE_BOOL("random", &randomBright){}
61  CKB_PARSE_LONG("ffade", &ffade){}
62  CKB_PARSE_DOUBLE("pressestofull", &pressestofull){}
63 }
64 
65 void anim_add(int index){
66  anims[index].usages += ffade;
67  anims[index].pressed = 1;
68  anims[index].timing = 0.f;
69 }
70 
71 void anim_remove(int index){
72  anims[index].pressed = 0;
73 }
74 
75 void ckb_keypress(ckb_runctx* context, ckb_key* key, int x, int y, int state){
76  // Add or remove a spot on this key
77  if(state)
78  anim_add(key - context->keys);
79  else
80  anim_remove(key - context->keys);
81 }
82 
83 void ckb_start(ckb_runctx* context, int state){
84  return;
85 }
86 
87 void ckb_time(ckb_runctx* context, double delta){
88  unsigned int count = context->keycount;
89  for(unsigned int i=0; i < count; i++){
90  if(anims[i].usages && !anims[i].pressed){
91  anims[i].timing -= delta;
92  while(anims[i].timing < 0){
93  anims[i].timing += 1.f/30.f;
94  if(anims[i].usages > 0)
95  anims[i].usages--;
96  }
97  }
98  }
99 }
100 
101 int ckb_frame(ckb_runctx* context){
102  CKB_KEYCLEAR(context);
103  // Draw spots
104  unsigned count = context->keycount;
105  ckb_key* keys = context->keys;
106  unsigned int full = pressestofull*ffade;
107  for(int i =0; i < count; i++){
108  if(!anims[i].usages)
109  continue;
110  float a, r, g, b;
111  if(randomBright)
112  ckb_grad_color(&a, &r, &g, &b, &animcolor, ((float)(rand() % 1024))/10.f);
113  else
114  ckb_grad_color(&a, &r, &g, &b, &animcolor, (float)fmin(anims[i].usages,full)*100.f/full);
115  ckb_alpha_blend(keys+i, a, r, g, b);
116  }
117  return 0;
118 }
#define CKB_PRESET_END
Definition: ckb-anim.h:87
#define FALSE
Definition: ckb-anim.h:49
void ckb_keypress(ckb_runctx *context, ckb_key *key, int x, int y, int state)
Definition: main.c:75
void ckb_parameter(ckb_runctx *context, const char *name, const char *value)
Definition: main.c:68
#define CKB_PARAM_DOUBLE(name, prefix, postfix, default, min, max)
Definition: ckb-anim.h:75
int x
Definition: ckb-anim.h:133
#define CKB_VERSION(version)
Definition: ckb-anim.h:64
#define CKB_TIMEMODE(mode)
Definition: ckb-anim.h:97
float y
Definition: main.c:66
#define TRUE
Definition: ckb-anim.h:46
#define CKB_GUID(guid)
Definition: ckb-anim.h:60
double timing
Definition: main.c:43
#define CKB_NAME(name)
Definition: ckb-anim.h:62
#define CKB_PARAM_LONG(name, prefix, postfix, default, min, max)
Definition: ckb-anim.h:74
float x
Definition: main.c:66
ckb_gradient animcolor
Definition: main.c:52
Definition: main.c:40
#define CKB_PARSE_AGRADIENT(param_name, gradient_ptr)
Definition: ckb-anim.h:121
#define CKB_TIME_ABSOLUTE
Definition: ckb-anim.h:96
int randomBright
Definition: main.c:36
#define CKB_LICENSE(license)
Definition: ckb-anim.h:68
#define CKB_KP_POSITION
Definition: ckb-anim.h:92
keyanim * anims
Definition: main.c:48
#define CKB_COPYRIGHT(year, author)
Definition: ckb-anim.h:66
Definition: keymap.h:49
#define CKB_DESCRIPTION(description)
Definition: ckb-anim.h:70
int ckb_frame(ckb_runctx *context)
Definition: main.c:137
unsigned keycount
Definition: ckb-anim.h:141
#define CKB_PRESET_START(name)
Definition: ckb-anim.h:85
void ckb_time(ckb_runctx *context, double delta)
Definition: main.c:126
#define CKB_KPMODE(mode)
Definition: ckb-anim.h:93
int pressed
Definition: main.c:42
#define CKB_PARAM_AGRADIENT(name, prefix, postfix, default)
Definition: ckb-anim.h:80
#define CKB_LIVEPARAMS(enable)
Definition: ckb-anim.h:104
void anim_remove(int index)
Definition: main.c:71
int y
Definition: ckb-anim.h:133
int x
Definition: main.c:44
void ckb_info()
Definition: main.c:5
double pressestofull
Definition: main.c:38
#define CKB_PARSE_LONG(param_name, value_ptr)
Definition: ckb-anim.h:115
#define CKB_PARSE_BOOL(param_name, value_ptr)
Definition: ckb-anim.h:117
void ckb_init(ckb_runctx *context)
Definition: main.c:57
#define CKB_REPEAT(enable)
Definition: ckb-anim.h:99
void anim_add(int index)
Definition: main.c:65
#define CKB_KEYCLEAR(context)
Definition: ckb-anim.h:148
long ffade
Definition: main.c:37
void ckb_start(ckb_runctx *context, int state)
Definition: main.c:114
#define CKB_PRESET_PARAM(name, value)
Definition: ckb-anim.h:86
ckb_key * keys
Definition: ckb-anim.h:140
#define CKB_PARSE_DOUBLE(param_name, value_ptr)
Definition: ckb-anim.h:116
unsigned int usages
Definition: main.c:41
#define CKB_PARAM_BOOL(name, text, default)
Definition: ckb-anim.h:76
void ckb_alpha_blend(ckb_key *key, float a, float r, float g, float b)
Definition: ckb-anim.h:283
int y
Definition: main.c:45
void ckb_grad_color(float *a, float *r, float *g, float *b, const ckb_gradient *grad, float pos)
Definition: ckb-anim.h:254