作者:sjn197
项目:u
func (a *area) Repaint(r image.Rectangle) {
r = image.Rect(0, 0, a.width, a.height).Intersect(r)
if r.Empty() {
return
}
C.gtk_widget_queue_draw_area(a.widget, C.gint(r.Min.X), C.gint(r.Min.Y), C.gint(r.Dx()), C.gint(r.Dy()))
}
作者:reuse
项目:gg
func DumpUnionInfo(info *C.GIUnionInfo) {
nFields := C.g_union_info_get_n_fields(info)
p("%d fields\n", nFields)
for i := C.gint(0); i < nFields; i++ {
field := C.g_union_info_get_field(info, i)
DumpFieldInfo(field)
}
nMethods := C.g_union_info_get_n_methods(info)
p("%d methods\n", nMethods)
for i := C.gint(0); i < nMethods; i++ {
method := C.g_union_info_get_method(info, i)
DumpFunctionInfo(method)
}
isDiscriminated := C.g_union_info_is_discriminated(info) == C.gboolean(1)
p("is discriminated %v\n", isDiscriminated)
if isDiscriminated {
offset := C.g_union_info_get_discriminator_offset(info)
p("discriminated offset %d\n", offset)
discriminatedType := C.g_union_info_get_discriminator_type(info)
p("discriminated type %d\n", discriminatedType)
DumpTypeInfo(discriminatedType)
for i := C.gint(0); i < nFields; i++ {
discriminator := C.g_union_info_get_discriminator(info, i)
DumpConstantInfo(discriminator)
}
}
size := C.g_union_info_get_size(info)
p("size %d bytes\n", size)
align := C.g_union_info_get_alignment(info)
p("alignment %d bytes\n", align)
}
作者:kayo
项目:cef2g
func CreateWindow(title string, width int, height int) unsafe.Pointer {
Logger.Println("CreateWindow")
// Create window.
window := C.gtk_window_new(C.GTK_WINDOW_TOPLEVEL)
// Default size.
C.gtk_window_set_default_size(C.ToGtkWindow(window),
C.gint(width), C.gint(height))
// Center.
C.gtk_window_set_position(C.ToGtkWindow(window), C.GTK_WIN_POS_CENTER)
// Title.
csTitle := C.CString(title)
defer C.free(unsafe.Pointer(csTitle))
C.gtk_window_set_title(C.ToGtkWindow(window), (*C.gchar)(csTitle))
// TODO: focus
// g_signal_connect(window, "focus", G_CALLBACK(&HandleFocus), NULL);
// CEF requires a container. Embedding browser in a top
// level window fails.
vbox := C.gtk_vbox_new(0, 0)
C.gtk_container_add(C.ToGtkContainer(window), vbox)
// Show.
C.gtk_widget_show_all(window)
return unsafe.Pointer(vbox)
}
作者:hwc
项目:go-gt
// GDK_AVAILABLE_IN_3_2
// GtkWidget *gtk_grid_get_child_at (GtkGrid *grid,
// gint left,
// gint top);
func (g *Grid) GetChildAt(left, top int32) *Widget {
ret := C.gtk_grid_get_child_at(g.c, C.gint(left), C.gint(top))
if ret == nil {
return nil
}
return &Widget{ret}
}
作者:gotk
项目:gotk
// GetIterAtPosition is a wrapper around gtk_text_view_get_iter_at_position().
func (v *TextView) GetIterAtPosition(x, y int) (*TextIter, int) {
var iter TextIter
var trailing C.gint
iiter := (C.GtkTextIter)(iter)
C.gtk_text_view_get_iter_at_position(v.native(), &iiter, &trailing, C.gint(x), C.gint(y))
return &iter, int(trailing)
}
作者:lamproa
项目:hgu
func startGui(width, height int, title string, port int) {
C.gtk_init(nil, nil) //gtk.Init(nil)
window := C.window
window = C.gtk_window_new(C.GTK_WINDOW_TOPLEVEL)
C.gtk_window_set_title(C.to_GtkWindow(window), C.to_gcharptr(C.CString(title)))
C.connect_destroy(window)
vbox := C.gtk_hbox_new(0, 1)
C.webview = C._new_webkit()
C.gtk_container_add(C.to_GtkContainer(vbox), C.webview)
C.loadUri(C.webview, C.to_gcharptr(C.CString(fmt.Sprintf("http://127.0.0.1:%d", port))))
C.gtk_container_add(C.to_GtkContainer(window), vbox)
C.gtk_widget_set_size_request(window, C.gint(width), C.gint(height))
C.gtk_widget_show(vbox)
C.gtk_widget_show(window) //Window.ShowAll()
C.gtk_widget_show(C.webview)
/*
This only matters if proxy is stupid!
proxy := os.Getenv("HTTP_PROXY")
if len(proxy) > 0 {
ptr := C.CString(uri)
C.proxyshit(ptr)
C.free(ptr)
}
*/
C.gtk_main() //gtk.GtkMain()
}
作者:NotBadPa
项目:u
func newWindow(title string, width int, height int, control Control) *window {
widget := C.gtk_window_new(C.GTK_WINDOW_TOPLEVEL)
ctitle := togstr(title)
defer freegstr(ctitle)
w := &window{
widget: widget,
wc: (*C.GtkContainer)(unsafe.Pointer(widget)),
bin: (*C.GtkBin)(unsafe.Pointer(widget)),
window: (*C.GtkWindow)(unsafe.Pointer(widget)),
closing: newEvent(),
}
C.gtk_window_set_title(w.window, ctitle)
g_signal_connect(
C.gpointer(unsafe.Pointer(w.window)),
"delete-event",
C.GCallback(C.windowClosing),
C.gpointer(unsafe.Pointer(w)))
C.gtk_window_resize(w.window, C.gint(width), C.gint(height))
w.container = newContainer(control)
w.container.setParent(&controlParent{w.wc})
// for dialogs; otherwise, they will be modal to all windows, not just this one
w.group = C.gtk_window_group_new()
C.gtk_window_group_add_window(w.group, w.window)
return w
}
作者:reuse
项目:opla
func toGValue(v interface{}) *C.GValue {
value := C.gvalue_new()
switch reflect.TypeOf(v).Kind() {
case reflect.String:
C.g_value_init(value, C.G_TYPE_STRING)
cStr := C.CString(v.(string))
defer C.free(unsafe.Pointer(cStr))
C.g_value_set_string(value, (*C.gchar)(unsafe.Pointer(cStr)))
case reflect.Int:
C.g_value_init(value, C.G_TYPE_INT)
C.g_value_set_int(value, C.gint(v.(int)))
case reflect.Struct:
switch rv := v.(type) {
case Fraction:
C.g_value_init(value, C.gst_fraction_get_type())
C.gst_value_set_fraction(value, C.gint(rv.N), C.gint(rv.D))
default:
p("unknown struct type %v\n", v)
panic("fixme") //TODO
}
case reflect.Ptr:
switch reflect.TypeOf(v) {
case gstCapsType:
C.g_value_init(value, C.gst_caps_get_type())
C.gst_value_set_caps(value, v.(*C.GstCaps))
default:
panic(fmt.Sprintf("unknown type %v", v)) //TODO
}
default:
panic(fmt.Sprintf("unknown type %v", v)) //TODO
}
return value
}
作者:reuse
项目:ggi
/*
Creates a new, empty animation.
*/
func PixbufSimpleAnimNew(width int, height int, rate float32) (return__ *PixbufSimpleAnim) {
var __cgo__return__ interface{}
__cgo__return__ = C.gdk_pixbuf_simple_anim_new(C.gint(width), C.gint(height), C.gfloat(rate))
if __cgo__return__ != nil {
return__ = NewPixbufSimpleAnimFromCPointer(unsafe.Pointer(reflect.ValueOf(__cgo__return__).Pointer()))
}
return
}
作者:reuse
项目:my-editor-g
func draw_selections(viewp, bufferp, crp unsafe.Pointer, mark_pairs []unsafe.Pointer) {
view := (*C.GtkTextView)(viewp)
buffer := (*C.GtkTextBuffer)(bufferp)
cr := (*C.cairo_t)(crp)
var alloc C.GtkAllocation
C.gtk_widget_get_allocation((*C.GtkWidget)(viewp), &alloc)
n := len(mark_pairs)
var start_mark, stop_mark *C.GtkTextMark
var location C.GdkRectangle
var iter C.GtkTextIter
var x, y C.gint
var dx, dy C.double
for i := 0; i < n; i += 2 {
start_mark = (*C.GtkTextMark)(mark_pairs[i])
C.gtk_text_buffer_get_iter_at_mark(buffer, &iter, start_mark)
C.gtk_text_view_get_iter_location(view, &iter, &location)
C.gtk_text_view_buffer_to_window_coords(view, C.GTK_TEXT_WINDOW_WIDGET, C.gint(location.x), C.gint(location.y), &x, &y)
if C.int(x) > alloc.width || C.int(y) > alloc.height || x < 0 || y < 0 {
continue
}
dx = C.double(x)
dy = C.double(y)
C.cairo_set_source_rgb(cr, 1, 0, 0)
C.cairo_move_to(cr, dx, dy)
C.cairo_set_line_width(cr, 2)
C.cairo_line_to(cr, dx+6, dy)
C.cairo_stroke(cr)
C.cairo_move_to(cr, dx, dy)
C.cairo_set_line_width(cr, 1)
C.cairo_line_to(cr, dx, dy+C.double(location.height))
C.cairo_stroke(cr)
stop_mark = (*C.GtkTextMark)(mark_pairs[i+1])
C.gtk_text_buffer_get_iter_at_mark(buffer, &iter, stop_mark)
C.gtk_text_view_get_iter_location(view, &iter, &location)
C.gtk_text_view_buffer_to_window_coords(view, C.GTK_TEXT_WINDOW_WIDGET, C.gint(location.x), C.gint(location.y), &x, &y)
if C.int(x) > alloc.width || C.int(y) > alloc.height || x < 0 || y < 0 {
continue
}
dx = C.double(x)
dy = C.double(y)
C.cairo_set_source_rgb(cr, 0, 1, 0)
C.cairo_move_to(cr, dx, dy)
C.cairo_set_line_width(cr, 1)
C.cairo_line_to(cr, dx, dy+C.double(location.height))
C.cairo_stroke(cr)
C.cairo_move_to(cr, dx, dy+C.double(location.height))
C.cairo_set_line_width(cr, 2)
C.cairo_line_to(cr, dx-6, dy+C.double(location.height))
C.cairo_stroke(cr)
}
}
作者:yamnikov-ole
项目:gotk
// TranslateCoordinates is a wrapper around gtk_widget_translate_coordinates().
func (v *Widget) TranslateCoordinates(dest IWidget, srcX, srcY int) (destX, destY int, e error) {
cdest := nullableWidget(dest)
var cdestX, cdestY C.gint
c := C.gtk_widget_translate_coordinates(v.native(), cdest, C.gint(srcX), C.gint(srcY), &cdestX, &cdestY)
if !gobool(c) {
return 0, 0, errors.New("translate coordinates failed")
}
return int(cdestX), int(cdestY), nil
}
作者:sjn197
项目:u
func finishNewTable(b *tablebase, ty reflect.Type) Table {
widget := C.gtk_tree_view_new()
t := &table{
scroller: newScroller(widget, true, true, false), // natively scrollable; has a border; no overlay
tablebase: b,
treeview: (*C.GtkTreeView)(unsafe.Pointer(widget)),
crtocol: make(map[*C.GtkCellRendererToggle]int),
selected: newEvent(),
}
model := C.newTableModel(unsafe.Pointer(t))
t.model = model
t.modelgtk = (*C.GtkTreeModel)(unsafe.Pointer(model))
t.selection = C.gtk_tree_view_get_selection(t.treeview)
g_signal_connect(
C.gpointer(unsafe.Pointer(t.selection)),
"changed",
C.GCallback(C.tableSelectionChanged),
C.gpointer(unsafe.Pointer(t)))
C.gtk_tree_view_set_model(t.treeview, t.modelgtk)
for i := 0; i < ty.NumField(); i++ {
colname := ty.Field(i).Tag.Get("uicolumn")
if colname == "" {
colname = ty.Field(i).Name
}
cname := togstr(colname)
switch {
case ty.Field(i).Type == reflect.TypeOf((*image.RGBA)(nil)):
// can't use GDK_TYPE_PIXBUF here because it's a macro that expands to a function and cgo hates that
t.types = append(t.types, C.gdk_pixbuf_get_type())
C.tableAppendColumn(t.treeview, C.gint(i), cname,
C.gtk_cell_renderer_pixbuf_new(), attribPixbuf)
case ty.Field(i).Type.Kind() == reflect.Bool:
t.types = append(t.types, C.G_TYPE_BOOLEAN)
cr := C.gtk_cell_renderer_toggle_new()
crt := (*C.GtkCellRendererToggle)(unsafe.Pointer(cr))
t.crtocol[crt] = i
g_signal_connect(C.gpointer(unsafe.Pointer(cr)),
"toggled",
C.GCallback(C.goTableModel_toggled),
C.gpointer(unsafe.Pointer(t)))
C.tableAppendColumn(t.treeview, C.gint(i), cname,
cr, attribActive)
default:
t.types = append(t.types, C.G_TYPE_STRING)
C.tableAppendColumn(t.treeview, C.gint(i), cname,
C.gtk_cell_renderer_text_new(), attribText)
}
freegstr(cname) // free now (not deferred) to conserve memory
}
// and for some GtkTreeModel boilerplate
t.nColumns = C.gint(ty.NumField())
return t
}
作者:Nazgan
项目:go-gt
func (v *GdkWindow) Invalidate(rect *Rectangle, invalidate_children bool) {
if rect != nil {
var _rect C.GdkRectangle
_rect.x = C.gint(rect.X)
_rect.y = C.gint(rect.Y)
_rect.width = C.gint(rect.Width)
_rect.height = C.gint(rect.Height)
C.gdk_window_invalidate_rect(v.Window, &_rect, bool2gboolean(invalidate_children))
} else {
C.gdk_window_invalidate_rect(v.Window, nil, bool2gboolean(invalidate_children))
}
}
作者:rosatole
项目:coyi
// AddPalette() is a wrapper around gtk_color_chooser_add_palette().
func (v *ColorChooser) AddPalette(orientation Orientation, colors_per_line int, colors []*gdk.RGBA) {
n_colors := len(colors)
var c_colors []C.GdkRGBA
for _, c := range colors {
c_colors = append(c_colors, *(*C.GdkRGBA)(unsafe.Pointer(c.Native())))
}
C.gtk_color_chooser_add_palette(
v.native(),
C.GtkOrientation(orientation),
C.gint(colors_per_line),
C.gint(n_colors),
&c_colors[0],
)
}
作者:rosatole
项目:coyi
// Insert is a wrapper around gtk_combo_box_text_insert().
func (v *ComboBoxText) Insert(position int, id, text string) {
cid := C.CString(id)
ctext := C.CString(text)
defer C.free(unsafe.Pointer(cid))
defer C.free(unsafe.Pointer(ctext))
C.gtk_combo_box_text_insert(v.native(), C.gint(position), (*C.gchar)(cid), (*C.gchar)(ctext))
}
作者:rosatole
项目:coyi
// MenuItemNewFromModel is a wrapper around g_menu_item_new_from_model().
func MenuItemNewFromModel(model *MenuModel, index int) *MenuItem {
c := C.g_menu_item_new_from_model(model.native(), C.gint(index))
if c == nil {
return nil
}
return wrapMenuItem(wrapObject(unsafe.Pointer(c)))
}
作者:jqln-
项目:icon-mas
// GetIcon takes the name of an icon and a size as arguments. It returns the closest
// matching icon file from the theme.
func (t GTKTheme) GetIcon(name string, size int) string {
// TODO: User-specified flags.
var flags C.GtkIconLookupFlags
// Lookup the icon.
cName := C.CString(name)
defer C.free(unsafe.Pointer(cName))
iconInfo := C.gtk_icon_theme_lookup_icon(t.theme, (*C.gchar)(cName), C.gint(size), flags)
// Check the lookup was successful.
if iconInfo == nil {
return ""
}
// gtk_icon_info_free is deprecated, but we seem to have issues using g_object_unref.
defer C.gtk_icon_info_free(iconInfo)
//defer C.g_object_unref(C.gpointer(iconInfo))
// Check the icon's filename.
cFilename := C.gtk_icon_info_get_filename(iconInfo)
if cFilename == nil {
return ""
}
filename := C.GoString((*C.char)(cFilename))
return filename
}
作者:reuse
项目:gg
func DumpCallableInfo(info *C.GICallableInfo) {
throwsError := C.g_callable_info_can_throw_gerror(info) == C.gboolean(1)
p("can throws error %v\n", throwsError)
nArgs := C.g_callable_info_get_n_args(info)
for i := C.gint(0); i < nArgs; i++ {
argInfo := C.g_callable_info_get_arg(info, i)
DumpArgInfo(argInfo)
}
returnOwnership := C.g_callable_info_get_caller_owns(info)
p("return value ownership %s\n", TransferGetName(returnOwnership))
returnType := C.g_callable_info_get_return_type(info)
defer C.g_base_info_unref(asBaseInfo(returnType))
p("return type %v\n", returnType)
DumpTypeInfo(returnType)
isMethod := C.g_callable_info_is_method(info) == C.gboolean(1)
p("is method %v\n", isMethod)
var iter C.GIAttributeIter
var key, value *C.char
for C.g_callable_info_iterate_return_attributes(info, &iter, &key, &value) == C.gboolean(1) {
p("Attr %s = %s\n", C.GoString(key), C.GoString(value))
}
mayReturnNull := C.g_callable_info_may_return_null(info) == C.gboolean(1)
p("may return null %v\n", mayReturnNull)
skipReturn := C.g_callable_info_skip_return(info) == C.gboolean(1)
p("skip return %v\n", skipReturn)
}
作者:reuse
项目:ggi
/*
Creates a new pixbuf by loading an image from an input stream.
The file format is detected automatically. If %NULL is returned, then
@error will be set. The @cancellable can be used to abort the operation
from another thread. If the operation was cancelled, the error
%G_IO_ERROR_CANCELLED will be returned. Other possible errors are in
the #GDK_PIXBUF_ERROR and %G_IO_ERROR domains.
The image will be scaled to fit in the requested size, optionally
preserving the image's aspect ratio.
When preserving the aspect ratio, a @width of -1 will cause the image to be
scaled to the exact given height, and a @height of -1 will cause the image
to be scaled to the exact given width. If both @width and @height are
given, this function will behave as if the smaller of the two values
is passed as -1.
When not preserving aspect ratio, a @width or @height of -1 means to not
scale the image at all in that dimension.
The stream is not closed.
*/
func PixbufNewFromStreamAtScale(stream *C.GInputStream, width int, height int, preserve_aspect_ratio bool, cancellable *C.GCancellable) (return__ *Pixbuf, __err__ error) {
__cgo__preserve_aspect_ratio := C.gboolean(0)
if preserve_aspect_ratio {
__cgo__preserve_aspect_ratio = C.gboolean(1)
}
var __cgo_error__ *C.GError
var __cgo__return__ interface{}
__cgo__return__ = C.gdk_pixbuf_new_from_stream_at_scale(stream, C.gint(width), C.gint(height), __cgo__preserve_aspect_ratio, cancellable, &__cgo_error__)
if __cgo__return__ != nil {
return__ = NewPixbufFromCPointer(unsafe.Pointer(reflect.ValueOf(__cgo__return__).Pointer()))
}
if __cgo_error__ != nil {
__err__ = errors.New(C.GoString((*C.char)(unsafe.Pointer(__cgo_error__.message))))
}
return
}
作者:twstrik
项目:gotk
// GetColumn() is a wrapper around gtk_tree_view_get_column().
func (v *TreeView) GetColumn(n int) *TreeViewColumn {
c := C.gtk_tree_view_get_column(v.native(), C.gint(n))
if c == nil {
return nil
}
return wrapTreeViewColumn(wrapObject(unsafe.Pointer(c)))
}