123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425(**************************************************************************)(* Lablgtk *)(* *)(* This program is free software; you can redistribute it *)(* and/or modify it under the terms of the GNU Library General *)(* Public License as published by the Free Software Foundation *)(* version 2, with the exception described in file COPYING which *)(* comes with the library. *)(* *)(* This program is distributed in the hope that it will be useful, *)(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *)(* GNU Library General Public License for more details. *)(* *)(* You should have received a copy of the GNU Library General *)(* Public License along with this program; if not, write to the *)(* Free Software Foundation, Inc., 59 Temple Place, Suite 330, *)(* Boston, MA 02111-1307 USA *)(* *)(* *)(**************************************************************************)(* $Id$ *)openStdLabelsopenGauxopenGobjecttypecolortypergba(* Removed in gtk3
type colormap
*)typevisualtypescreen=[`gdkscreen]objtyperegiontypegctypewindow=[`gdkwindow]objtypecairo=Cairo.contexttypeatomtypekeysym=inttype+'aeventtypedrag_context=[`dragcontext]objtypecursortypexid=int32typenative_windowtypedevicetypedisplayexceptionErrorofstringlet_=Callback.register_exception"gdkerror"(Error"")external_gdk_init:unit->unit="ml_gdk_init"let()=_gdk_init()moduleTags=structinclude(GdkEnums:moduletypeofGdkEnumswithmoduleConv:=GdkEnums.Convandtypexdata:=GdkEnums.xdata)typexdata=[`BYTESofstring|`SHORTSofintarray|`INT32Sofint32array]typexdata_ret=[xdata|`NONE]endopenTagsmoduleConvert=structexternaltest_modifier:modifier->int->bool="ml_test_GdkModifier_val"letmodifieri=List.filter[`SHIFT;`LOCK;`CONTROL;`MOD1;`MOD2;`MOD3;`MOD4;`MOD5;`BUTTON1;`BUTTON2;`BUTTON3;`BUTTON4;`BUTTON5;`SUPER;`HYPER;`META;`RELEASE]~f:(funm->test_modifiermi)externaltest_window_state:window_state->int->bool="ml_test_GdkWindowState_val"letwindow_statei=List.filter[`WITHDRAWN;`ICONIFIED;`MAXIMIZED;`STICKY]~f:(funm->test_window_statemi)endmoduleAtom=structexternalintern:string->bool->atom="ml_gdk_atom_intern"letintern?(dont_create=false)name=internnamedont_createexternalname:atom->string="ml_gdk_atom_name"letnone=intern"NONE"letprimary=intern"PRIMARY"letsecondary=intern"SECONDARY"letclipboard=intern"CLIPBOARD"letstring=intern"STRING"endmoduleProperty=structexternalchange:window->property:atom->typ:atom->mode:property_mode->xdata->unit="ml_gdk_property_change"letchange~window~typ?(mode=`REPLACE)propertydata=changewindow~property~typ~modedataexternalget:window->property:atom->max_length:int->delete:bool->(atom*xdata)option="ml_gdk_property_get"letget~window?(max_length=65000)?(delete=false)property=getwindow~property~max_length~deleteexternaldelete:window:window->atom->unit="ml_gdk_property_delete"endmoduleScreen=structexternalget_width:screen->int="ml_gdk_screen_get_width"externalwidth:unit->int="ml_gdk_screen_width"letwidth?screen()=matchscreenwithNone->width()|Somes->get_widthsexternalget_height:screen->int="ml_gdk_screen_get_height"externalheight:unit->int="ml_gdk_screen_height"letheight?screen()=matchscreenwithNone->height()|Somes->get_heightsexternalget_pango_context_for:screen->Pango.context="ml_gdk_pango_context_get_for_screen"externalget_pango_context:unit->Pango.context="ml_gdk_pango_context_get"letget_pango_context?screen()=matchscreenwithNone->get_pango_context()|Somes->get_pango_context_fors(* Only with Gtk-2.2 *)externaldefault:unit->screen="ml_gdk_screen_get_default"endmoduleVisual=structtypevisual_type=[`STATIC_GRAY|`GRAYSCALE|`STATIC_COLOR|`PSEUDO_COLOR|`TRUE_COLOR|`DIRECT_COLOR]externalget_best:?depth:int->?kind:visual_type->unit->visual="ml_gdk_visual_get_best"externalget_screen:visual->screen="ml_gdk_visual_get_screen"externalget_type:visual->visual_type="ml_gdk_visual_get_visual_type"externaldepth:visual->int="ml_gdk_visual_get_depth"endmoduleColor=struct(* Removed in GdkColor 3.0
external color_white : colormap -> color = "ml_gdk_color_white"
external color_black : colormap -> color = "ml_gdk_color_black"
*)externalcolor_parse:string->color="ml_gdk_color_parse"externalcolor_to_string:color->string="ml_gdk_color_to_string"(* Removed in GdkColor 3.0
external color_alloc : colormap -> color -> bool = "ml_gdk_color_alloc"
*)externalcolor_create:red:int->green:int->blue:int->color="ml_GdkColor"(* Removed in GdkColor 3.0
external get_system_colormap : unit -> colormap
= "ml_gdk_colormap_get_system"
external colormap_new : visual -> privat:bool -> colormap
= "ml_gdk_colormap_new"
let get_colormap ?(privat=false) vis = colormap_new vis ~privat
external get_visual : colormap -> visual
= "ml_gdk_colormap_get_visual"
type spec = [ `BLACK | `NAME of string | `RGB of int * int * int | `WHITE]
let color_alloc ~colormap color =
if not (color_alloc colormap color) then raise (Error"Color.alloc");
color
let alloc ~colormap color =
match color with
`WHITE -> color_white colormap
| `BLACK -> color_black colormap
| `NAME s -> color_alloc ~colormap (color_parse s)
| `RGB (red,green,blue) ->
color_alloc ~colormap (color_create ~red ~green ~blue)
*)(* deprecated in 3.14 in favor of RGBA *)externalred:color->int="ml_GdkColor_red"externalblue:color->int="ml_GdkColor_blue"externalgreen:color->int="ml_GdkColor_green"externalpixel:color->int="ml_GdkColor_pixel"endmoduleRectangle=structtypetexternalcreate:x:int->y:int->width:int->height:int->t="ml_GdkRectangle"externalx:t->int="ml_GdkRectangle_x"externaly:t->int="ml_GdkRectangle_y"externalwidth:t->int="ml_GdkRectangle_width"externalheight:t->int="ml_GdkRectangle_height"endmoduleWindowing=structexternalget:unit->[`QUARTZ|`WIN32|`X11]="ml_gdk_get_platform"letplatform=get()endmoduleWindow=structletcastw:window=Gobject.try_castw"GdkWindow"externalcreate_foreign:display->xid->window="ml_gdk_x11_window_foreign_new_for_display"externalget_parent:window->window="ml_gdk_window_get_parent"externalget_position:window->int*int="ml_gdk_window_get_position"externalget_origin:window->int*int="ml_gdk_window_get_origin"externalget_pointer_location:window->int*int="ml_gdk_window_get_pointer_location"(* external root_parent : unit -> window = "ml_GDK_ROOT_PARENT" *)(* external set_back_pixmap : window -> pixmap -> int -> unit =
"ml_gdk_window_set_back_pixmap" *)externalset_cursor:window->cursor->unit="ml_gdk_window_set_cursor"(* external clear : window -> unit = "ml_gdk_window_clear"
external clear_area :
window -> x:int -> y:int -> width:int -> height:int -> unit
= "ml_gdk_window_clear" *)externalget_xid:window->xid="ml_GDK_WINDOW_XID"letget_xwindow=get_xidexternalget_visual:window->visual="ml_gdk_window_get_visual"(* let set_back_pixmap w pix =
let null_pixmap = (Obj.magic Gpointer.boxed_null : pixmap) in
match pix with
`NONE -> set_back_pixmap w null_pixmap 0
| `PARENT_RELATIVE -> set_back_pixmap w null_pixmap 1
| `PIXMAP(pixmap) -> set_back_pixmap w pixmap 0
(* anything OK, Maybe... *) *)letxid_of_native(w:native_window):xid=ifWindowing.platform=`X11thenObj.magicwelsefailwith"Gdk.Window.xid_of_native only allowed for X11"letnative_of_xid(id:xid):native_window=ifWindowing.platform=`X11thenObj.magicidelsefailwith"Gdk.Window.native_of_xid only allowed for X11"externalset_transient_for:window->window->unit="ml_gdk_window_set_transient_for"endmoduleDnD=structexternaldrag_status:drag_context->drag_actionoption->time:int32->unit="ml_gdk_drag_status"externaldrag_context_suggested_action:drag_context->drag_action="ml_gdk_drag_context_get_suggested_action"externaldrag_context_targets:drag_context->atomlist="ml_gdk_drag_context_list_targets"end(*
module Truecolor = struct
(* Truecolor quick color query *)
type visual_shift_prec = {
red_shift : int;
red_prec : int;
green_shift : int;
green_prec : int;
blue_shift : int;
blue_prec : int
}
let shift_prec visual = {
red_shift = Visual.red_shift visual;
red_prec = Visual.red_prec visual;
green_shift = Visual.green_shift visual;
green_prec = Visual.green_prec visual;
blue_shift = Visual.blue_shift visual;
blue_prec = Visual.blue_prec visual;
}
let color_creator visual =
match Visual.get_type visual with
`TRUE_COLOR | `DIRECT_COLOR ->
let shift_prec = shift_prec visual in
(* Format.eprintf "red : %d %d, "
shift_prec.red_shift shift_prec.red_prec;
Format.eprintf "green : %d %d, "
shift_prec.green_shift shift_prec.green_prec;
Format.eprintf "blue : %d %d"
shift_prec.blue_shift shift_prec.blue_prec;
Format.pp_print_newline Format.err_formatter (); *)
let red_lsr = 16 - shift_prec.red_prec
and green_lsr = 16 - shift_prec.green_prec
and blue_lsr = 16 - shift_prec.blue_prec in
fun ~red: red ~green: green ~blue: blue ->
(((red lsr red_lsr) lsl shift_prec.red_shift) lor
((green lsr green_lsr) lsl shift_prec.green_shift) lor
((blue lsr blue_lsr) lsl shift_prec.blue_shift))
| _ -> raise (Invalid_argument "Gdk.Truecolor.color_creator")
let color_parser visual =
match Visual.get_type visual with
`TRUE_COLOR | `DIRECT_COLOR ->
let shift_prec = shift_prec visual in
let red_lsr = 16 - shift_prec.red_prec
and green_lsr = 16 - shift_prec.green_prec
and blue_lsr = 16 - shift_prec.blue_prec in
let mask = 1 lsl 16 - 1 in
fun pixel ->
((pixel lsr shift_prec.red_shift) lsl red_lsr) land mask,
((pixel lsr shift_prec.green_shift) lsl green_lsr) land mask,
((pixel lsr shift_prec.blue_shift) lsl blue_lsr) land mask
| _ -> raise (Invalid_argument "Gdk.Truecolor.color_parser")
end
*)moduleX=struct(* X related functions *)externalflush:unit->unit="ml_gdk_flush"externalbeep:unit->unit="ml_gdk_beep"endmoduleCursor=structtypecursor_type=[|`X_CURSOR|`ARROW|`BASED_ARROW_DOWN|`BASED_ARROW_UP|`BOAT|`BOGOSITY|`BOTTOM_LEFT_CORNER|`BOTTOM_RIGHT_CORNER|`BOTTOM_SIDE|`BOTTOM_TEE|`BOX_SPIRAL|`CENTER_PTR|`CIRCLE|`CLOCK|`COFFEE_MUG|`CROSS|`CROSS_REVERSE|`CROSSHAIR|`DIAMOND_CROSS|`DOT|`DOTBOX|`DOUBLE_ARROW|`DRAFT_LARGE|`DRAFT_SMALL|`DRAPED_BOX|`EXCHANGE|`FLEUR|`GOBBLER|`GUMBY|`HAND1|`HAND2|`HEART|`ICON|`IRON_CROSS|`LEFT_PTR|`LEFT_SIDE|`LEFT_TEE|`LEFTBUTTON|`LL_ANGLE|`LR_ANGLE|`MAN|`MIDDLEBUTTON|`MOUSE|`PENCIL|`PIRATE|`PLUS|`QUESTION_ARROW|`RIGHT_PTR|`RIGHT_SIDE|`RIGHT_TEE|`RIGHTBUTTON|`RTL_LOGO|`SAILBOAT|`SB_DOWN_ARROW|`SB_H_DOUBLE_ARROW|`SB_LEFT_ARROW|`SB_RIGHT_ARROW|`SB_UP_ARROW|`SB_V_DOUBLE_ARROW|`SHUTTLE|`SIZING|`SPIDER|`SPRAYCAN|`STAR|`TARGET|`TCROSS|`TOP_LEFT_ARROW|`TOP_LEFT_CORNER|`TOP_RIGHT_CORNER|`TOP_SIDE|`TOP_TEE|`TREK|`UL_ANGLE|`UMBRELLA|`UR_ANGLE|`WATCH|`XTERM]externalcreate:cursor_type->cursor="ml_gdk_cursor_new"externalcreate_from_pixbuf:[`pixbuf]obj->x:int->y:int->cursor="ml_gdk_cursor_new_from_pixbuf"(** @since GTK 2.4 *)externalget_image:cursor->[`pixbuf]obj="ml_gdk_cursor_get_image"(** @since GTK 2.8 *)endmoduleDisplay=struct(* since Gtk+-2.2 *)externaldefault:unit->display="ml_gdk_display_get_default"externalget_window_at_pointer:display->(window*int*int)option="ml_gdk_display_get_window_at_pointer"letwindow_at_pointer?display()=get_window_at_pointer(matchdisplaywithNone->default()|Somedisp->disp)endmoduleCairo=structexternalcreate:window->cairo="ml_gdk_cairo_create"end