+
+ 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);
+ }
+ }
+ }