+
+ int dx = pointer_x - prev_x;
+ int dy = pointer_y - prev_y;
+
+ if(dx || dy) {
+ MouseMotionFuncType motion_callback = top->get_mouse_motion_callback();
+ if(motion_callback) {
+ Rect rect = top->get_rect();
+ motion_callback(top, pointer_x - rect.x, pointer_y - rect.y);
+ }
+ }
+
+ MouseButtonFuncType button_callback = top->get_mouse_button_callback();
+ if(button_callback && (bnstate != prev_state)) {
+ int num_bits = sizeof bnstate * CHAR_BIT;
+ for(int i=0; i<num_bits; i++) {
+ int s = (bnstate >> i) & 1;
+ int prev_s = (prev_state >> i) & 1;
+ if(s != prev_s) {
+ button_callback(top, i, s);
+ }
+ }
+ }
+
+ unsigned char *fb = get_framebuffer();
+ Rect scr = get_screen_size();
+ fb += (scr.width * pointer_y + pointer_x) * 4;
+ fb[0] = 0;
+ fb[1] = 0;
+ fb[2] = 0;