static void gail_pixmap_get_image_size (AtkImage *obj, gint *width, gint *height) { GtkWidget *widget; GtkPixmap *pixmap; *width = -1; *height = -1; g_return_if_fail (GAIL_IS_PIXMAP (obj)); widget = GTK_ACCESSIBLE (obj)->widget; if (widget == 0) /* State is defunct */ return; g_return_if_fail (GTK_IS_PIXMAP (widget)); pixmap = GTK_PIXMAP (widget); if (pixmap->pixmap) gdk_drawable_get_size (pixmap->pixmap, width, height); }
/* Draws a line, using the foreground color and other attributes of the GdkGC. */ int clip_GDK_DRAWLINE(ClipMachine * ClipMachineMemory) { C_widget *cwid = _fetch_cw_arg(ClipMachineMemory); C_object *cgc = _fetch_cobject(ClipMachineMemory, _clip_spar(ClipMachineMemory, 2)); gint x1 = _clip_parni(ClipMachineMemory, 3); gint y1 = _clip_parni(ClipMachineMemory, 4); gint x2 = _clip_parni(ClipMachineMemory, 5); gint y2 = _clip_parni(ClipMachineMemory, 6); GdkDrawable *drw = NULL; CHECKCWID(cwid, GTK_IS_WIDGET); CHECKOPT2(2, NUMERIC_type_of_ClipVarType, MAP_type_of_ClipVarType); CHECKCOBJ(cgc, GDK_IS_GC(cgc)); CHECKOPT(3, NUMERIC_type_of_ClipVarType); CHECKOPT(4, NUMERIC_type_of_ClipVarType); CHECKOPT(5, NUMERIC_type_of_ClipVarType); CHECKOPT(6, NUMERIC_type_of_ClipVarType); drw = cwid->widget->window; if (GTK_IS_PIXMAP(cwid->widget)) drw = GTK_PIXMAP(cwid->widget)->pixmap; gdk_draw_line(drw, GDK_GC(cgc->object), x1, y1, x2, y2); return 0; err: return 1; }
/* Note: A rectangle drawn filled is 1 pixel smaller in both dimensions * than a rectangle outlined. Calling gdk_draw_rectangle (window, gc, TRUE, 0, 0, 20, 20) * results in a filled rectangle 20 pixels wide and 20 pixels high. Calling * gdk_draw_rectangle (window, gc, FALSE, 0, 0, 20, 20) results in an outlined * rectangle with corners at (0, 0), (0, 20), (20, 20), and (20, 0), which makes * it 21 pixels wide and 21 pixels high. */ int clip_GDK_DRAWRECTANGLE(ClipMachine * ClipMachineMemory) { C_widget *cwid = _fetch_cw_arg(ClipMachineMemory); C_object *cgc = _fetch_cobject(ClipMachineMemory, _clip_spar(ClipMachineMemory, 2)); gint filled = BOOL_OPTION(ClipMachineMemory, 3, TRUE); gint x = _clip_parni(ClipMachineMemory, 4); gint y = _clip_parni(ClipMachineMemory, 5); gint width = _clip_parni(ClipMachineMemory, 6); gint height = _clip_parni(ClipMachineMemory, 7); GdkDrawable *drw = NULL; CHECKCWID(cwid, GTK_IS_WIDGET); CHECKOPT2(2, NUMERIC_type_of_ClipVarType, MAP_type_of_ClipVarType); CHECKCOBJ(cgc, GDK_IS_GC(cgc)); CHECKOPT(3, LOGICAL_type_of_ClipVarType); CHECKOPT(4, NUMERIC_type_of_ClipVarType); CHECKOPT(5, NUMERIC_type_of_ClipVarType); CHECKOPT(6, NUMERIC_type_of_ClipVarType); CHECKOPT(7, NUMERIC_type_of_ClipVarType); drw = cwid->widget->window; if (GTK_IS_PIXMAP(cwid->widget)) drw = GTK_PIXMAP(cwid->widget)->pixmap; gdk_draw_rectangle(drw, GDK_GC(cgc->object), filled, x, y, width, height); return 0; err: return 1; }
/* Alena */ int clip_GDK_DRAWPIXMAP(ClipMachine * ClipMachineMemory) { C_widget *cwid = _fetch_cw_arg(ClipMachineMemory); C_object *cgc = _fetch_cobject(ClipMachineMemory, _clip_spar(ClipMachineMemory, 2)); C_widget *cpix = _fetch_cwidget(ClipMachineMemory, _clip_spar(ClipMachineMemory, 3)); gint xsrc = _clip_parni(ClipMachineMemory, 4); gint ysrc = _clip_parni(ClipMachineMemory, 5); gint xdest = _clip_parni(ClipMachineMemory, 6); gint ydest = _clip_parni(ClipMachineMemory, 7); gint width = _clip_parni(ClipMachineMemory, 8); gint height = _clip_parni(ClipMachineMemory, 9); GdkDrawable *drw = NULL; CHECKARG2(1, NUMERIC_type_of_ClipVarType, MAP_type_of_ClipVarType); CHECKCWID(cwid, GTK_IS_WIDGET); CHECKARG2(2, NUMERIC_type_of_ClipVarType, MAP_type_of_ClipVarType); CHECKCOBJ(cgc, GDK_IS_GC(cgc)); CHECKARG2(3, NUMERIC_type_of_ClipVarType, MAP_type_of_ClipVarType); CHECKCWID(cpix, GTK_IS_WIDGET); CHECKARG(4, NUMERIC_type_of_ClipVarType); CHECKARG(5, NUMERIC_type_of_ClipVarType); CHECKARG(6, NUMERIC_type_of_ClipVarType); CHECKARG(7, NUMERIC_type_of_ClipVarType); CHECKARG(8, NUMERIC_type_of_ClipVarType); CHECKARG(9, NUMERIC_type_of_ClipVarType); drw = cwid->widget->window; if (GTK_IS_PIXMAP(cwid->widget)) drw = GTK_PIXMAP(cwid->widget)->pixmap; gdk_draw_pixmap(drw, GDK_GC(cgc->object), GTK_PIXMAP(cpix->widget)->pixmap, xsrc, ysrc, xdest, ydest, width, height); return 0; err: return 1; }
/* Draws a number of characters in the given font or fontset. */ int clip_GDK_DRAWTEXT(ClipMachine * ClipMachineMemory) { C_widget *cwid = _fetch_cw_arg(ClipMachineMemory); C_object *cgc = _fetch_cobject(ClipMachineMemory, _clip_spar(ClipMachineMemory, 2)); C_object *font = _fetch_cobject(ClipMachineMemory, _clip_spar(ClipMachineMemory, 3)); gint x = _clip_parni(ClipMachineMemory, 4); gint y = _clip_parni(ClipMachineMemory, 5); gchar *text = _clip_parc(ClipMachineMemory, 6); gint length = _clip_parni(ClipMachineMemory, 7); GdkDrawable *drw = NULL; CHECKCWID(cwid, GTK_IS_WIDGET); CHECKOPT2(2, NUMERIC_type_of_ClipVarType, MAP_type_of_ClipVarType); CHECKCOBJ(cgc, GDK_IS_GC(cgc)); CHECKOPT2(3, NUMERIC_type_of_ClipVarType, MAP_type_of_ClipVarType); CHECKCOBJ(cgc, GDK_IS_FONT(font)); CHECKOPT(4, NUMERIC_type_of_ClipVarType); CHECKOPT(5, NUMERIC_type_of_ClipVarType); CHECKOPT(6, CHARACTER_type_of_ClipVarType); CHECKOPT(7, NUMERIC_type_of_ClipVarType); drw = cwid->widget->window; if (GTK_IS_PIXMAP(cwid->widget)) drw = GTK_PIXMAP(cwid->widget)->pixmap; LOCALE_TO_UTF(text); gdk_draw_text(drw, GDK_FONT(font->object), GDK_GC(cgc->object), x, y, text, length); FREE_TEXT(text); return 0; err: return 1; }
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; }
bool wxNotebook::SetPageImage( size_t page, int image ) { /* HvdH 28-12-98: now it works, but it's a bit of a kludge */ wxGtkNotebookPage* nb_page = GetNotebookPage(page); if (!nb_page) return FALSE; /* Optimization posibility: return immediately if image unchanged. * Not enabled because it may break existing (stupid) code that * manipulates the imagelist to cycle images */ /* if (image == nb_page->m_image) return true; */ /* For different cases: 1) no image -> no image 2) image -> no image 3) no image -> image 4) image -> image */ if (image == -1 && nb_page->m_image == -1) return true; /* Case 1): Nothing to do. */ GtkWidget *pixmapwid = NULL; if (nb_page->m_image != -1) { /* Case 2) or 4). There is already an image in the gtkhbox. Let's find it */ GList *child = gtk_container_children(GTK_CONTAINER(nb_page->m_box)); while (child) { if (GTK_IS_PIXMAP(child->data)) { pixmapwid = GTK_WIDGET(child->data); break; } child = child->next; } /* We should have the pixmap widget now */ wxASSERT(pixmapwid != NULL); if (image == -1) { /* If there's no new widget, just remove the old from the box */ gtk_container_remove(GTK_CONTAINER(nb_page->m_box), pixmapwid); nb_page->m_image = -1; return true; /* Case 2) */ } } /* Only cases 3) and 4) left */ wxASSERT( m_imageList != NULL ); /* Just in case */ /* Construct the new pixmap */ const wxBitmap *bmp = m_imageList->GetBitmapPtr(image); GdkPixmap *pixmap = bmp->GetPixmap(); GdkBitmap *mask = NULL; if ( bmp->GetMask() ) { mask = bmp->GetMask()->GetBitmap(); } if (pixmapwid == NULL) { /* Case 3) No old pixmap. Create a new one and prepend it to the hbox */ pixmapwid = gtk_pixmap_new (pixmap, mask ); /* CHECKME: Are these pack flags okay? */ gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, m_padding); gtk_widget_show(pixmapwid); } else { /* Case 4) Simply replace the pixmap */ gtk_pixmap_set(GTK_PIXMAP(pixmapwid), pixmap, mask); } nb_page->m_image = image; return true; }