int clip_GTK_NOTEBOOKGETSCROLLABLE(ClipMachine * cm) { C_widget *cntb = _fetch_cw_arg(cm); CHECKCWID(cntb,GTK_IS_NOTEBOOK); _clip_retl(cm, gtk_notebook_get_scrollable(GTK_NOTEBOOK(cntb->widget))); return 0; err: return 1; }
int wxNotebook::HitTest(const wxPoint& pt, long *flags) const { GtkAllocation a; gtk_widget_get_allocation(m_widget, &a); const int x = a.x; const int y = a.y; const size_t count = GetPageCount(); size_t i = 0; #ifndef __WXGTK3__ GtkNotebook * notebook = GTK_NOTEBOOK(m_widget); if (gtk_notebook_get_scrollable(notebook)) i = g_list_position( notebook->children, notebook->first_tab ); #endif for ( ; i < count; i++ ) { wxGtkNotebookPage* pageData = GetNotebookPage(i); GtkWidget* box = pageData->m_box; const gint border = gtk_container_get_border_width(GTK_CONTAINER(box)); if ( IsPointInsideWidget(pt, box, x, y, border) ) { // ok, we're inside this tab -- now find out where, if needed if ( flags ) { if (pageData->m_image && IsPointInsideWidget(pt, pageData->m_image, x, y)) { *flags = wxBK_HITTEST_ONICON; } else if (IsPointInsideWidget(pt, pageData->m_label, x, y)) { *flags = wxBK_HITTEST_ONLABEL; } else { *flags = wxBK_HITTEST_ONITEM; } } return i; } } if ( flags ) { *flags = wxBK_HITTEST_NOWHERE; wxWindowBase * page = GetCurrentPage(); if ( page ) { // rect origin is in notebook's parent coordinates wxRect rect = page->GetRect(); // adjust it to the notebook's coordinates wxPoint pos = GetPosition(); rect.x -= pos.x; rect.y -= pos.y; if ( rect.Contains( pt ) ) *flags |= wxBK_HITTEST_ONPAGE; } } return wxNOT_FOUND; }
int wxNotebook::HitTest(const wxPoint& pt, long *flags) const { const gint x = m_widget->allocation.x; const gint y = m_widget->allocation.y; const size_t count = GetPageCount(); size_t i = 0; // MR: Code to fix HitTest index return when tabs are scrolled. // No idea if it would work for GTK1 #if 0 GtkNotebook * notebook = GTK_NOTEBOOK(m_widget); if (gtk_notebook_get_scrollable(notebook)); i = g_list_position( notebook->children, notebook->first_tab ); #endif for ( ; i < count; i++ ) { wxGtkNotebookPage* nb_page = GetNotebookPage(i); GtkWidget *box = nb_page->m_box; // VZ: don't know how to find the border width in GTK+ 1.2 const gint border = 0; if ( IsPointInsideWidget(pt, box, x, y, border) ) { // ok, we're inside this tab -- now find out where, if needed if ( flags ) { GtkWidget *pixmap = NULL; GList *children = gtk_container_children(GTK_CONTAINER(box)); for ( GList *child = children; child; child = child->next ) { if ( GTK_IS_PIXMAP(child->data) ) { pixmap = GTK_WIDGET(child->data); break; } } if ( children ) g_list_free(children); if ( pixmap && IsPointInsideWidget(pt, pixmap, x, y) ) { *flags = wxBK_HITTEST_ONICON; } else if ( IsPointInsideWidget(pt, GTK_WIDGET(nb_page->m_label), x, y) ) { *flags = wxBK_HITTEST_ONLABEL; } else { *flags = wxBK_HITTEST_ONITEM; } } return i; } } if ( flags ) *flags = wxBK_HITTEST_NOWHERE; return wxNOT_FOUND; }
int wxNotebook::HitTest(const wxPoint& pt, long *flags) const { const gint x = m_widget->allocation.x; const gint y = m_widget->allocation.y; const size_t count = GetPageCount(); size_t i = 0; GtkNotebook * notebook = GTK_NOTEBOOK(m_widget); if (gtk_notebook_get_scrollable(notebook)) i = g_list_position( notebook->children, notebook->first_tab ); for ( ; i < count; i++ ) { wxGtkNotebookPage* nb_page = GetNotebookPage(i); GtkWidget *box = nb_page->m_box; const gint border = gtk_container_get_border_width(GTK_CONTAINER(box)); if ( IsPointInsideWidget(pt, box, x, y, border) ) { // ok, we're inside this tab -- now find out where, if needed if ( flags ) { GtkWidget *pixmap = NULL; GList *children = gtk_container_get_children(GTK_CONTAINER(box)); for ( GList *child = children; child; child = child->next ) { if (GTK_IS_IMAGE(child->data)) { pixmap = GTK_WIDGET(child->data); break; } } if ( children ) g_list_free(children); if ( pixmap && IsPointInsideWidget(pt, pixmap, x, y) ) { *flags = wxBK_HITTEST_ONICON; } else if ( IsPointInsideWidget(pt, GTK_WIDGET(nb_page->m_label), x, y) ) { *flags = wxBK_HITTEST_ONLABEL; } else { *flags = wxBK_HITTEST_ONITEM; } } return i; } } if ( flags ) { *flags = wxBK_HITTEST_NOWHERE; wxWindowBase * page = GetCurrentPage(); if ( page ) { // rect origin is in notebook's parent coordinates wxRect rect = page->GetRect(); // adjust it to the notebook's coordinates wxPoint pos = GetPosition(); rect.x -= pos.x; rect.y -= pos.y; if ( rect.Contains( pt ) ) *flags |= wxBK_HITTEST_ONPAGE; } } return wxNOT_FOUND; }