Пример #1
0
void GUI::on_draw()
{
	GUI * parent = get_parent();
	if(parent != nullptr)
	{
		// keep object within parent bounds (keep from moving outside parent)
        if(get_x() <= parent->get_x()) {set_position(parent->get_x(), get_y());}
        if(get_y() <= parent->get_y()) {set_position(get_x(), parent->get_y());}
	    if(get_x() >= parent->get_x() + (parent->get_width() - get_width()))   {set_position(parent->get_x() + (parent->get_width() - get_width()), get_y());}
	    if(get_y() >= parent->get_y() + (parent->get_height() - get_height())) {set_position(get_x(), parent->get_y() + (parent->get_height() - get_height()));}
	
	    // keep object from exceeding parent size (width and height) UPDATED: 9-7-2018
	    if(get_width () > parent->get_width ()) set_size(parent->get_width(), get_height()); // if object is wider than parent, make width equal to parent's width
		if(get_height() > parent->get_height()) set_size(get_width(), parent->get_height()); // if object is taller than parent, make height equal to parent's height
	}	
	if(is_visible()) 
	{
		for(int i = 0; i < Factory::get_gui_factory()->get_size(); i++)
		{
			GUI * gui = static_cast<GUI*>(Factory::get_gui_factory()->get_object(i));
			// draw all children if visible (child ui can also have their own visibility)
			if(is_parent_of(*gui)) {
				gui->draw(); 
			}
			// set focus to the gui that is pressed
			if(gui->is_pressed())
		    {
			    gui->set_focused(true);
		    }
		}
	}
	// if mouse is over ui and mouse is pressed, set as current focus
}
Пример #2
0
static GdkWindow *
get_event_window (GdkEventTranslator *translator,
                  XEvent             *xevent)
{
  GdkDeviceManager *device_manager;
  GdkDisplay *display;
  GdkWindow *window;

  device_manager = GDK_DEVICE_MANAGER (translator);
  display = gdk_device_manager_get_display (device_manager);
  window = gdk_x11_window_lookup_for_display (display, xevent->xany.window);

  /* Apply keyboard grabs to non-native windows */
  if (xevent->type == KeyPress || xevent->type == KeyRelease)
    {
      GdkDeviceGrabInfo *info;
      gulong serial;

      serial = _gdk_display_get_next_serial (display);
      info = _gdk_display_has_device_grab (display,
                                           GDK_X11_DEVICE_MANAGER_CORE (device_manager)->core_keyboard,
                                           serial);
      if (info &&
          (!is_parent_of (info->window, window) ||
           !info->owner_events))
        {
          /* Report key event against grab window */
          window = info->window;
        }
    }

  return window;
}