bool prepareMouseButtonEvent(GdkEvent* event, int button) { WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame); if (!view) return false; memset(event, 0, sizeof(event)); event->button.button = button; event->button.x = lastMousePositionX; event->button.y = lastMousePositionY; event->button.window = GTK_WIDGET(view)->window; event->button.device = gdk_device_get_core_pointer(); event->button.state = getStateFlags(); // Mouse up & down events dispatched via g_signal_emit_by_name must offset // their time value, so that WebKit can detect where sequences of mouse // clicks begin and end. This should not interfere with GDK or GTK+ event // processing, because the event is only seen by the widget. event->button.time = GDK_CURRENT_TIME + timeOffset; int xRoot, yRoot; #if GTK_CHECK_VERSION(2, 17, 3) gdk_window_get_root_coords(GTK_WIDGET(view)->window, lastMousePositionX, lastMousePositionY, &xRoot, &yRoot); #else getRootCoords(GTK_WIDGET(view), &xRoot, &yRoot); #endif event->button.x_root = xRoot; event->button.y_root = yRoot; return true; }
static JSValueRef mouseMoveToCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame); if (!view) return JSValueMakeUndefined(context); if (argumentCount < 2) return JSValueMakeUndefined(context); lastMousePositionX = (int)JSValueToNumber(context, arguments[0], exception); g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); lastMousePositionY = (int)JSValueToNumber(context, arguments[1], exception); g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY); event->motion.x = lastMousePositionX; event->motion.y = lastMousePositionY; event->motion.time = GDK_CURRENT_TIME; event->motion.window = gtk_widget_get_window(GTK_WIDGET(view)); g_object_ref(event->motion.window); event->button.device = getDefaultGDKPointerDevice(event->motion.window); event->motion.state = getStateFlags(); event->motion.axes = 0; int xRoot, yRoot; gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(view)), lastMousePositionX, lastMousePositionY, &xRoot, &yRoot); event->motion.x_root = xRoot; event->motion.y_root = yRoot; sendOrQueueEvent(event, false); return JSValueMakeUndefined(context); }
bool prepareMouseButtonEvent(GdkEvent* event, int eventSenderButtonNumber, guint modifiers) { WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame); if (!view) return false; // The logic for mapping EventSender button numbers to GDK button // numbers originates from the Windows EventSender. int gdkButtonNumber = 3; if (eventSenderButtonNumber >= 0 && eventSenderButtonNumber <= 2) gdkButtonNumber = eventSenderButtonNumber + 1; // fast/events/mouse-click-events expects the 4th button // to be event->button = 1, so send a middle-button event. else if (eventSenderButtonNumber == 3) gdkButtonNumber = 2; event->button.button = gdkButtonNumber; event->button.x = lastMousePositionX; event->button.y = lastMousePositionY; event->button.window = gtk_widget_get_window(GTK_WIDGET(view)); g_object_ref(event->button.window); event->button.device = getDefaultGDKPointerDevice(event->button.window); event->button.state = modifiers | getStateFlags(); event->button.time = GDK_CURRENT_TIME; event->button.axes = 0; int xRoot, yRoot; gdk_window_get_root_coords(gtk_widget_get_window(GTK_WIDGET(view)), lastMousePositionX, lastMousePositionY, &xRoot, &yRoot); event->button.x_root = xRoot; event->button.y_root = yRoot; return true; }
static JSValueRef mouseUpCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame); if (!view) return JSValueMakeUndefined(context); GdkEvent event; memset(&event, 0, sizeof(event)); event.type = GDK_BUTTON_RELEASE; event.button.button = 1; if (argumentCount == 1) { event.button.button = (int)JSValueToNumber(context, arguments[0], exception) + 1; g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); } currentEventButton = event.button.button; event.button.x = lastMousePositionX; event.button.y = lastMousePositionY; event.button.window = GTK_WIDGET(view)->window; event.button.time = GDK_CURRENT_TIME; event.button.device = gdk_device_get_core_pointer(); event.button.state = getStateFlags(); down = false; int x_root, y_root; #if GTK_CHECK_VERSION(2,17,3) gdk_window_get_root_coords(GTK_WIDGET(view)->window, lastMousePositionX, lastMousePositionY, &x_root, &y_root); #else getRootCoords(GTK_WIDGET(view), &x_root, &y_root); #endif event.button.x_root = x_root; event.button.y_root = y_root; if ((dragMode && !replayingSavedEvents) || msgQueue[endOfQueue].delay) { msgQueue[endOfQueue].event = event; msgQueue[endOfQueue++].isDragEvent = true; replaySavedEvents(); } else { webkit_web_frame_layout(mainFrame); gboolean return_val; g_signal_emit_by_name(view, "button_release_event", &event, &return_val); } lastClickPositionX = lastMousePositionX; lastClickPositionY = lastMousePositionY; return JSValueMakeUndefined(context); }
static JSValueRef mouseMoveToCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { WebKitWebView* view = webkit_web_frame_get_web_view(mainFrame); if (!view) return JSValueMakeUndefined(context); if (argumentCount < 2) return JSValueMakeUndefined(context); lastMousePositionX = (int)JSValueToNumber(context, arguments[0], exception); g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); lastMousePositionY = (int)JSValueToNumber(context, arguments[1], exception); g_return_val_if_fail((!exception || !*exception), JSValueMakeUndefined(context)); GdkEvent event; memset(&event, 0, sizeof(event)); event.type = GDK_MOTION_NOTIFY; event.motion.x = lastMousePositionX; event.motion.y = lastMousePositionY; event.motion.time = GDK_CURRENT_TIME; event.motion.window = GTK_WIDGET(view)->window; event.motion.device = gdk_device_get_core_pointer(); event.motion.state = getStateFlags(); int xRoot, yRoot; #if GTK_CHECK_VERSION(2,17,3) gdk_window_get_root_coords(GTK_WIDGET(view)->window, lastMousePositionX, lastMousePositionY, &xRoot, &yRoot); #else getRootCoords(GTK_WIDGET(view), &xRoot, &yRoot); #endif event.motion.x_root = xRoot; event.motion.y_root = yRoot; sendOrQueueEvent(event); return JSValueMakeUndefined(context); }
void DecisionMakerNode::callbackFromFinalWaypoint(const autoware_msgs::Lane &msg) { if (!hasvMap()) { std::cerr << "Not found vmap subscribe" << std::endl; return; } if (!ctx->isCurrentState(state_machine::DRIVE_STATE)) { std::cerr << "State is not DRIVE_STATE[" << ctx->getCurrentStateName() << "]" << std::endl; return; } // cached current_finalwaypoints_ = msg; // stopline static size_t previous_idx = 0; size_t idx = param_stopline_target_waypoint_ + (current_velocity_ * param_stopline_target_ratio_); idx = current_finalwaypoints_.waypoints.size() - 1 > idx ? idx : current_finalwaypoints_.waypoints.size() - 1; CurrentStoplineTarget_ = current_finalwaypoints_.waypoints.at(idx); for (size_t i = (previous_idx > idx) ? idx : previous_idx; i <= idx; i++) { if (i < current_finalwaypoints_.waypoints.size()) { if (current_finalwaypoints_.waypoints.at(i).wpstate.stopline_state == autoware_msgs::WaypointState::TYPE_STOPLINE) { ctx->setCurrentState(state_machine::DRIVE_ACC_STOPLINE_STATE); closest_stopline_waypoint_ = CurrentStoplineTarget_.gid; } if (current_finalwaypoints_.waypoints.at(i).wpstate.stopline_state == autoware_msgs::WaypointState::TYPE_STOP) ctx->setCurrentState(state_machine::DRIVE_ACC_STOP_STATE); } } previous_idx = idx; // steering idx = current_finalwaypoints_.waypoints.size() - 1 > param_target_waypoint_ ? param_target_waypoint_ : current_finalwaypoints_.waypoints.size() - 1; if (ctx->isCurrentState(state_machine::DRIVE_BEHAVIOR_LANECHANGE_LEFT_STATE)) { ctx->setCurrentState(state_machine::DRIVE_STR_LEFT_STATE); } if (ctx->isCurrentState(state_machine::DRIVE_BEHAVIOR_LANECHANGE_RIGHT_STATE)) { ctx->setCurrentState(state_machine::DRIVE_STR_RIGHT_STATE); } else { state_machine::StateFlags _TargetStateFlag; for (size_t i = idx; i > 0; i--) { _TargetStateFlag = getStateFlags(current_finalwaypoints_.waypoints.at(i).wpstate.steering_state); if (_TargetStateFlag != state_machine::DRIVE_STR_STRAIGHT_STATE) { break; } } ctx->setCurrentState(_TargetStateFlag); } // for publish plan of velocity publishToVelocityArray(); }